@zintrust/core 0.4.64 → 0.4.66
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/package.json +1 -1
- package/src/boot/bootstrap.js +8 -2
- package/src/cli/commands/QueueRecoveryCommand.js +1 -1
- package/src/cli/scaffolding/env.d.ts.map +1 -1
- package/src/cli/scaffolding/env.js +3 -1
- package/src/cli/workers/QueueWorkRunner.d.ts.map +1 -1
- package/src/cli/workers/QueueWorkRunner.js +26 -3
- package/src/config/env.js +1 -1
- package/src/config/logger.js +3 -3
- package/src/helper/index.d.ts +11 -1
- package/src/helper/index.d.ts.map +1 -1
- package/src/helper/index.js +11 -1
- package/src/index.js +3 -3
- package/src/tools/broadcast/Broadcast.d.ts.map +1 -1
- package/src/tools/broadcast/Broadcast.js +47 -5
- package/src/tools/queue/JobRecoveryDaemon.js +1 -1
- package/src/tools/queue/Queue.d.ts +1 -0
- package/src/tools/queue/Queue.d.ts.map +1 -1
- package/src/tools/queue/Queue.js +19 -7
- package/src/types/Queue.d.ts +1 -0
- package/src/types/Queue.d.ts.map +1 -1
package/package.json
CHANGED
package/src/boot/bootstrap.js
CHANGED
|
@@ -210,12 +210,18 @@ const BootstrapFunctions = Object.freeze({
|
|
|
210
210
|
const { PluginAutoImports } = await import('../runtime/PluginAutoImports.js');
|
|
211
211
|
const officialImports = await PluginAutoImports.tryImportRuntimeAutoImports('base');
|
|
212
212
|
if (!officialImports.ok) {
|
|
213
|
-
Logger.warn('Official plugin auto-
|
|
213
|
+
Logger.warn('Official plugin auto-import advisory', {
|
|
214
|
+
reason: officialImports.reason,
|
|
215
|
+
details: officialImports.errorMessage,
|
|
216
|
+
});
|
|
214
217
|
}
|
|
215
218
|
if (!shouldSkipProjectPluginAutoImports()) {
|
|
216
219
|
const projectImports = await PluginAutoImports.tryImportProjectAutoImports();
|
|
217
220
|
if (!projectImports.ok && projectImports.reason !== 'not-found') {
|
|
218
|
-
Logger.warn('Project plugin auto-
|
|
221
|
+
Logger.warn('Project plugin auto-import advisory', {
|
|
222
|
+
reason: projectImports.reason,
|
|
223
|
+
details: projectImports.errorMessage,
|
|
224
|
+
});
|
|
219
225
|
}
|
|
220
226
|
}
|
|
221
227
|
}
|
|
@@ -400,7 +400,7 @@ const runPushForJob = async (record, options) => {
|
|
|
400
400
|
}
|
|
401
401
|
const payload = {
|
|
402
402
|
...basePayload,
|
|
403
|
-
|
|
403
|
+
jobId: record.jobId,
|
|
404
404
|
attempts: typeof record.maxAttempts === 'number' ? record.maxAttempts : 3,
|
|
405
405
|
_currentAttempts: Math.max(0, Math.floor(record.attempts ?? 0)),
|
|
406
406
|
timestamp: Date.now(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/env.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/env.ts"],"names":[],"mappings":"AAmiBA,eAAO,MAAM,OAAO,GAClB,MAAM,MAAM,EACZ,MAAM,MAAM,EACZ,SAAS,MAAM,EACf,QAAQ,MAAM,EACd,oBAAoB,MAAM,EAC1B,SAAS,MAAM,EAAE,EACjB,cAAc,MAAM,KACnB,MAAM,EAWR,CAAC"}
|
|
@@ -412,7 +412,9 @@ const LoggingAndMail = () => [
|
|
|
412
412
|
'LOG_FORMAT=text',
|
|
413
413
|
'LOG_CHANNEL=file',
|
|
414
414
|
'DISABLE_LOGGING=false',
|
|
415
|
-
'LOG_HTTP_REQUEST=
|
|
415
|
+
'LOG_HTTP_REQUEST=true',
|
|
416
|
+
'LOG_COLOR=true',
|
|
417
|
+
'LOG_COLOR_THEME=arctic',
|
|
416
418
|
'LOG_TO_FILE=false',
|
|
417
419
|
'LOG_ROTATION_SIZE=10485760',
|
|
418
420
|
'LOG_ROTATION_DAYS=7',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueueWorkRunner.d.ts","sourceRoot":"","sources":["../../../../src/cli/workers/QueueWorkRunner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"QueueWorkRunner.d.ts","sourceRoot":"","sources":["../../../../src/cli/workers/QueueWorkRunner.ts"],"names":[],"mappings":"AAwBA,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,cAAc,CAAC;AAwBzD,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAgTF,eAAO,MAAM,eAAe;iBACP,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC;qBAuCzD,OAAO,GAAG,aAAa;EAUxC,CAAC;AAEH,eAAe,eAAe,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isArray, isNonEmptyString } from '../../helper/index.js';
|
|
1
2
|
import { Broadcast } from '../../tools/broadcast/Broadcast.js';
|
|
2
3
|
import { Env } from '../../config/env.js';
|
|
3
4
|
import { Logger } from '../../config/logger.js';
|
|
@@ -9,13 +10,25 @@ import { createLockProvider, getLockProvider, registerLockProvider } from '../..
|
|
|
9
10
|
import { Queue, resolveLockPrefix } from '../../tools/queue/Queue.js';
|
|
10
11
|
import { registerQueuesFromRuntimeConfig } from '../../tools/queue/QueueRuntimeRegistration.js';
|
|
11
12
|
const isKind = (value) => value === 'broadcast' || value === 'notification';
|
|
13
|
+
const resolveQueuedBroadcastChannels = (payload) => {
|
|
14
|
+
if (isArray(payload.channels)) {
|
|
15
|
+
const channels = payload.channels.filter(isNonEmptyString).map((channel) => channel.trim());
|
|
16
|
+
if (channels.length > 0)
|
|
17
|
+
return channels;
|
|
18
|
+
}
|
|
19
|
+
if (isNonEmptyString(payload.channel)) {
|
|
20
|
+
return [payload.channel.trim()];
|
|
21
|
+
}
|
|
22
|
+
return [];
|
|
23
|
+
};
|
|
12
24
|
const detectKindFromPayload = (payload) => {
|
|
13
25
|
if (payload !== null && typeof payload === 'object') {
|
|
14
26
|
const p = payload;
|
|
15
27
|
if (isKind(p['type']))
|
|
16
28
|
return p['type'];
|
|
17
|
-
if (
|
|
29
|
+
if (resolveQueuedBroadcastChannels(p).length > 0 && typeof p['event'] === 'string') {
|
|
18
30
|
return 'broadcast';
|
|
31
|
+
}
|
|
19
32
|
if (typeof p['recipient'] === 'string' && typeof p['message'] === 'string')
|
|
20
33
|
return 'notification';
|
|
21
34
|
}
|
|
@@ -195,9 +208,19 @@ const processMessage = async (options, msg, maxAttempts, result) => {
|
|
|
195
208
|
try {
|
|
196
209
|
if (kind === 'broadcast') {
|
|
197
210
|
const job = payloadWithoutMeta;
|
|
211
|
+
const channels = resolveQueuedBroadcastChannels(job);
|
|
212
|
+
Logger.debug('Queue worker: processing queued broadcast', {
|
|
213
|
+
queue: options.queueName,
|
|
214
|
+
messageId: msg.id,
|
|
215
|
+
channels,
|
|
216
|
+
compatibilityChannel: job.channel,
|
|
217
|
+
event: job.event,
|
|
218
|
+
queuedAt: job.timestamp,
|
|
219
|
+
delivery: job.delivery,
|
|
220
|
+
broadcaster: job.broadcaster,
|
|
221
|
+
});
|
|
198
222
|
await Broadcast.publish({
|
|
199
|
-
|
|
200
|
-
channels: job.channels,
|
|
223
|
+
channels,
|
|
201
224
|
event: job.event,
|
|
202
225
|
data: job.data,
|
|
203
226
|
delivery: job.delivery,
|
package/src/config/env.js
CHANGED
|
@@ -422,7 +422,7 @@ export const Env = Object.freeze({
|
|
|
422
422
|
LOG_FORMAT: get('LOG_FORMAT', 'text'),
|
|
423
423
|
LOG_CHANNEL: get('LOG_CHANNEL', ''),
|
|
424
424
|
DISABLE_LOGGING: getBool('DISABLE_LOGGING', false),
|
|
425
|
-
LOG_HTTP_REQUEST: getBool('LOG_HTTP_REQUEST',
|
|
425
|
+
LOG_HTTP_REQUEST: getBool('LOG_HTTP_REQUEST', true),
|
|
426
426
|
LOG_TO_FILE: getBool('LOG_TO_FILE', false),
|
|
427
427
|
LOG_ROTATION_SIZE: getInt('LOG_ROTATION_SIZE', 10485760),
|
|
428
428
|
LOG_ROTATION_DAYS: getInt('LOG_ROTATION_DAYS', 7),
|
package/src/config/logger.js
CHANGED
|
@@ -74,7 +74,7 @@ const REQUEST_LOG_COLOR_THEMES = Object.freeze({
|
|
|
74
74
|
OPTIONS: `${ANSI.bold}${ANSI.brightMagenta}`,
|
|
75
75
|
}),
|
|
76
76
|
methodFallback: `${ANSI.bold}${ANSI.white}`,
|
|
77
|
-
path: ANSI.white
|
|
77
|
+
path: `${ANSI.bold}${ANSI.white}`,
|
|
78
78
|
status: Object.freeze({
|
|
79
79
|
success: `${ANSI.bold}${ANSI.brightGreen}`,
|
|
80
80
|
redirect: `${ANSI.bold}${ANSI.cyan}`,
|
|
@@ -90,7 +90,7 @@ const REQUEST_LOG_COLOR_THEMES = Object.freeze({
|
|
|
90
90
|
slow: `${ANSI.bold}${ANSI.yellow}`,
|
|
91
91
|
critical: `${ANSI.bold}${ANSI.brightRed}`,
|
|
92
92
|
}),
|
|
93
|
-
meta: `${ANSI.dim}${ANSI.
|
|
93
|
+
meta: `${ANSI.dim}${ANSI.white}`,
|
|
94
94
|
}),
|
|
95
95
|
'sharp-ops': Object.freeze({
|
|
96
96
|
level: Object.freeze({
|
|
@@ -268,7 +268,7 @@ const colorize = (value, colorCode) => `${colorCode}${value}${ANSI.reset}`;
|
|
|
268
268
|
const shouldColorizeConsoleText = () => {
|
|
269
269
|
if (isJsonFormat(getLogFormat()))
|
|
270
270
|
return false;
|
|
271
|
-
const configured = getEnvString('LOG_COLOR', '
|
|
271
|
+
const configured = getEnvString('LOG_COLOR', 'true').trim().toLowerCase();
|
|
272
272
|
if (configured === 'false' ||
|
|
273
273
|
configured === '0' ||
|
|
274
274
|
configured === 'off' ||
|
package/src/helper/index.d.ts
CHANGED
|
@@ -22,8 +22,16 @@ export declare const isEmpty: (value: unknown) => boolean;
|
|
|
22
22
|
export declare const isNull: (value: unknown) => boolean;
|
|
23
23
|
/** Check if value is undefined */
|
|
24
24
|
export declare const isUndefined: (value: unknown) => boolean;
|
|
25
|
-
/**
|
|
25
|
+
/**
|
|
26
|
+
* Legacy null-like check.
|
|
27
|
+
* Returns true for undefined, null, empty string, and the string "null".
|
|
28
|
+
* This is intentionally broader than strict TypeScript nullish narrowing.
|
|
29
|
+
*/
|
|
26
30
|
export declare const isUndefinedOrNull: (value: unknown) => boolean;
|
|
31
|
+
/** Check if value is strictly null or undefined. Type-safe for TS narrowing. */
|
|
32
|
+
export declare const isNullish: <T>(value: T | null | undefined) => value is null | undefined;
|
|
33
|
+
/** Check if value is neither null nor undefined. Type-safe for TS narrowing. */
|
|
34
|
+
export declare const isDefined: <T>(value: T | null | undefined) => value is NonNullable<T>;
|
|
27
35
|
/**
|
|
28
36
|
* Check whether value is a boolean primitive.
|
|
29
37
|
*/
|
|
@@ -175,6 +183,8 @@ export declare const Helpers: Readonly<{
|
|
|
175
183
|
isNull: (value: unknown) => boolean;
|
|
176
184
|
isUndefined: (value: unknown) => boolean;
|
|
177
185
|
isUndefinedOrNull: (value: unknown) => boolean;
|
|
186
|
+
isNullish: <T>(value: T | null | undefined) => value is null | undefined;
|
|
187
|
+
isDefined: <T>(value: T | null | undefined) => value is NonNullable<T>;
|
|
178
188
|
isArray: (value: unknown) => value is unknown[];
|
|
179
189
|
isObject: (value: unknown) => value is Record<string, unknown>;
|
|
180
190
|
isFunction: (value: unknown) => value is (...args: unknown[]) => unknown;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/helper/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,gDAAgD;AAChD,eAAO,MAAM,QAAQ,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,MAAmC,CAAC;AAEvF,sCAAsC;AACtC,eAAO,MAAM,OAAO,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,OAAO,EAA0B,CAAC;AAEpF,4DAA4D;AAC5D,eAAO,MAAM,QAAQ,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CACH,CAAC;AAEvE,wCAAwC;AACxC,eAAO,MAAM,UAAU,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAChD,CAAC;AAE9B,iDAAiD;AACjD,eAAO,MAAM,MAAM,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,IACQ,CAAC;AAM1D;;;GAGG;AACH,eAAO,MAAM,OAAO,GAAI,OAAO,OAAO,KAAG,OAM1B,CAAC;AAEhB,qEAAqE;AACrE,eAAO,MAAM,MAAM,GAAI,OAAO,OAAO,KAAG,OAGK,CAAC;AAE9C,kCAAkC;AAClC,eAAO,MAAM,WAAW,GAAI,OAAO,OAAO,KAAG,OAA8B,CAAC;AAE5E
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/helper/index.ts"],"names":[],"mappings":"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"}
|
package/src/helper/index.js
CHANGED
|
@@ -35,8 +35,16 @@ export const isNull = (value) => value === null ||
|
|
|
35
35
|
(typeof value === 'string' && value === '');
|
|
36
36
|
/** Check if value is undefined */
|
|
37
37
|
export const isUndefined = (value) => value === undefined;
|
|
38
|
-
/**
|
|
38
|
+
/**
|
|
39
|
+
* Legacy null-like check.
|
|
40
|
+
* Returns true for undefined, null, empty string, and the string "null".
|
|
41
|
+
* This is intentionally broader than strict TypeScript nullish narrowing.
|
|
42
|
+
*/
|
|
39
43
|
export const isUndefinedOrNull = (value) => isUndefined(value) || isNull(value);
|
|
44
|
+
/** Check if value is strictly null or undefined. Type-safe for TS narrowing. */
|
|
45
|
+
export const isNullish = (value) => value === null || value === undefined;
|
|
46
|
+
/** Check if value is neither null nor undefined. Type-safe for TS narrowing. */
|
|
47
|
+
export const isDefined = (value) => value !== null && value !== undefined;
|
|
40
48
|
/**
|
|
41
49
|
* Implementation
|
|
42
50
|
*/
|
|
@@ -306,6 +314,8 @@ export const Helpers = Object.freeze({
|
|
|
306
314
|
isNull,
|
|
307
315
|
isUndefined,
|
|
308
316
|
isUndefinedOrNull,
|
|
317
|
+
isNullish,
|
|
318
|
+
isDefined,
|
|
309
319
|
isArray,
|
|
310
320
|
isObject,
|
|
311
321
|
isFunction,
|
package/src/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @zintrust/core v0.4.
|
|
2
|
+
* @zintrust/core v0.4.66
|
|
3
3
|
*
|
|
4
4
|
* ZinTrust Framework - Production-Grade TypeScript Backend
|
|
5
5
|
* Built for performance, type safety, and exceptional developer experience
|
|
6
6
|
*
|
|
7
7
|
* Build Information:
|
|
8
|
-
* Built: 2026-04-
|
|
8
|
+
* Built: 2026-04-05T19:09:31.741Z
|
|
9
9
|
* Node: >=20.0.0
|
|
10
10
|
* License: MIT
|
|
11
11
|
*
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* Available at runtime for debugging and health checks
|
|
22
22
|
*/
|
|
23
23
|
export const ZINTRUST_VERSION = '0.1.41';
|
|
24
|
-
export const ZINTRUST_BUILD_DATE = '2026-04-
|
|
24
|
+
export const ZINTRUST_BUILD_DATE = '2026-04-05T19:09:31.706Z'; // Replaced during build
|
|
25
25
|
export { Application } from './boot/Application.js';
|
|
26
26
|
export { AwsSigV4 } from './common/index.js';
|
|
27
27
|
export { SignedRequest } from './security/SignedRequest.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Broadcast.d.ts","sourceRoot":"","sources":["../../../../src/tools/broadcast/Broadcast.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAE/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,KAAK,WAAW,GAAG,QAAQ,CAAC;IAC1B,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1E,OAAO,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;CAC5E,CAAC,CAAC;AAEH,KAAK,qBAAqB,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,CAAC;AAC9E,KAAK,qBAAqB,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC1D,KAAK,kBAAkB,GAAG,eAAe,GAAG,QAAQ,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"Broadcast.d.ts","sourceRoot":"","sources":["../../../../src/tools/broadcast/Broadcast.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAE/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,KAAK,WAAW,GAAG,QAAQ,CAAC;IAC1B,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1E,OAAO,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;CAC5E,CAAC,CAAC;AAEH,KAAK,qBAAqB,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,CAAC;AAC9E,KAAK,qBAAqB,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC1D,KAAK,kBAAkB,GAAG,eAAe,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAShE,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,qBAAqB,CAAC;IAC9B,YAAY,CAAC,EAAE,qBAAqB,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC,CAAC;AA0BH,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC;IAC5C,EAAE,EAAE,IAAI,CAAC;IACT,SAAS,EAAE,kBAAkB,CAAC;IAC9B,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,0BAA0B,CAAC,QAAQ,CAAC,CAAC;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACpD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;CAC9B,CAAC,CAAC;AA0kBH,eAAO,MAAM,SAAS;mBACC,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC;kBAIxD,MAAM,SAAS,MAAM,QAAQ,OAAO;0BAU5B,MAAM,SAAS,MAAM,QAAQ,OAAO;wBAKvD,qBAAqB,YACnB;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;4BAO1C,MAAM,SACR,MAAM,QACP,OAAO,YACJ;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;qBAKpC,MAAM;8BAES,qBAAqB;kCAEjB,MAAM,SAAS,MAAM,QAAQ,OAAO;;uBAKrD,MAAM,GAAG,WAAW;EAmBvC,CAAC;AAEH,eAAe,SAAS,CAAC"}
|
|
@@ -7,6 +7,12 @@ import broadcastConfig from '../../config/broadcast.js';
|
|
|
7
7
|
import { Env } from '../../config/env.js';
|
|
8
8
|
import { Logger } from '../../config/logger.js';
|
|
9
9
|
import { ErrorFactory } from '../../exceptions/ZintrustError.js';
|
|
10
|
+
const BROADCAST_CHANNEL_SCOPES = new Set([
|
|
11
|
+
'public',
|
|
12
|
+
'private',
|
|
13
|
+
'presence',
|
|
14
|
+
'persistent',
|
|
15
|
+
]);
|
|
10
16
|
const INTERNAL_SOCKET_SECRET_HEADER = 'x-zintrust-socket-secret';
|
|
11
17
|
const pickFirstNonEmpty = (...values) => {
|
|
12
18
|
for (const value of values) {
|
|
@@ -21,10 +27,7 @@ const normalizeChannelScope = (value) => {
|
|
|
21
27
|
return undefined;
|
|
22
28
|
}
|
|
23
29
|
const normalized = value.trim().toLowerCase();
|
|
24
|
-
if (normalized
|
|
25
|
-
normalized === 'private' ||
|
|
26
|
-
normalized === 'presence' ||
|
|
27
|
-
normalized === 'persistent') {
|
|
30
|
+
if (BROADCAST_CHANNEL_SCOPES.has(normalized)) {
|
|
28
31
|
return normalized;
|
|
29
32
|
}
|
|
30
33
|
return undefined;
|
|
@@ -292,6 +295,29 @@ const normalizePublishInput = (input) => {
|
|
|
292
295
|
...(input.user === undefined ? {} : { user: input.user }),
|
|
293
296
|
};
|
|
294
297
|
};
|
|
298
|
+
/**
|
|
299
|
+
* Error codes from publishSocketEventFromServer that represent policy/auth failures.
|
|
300
|
+
* These must not be swallowed in auto delivery mode — the socket publish policy must
|
|
301
|
+
* be respected even when a driver fallback is available.
|
|
302
|
+
*/
|
|
303
|
+
const NON_TRANSIENT_SOCKET_ERROR_CODES = new Set([
|
|
304
|
+
'FORBIDDEN',
|
|
305
|
+
'UNAUTHORIZED',
|
|
306
|
+
'VALIDATION_ERROR',
|
|
307
|
+
'SECURITY_ERROR',
|
|
308
|
+
'SANITIZER_ERROR',
|
|
309
|
+
]);
|
|
310
|
+
/**
|
|
311
|
+
* Returns true for authorization/validation/policy errors from the socket module.
|
|
312
|
+
* Returns false for "socket unavailable" errors (module missing, disabled, connection
|
|
313
|
+
* failure, config) which are safe to fall back from.
|
|
314
|
+
*/
|
|
315
|
+
const isNonTransientSocketError = (error) => {
|
|
316
|
+
if (!(error instanceof Error))
|
|
317
|
+
return false;
|
|
318
|
+
const code = error.code;
|
|
319
|
+
return typeof code === 'string' && NON_TRANSIENT_SOCKET_ERROR_CODES.has(code);
|
|
320
|
+
};
|
|
295
321
|
const tryPublishViaSocket = async (input) => {
|
|
296
322
|
try {
|
|
297
323
|
const socketModule = (await import('@zintrust/socket'));
|
|
@@ -315,6 +341,12 @@ const tryPublishViaSocket = async (input) => {
|
|
|
315
341
|
};
|
|
316
342
|
}
|
|
317
343
|
catch (error) {
|
|
344
|
+
// For authorization/validation/policy errors, rethrow even in auto delivery mode
|
|
345
|
+
// to prevent bypassing socket publish policy via driver fallback.
|
|
346
|
+
// Only allow fallback for "socket unavailable" cases (module missing, disabled, connection issues).
|
|
347
|
+
if (isNonTransientSocketError(error)) {
|
|
348
|
+
throw error;
|
|
349
|
+
}
|
|
318
350
|
return { result: null, error };
|
|
319
351
|
}
|
|
320
352
|
};
|
|
@@ -385,7 +417,7 @@ const publishLaterInternal = async (input, options = {}) => {
|
|
|
385
417
|
const normalized = normalizePublishInput(input);
|
|
386
418
|
const { queueName = 'broadcasts', timestamp = Date.now() } = options;
|
|
387
419
|
const { Queue } = await import('../queue/Queue.js');
|
|
388
|
-
|
|
420
|
+
const payload = {
|
|
389
421
|
type: 'broadcast',
|
|
390
422
|
channel: normalized.channels[0],
|
|
391
423
|
channels: normalized.channels,
|
|
@@ -396,7 +428,17 @@ const publishLaterInternal = async (input, options = {}) => {
|
|
|
396
428
|
delivery: normalized.delivery,
|
|
397
429
|
timestamp,
|
|
398
430
|
attempts: 0,
|
|
431
|
+
};
|
|
432
|
+
Logger.debug('Broadcast queued publish prepared', {
|
|
433
|
+
queueName,
|
|
434
|
+
channels: payload.channels,
|
|
435
|
+
compatibilityChannel: payload.channel,
|
|
436
|
+
event: payload.event,
|
|
437
|
+
delivery: payload.delivery,
|
|
438
|
+
broadcaster: payload.broadcaster,
|
|
439
|
+
timestamp: payload.timestamp,
|
|
399
440
|
});
|
|
441
|
+
return Queue.enqueue(queueName, payload);
|
|
400
442
|
};
|
|
401
443
|
export const Broadcast = Object.freeze({
|
|
402
444
|
async publish(input) {
|
|
@@ -121,7 +121,7 @@ export const JobRecoveryDaemon = Object.freeze({
|
|
|
121
121
|
try {
|
|
122
122
|
await Queue.enqueue(record.queueName, {
|
|
123
123
|
...payload,
|
|
124
|
-
|
|
124
|
+
jobId: record.jobId,
|
|
125
125
|
attempts: maxAttempts,
|
|
126
126
|
_currentAttempts: record.attempts + 1,
|
|
127
127
|
timestamp: Date.now() + backoffMs,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Queue.d.ts","sourceRoot":"","sources":["../../../../src/tools/queue/Queue.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,YAAY,CAAC,CAAC,GAAG,OAAO,IAAI;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,CAAC,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAErF,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACjE,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAC1E,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAE5B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAChC,OAAO,CAAC,EAAE;QACR,IAAI,EAAE,OAAO,GAAG,aAAa,CAAC;QAC9B,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,MAAM,CAAC,EAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,IAAI,CAAC,EAAE,OAAO,CAAC;IAGf,aAAa,CAAC,EAAE;QACd,EAAE,EAAE,MAAM,CAAC;QACX,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;KACvE,CAAC;IAGF,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAID;;;GAGG;AACH,eAAO,MAAM,iBAAiB,QAAO,MAOpC,CAAC;
|
|
1
|
+
{"version":3,"file":"Queue.d.ts","sourceRoot":"","sources":["../../../../src/tools/queue/Queue.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,YAAY,CAAC,CAAC,GAAG,OAAO,IAAI;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,CAAC,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAErF,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACjE,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAC1E,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAE5B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAChC,OAAO,CAAC,EAAE;QACR,IAAI,EAAE,OAAO,GAAG,aAAa,CAAC;QAC9B,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,MAAM,CAAC,EAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,IAAI,CAAC,EAAE,OAAO,CAAC;IAGf,aAAa,CAAC,EAAE;QACd,EAAE,EAAE,MAAM,CAAC;QACX,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;KACvE,CAAC;IAGF,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAID;;;GAGG;AACH,eAAO,MAAM,iBAAiB,QAAO,MAOpC,CAAC;AAwFF,eAAO,MAAM,KAAK;mBACD,MAAM,UAAU,YAAY;aAIlC,IAAI;eAIF,MAAM,GAAG,YAAY;mBASX,MAAM,WAAW,aAAa,eAAe,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YA0E5E,CAAC,mBACN,MAAM,eACA,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;eActB,MAAM,MAAM,MAAM,eAAe,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;kBAcpD,MAAM,eAAe,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;iBAc9C,MAAM,eAAe,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;EAa9D,CAAC;AAEH,eAAe,KAAK,CAAC"}
|
package/src/tools/queue/Queue.js
CHANGED
|
@@ -30,12 +30,18 @@ const shouldPreserveExistingStatus = (queueName, jobId) => {
|
|
|
30
30
|
const existing = JobStateTracker.get(queueName, jobId);
|
|
31
31
|
return existing?.status === 'pending_recovery';
|
|
32
32
|
};
|
|
33
|
-
const
|
|
34
|
-
if (typeof
|
|
33
|
+
const normalizeRequestedId = (value) => {
|
|
34
|
+
if (typeof value !== 'string')
|
|
35
35
|
return undefined;
|
|
36
|
-
const normalized =
|
|
36
|
+
const normalized = value.trim();
|
|
37
37
|
return normalized.length > 0 ? normalized : undefined;
|
|
38
38
|
};
|
|
39
|
+
const resolveRequestedJobId = (payload) => {
|
|
40
|
+
return normalizeRequestedId(payload?.jobId);
|
|
41
|
+
};
|
|
42
|
+
const resolveRequestedUniqueId = (payload) => {
|
|
43
|
+
return normalizeRequestedId(payload?.uniqueId);
|
|
44
|
+
};
|
|
39
45
|
const resolveMaxAttempts = (payload) => {
|
|
40
46
|
if (typeof payload?.attempts !== 'number' || !Number.isFinite(payload.attempts))
|
|
41
47
|
return undefined;
|
|
@@ -54,13 +60,13 @@ const markEnqueued = async (input) => {
|
|
|
54
60
|
idempotencyKey: input.requestedUniqueId,
|
|
55
61
|
});
|
|
56
62
|
};
|
|
57
|
-
const createFallbackJobId = (
|
|
58
|
-
if (
|
|
59
|
-
return
|
|
63
|
+
const createFallbackJobId = (requestedJobId) => {
|
|
64
|
+
if (requestedJobId !== undefined)
|
|
65
|
+
return requestedJobId;
|
|
60
66
|
return `fallback-${generateUuid()}`;
|
|
61
67
|
};
|
|
62
68
|
const markFailedEnqueue = async (input) => {
|
|
63
|
-
const fallbackJobId = createFallbackJobId(input.
|
|
69
|
+
const fallbackJobId = createFallbackJobId(input.requestedJobId);
|
|
64
70
|
await markEnqueued({
|
|
65
71
|
queueName: input.queueName,
|
|
66
72
|
jobId: fallbackJobId,
|
|
@@ -92,6 +98,7 @@ export const Queue = Object.freeze({
|
|
|
92
98
|
},
|
|
93
99
|
async enqueue(queue, payload, driverName) {
|
|
94
100
|
const resolvedDriver = resolveDriverName(driverName);
|
|
101
|
+
const requestedJobId = resolveRequestedJobId(payload);
|
|
95
102
|
const requestedUniqueId = resolveRequestedUniqueId(payload);
|
|
96
103
|
try {
|
|
97
104
|
const jobId = await QueueTracing.traceOperation({
|
|
@@ -99,6 +106,7 @@ export const Queue = Object.freeze({
|
|
|
99
106
|
operation: 'enqueue',
|
|
100
107
|
attributes: {
|
|
101
108
|
driverName: resolvedDriver,
|
|
109
|
+
hasJobId: requestedJobId !== undefined,
|
|
102
110
|
hasUniqueId: requestedUniqueId !== undefined,
|
|
103
111
|
},
|
|
104
112
|
execute: async () => {
|
|
@@ -110,6 +118,7 @@ export const Queue = Object.freeze({
|
|
|
110
118
|
queue,
|
|
111
119
|
driver: resolvedDriver,
|
|
112
120
|
jobId,
|
|
121
|
+
requestedJobId,
|
|
113
122
|
requestedUniqueId,
|
|
114
123
|
});
|
|
115
124
|
if (shouldPreserveExistingStatus(queue, jobId)) {
|
|
@@ -117,6 +126,7 @@ export const Queue = Object.freeze({
|
|
|
117
126
|
queue,
|
|
118
127
|
driver: resolvedDriver,
|
|
119
128
|
jobId,
|
|
129
|
+
requestedJobId,
|
|
120
130
|
requestedUniqueId,
|
|
121
131
|
});
|
|
122
132
|
return jobId;
|
|
@@ -134,6 +144,7 @@ export const Queue = Object.freeze({
|
|
|
134
144
|
const fallbackJobId = await markFailedEnqueue({
|
|
135
145
|
queueName: queue,
|
|
136
146
|
payload,
|
|
147
|
+
requestedJobId,
|
|
137
148
|
requestedUniqueId,
|
|
138
149
|
error,
|
|
139
150
|
});
|
|
@@ -141,6 +152,7 @@ export const Queue = Object.freeze({
|
|
|
141
152
|
queue,
|
|
142
153
|
driver: resolvedDriver,
|
|
143
154
|
fallbackJobId,
|
|
155
|
+
requestedJobId,
|
|
144
156
|
requestedUniqueId,
|
|
145
157
|
error: error instanceof Error ? error.message : String(error),
|
|
146
158
|
});
|
package/src/types/Queue.d.ts
CHANGED
package/src/types/Queue.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Queue.d.ts","sourceRoot":"","sources":["../../../src/types/Queue.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,gBAAgB,CAAC;CACnD;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,IAAI;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,IAAI,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,QAAQ,CAAC;IACtC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,oBAAoB,CAAC;CACtC;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,QAAQ,GAAG,cAAc,GAAG,QAAQ,CAAC;CAC9C;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACzC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CAC3C"}
|
|
1
|
+
{"version":3,"file":"Queue.d.ts","sourceRoot":"","sources":["../../../src/types/Queue.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,gBAAgB,CAAC;CACnD;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,IAAI;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,IAAI,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,QAAQ,CAAC;IACtC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,oBAAoB,CAAC;CACtC;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,QAAQ,GAAG,cAAc,GAAG,QAAQ,CAAC;CAC9C;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACzC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CAC3C"}
|