hazo_notify 3.1.0 → 5.0.0
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 +37 -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 +142 -0
- package/dist/lib/inbox/storage.d.ts.map +1 -0
- package/dist/lib/inbox/storage.js +345 -0
- package/dist/lib/inbox/storage.js.map +1 -0
- package/dist/lib/inbox/types.d.ts +94 -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 +58 -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/index.d.ts.map +1 -1
- package/dist/lib/template_manager/handlers/index.js +2 -4
- package/dist/lib/template_manager/handlers/index.js.map +1 -1
- 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 +59 -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 +55 -13
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/template_manager/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,+BAA+B,GAChC,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/template_manager/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,+BAA+B,GAChC,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,6BAA6B,EAC7B,8BAA8B,EAC9B,2BAA2B,EAC3B,aAAa,EACb,sBAAsB,GACvB,MAAM,iBAAiB,CAAC"}
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* Utils barrel export for template manager
|
|
3
3
|
*/
|
|
4
4
|
export { get_system_variables, resolve_system_variables, get_system_variable_definitions, } from './system_variables.js';
|
|
5
|
-
export { validate_template_name, validate_category_name, validate_variable_name,
|
|
5
|
+
export { validate_template_name, validate_category_name, validate_variable_name, validate_template_bodies_size, extract_variables_from_content, validate_provided_variables, validate_uuid, sanitize_template_name, } from './validation.js';
|
|
6
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/template_manager/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,+BAA+B,GAChC,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/template_manager/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,+BAA+B,GAChC,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,6BAA6B,EAC7B,8BAA8B,EAC9B,2BAA2B,EAC3B,aAAa,EACb,sBAAsB,GACvB,MAAM,iBAAiB,CAAC"}
|
|
@@ -25,19 +25,20 @@ export declare function validate_category_name(name: string): boolean;
|
|
|
25
25
|
*/
|
|
26
26
|
export declare function validate_variable_name(name: string): boolean;
|
|
27
27
|
/**
|
|
28
|
-
* Validate
|
|
28
|
+
* Validate that each value in a `bodies` map fits within the per-body size cap.
|
|
29
|
+
* v4.0.0: replaces the per-column validate_template_html_size / validate_template_text_size.
|
|
29
30
|
*
|
|
30
|
-
* @param
|
|
31
|
-
* @returns true
|
|
32
|
-
*/
|
|
33
|
-
export declare function validate_template_html_size(html: string): boolean;
|
|
34
|
-
/**
|
|
35
|
-
* Validate template text content size
|
|
36
|
-
*
|
|
37
|
-
* @param text - Text content to validate
|
|
38
|
-
* @returns true if valid, false otherwise
|
|
31
|
+
* @param bodies - Record of body key → body content
|
|
32
|
+
* @returns ok: true on success; otherwise the first offending key.
|
|
39
33
|
*/
|
|
40
|
-
export declare function
|
|
34
|
+
export declare function validate_template_bodies_size(bodies: Record<string, string>): {
|
|
35
|
+
ok: true;
|
|
36
|
+
} | {
|
|
37
|
+
ok: false;
|
|
38
|
+
offending_key: string;
|
|
39
|
+
size: number;
|
|
40
|
+
max: number;
|
|
41
|
+
};
|
|
41
42
|
/**
|
|
42
43
|
* Extract variable names from template content
|
|
43
44
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../../src/lib/template_manager/utils/validation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../../src/lib/template_manager/utils/validation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAiB5D;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAgB5D;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAM5D;AAED;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAWhF;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAexE;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CACzC,gBAAgB,EAAE,MAAM,EACxB,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC1C,qBAAqB,EAAE,MAAM,EAAE,GAC9B;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAWvC;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAQnD;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAY3D"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Validates template names, category names, variables, and content
|
|
5
5
|
*/
|
|
6
|
-
import { MAX_TEMPLATE_NAME_LENGTH, MAX_CATEGORY_NAME_LENGTH, MAX_TEMPLATE_HTML_SIZE,
|
|
6
|
+
import { MAX_TEMPLATE_NAME_LENGTH, MAX_CATEGORY_NAME_LENGTH, MAX_TEMPLATE_HTML_SIZE, VALID_VARIABLE_NAME_PATTERN, VARIABLE_PATTERN, } from '../config/constants.js';
|
|
7
7
|
/**
|
|
8
8
|
* Validate a template name
|
|
9
9
|
*
|
|
@@ -56,30 +56,23 @@ export function validate_variable_name(name) {
|
|
|
56
56
|
return VALID_VARIABLE_NAME_PATTERN.test(name);
|
|
57
57
|
}
|
|
58
58
|
/**
|
|
59
|
-
* Validate
|
|
59
|
+
* Validate that each value in a `bodies` map fits within the per-body size cap.
|
|
60
|
+
* v4.0.0: replaces the per-column validate_template_html_size / validate_template_text_size.
|
|
60
61
|
*
|
|
61
|
-
* @param
|
|
62
|
-
* @returns true
|
|
62
|
+
* @param bodies - Record of body key → body content
|
|
63
|
+
* @returns ok: true on success; otherwise the first offending key.
|
|
63
64
|
*/
|
|
64
|
-
export function
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
*
|
|
74
|
-
* @param text - Text content to validate
|
|
75
|
-
* @returns true if valid, false otherwise
|
|
76
|
-
*/
|
|
77
|
-
export function validate_template_text_size(text) {
|
|
78
|
-
if (typeof text !== 'string') {
|
|
79
|
-
return false;
|
|
65
|
+
export function validate_template_bodies_size(bodies) {
|
|
66
|
+
for (const [key, value] of Object.entries(bodies)) {
|
|
67
|
+
if (typeof value !== 'string') {
|
|
68
|
+
return { ok: false, offending_key: key, size: 0, max: MAX_TEMPLATE_HTML_SIZE };
|
|
69
|
+
}
|
|
70
|
+
const byte_size = Buffer.byteLength(value, 'utf8');
|
|
71
|
+
if (byte_size > MAX_TEMPLATE_HTML_SIZE) {
|
|
72
|
+
return { ok: false, offending_key: key, size: byte_size, max: MAX_TEMPLATE_HTML_SIZE };
|
|
73
|
+
}
|
|
80
74
|
}
|
|
81
|
-
|
|
82
|
-
return byte_size <= MAX_TEMPLATE_TEXT_SIZE;
|
|
75
|
+
return { ok: true };
|
|
83
76
|
}
|
|
84
77
|
/**
|
|
85
78
|
* Extract variable names from template content
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../../src/lib/template_manager/utils/validation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,EACtB,
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../../src/lib/template_manager/utils/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
-- 003_create_notifications_table.sql
|
|
2
|
+
-- Adds the hazo_notify_inbox table for the dispatcher + flush worker.
|
|
3
|
+
-- Per-recipient inbox with upsert-on-batch_key aggregation.
|
|
4
|
+
-- See spec § 3.1 in the consumer app for full schema rationale.
|
|
5
|
+
|
|
6
|
+
CREATE TABLE IF NOT EXISTS hazo_notify_inbox (
|
|
7
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
8
|
+
scope_id uuid NOT NULL,
|
|
9
|
+
user_id uuid NOT NULL REFERENCES hazo_users(id) ON DELETE CASCADE,
|
|
10
|
+
event_type text NOT NULL,
|
|
11
|
+
subject_id uuid,
|
|
12
|
+
batch_key text NOT NULL,
|
|
13
|
+
in_app_text text NOT NULL,
|
|
14
|
+
deep_link text NOT NULL,
|
|
15
|
+
payload jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
16
|
+
channels jsonb NOT NULL,
|
|
17
|
+
|
|
18
|
+
aggregate_count integer NOT NULL DEFAULT 1,
|
|
19
|
+
flush_after timestamptz NOT NULL,
|
|
20
|
+
flushed_at timestamptz,
|
|
21
|
+
read_at timestamptz,
|
|
22
|
+
|
|
23
|
+
email_subject text,
|
|
24
|
+
email_body_text text,
|
|
25
|
+
email_body_html text,
|
|
26
|
+
email_template text,
|
|
27
|
+
email_template_vars jsonb,
|
|
28
|
+
email_sent_at timestamptz,
|
|
29
|
+
email_message_id text,
|
|
30
|
+
email_error text,
|
|
31
|
+
|
|
32
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
33
|
+
updated_at timestamptz NOT NULL DEFAULT now()
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
CREATE INDEX IF NOT EXISTS idx_hazo_notify_inbox_user_unread
|
|
37
|
+
ON hazo_notify_inbox (user_id, created_at DESC)
|
|
38
|
+
WHERE read_at IS NULL;
|
|
39
|
+
|
|
40
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uniq_hazo_notify_inbox_open_batch
|
|
41
|
+
ON hazo_notify_inbox (batch_key)
|
|
42
|
+
WHERE flushed_at IS NULL;
|
|
43
|
+
|
|
44
|
+
CREATE INDEX IF NOT EXISTS idx_hazo_notify_inbox_email_due
|
|
45
|
+
ON hazo_notify_inbox (flush_after)
|
|
46
|
+
WHERE flushed_at IS NULL
|
|
47
|
+
AND email_sent_at IS NULL
|
|
48
|
+
AND (channels->>'email')::boolean = true;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
-- 004_inbox_upsert_rpc.sql
|
|
2
|
+
-- PostgREST RPC wrapper for the partial-index upsert that PostgREST HTTP cannot
|
|
3
|
+
-- express directly. Required when hazo_connect does not support raw() SQL
|
|
4
|
+
-- (e.g. PostgREST-only environments). Idempotent (CREATE OR REPLACE).
|
|
5
|
+
|
|
6
|
+
CREATE OR REPLACE FUNCTION hazo_notify_inbox_upsert(
|
|
7
|
+
p_scope_id text,
|
|
8
|
+
p_user_id text,
|
|
9
|
+
p_event_type text,
|
|
10
|
+
p_subject_id text,
|
|
11
|
+
p_batch_key text,
|
|
12
|
+
p_in_app_text text,
|
|
13
|
+
p_deep_link text,
|
|
14
|
+
p_payload jsonb,
|
|
15
|
+
p_channels jsonb,
|
|
16
|
+
p_flush_after timestamptz,
|
|
17
|
+
p_email_subject text,
|
|
18
|
+
p_email_body_text text,
|
|
19
|
+
p_email_body_html text,
|
|
20
|
+
p_email_template text,
|
|
21
|
+
p_email_template_vars jsonb
|
|
22
|
+
) RETURNS jsonb
|
|
23
|
+
LANGUAGE plpgsql
|
|
24
|
+
SECURITY DEFINER
|
|
25
|
+
AS $$
|
|
26
|
+
DECLARE
|
|
27
|
+
v_id uuid;
|
|
28
|
+
v_xmax bigint;
|
|
29
|
+
v_inserted boolean;
|
|
30
|
+
BEGIN
|
|
31
|
+
INSERT INTO hazo_notify_inbox (
|
|
32
|
+
scope_id, user_id, event_type, subject_id, batch_key,
|
|
33
|
+
in_app_text, deep_link, payload, channels, flush_after,
|
|
34
|
+
email_subject, email_body_text, email_body_html,
|
|
35
|
+
email_template, email_template_vars
|
|
36
|
+
)
|
|
37
|
+
VALUES (
|
|
38
|
+
p_scope_id, p_user_id, p_event_type, p_subject_id, p_batch_key,
|
|
39
|
+
p_in_app_text, p_deep_link, p_payload, p_channels, p_flush_after,
|
|
40
|
+
p_email_subject, p_email_body_text, p_email_body_html,
|
|
41
|
+
p_email_template, p_email_template_vars
|
|
42
|
+
)
|
|
43
|
+
ON CONFLICT (batch_key) WHERE flushed_at IS NULL
|
|
44
|
+
DO UPDATE SET
|
|
45
|
+
aggregate_count = hazo_notify_inbox.aggregate_count + 1,
|
|
46
|
+
in_app_text = EXCLUDED.in_app_text,
|
|
47
|
+
email_subject = EXCLUDED.email_subject,
|
|
48
|
+
email_body_text = EXCLUDED.email_body_text,
|
|
49
|
+
email_body_html = EXCLUDED.email_body_html,
|
|
50
|
+
payload = EXCLUDED.payload,
|
|
51
|
+
updated_at = now()
|
|
52
|
+
RETURNING id INTO v_id;
|
|
53
|
+
|
|
54
|
+
GET DIAGNOSTICS v_xmax = ROW_COUNT;
|
|
55
|
+
-- If aggregate_count was updated (conflict path), xmax will be non-zero.
|
|
56
|
+
-- We approximate inserted=true when the row didn't previously exist.
|
|
57
|
+
-- True xmax check not possible via PL/pgSQL; use aggregate_count as proxy.
|
|
58
|
+
SELECT (aggregate_count = 1) INTO v_inserted
|
|
59
|
+
FROM hazo_notify_inbox WHERE id = v_id;
|
|
60
|
+
|
|
61
|
+
RETURN jsonb_build_object('id', v_id, 'inserted', v_inserted);
|
|
62
|
+
END;
|
|
63
|
+
$$;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
-- migrations/005_inbox_v4_refactor.pg.sql
|
|
2
|
+
-- v4.0.0: rebuild hazo_notify_inbox.
|
|
3
|
+
-- Removes: channels, flush_after, flushed_at, all email_* columns.
|
|
4
|
+
-- Adds: surfaces (jsonb), batch_closed_at.
|
|
5
|
+
-- Renames: channels.{in_app,banner} → surfaces.{in_app,banner} via copy.
|
|
6
|
+
|
|
7
|
+
BEGIN;
|
|
8
|
+
|
|
9
|
+
-- Preserve the v3 table for migration 006 to read from.
|
|
10
|
+
ALTER TABLE IF EXISTS hazo_notify_inbox RENAME TO hazo_notify_inbox_v3_legacy;
|
|
11
|
+
|
|
12
|
+
CREATE TABLE hazo_notify_inbox (
|
|
13
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
14
|
+
scope_id uuid NOT NULL,
|
|
15
|
+
user_id uuid NOT NULL,
|
|
16
|
+
event_type text NOT NULL,
|
|
17
|
+
subject_id uuid,
|
|
18
|
+
batch_key text NOT NULL,
|
|
19
|
+
in_app_text text NOT NULL,
|
|
20
|
+
deep_link text NOT NULL,
|
|
21
|
+
payload jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
22
|
+
surfaces jsonb NOT NULL,
|
|
23
|
+
aggregate_count integer NOT NULL DEFAULT 1,
|
|
24
|
+
batch_closed_at timestamptz,
|
|
25
|
+
read_at timestamptz,
|
|
26
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
27
|
+
updated_at timestamptz NOT NULL DEFAULT now()
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
CREATE UNIQUE INDEX uniq_inbox_open_batch
|
|
31
|
+
ON hazo_notify_inbox (batch_key) WHERE batch_closed_at IS NULL;
|
|
32
|
+
CREATE INDEX idx_inbox_user_unread
|
|
33
|
+
ON hazo_notify_inbox (user_id, created_at DESC) WHERE read_at IS NULL;
|
|
34
|
+
|
|
35
|
+
-- Backfill from v3 legacy (skipped on fresh install — table doesn't exist).
|
|
36
|
+
INSERT INTO hazo_notify_inbox (
|
|
37
|
+
id, scope_id, user_id, event_type, subject_id, batch_key,
|
|
38
|
+
in_app_text, deep_link, payload, surfaces,
|
|
39
|
+
aggregate_count, batch_closed_at, read_at, created_at, updated_at
|
|
40
|
+
)
|
|
41
|
+
SELECT
|
|
42
|
+
id, scope_id, user_id, event_type, subject_id, batch_key,
|
|
43
|
+
in_app_text, deep_link, payload,
|
|
44
|
+
jsonb_build_object(
|
|
45
|
+
'in_app', COALESCE((channels->>'in_app')::boolean, false),
|
|
46
|
+
'banner', COALESCE((channels->>'banner')::boolean, false)
|
|
47
|
+
),
|
|
48
|
+
aggregate_count, flushed_at, read_at, created_at, updated_at
|
|
49
|
+
FROM hazo_notify_inbox_v3_legacy
|
|
50
|
+
WHERE EXISTS (SELECT 1 FROM information_schema.tables
|
|
51
|
+
WHERE table_name = 'hazo_notify_inbox_v3_legacy');
|
|
52
|
+
|
|
53
|
+
COMMIT;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
-- migrations/005_inbox_v4_refactor.sqlite.sql
|
|
2
|
+
-- SQLite fresh-install variant. No v3 SQLite consumers exist, so no backfill.
|
|
3
|
+
-- (See spec §10.2 — v3 migrations 001-004 were Postgres-only.)
|
|
4
|
+
|
|
5
|
+
BEGIN;
|
|
6
|
+
|
|
7
|
+
CREATE TABLE IF NOT EXISTS hazo_notify_inbox (
|
|
8
|
+
id TEXT PRIMARY KEY,
|
|
9
|
+
scope_id TEXT NOT NULL,
|
|
10
|
+
user_id TEXT NOT NULL,
|
|
11
|
+
event_type TEXT NOT NULL,
|
|
12
|
+
subject_id TEXT,
|
|
13
|
+
batch_key TEXT NOT NULL,
|
|
14
|
+
in_app_text TEXT NOT NULL,
|
|
15
|
+
deep_link TEXT NOT NULL,
|
|
16
|
+
payload TEXT NOT NULL DEFAULT '{}',
|
|
17
|
+
surfaces TEXT NOT NULL,
|
|
18
|
+
aggregate_count INTEGER NOT NULL DEFAULT 1,
|
|
19
|
+
batch_closed_at TEXT,
|
|
20
|
+
read_at TEXT,
|
|
21
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
22
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uniq_inbox_open_batch
|
|
26
|
+
ON hazo_notify_inbox (batch_key) WHERE batch_closed_at IS NULL;
|
|
27
|
+
CREATE INDEX IF NOT EXISTS idx_inbox_user_unread
|
|
28
|
+
ON hazo_notify_inbox (user_id, created_at DESC) WHERE read_at IS NULL;
|
|
29
|
+
|
|
30
|
+
COMMIT;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
-- migrations/006_channel_deliveries.pg.sql
|
|
2
|
+
-- v4.0.0: create deliveries table; backfill email state from the v3 legacy
|
|
3
|
+
-- inbox rows preserved by 005; then drop the legacy table.
|
|
4
|
+
|
|
5
|
+
BEGIN;
|
|
6
|
+
|
|
7
|
+
CREATE TABLE hazo_notify_channel_deliveries (
|
|
8
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
9
|
+
inbox_id uuid NOT NULL REFERENCES hazo_notify_inbox(id) ON DELETE CASCADE,
|
|
10
|
+
channel_id text NOT NULL,
|
|
11
|
+
payload jsonb NOT NULL,
|
|
12
|
+
status text NOT NULL DEFAULT 'pending',
|
|
13
|
+
flush_after timestamptz NOT NULL,
|
|
14
|
+
attempt_count integer NOT NULL DEFAULT 0,
|
|
15
|
+
message_id text,
|
|
16
|
+
last_error text,
|
|
17
|
+
finalized_at timestamptz,
|
|
18
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
19
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
20
|
+
CHECK (status IN ('pending','sent','failed'))
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
CREATE UNIQUE INDEX uniq_delivery_inbox_channel
|
|
24
|
+
ON hazo_notify_channel_deliveries (inbox_id, channel_id);
|
|
25
|
+
CREATE INDEX idx_delivery_due
|
|
26
|
+
ON hazo_notify_channel_deliveries (channel_id, flush_after) WHERE status = 'pending';
|
|
27
|
+
|
|
28
|
+
-- Backfill from v3 legacy.
|
|
29
|
+
INSERT INTO hazo_notify_channel_deliveries (
|
|
30
|
+
inbox_id, channel_id, payload, status, flush_after,
|
|
31
|
+
message_id, last_error, finalized_at, created_at, updated_at
|
|
32
|
+
)
|
|
33
|
+
SELECT
|
|
34
|
+
v3.id,
|
|
35
|
+
'email',
|
|
36
|
+
jsonb_strip_nulls(jsonb_build_object(
|
|
37
|
+
'subject', v3.email_subject,
|
|
38
|
+
'body_text', v3.email_body_text,
|
|
39
|
+
'body_html', v3.email_body_html,
|
|
40
|
+
'template_name', v3.email_template,
|
|
41
|
+
'template_vars', v3.email_template_vars
|
|
42
|
+
)),
|
|
43
|
+
CASE
|
|
44
|
+
WHEN v3.email_sent_at IS NOT NULL THEN 'sent'
|
|
45
|
+
WHEN v3.email_error IS NOT NULL THEN 'failed'
|
|
46
|
+
ELSE 'pending'
|
|
47
|
+
END,
|
|
48
|
+
v3.flush_after,
|
|
49
|
+
v3.email_message_id,
|
|
50
|
+
v3.email_error,
|
|
51
|
+
COALESCE(v3.email_sent_at,
|
|
52
|
+
CASE WHEN v3.email_error IS NOT NULL THEN v3.updated_at END),
|
|
53
|
+
v3.created_at, v3.updated_at
|
|
54
|
+
FROM hazo_notify_inbox_v3_legacy v3
|
|
55
|
+
WHERE (v3.channels->>'email')::boolean = true
|
|
56
|
+
AND EXISTS (SELECT 1 FROM information_schema.tables
|
|
57
|
+
WHERE table_name = 'hazo_notify_inbox_v3_legacy');
|
|
58
|
+
|
|
59
|
+
DROP TABLE IF EXISTS hazo_notify_inbox_v3_legacy;
|
|
60
|
+
|
|
61
|
+
COMMIT;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
-- migrations/006_channel_deliveries.sqlite.sql
|
|
2
|
+
-- SQLite fresh install. No backfill (no v3 SQLite consumers).
|
|
3
|
+
|
|
4
|
+
BEGIN;
|
|
5
|
+
|
|
6
|
+
CREATE TABLE IF NOT EXISTS hazo_notify_channel_deliveries (
|
|
7
|
+
id TEXT PRIMARY KEY,
|
|
8
|
+
inbox_id TEXT NOT NULL REFERENCES hazo_notify_inbox(id) ON DELETE CASCADE,
|
|
9
|
+
channel_id TEXT NOT NULL,
|
|
10
|
+
payload TEXT NOT NULL,
|
|
11
|
+
status TEXT NOT NULL DEFAULT 'pending' CHECK (status IN ('pending','sent','failed')),
|
|
12
|
+
flush_after TEXT NOT NULL,
|
|
13
|
+
attempt_count INTEGER NOT NULL DEFAULT 0,
|
|
14
|
+
message_id TEXT,
|
|
15
|
+
last_error TEXT,
|
|
16
|
+
finalized_at TEXT,
|
|
17
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
18
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uniq_delivery_inbox_channel
|
|
22
|
+
ON hazo_notify_channel_deliveries (inbox_id, channel_id);
|
|
23
|
+
CREATE INDEX IF NOT EXISTS idx_delivery_due
|
|
24
|
+
ON hazo_notify_channel_deliveries (channel_id, flush_after) WHERE status = 'pending';
|
|
25
|
+
|
|
26
|
+
COMMIT;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
-- migrations/007_templates_bodies_jsonb.pg.sql
|
|
2
|
+
BEGIN;
|
|
3
|
+
|
|
4
|
+
ALTER TABLE hazo_notify_templates
|
|
5
|
+
ADD COLUMN IF NOT EXISTS bodies jsonb NOT NULL DEFAULT '{}'::jsonb;
|
|
6
|
+
|
|
7
|
+
UPDATE hazo_notify_templates
|
|
8
|
+
SET bodies = jsonb_strip_nulls(jsonb_build_object(
|
|
9
|
+
'html', NULLIF(template_html, ''),
|
|
10
|
+
'text', NULLIF(template_text, '')
|
|
11
|
+
))
|
|
12
|
+
WHERE bodies = '{}'::jsonb;
|
|
13
|
+
|
|
14
|
+
ALTER TABLE hazo_notify_templates DROP COLUMN IF EXISTS template_html;
|
|
15
|
+
ALTER TABLE hazo_notify_templates DROP COLUMN IF EXISTS template_text;
|
|
16
|
+
|
|
17
|
+
COMMIT;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
-- migrations/007_templates_bodies_jsonb.sqlite.sql
|
|
2
|
+
-- SQLite ALTER limitations: can ADD COLUMN, can DROP COLUMN (3.35+), no jsonb type.
|
|
3
|
+
|
|
4
|
+
BEGIN;
|
|
5
|
+
|
|
6
|
+
ALTER TABLE hazo_notify_templates ADD COLUMN bodies TEXT NOT NULL DEFAULT '{}';
|
|
7
|
+
|
|
8
|
+
UPDATE hazo_notify_templates
|
|
9
|
+
SET bodies = json_object(
|
|
10
|
+
'html', NULLIF(template_html, ''),
|
|
11
|
+
'text', NULLIF(template_text, '')
|
|
12
|
+
)
|
|
13
|
+
WHERE bodies = '{}';
|
|
14
|
+
|
|
15
|
+
ALTER TABLE hazo_notify_templates DROP COLUMN template_html;
|
|
16
|
+
ALTER TABLE hazo_notify_templates DROP COLUMN template_text;
|
|
17
|
+
|
|
18
|
+
COMMIT;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hazo_notify",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "5.0.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Email notification system with scope-aware template management",
|
|
6
6
|
"main": "./dist/lib/index.js",
|
|
@@ -10,9 +10,17 @@
|
|
|
10
10
|
"types": "./dist/lib/index.d.ts",
|
|
11
11
|
"default": "./dist/lib/index.js"
|
|
12
12
|
},
|
|
13
|
-
"./
|
|
14
|
-
"types": "./dist/lib/
|
|
15
|
-
"default": "./dist/lib/
|
|
13
|
+
"./channels": {
|
|
14
|
+
"types": "./dist/lib/channels/index.d.ts",
|
|
15
|
+
"default": "./dist/lib/channels/index.js"
|
|
16
|
+
},
|
|
17
|
+
"./adapters/email": {
|
|
18
|
+
"types": "./dist/lib/adapters/email/index.d.ts",
|
|
19
|
+
"default": "./dist/lib/adapters/email/index.js"
|
|
20
|
+
},
|
|
21
|
+
"./adapters/telegram": {
|
|
22
|
+
"types": "./dist/lib/adapters/telegram/index.d.ts",
|
|
23
|
+
"default": "./dist/lib/adapters/telegram/index.js"
|
|
16
24
|
},
|
|
17
25
|
"./template_manager": {
|
|
18
26
|
"types": "./dist/lib/template_manager/index.d.ts",
|
|
@@ -29,22 +37,49 @@
|
|
|
29
37
|
"./template_manager_handlers/hazo_auth": {
|
|
30
38
|
"types": "./dist/lib/template_manager/handlers/adapters/hazo_auth.d.ts",
|
|
31
39
|
"default": "./dist/lib/template_manager/handlers/adapters/hazo_auth.js"
|
|
40
|
+
},
|
|
41
|
+
"./dispatcher": {
|
|
42
|
+
"types": "./dist/lib/dispatcher/index.d.ts",
|
|
43
|
+
"default": "./dist/lib/dispatcher/index.js"
|
|
44
|
+
},
|
|
45
|
+
"./inbox": {
|
|
46
|
+
"types": "./dist/lib/inbox/index.d.ts",
|
|
47
|
+
"default": "./dist/lib/inbox/index.js"
|
|
48
|
+
},
|
|
49
|
+
"./jobs": {
|
|
50
|
+
"types": "./dist/lib/jobs/index.d.ts",
|
|
51
|
+
"default": "./dist/lib/jobs/index.js"
|
|
52
|
+
},
|
|
53
|
+
"./api/inbox": {
|
|
54
|
+
"types": "./dist/lib/api/inbox.d.ts",
|
|
55
|
+
"default": "./dist/lib/api/inbox.js"
|
|
56
|
+
},
|
|
57
|
+
"./api/banner": {
|
|
58
|
+
"types": "./dist/lib/api/banner.d.ts",
|
|
59
|
+
"default": "./dist/lib/api/banner.js"
|
|
60
|
+
},
|
|
61
|
+
"./notification_bell": {
|
|
62
|
+
"types": "./dist/components/notification_bell/index.d.ts",
|
|
63
|
+
"default": "./dist/components/notification_bell/index.js"
|
|
64
|
+
},
|
|
65
|
+
"./notification_banner": {
|
|
66
|
+
"types": "./dist/components/notification_banner/index.d.ts",
|
|
67
|
+
"default": "./dist/components/notification_banner/index.js"
|
|
32
68
|
}
|
|
33
69
|
},
|
|
34
70
|
"scripts": {
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"build:
|
|
39
|
-
"
|
|
40
|
-
"lint": "next lint",
|
|
71
|
+
"build": "tsc -p tsconfig.build.json",
|
|
72
|
+
"dev": "tsc -p tsconfig.build.json --watch",
|
|
73
|
+
"dev:test-app": "npm run build && cd test-app && npm run dev",
|
|
74
|
+
"build:test-app": "npm run build && cd test-app && npm run build",
|
|
75
|
+
"worker:test-app": "cd test-app && tsx worker.ts",
|
|
41
76
|
"test": "NODE_OPTIONS=--experimental-vm-modules jest --config jest.config.cjs",
|
|
42
77
|
"test:watch": "NODE_OPTIONS=--experimental-vm-modules jest --config jest.config.cjs --watch",
|
|
43
78
|
"test:coverage": "NODE_OPTIONS=--experimental-vm-modules jest --config jest.config.cjs --coverage",
|
|
44
79
|
"test:e2e": "playwright test",
|
|
45
80
|
"test:e2e:ui": "playwright test --ui",
|
|
46
81
|
"test:e2e:headed": "playwright test --headed",
|
|
47
|
-
"prepublishOnly": "npm run build
|
|
82
|
+
"prepublishOnly": "npm run build"
|
|
48
83
|
},
|
|
49
84
|
"files": [
|
|
50
85
|
"dist",
|
|
@@ -83,7 +118,8 @@
|
|
|
83
118
|
"tailwind-merge": "^3.5.0"
|
|
84
119
|
},
|
|
85
120
|
"peerDependencies": {
|
|
86
|
-
"hazo_connect": "^2.
|
|
121
|
+
"hazo_connect": "^2.7.0",
|
|
122
|
+
"hazo_jobs": "^0.7.0",
|
|
87
123
|
"hazo_logs": "^1.0.13",
|
|
88
124
|
"hazo_ui": "^2.8.0"
|
|
89
125
|
},
|
|
@@ -96,6 +132,9 @@
|
|
|
96
132
|
},
|
|
97
133
|
"hazo_ui": {
|
|
98
134
|
"optional": true
|
|
135
|
+
},
|
|
136
|
+
"hazo_jobs": {
|
|
137
|
+
"optional": true
|
|
99
138
|
}
|
|
100
139
|
},
|
|
101
140
|
"overrides": {
|
|
@@ -140,18 +179,21 @@
|
|
|
140
179
|
"@testing-library/jest-dom": "^6.2.0",
|
|
141
180
|
"@testing-library/react": "^14.1.0",
|
|
142
181
|
"@testing-library/user-event": "^14.5.0",
|
|
182
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
143
183
|
"@types/jest": "^30.0.0",
|
|
144
184
|
"@types/lodash": "^4.17.21",
|
|
145
185
|
"@types/node": "^20.14.10",
|
|
146
186
|
"@types/react": "^18.3.3",
|
|
147
187
|
"@types/react-dom": "^18.3.0",
|
|
188
|
+
"better-sqlite3": "^12.10.0",
|
|
148
189
|
"class-variance-authority": "^0.7.0",
|
|
149
190
|
"clsx": "^2.1.1",
|
|
150
191
|
"cmdk": "^1.1.1",
|
|
151
192
|
"hazo_auth": "^5.2.0",
|
|
193
|
+
"hazo_connect": "^2.7.0",
|
|
152
194
|
"hazo_ui": "^2.8.0",
|
|
153
195
|
"jest": "^30.2.0",
|
|
154
|
-
"jest-environment-jsdom": "^
|
|
196
|
+
"jest-environment-jsdom": "^30.4.1",
|
|
155
197
|
"lexical": "^0.39.0",
|
|
156
198
|
"lodash": "^4.17.21",
|
|
157
199
|
"lucide-react": "^0.553.0",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"emailer.d.ts","sourceRoot":"","sources":["../../../src/lib/emailer/emailer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAsBH,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,iBAAiB,EAAiB,MAAM,YAAY,CAAC;AAEpG;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,aAAa,CAwJnD;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,gBAAgB,EACzB,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,iBAAiB,CAAC,CA0H5B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"emailer.js","sourceRoot":"","sources":["../../../src/lib/emailer/emailer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Emailer service exports
|
|
3
|
-
* Main entry point for the emailer library
|
|
4
|
-
*/
|
|
5
|
-
export { send_email, load_emailer_config } from './emailer.js';
|
|
6
|
-
export * from './types.js';
|
|
7
|
-
export { get_email_provider } from './providers/index.js';
|
|
8
|
-
export { ZeptomailProvider } from './providers/zeptomail_provider.js';
|
|
9
|
-
export { SmtpProvider } from './providers/smtp_provider.js';
|
|
10
|
-
export { Pop3Provider } from './providers/pop3_provider.js';
|
|
11
|
-
export { create_fallback_logger, get_logger } from './utils/logger.js';
|
|
12
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/emailer/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC/D,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5D,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Emailer service exports
|
|
3
|
-
* Main entry point for the emailer library
|
|
4
|
-
*/
|
|
5
|
-
export { send_email, load_emailer_config } from './emailer.js';
|
|
6
|
-
export * from './types.js';
|
|
7
|
-
export { get_email_provider } from './providers/index.js';
|
|
8
|
-
export { ZeptomailProvider } from './providers/zeptomail_provider.js';
|
|
9
|
-
export { SmtpProvider } from './providers/smtp_provider.js';
|
|
10
|
-
export { Pop3Provider } from './providers/pop3_provider.js';
|
|
11
|
-
// Logger utilities for consumers
|
|
12
|
-
export { create_fallback_logger, get_logger } from './utils/logger.js';
|
|
13
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/emailer/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC/D,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,iCAAiC;AACjC,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC"}
|