hazo_notify 5.2.1 → 6.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 +38 -6
- package/config/hazo_notify_config.ini +5 -0
- package/dist/lib/adapters/email/config.d.ts.map +1 -1
- package/dist/lib/adapters/email/config.js +7 -6
- package/dist/lib/adapters/email/config.js.map +1 -1
- package/dist/lib/adapters/email/providers/zeptomail_provider.d.ts.map +1 -1
- package/dist/lib/adapters/email/providers/zeptomail_provider.js +11 -19
- package/dist/lib/adapters/email/providers/zeptomail_provider.js.map +1 -1
- package/dist/lib/adapters/email/utils/logger.d.ts +4 -11
- package/dist/lib/adapters/email/utils/logger.d.ts.map +1 -1
- package/dist/lib/adapters/email/utils/logger.js +11 -53
- package/dist/lib/adapters/email/utils/logger.js.map +1 -1
- package/dist/lib/adapters/telegram/config.d.ts.map +1 -1
- package/dist/lib/adapters/telegram/config.js +5 -4
- package/dist/lib/adapters/telegram/config.js.map +1 -1
- package/dist/lib/adapters/telegram/transport.d.ts.map +1 -1
- package/dist/lib/adapters/telegram/transport.js +2 -1
- package/dist/lib/adapters/telegram/transport.js.map +1 -1
- package/dist/lib/config/hazo_notify_config.d.ts +45 -0
- package/dist/lib/config/hazo_notify_config.d.ts.map +1 -0
- package/dist/lib/config/hazo_notify_config.js +82 -0
- package/dist/lib/config/hazo_notify_config.js.map +1 -0
- package/dist/lib/dispatcher/batch-key.js +2 -2
- package/dist/lib/dispatcher/batch-key.js.map +1 -1
- package/dist/lib/dispatcher/index.d.ts.map +1 -1
- package/dist/lib/dispatcher/index.js +6 -3
- package/dist/lib/dispatcher/index.js.map +1 -1
- package/dist/lib/errors.d.ts +30 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +57 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/inbox/connection.d.ts.map +1 -1
- package/dist/lib/inbox/connection.js +4 -3
- package/dist/lib/inbox/connection.js.map +1 -1
- package/dist/lib/inbox/storage.d.ts.map +1 -1
- package/dist/lib/inbox/storage.js +4 -3
- package/dist/lib/inbox/storage.js.map +1 -1
- package/dist/lib/inbox/types.d.ts +3 -1
- package/dist/lib/inbox/types.d.ts.map +1 -1
- package/dist/lib/inbox/worker/flush.d.ts.map +1 -1
- package/dist/lib/inbox/worker/flush.js +56 -50
- package/dist/lib/inbox/worker/flush.js.map +1 -1
- package/dist/lib/inbox/worker/render.d.ts.map +1 -1
- package/dist/lib/inbox/worker/render.js +2 -1
- package/dist/lib/inbox/worker/render.js.map +1 -1
- package/dist/lib/jobs/digest.d.ts +77 -0
- package/dist/lib/jobs/digest.d.ts.map +1 -0
- package/dist/lib/jobs/digest.js +127 -0
- package/dist/lib/jobs/digest.js.map +1 -0
- package/dist/lib/jobs/handler.d.ts.map +1 -1
- package/dist/lib/jobs/handler.js +23 -18
- package/dist/lib/jobs/handler.js.map +1 -1
- package/dist/lib/jobs/index.d.ts +2 -0
- package/dist/lib/jobs/index.d.ts.map +1 -1
- package/dist/lib/jobs/index.js +1 -0
- package/dist/lib/jobs/index.js.map +1 -1
- package/dist/lib/lifecycle/default_templates.d.ts.map +1 -1
- package/dist/lib/lifecycle/default_templates.js +36 -0
- package/dist/lib/lifecycle/default_templates.js.map +1 -1
- package/dist/lib/lifecycle/dispatch.d.ts.map +1 -1
- package/dist/lib/lifecycle/dispatch.js +2 -1
- package/dist/lib/lifecycle/dispatch.js.map +1 -1
- package/dist/lib/lifecycle/handler.d.ts.map +1 -1
- package/dist/lib/lifecycle/handler.js +103 -97
- package/dist/lib/lifecycle/handler.js.map +1 -1
- package/dist/lib/lifecycle/scheduler.d.ts.map +1 -1
- package/dist/lib/lifecycle/scheduler.js +2 -1
- package/dist/lib/lifecycle/scheduler.js.map +1 -1
- package/dist/lib/logger.d.ts +2 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +3 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/preferences/storage.d.ts.map +1 -1
- package/dist/lib/preferences/storage.js +7 -2
- package/dist/lib/preferences/storage.js.map +1 -1
- package/dist/lib/preferences/types.d.ts +1 -1
- package/dist/lib/preferences/types.d.ts.map +1 -1
- package/dist/lib/utils.d.ts +1 -2
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +1 -5
- package/dist/lib/utils.js.map +1 -1
- package/migrations/011_digest_status.pg.sql +21 -0
- package/migrations/011_digest_status.sqlite.sql +43 -0
- package/migrations/012_preferences_digest.pg.sql +12 -0
- package/migrations/012_preferences_digest.sqlite.sql +51 -0
- package/package.json +20 -9
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
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.
|
|
5
|
+
**Version**: 5.3.0
|
|
6
6
|
|
|
7
7
|
> **⚠ Readers on older versions:** 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 API see:
|
|
8
8
|
>
|
|
@@ -29,9 +29,14 @@ A reusable component library for sending email notifications with scope-aware te
|
|
|
29
29
|
- **Default Templates**: Built-in welcome, verification, password reset, and signature templates
|
|
30
30
|
- **Caching**: Template compilation caching for performance
|
|
31
31
|
|
|
32
|
+
### Dispatch & Preferences
|
|
33
|
+
- **`dispatch()`**: Fan-out a single event to multiple users across any mix of registered channels (email, Telegram, webhook, …). Creates one inbox row and one delivery row per (user × channel).
|
|
34
|
+
- **Preference matrix** (v5.2.0+): Per-user, per-channel delivery preferences via `hazo_notify/preferences`. Modes: `'on'` (immediate), `'off'` (suppress), `'digest'` (daily batch).
|
|
35
|
+
- **Daily digest mode** (v5.3.0+): `mode: 'digest'` writes delivery rows as `status = 'digesting'`. A scheduled `DIGEST_FLUSH_JOB_TYPE` job batches them into one digest email per (user × channel) per run.
|
|
36
|
+
|
|
32
37
|
### General
|
|
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+):
|
|
38
|
+
- **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, preferences, digest, jobs admin. Excluded from the published tarball.
|
|
39
|
+
- **hazo_jobs integration** (v4.0.2+): `hazo_notify/jobs` subpath exports `createInboxFlushHandler`, `submitInboxFlushJobs`, and (v5.3.0+) `DIGEST_FLUSH_JOB_TYPE` + `createDigestFlushHandler`. `hazo_jobs` is an optional peer dep.
|
|
35
40
|
- **TypeScript**: Fully typed with TypeScript
|
|
36
41
|
- **Testing**: Test coverage with Jest
|
|
37
42
|
|
|
@@ -1049,9 +1054,11 @@ The test-app is excluded from the published npm tarball.
|
|
|
1049
1054
|
|
|
1050
1055
|
### hazo_jobs integration (`hazo_notify/jobs`)
|
|
1051
1056
|
|
|
1052
|
-
v4.0.2 ships a
|
|
1053
|
-
|
|
1054
|
-
queue rather than running the bundled `startInboxWorker
|
|
1057
|
+
v4.0.2 ships a subpath export for projects that want to drive the inbox flush
|
|
1058
|
+
worker through their own [`hazo_jobs`](https://www.npmjs.com/package/hazo_jobs)
|
|
1059
|
+
queue rather than running the bundled `startInboxWorker`.
|
|
1060
|
+
|
|
1061
|
+
#### Inbox flush (immediate delivery)
|
|
1055
1062
|
|
|
1056
1063
|
```ts
|
|
1057
1064
|
import {
|
|
@@ -1078,6 +1085,31 @@ const proc = createWorkerProcess({
|
|
|
1078
1085
|
await submitInboxFlushJobs(jobsClient, { channels: ["email", "telegram"] });
|
|
1079
1086
|
```
|
|
1080
1087
|
|
|
1088
|
+
#### Daily digest flush (v5.3.0+)
|
|
1089
|
+
|
|
1090
|
+
Users with `mode: 'digest'` preference get delivery rows written as
|
|
1091
|
+
`status = 'digesting'` — skipped by the inbox flush worker. Register the
|
|
1092
|
+
digest handler and schedule a daily job to batch them:
|
|
1093
|
+
|
|
1094
|
+
```ts
|
|
1095
|
+
import {
|
|
1096
|
+
DIGEST_FLUSH_JOB_TYPE,
|
|
1097
|
+
createDigestFlushHandler,
|
|
1098
|
+
} from "hazo_notify/jobs";
|
|
1099
|
+
|
|
1100
|
+
scheduler.register(
|
|
1101
|
+
DIGEST_FLUSH_JOB_TYPE,
|
|
1102
|
+
createDigestFlushHandler({
|
|
1103
|
+
resolve_recipient: async (user_id) => lookupEmail(user_id),
|
|
1104
|
+
template_name: "digest_daily", // default system template; override as needed
|
|
1105
|
+
}),
|
|
1106
|
+
);
|
|
1107
|
+
```
|
|
1108
|
+
|
|
1109
|
+
The `digest_daily` template is seeded automatically by `sync_system_templates()`.
|
|
1110
|
+
Variables available in the template: `{{digest_count}}`, `{{channel_id}}`,
|
|
1111
|
+
`{{digest_date}}` (YYYY-MM-DD), `{{user_id}}`.
|
|
1112
|
+
|
|
1081
1113
|
`hazo_jobs` is an **optional** peer dependency — the package only declares the
|
|
1082
1114
|
structural types it needs and never imports `hazo_jobs` at runtime. See
|
|
1083
1115
|
`test-app/worker.ts` for a full worker example.
|
|
@@ -227,3 +227,8 @@ enable_ui=true
|
|
|
227
227
|
|
|
228
228
|
# How long to keep finalized (sent/failed) delivery rows before purge (milliseconds).
|
|
229
229
|
# failed_delivery_retention_ms = 2592000000 # 30 days
|
|
230
|
+
|
|
231
|
+
[log.overrides]
|
|
232
|
+
; Set per-namespace log levels (optional — remove to use defaults)
|
|
233
|
+
; hazo_notify/email = debug
|
|
234
|
+
; hazo_notify/telegram = debug
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/lib/adapters/email/config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/lib/adapters/email/config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgBH,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,YAAY,CAAC;AAE/D;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,aAAa,CAwJnD"}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { HazoConfig } from 'hazo_config/server';
|
|
10
10
|
import { join } from 'path';
|
|
11
|
+
import { NotifyConfigError } from '../../errors.js';
|
|
11
12
|
import { VALID_EMAILER_MODULES, DEFAULT_RATE_LIMIT_REQUESTS, DEFAULT_RATE_LIMIT_WINDOW, DEFAULT_MAX_ATTACHMENT_SIZE, DEFAULT_MAX_ATTACHMENTS, DEFAULT_REQUEST_TIMEOUT, MAX_SUBJECT_LENGTH, MAX_BODY_LENGTH, } from './utils/constants.js';
|
|
12
13
|
import { get_logger } from './utils/logger.js';
|
|
13
14
|
/**
|
|
@@ -25,7 +26,7 @@ export function load_emailer_config() {
|
|
|
25
26
|
const emailer_module_raw = emailer_section?.emailer_module || 'zeptoemail_api';
|
|
26
27
|
// Validate emailer_module
|
|
27
28
|
if (!VALID_EMAILER_MODULES.includes(emailer_module_raw)) {
|
|
28
|
-
throw new
|
|
29
|
+
throw new NotifyConfigError(`Invalid emailer_module: ${emailer_module_raw}. Must be one of: ${VALID_EMAILER_MODULES.join(', ')}`);
|
|
29
30
|
}
|
|
30
31
|
const emailer_module = emailer_module_raw;
|
|
31
32
|
// Build configuration object
|
|
@@ -90,18 +91,18 @@ export function load_emailer_config() {
|
|
|
90
91
|
}
|
|
91
92
|
// Validate required configuration
|
|
92
93
|
if (!config.from_email) {
|
|
93
|
-
throw new
|
|
94
|
+
throw new NotifyConfigError('from_email is required in config/hazo_notify_config.ini');
|
|
94
95
|
}
|
|
95
96
|
if (!config.from_name) {
|
|
96
|
-
throw new
|
|
97
|
+
throw new NotifyConfigError('from_name is required in config/hazo_notify_config.ini');
|
|
97
98
|
}
|
|
98
99
|
// Validate emailer_module specific configuration
|
|
99
100
|
if (emailer_module === 'zeptoemail_api') {
|
|
100
101
|
if (!config.zeptomail_api_endpoint) {
|
|
101
|
-
throw new
|
|
102
|
+
throw new NotifyConfigError('zeptomail_api_endpoint is required when emailer_module=zeptoemail_api');
|
|
102
103
|
}
|
|
103
104
|
if (!config.zeptomail_api_key) {
|
|
104
|
-
throw new
|
|
105
|
+
throw new NotifyConfigError('Zeptomail API key is required. Set ZEPTOMAIL_API_KEY in .env.local or zeptomail_api_key in config file');
|
|
105
106
|
}
|
|
106
107
|
}
|
|
107
108
|
return config;
|
|
@@ -118,7 +119,7 @@ export function load_emailer_config() {
|
|
|
118
119
|
line_number: stack || 'unknown',
|
|
119
120
|
error: error_string,
|
|
120
121
|
});
|
|
121
|
-
throw new
|
|
122
|
+
throw new NotifyConfigError(`Failed to load emailer configuration: ${error_message}`);
|
|
122
123
|
}
|
|
123
124
|
}
|
|
124
125
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/lib/adapters/email/config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EACL,qBAAqB,EACrB,2BAA2B,EAC3B,yBAAyB,EACzB,2BAA2B,EAC3B,uBAAuB,EACvB,uBAAuB,EACvB,kBAAkB,EAClB,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG/C;;;GAGG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,QAAQ,GAAG,YAAY,CAAC;IAC9B,MAAM,aAAa,GAAG,qBAAqB,CAAC;IAE5C,IAAI,CAAC;QACH,0EAA0E;QAC1E,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,wBAAwB,CAAC,CAAC;QACjF,MAAM,WAAW,GAAG,IAAI,UAAU,CAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,CAAC;QACnE,MAAM,eAAe,GAAG,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAEhE,MAAM,kBAAkB,GAAG,eAAe,EAAE,cAAc,IAAI,gBAAgB,CAAC;QAE/E,0BAA0B;QAC1B,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,kBAAmC,CAAC,EAAE,CAAC;YACzE,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/lib/adapters/email/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zeptomail_provider.d.ts","sourceRoot":"","sources":["../../../../../src/lib/adapters/email/providers/zeptomail_provider.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"zeptomail_provider.d.ts","sourceRoot":"","sources":["../../../../../src/lib/adapters/email/providers/zeptomail_provider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EAEjB,MAAM,EACP,MAAM,aAAa,CAAC;AAErB,qBAAa,iBAAkB,YAAW,aAAa;IACrD;;;;;;OAMG;IACG,UAAU,CACd,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,aAAa,EACrB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,CAAC;CA0Q9B"}
|
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
import { sanitize_email_header } from '../utils/validation.js';
|
|
6
6
|
import { get_logger } from '../utils/logger.js';
|
|
7
7
|
import DOMPurify from 'isomorphic-dompurify';
|
|
8
|
+
import { NotifyConfigError } from '../../../errors.js';
|
|
9
|
+
import { fetchWithRequestId } from 'hazo_core';
|
|
8
10
|
import { DEFAULT_REQUEST_TIMEOUT } from '../utils/constants.js';
|
|
9
11
|
export class ZeptomailProvider {
|
|
10
12
|
/**
|
|
@@ -22,10 +24,10 @@ export class ZeptomailProvider {
|
|
|
22
24
|
try {
|
|
23
25
|
// Validate required configuration
|
|
24
26
|
if (!config.zeptomail_api_endpoint) {
|
|
25
|
-
throw new
|
|
27
|
+
throw new NotifyConfigError('Zeptomail API endpoint is required');
|
|
26
28
|
}
|
|
27
29
|
if (!config.zeptomail_api_key) {
|
|
28
|
-
throw new
|
|
30
|
+
throw new NotifyConfigError('Zeptomail API key is required');
|
|
29
31
|
}
|
|
30
32
|
// Prepare recipient array
|
|
31
33
|
const to_emails = Array.isArray(options.to) ? options.to : [options.to];
|
|
@@ -103,23 +105,13 @@ export class ZeptomailProvider {
|
|
|
103
105
|
Authorization: auth_header,
|
|
104
106
|
};
|
|
105
107
|
// Log request for debugging (mask API key in logs)
|
|
106
|
-
log.info('
|
|
107
|
-
filename,
|
|
108
|
-
function_name,
|
|
108
|
+
(log.debug ?? log.info)('email.send_start', {
|
|
109
109
|
endpoint: config.zeptomail_api_endpoint,
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
body: {
|
|
116
|
-
from: email_data.from,
|
|
117
|
-
to_count: email_data.to.length,
|
|
118
|
-
subject: email_data.subject,
|
|
119
|
-
has_text: !!email_data.textbody,
|
|
120
|
-
has_html: !!email_data.htmlbody,
|
|
121
|
-
attachments_count: email_data.attachments?.length || 0,
|
|
122
|
-
},
|
|
110
|
+
to_count: email_data.to.length,
|
|
111
|
+
subject: email_data.subject,
|
|
112
|
+
has_text: !!email_data.textbody,
|
|
113
|
+
has_html: !!email_data.htmlbody,
|
|
114
|
+
attachments_count: email_data.attachments?.length || 0,
|
|
123
115
|
});
|
|
124
116
|
// Set up request timeout
|
|
125
117
|
const timeout = config.request_timeout || DEFAULT_REQUEST_TIMEOUT;
|
|
@@ -127,7 +119,7 @@ export class ZeptomailProvider {
|
|
|
127
119
|
const timeout_id = setTimeout(() => controller.abort(), timeout);
|
|
128
120
|
try {
|
|
129
121
|
// Make API request
|
|
130
|
-
const response = await
|
|
122
|
+
const response = await fetchWithRequestId(config.zeptomail_api_endpoint, {
|
|
131
123
|
method: 'POST',
|
|
132
124
|
headers: headers,
|
|
133
125
|
body: JSON.stringify(email_data),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zeptomail_provider.js","sourceRoot":"","sources":["../../../../../src/lib/adapters/email/providers/zeptomail_provider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,SAAS,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAUhE,MAAM,OAAO,iBAAiB;IAC5B;;;;;;OAMG;IACH,KAAK,CAAC,UAAU,CACd,OAAyB,EACzB,MAAqB,EACrB,MAAe;QAEf,yDAAyD;QACzD,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,uBAAuB,CAAC;QACzC,MAAM,aAAa,GAAG,YAAY,CAAC;QAEnC,IAAI,CAAC;YACH,kCAAkC;YAClC,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC;gBACnC,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"zeptomail_provider.js","sourceRoot":"","sources":["../../../../../src/lib/adapters/email/providers/zeptomail_provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Centralized logging utility for emailer service
|
|
3
|
-
* Provides
|
|
3
|
+
* Provides backward-compatible wrapper around hazo_core logger
|
|
4
4
|
*/
|
|
5
5
|
import type { Logger } from '../types.js';
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
8
|
-
* Used when no external logger is provided
|
|
9
|
-
*
|
|
10
|
-
* @param package_name - Name of the package for log identification
|
|
11
|
-
* @returns Logger instance with error, warn, info, debug methods
|
|
7
|
+
* @deprecated Use createLogger from hazo_core directly
|
|
12
8
|
*/
|
|
13
|
-
export declare function create_fallback_logger(
|
|
9
|
+
export declare function create_fallback_logger(_pkg?: string): Logger;
|
|
14
10
|
/**
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* @param logger - Optional external logger (from hazo_logs)
|
|
18
|
-
* @returns Logger instance
|
|
11
|
+
* @deprecated Use createLogger from hazo_core directly
|
|
19
12
|
*/
|
|
20
13
|
export declare function get_logger(logger?: Logger): Logger;
|
|
21
14
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../../../src/lib/adapters/email/utils/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../../../src/lib/adapters/email/utils/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAI1C;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAElD;AAOD;;GAEG;AACH,UAAU,QAAQ;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAE/C;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAE9C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAEjD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EACf,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACxC,QAAQ,CAOV"}
|
|
@@ -1,80 +1,38 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Centralized logging utility for emailer service
|
|
3
|
-
* Provides
|
|
3
|
+
* Provides backward-compatible wrapper around hazo_core logger
|
|
4
4
|
*/
|
|
5
|
+
import { createLogger } from 'hazo_core';
|
|
6
|
+
const _log = createLogger('hazo_notify');
|
|
5
7
|
/**
|
|
6
|
-
*
|
|
7
|
-
* Used when no external logger is provided
|
|
8
|
-
*
|
|
9
|
-
* @param package_name - Name of the package for log identification
|
|
10
|
-
* @returns Logger instance with error, warn, info, debug methods
|
|
8
|
+
* @deprecated Use createLogger from hazo_core directly
|
|
11
9
|
*/
|
|
12
|
-
export function create_fallback_logger(
|
|
13
|
-
|
|
14
|
-
return JSON.stringify({
|
|
15
|
-
level,
|
|
16
|
-
timestamp: new Date().toISOString(),
|
|
17
|
-
package: package_name,
|
|
18
|
-
message,
|
|
19
|
-
...(data || {}),
|
|
20
|
-
});
|
|
21
|
-
};
|
|
22
|
-
return {
|
|
23
|
-
error(message, data) {
|
|
24
|
-
console.error(format_log_entry('error', message, data));
|
|
25
|
-
},
|
|
26
|
-
warn(message, data) {
|
|
27
|
-
console.warn(format_log_entry('warn', message, data));
|
|
28
|
-
},
|
|
29
|
-
info(message, data) {
|
|
30
|
-
console.log(format_log_entry('info', message, data));
|
|
31
|
-
},
|
|
32
|
-
debug(message, data) {
|
|
33
|
-
// Only log debug in non-production environments
|
|
34
|
-
if (process.env.NODE_ENV !== 'production') {
|
|
35
|
-
console.log(format_log_entry('debug', message, data));
|
|
36
|
-
}
|
|
37
|
-
},
|
|
38
|
-
};
|
|
10
|
+
export function create_fallback_logger(_pkg) {
|
|
11
|
+
return _log;
|
|
39
12
|
}
|
|
40
13
|
/**
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
* @param logger - Optional external logger (from hazo_logs)
|
|
44
|
-
* @returns Logger instance
|
|
14
|
+
* @deprecated Use createLogger from hazo_core directly
|
|
45
15
|
*/
|
|
46
16
|
export function get_logger(logger) {
|
|
47
|
-
return logger
|
|
17
|
+
return logger ?? _log;
|
|
48
18
|
}
|
|
49
19
|
/**
|
|
50
20
|
* @deprecated Use get_logger().error() instead
|
|
51
21
|
*/
|
|
52
22
|
export function log_error(entry) {
|
|
53
|
-
|
|
54
|
-
level: 'error',
|
|
55
|
-
timestamp: new Date().toISOString(),
|
|
56
|
-
...entry,
|
|
57
|
-
}));
|
|
23
|
+
_log.error('error', entry);
|
|
58
24
|
}
|
|
59
25
|
/**
|
|
60
26
|
* @deprecated Use get_logger().info() instead
|
|
61
27
|
*/
|
|
62
28
|
export function log_info(entry) {
|
|
63
|
-
|
|
64
|
-
level: 'info',
|
|
65
|
-
timestamp: new Date().toISOString(),
|
|
66
|
-
...entry,
|
|
67
|
-
}));
|
|
29
|
+
_log.info('info', entry);
|
|
68
30
|
}
|
|
69
31
|
/**
|
|
70
32
|
* @deprecated Use get_logger().warn() instead
|
|
71
33
|
*/
|
|
72
34
|
export function log_warning(entry) {
|
|
73
|
-
|
|
74
|
-
level: 'warning',
|
|
75
|
-
timestamp: new Date().toISOString(),
|
|
76
|
-
...entry,
|
|
77
|
-
}));
|
|
35
|
+
_log.warn('warning', entry);
|
|
78
36
|
}
|
|
79
37
|
/**
|
|
80
38
|
* @deprecated Use structured logging with get_logger() instead
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../../../src/lib/adapters/email/utils/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../../../src/lib/adapters/email/utils/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGzC,MAAM,IAAI,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;AAEzC;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAa;IAClD,OAAO,IAAyB,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,MAAe;IACxC,OAAO,MAAM,IAAK,IAA0B,CAAC;AAC/C,CAAC;AAkBD;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAe;IACvC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAe;IACtC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAAe;IACzC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAAgB,EAChB,aAAqB,EACrB,OAAe,EACf,eAAyC;IAEzC,OAAO;QACL,QAAQ;QACR,aAAa;QACb,OAAO;QACP,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC;KAC3B,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/lib/adapters/telegram/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/lib/adapters/telegram/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,UAAU,GAAG,YAAY,CAAC;IAC/C,wBAAwB,EAAE,OAAO,CAAC;IAClC,SAAS,EAAE,aAAa,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;CACtB;AAUD,wBAAgB,oBAAoB,IAAI,cAAc,CAoDrD"}
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import { HazoConfig } from "hazo_config/server";
|
|
12
12
|
import { join } from "path";
|
|
13
|
+
import { NotifyConfigError } from "../../errors.js";
|
|
13
14
|
const DEFAULTS = {
|
|
14
15
|
parse_mode: "HTML",
|
|
15
16
|
disable_web_page_preview: true,
|
|
@@ -25,7 +26,7 @@ export function load_telegram_config() {
|
|
|
25
26
|
const s = cfg.getSection("telegram") ?? {};
|
|
26
27
|
const bot_token = process.env.HAZO_NOTIFY_TELEGRAM_BOT_TOKEN ?? s.bot_token ?? "";
|
|
27
28
|
if (!bot_token) {
|
|
28
|
-
throw new
|
|
29
|
+
throw new NotifyConfigError("telegram bot_token required (set HAZO_NOTIFY_TELEGRAM_BOT_TOKEN env or bot_token in [telegram])");
|
|
29
30
|
}
|
|
30
31
|
const default_chat_id = process.env.HAZO_NOTIFY_TELEGRAM_DEFAULT_CHAT_ID ??
|
|
31
32
|
s.default_chat_id ??
|
|
@@ -33,10 +34,10 @@ export function load_telegram_config() {
|
|
|
33
34
|
const parse_mode = s.parse_mode ?? DEFAULTS.parse_mode;
|
|
34
35
|
const transport = s.transport ?? DEFAULTS.transport;
|
|
35
36
|
if (!["HTML", "Markdown", "MarkdownV2"].includes(parse_mode)) {
|
|
36
|
-
throw new
|
|
37
|
+
throw new NotifyConfigError(`telegram parse_mode invalid: ${parse_mode}`);
|
|
37
38
|
}
|
|
38
39
|
if (!["direct", "browser-tab", "auto"].includes(transport)) {
|
|
39
|
-
throw new
|
|
40
|
+
throw new NotifyConfigError(`telegram transport invalid: ${transport}`);
|
|
40
41
|
}
|
|
41
42
|
return {
|
|
42
43
|
bot_token,
|
|
@@ -49,7 +50,7 @@ export function load_telegram_config() {
|
|
|
49
50
|
};
|
|
50
51
|
}
|
|
51
52
|
catch (e) {
|
|
52
|
-
throw new
|
|
53
|
+
throw new NotifyConfigError(`Failed to load telegram config (${filename}): ${e instanceof Error ? e.message : String(e)}`);
|
|
53
54
|
}
|
|
54
55
|
}
|
|
55
56
|
function parseBoolean(v, fallback) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/lib/adapters/telegram/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/lib/adapters/telegram/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAapD,MAAM,QAAQ,GAAG;IACf,UAAU,EAAE,MAAe;IAC3B,wBAAwB,EAAE,IAAI;IAC9B,SAAS,EAAE,QAAyB;IACpC,kBAAkB,EAAE,KAAM;IAC1B,YAAY,EAAE,0BAA0B;CACzC,CAAC;AAEF,MAAM,UAAU,oBAAoB;IAClC,MAAM,QAAQ,GAAG,WAAW,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,wBAAwB,CAAC,CAAC;QACrE,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,MAAM,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAE3C,MAAM,SAAS,GACb,OAAO,CAAC,GAAG,CAAC,8BAA8B,IAAI,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC;QAClE,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,iBAAiB,CACzB,iGAAiG,CAClG,CAAC;QACJ,CAAC;QAED,MAAM,eAAe,GACnB,OAAO,CAAC,GAAG,CAAC,oCAAoC;YAChD,CAAC,CAAC,eAAe;YACjB,EAAE,CAAC;QAEL,MAAM,UAAU,GACb,CAAC,CAAC,UAA2C,IAAI,QAAQ,CAAC,UAAU,CAAC;QACxE,MAAM,SAAS,GACZ,CAAC,CAAC,SAA2B,IAAI,QAAQ,CAAC,SAAS,CAAC;QAEvD,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7D,MAAM,IAAI,iBAAiB,CAAC,gCAAgC,UAAU,EAAE,CAAC,CAAC;QAC5E,CAAC;QACD,IAAI,CAAC,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3D,MAAM,IAAI,iBAAiB,CAAC,+BAA+B,SAAS,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,OAAO;YACL,SAAS;YACT,eAAe;YACf,UAAU;YACV,SAAS;YACT,wBAAwB,EAAE,YAAY,CACpC,CAAC,CAAC,wBAAwB,EAC1B,QAAQ,CAAC,wBAAwB,CAClC;YACD,kBAAkB,EAAE,QAAQ,CAC1B,CAAC,CAAC,kBAAkB,IAAI,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAC3D,EAAE,CACH;YACD,YAAY,EAAE,CAAC,CAAC,YAAY,IAAI,QAAQ,CAAC,YAAY;SACtD,CAAC;IACJ,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,iBAAiB,CACzB,mCAAmC,QAAQ,MAAM,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAC9F,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,CAAU,EAAE,QAAiB;IACjD,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC3C,OAAO,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC;AACpC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../../src/lib/adapters/telegram/transport.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../../src/lib/adapters/telegram/transport.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,aAAa,GAAG,MAAM,CAAC;AAE9D,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACzD;AAID;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,EAAE,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,OAAO,CAAC,iBAAiB,CAAC,GACxD,IAAI,CAEN;AAED;;GAEG;AACH,wBAAgB,+BAA+B,IAAI,IAAI,CAEtD;AAgFD;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,CAM5D"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
// Supports three modes: direct (fetch to api.telegram.org), browser-tab
|
|
4
4
|
// (delegates to a host-registered callback), and auto (direct first,
|
|
5
5
|
// falls back to browser-tab on network errors).
|
|
6
|
+
import { fetchWithRequestId } from 'hazo_core';
|
|
6
7
|
let _browserTransport = null;
|
|
7
8
|
/**
|
|
8
9
|
* Register a host-provided callback used by browser-tab and auto transports.
|
|
@@ -25,7 +26,7 @@ class DirectTransport {
|
|
|
25
26
|
? setTimeout(() => controller.abort(), req.timeout_ms)
|
|
26
27
|
: null;
|
|
27
28
|
try {
|
|
28
|
-
const r = await
|
|
29
|
+
const r = await fetchWithRequestId(req.url, {
|
|
29
30
|
method: "POST",
|
|
30
31
|
headers: { "content-type": "application/json" },
|
|
31
32
|
body: JSON.stringify(req.body),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../../src/lib/adapters/telegram/transport.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,gDAAgD;AAChD,wEAAwE;AACxE,qEAAqE;AACrE,gDAAgD;
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../../src/lib/adapters/telegram/transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* hazo_notify standard configuration loader (Wave 2).
|
|
3
|
+
*
|
|
4
|
+
* Loads [general], [log], [ui], and [inbox] sections from config/hazo_notify_config.ini
|
|
5
|
+
* via hazo_core's loadConfig with Zod validation.
|
|
6
|
+
*
|
|
7
|
+
* Adapter-specific sections ([emailer], [telegram], [template_manager], etc.) are loaded
|
|
8
|
+
* by their respective adapter config loaders and are NOT included here.
|
|
9
|
+
*
|
|
10
|
+
* @packageDocumentation
|
|
11
|
+
*/
|
|
12
|
+
import { z } from 'zod';
|
|
13
|
+
declare const schema: z.ZodNullable<z.ZodObject<{
|
|
14
|
+
general: z.ZodOptional<z.ZodObject<{
|
|
15
|
+
env: z.ZodOptional<z.ZodString>;
|
|
16
|
+
}, z.core.$strip>>;
|
|
17
|
+
log: z.ZodOptional<z.ZodObject<{
|
|
18
|
+
overrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
19
|
+
}, z.core.$strip>>;
|
|
20
|
+
ui: z.ZodOptional<z.ZodObject<{
|
|
21
|
+
enable_ui: z.ZodOptional<z.ZodPipe<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>, z.ZodTransform<boolean, string | boolean>>>;
|
|
22
|
+
}, z.core.$strip>>;
|
|
23
|
+
inbox: z.ZodOptional<z.ZodObject<{
|
|
24
|
+
default_batch_window_ms: z.ZodOptional<z.ZodPipe<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>, z.ZodTransform<number, string | number>>>;
|
|
25
|
+
read_retention_ms: z.ZodOptional<z.ZodPipe<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>, z.ZodTransform<number, string | number>>>;
|
|
26
|
+
failed_delivery_retention_ms: z.ZodOptional<z.ZodPipe<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>, z.ZodTransform<number, string | number>>>;
|
|
27
|
+
}, z.core.$strip>>;
|
|
28
|
+
}, z.core.$strip>>;
|
|
29
|
+
export type NotifyStandardConfig = NonNullable<z.infer<typeof schema>>;
|
|
30
|
+
/**
|
|
31
|
+
* Get hazo_notify standard configuration (cached).
|
|
32
|
+
*
|
|
33
|
+
* Loads from config/hazo_notify_config.ini via hazo_core loadConfig.
|
|
34
|
+
* On any error, returns an empty config object instead of throwing.
|
|
35
|
+
*
|
|
36
|
+
* @returns Standard configuration with [general], [log], [ui], [inbox] sections
|
|
37
|
+
*/
|
|
38
|
+
export declare function getNotifyConfig(): NotifyStandardConfig;
|
|
39
|
+
/**
|
|
40
|
+
* Clear the hazo_notify config cache.
|
|
41
|
+
* Primarily for testing or when the config file has changed at runtime.
|
|
42
|
+
*/
|
|
43
|
+
export declare function clearNotifyConfigCache(): void;
|
|
44
|
+
export {};
|
|
45
|
+
//# sourceMappingURL=hazo_notify_config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hazo_notify_config.d.ts","sourceRoot":"","sources":["../../../src/lib/config/hazo_notify_config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,QAAA,MAAM,MAAM;;;;;;;;;;;;;;;kBAqCC,CAAC;AAEd,MAAM,MAAM,oBAAoB,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC;AAIvE;;;;;;;GAOG;AACH,wBAAgB,eAAe,IAAI,oBAAoB,CAWtD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C"}
|