{"_id":"@spfn/notification","_rev":"44-c788f6a4ca305260fe4b0c6d23a46fc1","name":"@spfn/notification","dist-tags":{"latest":"0.2.0-beta.10","beta":"0.2.0-beta.10"},"versions":{"0.1.0-beta.1":{"name":"@spfn/notification","version":"0.1.0-beta.1","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"author":{"name":"Ray Im","email":"rayim@inflike.com"},"license":"MIT","_id":"@spfn/notification@0.1.0-beta.1","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"7e636c4655ad092b357e1f0534dd8c2d2ef8cd58","tarball":"https://registry.npmjs.org/@spfn/notification/-/notification-0.1.0-beta.1.tgz","fileCount":13,"integrity":"sha512-D2kf7f3tI8l/7WLjXJwFqkn7vJw8f6BRyQeNgmLw+4/B1/Yr1AyA3Sqcy/IwRjg3UDiZD0HmOL+s1NkjYFjyqQ==","signatures":[{"sig":"MEYCIQC5CNsQjIw5pvBkyQbbz3GXVm6prIIwPTa6CAUrYIZ+WwIhALVp1GpKNTMoylXjBGSJONBiWYQqU8M+egQEQ0MpG7nz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fnotification@0.1.0-beta.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":572249},"type":"module","_from":"file:spfn-notification-0.1.0-beta.1.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./config":{"types":"./dist/config/index.d.ts","import":"./dist/config/index.js","require":"./dist/config/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","test:watch":"vitest","type-check":"tsc --noEmit","check:circular":"madge --circular --extensions ts src/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/8ed2220f2f7af12a3ce903615f666c68/spfn-notification-0.1.0-beta.1.tgz","_integrity":"sha512-D2kf7f3tI8l/7WLjXJwFqkn7vJw8f6BRyQeNgmLw+4/B1/Yr1AyA3Sqcy/IwRjg3UDiZD0HmOL+s1NkjYFjyqQ==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/notification"},"_npmVersion":"11.8.0","description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@spfn/core":"0.2.0-beta.11"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-orm":"^0.44.2","@sinclair/typebox":"^0.34.30"},"peerDependencies":{"@aws-sdk/client-ses":"^3.0.0","@aws-sdk/client-sns":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ses":{"optional":true},"@aws-sdk/client-sns":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/notification_0.1.0-beta.1_1769346497426_0.2089126257161067","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.2":{"name":"@spfn/notification","version":"0.1.0-beta.2","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"author":{"name":"Ray Im","email":"rayim@inflike.com"},"license":"MIT","_id":"@spfn/notification@0.1.0-beta.2","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"ff6d6d7639fdf4117f0e1b04a2da22cf305c38ce","tarball":"https://registry.npmjs.org/@spfn/notification/-/notification-0.1.0-beta.2.tgz","fileCount":13,"integrity":"sha512-hQontzdrrYS+doNUz8zGpvYual8TiL1+P4SXjGwWklTrHmYsVFZOYQxTnAJpKlrdUr8Q7rnbA82Mp7GmgoCYFA==","signatures":[{"sig":"MEUCIGn4RXzorHYgwP9rL/oVS5LrzHySRqEVXKvyv5tdYr5DAiEA+S0PVb0xuTG57OLeL+sWKqEhaoX53tcUX5ASk/kp3Qo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fnotification@0.1.0-beta.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":595561},"type":"module","_from":"file:spfn-notification-0.1.0-beta.2.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./config":{"types":"./dist/config/index.d.ts","import":"./dist/config/index.js","require":"./dist/config/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","test:watch":"vitest","type-check":"tsc --noEmit","check:circular":"madge --circular --extensions ts src/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/7818bb1f7dca05640e7ab11b8c89db92/spfn-notification-0.1.0-beta.2.tgz","_integrity":"sha512-hQontzdrrYS+doNUz8zGpvYual8TiL1+P4SXjGwWklTrHmYsVFZOYQxTnAJpKlrdUr8Q7rnbA82Mp7GmgoCYFA==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/notification"},"_npmVersion":"11.10.0","description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@spfn/core":"0.2.0-beta.16"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-orm":"^0.44.2","@sinclair/typebox":"^0.34.30"},"peerDependencies":{"@aws-sdk/client-ses":"^3.0.0","@aws-sdk/client-sns":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ses":{"optional":true},"@aws-sdk/client-sns":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/notification_0.1.0-beta.2_1771313215041_0.34251736626221363","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.3":{"name":"@spfn/notification","version":"0.1.0-beta.3","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"author":{"name":"Ray Im","email":"rayim@inflike.com"},"license":"MIT","_id":"@spfn/notification@0.1.0-beta.3","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"c9f896b58a7e997bbe0e5630a64db1ec3faa1ee3","tarball":"https://registry.npmjs.org/@spfn/notification/-/notification-0.1.0-beta.3.tgz","fileCount":13,"integrity":"sha512-4pX5QThHWcJOgBW38gZFl17W8keG3SVWzoM7OQphgCBsej4rm2X+F+MQCMz7dZgJQPMh8jbloE33ZL+lfxxdgA==","signatures":[{"sig":"MEQCID/9ygx442Audl5lioeAGWnHTCmb5uf53yEiMocqET1+AiAQ1ttT4dewIuJKEobZcKrHyCmfkY78R93l1TziBChBEQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fnotification@0.1.0-beta.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":598536},"type":"module","_from":"file:spfn-notification-0.1.0-beta.3.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./config":{"types":"./dist/config/index.d.ts","import":"./dist/config/index.js","require":"./dist/config/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","test:watch":"vitest","type-check":"tsc --noEmit","check:circular":"madge --circular --extensions ts src/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/3cbf822c8096d2d8c0ecbf3e66726500/spfn-notification-0.1.0-beta.3.tgz","_integrity":"sha512-4pX5QThHWcJOgBW38gZFl17W8keG3SVWzoM7OQphgCBsej4rm2X+F+MQCMz7dZgJQPMh8jbloE33ZL+lfxxdgA==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/notification"},"_npmVersion":"11.10.0","description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@spfn/core":"0.2.0-beta.16"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-orm":"^0.44.2","@sinclair/typebox":"^0.34.30"},"peerDependencies":{"@aws-sdk/client-ses":"^3.0.0","@aws-sdk/client-sns":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ses":{"optional":true},"@aws-sdk/client-sns":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/notification_0.1.0-beta.3_1771324880932_0.9196036631247055","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.4":{"name":"@spfn/notification","version":"0.1.0-beta.4","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"author":{"name":"Ray Im","email":"rayim@inflike.com"},"license":"MIT","_id":"@spfn/notification@0.1.0-beta.4","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"1e28596f23902f9fc887eb31587379321c046c53","tarball":"https://registry.npmjs.org/@spfn/notification/-/notification-0.1.0-beta.4.tgz","fileCount":13,"integrity":"sha512-KDOjOEXP5N1xMru3v8JvMdGlg7gcPSA02s0s+2pxSPR+bip3r2N2H5J5bRFE3jKh2dUI6GUZwJy0uZASkQ63AA==","signatures":[{"sig":"MEUCIG1amwLGv7puA3A4TrJ8mx1icpmvC4ICov+18DRHHgU2AiEAm/VVNU5WZNewZjVn9jPr0cuW8FFMwBpZVkfLsT5Gf4o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fnotification@0.1.0-beta.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":601088},"type":"module","_from":"file:spfn-notification-0.1.0-beta.4.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./config":{"types":"./dist/config/index.d.ts","import":"./dist/config/index.js","require":"./dist/config/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","test:watch":"vitest","type-check":"tsc --noEmit","check:circular":"madge --circular --extensions ts src/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/30ae11e6ce47a3b0cf844b8bbdf67f59/spfn-notification-0.1.0-beta.4.tgz","_integrity":"sha512-KDOjOEXP5N1xMru3v8JvMdGlg7gcPSA02s0s+2pxSPR+bip3r2N2H5J5bRFE3jKh2dUI6GUZwJy0uZASkQ63AA==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/notification"},"_npmVersion":"11.10.1","description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@spfn/core":"0.2.0-beta.18"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-orm":"^0.44.2","@sinclair/typebox":"^0.34.30"},"peerDependencies":{"@aws-sdk/client-ses":"^3.0.0","@aws-sdk/client-sns":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ses":{"optional":true},"@aws-sdk/client-sns":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/notification_0.1.0-beta.4_1771567556540_0.4570879612134089","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.5":{"name":"@spfn/notification","version":"0.1.0-beta.5","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"author":{"name":"Ray Im","email":"rayim@inflike.com"},"license":"MIT","_id":"@spfn/notification@0.1.0-beta.5","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"ac1e4fb9646cab7aaacedc8f9a80b18586c7c110","tarball":"https://registry.npmjs.org/@spfn/notification/-/notification-0.1.0-beta.5.tgz","fileCount":13,"integrity":"sha512-NLvTOmQJgN+w75vdwbNzl4Yf9TeS68a9bXk0hz1dRow5iZrYEVIYIiJME/wfUbBewallbVKVPm9Xz8Q9wgfk2A==","signatures":[{"sig":"MEUCIQD6+s8E37Dxl7eWP9Bc5kVr/6VnstDeIYTQBy9AQUH9UAIgO+6LYCE/KAUacKh7fUl/1QuzVortguteaXdZZ3GHQgE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fnotification@0.1.0-beta.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":609572},"spfn":{"schemas":["./dist/entities/*.js"],"migrations":{"dir":"./migrations"}},"type":"module","_from":"file:spfn-notification-0.1.0-beta.5.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./config":{"types":"./dist/config/index.d.ts","import":"./dist/config/index.js","require":"./dist/config/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","test:watch":"vitest","type-check":"tsc --noEmit","check:circular":"madge --circular --extensions ts src/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/da29b89c64d900b8a89bf35107e10742/spfn-notification-0.1.0-beta.5.tgz","_integrity":"sha512-NLvTOmQJgN+w75vdwbNzl4Yf9TeS68a9bXk0hz1dRow5iZrYEVIYIiJME/wfUbBewallbVKVPm9Xz8Q9wgfk2A==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/notification"},"_npmVersion":"11.10.1","description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@spfn/core":"0.2.0-beta.19"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.8","drizzle-orm":"^0.44.2","@sinclair/typebox":"^0.34.30"},"peerDependencies":{"@aws-sdk/client-ses":"^3.0.0","@aws-sdk/client-sns":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ses":{"optional":true},"@aws-sdk/client-sns":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/notification_0.1.0-beta.5_1771575841984_0.39044235148543094","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.6":{"name":"@spfn/notification","version":"0.1.0-beta.6","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"author":{"name":"Ray Im","email":"rayim@inflike.com"},"license":"MIT","_id":"@spfn/notification@0.1.0-beta.6","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"05298714d1bb291e02f5c0e6d048f556cab16726","tarball":"https://registry.npmjs.org/@spfn/notification/-/notification-0.1.0-beta.6.tgz","fileCount":16,"integrity":"sha512-rOO0B4sAGQTZp94EyCR84FL2AMPLoaYp1fxq0Eq89eMKB0T/ZMmQhghMuujeLKm/F9LV+VxVOFVJ3iEn7pwU+A==","signatures":[{"sig":"MEYCIQCaGHlEZ897szyvZ2F/xYn2Js6s74Z2RBrW+r4EyW3lfQIhAIt+fKeG3wObTWGijobB31jjetZr4bNnae9uCG9wQbky","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fnotification@0.1.0-beta.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":618479},"spfn":{"schemas":["./dist/entities/*.js"],"migrations":{"dir":"./migrations"}},"type":"module","_from":"file:spfn-notification-0.1.0-beta.6.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./config":{"types":"./dist/config/index.d.ts","import":"./dist/config/index.js","require":"./dist/config/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","test:watch":"vitest","type-check":"tsc --noEmit","check:circular":"madge --circular --extensions ts src/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/8e44003c22ac6763e8046883fb575898/spfn-notification-0.1.0-beta.6.tgz","_integrity":"sha512-rOO0B4sAGQTZp94EyCR84FL2AMPLoaYp1fxq0Eq89eMKB0T/ZMmQhghMuujeLKm/F9LV+VxVOFVJ3iEn7pwU+A==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/notification"},"_npmVersion":"11.10.1","description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@spfn/core":"0.2.0-beta.19"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.8","drizzle-orm":"^0.44.2","@sinclair/typebox":"^0.34.30"},"peerDependencies":{"@aws-sdk/client-ses":"^3.0.0","@aws-sdk/client-sns":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ses":{"optional":true},"@aws-sdk/client-sns":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/notification_0.1.0-beta.6_1771586214037_0.6277543630879425","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.7":{"name":"@spfn/notification","version":"0.1.0-beta.7","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"author":{"name":"Ray Im","email":"rayim@inflike.com"},"license":"MIT","_id":"@spfn/notification@0.1.0-beta.7","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"4ac85dc4079c94b5c3932ef37afa3a10b98c4118","tarball":"https://registry.npmjs.org/@spfn/notification/-/notification-0.1.0-beta.7.tgz","fileCount":16,"integrity":"sha512-WrOsx6iHIhfEOaxbGpJta4/TBb9QXZmcHiKcRrDsj38U850vIHe22/77lSoLlZKbo81An98c8PcMkF/jLmWT5Q==","signatures":[{"sig":"MEQCIDas3MPN4rF0BYl2sAIcWSt2uRh/vQRe5/aRfSNEn3d9AiAftoHXQRUPBf+Ob1Xlh1jUr/YLNjlw/U+vz5FdYMgnow==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fnotification@0.1.0-beta.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":618619},"spfn":{"schemas":["./dist/entities/*.js"],"migrations":{"dir":"./migrations"}},"type":"module","_from":"file:spfn-notification-0.1.0-beta.7.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./config":{"types":"./dist/config/index.d.ts","import":"./dist/config/index.js","require":"./dist/config/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","test:watch":"vitest","type-check":"tsc --noEmit","check:circular":"madge --circular --extensions ts src/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/322aafc5963da93f977b529016772f2e/spfn-notification-0.1.0-beta.7.tgz","_integrity":"sha512-WrOsx6iHIhfEOaxbGpJta4/TBb9QXZmcHiKcRrDsj38U850vIHe22/77lSoLlZKbo81An98c8PcMkF/jLmWT5Q==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/notification"},"_npmVersion":"11.10.1","description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@spfn/core":"0.2.0-beta.19"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.8","drizzle-orm":"^0.44.2","@sinclair/typebox":"^0.34.30"},"peerDependencies":{"@aws-sdk/client-ses":"^3.0.0","@aws-sdk/client-sns":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ses":{"optional":true},"@aws-sdk/client-sns":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/notification_0.1.0-beta.7_1771588594746_0.5129923598674406","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.8":{"name":"@spfn/notification","version":"0.1.0-beta.8","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"author":{"name":"Ray Im","email":"rayim@inflike.com"},"license":"MIT","_id":"@spfn/notification@0.1.0-beta.8","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"e0d7924d4cda9814b0c75bb0067c0169e9ca7208","tarball":"https://registry.npmjs.org/@spfn/notification/-/notification-0.1.0-beta.8.tgz","fileCount":16,"integrity":"sha512-OQyTgZz9IrE5/D56bvja/q0DL3zt3Ulcn7GHQ78g+BJc3eBUpBvmCJwNUq7jmS6xDbnfcrUsXWDU/enb6ugesg==","signatures":[{"sig":"MEUCIQCfurCXkU5Ca3NF0SxGj4GyODwF3mKOGIKEKFKNzKqGrgIgBQAPkBXVLiyCh6or8UeHk1ku7TNdKg+Kv/SmkrHB7JY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fnotification@0.1.0-beta.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":618619},"spfn":{"schemas":["./dist/entities/*.js"],"migrations":{"dir":"./migrations"}},"type":"module","_from":"file:spfn-notification-0.1.0-beta.8.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./config":{"types":"./dist/config/index.d.ts","import":"./dist/config/index.js","require":"./dist/config/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","test:watch":"vitest","type-check":"tsc --noEmit","check:circular":"madge --circular --extensions ts src/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/acf5cdfe42d2bd300bb27387fb46ba09/spfn-notification-0.1.0-beta.8.tgz","_integrity":"sha512-OQyTgZz9IrE5/D56bvja/q0DL3zt3Ulcn7GHQ78g+BJc3eBUpBvmCJwNUq7jmS6xDbnfcrUsXWDU/enb6ugesg==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/notification"},"_npmVersion":"11.10.1","description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@spfn/core":"0.2.0-beta.20"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.8","drizzle-orm":"^0.44.2","@sinclair/typebox":"^0.34.30"},"peerDependencies":{"@aws-sdk/client-ses":"^3.0.0","@aws-sdk/client-sns":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ses":{"optional":true},"@aws-sdk/client-sns":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/notification_0.1.0-beta.8_1771736740494_0.88970465860608","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.9":{"name":"@spfn/notification","version":"0.1.0-beta.9","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"author":{"name":"Ray Im","email":"rayim@inflike.com"},"license":"MIT","_id":"@spfn/notification@0.1.0-beta.9","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"5040f15bf0283cb50f99f27760dcb74b1dc7aadc","tarball":"https://registry.npmjs.org/@spfn/notification/-/notification-0.1.0-beta.9.tgz","fileCount":16,"integrity":"sha512-iPCOdHGyF4l3iEowTmw83+COZ/QE8dcjnJQ5Bj+3FjqmNUokGL525PVxNYi6bjrXfBca20YH+hEK6XSfDOjWZA==","signatures":[{"sig":"MEYCIQChGLFlCV7f+0Gdn3UFGGeOjqwOIKre0uUAPUXqlyuT1QIhAO0kF/TPqOAy1UX++9uIcKTWhyqYxAiz9/MmwtV3cx/H","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fnotification@0.1.0-beta.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":618619},"spfn":{"schemas":["./dist/entities/*.js"],"migrations":{"dir":"./migrations"}},"type":"module","_from":"file:spfn-notification-0.1.0-beta.9.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./config":{"types":"./dist/config/index.d.ts","import":"./dist/config/index.js","require":"./dist/config/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","test:watch":"vitest","type-check":"tsc --noEmit","check:circular":"madge --circular --extensions ts src/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/b1f396538c19f41de711349794980d6d/spfn-notification-0.1.0-beta.9.tgz","_integrity":"sha512-iPCOdHGyF4l3iEowTmw83+COZ/QE8dcjnJQ5Bj+3FjqmNUokGL525PVxNYi6bjrXfBca20YH+hEK6XSfDOjWZA==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/notification"},"_npmVersion":"11.10.1","description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@spfn/core":"0.2.0-beta.21"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.8","drizzle-orm":"^0.44.2","@sinclair/typebox":"^0.34.30"},"peerDependencies":{"@aws-sdk/client-ses":"^3.0.0","@aws-sdk/client-sns":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ses":{"optional":true},"@aws-sdk/client-sns":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/notification_0.1.0-beta.9_1771745321600_0.164644433552388","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.10":{"name":"@spfn/notification","version":"0.1.0-beta.10","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"author":{"name":"Ray Im","email":"rayim@inflike.com"},"license":"MIT","_id":"@spfn/notification@0.1.0-beta.10","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"e16ce0ca99ac9e5564479e9680246a7165c2f6d0","tarball":"https://registry.npmjs.org/@spfn/notification/-/notification-0.1.0-beta.10.tgz","fileCount":16,"integrity":"sha512-6FkPKE5QWBHDfD54/GEh1j9S7OHJJw1UD228j48YeYrqPAGdy0TmcaSD0XGeCBvxL+uLA5RIXgY0VC4AQkB9Ew==","signatures":[{"sig":"MEUCIQC2tM5pSQK1xUBEXI8fQbFvZBULTSsHsgqkvIu5Gd2w8wIgTqMc9SXYWoeuf6OSWJcsBbwU0cF32WHwnw8aSnBAA+0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fnotification@0.1.0-beta.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":618620},"spfn":{"schemas":["./dist/entities/*.js"],"migrations":{"dir":"./migrations"}},"type":"module","_from":"file:spfn-notification-0.1.0-beta.10.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./config":{"types":"./dist/config/index.d.ts","import":"./dist/config/index.js","require":"./dist/config/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","test:watch":"vitest","type-check":"tsc --noEmit","check:circular":"madge --circular --extensions ts src/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/fbb869307d3042bc6dcf6f49bac483d0/spfn-notification-0.1.0-beta.10.tgz","_integrity":"sha512-6FkPKE5QWBHDfD54/GEh1j9S7OHJJw1UD228j48YeYrqPAGdy0TmcaSD0XGeCBvxL+uLA5RIXgY0VC4AQkB9Ew==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/notification"},"_npmVersion":"11.10.1","description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@spfn/core":"0.2.0-beta.22"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.8","drizzle-orm":"^0.44.2","@sinclair/typebox":"^0.34.30"},"peerDependencies":{"@aws-sdk/client-ses":"^3.0.0","@aws-sdk/client-sns":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ses":{"optional":true},"@aws-sdk/client-sns":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/notification_0.1.0-beta.10_1771752892086_0.8436051183684539","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.11":{"name":"@spfn/notification","version":"0.1.0-beta.11","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"author":{"name":"Ray Im","email":"rayim@inflike.com"},"license":"MIT","_id":"@spfn/notification@0.1.0-beta.11","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"b5f5213cf42ca895986b93150fff2ad12946459d","tarball":"https://registry.npmjs.org/@spfn/notification/-/notification-0.1.0-beta.11.tgz","fileCount":16,"integrity":"sha512-4hazgUXYSHLKN06oB9sesmExpLvwy1Megp7YfRv9ACPErYYcP1y6RDScxkcDYm8n9w/N59YtHQog2/vsEeIYxQ==","signatures":[{"sig":"MEUCIQDe88uLfaGpLR5VkitVHG+VQaj4FQsk058x4bfGDd+HQgIgQRCRFDI46r3avuIHX9LsFsaOalwW9OwuB7qyh+Dh8eY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fnotification@0.1.0-beta.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":618620},"spfn":{"schemas":["./dist/entities/*.js"],"migrations":{"dir":"./migrations"}},"type":"module","_from":"file:spfn-notification-0.1.0-beta.11.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./config":{"types":"./dist/config/index.d.ts","import":"./dist/config/index.js","require":"./dist/config/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","test:watch":"vitest","type-check":"tsc --noEmit","check:circular":"madge --circular --extensions ts src/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/9ee40820e11e0f4a6b2267d1b223ab55/spfn-notification-0.1.0-beta.11.tgz","_integrity":"sha512-4hazgUXYSHLKN06oB9sesmExpLvwy1Megp7YfRv9ACPErYYcP1y6RDScxkcDYm8n9w/N59YtHQog2/vsEeIYxQ==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/notification"},"_npmVersion":"11.10.1","description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@spfn/core":"0.2.0-beta.23"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.8","drizzle-orm":"^0.44.2","@sinclair/typebox":"^0.34.30"},"peerDependencies":{"@aws-sdk/client-ses":"^3.0.0","@aws-sdk/client-sns":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ses":{"optional":true},"@aws-sdk/client-sns":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/notification_0.1.0-beta.11_1771833592374_0.3593067547563331","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.12":{"name":"@spfn/notification","version":"0.1.0-beta.12","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"author":{"name":"Ray Im","email":"rayim@inflike.com"},"license":"MIT","_id":"@spfn/notification@0.1.0-beta.12","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"7c3bd8294ba3e05d2c2b8482c7b052c41f367346","tarball":"https://registry.npmjs.org/@spfn/notification/-/notification-0.1.0-beta.12.tgz","fileCount":16,"integrity":"sha512-jclU27pLXzRt3Po04MUCuHwsIQChFrK9hvD6Ba3CbCEoHq3SXYXGUC13c+Gp/KP55wAENrifZvyGWt4TqvdSjw==","signatures":[{"sig":"MEYCIQDMc7xGyILebf6k6d+9Gc3nQqT12fk8i2vqZXOMSJyYiQIhAKkoQ56wuXdk1JcFir4IWqx6QX4urkUyq+Dc3i6ExRfF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fnotification@0.1.0-beta.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":618620},"spfn":{"schemas":["./dist/entities/*.js"],"migrations":{"dir":"./migrations"}},"type":"module","_from":"file:spfn-notification-0.1.0-beta.12.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./config":{"types":"./dist/config/index.d.ts","import":"./dist/config/index.js","require":"./dist/config/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","test:watch":"vitest","type-check":"tsc --noEmit","check:circular":"madge --circular --extensions ts src/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/490b9bb240a966256667eecbdff4fc0a/spfn-notification-0.1.0-beta.12.tgz","_integrity":"sha512-jclU27pLXzRt3Po04MUCuHwsIQChFrK9hvD6Ba3CbCEoHq3SXYXGUC13c+Gp/KP55wAENrifZvyGWt4TqvdSjw==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/notification"},"_npmVersion":"11.11.0","description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@spfn/core":"0.2.0-beta.29"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.8","drizzle-orm":"^0.44.2","@sinclair/typebox":"^0.34.30"},"peerDependencies":{"@aws-sdk/client-ses":"^3.0.0","@aws-sdk/client-sns":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ses":{"optional":true},"@aws-sdk/client-sns":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/notification_0.1.0-beta.12_1772811514981_0.09474819975576088","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.13":{"name":"@spfn/notification","version":"0.1.0-beta.13","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"author":{"name":"Ray Im","email":"rayim@inflike.com"},"license":"MIT","_id":"@spfn/notification@0.1.0-beta.13","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"93d057317fd2ad212ae1051da711685d42a852f4","tarball":"https://registry.npmjs.org/@spfn/notification/-/notification-0.1.0-beta.13.tgz","fileCount":16,"integrity":"sha512-7lOFqQsInQFESaw2alcaxxLrUH8lYziCUNP+PVTRceWU6VJYKMgFPM950gTxOwm9d0GHAG6scsXg48gzvQctMQ==","signatures":[{"sig":"MEQCIGY3ByAiQa5dKcG8qDmUS87AKV3SfFYSUsN03xaxQ0MZAiBYtRYErpW/UqLx8WJIU9OkK3WKi/glgTICvCn3Kl5kOA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fnotification@0.1.0-beta.13","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":618620},"spfn":{"schemas":["./dist/entities/*.js"],"migrations":{"dir":"./migrations"}},"type":"module","_from":"file:spfn-notification-0.1.0-beta.13.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./config":{"types":"./dist/config/index.d.ts","import":"./dist/config/index.js","require":"./dist/config/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","test:watch":"vitest","type-check":"tsc --noEmit","check:circular":"madge --circular --extensions ts src/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/d6387e9d3a5e829fb6227a3df241d832/spfn-notification-0.1.0-beta.13.tgz","_integrity":"sha512-7lOFqQsInQFESaw2alcaxxLrUH8lYziCUNP+PVTRceWU6VJYKMgFPM950gTxOwm9d0GHAG6scsXg48gzvQctMQ==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/notification"},"_npmVersion":"11.11.0","description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@spfn/core":"0.2.0-beta.30"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.8","drizzle-orm":"^0.44.2","@sinclair/typebox":"^0.34.30"},"peerDependencies":{"@aws-sdk/client-ses":"^3.0.0","@aws-sdk/client-sns":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ses":{"optional":true},"@aws-sdk/client-sns":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/notification_0.1.0-beta.13_1772812374474_0.9300984303640236","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.14":{"name":"@spfn/notification","version":"0.1.0-beta.14","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"author":{"name":"Ray Im","email":"rayim@inflike.com"},"license":"MIT","_id":"@spfn/notification@0.1.0-beta.14","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"ea366cc0a7f49c4e0db4a112a0650eba53b8411a","tarball":"https://registry.npmjs.org/@spfn/notification/-/notification-0.1.0-beta.14.tgz","fileCount":16,"integrity":"sha512-n/Jmq3T4o2nEeIb1xN0JCqKeU0nXhc9NEwhgtI2sK1HzH9qJcL09i54W2k5LEXDOFzViiX5PB4OCoTFoHOwxjg==","signatures":[{"sig":"MEUCIEhN9m3+8gMGHIan9HS+Tt7NIb/yUmJaY1D21Z81J+QFAiEA+jwlJ76LnmbuEei7yR5VWUfns0Dn72/zgdHgGeR7gxI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fnotification@0.1.0-beta.14","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":618620},"spfn":{"schemas":["./dist/entities/*.js"],"migrations":{"dir":"./migrations"}},"type":"module","_from":"file:spfn-notification-0.1.0-beta.14.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./config":{"types":"./dist/config/index.d.ts","import":"./dist/config/index.js","require":"./dist/config/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","test:watch":"vitest","type-check":"tsc --noEmit","check:circular":"madge --circular --extensions ts src/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/ca924067bb212d7bbcac082453a37cc7/spfn-notification-0.1.0-beta.14.tgz","_integrity":"sha512-n/Jmq3T4o2nEeIb1xN0JCqKeU0nXhc9NEwhgtI2sK1HzH9qJcL09i54W2k5LEXDOFzViiX5PB4OCoTFoHOwxjg==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/notification"},"_npmVersion":"11.11.0","description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@spfn/core":"0.2.0-beta.31"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.8","drizzle-orm":"^0.44.2","@sinclair/typebox":"^0.34.30"},"peerDependencies":{"@aws-sdk/client-ses":"^3.0.0","@aws-sdk/client-sns":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ses":{"optional":true},"@aws-sdk/client-sns":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/notification_0.1.0-beta.14_1772855905681_0.7570273957809428","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.15":{"name":"@spfn/notification","version":"0.1.0-beta.15","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"author":{"name":"Ray Im","email":"rayim@inflike.com"},"license":"MIT","_id":"@spfn/notification@0.1.0-beta.15","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"84a08d66587f5e2196f7fed35a83cf6552883fde","tarball":"https://registry.npmjs.org/@spfn/notification/-/notification-0.1.0-beta.15.tgz","fileCount":18,"integrity":"sha512-wNnVAjALKApQdsHa/sMP/Kd8zDhk5I2D17iSOEOKpiV7y0xCPd7murYx/Kvq5vh6olihxULcgFAeRskbBjG08w==","signatures":[{"sig":"MEQCIA2YFpJDrglZGVymHUyqVPyTt4dXi1ztLtqMWnzD8BOvAiBAUTqVoOPiQ7HqLAIsnaoNG4mu65iWDuhe5G9A5HfKVA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fnotification@0.1.0-beta.15","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":690173},"spfn":{"schemas":["./dist/entities/*.js"],"migrations":{"dir":"./migrations"}},"type":"module","_from":"file:spfn-notification-0.1.0-beta.15.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./config":{"types":"./dist/config/index.d.ts","import":"./dist/config/index.js","require":"./dist/config/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","test:watch":"vitest","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","check:circular":"madge --circular --extensions ts src/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/76081df5939206baf8b5b9764c813712/spfn-notification-0.1.0-beta.15.tgz","_integrity":"sha512-wNnVAjALKApQdsHa/sMP/Kd8zDhk5I2D17iSOEOKpiV7y0xCPd7murYx/Kvq5vh6olihxULcgFAeRskbBjG08w==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/notification"},"_npmVersion":"11.11.0","description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@spfn/core":"0.2.0-beta.31"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.8","drizzle-orm":"^0.44.2","@sinclair/typebox":"^0.34.30"},"peerDependencies":{"@aws-sdk/client-ses":"^3.0.0","@aws-sdk/client-sns":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ses":{"optional":true},"@aws-sdk/client-sns":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/notification_0.1.0-beta.15_1772981853069_0.8438818579950322","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.16":{"name":"@spfn/notification","version":"0.1.0-beta.16","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"author":{"name":"Ray Im","email":"rayim@inflike.com"},"license":"MIT","_id":"@spfn/notification@0.1.0-beta.16","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"27d0f9c120421e94dac6573803ff4f2a65782c6d","tarball":"https://registry.npmjs.org/@spfn/notification/-/notification-0.1.0-beta.16.tgz","fileCount":18,"integrity":"sha512-GQYxhAoNeqfRkqZiJjgtsTyx9PgPD18q45Seykk/PxgRKova6ZZWI3Nyi2bLcRndaMnqvsR8LKJV9c+S80D++g==","signatures":[{"sig":"MEUCIAUKVupyaA/Y5A221vXb6J13+p9x6Rc1THLNUa9JXqn0AiEA8706b0x83TqkLsmiCOCRFPeF46EdnLk7pLE5f3Ml8ls=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fnotification@0.1.0-beta.16","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":690173},"spfn":{"schemas":["./dist/entities/*.js"],"migrations":{"dir":"./migrations"}},"type":"module","_from":"file:spfn-notification-0.1.0-beta.16.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./config":{"types":"./dist/config/index.d.ts","import":"./dist/config/index.js","require":"./dist/config/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","test:watch":"vitest","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","check:circular":"madge --circular --extensions ts src/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/a8d2610401deaec4f61d013c8075c90c/spfn-notification-0.1.0-beta.16.tgz","_integrity":"sha512-GQYxhAoNeqfRkqZiJjgtsTyx9PgPD18q45Seykk/PxgRKova6ZZWI3Nyi2bLcRndaMnqvsR8LKJV9c+S80D++g==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/notification"},"_npmVersion":"11.11.0","description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@spfn/core":"0.2.0-beta.32"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.8","drizzle-orm":"^0.44.2","@sinclair/typebox":"^0.34.30"},"peerDependencies":{"@aws-sdk/client-ses":"^3.0.0","@aws-sdk/client-sns":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ses":{"optional":true},"@aws-sdk/client-sns":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/notification_0.1.0-beta.16_1773220846996_0.3717355420157349","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.17":{"name":"@spfn/notification","version":"0.1.0-beta.17","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"author":{"name":"Ray Im","email":"rayim@inflike.com"},"license":"MIT","_id":"@spfn/notification@0.1.0-beta.17","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"1f13c1a1670762e08c5b2a0046edde85bd94a924","tarball":"https://registry.npmjs.org/@spfn/notification/-/notification-0.1.0-beta.17.tgz","fileCount":18,"integrity":"sha512-OthshYDLXpuANnWP0ZIirfYoRohwUEQ1n23sJJiFKIQ/6MyycqAseyU1LjRKJrd2CHIoZfBzsjUqRndB8Qn81w==","signatures":[{"sig":"MEUCIQCY141VcicA3jScb6iFVxSIpW6y3nQVLC3YvaVSkfQZXQIgSdSZOWlKG+8AxSOWi+XnW8os1M1nBo3Xj8E8H8so49A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fnotification@0.1.0-beta.17","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":690173},"spfn":{"schemas":["./dist/entities/*.js"],"migrations":{"dir":"./migrations"}},"type":"module","_from":"file:spfn-notification-0.1.0-beta.17.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./config":{"types":"./dist/config/index.d.ts","import":"./dist/config/index.js","require":"./dist/config/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","test:watch":"vitest","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","check:circular":"madge --circular --extensions ts src/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/06290d69fd3e31457db676c252adde25/spfn-notification-0.1.0-beta.17.tgz","_integrity":"sha512-OthshYDLXpuANnWP0ZIirfYoRohwUEQ1n23sJJiFKIQ/6MyycqAseyU1LjRKJrd2CHIoZfBzsjUqRndB8Qn81w==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/notification"},"_npmVersion":"11.12.1","description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","directories":{},"_nodeVersion":"20.20.1","dependencies":{"@spfn/core":"0.2.0-beta.37"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.8","drizzle-orm":"^0.44.2","@sinclair/typebox":"^0.34.30"},"peerDependencies":{"@aws-sdk/client-ses":"^3.0.0","@aws-sdk/client-sns":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-ses":{"optional":true},"@aws-sdk/client-sns":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/notification_0.1.0-beta.17_1774592423143_0.3349164591199052","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.18":{"name":"@spfn/notification","version":"0.1.0-beta.18","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"author":{"name":"Ray Im","email":"rayim@inflike.com"},"license":"MIT","_id":"@spfn/notification@0.1.0-beta.18","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"0f0acc05d09a9a63859479a9fd3456754efa2455","tarball":"https://registry.npmjs.org/@spfn/notification/-/notification-0.1.0-beta.18.tgz","fileCount":18,"integrity":"sha512-+AAUPDKhO+ubVPwzU9un53GVInUGE6TPUCZ9KNs3OOdMHa2VEvbVkhjdMjfkmayL+1btbjoXxT7uCH4eug9M+Q==","signatures":[{"sig":"MEQCIAqd/YrNXKbUNazaElAxuUvxh82z2RVc0L5KOva5iKvWAiA83j+uTaSbebsdOgPnro7/4mSAMa0TdBBrz1TkaAw6+w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fnotification@0.1.0-beta.18","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":750745},"spfn":{"schemas":["./dist/entities/*.js"],"migrations":{"dir":"./migrations"}},"type":"module","_from":"file:spfn-notification-0.1.0-beta.18.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./config":{"types":"./dist/config/index.d.ts","import":"./dist/config/index.js","require":"./dist/config/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","test:watch":"vitest","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","check:circular":"madge --circular --extensions ts src/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/dddeffdb2e1782124e84836819c581d2/spfn-notification-0.1.0-beta.18.tgz","_integrity":"sha512-+AAUPDKhO+ubVPwzU9un53GVInUGE6TPUCZ9KNs3OOdMHa2VEvbVkhjdMjfkmayL+1btbjoXxT7uCH4eug9M+Q==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/notification"},"_npmVersion":"11.12.1","description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@spfn/core":"0.2.0-beta.43"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.8","drizzle-orm":"^0.44.2","@sinclair/typebox":"^0.34.30","@aws-sdk/client-sesv2":"^3.1024.0"},"peerDependencies":{"@aws-sdk/client-sns":"^3.0.0","@aws-sdk/client-sesv2":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-sns":{"optional":true},"@aws-sdk/client-sesv2":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/notification_0.1.0-beta.18_1775454661645_0.11128672800162809","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.19":{"name":"@spfn/notification","version":"0.1.0-beta.19","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"author":{"name":"Ray Im","email":"rayim@inflike.com"},"license":"MIT","_id":"@spfn/notification@0.1.0-beta.19","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"6b3f7b545c5d318702d8a7ddfd1e8327fdeaaf58","tarball":"https://registry.npmjs.org/@spfn/notification/-/notification-0.1.0-beta.19.tgz","fileCount":18,"integrity":"sha512-NlFvJbRgi74Eh+35LVC4o7nBVOsq3xDxgktThnzqQwnAefneRCGkAjhfS9OHd965RvwsKUxDbY8JOz4KbT8vzA==","signatures":[{"sig":"MEQCIEPr0EbL1/Wjz5XPx6GCvSkSyK26S8hkuZbO112XPUdLAiApspWdyvGzLEZ6xjS6DkOgvIsYMDxWSKwoRBEpo8v7kg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fnotification@0.1.0-beta.19","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":750758},"spfn":{"schemas":["./dist/entities/*.js"],"migrations":{"dir":"./migrations"}},"type":"module","_from":"file:spfn-notification-0.1.0-beta.19.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./config":{"types":"./dist/config/index.d.ts","import":"./dist/config/index.js","require":"./dist/config/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","test:watch":"vitest","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","check:circular":"madge --circular --extensions ts src/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/a03c22305e6658cc32831dac965d3464/spfn-notification-0.1.0-beta.19.tgz","_integrity":"sha512-NlFvJbRgi74Eh+35LVC4o7nBVOsq3xDxgktThnzqQwnAefneRCGkAjhfS9OHd965RvwsKUxDbY8JOz4KbT8vzA==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/notification"},"_npmVersion":"11.16.0","description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","directories":{},"_nodeVersion":"22.22.3","publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"0.2.0-beta.49","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.8","drizzle-orm":"^0.45.0","@sinclair/typebox":"^0.34.30","@aws-sdk/client-sesv2":"^3.1024.0"},"peerDependencies":{"@spfn/core":">=0.2.0-beta.49","@aws-sdk/client-sns":"^3.0.0","@aws-sdk/client-sesv2":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-sns":{"optional":true},"@aws-sdk/client-sesv2":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/notification_0.1.0-beta.19_1781107562176_0.41957333679858433","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.20":{"name":"@spfn/notification","version":"0.1.0-beta.20","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/notification@0.1.0-beta.20","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/notification#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"649b1461be951b12df2632151fa26c31b43df957","tarball":"https://registry.npmjs.org/@spfn/notification/-/notification-0.1.0-beta.20.tgz","fileCount":18,"integrity":"sha512-erQB/NBef8vxahH1b2/udalWtXD9UYesKdf4/DhPoVacEV562Qu2Cm4VNhI2dFOd0j/oquYMviiBy9/LrFtB9Q==","signatures":[{"sig":"MEQCIEc8XaWHo0XL3Evw6Ql8/R28w+9bZHugN8HldLLE0Gd0AiAEqren/CsJMLV5pQX37ivk/gDSJ9YQhB+ffChKg87skA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fnotification@0.1.0-beta.20","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":751006},"spfn":{"schemas":["./dist/entities/*.js"],"migrations":{"dir":"./migrations"}},"type":"module","_from":"file:spfn-notification-0.1.0-beta.20.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./config":{"types":"./dist/config/index.d.ts","import":"./dist/config/index.js","require":"./dist/config/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","test:watch":"vitest","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","check:circular":"madge --circular --extensions ts src/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/1f63266ec3d9a1154beca34680279e30/spfn-notification-0.1.0-beta.20.tgz","_integrity":"sha512-erQB/NBef8vxahH1b2/udalWtXD9UYesKdf4/DhPoVacEV562Qu2Cm4VNhI2dFOd0j/oquYMviiBy9/LrFtB9Q==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/notification"},"_npmVersion":"11.17.0","description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","directories":{},"_nodeVersion":"22.22.3","publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"0.2.0-beta.50","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.8","drizzle-orm":"^0.45.0","@sinclair/typebox":"^0.34.30","@aws-sdk/client-sesv2":"^3.1024.0"},"peerDependencies":{"@spfn/core":">=0.2.0-beta.49","@aws-sdk/client-sns":"^3.0.0","@aws-sdk/client-sesv2":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-sns":{"optional":true},"@aws-sdk/client-sesv2":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/notification_0.1.0-beta.20_1781600563867_0.09512624045388951","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.21":{"name":"@spfn/notification","version":"0.1.0-beta.21","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/notification@0.1.0-beta.21","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/notification#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"e60dc16bde89049e254f2dca1f0ab7dfe8b08ac0","tarball":"https://registry.npmjs.org/@spfn/notification/-/notification-0.1.0-beta.21.tgz","fileCount":18,"integrity":"sha512-EYMH+dBhLK+4mSMqY8Q5oWszHbRiy0RRRsjJlnKjZuVPfzw12TRgYGbm2rSvuamMzeSNLm7zPf1lCbp9MpY4xA==","signatures":[{"sig":"MEUCIQCE0zmSlYuW2HZl0AttSZAA6dSHSeTqVIgKQ7ND/k6MFgIgZx8rM+20rJynbIeGkAUhTfdg8pYa1XjVHFQUS7pY2+E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fnotification@0.1.0-beta.21","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":758520},"spfn":{"schemas":["./dist/entities/*.js"],"migrations":{"dir":"./migrations"}},"type":"module","_from":"file:spfn-notification-0.1.0-beta.21.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./config":{"types":"./dist/config/index.d.ts","import":"./dist/config/index.js","require":"./dist/config/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","test:watch":"vitest","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","check:circular":"madge --circular --extensions ts src/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/c4995388845f843b79dff5a4078dabc5/spfn-notification-0.1.0-beta.21.tgz","_integrity":"sha512-EYMH+dBhLK+4mSMqY8Q5oWszHbRiy0RRRsjJlnKjZuVPfzw12TRgYGbm2rSvuamMzeSNLm7zPf1lCbp9MpY4xA==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/notification"},"_npmVersion":"11.17.0","description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","directories":{},"_nodeVersion":"22.23.0","publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"0.2.0-beta.54","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.8","drizzle-orm":"^0.45.0","@sinclair/typebox":"^0.34.30","@aws-sdk/client-sesv2":"^3.1024.0"},"peerDependencies":{"@spfn/core":">=0.2.0-beta.54","@aws-sdk/client-sns":"^3.0.0","@aws-sdk/client-sesv2":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-sns":{"optional":true},"@aws-sdk/client-sesv2":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/notification_0.1.0-beta.21_1782548663922_0.42911984854502294","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.22":{"name":"@spfn/notification","version":"0.1.0-beta.22","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/notification@0.1.0-beta.22","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/notification#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"5a6fc4c2371ca412a16652cb9731ff9faf16b16c","tarball":"https://registry.npmjs.org/@spfn/notification/-/notification-0.1.0-beta.22.tgz","fileCount":18,"integrity":"sha512-FKO8xfhtVHYMvUHnVvxVE/Ww46CajCLhPRQVkkkHbxxc1ulSYlY0YgSyBLWn6wDe/wcj+fSKTLbw0NkaZUAjtQ==","signatures":[{"sig":"MEUCIQD5h/WIKzeuJ5Xhk8Tj274ljzDgKyOC6Ez5+xwT/IaeGwIgMfQvPY937RVvqCwCQ3BxGDzLoemcdmFsZMRUJ+aCGIA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fnotification@0.1.0-beta.22","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":758520},"spfn":{"schemas":["./dist/entities/*.js"],"migrations":{"dir":"./migrations"}},"type":"module","_from":"file:spfn-notification-0.1.0-beta.22.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./config":{"types":"./dist/config/index.d.ts","import":"./dist/config/index.js","require":"./dist/config/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","test:watch":"vitest","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","check:circular":"madge --circular --extensions ts src/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/e04cf4a01b671fc109f9d9ec9ae85c5a/spfn-notification-0.1.0-beta.22.tgz","_integrity":"sha512-FKO8xfhtVHYMvUHnVvxVE/Ww46CajCLhPRQVkkkHbxxc1ulSYlY0YgSyBLWn6wDe/wcj+fSKTLbw0NkaZUAjtQ==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/notification"},"_npmVersion":"11.17.0","description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","directories":{},"_nodeVersion":"22.23.0","publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"0.2.0-beta.55","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.8","drizzle-orm":"^0.45.0","@sinclair/typebox":"^0.34.30","@aws-sdk/client-sesv2":"^3.1024.0"},"peerDependencies":{"@spfn/core":">=0.2.0-beta.54","@aws-sdk/client-sns":"^3.0.0","@aws-sdk/client-sesv2":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-sns":{"optional":true},"@aws-sdk/client-sesv2":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/notification_0.1.0-beta.22_1782549712749_0.3996240627429315","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.23":{"name":"@spfn/notification","version":"0.1.0-beta.23","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/notification@0.1.0-beta.23","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/notification#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"1910e2832a97bd4268ba9be21c340dc092c1fa86","tarball":"https://registry.npmjs.org/@spfn/notification/-/notification-0.1.0-beta.23.tgz","fileCount":18,"integrity":"sha512-t9dTwqQQOpt8pM0ardS9W7ZOzI0BtxL47A0Dk/QVCgX+Vwc3I1trnwtT/7HhiL4EiCGN/R3i/yxCO8tbRavk9g==","signatures":[{"sig":"MEUCIBaLsNMBQmthh5zLSE+IefQwsCjBf60KfZoMhmkqnN5TAiEA0bLfUPAJ8+a2aD5cmv8BOLkgIg1y/xHU25NVYIOrtGw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fnotification@0.1.0-beta.23","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":764400},"spfn":{"schemas":["./dist/entities/*.js"],"migrations":{"dir":"./migrations"}},"type":"module","_from":"file:spfn-notification-0.1.0-beta.23.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./config":{"types":"./dist/config/index.d.ts","import":"./dist/config/index.js","require":"./dist/config/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","test:watch":"vitest","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","check:circular":"madge --circular --extensions ts src/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/9e003690b2be852b1308a0ddad932c0a/spfn-notification-0.1.0-beta.23.tgz","_integrity":"sha512-t9dTwqQQOpt8pM0ardS9W7ZOzI0BtxL47A0Dk/QVCgX+Vwc3I1trnwtT/7HhiL4EiCGN/R3i/yxCO8tbRavk9g==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/notification"},"_npmVersion":"11.17.0","description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","directories":{},"_nodeVersion":"22.23.0","publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"0.2.0-beta.56","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.8","drizzle-orm":"^0.45.0","@sinclair/typebox":"^0.34.30","@aws-sdk/client-sesv2":"^3.1024.0"},"peerDependencies":{"@spfn/core":">=0.2.0-beta.54","@aws-sdk/client-sns":"^3.0.0","@aws-sdk/client-sesv2":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-sns":{"optional":true},"@aws-sdk/client-sesv2":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/notification_0.1.0-beta.23_1782567667714_0.06080920422555991","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.24":{"name":"@spfn/notification","version":"0.1.0-beta.24","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/notification@0.1.0-beta.24","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/notification#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"6578c8cd014b34b1784eddc30bb9d9963908f31d","tarball":"https://registry.npmjs.org/@spfn/notification/-/notification-0.1.0-beta.24.tgz","fileCount":18,"integrity":"sha512-JNHA5tBK8gPoRmHScl/OuVnXNCBeWtWpWVs3tx5GqqZUzaKep91AlQWzq4/XKDQybH4dMdade+UakxPegZ47UQ==","signatures":[{"sig":"MEUCIQDQU6WMow9OtQ4npWusdZDFJ1qEY/IWoBcTbxv2hcRkfgIgMrQ8D04/BQr53Vi2U8N48NAEm/ANdSjq6u6QbfgJVxI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fnotification@0.1.0-beta.24","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":768377},"spfn":{"schemas":["./dist/entities/*.js"],"migrations":{"dir":"./migrations"}},"type":"module","_from":"file:spfn-notification-0.1.0-beta.24.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./config":{"types":"./dist/config/index.d.ts","import":"./dist/config/index.js","require":"./dist/config/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","test:watch":"vitest","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","check:circular":"madge --circular --extensions ts src/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/aa7561670f40128f226b099e01fcc48d/spfn-notification-0.1.0-beta.24.tgz","_integrity":"sha512-JNHA5tBK8gPoRmHScl/OuVnXNCBeWtWpWVs3tx5GqqZUzaKep91AlQWzq4/XKDQybH4dMdade+UakxPegZ47UQ==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/notification"},"_npmVersion":"11.17.0","description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","directories":{},"_nodeVersion":"22.23.0","publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"0.2.0-beta.56","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.8","drizzle-orm":"^0.45.0","@sinclair/typebox":"^0.34.30","@aws-sdk/client-sesv2":"^3.1024.0"},"peerDependencies":{"@spfn/core":">=0.2.0-beta.54","@aws-sdk/client-sns":"^3.0.0","@aws-sdk/client-sesv2":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-sns":{"optional":true},"@aws-sdk/client-sesv2":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/notification_0.1.0-beta.24_1782571964586_0.8465151129692046","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.25":{"name":"@spfn/notification","version":"0.1.0-beta.25","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/notification@0.1.0-beta.25","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/notification#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"39f3190c0a059515cf78ffc1afd11e977b825d49","tarball":"https://registry.npmjs.org/@spfn/notification/-/notification-0.1.0-beta.25.tgz","fileCount":18,"integrity":"sha512-1zA8BNcOf9m8L+gX2kyWtID0cYB6KO5LeQHwJCCtqvyx6O3XOoLYGK6TaueslGtpqpjd0ocYExUk0IzyB/C/lg==","signatures":[{"sig":"MEQCIBFVT3Zb5RxcNuch0oTdpRtsS9vv/xucPRNwwMznV1JsAiA3w5gRFfaQVyXziIxjUCBNu4n/huOdDme0Wvf5wFxqGQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fnotification@0.1.0-beta.25","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":773852},"spfn":{"schemas":["./dist/entities/*.js"],"migrations":{"dir":"./migrations"}},"type":"module","_from":"file:spfn-notification-0.1.0-beta.25.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./config":{"types":"./dist/config/index.d.ts","import":"./dist/config/index.js","require":"./dist/config/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","test:watch":"vitest","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","check:circular":"madge --circular --extensions ts src/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/115d0907a837d856d351611b54d750ba/spfn-notification-0.1.0-beta.25.tgz","_integrity":"sha512-1zA8BNcOf9m8L+gX2kyWtID0cYB6KO5LeQHwJCCtqvyx6O3XOoLYGK6TaueslGtpqpjd0ocYExUk0IzyB/C/lg==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/notification"},"_npmVersion":"11.17.0","description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","directories":{},"_nodeVersion":"22.23.0","publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"0.2.0-beta.56","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.8","drizzle-orm":"^0.45.0","@sinclair/typebox":"^0.34.30","@aws-sdk/client-sesv2":"^3.1024.0"},"peerDependencies":{"@spfn/core":">=0.2.0-beta.54","@aws-sdk/client-sns":"^3.0.0","@aws-sdk/client-sesv2":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-sns":{"optional":true},"@aws-sdk/client-sesv2":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/notification_0.1.0-beta.25_1782573271819_0.5839620316540775","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.26":{"name":"@spfn/notification","version":"0.1.0-beta.26","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/notification@0.1.0-beta.26","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/spfn/spfn/tree/main/packages/notification#readme","bugs":{"url":"https://github.com/spfn/spfn/issues"},"dist":{"shasum":"3732a472dcb0313ba56189a75dd7360ff5614da2","tarball":"https://registry.npmjs.org/@spfn/notification/-/notification-0.1.0-beta.26.tgz","fileCount":18,"integrity":"sha512-mKTq6Dt2H6H/HmEXh7tGYj3OoPhmmpV7qB4jctO9UMyqW7+8QqdMBSV5YWgXkpOqwQCZZPowHKEOATOOlsWYWg==","signatures":[{"sig":"MEYCIQC/fa8Zsp5vsx+bhEnPkUcbg2Ebrg9xBKcXxKG8Tf/RCgIhAIz49tTNQFk9Y0WWQGm0Ri2V09pUrrGvQRaUNVX2Lt6d","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fnotification@0.1.0-beta.26","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":774218},"spfn":{"schemas":["./dist/entities/*.js"],"migrations":{"dir":"./migrations"}},"type":"module","_from":"file:spfn-notification-0.1.0-beta.26.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./config":{"types":"./dist/config/index.d.ts","import":"./dist/config/index.js","require":"./dist/config/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","test:watch":"vitest","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","check:circular":"madge --circular --extensions ts src/"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"_resolved":"/tmp/ed29c91406e5f587e735dbd34e112a6a/spfn-notification-0.1.0-beta.26.tgz","_integrity":"sha512-mKTq6Dt2H6H/HmEXh7tGYj3OoPhmmpV7qB4jctO9UMyqW7+8QqdMBSV5YWgXkpOqwQCZZPowHKEOATOOlsWYWg==","repository":{"url":"git+https://github.com/spfn/spfn.git","type":"git","directory":"packages/notification"},"_npmVersion":"11.18.0","description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"0.2.0-beta.59","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"^0.31.8","drizzle-orm":"^0.45.0","@sinclair/typebox":"^0.34.30","@aws-sdk/client-sesv2":"^3.1024.0"},"peerDependencies":{"@spfn/core":">=0.2.0-beta.54","@aws-sdk/client-sns":"^3.0.0","@aws-sdk/client-sesv2":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-sns":{"optional":true},"@aws-sdk/client-sesv2":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/notification_0.1.0-beta.26_1782991344105_0.23752619722193002","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.27":{"name":"@spfn/notification","version":"0.1.0-beta.27","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/notification@0.1.0-beta.27","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/notification#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"12f2a1d413036883c2d8fd848a93fdd64f35cb80","tarball":"https://registry.npmjs.org/@spfn/notification/-/notification-0.1.0-beta.27.tgz","fileCount":18,"integrity":"sha512-5CfVg3sqdSIhQyoW1Kb8nQm/BPCDVQ04wjdLqos2aTXCnKTQkn11mii5wtE8e3XHvH9kv76LaDjXfnF2Svl4tQ==","signatures":[{"sig":"MEUCIG8UMPg/21+xXKGHu5WQAVm8VaMHcd8Xeiriuvfb25ydAiEA3QbheY9EL2VCq1MbekBbhnfl7ng4ZcrsiPS09weGOls=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fnotification@0.1.0-beta.27","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":774782},"spfn":{"schemas":["./dist/entities/*.js"],"migrations":{"dir":"./migrations"}},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./config":{"types":"./dist/config/index.d.ts","import":"./dist/config/index.js","require":"./dist/config/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"}},"gitHead":"4a09250c7a88158aacb0bd5559cf36347a06e2a9","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:watch":"vitest","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","publish:beta":"npm publish --access public --tag beta","publish:alpha":"npm publish --access public --tag alpha","check:circular":"madge --circular --extensions ts src/","publish:latest":"npm publish --access public"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/notification"},"_npmVersion":"12.0.1","description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@sinclair/typebox":"^0.34.30","@aws-sdk/client-sesv2":"^3.1024.0"},"peerDependencies":{"@spfn/core":">=0.2.0-beta.54","drizzle-orm":">=1.0.0-rc.4 <2","@aws-sdk/client-sns":"^3.0.0","@aws-sdk/client-sesv2":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-sns":{"optional":true},"@aws-sdk/client-sesv2":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/notification_0.1.0-beta.27_1784827579713_0.40853647819004446","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.1":{"name":"@spfn/notification","version":"0.2.0-beta.1","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/notification@0.2.0-beta.1","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/notification#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"a23c01c6ba1201ead7f3656c950bd44736144b17","tarball":"https://registry.npmjs.org/@spfn/notification/-/notification-0.2.0-beta.1.tgz","fileCount":18,"integrity":"sha512-GraouRErbdzjvpuN20a7Pc7r0twiFTbjWpW0n8MzaJqxPEcvBVGVcQ8oZHBzcVQmWsUZfZ37PtEFDXdXrSiruw==","signatures":[{"sig":"MEYCIQDrLM0nUnO1O6GTepmriW97l5IR29TxEnin1naO2ZJ7+wIhAOCaOD+lVaQTtsnULNlkk7c7WlqHPxOx47iaM4/7PSdH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fnotification@0.2.0-beta.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":775333},"spfn":{"schemas":["./dist/entities/*.js"],"migrations":{"dir":"./migrations"}},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./config":{"types":"./dist/config/index.d.ts","import":"./dist/config/index.js","require":"./dist/config/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"}},"gitHead":"3f20320b48d07db0c89a556f1bf09bfc90f59818","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:watch":"vitest","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","check:circular":"madge --circular --extensions ts src/","publish:latest":"node ../../scripts/publish-package.mjs latest"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/notification"},"_npmVersion":"12.0.2","description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@sinclair/typebox":"^0.34.30","@aws-sdk/client-sesv2":"^3.1024.0"},"peerDependencies":{"@spfn/core":">=0.3.0-beta.1 <0.4.0","drizzle-orm":">=1.0.0-rc.4 <2","@aws-sdk/client-sns":"^3.0.0","@aws-sdk/client-sesv2":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-sns":{"optional":true},"@aws-sdk/client-sesv2":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/notification_0.2.0-beta.1_1786203781229_0.03971056299529985","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.2":{"name":"@spfn/notification","version":"0.2.0-beta.2","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/notification@0.2.0-beta.2","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/notification#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"329fea048577a7331c192c4b12e041c780a7c390","tarball":"https://registry.npmjs.org/@spfn/notification/-/notification-0.2.0-beta.2.tgz","fileCount":18,"integrity":"sha512-QLbF9oMg2ZB6rL05lBblBX3kzokViPgwtVEuIpLyUQhwFchVnKDUvA8vIRjcC6XpX8C75pr7lPo1qTMyEJOrVg==","signatures":[{"sig":"MEYCIQD/USt9iKk1/Tvu31bddXfoxOvI1Eqo5HQ0QoTVw367BAIhAJcX5scVd5EN1VwmUYb20AzJ/6Dcyiic6C1uHt6obQMm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fnotification@0.2.0-beta.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":810164},"spfn":{"schemas":["./dist/entities/*.js"],"migrations":{"dir":"./migrations"}},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./config":{"types":"./dist/config/index.d.ts","import":"./dist/config/index.js","require":"./dist/config/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"}},"gitHead":"f2a7e93d2cf9ff2f99414a1091aa6a749c3df9cd","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:watch":"vitest","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","check:circular":"madge --circular --extensions ts src/","publish:latest":"node ../../scripts/publish-package.mjs latest"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/notification"},"_npmVersion":"12.0.2","description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@sinclair/typebox":"^0.34.30","@aws-sdk/client-sesv2":"^3.1024.0"},"peerDependencies":{"@spfn/core":">=0.3.0-beta.1 <0.4.0","drizzle-orm":">=1.0.0-rc.4 <2","@aws-sdk/client-sns":"^3.0.0","@aws-sdk/client-sesv2":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-sns":{"optional":true},"@aws-sdk/client-sesv2":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/notification_0.2.0-beta.2_1786458881403_0.43957174333670257","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.3":{"name":"@spfn/notification","version":"0.2.0-beta.3","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/notification@0.2.0-beta.3","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/notification#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"278737ee1422e2cb5a2170d6abb38d73e527dc44","tarball":"https://registry.npmjs.org/@spfn/notification/-/notification-0.2.0-beta.3.tgz","fileCount":18,"integrity":"sha512-YuZ2vhG6rIe/FtbOnKyI2izStC6JLffQVH/24/I7oiNMd1QEBu/DikewVGdxYd2GCqtNwG3XBDO0acvFFSJbSg==","signatures":[{"sig":"MEYCIQDVJztre+kJ9e4u0REus/3dhTHQF6KWEXqEUEmlS9wpnAIhAPQNDw7kfMk5XKA+xDshQScmK3hjkP+1hHSukENJAUNU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fnotification@0.2.0-beta.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":816188},"spfn":{"schemas":["./dist/entities/*.js"],"migrations":{"dir":"./migrations"}},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./config":{"types":"./dist/config/index.d.ts","import":"./dist/config/index.js","require":"./dist/config/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"}},"gitHead":"12be74402051f5eb7ee603a0bf68aca05b7f12bd","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:watch":"vitest","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","check:circular":"madge --circular --extensions ts src/","publish:latest":"node ../../scripts/publish-package.mjs latest"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/notification"},"_npmVersion":"12.0.2","description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@sinclair/typebox":"^0.34.30","@aws-sdk/client-sesv2":"^3.1024.0"},"peerDependencies":{"@spfn/core":">=0.3.0-beta.1 <0.4.0","drizzle-orm":">=1.0.0-rc.4 <2","@aws-sdk/client-sns":"^3.0.0","@aws-sdk/client-sesv2":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-sns":{"optional":true},"@aws-sdk/client-sesv2":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/notification_0.2.0-beta.3_1786681572411_0.8722742585588019","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.4":{"name":"@spfn/notification","version":"0.2.0-beta.4","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/notification@0.2.0-beta.4","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/notification#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"2d7bdb6761e781f4cd474ea9505452b220f8c9b3","tarball":"https://registry.npmjs.org/@spfn/notification/-/notification-0.2.0-beta.4.tgz","fileCount":18,"integrity":"sha512-c3BBexOTOKeydP0V4Tn9SgdzRwD9PO2yLjiKv3UgEPr00oNpZCb9CMvkU9U51rbwiEA7lhvarLHpx18AKLRfhg==","signatures":[{"sig":"MEUCIFp4ocpYfkdGg2mbuwkfLp5xT+dqhhlLrdIcH3jtIue0AiEAiadiff1rESe94Cy8jum5887/WoYz/20kidSh6Qxz3Uk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fnotification@0.2.0-beta.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":824872},"spfn":{"schemas":["./dist/entities/*.js"],"migrations":{"dir":"./migrations"}},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./config":{"types":"./dist/config/index.d.ts","import":"./dist/config/index.js","require":"./dist/config/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"}},"gitHead":"097b1c024f79a7c4b7741963d61d2fb829615c68","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:watch":"vitest","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","check:circular":"madge --circular --extensions ts src/","publish:latest":"node ../../scripts/publish-package.mjs latest"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/notification"},"_npmVersion":"12.0.2","description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@sinclair/typebox":"^0.34.30","@aws-sdk/client-sesv2":"^3.1024.0"},"peerDependencies":{"@spfn/core":">=0.3.0-beta.1 <0.4.0","drizzle-orm":">=1.0.0-rc.4 <2","@aws-sdk/client-sns":"^3.0.0","@aws-sdk/client-sesv2":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-sns":{"optional":true},"@aws-sdk/client-sesv2":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/notification_0.2.0-beta.4_1788534132979_0.3508939334094565","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.5":{"name":"@spfn/notification","version":"0.2.0-beta.5","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/notification@0.2.0-beta.5","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/notification#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"daaab36ff7dc99ed3cc843631cabe906f2391dba","tarball":"https://registry.npmjs.org/@spfn/notification/-/notification-0.2.0-beta.5.tgz","fileCount":18,"integrity":"sha512-Ljx+nqNtBOZJ2mNkBvcgl8m4xyjf/XQRdsQyg2bPDTXJN4Jp1qojEnRjOyDXxLA6dy+6DSsO0IUl/Zc5cM73Jw==","signatures":[{"sig":"MEUCIQDeG1VHOECdJAKwlzYleBG6M+PfOiYIngt9M+Y2ylfGxQIgULgEMxOPvB4ObsvGLrTTJDQvOd+xYuXL+LpRfyavq1c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fnotification@0.2.0-beta.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":830711},"spfn":{"schemas":["./dist/entities/*.js"],"migrations":{"dir":"./migrations"}},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./config":{"types":"./dist/config/index.d.ts","import":"./dist/config/index.js","require":"./dist/config/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"}},"gitHead":"6f2bc78bfe593095d69615d7aaad7675d73e18a1","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:watch":"vitest","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","check:circular":"madge --circular --extensions ts src/","publish:latest":"node ../../scripts/publish-package.mjs latest"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/notification"},"_npmVersion":"12.0.2","description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@sinclair/typebox":"^0.34.30","@aws-sdk/client-sesv2":"^3.1024.0"},"peerDependencies":{"@spfn/core":">=0.3.0-beta.1 <0.4.0","drizzle-orm":">=1.0.0-rc.4 <2","@aws-sdk/client-sns":"^3.0.0","@aws-sdk/client-sesv2":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-sns":{"optional":true},"@aws-sdk/client-sesv2":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/notification_0.2.0-beta.5_1788750883730_0.4282631966313244","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.6":{"name":"@spfn/notification","version":"0.2.0-beta.6","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/notification@0.2.0-beta.6","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/notification#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"5012fffc029f235d61e8609531cf1a1bc8c72549","tarball":"https://registry.npmjs.org/@spfn/notification/-/notification-0.2.0-beta.6.tgz","fileCount":18,"integrity":"sha512-6lZfTTCqOsLwkCmXgC5zDt8sHTOrxDrCeaI7AM2RmHgG9QzzCsRiNS9uu/My/6W8HO8Dajvz5BNG6PZzYNlOIA==","signatures":[{"sig":"MEYCIQCpCCYHtlltOYr8tbNcBaqWdSgeAsA3RAEUmO5raebuKAIhAL9my3Civz9I2XPNg8zxUQ8UOiMMI3iFipiAibOv+2GC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQD7uegx296u+u2RUEiTpp0SakeRhuZseIUzVfXx/w9zhwIhALPbwtG1BRnwliU2zJ3baw9ejmKXcOtaOPrROWEdMvYK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fnotification@0.2.0-beta.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":837760},"spfn":{"schemas":["./dist/entities/*.js"],"migrations":{"dir":"./migrations"}},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./config":{"types":"./dist/config/index.d.ts","import":"./dist/config/index.js","require":"./dist/config/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"}},"gitHead":"c9f9ba1a16cbb88d1805596096c93df0abc47f02","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:watch":"vitest","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","check:circular":"madge --circular --extensions ts src/","publish:latest":"node ../../scripts/publish-package.mjs latest"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/notification"},"_npmVersion":"12.1.0","description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@sinclair/typebox":"^0.34.30","@aws-sdk/client-sesv2":"^3.1024.0"},"peerDependencies":{"@spfn/core":">=0.3.0-beta.1 <0.4.0","drizzle-orm":">=1.0.0-rc.4 <2","@aws-sdk/client-sns":"^3.0.0","@aws-sdk/client-sesv2":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-sns":{"optional":true},"@aws-sdk/client-sesv2":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/notification_0.2.0-beta.6_1790577047127_0.9790060924819413","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.7":{"name":"@spfn/notification","version":"0.2.0-beta.7","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/notification@0.2.0-beta.7","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/notification#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"8388dfea2f07d614f86b5f2e752a114be272e849","tarball":"https://registry.npmjs.org/@spfn/notification/-/notification-0.2.0-beta.7.tgz","fileCount":19,"integrity":"sha512-16KEyaifsqQw0xn6H5lqypwxqs7M0VFOL/z430Iw3hi/TboB1ACd8uSiAVe4zg/LW2IsBAE1b78ItcVdERNrDg==","signatures":[{"sig":"MEUCIDg3AgO38iRwx6uoZwgNZLojBxZULVJVjhT+YWC06s4VAiEApNE7OAgnCsYqJ18r4dtDJIojPfsNPgdeAKSEAODUzY8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIH7FE5Aj8P0sbM+LWq3/qfz8vBlJlKSV22UbqZsRyHOKAiBkFYUO0WiKeh9uRZc+TbHdTWO9ohR86mSDLoeqIOyROQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fnotification@0.2.0-beta.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":897337},"spfn":{"schemas":["./dist/entities/*.js"],"migrations":{"dir":"./migrations"}},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./config":{"types":"./dist/config/index.d.ts","import":"./dist/config/index.js","require":"./dist/config/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"}},"gitHead":"068cbe106bb13b2c7cf32c7955f501fd732ceaf0","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:watch":"vitest","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","check:circular":"madge --circular --extensions ts src/","publish:latest":"node ../../scripts/publish-package.mjs latest"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/notification"},"_npmVersion":"12.1.0","description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@sinclair/typebox":"^0.34.30","@aws-sdk/client-sesv2":"^3.1024.0"},"peerDependencies":{"@spfn/core":">=0.3.0-beta.1 <0.4.0","drizzle-orm":">=1.0.0-rc.4 <2","@aws-sdk/client-sns":"^3.0.0","@aws-sdk/client-sesv2":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-sns":{"optional":true},"@aws-sdk/client-sesv2":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/notification_0.2.0-beta.7_1790578008778_0.9312940662268441","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.8":{"name":"@spfn/notification","version":"0.2.0-beta.8","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/notification@0.2.0-beta.8","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/notification#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"4d0f0bc610fd8f0e76918f61aea97ba2af0935bf","tarball":"https://registry.npmjs.org/@spfn/notification/-/notification-0.2.0-beta.8.tgz","fileCount":19,"integrity":"sha512-V98vXYyZ8+lDq299wDznQBKh+KJuCi+YCBdxKBNRa6Zv43RoLQQ0wqp1s5ZOIxpSo3+w5pNEc5thR0LYSJHaMg==","signatures":[{"sig":"MEUCIBAk87KzMJYyY0q1heHybHC3kQLI9kfW9hehRRrSKxaQAiEAyGY56PpQaFLRlsg9VhId1NPotCo39+EalBgpcz1Rbs4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGvVHz0X2KRe3qb0ShfFZqyD0j9Z6fD1KT92bqajh8d1AiA5QLIY8WGLd2o+z8zNdjqz2kz10WRbf5g2vsBqk3moXQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fnotification@0.2.0-beta.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":911107},"spfn":{"schemas":["./dist/entities/*.js"],"migrations":{"dir":"./migrations"}},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./config":{"types":"./dist/config/index.d.ts","import":"./dist/config/index.js","require":"./dist/config/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"}},"gitHead":"0f04a5b9e2faadea64761d08794d53787287a05f","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:watch":"vitest","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","check:circular":"madge --circular --extensions ts src/","publish:latest":"node ../../scripts/publish-package.mjs latest"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/notification"},"_npmVersion":"12.1.0","description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@sinclair/typebox":"^0.34.30","@aws-sdk/client-sesv2":"^3.1024.0"},"peerDependencies":{"@spfn/core":">=0.3.0-beta.1 <0.4.0","drizzle-orm":">=1.0.0-rc.4 <2","@aws-sdk/client-sns":"^3.0.0","@aws-sdk/client-sesv2":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-sns":{"optional":true},"@aws-sdk/client-sesv2":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/notification_0.2.0-beta.8_1790578198225_0.8149443385529445","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.9":{"name":"@spfn/notification","version":"0.2.0-beta.9","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","_id":"@spfn/notification@0.2.0-beta.9","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/notification#readme","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"af7b246400355cb44ee85037c4834f8e82880973","tarball":"https://registry.npmjs.org/@spfn/notification/-/notification-0.2.0-beta.9.tgz","fileCount":21,"integrity":"sha512-weH1sBdwlcX/8Ulqr6j6lQWMdzBp+/9PRseCJrUsOWACGZiq1hrE3vvoUpKXsdqZ41rhynDgLC0nSeQvAEToZg==","signatures":[{"sig":"MEUCIFBcFN0WfN0M3kdQVhrYZJ2FkdpEUEs2kf2Pj2IBLgGSAiEA8AicPdit3wXwCJJ/nG8KSHxKz0os0TLSWRqboI5QiEU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDhJA7PaWOsCgJEWJ1qzKrELXrhVanyCyT2ALgAnGh63AIhAI8ktzlB2Uw41Na2mNMqNQ0dUT/iXEz31484TRQoR73M","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fnotification@0.2.0-beta.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":941621},"spfn":{"schemas":["./dist/entities/*.js"],"migrations":{"dir":"./migrations"}},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./config":{"types":"./dist/config/index.d.ts","import":"./dist/config/index.js","require":"./dist/config/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"}},"gitHead":"90d535886961d8dd4a862e989bc15a0750f7fd2a","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:watch":"vitest","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","check:circular":"madge --circular --extensions ts src/","publish:latest":"node ../../scripts/publish-package.mjs latest"},"_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/notification"},"_npmVersion":"12.1.0","description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@sinclair/typebox":"^0.34.30","@aws-sdk/client-sesv2":"^3.1024.0"},"peerDependencies":{"@spfn/core":">=0.3.0-beta.1 <0.4.0","drizzle-orm":">=1.0.0-rc.4 <2","@aws-sdk/client-sns":"^3.0.0","@aws-sdk/client-sesv2":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-sns":{"optional":true},"@aws-sdk/client-sesv2":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/notification_0.2.0-beta.9_1790578230972_0.2410113381012533","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.10":{"_id":"@spfn/notification@0.2.0-beta.10","bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"dist":{"shasum":"1a8553990eecdfd443e73f3fdae44bae969521ad","tarball":"https://registry.npmjs.org/@spfn/notification/-/notification-0.2.0-beta.10.tgz","fileCount":23,"integrity":"sha512-ApezK41zV2lwG8kbv9BXk4lqGzbAABi0PSMTc3KiQArGY4gp+yZGAhlqjEwnIyAVHz0Fh7qWZXbWdzx5FiWf2A==","signatures":[{"sig":"MEUCIQDSKJkdgNjRqfLGpF5IC56pLjm/3izglCRK586P0j2jtgIgWB6qxUfY/yus0dXHqKLqJJYd5uWPKs3M/uy04/agdkQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDz1vGOzDIfZtBaYggBpslLd6Z3P9/RSqXgRHRhetMMgwIgeF4kzt2B4dasNtreGjXaqYEHODZJGJfE+vlfP/62p4Q="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@spfn%2fnotification@0.2.0-beta.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1060930},"name":"@spfn/notification","spfn":{"schemas":["./dist/entities/*.js"],"migrations":{"dir":"./migrations"}},"type":"module","author":{"name":"Ray Im","email":"rayim@fxy.global"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./config":{"types":"./dist/config/index.d.ts","import":"./dist/config/index.js","require":"./dist/config/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.js"}},"gitHead":"51ce3bbea14a15ed2828ab2385bb73a2d0929e38","license":"MIT","scripts":{"dev":"tsup --watch","test":"vitest run","build":"pnpm check:circular && tsup","prepack":"node -e \"require('fs').copyFileSync('../../LICENSE','LICENSE')\"","test:watch":"vitest","type-check":"tsc --noEmit","db:generate":"drizzle-kit generate","publish:beta":"node ../../scripts/publish-package.mjs beta","publish:alpha":"node ../../scripts/publish-package.mjs alpha","check:circular":"madge --circular --extensions ts src/","publish:latest":"node ../../scripts/publish-package.mjs latest"},"version":"0.2.0-beta.10","_npmUser":{"name":"superfunction","email":"rayim@inflike.com"},"homepage":"https://github.com/fxylabs/spfn/tree/main/packages/notification#readme","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/notification"},"_npmVersion":"12.1.0","description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","directories":{},"maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"_nodeVersion":"22.23.2","publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","madge":"^8.0.0","vitest":"^4.0.6","@spfn/core":"workspace:*","typescript":"^5.3.3","@types/node":"^20.11.0","drizzle-kit":"1.0.0-rc.4","drizzle-orm":"1.0.0-rc.4","@sinclair/typebox":"^0.34.30","google-auth-library":"^11.1.0","@aws-sdk/client-sesv2":"^3.1024.0"},"peerDependencies":{"@spfn/core":">=0.3.0-beta.1 <0.4.0","drizzle-orm":">=1.0.0-rc.4 <2","@aws-sdk/client-sns":"^3.0.0","google-auth-library":"^10.0.0 || ^11.0.0","@aws-sdk/client-sesv2":"^3.0.0"},"peerDependenciesMeta":{"@aws-sdk/client-sns":{"optional":true},"google-auth-library":{"optional":true},"@aws-sdk/client-sesv2":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/notification_0.2.0-beta.10_1790579396475_0.19213739734302804"}}},"time":{"created":"2026-01-25T13:08:17.334Z","modified":"2026-09-28T07:09:56.951Z","0.1.0-beta.1":"2026-01-25T13:08:17.650Z","0.1.0-beta.2":"2026-02-17T07:26:55.206Z","0.1.0-beta.3":"2026-02-17T10:41:21.112Z","0.1.0-beta.4":"2026-02-20T06:05:56.698Z","0.1.0-beta.5":"2026-02-20T08:24:02.136Z","0.1.0-beta.6":"2026-02-20T11:16:54.235Z","0.1.0-beta.7":"2026-02-20T11:56:34.882Z","0.1.0-beta.8":"2026-02-22T05:05:40.655Z","0.1.0-beta.9":"2026-02-22T07:28:41.763Z","0.1.0-beta.10":"2026-02-22T09:34:52.283Z","0.1.0-beta.11":"2026-02-23T07:59:52.535Z","0.1.0-beta.12":"2026-03-06T15:38:35.158Z","0.1.0-beta.13":"2026-03-06T15:52:54.640Z","0.1.0-beta.14":"2026-03-07T03:58:25.837Z","0.1.0-beta.15":"2026-03-08T14:57:33.298Z","0.1.0-beta.16":"2026-03-11T09:20:47.164Z","0.1.0-beta.17":"2026-03-27T06:20:23.298Z","0.1.0-beta.18":"2026-04-06T05:51:01.839Z","0.1.0-beta.19":"2026-06-10T16:06:02.336Z","0.1.0-beta.20":"2026-06-16T09:02:44.033Z","0.1.0-beta.21":"2026-06-27T08:24:24.062Z","0.1.0-beta.22":"2026-06-27T08:41:52.922Z","0.1.0-beta.23":"2026-06-27T13:41:07.868Z","0.1.0-beta.24":"2026-06-27T14:52:44.740Z","0.1.0-beta.25":"2026-06-27T15:14:32.031Z","0.1.0-beta.26":"2026-07-02T11:22:24.240Z","0.1.0-beta.27":"2026-07-23T17:26:19.859Z","0.2.0-beta.1":"2026-08-08T15:43:01.403Z","0.2.0-beta.2":"2026-08-11T14:34:41.615Z","0.2.0-beta.3":"2026-08-14T04:26:12.581Z","0.2.0-beta.4":"2026-09-04T15:02:13.148Z","0.2.0-beta.5":"2026-09-07T03:14:43.909Z","0.2.0-beta.6":"2026-09-28T06:30:47.238Z","0.2.0-beta.7":"2026-09-28T06:46:48.856Z","0.2.0-beta.8":"2026-09-28T06:49:58.347Z","0.2.0-beta.9":"2026-09-28T06:50:31.058Z","0.2.0-beta.10":"2026-09-28T07:09:56.578Z"},"bugs":{"url":"https://github.com/fxylabs/spfn/issues"},"author":{"name":"Ray Im","email":"rayim@fxy.global"},"license":"MIT","homepage":"https://github.com/fxylabs/spfn/tree/main/packages/notification#readme","keywords":["spfn","notification","email","sms","slack","push","aws-ses","aws-sns"],"repository":{"url":"git+https://github.com/fxylabs/spfn.git","type":"git","directory":"packages/notification"},"description":"Multi-channel notification system for SPFN - Email, SMS, Slack, Push","maintainers":[{"name":"superfunction","email":"rayim@inflike.com"}],"readme":"# @spfn/notification\n\n> **The messages your product has to send before it has anything to say**\n\nA verification code. A password reset. An invitation. A receipt. None of these are your\nproduct, and all of them are required before it ships. `@spfn/auth` already emits the\nevents — registration, invitation created, invitation accepted — and this package is what\nturns those into a delivered email or SMS.\n\nMulti-channel delivery for SPFN applications: one call site, a provider behind it, and a\nrecord of what was sent.\n\n## What you get\n\n- **Multi-channel support**: Email, SMS, Slack, native push (FCM: Android, iOS, web)\n- **Provider pattern**: Pluggable providers (AWS SES, AWS SNS, etc.)\n- **Template system**: Variable substitution with filters\n- **Scheduled delivery**: Schedule notifications for later via pg-boss\n- **History tracking**: Optional notification history with database storage\n- **Email tracking**: Open pixel & click redirect tracking with engagement analytics\n\n## Installation\n\n```bash\npnpm add @spfn/notification drizzle-orm@1.0.0-rc.4\n```\n\n### Optional Dependencies\n\nInstall providers as needed:\n\n```bash\n# For AWS SES v2 (Email)\npnpm add @aws-sdk/client-sesv2\n\n# For AWS SNS (SMS)\npnpm add @aws-sdk/client-sns\n```\n\n## Quick Start\n\n```typescript\nimport { sendEmail, sendSMS, configureNotification } from '@spfn/notification/server';\n\n// Configure (optional - uses environment variables by default)\nconfigureNotification({\n    email: {\n        from: 'noreply@example.com',\n    },\n    defaults: {\n        appName: 'MyApp',\n    },\n});\n\n// Send email with template\nawait sendEmail({\n    to: 'user@example.com',\n    template: 'verification-code',\n    data: { code: '123456' },\n});\n\n// Send SMS\nawait sendSMS({\n    to: '+821012345678',\n    template: 'verification-code',\n    data: { code: '123456' },\n});\n```\n\n## Configuration\n\n### Environment Variables\n\n```bash\n# Email\nSPFN_NOTIFICATION_EMAIL_PROVIDER=aws-ses\nSPFN_NOTIFICATION_EMAIL_FROM=noreply@example.com\n\n# SMS\nSPFN_NOTIFICATION_SMS_PROVIDER=aws-sns\n\n# Tracking\nSPFN_NOTIFICATION_TRACKING_ENABLED=true\nSPFN_NOTIFICATION_TRACKING_SECRET=your-hmac-secret-key\nSPFN_NOTIFICATION_TRACKING_BASE_URL=https://api.example.com\n\n# History (only needed when history.storeRecipient is 'hashed')\nSPFN_NOTIFICATION_HISTORY_HASH_SECRET=your-history-hmac-secret\n\n# AWS Credentials\nAWS_REGION=ap-northeast-2\nAWS_ACCESS_KEY_ID=xxx\nAWS_SECRET_ACCESS_KEY=xxx\n```\n\n### Code Configuration\n\n```typescript\nimport { configureNotification } from '@spfn/notification/server';\n\nconfigureNotification({\n    email: {\n        provider: 'aws-ses',\n        from: 'noreply@example.com',\n        replyTo: 'support@example.com',\n    },\n    sms: {\n        provider: 'aws-sns',\n        defaultCountryCode: '+82',\n    },\n    defaults: {\n        appName: 'MyApp',\n    },\n    enableHistory: true, // Enable notification history tracking\n    history: {\n        storeContent: true,       // Store rendered content + template data (default: true)\n        storeRecipient: 'raw',    // 'raw' | 'hashed' — how the recipient column is stored\n        // hashSecret: '...',     // Required for 'hashed' (or use the env var)\n    },\n    tracking: {\n        enabled: true,                          // Enable email tracking\n        secret: 'your-hmac-secret-key',         // HMAC signing key\n        baseUrl: 'https://api.example.com',     // Tracking endpoint URL\n    },\n});\n```\n\n## Sending Notifications\n\n### Email\n\n```typescript\nimport { sendEmail, sendEmailBulk } from '@spfn/notification/server';\n\n// With template\nawait sendEmail({\n    to: 'user@example.com',\n    template: 'welcome',\n    data: { name: 'John' },\n});\n\n// With direct content\nawait sendEmail({\n    to: 'user@example.com',\n    subject: 'Hello',\n    text: 'Plain text content',\n    html: '<h1>HTML content</h1>',\n});\n\n// Bulk send (in-process, parallel)\nawait sendEmailBulk([\n    { to: 'user1@example.com', template: 'welcome', data: { name: 'John' } },\n    { to: 'user2@example.com', template: 'welcome', data: { name: 'Jane' } },\n], { concurrency: 20 });\n\n// Bulk send (distributed across instances via pg-boss)\nconst result = await sendEmailBulk(items, { distributed: true });\n// result.batchId — UUID for tracking this batch\n// Actual sending happens in background via pg-boss workers\n```\n\n### SMS\n\n```typescript\nimport { sendSMS, sendSMSBulk } from '@spfn/notification/server';\n\n// With template\nawait sendSMS({\n    to: '+821012345678',\n    template: 'verification-code',\n    data: { code: '123456' },\n});\n\n// With direct message\nawait sendSMS({\n    to: '010-1234-5678', // Auto-normalized to E.164 format\n    message: 'Your code is 123456',\n});\n```\n\n## Push (FCM)\n\nNative push goes through Firebase Cloud Messaging's HTTP v1 API, which reaches Android,\niOS (FCM relays to APNs — upload your APNs auth key in the Firebase console) and web.\n\n### Setup\n\n```bash\npnpm add google-auth-library        # optional peer dependency, needed only for push\n```\n\n| Variable | Meaning |\n|---|---|\n| `SPFN_NOTIFICATION_FCM_SERVICE_ACCOUNT` | Service-account JSON. Unset: Application Default Credentials (GKE Workload Identity, `gcloud auth application-default login`) |\n| `SPFN_NOTIFICATION_FCM_PROJECT_ID` | Firebase project id; defaults to the credential's project |\n| `SPFN_NOTIFICATION_PUSH_PROVIDER` | `fcm` (default), or the name of a provider passed to `registerPushProvider` |\n\n### Device tokens\n\nThe package stores tokens but ships no route: registering a token must be tied to the\nsigned-in user, and the package does not depend on auth. Call it from your own\nauthenticated route and pass your user id as a string.\n\n```typescript\nimport { registerPushDevice, unregisterPushDevice } from '@spfn/notification/server';\n\n// after sign-in, and whenever the app gets a new FCM token\nawait registerPushDevice({\n    ownerId: String(auth.userId),\n    token: body.fcmToken,\n    platform: 'ios',            // 'ios' | 'android' | 'web'\n    deviceId: body.installId,   // optional, recommended\n    locale: body.locale,        // optional: renders localised templates per device\n});\n\n// on sign-out\nawait unregisterPushDevice(body.fcmToken);\n```\n\n- A token registered by another owner moves to the new one, so a shared device that\n  signs in as someone else stops receiving the previous user's pushes.\n- With `deviceId`, a rotated token replaces the device's old one (one active token per\n  device, whoever owned it). Take `deviceId` from the device itself (an install id the\n  app generates), never from user input: anyone who can name another user's `deviceId`\n  can retire that device's token.\n- FCM answering `UNREGISTERED` or `SENDER_ID_MISMATCH` invalidates the token. So does\n  `INVALID_ARGUMENT` whose field violation names `message.token` (a malformed token);\n  an `INVALID_ARGUMENT` about any other field is a payload error and leaves the token\n  alone, since otherwise one bad payload would wipe every token it was sent to.\n\n### Sending\n\n```typescript\nimport { sendPush } from '@spfn/notification/server';\n\n// every active device of the user\nawait sendPush({ to: { ownerId: userId }, title: 'Order shipped', body: '#1234', data: { orderId: '1234' } });\n\n// narrowed: iOS only / named devices / the device used last\nawait sendPush({ to: { ownerId: userId, devices: { platforms: ['ios'] } }, title: '…' });\nawait sendPush({ to: { ownerId: userId, devices: { deviceIds: ['install-1'] } }, title: '…' });\nawait sendPush({ to: { ownerId: userId, devices: { latest: 1 } }, title: '…' });\n\n// tokens you manage yourself\nawait sendPush({ to: { tokens: [a, b] }, title: '…' });\n```\n\nWhich devices get a push is the caller's decision; the default is all of the owner's\nactive devices. For a rule the selector cannot express, read `listPushDevices(ownerId)`\nand pass `{ tokens }`.\n\nThe result is per device, with masked tokens:\n\n```typescript\n{\n    success: false,             // true only when every device succeeded\n    successCount: 1,\n    failureCount: 1,\n    results: [\n        { token: 'dF3k9a…x81Q', deviceId: 'install-1', platform: 'ios', success: true, messageId: '…' },\n        { token: 'c2Pq0Z…7tLm', platform: 'android', success: false, error: 'UNREGISTERED: …' },\n    ],\n}\n```\n\nAn owner with no active device returns `success: false, error: 'no_devices'`.\n\n- `data` values must be strings (FCM's rule); a payload over 4096 bytes is refused before\n  sending.\n- `options`: `priority` (`high`/`normal`), `ttlSeconds`, `collapseKey`, `badge`, `sound`,\n  `contentAvailable` (silent push: data only, wakes the app). They are mapped onto the\n  Android, APNs and web blocks. `fcm` takes raw FCM `message` fields, merged last.\n- Templates take `push: { title, body, data }`, also per locale. A registered device's\n  `locale` wins over the send's `locale`.\n- `idempotencyKey` applies per device: a retry reaches only the devices that did not get\n  it. `sensitive: true` keeps title and body out of history.\n- `sendPushBulk(items)` sends several pushes with bounded concurrency.\n\n### Scheduling\n\n`schedulePush(params, options)` takes the same `ScheduleOptions` as email and SMS\n(`scheduledAt`, `referenceType`/`referenceId`, `guard`, cancellation). Devices are\nresolved when the job runs, so a device registered in between is included, and a\nretry after a partial failure reaches only the devices that failed.\n\nDelivery through FCM and APNs is best effort: an accepted message can still be dropped\nwithout the sender being told. Do not build anything that needs a push to arrive.\n\n## Scheduled Notifications\n\nSchedule notifications for later delivery using pg-boss:\n\n```typescript\nimport { scheduleEmail, scheduleSMS } from '@spfn/notification/server';\n\n// Schedule email for 1 hour later\nconst result = await scheduleEmail(\n    {\n        to: 'user@example.com',\n        template: 'reminder',\n        data: { eventName: 'Meeting' },\n    },\n    {\n        scheduledAt: new Date(Date.now() + 60 * 60 * 1000),\n        referenceType: 'event',\n        referenceId: 'event-123',\n    }\n);\n\n// Cancel scheduled notification\nimport { cancelNotification } from '@spfn/notification/server';\nconst cancel = await cancelNotification(result.notificationId);\n// { success: true, jobCancelled: true }\n```\n\n**What a cancel guarantees.** `success: true` means the notification will not be sent.\nThe history row moves from `scheduled` to `cancelled` in one status-guarded update, and\nthe scheduled job re-checks the row when it runs: it sends only a row it can move to\n`pending`, and skips a `cancelled` or `sent` row without error. So a cancel holds even\nwhen the queued job could not be removed (`jobCancelled: false` — no queue in this\nprocess, or a queue error) and even when it races the send time. Whichever of the cancel\nand the job updates the row first wins; the other sees the new status and stands down.\n\nA cancel also works on a row whose attempt `failed` and is waiting for a job retry. It is\nrefused (`success: false`) for a send in progress or already sent. `markNotificationCancelled(id)` is the record-only\nform: it updates the row and returns whether it did, without touching the queue.\n\n### Send guards — \"send this later, unless it no longer applies\"\n\nA scheduled send can name a guard that the job calls when it runs, after checking the\nrow was not cancelled. It answers the question the app could not answer at schedule\ntime, so the app does not have to race a cancel against the send time.\n\n```typescript\nimport { registerSendGuard, scheduleEmail } from '@spfn/notification/server';\n\n// Register in every process that runs notification jobs.\nregisterSendGuard('incident-still-open', async ({ referenceId }) =>\n{\n    return (await incidents.find(referenceId))?.status === 'open';\n});\n\nawait scheduleEmail(\n    { to: oncall, template: 'outage', data: { incidentId } },\n    {\n        scheduledAt: new Date(Date.now() + 10 * 60 * 1000),\n        referenceType: 'incident',\n        referenceId: incidentId,\n        guard: 'incident-still-open',\n    },\n);\n```\n\nThe guard receives `{ notificationId, channel, referenceType, referenceId, data }`.\n\n| The guard | Row | Sent | Job |\n|---|---|---|---|\n| returns `true` | `sent` | yes | done |\n| returns `false` | `skipped` | no | done, no retry |\n| throws | `failed` | no | retried; the guard runs again |\n| is not registered when the job runs | `failed` (`Send guard not registered: …`) | no | done, no retry |\n\nAn unknown guard name is refused when scheduling (`success: false`), before anything is\nqueued. A cancelled row never reaches its guard.\n\n## Retries without duplicates (idempotency keys)\n\nA send can be retried safely by giving it an `idempotencyKey`. The first send with a key\nrecords it on the history row; a later send with the same key, channel and recipient\nreturns the first result without calling the provider.\n\n```typescript\nconst result = await sendEmail({\n    to: user.email,\n    template: 'payment-failed',\n    data: { invoiceId },\n    idempotencyKey: `invoice-${invoiceId}:payment-failed`,\n});\n// retry → { success: true, messageId: '<first>', deduplicated: true }\n```\n\n**The key must come out the same on every retry.** Derive it from the business event,\nor generate a UUID once and store it with the job that sends. A `crypto.randomUUID()`\ncalled right before each send gives every attempt a new key and deduplicates nothing.\n\n| First send's row | A repeat with the same key |\n|---|---|\n| `sent` | returns the first result, `deduplicated: true` |\n| `failed` | takes over the same row and sends again |\n| `pending` / `scheduled` (in flight) | `success: false`, `error: 'send in progress'`, not sent |\n| `cancelled` / `skipped` | `success: false`, `error: 'already cancelled'` (…), not sent |\n\n- Available on `sendEmail`, `sendSMS`, `sendSlack`, each bulk item, and `scheduleEmail` /\n  `scheduleSMS` (a repeat schedule returns the first `notificationId` and queues nothing).\n- The key is unique per channel and recipient: one key can cover an email and an SMS, and\n  an SMS to several numbers is deduplicated number by number.\n- 1–255 characters (`MAX_IDEMPOTENCY_KEY_LENGTH`). Requires `enableHistory: true`; a\n  keyed send is refused when history is off, and when the key cannot be recorded, rather\n  than sent without protection.\n- A keyed send that takes over a `failed` row also takes it away from the queued job that\n  failed it: that job's retry finds the row no longer its own and sends nothing.\n- A process that dies after claiming a key and before the provider answers leaves the row\n  `pending`, and the key stays blocked. The provider may already have delivered, so it\n  is not retried automatically: after checking, `markNotificationFailed(id, reason)` frees\n  it.\n\n## Bulk Sending\n\nAll channels support bulk sending with two modes:\n\n### In-Process Mode (default)\n\nSends all items in the current process with concurrency control.\nSuitable for single-instance deployments or smaller batches.\n\n```typescript\nimport { sendEmailBulk, sendSMSBulk, sendSlackBulk } from '@spfn/notification/server';\n\nconst result = await sendEmailBulk(items, { concurrency: 20 });\n// result.results — SendResult[] in same order as input\n// result.successCount / result.failureCount\n// result.batchId — UUID for this batch\n```\n\n### Distributed Mode\n\nEnqueues items to pg-boss for processing across multiple instances.\nEach instance's worker fetches 50 items at a time and processes them in parallel.\nFailed items are individually retried by pg-boss.\n\n```typescript\nconst result = await sendEmailBulk(items, { distributed: true });\n// Returns immediately with pending results\n// result.results[i].messageId === 'pending:{batchId}'\n```\n\n**Distributed mode flow:**\n1. Validates and renders templates\n2. Batch inserts notification records (single query)\n3. Applies tracking (email only)\n4. Bulk inserts pg-boss jobs via `sendBatch()`\n5. Returns immediately — workers process in background\n\n**Requirements:**\n- `notificationJobRouter` must be registered (see Job Router Setup below)\n- pg-boss must be initialized\n\n### Job Router Setup\n\nRegister the notification job router with your server:\n\n```typescript\nimport { defineServerConfig } from '@spfn/core/server';\nimport { defineJobRouter } from '@spfn/core/job';\nimport { notificationJobRouter } from '@spfn/notification/server';\n\ndefineServerConfig()\n    .jobs(defineJobRouter({\n        notification: notificationJobRouter,\n    }))\n    .build();\n```\n\n## Template System\n\n### Built-in Templates\n\n| Name | Channels | Purpose |\n|------|----------|---------|\n| `verification-code` | email, sms | Verification codes |\n| `welcome` | email | Welcome message |\n\n### Custom Templates\n\n```typescript\nimport { registerTemplate } from '@spfn/notification/server';\n\nregisterTemplate({\n    name: 'order-confirmation',\n    channels: ['email', 'sms'],\n\n    email: {\n        subject: '[{{appName}}] Order Confirmed',\n        html: `\n            <h1>Order #{{orderId}}</h1>\n            <p>Thank you, {{userName}}!</p>\n            <p>Total: {{amount | currency}}</p>\n        `,\n        text: 'Order #{{orderId}} confirmed. Total: {{amount}}',\n    },\n\n    sms: {\n        message: '[{{appName}}] Order #{{orderId}} confirmed. Total: {{amount | currency}}',\n    },\n});\n```\n\n### Localised Templates\n\nA template can carry content per locale. A send picks one with `locale`:\n\n```typescript\nregisterTemplate({\n    name: 'order-shipped',\n    channels: ['email', 'sms'],\n    defaultLocale: 'en',\n    locales: {\n        ko: { email: { subject: '{{orderId}} 주문이 발송되었습니다', text: '…' }, sms: { message: '…' } },\n        en: { email: { subject: 'Order {{orderId}} has shipped', text: '…' } },\n    },\n});\n\nawait sendEmail({ to, template: 'order-shipped', data: { orderId }, locale: user.locale });\n```\n\n- Resolution: the exact tag (`ko-KR`), then its base language (`ko`), then `defaultLocale`,\n  then the template's unlocalised `email`/`sms`/`slack` content. Tags match\n  case-insensitively.\n- It resolves per channel. A locale that has no content for the channel falls through to\n  the next candidate. In the example, an SMS with `locale: 'en'` finds no `en` SMS, then no\n  unlocalised SMS, and is refused; with `locale: 'ko'` it is sent in Korean.\n- A template with `locales` that has nothing for the channel in any candidate is refused\n  (`success: false`) instead of sending empty content. A template without `locales`\n  behaves as before.\n- The history row records the locale whose content was sent (`null` for unlocalised\n  content).\n- `locale` works on every send, bulk item and schedule; a scheduled send renders in it\n  when the job runs.\n\n### Template Filters\n\n```\n{{variable}}              - Basic substitution\n{{variable | uppercase}}  - Convert to uppercase\n{{variable | lowercase}}  - Convert to lowercase\n{{variable | currency}}   - Format as currency (1,000)\n{{variable | date}}       - Format as date\n{{variable | date:YYYY-MM-DD}} - Custom date format\n{{variable | truncate:20}} - Truncate to length\n{{variable | default:N/A}} - Default value if empty\n```\n\n### Custom Filters\n\n```typescript\nimport { registerFilter } from '@spfn/notification/server';\n\nregisterFilter('phone', (value) => {\n    const str = String(value);\n    return `${str.slice(0, 3)}-${str.slice(3, 7)}-${str.slice(7)}`;\n});\n\n// Usage: {{phoneNumber | phone}} -> 010-1234-5678\n```\n\n## Custom Providers\n\n### Email Provider\n\n```typescript\nimport { registerEmailProvider, EmailProvider } from '@spfn/notification/server';\n\nconst sendgridProvider: EmailProvider = {\n    name: 'sendgrid',\n    async send(params) {\n        // Your SendGrid implementation\n        return { success: true, messageId: '...' };\n    },\n};\n\nregisterEmailProvider(sendgridProvider);\n```\n\n### SMS Provider\n\n```typescript\nimport { registerSMSProvider, SMSProvider } from '@spfn/notification/server';\n\nconst twilioProvider: SMSProvider = {\n    name: 'twilio',\n    async send(params) {\n        // Your Twilio implementation\n        return { success: true, messageId: '...' };\n    },\n};\n\nregisterSMSProvider(twilioProvider);\n```\n\n## Logging & Error Handling\n\nAll channels log via `@spfn/core/logger`. Logs are tagged by channel.\n\n**Recipient fields never appear raw in logs.** Every recipient field this\npackage writes — success, failure, and validation logs alike — carries a masked\nvalue (`jo***@example.com`, `+8210******78`). A send resolved as `sensitive`\n(see [Sensitive sends](#sensitive-sends)) also keeps its subject out of the log,\nbecause a verification subject line carries the code itself; the log identifies\nthe send by template name instead. The masking helpers are exported\n(`maskEmail`, `maskPhone`, `maskRecipient`, `maskRecipients`) for application-side\nlogging of the same values.\n\n**Provider error text is scrubbed too.** A provider failure is free text and\nroutinely quotes the recipient back — an SES sandbox `MessageRejected` reads\n*\"The following identities failed the check in region US-EAST-1:\nlearner@example.com\"*. Every provider error is scrubbed of email and phone\ntokens before it reaches a log line or `history.error_message`, at the channel's\nprovider boundary — so a custom provider (see [Custom Providers](#custom-providers))\nis covered without doing anything — and again in the service that writes the\ncolumn. Only address-shaped tokens are replaced: the error *name* (`MessageRejected`),\nthe region, the request id, timestamps and message ids are the diagnostic value\nand survive untouched, and the built-in AWS providers log that name and the HTTP\nstatus alongside the scrubbed message. `scrubProviderError(text)` is exported for\napplications that log provider errors themselves.\n\nChannel tags:\n\n- `@spfn/notification:email` — Email send success/failure, validation errors\n- `@spfn/notification:sms` — SMS send success/failure, validation errors\n- `@spfn/notification:slack` — Slack send success/failure, validation errors\n- `@spfn/notification:ses` — AWS SES client lifecycle, provider errors\n- `@spfn/notification:sns` — AWS SNS client lifecycle, provider errors\n\n`sendEmail`, `sendSMS`, `sendSlack` are designed to **not throw** — they return a `SendResult` object. Always check the result:\n\n```typescript\nconst result = await sendEmail({\n    to: 'user@example.com',\n    template: 'welcome',\n    data: { name: 'John' },\n});\n\nif (!result.success)\n{\n    // result.error contains the failure reason\n    console.error('Email failed:', result.error);\n}\n```\n\n## Notification History\n\nEnable history tracking to store all notifications in the database:\n\n```typescript\nconfigureNotification({\n    enableHistory: true,\n});\n```\n\n### What a row stores — and how to store less\n\nA history row is the anchor for tracking (FK), scheduling (cancellation) and\nbulk status, so the row itself is always created when history is enabled. What\nlands **in** it is configurable, because two of its columns are privacy\nsurfaces: `recipient` is a person's address, and `content` / `template_data`\ncan carry a live credential (a magic link, an OTP code). `error_message` holds\nthe scrubbed provider message, so a row whose `recipient` is hashed cannot carry\nthe raw address in its failure text either.\n\n```typescript\nconfigureNotification({\n    enableHistory: true,\n    history: {\n        // Keep rendered content and template data out of every row.\n        // Status, provider message id, error and timestamps still land.\n        storeContent: false,\n\n        // Store an HMAC per recipient instead of the raw address.\n        // findNotifications({ recipient }) keeps working — the filter is\n        // hashed the same way. Requires a secret (config or\n        // SPFN_NOTIFICATION_HISTORY_HASH_SECRET). A plain hash would be\n        // reversible by dictionary, which is why a keyed HMAC is used.\n        storeRecipient: 'hashed',\n    },\n});\n```\n\nNeither option needs a migration — the payload columns are nullable and the\nHMAC satisfies the `recipient` column as-is.\n\n### Sensitive sends\n\nA send whose rendered output *is* a credential can opt out of payload storage\nper send, regardless of the global `storeContent` setting:\n\n```typescript\nawait sendEmail({\n    to: 'user@example.com',\n    subject: 'Your access link',\n    html: accessLinkHtml,\n    sensitive: true,    // no content, template data, or subject in the history row\n});\n```\n\nA template can declare it for every send that uses it — the built-in\n`verification-code` template does, since both its body and its subject line\ncontain the code. A per-send `sensitive: true/false` overrides the template's\ndeclaration.\n\n**Scheduled and distributed sends caveat:** a scheduled send's payload (raw\nrecipient, content, template data) necessarily travels through the pg-boss job\ntable — that is what gets sent later — and stays there until pg-boss archives\nthe job. The same applies to `sendEmailBulk` / `sendSMSBulk` with\n`distributed: true`. The history options above do not change that. If your\ncontract forbids persisting a credential at all, send it immediately and\nin-process rather than scheduling or distributing it.\n\n### Query History\n\n```typescript\nimport {\n    findNotifications,\n    getNotificationStats,\n    findScheduledNotifications,\n} from '@spfn/notification/server';\n\n// Find notifications\nconst notifications = await findNotifications({\n    channel: 'email',\n    status: 'sent',\n    recipient: 'user@example.com',\n    from: new Date('2024-01-01'),\n    limit: 100,\n});\n\n// Get statistics\nconst stats = await getNotificationStats({ channel: 'email' });\n// { total: 1000, scheduled: 10, pending: 5, sent: 980, failed: 3, cancelled: 2 }\n\n// Find scheduled notifications\nconst scheduled = await findScheduledNotifications({\n    channel: 'email',\n    from: new Date(),\n    to: new Date(Date.now() + 24 * 60 * 60 * 1000),\n});\n```\n\n## Email Tracking\n\nTrack email opens and link clicks to measure engagement.\n\n### How It Works\n\n1. **Open tracking**: A 1x1 transparent GIF is inserted before `</body>`. When the email client loads the image, an open event is recorded.\n2. **Click tracking**: `<a href>` links are wrapped with redirect URLs. When clicked, a click event is recorded and the user is redirected to the original URL.\n3. Links with `mailto:`, `tel:`, `sms:`, `javascript:`, and `#` protocols are automatically skipped.\n4. **URL fragments stay client-side.** A fragment (`#token=...`) is never sent to a server on a normal navigation — magic links carry their secret there for exactly that reason — so the rewriter keeps it out of the redirect's query string. Only the fragment-less URL is signed, sent, and recorded; the fragment rides on the tracking URL itself, and since the 302 `Location` carries no fragment, the browser re-attaches it to the destination. The click is still counted.\n5. **Per-link opt-out**: a link with a `data-no-track` attribute is left completely untouched — no rewrite, no record.\n\n```html\n<!-- tracked; #token=... never reaches the tracking endpoint -->\n<a href=\"https://app.example.com/access#token=abc\">Open your access page</a>\n\n<!-- not tracked at all -->\n<a data-no-track href=\"https://app.example.com/access#token=abc\">Open</a>\n```\n\n### Setup\n\nTracking requires:\n- `enableHistory: true` (tracking events reference the history table via FK)\n- `tracking.secret` configured (HMAC token signing)\n- `tracking.baseUrl` configured (where tracking endpoints are accessible)\n- `trackingRouter` registered in your app router\n\n```typescript\nimport { configureNotification, trackingRouter } from '@spfn/notification/server';\nimport { defineRouter } from '@spfn/core/route';\n\nconfigureNotification({\n    enableHistory: true,\n    tracking: {\n        enabled: true,\n        secret: 'your-hmac-secret-key',\n        baseUrl: 'https://api.example.com',\n    },\n});\n\n// Register tracking router (provides /_noti/t/o/:token and /_noti/t/c/:token)\nconst appRouter = defineRouter({ ... })\n    .packages([trackingRouter]);\n```\n\n### Per-Email Control\n\nOverride the global tracking setting for individual emails:\n\n```typescript\n// Force tracking on for this email (even if globally disabled)\nawait sendEmail({\n    to: 'user@example.com',\n    template: 'campaign',\n    data: { ... },\n    tracking: true,\n});\n\n// Force tracking off for this email (even if globally enabled)\nawait sendEmail({\n    to: 'admin@example.com',\n    subject: 'Internal Report',\n    html: '<p>...</p>',\n    tracking: false,\n});\n```\n\n### Priority\n\n```\nsendEmail({ tracking: true/false })              ← 1st: per-call override\nconfigureNotification({ tracking: { enabled } }) ← 2nd: code config\nSPFN_NOTIFICATION_TRACKING_ENABLED=true           ← 3rd: environment variable\n```\n\n### Tracking Endpoints\n\nThese endpoints skip authentication (accessed by email clients):\n\n| Endpoint | Response | Action |\n|----------|----------|--------|\n| `GET /_noti/t/o/:token` | 200 + 1x1 GIF | Records open event |\n| `GET /_noti/t/c/:token?url=...` | 302 redirect | Records click event, redirects to original URL |\n\n- An invalid open token still returns the pixel (UX protection); an invalid click token returns 404 — redirecting on an unverified token would be an open redirect\n- `Cache-Control: no-store` for re-open tracking\n- DB writes are fire-and-forget (response speed first)\n\n### Analytics\n\n```typescript\nimport {\n    getTrackingStats,\n    getEngagementStats,\n    getClickDetails,\n} from '@spfn/notification/server';\n\n// Stats for a specific notification\nconst stats = await getTrackingStats(notificationId);\n// { totalOpens: 15, uniqueOpens: 8, totalClicks: 5, uniqueClicks: 3 }\n\n// Overall engagement stats\nconst engagement = await getEngagementStats({ channel: 'email' });\n// { sent: 1000, opened: 450, clicked: 120, openRate: 45.00, clickRate: 12.00 }\n\n// Click details per link\nconst clicks = await getClickDetails(notificationId);\n// [{ linkUrl: 'https://...', linkIndex: 0, totalClicks: 5, uniqueClicks: 3 }]\n```\n\nUnique counts are based on distinct IP addresses.\n\n### Limitations\n\n- **Open tracking is approximate**: Email clients like Apple Mail Privacy Protection may pre-fetch images, inflating open counts.\n- Tracking auto-disables when `enableHistory: false` (FK dependency) or `tracking.secret` is not set.\n\n## API Reference\n\n### Exports\n\n```typescript\n// From '@spfn/notification'\nexport type {\n    NotificationChannel,\n    SendResult,\n    SendEmailParams,\n    SendSMSParams,\n    SendSlackParams,\n    TemplateDefinition,\n    TemplateData,\n};\n\n// From '@spfn/notification/server'\nexport {\n    // Configuration\n    configureNotification,\n    getNotificationConfig,\n\n    // Email\n    sendEmail,\n    sendEmailBulk,\n    registerEmailProvider,\n    type BulkEmailResult,\n    type BulkEmailOptions,\n\n    // SMS\n    sendSMS,\n    sendSMSBulk,\n    registerSMSProvider,\n    type BulkSMSResult,\n    type BulkSMSOptions,\n\n    // Slack\n    sendSlack,\n    sendSlackBulk,\n    registerSlackProvider,\n    type BulkSlackResult,\n    type BulkSlackOptions,\n\n    // Scheduling\n    scheduleEmail,\n    scheduleSMS,\n    cancelNotification,\n\n    // Templates\n    registerTemplate,\n    renderTemplate,\n    registerFilter,\n\n    // History\n    findNotifications,\n    getNotificationStats,\n\n    // Tracking\n    trackingRouter,\n    processTrackingHtml,\n    getTrackingStats,\n    getEngagementStats,\n    getClickDetails,\n    isTrackingEnabled,\n\n    // Jobs\n    notificationJobRouter,\n    sendBulkEmailItemJob,\n    sendBulkSmsItemJob,\n    sendBulkSlackItemJob,\n};\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}