hazo_notify 5.3.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/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 +4 -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.js +3 -3
- package/dist/lib/inbox/storage.js.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/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/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 +4 -3
- package/dist/lib/preferences/storage.js.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/package.json +20 -9
|
@@ -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":"AAAA,wBAAwB;AACxB,gDAAgD;AAChD,wEAAwE;AACxE,qEAAqE;AACrE,gDAAgD;AAEhD,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAuB/C,IAAI,iBAAiB,GAAmE,IAAI,CAAC;AAE7F;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CACzC,EAAyD;IAEzD,iBAAiB,GAAG,EAAE,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,+BAA+B;IAC7C,iBAAiB,GAAG,IAAI,CAAC;AAC3B,CAAC;AAED,MAAM,eAAe;IACnB,KAAK,CAAC,IAAI,CAAC,GAAqB;QAC9B,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU;gBAC1B,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,UAAU,CAAC;gBACtD,CAAC,CAAC,IAAI,CAAC;YACT,IAAI,CAAC;gBACH,MAAM,CAAC,GAAG,MAAM,kBAAkB,CAAC,GAAG,CAAC,GAAG,EAAE;oBAC1C,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;oBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;oBAC9B,MAAM,EAAE,UAAU,CAAC,MAAM;iBAC1B,CAAC,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC9C,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;oBACV,MAAM,OAAO,GAAI,IAAkD,CAAC,UAAU,EAAE,WAAW,CAAC;oBAC5F,OAAO;wBACL,EAAE,EAAE,KAAK;wBACT,MAAM,EAAE,CAAC,CAAC,MAAM;wBAChB,KAAK,EAAG,IAAiC,CAAC,WAAW,IAAI,CAAC,CAAC,UAAU;wBACrE,cAAc,EAAE,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS;qBACzE,CAAC;gBACJ,CAAC;gBACD,MAAM,GAAG,GAAI,IAA6C,CAAC,MAAM,EAAE,UAAU,CAAC;gBAC9E,OAAO;oBACL,EAAE,EAAE,IAAI;oBACR,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,UAAU,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;iBAClD,CAAC;YACJ,CAAC;oBAAS,CAAC;gBACT,IAAI,KAAK;oBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,CAAC;gBACT,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;gBACjD,aAAa,EAAE,IAAI;aACpB,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAED,MAAM,mBAAmB;IACvB,KAAK,CAAC,IAAI,CAAC,GAAqB;QAC9B,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,CAAC;gBACT,KAAK,EAAE,qFAAqF;aAC7F,CAAC;QACJ,CAAC;QACD,IAAI,CAAC;YACH,OAAO,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,CAAC;gBACT,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;gBACjD,aAAa,EAAE,IAAI;aACpB,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAED,MAAM,aAAa;IAAnB;QACU,WAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QAC/B,YAAO,GAAG,IAAI,mBAAmB,EAAE,CAAC;IAQ9C,CAAC;IANC,KAAK,CAAC,IAAI,CAAC,GAAqB;QAC9B,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa;YAAE,OAAO,EAAE,CAAC;QAC1C,IAAI,CAAC,iBAAiB;YAAE,OAAO,EAAE,CAAC;QAClC,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,IAAmB;IAC/C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ,CAAC,CAAM,OAAO,IAAI,eAAe,EAAE,CAAC;QACjD,KAAK,aAAa,CAAC,CAAC,OAAO,IAAI,mBAAmB,EAAE,CAAC;QACrD,KAAK,MAAM,CAAC,CAAQ,OAAO,IAAI,aAAa,EAAE,CAAC;IACjD,CAAC;AACH,CAAC"}
|
|
@@ -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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
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 { loadConfig } from 'hazo_core';
|
|
13
|
+
import { z } from 'zod';
|
|
14
|
+
const schema = z
|
|
15
|
+
.object({
|
|
16
|
+
general: z
|
|
17
|
+
.object({
|
|
18
|
+
env: z.string().optional(),
|
|
19
|
+
})
|
|
20
|
+
.optional(),
|
|
21
|
+
log: z
|
|
22
|
+
.object({
|
|
23
|
+
overrides: z.record(z.string(), z.string()).optional(),
|
|
24
|
+
})
|
|
25
|
+
.optional(),
|
|
26
|
+
ui: z
|
|
27
|
+
.object({
|
|
28
|
+
enable_ui: z
|
|
29
|
+
.union([z.boolean(), z.string()])
|
|
30
|
+
.transform((v) => v === true || v === 'true')
|
|
31
|
+
.optional(),
|
|
32
|
+
})
|
|
33
|
+
.optional(),
|
|
34
|
+
inbox: z
|
|
35
|
+
.object({
|
|
36
|
+
default_batch_window_ms: z
|
|
37
|
+
.union([z.number(), z.string()])
|
|
38
|
+
.transform((v) => (typeof v === 'string' ? parseInt(v, 10) : v))
|
|
39
|
+
.optional(),
|
|
40
|
+
read_retention_ms: z
|
|
41
|
+
.union([z.number(), z.string()])
|
|
42
|
+
.transform((v) => (typeof v === 'string' ? parseInt(v, 10) : v))
|
|
43
|
+
.optional(),
|
|
44
|
+
failed_delivery_retention_ms: z
|
|
45
|
+
.union([z.number(), z.string()])
|
|
46
|
+
.transform((v) => (typeof v === 'string' ? parseInt(v, 10) : v))
|
|
47
|
+
.optional(),
|
|
48
|
+
})
|
|
49
|
+
.optional(),
|
|
50
|
+
})
|
|
51
|
+
.nullable();
|
|
52
|
+
let _cached = null;
|
|
53
|
+
/**
|
|
54
|
+
* Get hazo_notify standard configuration (cached).
|
|
55
|
+
*
|
|
56
|
+
* Loads from config/hazo_notify_config.ini via hazo_core loadConfig.
|
|
57
|
+
* On any error, returns an empty config object instead of throwing.
|
|
58
|
+
*
|
|
59
|
+
* @returns Standard configuration with [general], [log], [ui], [inbox] sections
|
|
60
|
+
*/
|
|
61
|
+
export function getNotifyConfig() {
|
|
62
|
+
if (_cached !== null)
|
|
63
|
+
return _cached;
|
|
64
|
+
try {
|
|
65
|
+
_cached = loadConfig({
|
|
66
|
+
pkg: 'hazo_notify',
|
|
67
|
+
schema: schema,
|
|
68
|
+
}) ?? {};
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
_cached = {};
|
|
72
|
+
}
|
|
73
|
+
return _cached;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Clear the hazo_notify config cache.
|
|
77
|
+
* Primarily for testing or when the config file has changed at runtime.
|
|
78
|
+
*/
|
|
79
|
+
export function clearNotifyConfigCache() {
|
|
80
|
+
_cached = null;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=hazo_notify_config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hazo_notify_config.js","sourceRoot":"","sources":["../../../src/lib/config/hazo_notify_config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,MAAM,GAAG,CAAC;KACb,MAAM,CAAC;IACN,OAAO,EAAE,CAAC;SACP,MAAM,CAAC;QACN,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC3B,CAAC;SACD,QAAQ,EAAE;IACb,GAAG,EAAE,CAAC;SACH,MAAM,CAAC;QACN,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;KACvD,CAAC;SACD,QAAQ,EAAE;IACb,EAAE,EAAE,CAAC;SACF,MAAM,CAAC;QACN,SAAS,EAAE,CAAC;aACT,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;aAChC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,MAAM,CAAC;aAC5C,QAAQ,EAAE;KACd,CAAC;SACD,QAAQ,EAAE;IACb,KAAK,EAAE,CAAC;SACL,MAAM,CAAC;QACN,uBAAuB,EAAE,CAAC;aACvB,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;aAC/B,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC/D,QAAQ,EAAE;QACb,iBAAiB,EAAE,CAAC;aACjB,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;aAC/B,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC/D,QAAQ,EAAE;QACb,4BAA4B,EAAE,CAAC;aAC5B,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;aAC/B,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC/D,QAAQ,EAAE;KACd,CAAC;SACD,QAAQ,EAAE;CACd,CAAC;KACD,QAAQ,EAAE,CAAC;AAId,IAAI,OAAO,GAAgC,IAAI,CAAC;AAEhD;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe;IAC7B,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,OAAO,CAAC;IACrC,IAAI,CAAC;QACH,OAAO,GAAG,UAAU,CAAuB;YACzC,GAAG,EAAE,aAAa;YAClB,MAAM,EAAE,MAAe;SACxB,CAAC,IAAI,EAAE,CAAC;IACX,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,EAAE,CAAC;IACf,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO,GAAG,IAAI,CAAC;AACjB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { generateRequestId } from 'hazo_core';
|
|
2
2
|
/**
|
|
3
3
|
* Build a deterministic batch_key.
|
|
4
4
|
*
|
|
@@ -14,6 +14,6 @@ import { randomUUID } from "crypto";
|
|
|
14
14
|
*/
|
|
15
15
|
export function buildBatchKey(event_type, subject_id, user_id, batch_window_ms) {
|
|
16
16
|
const base = `${event_type}:${subject_id ?? "_"}:${user_id}`;
|
|
17
|
-
return batch_window_ms === 0 ? `${base}:imm:${
|
|
17
|
+
return batch_window_ms === 0 ? `${base}:imm:${generateRequestId().slice(4)}` : base;
|
|
18
18
|
}
|
|
19
19
|
//# sourceMappingURL=batch-key.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batch-key.js","sourceRoot":"","sources":["../../../src/lib/dispatcher/batch-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"batch-key.js","sourceRoot":"","sources":["../../../src/lib/dispatcher/batch-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa,CAC3B,UAAkB,EAClB,UAAyB,EACzB,OAAe,EACf,eAAuB;IAEvB,MAAM,IAAI,GAAG,GAAG,UAAU,IAAI,UAAU,IAAI,GAAG,IAAI,OAAO,EAAE,CAAC;IAC7D,OAAO,eAAe,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,QAAQ,iBAAiB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACtF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/dispatcher/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/dispatcher/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGvE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAIvE,wBAAsB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CA6F5E"}
|
|
@@ -3,6 +3,7 @@ import { upsertInboxRow, upsertDelivery } from '../inbox/storage.js';
|
|
|
3
3
|
import { buildBatchKey } from './batch-key.js';
|
|
4
4
|
import { batchGetPreferences } from '../preferences/storage.js';
|
|
5
5
|
import { getInboxBroadcaster } from '../inbox/broadcaster.js';
|
|
6
|
+
import { NotifyChannelNotRegisteredError, NotifyDispatchValidationError } from '../errors.js';
|
|
6
7
|
const DEFAULT_BATCH_WINDOW_MS = 5 * 60000;
|
|
7
8
|
export async function dispatch(input) {
|
|
8
9
|
const enabled = Object.entries(input.channels)
|
|
@@ -12,13 +13,13 @@ export async function dispatch(input) {
|
|
|
12
13
|
for (const id of enabled) {
|
|
13
14
|
const adapter = getChannel(id);
|
|
14
15
|
if (!adapter)
|
|
15
|
-
throw new
|
|
16
|
+
throw new NotifyChannelNotRegisteredError(id);
|
|
16
17
|
const payload = input.channel_payloads?.[id];
|
|
17
18
|
if (!payload)
|
|
18
|
-
throw new
|
|
19
|
+
throw new NotifyDispatchValidationError(id, [`channel_payloads.${id} required`]);
|
|
19
20
|
const v = adapter.validate(payload);
|
|
20
21
|
if (!v.ok)
|
|
21
|
-
throw new
|
|
22
|
+
throw new NotifyDispatchValidationError(id, v.errors ?? []);
|
|
22
23
|
}
|
|
23
24
|
if (input.recipient_user_ids.length === 0 || enabled.length === 0) {
|
|
24
25
|
return {
|