{"_id":"@aymenkits/notify-core","name":"@aymenkits/notify-core","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@aymenkits/notify-core","version":"1.0.0","description":"Notification dispatcher: in-app record first (source of truth), then per-channel fan-out (push/email/SMS/realtime) with error isolation. Seams: NotificationStore, PreferenceResolver, TemplateRenderer, channel senders. Includes structural FCM/SMTP/Twilio/S","license":"MIT","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit"},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/aymenmokhtarikouki/notifykit.git","directory":"packages/core"},"keywords":["notifications","push","fcm","email","sms","realtime","core"],"engines":{"node":">=18"},"sideEffects":false,"homepage":"https://github.com/aymenmokhtarikouki/notifykit#readme","bugs":{"url":"https://github.com/aymenmokhtarikouki/notifykit/issues"},"author":{"name":"Aymen Mokhtari"},"_id":"@aymenkits/notify-core@1.0.0","gitHead":"4e20b2e1105d0c1e1c24a6635d59a6e0b55bdb44","_nodeVersion":"22.14.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-T1pAaIjnJsUyFt3Q+majupF19O0kJpPl8N5Wa6danPnTdIVKBAQT2LQyQo9P5KawLexUdOUeYQe0vgdPc7IjsA==","shasum":"caf00cee827dbd5086c63c85aa2a515b1a185f1f","tarball":"https://registry.npmjs.org/@aymenkits/notify-core/-/notify-core-1.0.0.tgz","fileCount":23,"unpackedSize":37274,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCSWWMGJjg6j5eMg77MktvPKH9xHndgd6oImSW/2TENLgIgM8+/8IRHYKTkpToIJSm8wP9efT8BZoyACfXu7uJPxjM="}]},"_npmUser":{"name":"aymen-mokhtari","email":"ayman.mokhtari@proton.me"},"directories":{},"maintainers":[{"name":"aymen-mokhtari","email":"ayman.mokhtari@proton.me"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/notify-core_1.0.0_1783791518131_0.8555121451900698"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-11T17:38:37.932Z","1.0.0":"2026-07-11T17:38:38.307Z","modified":"2026-07-11T17:38:38.478Z"},"maintainers":[{"name":"aymen-mokhtari","email":"ayman.mokhtari@proton.me"}],"description":"Notification dispatcher: in-app record first (source of truth), then per-channel fan-out (push/email/SMS/realtime) with error isolation. Seams: NotificationStore, PreferenceResolver, TemplateRenderer, channel senders. Includes structural FCM/SMTP/Twilio/S","homepage":"https://github.com/aymenmokhtarikouki/notifykit#readme","keywords":["notifications","push","fcm","email","sms","realtime","core"],"repository":{"type":"git","url":"git+https://github.com/aymenmokhtarikouki/notifykit.git","directory":"packages/core"},"author":{"name":"Aymen Mokhtari"},"bugs":{"url":"https://github.com/aymenmokhtarikouki/notifykit/issues"},"license":"MIT","readme":"# @aymenkits/notify-core\n\nOne notify(userIds, event) fan-out: in-app record written FIRST (source of truth for the bell/unread badge), then push/email/SMS/realtime with per-channel error isolation. Templates and preferences stay app-side via seams.\n\n## Install\n\n```bash\nnpm install @aymenkits/notify-core\n```\n\nInstalls with it: nothing else — zero dependencies.\n\n## You provide\n\n- `NotificationStore` — your in-app notifications table\n- `TemplateRenderer` — your copy/i18n: (event, channel) → message or null to skip\n- Channel senders — structural adapters included for YOUR firebase-admin messaging, nodemailer transporter, Twilio client, Socket.IO server\n- Optional `PreferenceResolver` — your per-user channel opt-outs\n\nThe package never owns tables, never imports an ORM, HTTP framework, or\nprovider SDK it can take as a parameter — storage and delivery are seams your\napp implements on its own stack.\n\n## Quick example\n\n```ts\nimport { createNotifier, fcmPushSender, socketIoEmitter } from '@aymenkits/notify-core'\n\nconst notifier = createNotifier({ store, render,\n  channels: { push: fcmPushSender(messaging, tokenStore), realtime: socketIoEmitter(io) } })\nawait notifier.notify(userId, { type: 'order.accepted', data: { orderId } })\n```\n\n## Pairs with\n\n- `@aymenkits/review-core` and `@aymenkits/chat-core` accept this Notifier as their `notifier` parameter as-is\n\nKits pair **by shape, never by import** — pass the sibling kit, your own\nservice, or a stub in tests.\n\n## Docs\n\nFull contracts and integration guides live in the repo:\nhttps://github.com/aymenmokhtarikouki/notifykit (`contracts/`, `docs/`).\n\n## License\n\nMIT\n","readmeFilename":"README.md","_rev":"1-ba2497662b46a83df783eb6e035819e0"}