@zintrust/core 2.8.3 → 2.8.5
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/bin/z.js +0 -0
- package/bin/zin.js +0 -0
- package/bin/zintrust.js +0 -0
- package/bin/zt.js +0 -0
- package/package.json +4 -4
- package/src/common/EnvFallbackUtils.d.ts +6 -0
- package/src/common/EnvFallbackUtils.d.ts.map +1 -0
- package/src/common/EnvFallbackUtils.js +50 -0
- package/src/common/ExternalServiceUtils.d.ts +1 -5
- package/src/common/ExternalServiceUtils.d.ts.map +1 -1
- package/src/common/ExternalServiceUtils.js +1 -47
- package/src/config/cache.js +1 -1
- package/src/config/database.js +2 -1
- package/src/config/index.d.ts.map +1 -1
- package/src/config/queue.js +1 -1
- package/src/config/workers.d.ts.map +1 -1
- package/src/config/workers.js +6 -1
- package/src/index.js +3 -3
- package/src/node-singletons/process.d.ts +1 -1
- package/src/node-singletons/process.d.ts.map +1 -1
- package/src/redis-index.d.ts +1 -0
- package/src/redis-index.d.ts.map +1 -1
- package/src/redis-index.js +2 -0
- package/src/tools/queue/QueueRuntimeRegistration.d.ts.map +1 -1
- package/src/tools/queue/QueueRuntimeRegistration.js +20 -3
- package/src/tools/redis/RedisTransport.d.ts +4 -1
- package/src/tools/redis/RedisTransport.d.ts.map +1 -1
- package/src/tools/redis/RedisTransport.js +31 -3
package/bin/z.js
CHANGED
|
File without changes
|
package/bin/zin.js
CHANGED
|
File without changes
|
package/bin/zintrust.js
CHANGED
|
File without changes
|
package/bin/zt.js
CHANGED
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zintrust/core",
|
|
3
|
-
"version": "2.8.
|
|
3
|
+
"version": "2.8.5",
|
|
4
4
|
"description": "Production-grade TypeScript backend framework for JavaScript",
|
|
5
5
|
"homepage": "https://zintrust.com",
|
|
6
6
|
"repository": {
|
|
@@ -216,15 +216,15 @@
|
|
|
216
216
|
"@zedgi/zedgi-client": "^1.0.3",
|
|
217
217
|
"@cloudflare/containers": "^0.3.7",
|
|
218
218
|
"bcryptjs": "^3.0.3",
|
|
219
|
-
"bullmq": "^5.79.
|
|
219
|
+
"bullmq": "^5.79.2",
|
|
220
220
|
"chalk": "^5.6.2",
|
|
221
221
|
"commander": "^15.0.0",
|
|
222
|
-
"inquirer": "^14.0.
|
|
222
|
+
"inquirer": "^14.0.2",
|
|
223
223
|
"ioredis": "^5.11.1",
|
|
224
224
|
"jsonwebtoken": "^9.0.3",
|
|
225
225
|
"mysql2": "^3.22.5",
|
|
226
226
|
"pg": "^8.22.0",
|
|
227
|
-
"redis": "^6.0.
|
|
227
|
+
"redis": "^6.0.1",
|
|
228
228
|
"tsx": "^4.22.4"
|
|
229
229
|
},
|
|
230
230
|
"overrides": {
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const readWorkersEnvString: (key: string) => string;
|
|
2
|
+
export declare const readWorkersFallbackString: (workersKey: string, fallbackKey: string, fallback?: string, includeFallbackWorkerBinding?: boolean) => string;
|
|
3
|
+
export declare const readWorkersFallbackInt: (workersKey: string, fallbackKey: string, fallback: number, includeFallbackWorkerBinding?: boolean) => number;
|
|
4
|
+
export declare const readWorkersFallbackBool: (workersKey: string, fallbackKey: string, fallback: boolean) => boolean;
|
|
5
|
+
export declare const parseJsonObjectEnv: (key: string) => Record<string, unknown> | undefined;
|
|
6
|
+
//# sourceMappingURL=EnvFallbackUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnvFallbackUtils.d.ts","sourceRoot":"","sources":["../../../src/common/EnvFallbackUtils.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,oBAAoB,GAAI,KAAK,MAAM,KAAG,MAIlD,CAAC;AAEF,eAAO,MAAM,yBAAyB,GACpC,YAAY,MAAM,EAClB,aAAa,MAAM,EACnB,iBAAa,EACb,sCAAoC,KACnC,MAUF,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,YAAY,MAAM,EAClB,aAAa,MAAM,EACnB,UAAU,MAAM,EAChB,sCAAoC,KACnC,MAUF,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,YAAY,MAAM,EAClB,aAAa,MAAM,EACnB,UAAU,OAAO,KAChB,OAMF,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,KAAK,MAAM,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAa1E,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Cloudflare } from '../config/cloudflare.js';
|
|
2
|
+
import { Env } from '../config/env.js';
|
|
3
|
+
const normalizeEnvString = (value, fallback = '') => typeof value === 'string' ? value : fallback;
|
|
4
|
+
export const readWorkersEnvString = (key) => {
|
|
5
|
+
const workerValue = Cloudflare.getWorkersVar(key);
|
|
6
|
+
if (workerValue !== null && workerValue.trim() !== '')
|
|
7
|
+
return workerValue;
|
|
8
|
+
return '';
|
|
9
|
+
};
|
|
10
|
+
export const readWorkersFallbackString = (workersKey, fallbackKey, fallback = '', includeFallbackWorkerBinding = false) => {
|
|
11
|
+
const workerValue = readWorkersEnvString(workersKey);
|
|
12
|
+
if (workerValue.trim() !== '')
|
|
13
|
+
return workerValue;
|
|
14
|
+
if (includeFallbackWorkerBinding) {
|
|
15
|
+
const fallbackWorkerValue = readWorkersEnvString(fallbackKey);
|
|
16
|
+
if (fallbackWorkerValue.trim() !== '')
|
|
17
|
+
return fallbackWorkerValue;
|
|
18
|
+
}
|
|
19
|
+
return normalizeEnvString(Env.get(fallbackKey, fallback), fallback);
|
|
20
|
+
};
|
|
21
|
+
export const readWorkersFallbackInt = (workersKey, fallbackKey, fallback, includeFallbackWorkerBinding = false) => {
|
|
22
|
+
const raw = readWorkersFallbackString(workersKey, fallbackKey, String(fallback), includeFallbackWorkerBinding);
|
|
23
|
+
if (raw.trim() === '')
|
|
24
|
+
return fallback;
|
|
25
|
+
const parsed = Number.parseInt(raw, 10);
|
|
26
|
+
return Number.isFinite(parsed) ? parsed : fallback;
|
|
27
|
+
};
|
|
28
|
+
export const readWorkersFallbackBool = (workersKey, fallbackKey, fallback) => {
|
|
29
|
+
const workerValue = readWorkersEnvString(workersKey);
|
|
30
|
+
if (workerValue.trim() !== '') {
|
|
31
|
+
return workerValue === 'true' || workerValue === '1';
|
|
32
|
+
}
|
|
33
|
+
return Env.getBool(fallbackKey, fallback);
|
|
34
|
+
};
|
|
35
|
+
export const parseJsonObjectEnv = (key) => {
|
|
36
|
+
const value = Env.get(key, '');
|
|
37
|
+
const raw = typeof value === 'string' ? value.trim() : '';
|
|
38
|
+
if (raw === '')
|
|
39
|
+
return undefined;
|
|
40
|
+
try {
|
|
41
|
+
const parsed = JSON.parse(raw);
|
|
42
|
+
if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {
|
|
43
|
+
return parsed;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return { value: raw };
|
|
48
|
+
}
|
|
49
|
+
return undefined;
|
|
50
|
+
};
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Shared Utilities for External Service Drivers
|
|
3
3
|
* Common patterns for API calls, environment variable reading, and error handling
|
|
4
4
|
*/
|
|
5
|
+
export { parseJsonObjectEnv, readWorkersEnvString, readWorkersFallbackBool, readWorkersFallbackInt, readWorkersFallbackString, } from './EnvFallbackUtils';
|
|
5
6
|
export type TracedFetchTraceOptions = {
|
|
6
7
|
source?: string;
|
|
7
8
|
};
|
|
@@ -10,11 +11,6 @@ export type TracedFetchTraceOptions = {
|
|
|
10
11
|
* Handles both Env.get() and process.env for maximum compatibility
|
|
11
12
|
*/
|
|
12
13
|
export declare const readEnvString: (key: string, fallback?: string) => string;
|
|
13
|
-
export declare const readWorkersEnvString: (key: string) => string;
|
|
14
|
-
export declare const readWorkersFallbackString: (workersKey: string, fallbackKey: string, fallback?: string, includeFallbackWorkerBinding?: boolean) => string;
|
|
15
|
-
export declare const readWorkersFallbackInt: (workersKey: string, fallbackKey: string, fallback: number, includeFallbackWorkerBinding?: boolean) => number;
|
|
16
|
-
export declare const readWorkersFallbackBool: (workersKey: string, fallbackKey: string, fallback: boolean) => boolean;
|
|
17
|
-
export declare const parseJsonObjectEnv: (key: string) => Record<string, unknown> | undefined;
|
|
18
14
|
/**
|
|
19
15
|
* Validate required parameters for external service calls
|
|
20
16
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExternalServiceUtils.d.ts","sourceRoot":"","sources":["../../../src/common/ExternalServiceUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"ExternalServiceUtils.d.ts","sourceRoot":"","sources":["../../../src/common/ExternalServiceUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,0BAA0B,CAAC;AAElC,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAkHF;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,KAAK,MAAM,EAAE,iBAAa,KAAG,MAe1D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,GACjC,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,UAAU,MAAM,EAAE,KACjB,IAWF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,SAAS,MAAM,EAAE,SAAS,MAAM,KAAG,KAEjE,CAAC;AAEF,eAAO,MAAM,WAAW,GACtB,KAAK,MAAM,EACX,SAAS,WAAW,EACpB,QAAQ,uBAAuB,KAC9B,OAAO,CAAC,QAAQ,CAWlB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,GACpB,KAAK,MAAM,EACX,SAAS,WAAW,EACpB,QAAQ,uBAAuB,KAC9B,OAAO,CAAC,QAAQ,CAclB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAChC,SAAS,OAAO,EAChB,OAAO,CAAC,EACR,QAAQ,MAAM,KACb;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAY9C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW;IACtB;;OAEG;iBACU,MAAM;IAMnB;;OAEG;oBACa,MAAM;IAItB;;OAEG;8BACuB,MAAM,GAAG,OAAO;IAI1C;;OAEG;gCAEO,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,OAAO,GAAG,WAAW,eACpD,MAAM,UACX,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;IAYjC;;OAEG;+BAEO,WAAW,GAAG,WAAW,eACpB,MAAM,SACZ,KAAK,UACJ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;CASlC,CAAC"}
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
* Common patterns for API calls, environment variable reading, and error handling
|
|
4
4
|
*/
|
|
5
5
|
import { SystemTraceBridge } from '../trace/SystemTraceBridge.js';
|
|
6
|
-
import { Cloudflare } from '../config/cloudflare.js';
|
|
7
6
|
import { Env } from '../config/env.js';
|
|
8
7
|
import { ErrorFactory } from '../exceptions/ZintrustError.js';
|
|
8
|
+
export { parseJsonObjectEnv, readWorkersEnvString, readWorkersFallbackBool, readWorkersFallbackInt, readWorkersFallbackString, } from './EnvFallbackUtils.js';
|
|
9
9
|
const isHeaderEntriesLike = (value) => {
|
|
10
10
|
return typeof value === 'object' && value !== null && 'entries' in value;
|
|
11
11
|
};
|
|
@@ -110,52 +110,6 @@ export const readEnvString = (key, fallback = '') => {
|
|
|
110
110
|
}
|
|
111
111
|
return fallback;
|
|
112
112
|
};
|
|
113
|
-
export const readWorkersEnvString = (key) => {
|
|
114
|
-
const workerValue = Cloudflare.getWorkersVar(key);
|
|
115
|
-
if (workerValue !== null && workerValue.trim() !== '')
|
|
116
|
-
return workerValue;
|
|
117
|
-
return '';
|
|
118
|
-
};
|
|
119
|
-
export const readWorkersFallbackString = (workersKey, fallbackKey, fallback = '', includeFallbackWorkerBinding = false) => {
|
|
120
|
-
const workerValue = readWorkersEnvString(workersKey);
|
|
121
|
-
if (workerValue.trim() !== '')
|
|
122
|
-
return workerValue;
|
|
123
|
-
if (includeFallbackWorkerBinding) {
|
|
124
|
-
const fallbackWorkerValue = readWorkersEnvString(fallbackKey);
|
|
125
|
-
if (fallbackWorkerValue.trim() !== '')
|
|
126
|
-
return fallbackWorkerValue;
|
|
127
|
-
}
|
|
128
|
-
return readEnvString(fallbackKey, fallback);
|
|
129
|
-
};
|
|
130
|
-
export const readWorkersFallbackInt = (workersKey, fallbackKey, fallback, includeFallbackWorkerBinding = false) => {
|
|
131
|
-
const raw = readWorkersFallbackString(workersKey, fallbackKey, String(fallback), includeFallbackWorkerBinding);
|
|
132
|
-
if (raw.trim() === '')
|
|
133
|
-
return fallback;
|
|
134
|
-
const parsed = Number.parseInt(raw, 10);
|
|
135
|
-
return Number.isFinite(parsed) ? parsed : fallback;
|
|
136
|
-
};
|
|
137
|
-
export const readWorkersFallbackBool = (workersKey, fallbackKey, fallback) => {
|
|
138
|
-
const workerValue = readWorkersEnvString(workersKey);
|
|
139
|
-
if (workerValue.trim() !== '') {
|
|
140
|
-
return workerValue === 'true' || workerValue === '1';
|
|
141
|
-
}
|
|
142
|
-
return Env.getBool(fallbackKey, fallback);
|
|
143
|
-
};
|
|
144
|
-
export const parseJsonObjectEnv = (key) => {
|
|
145
|
-
const raw = Env.get(key, '').trim();
|
|
146
|
-
if (raw === '')
|
|
147
|
-
return undefined;
|
|
148
|
-
try {
|
|
149
|
-
const parsed = JSON.parse(raw);
|
|
150
|
-
if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {
|
|
151
|
-
return parsed;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
catch {
|
|
155
|
-
return { value: raw };
|
|
156
|
-
}
|
|
157
|
-
return undefined;
|
|
158
|
-
};
|
|
159
113
|
/**
|
|
160
114
|
* Validate required parameters for external service calls
|
|
161
115
|
*/
|
package/src/config/cache.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Caching drivers and settings
|
|
4
4
|
* Sealed namespace for immutability
|
|
5
5
|
*/
|
|
6
|
-
import { parseJsonObjectEnv, readWorkersFallbackBool, readWorkersFallbackInt, readWorkersFallbackString, } from '../common/
|
|
6
|
+
import { parseJsonObjectEnv, readWorkersFallbackBool, readWorkersFallbackInt, readWorkersFallbackString, } from '../common/EnvFallbackUtils.js';
|
|
7
7
|
import { Env } from './env.js';
|
|
8
8
|
import { ErrorFactory } from '../exceptions/ZintrustError.js';
|
|
9
9
|
import { StartupConfigFile, StartupConfigFileRegistry } from '../runtime/StartupConfigFileRegistry.js';
|
package/src/config/database.js
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
* Database connections and pooling settings
|
|
4
4
|
* Sealed namespace for immutability
|
|
5
5
|
*/
|
|
6
|
-
import { parseJsonObjectEnv,
|
|
6
|
+
import { parseJsonObjectEnv, readWorkersFallbackInt as readSharedWorkersFallbackInt, readWorkersFallbackString as readSharedWorkersFallbackString, } from '../common/EnvFallbackUtils.js';
|
|
7
|
+
import { readEnvString } from '../common/ExternalServiceUtils.js';
|
|
7
8
|
import { Env } from './env.js';
|
|
8
9
|
import { ErrorFactory } from '../exceptions/ZintrustError.js';
|
|
9
10
|
import { StartupConfigFile, StartupConfigFileRegistry } from '../runtime/StartupConfigFileRegistry.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,OAAO,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACpE,YAAY,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD;;;GAGG;AACH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;8BAkCoY,CAAC;;;;;;;;;;;;;;;;;;;;iFAhDrX,CAAA;;;;;;;;;;;;;;;;;;;;8BAD2B,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,OAAO,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACpE,YAAY,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD;;;GAGG;AACH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;8BAkCoY,CAAC;;;;;;;;;;;;;;;;;;;;iFAhDrX,CAAA;;;;;;;;;;;;;;;;;;;;8BAD2B,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAiDmuE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;EAHxxE,CAAC;AAEZ,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC"}
|
package/src/config/queue.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Background job and message queue settings
|
|
4
4
|
* Sealed namespace for immutability
|
|
5
5
|
*/
|
|
6
|
-
import { parseJsonObjectEnv, readWorkersFallbackBool, readWorkersFallbackInt, readWorkersFallbackString, } from '../common/
|
|
6
|
+
import { parseJsonObjectEnv, readWorkersFallbackBool, readWorkersFallbackInt, readWorkersFallbackString, } from '../common/EnvFallbackUtils.js';
|
|
7
7
|
import { Env } from './env.js';
|
|
8
8
|
import { Logger } from './logger.js';
|
|
9
9
|
import { ErrorFactory } from '../exceptions/ZintrustError.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workers.d.ts","sourceRoot":"","sources":["../../../src/config/workers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAGL,KAAK,qBAAqB,EAC3B,MAAM,8BAA8B,CAAC;AAItC,OAAO,KAAK,EACV,WAAW,EAIX,mBAAmB,EACpB,MAAM,cAAc,CAAC;AAItB,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAibnC,eAAO,MAAM,qBAAqB,GAChC,QAAQ,WAAW,EACnB,mBAAc,EACd,UAAU,qBAAqB,KAC9B,
|
|
1
|
+
{"version":3,"file":"workers.d.ts","sourceRoot":"","sources":["../../../src/config/workers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAGL,KAAK,qBAAqB,EAC3B,MAAM,8BAA8B,CAAC;AAItC,OAAO,KAAK,EACV,WAAW,EAIX,mBAAmB,EACpB,MAAM,cAAc,CAAC;AAItB,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAibnC,eAAO,MAAM,qBAAqB,GAChC,QAAQ,WAAW,EACnB,mBAAc,EACd,UAAU,qBAAqB,KAC9B,OAcF,CAAC;AAEF,eAAO,MAAM,wBAAwB,QAAa,OAAO,CAAC,IAAI,CAmB7D,CAAC;AAgFF,QAAA,MAAM,mBAAmB,QAAO,mBA2D/B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAkBnE,eAAO,MAAM,aAAa,EAAE,aAY1B,CAAC"}
|
package/src/config/workers.js
CHANGED
|
@@ -329,7 +329,12 @@ export const createRedisConnection = (config, maxRetries = 3, options) => {
|
|
|
329
329
|
const subsystem = options?.subsystem ?? '';
|
|
330
330
|
const skipProxy = BULLMQ_SUBSYSTEMS.has(subsystem);
|
|
331
331
|
const mode = skipProxy ? 'direct' : ensureRedisTransportMode(config, options);
|
|
332
|
-
|
|
332
|
+
// In zedgi mode, allow proxy connection for queue-monitor since we have a Zedgi-native driver
|
|
333
|
+
const allowProxyForZedgi = mode === 'zedgi' && subsystem === 'queue-monitor';
|
|
334
|
+
if (mode === 'proxy' || mode === 'rpc' || mode === 'zedgi') {
|
|
335
|
+
if (skipProxy && !allowProxyForZedgi) {
|
|
336
|
+
return createDirectRedisConnection(config, maxRetries, options);
|
|
337
|
+
}
|
|
333
338
|
return createRedisProxyConnection(config, options);
|
|
334
339
|
}
|
|
335
340
|
return createDirectRedisConnection(config, maxRetries, options);
|
package/src/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @zintrust/core v2.8.
|
|
2
|
+
* @zintrust/core v2.8.5
|
|
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-06-
|
|
8
|
+
* Built: 2026-06-27T21:41:02.166Z
|
|
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-06-
|
|
24
|
+
export const ZINTRUST_BUILD_DATE = '2026-06-27T21:41:02.131Z'; // 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';
|
|
@@ -9,7 +9,7 @@ export declare const arch: NodeJS.Architecture, argv: string[], argv0: string, c
|
|
|
9
9
|
(warning: string | Error, type?: string, ctor?: Function): void;
|
|
10
10
|
(warning: string | Error, type?: string, code?: string, ctor?: Function): void;
|
|
11
11
|
(warning: string | Error, options?: NodeJS.EmitWarningOptions): void;
|
|
12
|
-
}, env: NodeJS.ProcessEnv, execArgv: string[], execPath: string, exit: (code?: number | string | null) => never, exitCode: string | number | null | undefined, getegid: (() => number) | undefined, geteuid: (() => number) | undefined, getgid: (() => number) | undefined, getgroups: (() => number[]) | undefined, getuid: (() => number) | undefined, hasUncaughtExceptionCaptureCallback: () => boolean, hrtime: NodeJS.HRTime, kill: (pid: number, signal?: string | number) => true, memoryUsage: NodeJS.MemoryUsageFn, nextTick: (callback: Function, ...args: any[]) => void, pid: number, platform: NodeJS.Platform, ppid: number, release: NodeJS.ProcessRelease, report: NodeJS.ProcessReport, resourceUsage: () => NodeJS.ResourceUsage, setegid: ((id: number | string) => void) | undefined, seteuid: ((id: number | string) => void) | undefined, setgid: ((id: number | string) => void) | undefined, setgroups: ((groups: ReadonlyArray<string | number>) => void) | undefined, setuid: ((id: number | string) => void) | undefined, setUncaughtExceptionCaptureCallback: (cb: ((err:
|
|
12
|
+
}, env: NodeJS.ProcessEnv, execArgv: string[], execPath: string, exit: (code?: number | string | null) => never, exitCode: string | number | null | undefined, getegid: (() => number) | undefined, geteuid: (() => number) | undefined, getgid: (() => number) | undefined, getgroups: (() => number[]) | undefined, getuid: (() => number) | undefined, hasUncaughtExceptionCaptureCallback: () => boolean, hrtime: NodeJS.HRTime, kill: (pid: number, signal?: string | number) => true, memoryUsage: NodeJS.MemoryUsageFn, nextTick: (callback: Function, ...args: any[]) => void, pid: number, platform: NodeJS.Platform, ppid: number, release: NodeJS.ProcessRelease, report: NodeJS.ProcessReport, resourceUsage: () => NodeJS.ResourceUsage, setegid: ((id: number | string) => void) | undefined, seteuid: ((id: number | string) => void) | undefined, setgid: ((id: number | string) => void) | undefined, setgroups: ((groups: ReadonlyArray<string | number>) => void) | undefined, setuid: ((id: number | string) => void) | undefined, setUncaughtExceptionCaptureCallback: (cb: ((err: unknown) => void) | null) => void, stderr: NodeJS.WriteStream & {
|
|
13
13
|
fd: 2;
|
|
14
14
|
}, stdin: NodeJS.ReadStream & {
|
|
15
15
|
fd: 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../../src/node-singletons/process.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,aAAa,MAAM,cAAc,CAAC;AAE9C,eAAO,MACL,IAAI,uBACJ,IAAI,YACJ,KAAK,UACL,KAAK,+BACL,MAAM,wBACN,SAAS,WACT,QAAQ,wDACR,GAAG,gBACH,SAAS,UACT,UAAU,4BACV,WAAW;;;;;GACX,GAAG,qBACH,QAAQ,YACR,QAAQ,UACR,IAAI,4CACJ,QAAQ,sCACR,OAAO,8BACP,OAAO,8BACP,MAAM,8BACN,SAAS,gCACT,MAAM,8BACN,mCAAmC,iBACnC,MAAM,iBACN,IAAI,mDACJ,WAAW,wBACX,QAAQ,gDACR,GAAG,UACH,QAAQ,mBACR,IAAI,UACJ,OAAO,yBACP,MAAM,wBACN,aAAa,8BACb,OAAO,+CACP,OAAO,+CACP,MAAM,+CACN,SAAS,kEACT,MAAM,+CACN,mCAAmC
|
|
1
|
+
{"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../../src/node-singletons/process.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,aAAa,MAAM,cAAc,CAAC;AAE9C,eAAO,MACL,IAAI,uBACJ,IAAI,YACJ,KAAK,UACL,KAAK,+BACL,MAAM,wBACN,SAAS,WACT,QAAQ,wDACR,GAAG,gBACH,SAAS,UACT,UAAU,4BACV,WAAW;;;;;GACX,GAAG,qBACH,QAAQ,YACR,QAAQ,UACR,IAAI,4CACJ,QAAQ,sCACR,OAAO,8BACP,OAAO,8BACP,MAAM,8BACN,SAAS,gCACT,MAAM,8BACN,mCAAmC,iBACnC,MAAM,iBACN,IAAI,mDACJ,WAAW,wBACX,QAAQ,gDACR,GAAG,UACH,QAAQ,mBACR,IAAI,UACJ,OAAO,yBACP,MAAM,wBACN,aAAa,8BACb,OAAO,+CACP,OAAO,+CACP,MAAM,+CACN,SAAS,kEACT,MAAM,+CACN,mCAAmC,iDACnC,MAAM;;GACN,KAAK;;GACL,MAAM;;GACN,KAAK,UACL,KAAK;;;GACL,MAAM,gBACN,OAAO,UACP,QAAQ,wBACO,CAAC;AAElB,eAAe,aAAa,CAAC"}
|
package/src/redis-index.d.ts
CHANGED
|
@@ -6,4 +6,5 @@ export { RedisKeys, createRedisKey, extractOriginalKey, getBullMQSafeQueueName,
|
|
|
6
6
|
export type { RedisConfig } from './config/type';
|
|
7
7
|
export { createRedisConnection } from './config/workers';
|
|
8
8
|
export type { RedisTransportOptions } from './tools/redis/RedisTransport';
|
|
9
|
+
export { isZedgiRedisExecutorRegistered, registerZedgiRedisExecutor, resolveRedisTransportMode, type RedisTransportMode, } from './tools/redis/RedisTransport';
|
|
9
10
|
//# sourceMappingURL=redis-index.d.ts.map
|
package/src/redis-index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis-index.d.ts","sourceRoot":"","sources":["../../src/redis-index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,SAAS,EACT,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,SAAS,EACT,QAAQ,EACR,KAAK,YAAY,GAClB,MAAM,8BAA8B,CAAC;AAGtC,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,YAAY,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC"}
|
|
1
|
+
{"version":3,"file":"redis-index.d.ts","sourceRoot":"","sources":["../../src/redis-index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,SAAS,EACT,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,SAAS,EACT,QAAQ,EACR,KAAK,YAAY,GAClB,MAAM,8BAA8B,CAAC;AAGtC,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,YAAY,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAGzE,OAAO,EACL,8BAA8B,EAC9B,0BAA0B,EAC1B,yBAAyB,EACzB,KAAK,kBAAkB,GACxB,MAAM,6BAA6B,CAAC"}
|
package/src/redis-index.js
CHANGED
|
@@ -5,3 +5,5 @@
|
|
|
5
5
|
// Redis key manager
|
|
6
6
|
export { RedisKeys, createRedisKey, extractOriginalKey, getBullMQSafeQueueName, getPrefix, isAppKey, } from './tools/redis/RedisKeyManager.js';
|
|
7
7
|
export { createRedisConnection } from './config/workers.js';
|
|
8
|
+
// Redis transport and Zedgi integration
|
|
9
|
+
export { isZedgiRedisExecutorRegistered, registerZedgiRedisExecutor, resolveRedisTransportMode, } from './tools/redis/RedisTransport.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueueRuntimeRegistration.d.ts","sourceRoot":"","sources":["../../../../src/tools/queue/QueueRuntimeRegistration.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"QueueRuntimeRegistration.d.ts","sourceRoot":"","sources":["../../../../src/tools/queue/QueueRuntimeRegistration.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAuJjD,wBAAsB,+BAA+B,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAkDxF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Logger } from '../../config/logger.js';
|
|
2
1
|
import { Env } from '../../config/env.js';
|
|
2
|
+
import { Logger } from '../../config/logger.js';
|
|
3
3
|
import { ErrorFactory } from '../../exceptions/ZintrustError.js';
|
|
4
4
|
import { ZintrustLang } from '../../lang/lang.js';
|
|
5
5
|
import { existsSync } from '../../node-singletons/fs.js';
|
|
@@ -7,10 +7,10 @@ import * as path from '../../node-singletons/path.js';
|
|
|
7
7
|
import { pathToFileURL } from '../../node-singletons/url.js';
|
|
8
8
|
import { detectRuntime } from '../../runtime/detectRuntime.js';
|
|
9
9
|
import { DatabaseQueue } from '../queue/drivers/Database.js';
|
|
10
|
-
import { autoRegisterJobStateTrackerPersistenceFromEnv } from '../queue/JobStateTrackerDbPersistence.js';
|
|
11
|
-
import { QueueReliabilityOrchestrator } from '../queue/QueueReliabilityOrchestrator.js';
|
|
12
10
|
import { InMemoryQueue } from '../queue/drivers/InMemory.js';
|
|
11
|
+
import { autoRegisterJobStateTrackerPersistenceFromEnv } from '../queue/JobStateTrackerDbPersistence.js';
|
|
13
12
|
import { Queue } from '../queue/Queue.js';
|
|
13
|
+
import { QueueReliabilityOrchestrator } from '../queue/QueueReliabilityOrchestrator.js';
|
|
14
14
|
const QUEUE_REDIS_PACKAGE = '@zintrust/queue-redis';
|
|
15
15
|
const ZEDGI_PACKAGE = '@zintrust/zedgi';
|
|
16
16
|
/**
|
|
@@ -21,7 +21,20 @@ const ZEDGI_PACKAGE = '@zintrust/zedgi';
|
|
|
21
21
|
* - If the configured default is registered, it is ALSO registered as 'default'.
|
|
22
22
|
* - Unknown/unregistered driver names still throw when selected.
|
|
23
23
|
*/
|
|
24
|
+
const isDriverRegistered = (name) => {
|
|
25
|
+
try {
|
|
26
|
+
Queue.get(name);
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
};
|
|
24
33
|
const registerRedisDriverIfAvailable = async () => {
|
|
34
|
+
if (isDriverRegistered('redis')) {
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
// Fall back to dynamic import only if not already registered
|
|
25
38
|
try {
|
|
26
39
|
const mod = (await import(/* @vite-ignore */ QUEUE_REDIS_PACKAGE));
|
|
27
40
|
if (mod.RedisQueue !== undefined) {
|
|
@@ -63,6 +76,10 @@ const registerRedisDriverIfAvailable = async () => {
|
|
|
63
76
|
return false;
|
|
64
77
|
};
|
|
65
78
|
const registerZedgiQueueDriverIfAvailable = async (config) => {
|
|
79
|
+
if (isDriverRegistered('queue-zedgi')) {
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
// Fall back to dynamic import only if not already registered
|
|
66
83
|
try {
|
|
67
84
|
const mod = (await import(/* @vite-ignore */ ZEDGI_PACKAGE));
|
|
68
85
|
if (mod.ZedgiQueueDriver !== undefined) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { RedisConfig } from '../../config/type';
|
|
2
|
-
export type RedisTransportMode = 'direct' | 'proxy' | 'rpc';
|
|
2
|
+
export type RedisTransportMode = 'direct' | 'proxy' | 'rpc' | 'zedgi';
|
|
3
3
|
export type RedisTransportOptions = Readonly<{
|
|
4
4
|
subsystem?: string;
|
|
5
5
|
requireDirect?: boolean;
|
|
@@ -32,6 +32,9 @@ type RedisProxyConnection = {
|
|
|
32
32
|
off: (event: string, handler: (...args: unknown[]) => void) => unknown;
|
|
33
33
|
};
|
|
34
34
|
};
|
|
35
|
+
declare let zedgiRedisExecutor: ((config: Record<string, unknown>, command: string, args: unknown[]) => Promise<unknown>) | undefined;
|
|
36
|
+
export declare const registerZedgiRedisExecutor: (executor: typeof zedgiRedisExecutor) => void;
|
|
37
|
+
export declare const isZedgiRedisExecutorRegistered: () => boolean;
|
|
35
38
|
export declare const resolveRedisTransportMode: () => RedisTransportMode;
|
|
36
39
|
export declare const createRedisProxyConnection: (config: RedisConfig, options?: RedisTransportOptions) => RedisProxyConnection;
|
|
37
40
|
export declare const ensureRedisTransportMode: (config: RedisConfig, options?: RedisTransportOptions) => RedisTransportMode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RedisTransport.d.ts","sourceRoot":"","sources":["../../../../src/tools/redis/RedisTransport.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAKhD,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"RedisTransport.d.ts","sourceRoot":"","sources":["../../../../src/tools/redis/RedisTransport.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,19 @@ import { Logger } from '../../config/logger.js';
|
|
|
3
3
|
import { ErrorFactory } from '../../exceptions/ZintrustError.js';
|
|
4
4
|
import { parseCustomHeadersFromEnv } from '../../orm/adapters/SqlProxyAdapterUtils.js';
|
|
5
5
|
import { SignedRequest } from '../../security/SignedRequest.js';
|
|
6
|
+
// Zedgi executor registry for static provider registration
|
|
7
|
+
let zedgiRedisExecutor;
|
|
8
|
+
export const registerZedgiRedisExecutor = (executor) => {
|
|
9
|
+
zedgiRedisExecutor = typeof executor === 'function' ? executor : undefined;
|
|
10
|
+
};
|
|
11
|
+
export const isZedgiRedisExecutorRegistered = () => zedgiRedisExecutor !== undefined;
|
|
12
|
+
const isZedgiRedisEnabled = () => zedgiRedisExecutor !== undefined && readEnvBool('USE_ZEDGI', false);
|
|
13
|
+
const requestZedgiCommand = async (settings, command, args) => {
|
|
14
|
+
if (zedgiRedisExecutor === undefined) {
|
|
15
|
+
throw ErrorFactory.createConfigError('Zedgi Redis executor is not registered');
|
|
16
|
+
}
|
|
17
|
+
return zedgiRedisExecutor(settings.config ?? {}, command, args);
|
|
18
|
+
};
|
|
6
19
|
const loggedSelections = new Set();
|
|
7
20
|
const readEnvString = (key, fallback = '') => {
|
|
8
21
|
if (typeof Env.get === 'function') {
|
|
@@ -167,6 +180,9 @@ const requestRpcPipeline = async (settings, commands, transaction) => {
|
|
|
167
180
|
]);
|
|
168
181
|
};
|
|
169
182
|
const requestRedisCommand = async (mode, settings, command, args) => {
|
|
183
|
+
if (mode === 'zedgi') {
|
|
184
|
+
return requestZedgiCommand(settings, command, args);
|
|
185
|
+
}
|
|
170
186
|
return mode === 'rpc'
|
|
171
187
|
? requestRpcCommand(settings, command, args)
|
|
172
188
|
: requestProxyCommand(settings, command, args);
|
|
@@ -187,6 +203,7 @@ const logTransportSelection = (mode, config, options) => {
|
|
|
187
203
|
port: mode === 'direct' ? config.port : undefined,
|
|
188
204
|
proxyUrl: mode === 'proxy' ? resolveProxyBaseUrl() : undefined,
|
|
189
205
|
rpcUrl: mode === 'rpc' ? readEnvString('REDIS_RPC_URL', '') : undefined,
|
|
206
|
+
zedgiUrl: mode === 'zedgi' ? readEnvString('ZEDGI_URL', '') : undefined,
|
|
190
207
|
});
|
|
191
208
|
};
|
|
192
209
|
const normalizeScanResponse = (value) => {
|
|
@@ -294,13 +311,24 @@ const createPipeline = (settings, mode, transaction = false) => {
|
|
|
294
311
|
return pipeline;
|
|
295
312
|
};
|
|
296
313
|
export const resolveRedisTransportMode = () => {
|
|
314
|
+
if (isZedgiRedisEnabled())
|
|
315
|
+
return 'zedgi';
|
|
297
316
|
if (isRedisRpcEnabled())
|
|
298
317
|
return 'rpc';
|
|
299
318
|
return readEnvBool('USE_REDIS_PROXY', false) ? 'proxy' : 'direct';
|
|
300
319
|
};
|
|
301
320
|
export const createRedisProxyConnection = (config, options) => {
|
|
302
321
|
const mode = resolveRedisTransportMode();
|
|
303
|
-
|
|
322
|
+
let settings;
|
|
323
|
+
if (mode === 'zedgi') {
|
|
324
|
+
settings = { config };
|
|
325
|
+
}
|
|
326
|
+
else if (mode === 'rpc') {
|
|
327
|
+
settings = resolveRpcSettings();
|
|
328
|
+
}
|
|
329
|
+
else {
|
|
330
|
+
settings = resolveProxySettings();
|
|
331
|
+
}
|
|
304
332
|
if (mode === 'direct') {
|
|
305
333
|
throw ErrorFactory.createConfigError('Redis proxy connection requested while direct mode is active.');
|
|
306
334
|
}
|
|
@@ -349,8 +377,8 @@ export const createRedisProxyConnection = (config, options) => {
|
|
|
349
377
|
};
|
|
350
378
|
export const ensureRedisTransportMode = (config, options) => {
|
|
351
379
|
const mode = resolveRedisTransportMode();
|
|
352
|
-
if (mode === 'proxy' && options?.requireDirect === true) {
|
|
353
|
-
throw ErrorFactory.createConfigError(`Redis subsystem '${options.subsystem ?? 'redis'}' requires a direct Redis connection, but
|
|
380
|
+
if ((mode === 'proxy' || mode === 'zedgi') && options?.requireDirect === true) {
|
|
381
|
+
throw ErrorFactory.createConfigError(`Redis subsystem '${options.subsystem ?? 'redis'}' requires a direct Redis connection, but ${mode} mode is enabled.`);
|
|
354
382
|
}
|
|
355
383
|
if (mode === 'direct') {
|
|
356
384
|
logTransportSelection(mode, config, options);
|