hazo_notify 3.0.0 → 4.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +122 -17
- package/config/hazo_notify_config.ini +37 -0
- package/dist/components/notification_banner/index.d.ts +27 -0
- package/dist/components/notification_banner/index.d.ts.map +1 -0
- package/dist/components/notification_banner/index.js +42 -0
- package/dist/components/notification_banner/index.js.map +1 -0
- package/dist/components/notification_bell/index.d.ts +56 -0
- package/dist/components/notification_bell/index.d.ts.map +1 -0
- package/dist/components/notification_bell/index.js +73 -0
- package/dist/components/notification_bell/index.js.map +1 -0
- package/dist/components/template_manager/template_editor.js +3 -3
- package/dist/components/template_manager/template_editor.js.map +1 -1
- package/dist/components/template_manager/template_manager_admin.d.ts.map +1 -1
- package/dist/components/template_manager/template_manager_admin.js +3 -4
- package/dist/components/template_manager/template_manager_admin.js.map +1 -1
- package/dist/lib/adapters/email/adapter.d.ts +49 -0
- package/dist/lib/adapters/email/adapter.d.ts.map +1 -0
- package/dist/lib/adapters/email/adapter.js +87 -0
- package/dist/lib/adapters/email/adapter.js.map +1 -0
- package/dist/lib/adapters/email/config.d.ts +15 -0
- package/dist/lib/adapters/email/config.d.ts.map +1 -0
- package/dist/lib/{emailer/emailer.js → adapters/email/config.js} +7 -113
- package/dist/lib/adapters/email/config.js.map +1 -0
- package/dist/lib/adapters/email/envelope.d.ts +29 -0
- package/dist/lib/adapters/email/envelope.d.ts.map +1 -0
- package/dist/lib/adapters/email/envelope.js +46 -0
- package/dist/lib/adapters/email/envelope.js.map +1 -0
- package/dist/lib/adapters/email/index.d.ts +12 -0
- package/dist/lib/adapters/email/index.d.ts.map +1 -0
- package/dist/lib/adapters/email/index.js +11 -0
- package/dist/lib/adapters/email/index.js.map +1 -0
- package/dist/lib/adapters/email/providers/index.d.ts.map +1 -0
- package/dist/lib/adapters/email/providers/index.js.map +1 -0
- package/dist/lib/adapters/email/providers/pop3_provider.d.ts.map +1 -0
- package/dist/lib/adapters/email/providers/pop3_provider.js.map +1 -0
- package/dist/lib/adapters/email/providers/smtp_provider.d.ts.map +1 -0
- package/dist/lib/adapters/email/providers/smtp_provider.js.map +1 -0
- package/dist/lib/adapters/email/providers/zeptomail_provider.d.ts.map +1 -0
- package/dist/lib/adapters/email/providers/zeptomail_provider.js.map +1 -0
- package/dist/lib/{emailer/emailer.d.ts → adapters/email/send_email.d.ts} +9 -10
- package/dist/lib/adapters/email/send_email.d.ts.map +1 -0
- package/dist/lib/adapters/email/send_email.js +122 -0
- package/dist/lib/adapters/email/send_email.js.map +1 -0
- package/dist/lib/adapters/email/types.d.ts.map +1 -0
- package/dist/lib/adapters/email/types.js.map +1 -0
- package/dist/lib/adapters/email/utils/constants.d.ts.map +1 -0
- package/dist/lib/adapters/email/utils/constants.js.map +1 -0
- package/dist/lib/adapters/email/utils/index.d.ts.map +1 -0
- package/dist/lib/adapters/email/utils/index.js.map +1 -0
- package/dist/lib/adapters/email/utils/logger.d.ts.map +1 -0
- package/dist/lib/adapters/email/utils/logger.js.map +1 -0
- package/dist/lib/adapters/email/utils/validation.d.ts.map +1 -0
- package/dist/lib/adapters/email/utils/validation.js.map +1 -0
- package/dist/lib/adapters/telegram/adapter.d.ts +25 -0
- package/dist/lib/adapters/telegram/adapter.d.ts.map +1 -0
- package/dist/lib/adapters/telegram/adapter.js +75 -0
- package/dist/lib/adapters/telegram/adapter.js.map +1 -0
- package/dist/lib/adapters/telegram/config.d.ts +22 -0
- package/dist/lib/adapters/telegram/config.d.ts.map +1 -0
- package/dist/lib/adapters/telegram/config.js +60 -0
- package/dist/lib/adapters/telegram/config.js.map +1 -0
- package/dist/lib/adapters/telegram/index.d.ts +8 -0
- package/dist/lib/adapters/telegram/index.d.ts.map +1 -0
- package/dist/lib/adapters/telegram/index.js +5 -0
- package/dist/lib/adapters/telegram/index.js.map +1 -0
- package/dist/lib/adapters/telegram/splitter.d.ts +7 -0
- package/dist/lib/adapters/telegram/splitter.d.ts.map +1 -0
- package/dist/lib/adapters/telegram/splitter.js +47 -0
- package/dist/lib/adapters/telegram/splitter.js.map +1 -0
- package/dist/lib/adapters/telegram/transport.d.ts +31 -0
- package/dist/lib/adapters/telegram/transport.d.ts.map +1 -0
- package/dist/lib/adapters/telegram/transport.js +112 -0
- package/dist/lib/adapters/telegram/transport.js.map +1 -0
- package/dist/lib/api/banner.d.ts +41 -0
- package/dist/lib/api/banner.d.ts.map +1 -0
- package/dist/lib/api/banner.js +53 -0
- package/dist/lib/api/banner.js.map +1 -0
- package/dist/lib/api/inbox.d.ts +33 -0
- package/dist/lib/api/inbox.d.ts.map +1 -0
- package/dist/lib/api/inbox.js +52 -0
- package/dist/lib/api/inbox.js.map +1 -0
- package/dist/lib/channels/index.d.ts +3 -0
- package/dist/lib/channels/index.d.ts.map +1 -0
- package/dist/lib/channels/index.js +3 -0
- package/dist/lib/channels/index.js.map +1 -0
- package/dist/lib/channels/registry.d.ts +7 -0
- package/dist/lib/channels/registry.d.ts.map +1 -0
- package/dist/lib/channels/registry.js +24 -0
- package/dist/lib/channels/registry.js.map +1 -0
- package/dist/lib/channels/types.d.ts +82 -0
- package/dist/lib/channels/types.d.ts.map +1 -0
- package/dist/lib/channels/types.js +8 -0
- package/dist/lib/channels/types.js.map +1 -0
- package/dist/lib/dispatcher/batch-key.d.ts +15 -0
- package/dist/lib/dispatcher/batch-key.d.ts.map +1 -0
- package/dist/lib/dispatcher/batch-key.js +19 -0
- package/dist/lib/dispatcher/batch-key.js.map +1 -0
- package/dist/lib/dispatcher/index.d.ts +4 -0
- package/dist/lib/dispatcher/index.d.ts.map +1 -0
- package/dist/lib/dispatcher/index.js +73 -0
- package/dist/lib/dispatcher/index.js.map +1 -0
- package/dist/lib/inbox/connection.d.ts +19 -0
- package/dist/lib/inbox/connection.d.ts.map +1 -0
- package/dist/lib/inbox/connection.js +34 -0
- package/dist/lib/inbox/connection.js.map +1 -0
- package/dist/lib/inbox/dialects/index.d.ts +10 -0
- package/dist/lib/inbox/dialects/index.d.ts.map +1 -0
- package/dist/lib/inbox/dialects/index.js +13 -0
- package/dist/lib/inbox/dialects/index.js.map +1 -0
- package/dist/lib/inbox/dialects/postgres.d.ts +3 -0
- package/dist/lib/inbox/dialects/postgres.d.ts.map +1 -0
- package/dist/lib/inbox/dialects/postgres.js +110 -0
- package/dist/lib/inbox/dialects/postgres.js.map +1 -0
- package/dist/lib/inbox/dialects/sqlite.d.ts +3 -0
- package/dist/lib/inbox/dialects/sqlite.d.ts.map +1 -0
- package/dist/lib/inbox/dialects/sqlite.js +120 -0
- package/dist/lib/inbox/dialects/sqlite.js.map +1 -0
- package/dist/lib/inbox/dialects/types.d.ts +53 -0
- package/dist/lib/inbox/dialects/types.d.ts.map +1 -0
- package/dist/lib/inbox/dialects/types.js +2 -0
- package/dist/lib/inbox/dialects/types.js.map +1 -0
- package/dist/lib/inbox/index.d.ts +9 -0
- package/dist/lib/inbox/index.d.ts.map +1 -0
- package/dist/lib/inbox/index.js +6 -0
- package/dist/lib/inbox/index.js.map +1 -0
- package/dist/lib/inbox/storage.d.ts +21 -0
- package/dist/lib/inbox/storage.d.ts.map +1 -0
- package/dist/lib/inbox/storage.js +94 -0
- package/dist/lib/inbox/storage.js.map +1 -0
- package/dist/lib/inbox/types.d.ts +57 -0
- package/dist/lib/inbox/types.d.ts.map +1 -0
- package/dist/lib/inbox/types.js +2 -0
- package/dist/lib/inbox/types.js.map +1 -0
- package/dist/lib/inbox/worker/cleanup.d.ts +14 -0
- package/dist/lib/inbox/worker/cleanup.d.ts.map +1 -0
- package/dist/lib/inbox/worker/cleanup.js +37 -0
- package/dist/lib/inbox/worker/cleanup.js.map +1 -0
- package/dist/lib/inbox/worker/flush.d.ts +31 -0
- package/dist/lib/inbox/worker/flush.d.ts.map +1 -0
- package/dist/lib/inbox/worker/flush.js +97 -0
- package/dist/lib/inbox/worker/flush.js.map +1 -0
- package/dist/lib/inbox/worker/render.d.ts +23 -0
- package/dist/lib/inbox/worker/render.d.ts.map +1 -0
- package/dist/lib/inbox/worker/render.js +42 -0
- package/dist/lib/inbox/worker/render.js.map +1 -0
- package/dist/lib/inbox/worker/start.d.ts +29 -0
- package/dist/lib/inbox/worker/start.d.ts.map +1 -0
- package/dist/lib/inbox/worker/start.js +100 -0
- package/dist/lib/inbox/worker/start.js.map +1 -0
- package/dist/lib/index.d.ts +1 -6
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +4 -6
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/jobs/handler.d.ts +25 -0
- package/dist/lib/jobs/handler.d.ts.map +1 -0
- package/dist/lib/jobs/handler.js +36 -0
- package/dist/lib/jobs/handler.js.map +1 -0
- package/dist/lib/jobs/index.d.ts +16 -0
- package/dist/lib/jobs/index.d.ts.map +1 -0
- package/dist/lib/jobs/index.js +13 -0
- package/dist/lib/jobs/index.js.map +1 -0
- package/dist/lib/jobs/submit.d.ts +20 -0
- package/dist/lib/jobs/submit.d.ts.map +1 -0
- package/dist/lib/jobs/submit.js +25 -0
- package/dist/lib/jobs/submit.js.map +1 -0
- package/dist/lib/jobs/types.d.ts +42 -0
- package/dist/lib/jobs/types.d.ts.map +1 -0
- package/dist/lib/jobs/types.js +12 -0
- package/dist/lib/jobs/types.js.map +1 -0
- package/dist/lib/template_manager/db/template_repository.d.ts.map +1 -1
- package/dist/lib/template_manager/db/template_repository.js +16 -31
- package/dist/lib/template_manager/db/template_repository.js.map +1 -1
- package/dist/lib/template_manager/engine/variable_resolver.js +4 -4
- package/dist/lib/template_manager/engine/variable_resolver.js.map +1 -1
- package/dist/lib/template_manager/handlers/adapters/hazo_auth.d.ts +20 -0
- package/dist/lib/template_manager/handlers/adapters/hazo_auth.d.ts.map +1 -0
- package/dist/lib/template_manager/handlers/adapters/hazo_auth.js +46 -0
- package/dist/lib/template_manager/handlers/adapters/hazo_auth.js.map +1 -0
- package/dist/lib/template_manager/handlers/auth.d.ts +47 -0
- package/dist/lib/template_manager/handlers/auth.d.ts.map +1 -0
- package/dist/lib/template_manager/handlers/auth.js +67 -0
- package/dist/lib/template_manager/handlers/auth.js.map +1 -0
- package/dist/lib/template_manager/handlers/index.d.ts +67 -0
- package/dist/lib/template_manager/handlers/index.d.ts.map +1 -0
- package/dist/lib/template_manager/handlers/index.js +282 -0
- package/dist/lib/template_manager/handlers/index.js.map +1 -0
- package/dist/lib/template_manager/seed/sync.d.ts.map +1 -1
- package/dist/lib/template_manager/seed/sync.js +20 -4
- package/dist/lib/template_manager/seed/sync.js.map +1 -1
- package/dist/lib/template_manager/template_manager.d.ts.map +1 -1
- package/dist/lib/template_manager/template_manager.js +67 -26
- package/dist/lib/template_manager/template_manager.js.map +1 -1
- package/dist/lib/template_manager/types.d.ts +35 -9
- package/dist/lib/template_manager/types.d.ts.map +1 -1
- package/dist/lib/template_manager/utils/index.d.ts +1 -1
- package/dist/lib/template_manager/utils/index.d.ts.map +1 -1
- package/dist/lib/template_manager/utils/index.js +1 -1
- package/dist/lib/template_manager/utils/index.js.map +1 -1
- package/dist/lib/template_manager/utils/validation.d.ts +12 -11
- package/dist/lib/template_manager/utils/validation.d.ts.map +1 -1
- package/dist/lib/template_manager/utils/validation.js +15 -22
- package/dist/lib/template_manager/utils/validation.js.map +1 -1
- package/migrations/003_create_notifications_table.sql +48 -0
- package/migrations/004_inbox_upsert_rpc.sql +63 -0
- package/migrations/005_inbox_v4_refactor.pg.sql +53 -0
- package/migrations/005_inbox_v4_refactor.sqlite.sql +30 -0
- package/migrations/006_channel_deliveries.pg.sql +61 -0
- package/migrations/006_channel_deliveries.sqlite.sql +26 -0
- package/migrations/007_templates_bodies_jsonb.pg.sql +17 -0
- package/migrations/007_templates_bodies_jsonb.sqlite.sql +18 -0
- package/package.json +63 -14
- package/dist/lib/emailer/emailer.d.ts.map +0 -1
- package/dist/lib/emailer/emailer.js.map +0 -1
- package/dist/lib/emailer/index.d.ts +0 -12
- package/dist/lib/emailer/index.d.ts.map +0 -1
- package/dist/lib/emailer/index.js +0 -13
- package/dist/lib/emailer/index.js.map +0 -1
- package/dist/lib/emailer/providers/index.d.ts.map +0 -1
- package/dist/lib/emailer/providers/index.js.map +0 -1
- package/dist/lib/emailer/providers/pop3_provider.d.ts.map +0 -1
- package/dist/lib/emailer/providers/pop3_provider.js.map +0 -1
- package/dist/lib/emailer/providers/smtp_provider.d.ts.map +0 -1
- package/dist/lib/emailer/providers/smtp_provider.js.map +0 -1
- package/dist/lib/emailer/providers/zeptomail_provider.d.ts.map +0 -1
- package/dist/lib/emailer/providers/zeptomail_provider.js.map +0 -1
- package/dist/lib/emailer/types.d.ts.map +0 -1
- package/dist/lib/emailer/types.js.map +0 -1
- package/dist/lib/emailer/utils/constants.d.ts.map +0 -1
- package/dist/lib/emailer/utils/constants.js.map +0 -1
- package/dist/lib/emailer/utils/index.d.ts.map +0 -1
- package/dist/lib/emailer/utils/index.js.map +0 -1
- package/dist/lib/emailer/utils/logger.d.ts.map +0 -1
- package/dist/lib/emailer/utils/logger.js.map +0 -1
- package/dist/lib/emailer/utils/validation.d.ts.map +0 -1
- package/dist/lib/emailer/utils/validation.js.map +0 -1
- /package/dist/lib/{emailer → adapters/email}/providers/index.d.ts +0 -0
- /package/dist/lib/{emailer → adapters/email}/providers/index.js +0 -0
- /package/dist/lib/{emailer → adapters/email}/providers/pop3_provider.d.ts +0 -0
- /package/dist/lib/{emailer → adapters/email}/providers/pop3_provider.js +0 -0
- /package/dist/lib/{emailer → adapters/email}/providers/smtp_provider.d.ts +0 -0
- /package/dist/lib/{emailer → adapters/email}/providers/smtp_provider.js +0 -0
- /package/dist/lib/{emailer → adapters/email}/providers/zeptomail_provider.d.ts +0 -0
- /package/dist/lib/{emailer → adapters/email}/providers/zeptomail_provider.js +0 -0
- /package/dist/lib/{emailer → adapters/email}/types.d.ts +0 -0
- /package/dist/lib/{emailer → adapters/email}/types.js +0 -0
- /package/dist/lib/{emailer → adapters/email}/utils/constants.d.ts +0 -0
- /package/dist/lib/{emailer → adapters/email}/utils/constants.js +0 -0
- /package/dist/lib/{emailer → adapters/email}/utils/index.d.ts +0 -0
- /package/dist/lib/{emailer → adapters/email}/utils/index.js +0 -0
- /package/dist/lib/{emailer → adapters/email}/utils/logger.d.ts +0 -0
- /package/dist/lib/{emailer → adapters/email}/utils/logger.js +0 -0
- /package/dist/lib/{emailer → adapters/email}/utils/validation.d.ts +0 -0
- /package/dist/lib/{emailer → adapters/email}/utils/validation.js +0 -0
package/README.md
CHANGED
|
@@ -2,7 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
A reusable component library for sending email notifications with scope-aware template management. Implements Zeptomail API integration with support for text and HTML emails, Handlebars-based email templates with multi-tenant resolution, multiple attachments, and comprehensive security features.
|
|
4
4
|
|
|
5
|
-
**Version**:
|
|
5
|
+
**Version**: 4.0.2
|
|
6
|
+
|
|
7
|
+
> **⚠ Readers on v4:** Many examples below still show the v3.x API surface (`send_email`, `hazo_notify/emailer`, `channels: { in_app, email, banner }`, direct `template_html` / `template_text` access). **v4.0.0 introduced a channel-pluggable architecture** — outbound sends go through `dispatch()` → inbox row + per-channel delivery row → `EmailChannel`/`TelegramChannel` adapter, with a multi-channel worker fleet. For the current v4 API see:
|
|
8
|
+
>
|
|
9
|
+
> - [`TECHDOC.md`](./TECHDOC.md) — v4 architecture and API reference (channel registry, dispatch flow, worker fleet, adapters, schema)
|
|
10
|
+
> - [`SETUP_CHECKLIST.md`](./SETUP_CHECKLIST.md) §"v4.0.0 Migration" — migrations 005/006/007, dispatch rewrite, boot changes
|
|
11
|
+
> - [`CHANGE_LOG.md`](./CHANGE_LOG.md) — full breaking-change manifest for v4.0.0
|
|
12
|
+
>
|
|
13
|
+
> A full v4-aware rewrite of this README is tracked for v4.0.2. The examples that follow remain accurate for v3.x consumers; v4 consumers should read the docs above.
|
|
6
14
|
|
|
7
15
|
## Features
|
|
8
16
|
|
|
@@ -22,7 +30,8 @@ A reusable component library for sending email notifications with scope-aware te
|
|
|
22
30
|
- **Caching**: Template compilation caching for performance
|
|
23
31
|
|
|
24
32
|
### General
|
|
25
|
-
- **Test
|
|
33
|
+
- **Test app** (v4.0.2+): Self-contained Next.js demo at `test-app/` mirroring the layout of `hazo_jobs/test-app/`. Runs on port 3020 (`npm run dev:test-app`) and covers every shipping surface — emailer, telegram, dispatch, templates, inbox/bell/banner, worker, jobs admin. Excluded from the published tarball.
|
|
34
|
+
- **hazo_jobs integration** (v4.0.2+): New `hazo_notify/jobs` subpath exporting `createInboxFlushHandler` and `submitInboxFlushJobs` so consumers can drive the inbox-flush worker from their own [`hazo_jobs`](https://www.npmjs.com/package/hazo_jobs) queue. `hazo_jobs` is an optional peer dep.
|
|
26
35
|
- **TypeScript**: Fully typed with TypeScript
|
|
27
36
|
- **Testing**: Test coverage with Jest
|
|
28
37
|
|
|
@@ -46,7 +55,7 @@ v2.0.0 introduces scope-aware template management, which requires a database mig
|
|
|
46
55
|
4. **Initialize template manager**: Call `init_template_manager(...)` in your `instrumentation.ts` or app bootstrap.
|
|
47
56
|
5. **Update Tailwind config** (if using admin UI): Add `@source "../node_modules/hazo_notify/dist";` to your Tailwind CSS entry.
|
|
48
57
|
|
|
49
|
-
The `send_email()` API is fully backward-compatible
|
|
58
|
+
The `send_email()` API is fully backward-compatible **through v3.x**. v4.0.0 removed the top-level `send_email()` export — see [`SETUP_CHECKLIST.md`](./SETUP_CHECKLIST.md) §"v4.0.0 Migration" for the `dispatch()` / `EmailChannel#send()` replacement pattern.
|
|
50
59
|
|
|
51
60
|
### Optional: Enhanced Logging with hazo_logs
|
|
52
61
|
|
|
@@ -214,6 +223,61 @@ CREATE INDEX IF NOT EXISTS idx_notify_templates_name
|
|
|
214
223
|
}
|
|
215
224
|
```
|
|
216
225
|
|
|
226
|
+
## v4 multi-channel quick start
|
|
227
|
+
|
|
228
|
+
```typescript
|
|
229
|
+
import { initInbox, startInboxWorker } from "hazo_notify/inbox";
|
|
230
|
+
import { registerChannel } from "hazo_notify/channels";
|
|
231
|
+
import { EmailChannel } from "hazo_notify/adapters/email";
|
|
232
|
+
import { TelegramChannel } from "hazo_notify/adapters/telegram";
|
|
233
|
+
import { dispatch } from "hazo_notify/dispatcher";
|
|
234
|
+
|
|
235
|
+
// 1. Initialize the inbox connection
|
|
236
|
+
await initInbox({ hazo_connect_factory: () => createHazoConnect(...) });
|
|
237
|
+
|
|
238
|
+
// 2. Register channels (explicit, no auto-discovery)
|
|
239
|
+
registerChannel(new EmailChannel());
|
|
240
|
+
registerChannel(new TelegramChannel());
|
|
241
|
+
|
|
242
|
+
// 3. Start the worker fleet
|
|
243
|
+
startInboxWorker({
|
|
244
|
+
resolveRecipient: async (user_id, scope_id, channel_id) => {
|
|
245
|
+
if (channel_id === "email") return (await users.get(user_id))?.email ?? null;
|
|
246
|
+
if (channel_id === "telegram") return process.env.TELEGRAM_CHAT_ID ?? null;
|
|
247
|
+
return null;
|
|
248
|
+
},
|
|
249
|
+
});
|
|
250
|
+
|
|
251
|
+
// 4. Dispatch
|
|
252
|
+
await dispatch({
|
|
253
|
+
event_type: "site.run_failed",
|
|
254
|
+
subject_id: site_id,
|
|
255
|
+
scope_id, recipient_user_ids: [user_id],
|
|
256
|
+
in_app_text: "Run failed",
|
|
257
|
+
deep_link: `/runs/${run_id}`,
|
|
258
|
+
surfaces: { in_app: true, banner: false },
|
|
259
|
+
channels: { email: true, telegram: true },
|
|
260
|
+
channel_payloads: {
|
|
261
|
+
email: { subject: "Run failed", body_text: "...", template_name: "run-failure", template_vars: {/* ... */} },
|
|
262
|
+
telegram: { text: "Run failed", parse_mode: "HTML", template_name: "run-failure", template_vars: {/* ... */} },
|
|
263
|
+
},
|
|
264
|
+
batch_window_ms: 0,
|
|
265
|
+
});
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
See [`CHANGE_LOG.md`](./CHANGE_LOG.md) for the v3 → v4 migration guide.
|
|
269
|
+
|
|
270
|
+
### Live e2e tests (opt-in)
|
|
271
|
+
|
|
272
|
+
```bash
|
|
273
|
+
RUN_LIVE_TESTS=1 \
|
|
274
|
+
TELEGRAM_TEST_BOT_TOKEN=… \
|
|
275
|
+
TELEGRAM_TEST_CHAT_ID=… \
|
|
276
|
+
npm test -- __tests__/e2e
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
Skipped by default in CI.
|
|
280
|
+
|
|
217
281
|
## Configuration
|
|
218
282
|
|
|
219
283
|
### Step 1: Create Environment Variables File
|
|
@@ -956,26 +1020,67 @@ import {
|
|
|
956
1020
|
|
|
957
1021
|
All CRUD functions take a `hazo_connect` instance as their first argument.
|
|
958
1022
|
|
|
959
|
-
## Test
|
|
1023
|
+
## Test app (v4.0.2+)
|
|
1024
|
+
|
|
1025
|
+
The Next.js test UI that lived under `src/app/` in v3.x and v4.0.x has moved to
|
|
1026
|
+
a dedicated `test-app/` sibling directory (mirroring `hazo_jobs/test-app/`).
|
|
1027
|
+
The library itself no longer depends on Next.js at runtime.
|
|
1028
|
+
|
|
1029
|
+
```bash
|
|
1030
|
+
# from the package root
|
|
1031
|
+
npm run dev:test-app # build lib + boot Next dev on http://localhost:3020
|
|
1032
|
+
npm run worker:test-app # in a second terminal — drains inbox-flush jobs
|
|
1033
|
+
```
|
|
960
1034
|
|
|
961
|
-
|
|
1035
|
+
The test-app provides one route per shipping surface:
|
|
962
1036
|
|
|
963
|
-
|
|
1037
|
+
| Route | What it exercises |
|
|
1038
|
+
|---|---|
|
|
1039
|
+
| `/` | Overview dashboard with pending/unread/queued counts |
|
|
1040
|
+
| `/emailer` | Direct `EmailChannel.send` via `/api/notify/send/email` |
|
|
1041
|
+
| `/telegram` | Direct `TelegramChannel.send` via `/api/notify/send/telegram` |
|
|
1042
|
+
| `/dispatch` | `dispatch()` + `submitInboxFlushJobs()` (auto-queues a worker job per channel) |
|
|
1043
|
+
| `/templates` | Mounted `<TemplateManagerAdmin>` |
|
|
1044
|
+
| `/inbox` | `<NotificationBell>` + `<NotificationBanner>` + raw inbox API view |
|
|
1045
|
+
| `/worker` | Last-10 `hazo_notify.inbox_flush` job table from `hazo_jobs` |
|
|
1046
|
+
| `/admin` | Mounted `<JobsAdminPanel>` from `hazo_jobs/ui` |
|
|
964
1047
|
|
|
965
|
-
-
|
|
966
|
-
- **Text and HTML Support**: Test both plain text and HTML emails
|
|
967
|
-
- **Newline Conversion**: HTML input automatically converts newlines to `<br>` tags
|
|
968
|
-
- **Raw Request Display**: View the exact request payload that will be sent
|
|
969
|
-
- **Response Display**: View the complete response from the email provider
|
|
970
|
-
- **Error Handling**: Clear error messages for validation and API errors
|
|
1048
|
+
The test-app is excluded from the published npm tarball.
|
|
971
1049
|
|
|
972
|
-
###
|
|
1050
|
+
### hazo_jobs integration (`hazo_notify/jobs`)
|
|
973
1051
|
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
1052
|
+
v4.0.2 ships a new subpath export for projects that want to drive the inbox
|
|
1053
|
+
flush worker through their own [`hazo_jobs`](https://www.npmjs.com/package/hazo_jobs)
|
|
1054
|
+
queue rather than running the bundled `startInboxWorker`:
|
|
1055
|
+
|
|
1056
|
+
```ts
|
|
1057
|
+
import {
|
|
1058
|
+
INBOX_FLUSH_JOB_TYPE,
|
|
1059
|
+
createInboxFlushHandler,
|
|
1060
|
+
submitInboxFlushJobs,
|
|
1061
|
+
} from "hazo_notify/jobs";
|
|
1062
|
+
|
|
1063
|
+
// In your hazo_jobs worker process:
|
|
1064
|
+
const proc = createWorkerProcess({
|
|
1065
|
+
adapter,
|
|
1066
|
+
dialect: "sqlite",
|
|
1067
|
+
types: [INBOX_FLUSH_JOB_TYPE],
|
|
1068
|
+
handlers: {
|
|
1069
|
+
[INBOX_FLUSH_JOB_TYPE]: createInboxFlushHandler({
|
|
1070
|
+
resolveRecipient, // (user_id, scope_id, channel_id) => Promise<string | null>
|
|
1071
|
+
batch_size: 50,
|
|
1072
|
+
concurrency: 4,
|
|
1073
|
+
}),
|
|
1074
|
+
},
|
|
1075
|
+
});
|
|
1076
|
+
|
|
1077
|
+
// Immediately after dispatch(), enqueue one flush per enabled channel:
|
|
1078
|
+
await submitInboxFlushJobs(jobsClient, { channels: ["email", "telegram"] });
|
|
1079
|
+
```
|
|
977
1080
|
|
|
978
|
-
|
|
1081
|
+
`hazo_jobs` is an **optional** peer dependency — the package only declares the
|
|
1082
|
+
structural types it needs and never imports `hazo_jobs` at runtime. See
|
|
1083
|
+
`test-app/worker.ts` for a full worker example.
|
|
979
1084
|
|
|
980
1085
|
## Security Features
|
|
981
1086
|
|
|
@@ -190,3 +190,40 @@ enable_ui=true
|
|
|
190
190
|
# - year: Current year (e.g., 2024)
|
|
191
191
|
# - month_name: Current month name (e.g., January)
|
|
192
192
|
# - day_of_week: Current day of week (e.g., Monday)
|
|
193
|
+
|
|
194
|
+
[telegram]
|
|
195
|
+
# Required: Telegram bot HTTP token from @BotFather.
|
|
196
|
+
# For security, prefer setting HAZO_NOTIFY_TELEGRAM_BOT_TOKEN in .env.local.
|
|
197
|
+
# bot_token =
|
|
198
|
+
|
|
199
|
+
# Required when DispatchInput omits chat_id (single-chat deployments).
|
|
200
|
+
# Or set HAZO_NOTIFY_TELEGRAM_DEFAULT_CHAT_ID.
|
|
201
|
+
# default_chat_id =
|
|
202
|
+
|
|
203
|
+
# Optional. HTML | Markdown | MarkdownV2. Default: HTML.
|
|
204
|
+
# parse_mode = HTML
|
|
205
|
+
|
|
206
|
+
# Optional. Default: true.
|
|
207
|
+
# disable_web_page_preview = true
|
|
208
|
+
|
|
209
|
+
# Optional. direct | browser-tab | auto. Default: direct.
|
|
210
|
+
# - direct: fetch() to api.telegram.org
|
|
211
|
+
# - browser-tab: host registers a callback via setTelegramBrowserTransport()
|
|
212
|
+
# - auto: direct first, fallback to browser-tab on network error
|
|
213
|
+
# transport = direct
|
|
214
|
+
|
|
215
|
+
# Optional. Default: 10000.
|
|
216
|
+
# request_timeout_ms = 10000
|
|
217
|
+
|
|
218
|
+
# Optional. Override for proxies or test fixtures. Default: https://api.telegram.org
|
|
219
|
+
# api_base_url = https://api.telegram.org
|
|
220
|
+
|
|
221
|
+
[inbox]
|
|
222
|
+
# Aggregation window for dispatch() when batch_window_ms not supplied per-call.
|
|
223
|
+
# default_batch_window_ms = 300000
|
|
224
|
+
|
|
225
|
+
# How long to keep read inbox rows before purge (milliseconds).
|
|
226
|
+
# read_retention_ms = 2592000000 # 30 days
|
|
227
|
+
|
|
228
|
+
# How long to keep finalized (sent/failed) delivery rows before purge (milliseconds).
|
|
229
|
+
# failed_delivery_retention_ms = 2592000000 # 30 days
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Banner component for the client portal.
|
|
3
|
+
*
|
|
4
|
+
* Mounts in the client layout; polls /summary every 60s while visible.
|
|
5
|
+
* Renders a sticky strip when unread > 0; dismiss is session-local.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
export interface BannerSummary {
|
|
10
|
+
unread_count: number;
|
|
11
|
+
latest: {
|
|
12
|
+
id: string;
|
|
13
|
+
in_app_text: string;
|
|
14
|
+
deep_link: string;
|
|
15
|
+
created_at: string;
|
|
16
|
+
} | null;
|
|
17
|
+
}
|
|
18
|
+
export interface NotificationBannerProps {
|
|
19
|
+
apiBasePath: string;
|
|
20
|
+
code: string;
|
|
21
|
+
pollIntervalMs?: number;
|
|
22
|
+
onView?: (summary: BannerSummary) => void;
|
|
23
|
+
fallbackInboxHref?: string;
|
|
24
|
+
className?: string;
|
|
25
|
+
}
|
|
26
|
+
export declare function NotificationBanner({ apiBasePath, code, pollIntervalMs, onView, fallbackInboxHref, className, }: NotificationBannerProps): import("react/jsx-runtime").JSX.Element | null;
|
|
27
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/notification_banner/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAC3F;AAED,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;IAC1C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,kBAAkB,CAAC,EACjC,WAAW,EACX,IAAI,EACJ,cAAgC,EAChC,MAAM,EACN,iBAAiB,EACjB,SAAS,GACV,EAAE,uBAAuB,kDA4CzB"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Banner component for the client portal.
|
|
4
|
+
*
|
|
5
|
+
* Mounts in the client layout; polls /summary every 60s while visible.
|
|
6
|
+
* Renders a sticky strip when unread > 0; dismiss is session-local.
|
|
7
|
+
*
|
|
8
|
+
* @packageDocumentation
|
|
9
|
+
*/
|
|
10
|
+
import { useEffect, useState, useCallback } from "react";
|
|
11
|
+
const DEFAULT_POLL_MS = 60000;
|
|
12
|
+
export function NotificationBanner({ apiBasePath, code, pollIntervalMs = DEFAULT_POLL_MS, onView, fallbackInboxHref, className, }) {
|
|
13
|
+
const [summary, setSummary] = useState(null);
|
|
14
|
+
const [dismissed, setDismissed] = useState(false);
|
|
15
|
+
const fetchSummary = useCallback(async () => {
|
|
16
|
+
try {
|
|
17
|
+
const r = await fetch(`${apiBasePath}/${code}/summary`, { credentials: "include" });
|
|
18
|
+
if (!r.ok)
|
|
19
|
+
return;
|
|
20
|
+
setSummary(await r.json());
|
|
21
|
+
}
|
|
22
|
+
catch { /* ignore */ }
|
|
23
|
+
}, [apiBasePath, code]);
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
fetchSummary();
|
|
26
|
+
const t = setInterval(() => {
|
|
27
|
+
if (typeof document !== "undefined" && document.visibilityState === "visible")
|
|
28
|
+
fetchSummary();
|
|
29
|
+
}, pollIntervalMs);
|
|
30
|
+
return () => clearInterval(t);
|
|
31
|
+
}, [fetchSummary, pollIntervalMs]);
|
|
32
|
+
if (dismissed)
|
|
33
|
+
return null;
|
|
34
|
+
if (!summary || summary.unread_count === 0)
|
|
35
|
+
return null;
|
|
36
|
+
const count = summary.unread_count;
|
|
37
|
+
const target = count === 1 && summary.latest ? summary.latest.deep_link : fallbackInboxHref ?? "#";
|
|
38
|
+
return (_jsxs("div", { role: "status", className: className ?? "client-theme bg-orange-50 border-l-4 border-orange-500 px-4 py-3 flex items-center justify-between", style: { position: "sticky", top: 0, zIndex: 40 }, children: [_jsx("span", { children: count === 1
|
|
39
|
+
? "You have 1 new item from your tax agent."
|
|
40
|
+
: `You have ${count} new items from your tax agent.` }), _jsxs("span", { children: [_jsx("a", { href: target, onClick: () => onView?.(summary), children: "View" }), " · ", _jsx("button", { onClick: () => setDismissed(true), "aria-label": "Dismiss", children: "\u2715" })] })] }));
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/notification_banner/index.tsx"],"names":[],"mappings":";AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAkB,MAAM,OAAO,CAAC;AAEzE,MAAM,eAAe,GAAG,KAAM,CAAC;AAgB/B,MAAM,UAAU,kBAAkB,CAAC,EACjC,WAAW,EACX,IAAI,EACJ,cAAc,GAAG,eAAe,EAChC,MAAM,EACN,iBAAiB,EACjB,SAAS,GACe;IACxB,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAuB,IAAI,CAAC,CAAC;IACnE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAElD,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC1C,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,GAAG,WAAW,IAAI,IAAI,UAAU,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;YACpF,IAAI,CAAC,CAAC,CAAC,EAAE;gBAAE,OAAO;YAClB,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC,CAAA,YAAY,CAAA,CAAC;IACxB,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;IAExB,SAAS,CAAC,GAAG,EAAE;QACb,YAAY,EAAE,CAAC;QACf,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE;YACzB,IAAI,OAAO,QAAQ,KAAK,WAAW,IAAI,QAAQ,CAAC,eAAe,KAAK,SAAS;gBAAE,YAAY,EAAE,CAAC;QAChG,CAAC,EAAE,cAAc,CAAC,CAAC;QACnB,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC,EAAE,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC,CAAC;IAEnC,IAAI,SAAS;QAAE,OAAO,IAAI,CAAC;IAC3B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,YAAY,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAExD,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC;IACnC,MAAM,MAAM,GAAG,KAAK,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,IAAI,GAAG,CAAC;IAEnG,OAAO,CACL,eACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,SAAS,IAAI,oGAAoG,EAC5H,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,aAEjD,yBACG,KAAK,KAAK,CAAC;oBACV,CAAC,CAAC,0CAA0C;oBAC5C,CAAC,CAAC,YAAY,KAAK,iCAAiC,GACjD,EACP,2BACE,YAAG,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,qBAAU,EAC1D,KAAK,EACN,iBAAQ,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAa,SAAS,uBAAW,IACrE,IACH,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bell component for the office portal.
|
|
3
|
+
*
|
|
4
|
+
* Polls `unread-count` on interval; lazily fetches list on dropdown open.
|
|
5
|
+
* Shadcn primitives injected via `components` prop — package free of UI deps.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
import { type ComponentType, type ReactNode } from "react";
|
|
10
|
+
export interface InboxItem {
|
|
11
|
+
id: string;
|
|
12
|
+
event_type: string;
|
|
13
|
+
in_app_text: string;
|
|
14
|
+
deep_link: string;
|
|
15
|
+
aggregate_count: number;
|
|
16
|
+
read_at: string | null;
|
|
17
|
+
created_at: string;
|
|
18
|
+
}
|
|
19
|
+
export interface NotificationBellComponents {
|
|
20
|
+
Button: ComponentType<{
|
|
21
|
+
children?: ReactNode;
|
|
22
|
+
onClick?: () => void;
|
|
23
|
+
[k: string]: unknown;
|
|
24
|
+
}>;
|
|
25
|
+
DropdownMenu: ComponentType<{
|
|
26
|
+
children?: ReactNode;
|
|
27
|
+
open?: boolean;
|
|
28
|
+
onOpenChange?: (o: boolean) => void;
|
|
29
|
+
}>;
|
|
30
|
+
DropdownMenuTrigger: ComponentType<{
|
|
31
|
+
children?: ReactNode;
|
|
32
|
+
asChild?: boolean;
|
|
33
|
+
}>;
|
|
34
|
+
DropdownMenuContent: ComponentType<{
|
|
35
|
+
children?: ReactNode;
|
|
36
|
+
align?: string;
|
|
37
|
+
className?: string;
|
|
38
|
+
}>;
|
|
39
|
+
DropdownMenuItem: ComponentType<{
|
|
40
|
+
children?: ReactNode;
|
|
41
|
+
onClick?: () => void;
|
|
42
|
+
}>;
|
|
43
|
+
Badge: ComponentType<{
|
|
44
|
+
children?: ReactNode;
|
|
45
|
+
variant?: string;
|
|
46
|
+
}>;
|
|
47
|
+
}
|
|
48
|
+
export interface NotificationBellProps {
|
|
49
|
+
apiBasePath?: string;
|
|
50
|
+
pollIntervalMs?: number;
|
|
51
|
+
components: NotificationBellComponents;
|
|
52
|
+
onItemClick?: (item: InboxItem) => void;
|
|
53
|
+
bellIcon?: ReactNode;
|
|
54
|
+
}
|
|
55
|
+
export declare function NotificationBell({ apiBasePath, pollIntervalMs, components: C, onItemClick, bellIcon, }: NotificationBellProps): import("react/jsx-runtime").JSX.Element;
|
|
56
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/notification_bell/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAoC,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAI7F,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,EAAE,SAAS,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC,CAAC;IAC5F,YAAY,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,EAAE,SAAS,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;KAAE,CAAC,CAAC;IAC3G,mBAAmB,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,EAAE,SAAS,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAChF,mBAAmB,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,EAAE,SAAS,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjG,gBAAgB,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,EAAE,SAAS,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC,CAAC;IAChF,KAAK,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,EAAE,SAAS,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClE;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,0BAA0B,CAAC;IACvC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,WAAkC,EAClC,cAAgC,EAChC,UAAU,EAAE,CAAC,EACb,WAAW,EACX,QAAQ,GACT,EAAE,qBAAqB,2CAiFvB"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Bell component for the office portal.
|
|
4
|
+
*
|
|
5
|
+
* Polls `unread-count` on interval; lazily fetches list on dropdown open.
|
|
6
|
+
* Shadcn primitives injected via `components` prop — package free of UI deps.
|
|
7
|
+
*
|
|
8
|
+
* @packageDocumentation
|
|
9
|
+
*/
|
|
10
|
+
import { useEffect, useState, useCallback } from "react";
|
|
11
|
+
const DEFAULT_POLL_MS = 30000;
|
|
12
|
+
export function NotificationBell({ apiBasePath = "/api/notifications", pollIntervalMs = DEFAULT_POLL_MS, components: C, onItemClick, bellIcon, }) {
|
|
13
|
+
const [unread, setUnread] = useState(0);
|
|
14
|
+
const [open, setOpen] = useState(false);
|
|
15
|
+
const [items, setItems] = useState([]);
|
|
16
|
+
const [loading, setLoading] = useState(false);
|
|
17
|
+
const fetchCount = useCallback(async () => {
|
|
18
|
+
try {
|
|
19
|
+
const r = await fetch(`${apiBasePath}/unread-count`, { credentials: "include" });
|
|
20
|
+
if (!r.ok)
|
|
21
|
+
return;
|
|
22
|
+
const b = await r.json();
|
|
23
|
+
setUnread(b.unread_count ?? 0);
|
|
24
|
+
}
|
|
25
|
+
catch { /* ignore */ }
|
|
26
|
+
}, [apiBasePath]);
|
|
27
|
+
const fetchList = useCallback(async () => {
|
|
28
|
+
setLoading(true);
|
|
29
|
+
try {
|
|
30
|
+
const r = await fetch(`${apiBasePath}?limit=20`, { credentials: "include" });
|
|
31
|
+
if (!r.ok)
|
|
32
|
+
return;
|
|
33
|
+
const b = await r.json();
|
|
34
|
+
setItems(b.items ?? []);
|
|
35
|
+
setUnread(b.unread_count ?? 0);
|
|
36
|
+
}
|
|
37
|
+
finally {
|
|
38
|
+
setLoading(false);
|
|
39
|
+
}
|
|
40
|
+
}, [apiBasePath]);
|
|
41
|
+
useEffect(() => {
|
|
42
|
+
fetchCount();
|
|
43
|
+
const tick = setInterval(() => {
|
|
44
|
+
if (typeof document !== "undefined" && document.visibilityState === "visible")
|
|
45
|
+
fetchCount();
|
|
46
|
+
}, pollIntervalMs);
|
|
47
|
+
const onVis = () => { if (document.visibilityState === "visible")
|
|
48
|
+
fetchCount(); };
|
|
49
|
+
if (typeof document !== "undefined")
|
|
50
|
+
document.addEventListener("visibilitychange", onVis);
|
|
51
|
+
return () => {
|
|
52
|
+
clearInterval(tick);
|
|
53
|
+
if (typeof document !== "undefined")
|
|
54
|
+
document.removeEventListener("visibilitychange", onVis);
|
|
55
|
+
};
|
|
56
|
+
}, [fetchCount, pollIntervalMs]);
|
|
57
|
+
useEffect(() => { if (open)
|
|
58
|
+
fetchList(); }, [open, fetchList]);
|
|
59
|
+
const handleItem = async (item) => {
|
|
60
|
+
await fetch(`${apiBasePath}/${item.id}/read`, { method: "POST", credentials: "include" });
|
|
61
|
+
setUnread((n) => Math.max(0, n - 1));
|
|
62
|
+
setOpen(false);
|
|
63
|
+
onItemClick?.(item);
|
|
64
|
+
};
|
|
65
|
+
const handleMarkAll = async () => {
|
|
66
|
+
await fetch(`${apiBasePath}/read-all`, { method: "POST", credentials: "include" });
|
|
67
|
+
setUnread(0);
|
|
68
|
+
setItems((prev) => prev.map((i) => ({ ...i, read_at: new Date().toISOString() })));
|
|
69
|
+
};
|
|
70
|
+
return (_jsxs(C.DropdownMenu, { open: open, onOpenChange: setOpen, children: [_jsx(C.DropdownMenuTrigger, { asChild: true, children: _jsxs(C.Button, { onClick: () => setOpen((o) => !o), children: [bellIcon ?? "🔔", unread > 0 && _jsx(C.Badge, { children: unread > 99 ? "99+" : String(unread) })] }) }), _jsxs(C.DropdownMenuContent, { align: "end", className: "w-80", children: [loading && _jsx(C.DropdownMenuItem, { children: "Loading\u2026" }), !loading && items.length === 0 && (_jsx(C.DropdownMenuItem, { children: "No notifications" })), !loading &&
|
|
71
|
+
items.map((it) => (_jsx(C.DropdownMenuItem, { onClick: () => handleItem(it), children: it.in_app_text }, it.id))), items.length > 0 && (_jsx(C.DropdownMenuItem, { onClick: handleMarkAll, children: "Mark all as read" }))] })] }));
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/notification_bell/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -18,11 +18,11 @@ export function TemplateEditor({ template, template_types, on_save, on_delete, o
|
|
|
18
18
|
// Load template content when template changes
|
|
19
19
|
useEffect(() => {
|
|
20
20
|
if (template) {
|
|
21
|
-
set_html_content(template.
|
|
22
|
-
set_text_content(template.
|
|
21
|
+
set_html_content(template.bodies.html ?? '');
|
|
22
|
+
set_text_content(template.bodies.text ?? '');
|
|
23
23
|
set_is_modified(false);
|
|
24
24
|
}
|
|
25
|
-
}, [template?.id, template?.
|
|
25
|
+
}, [template?.id, template?.bodies]);
|
|
26
26
|
// Get variables for this template type
|
|
27
27
|
const template_type = template_types.find((t) => t.template_name === template?.template_name);
|
|
28
28
|
const user_variables = template_type?.variables || [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template_editor.js","sourceRoot":"","sources":["../../../src/components/template_manager/template_editor.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EACL,MAAM,EACN,IAAI,EACJ,WAAW,EACX,UAAU,EACV,SAAS,EACT,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,SAAS,GACV,MAAM,SAAS,CAAC;AAMjB,OAAO,EAAE,+BAA+B,EAAE,MAAM,2CAA2C,CAAC;AAW5F,MAAM,UAAU,cAAc,CAAC,EAC7B,QAAQ,EACR,cAAc,EACd,OAAO,EACP,SAAS,EACT,UAAU,EACV,OAAO,GAAG,KAAK,GACK;IACpB,MAAM,CAAC,YAAY,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACtD,MAAM,CAAC,YAAY,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACtD,MAAM,CAAC,WAAW,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEvD,8CAA8C;IAC9C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,QAAQ,EAAE,CAAC;YACb,gBAAgB,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"template_editor.js","sourceRoot":"","sources":["../../../src/components/template_manager/template_editor.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template_manager_admin.d.ts","sourceRoot":"","sources":["../../../src/components/template_manager/template_manager_admin.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,qCAAqC,CAAC;AAW7C,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAMD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;;;;;;;;;;;;;;;;;;iCAqE9F,MAAM;uCA8BF,gBAAgB;4CA4BX,MAAM;
|
|
1
|
+
{"version":3,"file":"template_manager_admin.d.ts","sourceRoot":"","sources":["../../../src/components/template_manager/template_manager_admin.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,qCAAqC,CAAC;AAW7C,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAMD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;;;;;;;;;;;;;;;;;;iCAqE9F,MAAM;uCA8BF,gBAAgB;4CA4BX,MAAM;iCAoCf,MAAM,QAAQ,MAAM;;2BAsDO,MAAM,QAAQ,MAAM;EAkC/D;AAMD;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,QAAQ,EACR,QAAQ,EACR,UAAU,GACX,EAAE,yBAAyB,2CA4F3B;AAED,eAAe,oBAAoB,CAAC"}
|
|
@@ -134,8 +134,7 @@ export function use_template_manager(api_base, view_global, on_error) {
|
|
|
134
134
|
body: JSON.stringify({
|
|
135
135
|
template_name,
|
|
136
136
|
template_category_id: active_category.id,
|
|
137
|
-
|
|
138
|
-
template_text: '',
|
|
137
|
+
bodies: { html: '', text: '' },
|
|
139
138
|
}),
|
|
140
139
|
}).then((r) => r.json());
|
|
141
140
|
if (!res.success)
|
|
@@ -164,7 +163,7 @@ export function use_template_manager(api_base, view_global, on_error) {
|
|
|
164
163
|
const res = await fetch(`${api_base}/templates/${selected_template.id}${qs}`, {
|
|
165
164
|
method: 'PUT',
|
|
166
165
|
headers: { 'Content-Type': 'application/json' },
|
|
167
|
-
body: JSON.stringify({
|
|
166
|
+
body: JSON.stringify({ bodies: { html, text } }),
|
|
168
167
|
}).then((r) => r.json());
|
|
169
168
|
if (!res.success)
|
|
170
169
|
throw new Error(res.error || 'Failed to save template');
|
|
@@ -173,7 +172,7 @@ export function use_template_manager(api_base, view_global, on_error) {
|
|
|
173
172
|
set_selected_template(res.data);
|
|
174
173
|
}
|
|
175
174
|
else {
|
|
176
|
-
set_selected_template((prev) => prev ? { ...prev,
|
|
175
|
+
set_selected_template((prev) => prev ? { ...prev, bodies: { ...prev.bodies, html, text } } : prev);
|
|
177
176
|
}
|
|
178
177
|
await load_data();
|
|
179
178
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template_manager_admin.js","sourceRoot":"","sources":["../../../src/components/template_manager/template_manager_admin.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"template_manager_admin.js","sourceRoot":"","sources":["../../../src/components/template_manager/template_manager_admin.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EmailChannel — implements ChannelAdapter<EmailPayload> for v4.0.0
|
|
3
|
+
* channel-pluggable architecture.
|
|
4
|
+
*
|
|
5
|
+
* Also exports classifyEmailError (retryable vs permanent error detection)
|
|
6
|
+
* and EmailPayload (the payload contract for dispatch).
|
|
7
|
+
*
|
|
8
|
+
* @packageDocumentation
|
|
9
|
+
*/
|
|
10
|
+
import type { ChannelAdapter, ChannelCapabilities, ChannelSendContext, ChannelSendResult, ChannelValidationResult } from "../../channels/types.js";
|
|
11
|
+
import type { EmailerConfig, EmailSendResponse, EmailAttachment } from "./types.js";
|
|
12
|
+
/** Payload shape for the email channel. */
|
|
13
|
+
export interface EmailPayload {
|
|
14
|
+
subject: string;
|
|
15
|
+
body_text?: string;
|
|
16
|
+
body_html?: string;
|
|
17
|
+
template_name?: string;
|
|
18
|
+
template_vars?: Record<string, unknown>;
|
|
19
|
+
attachments?: EmailAttachment[];
|
|
20
|
+
reply_to?: string;
|
|
21
|
+
cc?: string | string[];
|
|
22
|
+
bcc?: string | string[];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Returns true if the send failure is retryable (transient), false if permanent.
|
|
26
|
+
*
|
|
27
|
+
* Rules:
|
|
28
|
+
* - No raw_response (network/timeout) → retryable
|
|
29
|
+
* - HTTP 5xx → retryable
|
|
30
|
+
* - HTTP 429 (rate limit) → retryable
|
|
31
|
+
* - HTTP 4xx (auth/validation) → permanent
|
|
32
|
+
*/
|
|
33
|
+
export declare function classifyEmailError(r: EmailSendResponse): boolean;
|
|
34
|
+
/** Adapter that sends via the configured email provider. */
|
|
35
|
+
export declare class EmailChannel implements ChannelAdapter<EmailPayload> {
|
|
36
|
+
private readonly opts;
|
|
37
|
+
readonly capabilities: ChannelCapabilities;
|
|
38
|
+
constructor(opts?: {
|
|
39
|
+
config?: EmailerConfig;
|
|
40
|
+
});
|
|
41
|
+
validate(p: EmailPayload): ChannelValidationResult;
|
|
42
|
+
send(p: EmailPayload, ctx: ChannelSendContext): Promise<ChannelSendResult>;
|
|
43
|
+
}
|
|
44
|
+
declare module "../../channels/types.js" {
|
|
45
|
+
interface ChannelPayloadMap {
|
|
46
|
+
email: EmailPayload;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/lib/adapters/email/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,uBAAuB,EACxB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAMpF,2CAA2C;AAC3C,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,WAAW,CAAC,EAAE,eAAe,EAAE,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CACzB;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAOhE;AAED,4DAA4D;AAC5D,qBAAa,YAAa,YAAW,cAAc,CAAC,YAAY,CAAC;IAgBnD,OAAO,CAAC,QAAQ,CAAC,IAAI;IAfjC,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAaxC;gBAE2B,IAAI,GAAE;QAAE,MAAM,CAAC,EAAE,aAAa,CAAA;KAAO;IAElE,QAAQ,CAAC,CAAC,EAAE,YAAY,GAAG,uBAAuB;IAW5C,IAAI,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAgCjF;AAID,OAAO,QAAQ,yBAAyB,CAAC;IACvC,UAAU,iBAAiB;QACzB,KAAK,EAAE,YAAY,CAAC;KACrB;CACF"}
|