@zintrust/core 2.2.2 → 2.2.4
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 +2 -2
- package/src/config/env.d.ts +1 -0
- package/src/config/env.d.ts.map +1 -1
- package/src/config/env.js +1 -0
- package/src/index.d.ts +12 -11
- package/src/index.d.ts.map +1 -1
- package/src/index.js +13 -13
- package/src/proxy/CloudflareProxyShared.d.ts +8 -0
- package/src/proxy/CloudflareProxyShared.d.ts.map +1 -1
- package/src/proxy/CloudflareProxyShared.js +8 -0
- package/src/proxy/redis/RedisProxyActions.d.ts +15 -0
- package/src/proxy/redis/RedisProxyActions.d.ts.map +1 -0
- package/src/proxy/redis/RedisProxyActions.js +100 -0
- package/src/proxy/redis/RedisProxyServer.d.ts.map +1 -1
- package/src/proxy/redis/RedisProxyServer.js +219 -76
- package/src/redis-index.d.ts +1 -0
- package/src/redis-index.d.ts.map +1 -1
- package/src/tools/redis/RedisTransport.d.ts +4 -0
- package/src/tools/redis/RedisTransport.d.ts.map +1 -1
- package/src/tools/redis/RedisTransport.js +48 -114
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zintrust/core",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.4",
|
|
4
4
|
"description": "Production-grade TypeScript backend framework for JavaScript",
|
|
5
5
|
"homepage": "https://zintrust.com",
|
|
6
6
|
"repository": {
|
|
@@ -215,7 +215,7 @@
|
|
|
215
215
|
"jsonwebtoken": "^9.0.3",
|
|
216
216
|
"mysql2": "^3.22.4",
|
|
217
217
|
"pg": "^8.21.0",
|
|
218
|
-
"redis": "^
|
|
218
|
+
"redis": "^6.0.0",
|
|
219
219
|
"tsx": "^4.22.3"
|
|
220
220
|
},
|
|
221
221
|
"overrides": {
|
package/src/config/env.d.ts
CHANGED
|
@@ -105,6 +105,7 @@ export declare const Env: Readonly<{
|
|
|
105
105
|
REDIS_PROXY_TIMEOUT_MS: number;
|
|
106
106
|
REDIS_PROXY_REQUIRE_SIGNING: boolean;
|
|
107
107
|
REDIS_PROXY_SIGNING_WINDOW_MS: number;
|
|
108
|
+
REDIS_REQUIRE_DIRECT_FOR_SCRIPTS: boolean;
|
|
108
109
|
USE_REDIS_PROXY: boolean;
|
|
109
110
|
SMTP_PROXY_URL: string;
|
|
110
111
|
SMTP_PROXY_HOST: string;
|
package/src/config/env.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../src/config/env.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAClF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAqNF,eAAO,MAAM,cAAc,QAAO,WAAW,GAAG,SAAwB,CAAC;AAEzE,eAAO,MAAM,mBAAmB,GAAI,UAAU,MAAM,EAAE,WAAW,MAAM,KAAG,MAKzE,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,KAAK,MAAM,KAAG,MAAM,GAAG,SAKlD,CAAC;AAEF,eAAO,MAAM,GAAG,GAAI,KAAK,MAAM,KAAG,OAGjC,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,KAAK,MAAM,KAAG,MAAM,GAAG,SAKlD,CAAC;AAEF,eAAO,MAAM,eAAe,QAAO,MAAM,CAAC,MAAM,EAAE,MAAM,CAEvD,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAO,gBAAyC,CAAC;AAG9E,eAAO,MAAM,GAAG,GAAI,KAAK,MAAM,EAAE,eAAe,MAAM,KAAG,MAIxD,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAO,MAMrC,CAAC;AAEF,eAAO,MAAM,MAAM,GAAI,KAAK,MAAM,EAAE,cAAc,MAAM,KAAG,MAI1D,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,KAAK,MAAM,EAAE,eAAe,MAAM,KAAG,MAI7D,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,KAAK,MAAM,EAAE,eAAe,OAAO,KAAG,OAI7D,CAAC;AAEF,eAAO,MAAM,GAAG,GAAI,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,IAGhD,CAAC;AAEF,eAAO,MAAM,KAAK,GAAI,KAAK,MAAM,KAAG,IAInC,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,QAAQ,SAAS,GAAG,IAAI,KAAG,IAEpD,CAAC;AAEF,eAAO,MAAM,QAAQ,QAAO,MAAM,CAAC,MAAM,EAAE,MAAM,CAOhD,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAO,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAKjE,CAAC;AACF,eAAO,MAAM,mBAAmB,QAAuC,CAAC;AAKxE,eAAO,MAAM,GAAG;eAnES,MAAM,iBAAiB,MAAM,KAAG,MAAM;uBA1B9B,MAAM,KAAG,MAAM,GAAG,SAAS;kBAwChC,MAAM,gBAAgB,MAAM,KAAG,MAAM;mBAYpC,MAAM,iBAAiB,OAAO,KAAG,OAAO;oBANvC,MAAM,iBAAiB,MAAM,KAAG,MAAM;eAvC3C,MAAM,KAAG,OAAO;eAmDhB,MAAM,SAAS,MAAM,KAAG,IAAI;iBAK1B,MAAM,KAAG,IAAI;wBAMN,SAAS,GAAG,IAAI,KAAG,IAAI;oBAI7B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;uBA7DjB,MAAM,KAAG,MAAM,GAAG,SAAS;2BAOzB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;4BAIrB,gBAAgB;cAuFN,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../src/config/env.ts"],"names":[],"mappings":"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"}
|
package/src/config/env.js
CHANGED
|
@@ -345,6 +345,7 @@ export const Env = Object.freeze({
|
|
|
345
345
|
REDIS_PROXY_TIMEOUT_MS: getInt('REDIS_PROXY_TIMEOUT_MS', ZT_PROXY_TIMEOUT_MS),
|
|
346
346
|
REDIS_PROXY_REQUIRE_SIGNING: getBool('REDIS_PROXY_REQUIRE_SIGNING', true),
|
|
347
347
|
REDIS_PROXY_SIGNING_WINDOW_MS: getInt('REDIS_PROXY_SIGNING_WINDOW_MS', getInt('ZT_PROXY_SIGNING_WINDOW_MS', 60000)),
|
|
348
|
+
REDIS_REQUIRE_DIRECT_FOR_SCRIPTS: getBool('REDIS_REQUIRE_DIRECT_FOR_SCRIPTS', true),
|
|
348
349
|
USE_REDIS_PROXY: getBool('USE_REDIS_PROXY', false),
|
|
349
350
|
SMTP_PROXY_URL: get('SMTP_PROXY_URL', ''),
|
|
350
351
|
SMTP_PROXY_HOST: get('SMTP_PROXY_HOST', '127.0.0.1'),
|
package/src/index.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ export { AwsSigV4 } from './common/index';
|
|
|
13
13
|
export { SignedRequest } from './security/SignedRequest';
|
|
14
14
|
export { Server } from './boot/Server';
|
|
15
15
|
export { ServiceContainer } from './container/ServiceContainer';
|
|
16
|
-
export { createPaginator, getNextPageUrl, getPrevPageUrl
|
|
16
|
+
export { Paginator, createPaginator, getNextPageUrl, getPrevPageUrl } from './database/Paginator';
|
|
17
17
|
export type { CreatePaginatorInput, PaginationLinks, PaginationQuery, Paginator as PaginatorType, } from './database/Paginator';
|
|
18
18
|
export { MySQLAdapter } from './orm/adapters/MySQLAdapter';
|
|
19
19
|
export { PostgreSQLAdapter } from './orm/adapters/PostgreSQLAdapter';
|
|
@@ -25,9 +25,9 @@ export { DatabaseConnectionRegistry } from './orm/DatabaseConnectionRegistry';
|
|
|
25
25
|
export { Model } from './orm/Model';
|
|
26
26
|
export type { IModel, ModelConfig, ModelStatic } from './orm/Model';
|
|
27
27
|
export { QueryBuilder } from './orm/QueryBuilder';
|
|
28
|
-
export type {
|
|
28
|
+
export type { IQueryBuilder, InsertResult, PaginationOptions } from './orm/QueryBuilder';
|
|
29
29
|
export type { IRelationship } from './orm/Relationships';
|
|
30
|
-
export { BodyParsers,
|
|
30
|
+
export { BodyParsers, BulletproofAuthMiddleware, Controller, CsrfMiddleware, ErrorHandlerMiddleware, FileUpload, Kernel, LoggingMiddleware, MiddlewareStack, MultipartParser, RateLimiter, Request, RequestContext, Response, SecurityMiddleware, SessionMiddleware, ValidationHelper, ValidationMiddleware, bodyParsingMiddleware, fileUploadMiddleware, getValidatedBody, getValidatedHeaders, getValidatedParams, getValidatedQuery, hasValidatedBody, requireValidatedBody, } from './runtime-index.js';
|
|
31
31
|
export type { FileUploadOptions, IFileUploadHandler, IRequest, IResponse, Middleware, MultipartFieldValue, MultipartParseInput, MultipartParserProvider, ParsedMultipartData, UploadedFile, ValidatedRequest, } from './runtime-index.js';
|
|
32
32
|
export { DateTime } from './time/DateTime';
|
|
33
33
|
export type { IDateTime } from './time/DateTime';
|
|
@@ -36,12 +36,12 @@ export { OpenApiGenerator } from './openapi/OpenApiGenerator';
|
|
|
36
36
|
export type { OpenApiGeneratorOptions } from './openapi/OpenApiGenerator';
|
|
37
37
|
export { Router } from './routes/Router';
|
|
38
38
|
export type { IRouter } from './routes/Router';
|
|
39
|
-
export {
|
|
39
|
+
export { RouteRegistry, normalizeRouteMeta } from './routes/RouteRegistry';
|
|
40
40
|
export type { RouteMeta, RouteMetaInput, RouteRegistration } from './routes/RouteRegistry';
|
|
41
41
|
export { DatabaseAdapterRegistry } from './orm/DatabaseAdapterRegistry';
|
|
42
|
-
export { ContextLoader, delay, ensureDirSafe, generateSecureJobId, generateUuid, getString,
|
|
42
|
+
export { ContextLoader, RemoteSignedJson, Utilities, delay, ensureDirSafe, generateSecureJobId, generateUuid, getString, } from './runtime-index.js';
|
|
43
43
|
export type { ContextLoaderBatchHandler, ContextLoaderBatchKey, ContextLoaderBatchResult, ContextLoaderContext, ContextLoaderInstance, ContextLoaderMode, ContextLoaderPlan, ContextLoaderResolver, RemoteSignedJsonSettings, UtilitiesType, } from './runtime-index.js';
|
|
44
|
-
export {
|
|
44
|
+
export { Collection, collect } from './collections/index';
|
|
45
45
|
export type { ICollection, PrimitiveKey } from './collections/index';
|
|
46
46
|
export { HttpClient } from './tools/http/Http';
|
|
47
47
|
export type { IHttpRequest, IHttpResponse } from './tools/http/Http';
|
|
@@ -75,12 +75,12 @@ export { JwtVerifier } from './security/JwtVerifier';
|
|
|
75
75
|
export type { JwtVerifierAlgorithm, JwtVerifierFailure, JwtVerifierFailureReason, JwtVerifierJwk, JwtVerifierJwksDocument, JwtVerifierResult, JwtVerifierSuccess, JwtVerifierWithJwkInput, JwtVerifierWithJwksInput, } from './security/JwtVerifier';
|
|
76
76
|
export { PasswordResetTokenBroker } from './security/PasswordResetTokenBroker';
|
|
77
77
|
export type { IPasswordResetTokenBroker, IPasswordResetTokenStore, PasswordResetTokenBrokerOptions, PasswordResetTokenBrokerType, PasswordResetTokenRecord, } from './security/PasswordResetTokenBroker';
|
|
78
|
-
export {
|
|
78
|
+
export { Sanitizer, createSanitizer, type SanitizerType } from './security/Sanitizer';
|
|
79
79
|
export { TokenRevocation } from './security/TokenRevocation';
|
|
80
80
|
export { Xss } from './security/Xss';
|
|
81
81
|
export { XssProtection } from './security/XssProtection';
|
|
82
82
|
export { ErrorFactory } from './exceptions/ZintrustError';
|
|
83
|
-
export {
|
|
83
|
+
export { RUNTIME_PLATFORM, RuntimeServices, detectCloudflareWorkers, detectRuntimePlatform, type RuntimeCrypto, type RuntimeEnvReader, type RuntimeFs, type RuntimePlatform, type RuntimeServices as RuntimeServicesType, type RuntimeTimers, } from './runtime/RuntimeServices';
|
|
84
84
|
export { StartupConfigFile, StartupConfigFileRegistry } from './runtime/StartupConfigFileRegistry';
|
|
85
85
|
export { SystemTraceBridge } from './trace/SystemTraceBridge';
|
|
86
86
|
export { EventDispatcher } from './events/EventDispatcher';
|
|
@@ -118,7 +118,7 @@ export { HealthCheckHandler, ServiceHealthMonitor } from './microservices/Servic
|
|
|
118
118
|
export type { AggregatedHealthStatus, HealthCheckResult, IServiceHealthMonitor, } from './microservices/ServiceHealthMonitor';
|
|
119
119
|
export { getServiceId, isCanonicalServiceId, normalizeServiceManifest, } from './microservices/ServiceManifest';
|
|
120
120
|
export type { ProjectRuntimeModule, ServiceManifestEntry } from './microservices/ServiceManifest';
|
|
121
|
-
export { clearMiddlewareConfigCache, middlewareConfig
|
|
121
|
+
export { MiddlewareKeys, clearMiddlewareConfigCache, middlewareConfig } from './config/middleware';
|
|
122
122
|
export type { MiddlewareKey } from './config/middleware';
|
|
123
123
|
export type { MiddlewareConfigType } from './config/type';
|
|
124
124
|
export { createBaseDrivers, queueConfig } from './config/queue';
|
|
@@ -137,7 +137,7 @@ export type { StartupConfig } from './config/startup';
|
|
|
137
137
|
export { Constants, DEFAULTS, ENV_KEYS, HTTP_HEADERS, MIME_TYPES } from './config/constants';
|
|
138
138
|
export { FeatureFlags } from './config/features';
|
|
139
139
|
export { Cloudflare } from './config/cloudflare';
|
|
140
|
-
export {
|
|
140
|
+
export { SECRETS, SecretsManager, getDatabaseCredentials, getJwtSecrets, } from './config/SecretsManager';
|
|
141
141
|
export type { DatabaseCredentials, JwtSecrets } from './config/SecretsManager';
|
|
142
142
|
export type { MailDriverConfig, MailDriverName, WorkersEnv } from './config/type';
|
|
143
143
|
export { StartupConfigValidator } from './config/StartupConfigValidator';
|
|
@@ -219,8 +219,9 @@ export type * from './config/type';
|
|
|
219
219
|
export * from './helper/index';
|
|
220
220
|
export { ZintrustLang } from './lang/lang';
|
|
221
221
|
export { createRedisConnection, workersConfig } from './config/workers';
|
|
222
|
+
export type { RedisTransportOptions } from './tools/redis/RedisTransport';
|
|
222
223
|
export type { RouteOptions } from './routes/Router';
|
|
223
|
-
export { createRedisKey, extractOriginalKey, getBullMQSafeQueueName, getPrefix, isAppKey,
|
|
224
|
+
export { RedisKeys, createRedisKey, extractOriginalKey, getBullMQSafeQueueName, getPrefix, isAppKey, type RedisKeyType, } from './tools/redis/RedisKeyManager';
|
|
224
225
|
export { CloudflareSocket } from './sockets/CloudflareSocket';
|
|
225
226
|
export { SocketFeature } from './sockets/SocketRuntime';
|
|
226
227
|
export type { SocketAuthorizationContext, SocketAuthorizationDecision, SocketAuthorizer, SocketAuthorizerHandler, SocketFeatureSettings, SocketNodeUpgradeInput, SocketPublishContext, SocketPublishDecision, SocketPublishPolicy, SocketPublishPolicyHandler, SocketRouteRegistrar, SocketRuntime, SocketRuntimeDiagnostics, SocketTransportMode, SocketWorkerContext, } from './sockets/SocketRuntime';
|
package/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/src/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @zintrust/core v2.2.
|
|
2
|
+
* @zintrust/core v2.2.4
|
|
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-05-
|
|
8
|
+
* Built: 2026-05-28T17:28:12.580Z
|
|
9
9
|
* Node: >=20.0.0
|
|
10
10
|
* License: MIT
|
|
11
11
|
*
|
|
@@ -21,13 +21,13 @@
|
|
|
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-05-
|
|
24
|
+
export const ZINTRUST_BUILD_DATE = '2026-05-28T17:28:12.543Z'; // 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';
|
|
28
28
|
export { Server } from './boot/Server.js';
|
|
29
29
|
export { ServiceContainer } from './container/ServiceContainer.js';
|
|
30
|
-
export { createPaginator, getNextPageUrl, getPrevPageUrl
|
|
30
|
+
export { Paginator, createPaginator, getNextPageUrl, getPrevPageUrl } from './database/Paginator.js';
|
|
31
31
|
// HTTP primitives - re-exported from runtime
|
|
32
32
|
export { MySQLAdapter } from './orm/adapters/MySQLAdapter.js';
|
|
33
33
|
export { PostgreSQLAdapter } from './orm/adapters/PostgreSQLAdapter.js';
|
|
@@ -37,7 +37,7 @@ export { Database, resetDatabase, useDatabase, useEnsureDbConnected } from './or
|
|
|
37
37
|
export { DatabaseConnectionRegistry } from './orm/DatabaseConnectionRegistry.js';
|
|
38
38
|
export { Model } from './orm/Model.js';
|
|
39
39
|
export { QueryBuilder } from './orm/QueryBuilder.js';
|
|
40
|
-
export { BodyParsers,
|
|
40
|
+
export { BodyParsers, BulletproofAuthMiddleware, Controller, CsrfMiddleware, ErrorHandlerMiddleware, FileUpload, Kernel, LoggingMiddleware, MiddlewareStack, MultipartParser, RateLimiter, Request, RequestContext, Response, SecurityMiddleware, SessionMiddleware, ValidationHelper, ValidationMiddleware, bodyParsingMiddleware, fileUploadMiddleware, getValidatedBody, getValidatedHeaders, getValidatedParams, getValidatedQuery, hasValidatedBody, requireValidatedBody, } from './runtime-index.js';
|
|
41
41
|
// Time Utilities
|
|
42
42
|
export { DateTime } from './time/DateTime.js';
|
|
43
43
|
// Migrations
|
|
@@ -47,12 +47,12 @@ export { Schema as MigrationSchema } from './migrations/schema/index.js';
|
|
|
47
47
|
// Adapter registry (for external adapter packages)
|
|
48
48
|
export { OpenApiGenerator } from './openapi/OpenApiGenerator.js';
|
|
49
49
|
export { Router } from './routes/Router.js';
|
|
50
|
-
export {
|
|
50
|
+
export { RouteRegistry, normalizeRouteMeta } from './routes/RouteRegistry.js';
|
|
51
51
|
export { DatabaseAdapterRegistry } from './orm/DatabaseAdapterRegistry.js';
|
|
52
52
|
// Common - re-exported from runtime
|
|
53
|
-
export { ContextLoader, delay, ensureDirSafe, generateSecureJobId, generateUuid, getString,
|
|
53
|
+
export { ContextLoader, RemoteSignedJson, Utilities, delay, ensureDirSafe, generateSecureJobId, generateUuid, getString, } from './runtime-index.js';
|
|
54
54
|
// Collections
|
|
55
|
-
export {
|
|
55
|
+
export { Collection, collect } from './collections/index.js';
|
|
56
56
|
// HTTP Client
|
|
57
57
|
export { HttpClient } from './tools/http/Http.js';
|
|
58
58
|
// Database adapter types
|
|
@@ -82,14 +82,14 @@ export { JwtManager } from './security/JwtManager.js';
|
|
|
82
82
|
export { JwtSessions } from './security/JwtSessions.js';
|
|
83
83
|
export { JwtVerifier } from './security/JwtVerifier.js';
|
|
84
84
|
export { PasswordResetTokenBroker } from './security/PasswordResetTokenBroker.js';
|
|
85
|
-
export {
|
|
85
|
+
export { Sanitizer, createSanitizer } from './security/Sanitizer.js';
|
|
86
86
|
export { TokenRevocation } from './security/TokenRevocation.js';
|
|
87
87
|
export { Xss } from './security/Xss.js';
|
|
88
88
|
export { XssProtection } from './security/XssProtection.js';
|
|
89
89
|
// Exceptions
|
|
90
90
|
export { ErrorFactory } from './exceptions/ZintrustError.js';
|
|
91
91
|
// Runtime services
|
|
92
|
-
export {
|
|
92
|
+
export { RUNTIME_PLATFORM, RuntimeServices, detectCloudflareWorkers, detectRuntimePlatform, } from './runtime/RuntimeServices.js';
|
|
93
93
|
export { StartupConfigFile, StartupConfigFileRegistry } from './runtime/StartupConfigFileRegistry.js';
|
|
94
94
|
// Events
|
|
95
95
|
export { SystemTraceBridge } from './trace/SystemTraceBridge.js';
|
|
@@ -122,7 +122,7 @@ export { RequestTracingMiddleware } from './microservices/RequestTracingMiddlewa
|
|
|
122
122
|
export { ServiceAuthMiddleware } from './microservices/ServiceAuthMiddleware.js';
|
|
123
123
|
export { HealthCheckHandler, ServiceHealthMonitor } from './microservices/ServiceHealthMonitor.js';
|
|
124
124
|
export { getServiceId, isCanonicalServiceId, normalizeServiceManifest, } from './microservices/ServiceManifest.js';
|
|
125
|
-
export { clearMiddlewareConfigCache, middlewareConfig
|
|
125
|
+
export { MiddlewareKeys, clearMiddlewareConfigCache, middlewareConfig } from './config/middleware.js';
|
|
126
126
|
export { createBaseDrivers, queueConfig } from './config/queue.js';
|
|
127
127
|
export { default as broadcastConfig, clearBroadcastConfigCache } from './config/broadcast.js';
|
|
128
128
|
export { default as notificationConfig } from './config/notification.js';
|
|
@@ -133,7 +133,7 @@ export { startupConfig } from './config/startup.js';
|
|
|
133
133
|
export { Constants, DEFAULTS, ENV_KEYS, HTTP_HEADERS, MIME_TYPES } from './config/constants.js';
|
|
134
134
|
export { FeatureFlags } from './config/features.js';
|
|
135
135
|
export { Cloudflare } from './config/cloudflare.js';
|
|
136
|
-
export {
|
|
136
|
+
export { SECRETS, SecretsManager, getDatabaseCredentials, getJwtSecrets, } from './config/SecretsManager.js';
|
|
137
137
|
// Config (validation)
|
|
138
138
|
export { StartupConfigValidator } from './config/StartupConfigValidator.js';
|
|
139
139
|
export { Mail } from './tools/mail/index.js';
|
|
@@ -220,7 +220,7 @@ export { ZintrustLang } from './lang/lang.js';
|
|
|
220
220
|
// Workers config
|
|
221
221
|
export { createRedisConnection, workersConfig } from './config/workers.js';
|
|
222
222
|
// Redis config key - Singleton exports
|
|
223
|
-
export { createRedisKey, extractOriginalKey, getBullMQSafeQueueName, getPrefix, isAppKey,
|
|
223
|
+
export { RedisKeys, createRedisKey, extractOriginalKey, getBullMQSafeQueueName, getPrefix, isAppKey, } from './tools/redis/RedisKeyManager.js';
|
|
224
224
|
export { CloudflareSocket } from './sockets/CloudflareSocket.js';
|
|
225
225
|
export { SocketFeature } from './sockets/SocketRuntime.js';
|
|
226
226
|
export { SocketRuntimeRegistry } from './sockets/SocketRuntimeRegistry.js';
|
|
@@ -4,6 +4,14 @@ type ReadAndVerifyJsonOptions = WorkerSigningOptions & Readonly<{
|
|
|
4
4
|
defaultMaxBodyBytes: number;
|
|
5
5
|
}>;
|
|
6
6
|
type ProxyRequestEnv = object;
|
|
7
|
+
export type ProxyRpcService = 'redis' | 'worker' | 'queue-monitor';
|
|
8
|
+
export type ProxyRpcEnvelope = Readonly<{
|
|
9
|
+
service: ProxyRpcService;
|
|
10
|
+
action: string;
|
|
11
|
+
requestId: string;
|
|
12
|
+
payload: Record<string, unknown>;
|
|
13
|
+
}>;
|
|
14
|
+
export declare const resolveProxyRpcService: (subsystem?: string) => ProxyRpcService;
|
|
7
15
|
export declare const json: (status: number, body: unknown) => Response;
|
|
8
16
|
export declare const toErrorResponse: (status: number, code: string, message: string) => Response;
|
|
9
17
|
export declare const getEnvInt: (env: ProxyRequestEnv, name: string, fallback: number) => number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CloudflareProxyShared.d.ts","sourceRoot":"","sources":["../../../src/proxy/CloudflareProxyShared.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAGjE,YAAY,EACV,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAE9B,KAAK,wBAAwB,GAAG,oBAAoB,GAClD,QAAQ,CAAC;IACP,mBAAmB,EAAE,MAAM,CAAC;CAC7B,CAAC,CAAC;AAEL,KAAK,eAAe,GAAG,MAAM,CAAC;AAE9B,eAAO,MAAM,IAAI,GAAI,QAAQ,MAAM,EAAE,MAAM,OAAO,KAAG,QAQpD,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,EAAE,MAAM,MAAM,EAAE,SAAS,MAAM,KAAG,QAG/E,CAAC;AAMF,eAAO,MAAM,SAAS,GAAI,KAAK,eAAe,EAAE,MAAM,MAAM,EAAE,UAAU,MAAM,KAAG,MAKhF,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,OAAO,OAAO,KAAG,MAAM,GAAG,IAI9D,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,SAAS,OAAO,EAChB,UAAU,MAAM,KACf,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAY3F,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,MAAM,MAAM,KACX;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAezF,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,SAAS,OAAO,EAChB,KAAK,eAAe,EACpB,WAAW,UAAU,EACrB,SAAS,oBAAoB,KAC5B,OAAO,CAAC,QAAQ,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,CAQjC,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,SAAS,OAAO,EAChB,KAAK,eAAe,EACpB,SAAS,wBAAwB,KAChC,OAAO,CACN;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,UAAU,CAAA;CAAE,GAC5E;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAapC,CAAC"}
|
|
1
|
+
{"version":3,"file":"CloudflareProxyShared.d.ts","sourceRoot":"","sources":["../../../src/proxy/CloudflareProxyShared.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAGjE,YAAY,EACV,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAE9B,KAAK,wBAAwB,GAAG,oBAAoB,GAClD,QAAQ,CAAC;IACP,mBAAmB,EAAE,MAAM,CAAC;CAC7B,CAAC,CAAC;AAEL,KAAK,eAAe,GAAG,MAAM,CAAC;AAE9B,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,QAAQ,GAAG,eAAe,CAAC;AAEnE,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;IACtC,OAAO,EAAE,eAAe,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,CAAC,CAAC;AAEH,eAAO,MAAM,sBAAsB,GAAI,YAAY,MAAM,KAAG,eAK3D,CAAC;AAEF,eAAO,MAAM,IAAI,GAAI,QAAQ,MAAM,EAAE,MAAM,OAAO,KAAG,QAQpD,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,EAAE,MAAM,MAAM,EAAE,SAAS,MAAM,KAAG,QAG/E,CAAC;AAMF,eAAO,MAAM,SAAS,GAAI,KAAK,eAAe,EAAE,MAAM,MAAM,EAAE,UAAU,MAAM,KAAG,MAKhF,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,OAAO,OAAO,KAAG,MAAM,GAAG,IAI9D,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,SAAS,OAAO,EAChB,UAAU,MAAM,KACf,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAY3F,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,MAAM,MAAM,KACX;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAezF,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,SAAS,OAAO,EAChB,KAAK,eAAe,EACpB,WAAW,UAAU,EACrB,SAAS,oBAAoB,KAC5B,OAAO,CAAC,QAAQ,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,CAQjC,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,SAAS,OAAO,EAChB,KAAK,eAAe,EACpB,SAAS,wBAAwB,KAChC,OAAO,CACN;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,UAAU,CAAA;CAAE,GAC5E;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAapC,CAAC"}
|
|
@@ -2,6 +2,14 @@ import { isString } from '../helper/index.js';
|
|
|
2
2
|
import { ErrorHandler } from './ErrorHandler.js';
|
|
3
3
|
import { RequestValidator } from './RequestValidator.js';
|
|
4
4
|
import { WorkerSigning } from './WorkerSigning.js';
|
|
5
|
+
export const resolveProxyRpcService = (subsystem) => {
|
|
6
|
+
const normalized = typeof subsystem === 'string' ? subsystem.trim().toLowerCase() : '';
|
|
7
|
+
if (normalized.startsWith('queue-monitor'))
|
|
8
|
+
return 'queue-monitor';
|
|
9
|
+
if (normalized.startsWith('worker'))
|
|
10
|
+
return 'worker';
|
|
11
|
+
return 'redis';
|
|
12
|
+
};
|
|
5
13
|
export const json = (status, body) => {
|
|
6
14
|
return new Response(JSON.stringify(body), {
|
|
7
15
|
status,
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type QueueDriver } from '@zintrust/queue-monitor/driver';
|
|
2
|
+
import { type Metrics } from '@zintrust/queue-monitor/metrics';
|
|
3
|
+
export type QueueMonitorContext = Readonly<{
|
|
4
|
+
driver: QueueDriver;
|
|
5
|
+
metrics: Metrics;
|
|
6
|
+
}>;
|
|
7
|
+
export type RedisProxyRedisConfig = Readonly<{
|
|
8
|
+
host: string;
|
|
9
|
+
port: number;
|
|
10
|
+
password: string;
|
|
11
|
+
db: number;
|
|
12
|
+
}>;
|
|
13
|
+
export declare const createQueueMonitorContext: (redis: RedisProxyRedisConfig) => QueueMonitorContext;
|
|
14
|
+
export declare const dispatchServiceCommand: (service: string, action: string, payload: Record<string, unknown>, queueMonitor: QueueMonitorContext) => Promise<unknown>;
|
|
15
|
+
//# sourceMappingURL=RedisProxyActions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RedisProxyActions.d.ts","sourceRoot":"","sources":["../../../../src/proxy/redis/RedisProxyActions.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,gCAAgC,CAAC;AACtF,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAa9E,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IACzC,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC,CAAC;AAEH,eAAO,MAAM,yBAAyB,GAAI,OAAO,qBAAqB,KAAG,mBAKxE,CAAC;AAyHF,eAAO,MAAM,sBAAsB,GACjC,SAAS,MAAM,EACf,QAAQ,MAAM,EACd,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,cAAc,mBAAmB,KAChC,OAAO,CAAC,OAAO,CAUjB,CAAC"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { ErrorFactory } from '../../exceptions/ZintrustError.js';
|
|
2
|
+
import { createBullMQDriver } from '@zintrust/queue-monitor/driver';
|
|
3
|
+
import { createMetrics } from '@zintrust/queue-monitor/metrics';
|
|
4
|
+
import { getRecentJobsForQueue, getRecentJobsForSelection, } from '../../../packages/queue-monitor/src/QueueMonitoringService.js';
|
|
5
|
+
import { getWorkerDetails, getWorkers, toggleAutoStart, } from '../../../packages/workers/src/dashboard/workers-api.js';
|
|
6
|
+
import { WorkerFactory } from '../../../packages/workers/src/WorkerFactory.js';
|
|
7
|
+
export const createQueueMonitorContext = (redis) => {
|
|
8
|
+
return {
|
|
9
|
+
driver: createBullMQDriver(redis),
|
|
10
|
+
metrics: createMetrics(redis),
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
const readString = (value) => {
|
|
14
|
+
return typeof value === 'string' && value.trim() !== '' ? value.trim() : undefined;
|
|
15
|
+
};
|
|
16
|
+
const readBoolean = (value) => value === true;
|
|
17
|
+
const readNumber = (value) => {
|
|
18
|
+
return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
|
|
19
|
+
};
|
|
20
|
+
const readQueueNames = (value) => {
|
|
21
|
+
if (!Array.isArray(value))
|
|
22
|
+
return undefined;
|
|
23
|
+
const names = value
|
|
24
|
+
.filter((entry) => typeof entry === 'string')
|
|
25
|
+
.map((entry) => entry.trim())
|
|
26
|
+
.filter((entry) => entry.length > 0);
|
|
27
|
+
return names.length > 0 ? names : undefined;
|
|
28
|
+
};
|
|
29
|
+
const resolveWorkerPersistenceOverride = (payload) => {
|
|
30
|
+
const driver = readString(payload['driver']);
|
|
31
|
+
if (driver === 'redis')
|
|
32
|
+
return { driver: 'redis' };
|
|
33
|
+
if (driver === 'database')
|
|
34
|
+
return { driver: 'database' };
|
|
35
|
+
if (driver === 'memory')
|
|
36
|
+
return { driver: 'memory' };
|
|
37
|
+
return undefined;
|
|
38
|
+
};
|
|
39
|
+
const workerActionHandlers = {
|
|
40
|
+
getWorkers: async (payload) => {
|
|
41
|
+
return getWorkers(payload);
|
|
42
|
+
},
|
|
43
|
+
getWorkerDetails: async (payload) => {
|
|
44
|
+
return getWorkerDetails(readString(payload['name'] ?? payload['workerName']) ?? '', readString(payload['driver']));
|
|
45
|
+
},
|
|
46
|
+
toggleAutoStart: async (payload) => {
|
|
47
|
+
return toggleAutoStart(readString(payload['name'] ?? payload['workerName']) ?? '', readBoolean(payload['enabled']));
|
|
48
|
+
},
|
|
49
|
+
listPersistedRecords: async (payload) => {
|
|
50
|
+
return WorkerFactory.listPersistedRecords(resolveWorkerPersistenceOverride(payload), {
|
|
51
|
+
offset: readNumber(payload['offset']),
|
|
52
|
+
limit: readNumber(payload['limit']),
|
|
53
|
+
search: readString(payload['search']),
|
|
54
|
+
includeInactive: readBoolean(payload['includeInactive']),
|
|
55
|
+
});
|
|
56
|
+
},
|
|
57
|
+
listFileBackedRecords: async () => {
|
|
58
|
+
return WorkerFactory.listFileBackedRecords();
|
|
59
|
+
},
|
|
60
|
+
getPersisted: async (payload) => {
|
|
61
|
+
return WorkerFactory.getPersisted(readString(payload['name'] ?? payload['workerName']) ?? '', resolveWorkerPersistenceOverride(payload));
|
|
62
|
+
},
|
|
63
|
+
getHealth: async (payload) => {
|
|
64
|
+
return WorkerFactory.getHealth(readString(payload['name'] ?? payload['workerName']) ?? '');
|
|
65
|
+
},
|
|
66
|
+
getMetrics: async (payload) => {
|
|
67
|
+
return WorkerFactory.getMetrics(readString(payload['name'] ?? payload['workerName']) ?? '');
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
const queueMonitorActionHandlers = {
|
|
71
|
+
getRecentJobsForQueue: async (payload, queueMonitor) => {
|
|
72
|
+
return getRecentJobsForQueue(readString(payload['queue'] ?? payload['queueName']) ?? '', queueMonitor.metrics, queueMonitor.driver);
|
|
73
|
+
},
|
|
74
|
+
getRecentJobsForSelection: async (payload, queueMonitor) => {
|
|
75
|
+
return getRecentJobsForSelection(readString(payload['queue'] ?? payload['queueName']) ?? '', queueMonitor.metrics, queueMonitor.driver, readQueueNames(payload['queueNames']));
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
const dispatchWorkerAction = async (action, payload) => {
|
|
79
|
+
const handler = workerActionHandlers[action];
|
|
80
|
+
if (handler === undefined) {
|
|
81
|
+
throw ErrorFactory.createValidationError(`Unsupported worker action: ${action}`);
|
|
82
|
+
}
|
|
83
|
+
return handler(payload);
|
|
84
|
+
};
|
|
85
|
+
const dispatchQueueMonitorAction = async (action, payload, queueMonitor) => {
|
|
86
|
+
const handler = queueMonitorActionHandlers[action];
|
|
87
|
+
if (handler === undefined) {
|
|
88
|
+
throw ErrorFactory.createValidationError(`Unsupported queue-monitor action: ${action}`);
|
|
89
|
+
}
|
|
90
|
+
return handler(payload, queueMonitor);
|
|
91
|
+
};
|
|
92
|
+
export const dispatchServiceCommand = async (service, action, payload, queueMonitor) => {
|
|
93
|
+
if (service === 'worker') {
|
|
94
|
+
return dispatchWorkerAction(action, payload);
|
|
95
|
+
}
|
|
96
|
+
if (service === 'queue-monitor') {
|
|
97
|
+
return dispatchQueueMonitorAction(action, payload, queueMonitor);
|
|
98
|
+
}
|
|
99
|
+
throw ErrorFactory.createValidationError(`Unsupported RPC service: ${service}`);
|
|
100
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RedisProxyServer.d.ts","sourceRoot":"","sources":["../../../../src/proxy/redis/RedisProxyServer.ts"],"names":[],"mappings":"AAQA,OAAO,EAIL,KAAK,kBAAkB,EACxB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"RedisProxyServer.d.ts","sourceRoot":"","sources":["../../../../src/proxy/redis/RedisProxyServer.ts"],"names":[],"mappings":"AAQA,OAAO,EAIL,KAAK,kBAAkB,EACxB,MAAM,yBAAyB,CAAC;AAsBjC,KAAK,cAAc,GAAG,kBAAkB,GACtC,OAAO,CAAC;IACN,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC,CAAC;AAwZL,eAAO,MAAM,gBAAgB;sBACJ,cAAc,GAAQ,OAAO,CAAC,IAAI,CAAC;EAgC1D,CAAC;AAEH,eAAe,gBAAgB,CAAC"}
|
|
@@ -2,10 +2,13 @@ import { SystemTraceBridge } from '../../trace/SystemTraceBridge.js';
|
|
|
2
2
|
import { Env } from '../../config/env.js';
|
|
3
3
|
import { Logger } from '../../config/logger.js';
|
|
4
4
|
import { ErrorFactory } from '../../exceptions/ZintrustError.js';
|
|
5
|
-
import {
|
|
5
|
+
import { resolveProxyRpcService } from '../CloudflareProxyShared.js';
|
|
6
6
|
import { createProxyServer } from '../ProxyServer.js';
|
|
7
7
|
import { resolveBaseConfig, resolveBaseSigningConfig, verifyRequestSignature, } from '../ProxyServerUtils.js';
|
|
8
8
|
import { RequestValidator } from '../RequestValidator.js';
|
|
9
|
+
import { createQueueMonitorContext, dispatchServiceCommand, } from '../redis/RedisProxyActions.js';
|
|
10
|
+
const scriptCache = new Map();
|
|
11
|
+
let scriptCacheClient = null;
|
|
9
12
|
const resolveRedisConfig = (overrides = {}) => {
|
|
10
13
|
const host = overrides.redisHost ?? Env.get('REDIS_PROXY_TARGET_HOST', Env.get('REDIS_HOST', '127.0.0.1'));
|
|
11
14
|
const port = overrides.redisPort ?? Env.getInt('REDIS_PROXY_TARGET_PORT', Env.getInt('REDIS_PORT', 6379));
|
|
@@ -31,17 +34,8 @@ const resolveConfig = (overrides = {}) => {
|
|
|
31
34
|
},
|
|
32
35
|
};
|
|
33
36
|
};
|
|
34
|
-
const validateCommandPayload = (payload) => {
|
|
35
|
-
const command = payload['command'];
|
|
36
|
-
const args = Array.isArray(payload['args']) ? payload['args'] : [];
|
|
37
|
-
if (typeof command !== 'string' || command.trim() === '') {
|
|
38
|
-
return { valid: false, error: { code: 'VALIDATION_ERROR', message: 'command is required' } };
|
|
39
|
-
}
|
|
40
|
-
return { valid: true, command, args };
|
|
41
|
-
};
|
|
42
37
|
const getRedisModule = async () => {
|
|
43
|
-
|
|
44
|
-
return mod;
|
|
38
|
+
return import('ioredis');
|
|
45
39
|
};
|
|
46
40
|
const createClient = async (config) => {
|
|
47
41
|
const module = (await getRedisModule());
|
|
@@ -90,91 +84,237 @@ const createClient = async (config) => {
|
|
|
90
84
|
}
|
|
91
85
|
return client;
|
|
92
86
|
};
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
87
|
+
const normalizeRpcPayload = (payload) => {
|
|
88
|
+
return payload ?? {};
|
|
89
|
+
};
|
|
90
|
+
const parseRedisCommandArgs = (payload) => {
|
|
91
|
+
return Array.isArray(payload['args']) ? payload['args'] : [];
|
|
92
|
+
};
|
|
93
|
+
const validateCommandPayload = (payload) => {
|
|
94
|
+
const requestId = typeof payload['requestId'] === 'string' && payload['requestId'].trim() !== ''
|
|
95
|
+
? payload['requestId'].trim()
|
|
96
|
+
: 'unknown';
|
|
97
|
+
const service = resolveProxyRpcService(typeof payload['service'] === 'string' ? payload['service'] : undefined);
|
|
98
|
+
let actionValue;
|
|
99
|
+
if (typeof payload['action'] === 'string') {
|
|
100
|
+
actionValue = payload['action'];
|
|
101
|
+
}
|
|
102
|
+
else if (typeof payload['command'] === 'string') {
|
|
103
|
+
actionValue = payload['command'];
|
|
104
|
+
}
|
|
105
|
+
const normalizedPayload = normalizeRpcPayload(payload['payload'] ?? undefined);
|
|
106
|
+
if (typeof actionValue !== 'string' || actionValue.trim() === '') {
|
|
107
|
+
return {
|
|
108
|
+
valid: false,
|
|
109
|
+
requestId,
|
|
110
|
+
service,
|
|
111
|
+
payload: normalizedPayload,
|
|
112
|
+
error: { code: 'VALIDATION_ERROR', message: 'action is required' },
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
return {
|
|
116
|
+
valid: true,
|
|
117
|
+
requestId,
|
|
118
|
+
service,
|
|
119
|
+
action: actionValue.trim(),
|
|
120
|
+
payload: normalizedPayload,
|
|
121
|
+
};
|
|
122
|
+
};
|
|
123
|
+
const handleScriptCommand = async (args, config) => {
|
|
124
|
+
const subCommand = String(args[0]).toLowerCase();
|
|
125
|
+
Logger.info('[RedisProxyServer] SCRIPT command received', {
|
|
126
|
+
subCommand,
|
|
127
|
+
argsCount: args.length,
|
|
128
|
+
});
|
|
129
|
+
if (subCommand !== 'load' || args.length <= 1) {
|
|
130
|
+
return { status: 200, body: { result: null } };
|
|
131
|
+
}
|
|
132
|
+
const script = String(args[1]);
|
|
133
|
+
Logger.info('[RedisProxyServer] Loading script into Redis', { scriptLength: script.length });
|
|
134
|
+
const cacheClient = await getScriptCacheClient(config);
|
|
135
|
+
const sha = await cacheClient.call('SCRIPT', 'LOAD', script);
|
|
136
|
+
if (typeof sha === 'string') {
|
|
137
|
+
scriptCache.set(sha, script);
|
|
138
|
+
Logger.info('[RedisProxyServer] Script loaded into cache', {
|
|
139
|
+
sha,
|
|
140
|
+
cacheSize: scriptCache.size,
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
Logger.warn('[RedisProxyServer] Script LOAD returned non-string SHA', {
|
|
145
|
+
sha,
|
|
146
|
+
type: typeof sha,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
return { status: 200, body: { result: sha } };
|
|
150
|
+
};
|
|
151
|
+
const handleStandardRedisCommand = async (client, action, args) => {
|
|
152
|
+
const lower = action.trim().toLowerCase();
|
|
153
|
+
if (lower === 'evalsha' && args.length > 0) {
|
|
154
|
+
const sha = String(args[0]);
|
|
155
|
+
Logger.info('[RedisProxyServer] EVALSHA command received', {
|
|
156
|
+
sha,
|
|
157
|
+
cacheSize: scriptCache.size,
|
|
158
|
+
hasScript: scriptCache.has(sha),
|
|
159
|
+
});
|
|
160
|
+
if (scriptCache.has(sha)) {
|
|
161
|
+
Logger.info('[RedisProxyServer] Using cached script for EVALSHA', { sha });
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
Logger.warn('[RedisProxyServer] Script not in cache, will attempt direct EVALSHA', {
|
|
165
|
+
sha,
|
|
166
|
+
availableScripts: Array.from(scriptCache.keys()).slice(0, 5),
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
}
|
|
96
170
|
const candidate = client[lower];
|
|
97
171
|
if (typeof candidate === 'function') {
|
|
98
|
-
return
|
|
172
|
+
return {
|
|
173
|
+
status: 200,
|
|
174
|
+
body: {
|
|
175
|
+
result: await candidate.apply(client, args),
|
|
176
|
+
},
|
|
177
|
+
};
|
|
99
178
|
}
|
|
100
179
|
if (typeof client.call === 'function') {
|
|
101
|
-
return client.call(
|
|
180
|
+
return { status: 200, body: { result: await client.call(action.trim(), ...args) } };
|
|
102
181
|
}
|
|
103
|
-
throw ErrorFactory.createValidationError(`Unsupported Redis command: ${
|
|
182
|
+
throw ErrorFactory.createValidationError(`Unsupported Redis command: ${action}`);
|
|
104
183
|
};
|
|
105
|
-
const
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
catch (error) {
|
|
152
|
-
return ErrorHandler.toProxyError(500, 'REDIS_PROXY_ERROR', String(error));
|
|
184
|
+
const handleServiceRpc = async (validated, queueMonitor) => {
|
|
185
|
+
const startedAt = Date.now();
|
|
186
|
+
const result = await dispatchServiceCommand(validated.service, validated.action ?? '', validated.payload, queueMonitor);
|
|
187
|
+
SystemTraceBridge.emitRedis(`${validated.service}:${validated.action ?? 'unknown'}`, Date.now() - startedAt);
|
|
188
|
+
return { status: 200, body: { result } };
|
|
189
|
+
};
|
|
190
|
+
const handleRedisRequest = async (request, config, queueMonitor) => {
|
|
191
|
+
Logger.info('[RedisProxyServer] Handling request', {
|
|
192
|
+
method: request.method,
|
|
193
|
+
path: request.path,
|
|
194
|
+
scriptCacheSize: scriptCache.size,
|
|
195
|
+
});
|
|
196
|
+
const methodError = RequestValidator.requirePost(request.method);
|
|
197
|
+
if (methodError) {
|
|
198
|
+
return {
|
|
199
|
+
status: 405,
|
|
200
|
+
body: { code: methodError.code, message: methodError.message },
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
if (request.path !== '/zin/redis/command') {
|
|
204
|
+
return { status: 404, body: { code: 'NOT_FOUND', message: 'Unknown endpoint' } };
|
|
205
|
+
}
|
|
206
|
+
const parsed = RequestValidator.parseJson(request.body);
|
|
207
|
+
if (!parsed.ok) {
|
|
208
|
+
return { status: 400, body: { code: parsed.error.code, message: parsed.error.message } };
|
|
209
|
+
}
|
|
210
|
+
const validated = validateCommandPayload(parsed.value);
|
|
211
|
+
if (!validated.valid) {
|
|
212
|
+
return {
|
|
213
|
+
status: 400,
|
|
214
|
+
body: {
|
|
215
|
+
code: validated.error?.code ?? 'VALIDATION_ERROR',
|
|
216
|
+
message: validated.error?.message ?? 'Invalid request',
|
|
217
|
+
},
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
if (validated.service === 'worker' || validated.service === 'queue-monitor') {
|
|
221
|
+
return handleServiceRpc(validated, queueMonitor);
|
|
222
|
+
}
|
|
223
|
+
const client = await createClient(config);
|
|
224
|
+
try {
|
|
225
|
+
const parsedArgs = parseRedisCommandArgs(validated.payload);
|
|
226
|
+
if (validated.action?.toLowerCase() === 'script') {
|
|
227
|
+
return await handleScriptCommand(parsedArgs, config);
|
|
153
228
|
}
|
|
154
|
-
|
|
155
|
-
|
|
229
|
+
return await handleStandardRedisCommand(client, validated.action ?? '', parsedArgs);
|
|
230
|
+
}
|
|
231
|
+
finally {
|
|
232
|
+
await client.quit();
|
|
233
|
+
}
|
|
234
|
+
};
|
|
235
|
+
const handleRedisHealth = async (config) => {
|
|
236
|
+
try {
|
|
237
|
+
const client = await createClient(config);
|
|
156
238
|
try {
|
|
157
|
-
const client = await createClient(config);
|
|
158
239
|
const pingFn = client.ping;
|
|
159
240
|
if (typeof pingFn === 'function') {
|
|
160
241
|
await pingFn.apply(client);
|
|
161
242
|
}
|
|
162
243
|
else {
|
|
163
|
-
await
|
|
244
|
+
await handleStandardRedisCommand(client, 'PING', []);
|
|
164
245
|
}
|
|
165
|
-
await client.quit();
|
|
166
246
|
return { status: 200, body: { status: 'healthy' } };
|
|
167
247
|
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
return { status: 503, body: { status: 'unhealthy', error: String(error) } };
|
|
248
|
+
finally {
|
|
249
|
+
await client.quit();
|
|
171
250
|
}
|
|
172
|
-
}
|
|
173
|
-
|
|
251
|
+
}
|
|
252
|
+
catch (error) {
|
|
253
|
+
Logger.warn('[RedisProxyServer] health check failed', error);
|
|
254
|
+
return { status: 503, body: { status: 'unhealthy', error: String(error) } };
|
|
255
|
+
}
|
|
256
|
+
};
|
|
257
|
+
const createBackend = (config) => {
|
|
258
|
+
const queueMonitor = createQueueMonitorContext(config.redis);
|
|
259
|
+
return {
|
|
260
|
+
name: 'redis',
|
|
261
|
+
handle: async (request) => handleRedisRequest(request, config, queueMonitor),
|
|
262
|
+
health: async () => handleRedisHealth(config),
|
|
263
|
+
shutdown: async () => {
|
|
264
|
+
await Promise.all([queueMonitor.driver.close(), queueMonitor.metrics.close()]);
|
|
265
|
+
},
|
|
266
|
+
};
|
|
267
|
+
};
|
|
268
|
+
const getScriptCacheClient = async (config) => {
|
|
269
|
+
if (scriptCacheClient !== null && scriptCacheClient.status === 'ready') {
|
|
270
|
+
return scriptCacheClient;
|
|
271
|
+
}
|
|
272
|
+
const module = (await getRedisModule());
|
|
273
|
+
const moduleDefault = module['default'];
|
|
274
|
+
const candidates = [
|
|
275
|
+
module['Redis'],
|
|
276
|
+
module['default'],
|
|
277
|
+
moduleDefault?.['Redis'],
|
|
278
|
+
moduleDefault?.['default'],
|
|
279
|
+
module,
|
|
280
|
+
];
|
|
281
|
+
const RedisCtor = candidates.find((candidate) => typeof candidate === 'function');
|
|
282
|
+
if (typeof RedisCtor !== 'function') {
|
|
283
|
+
throw ErrorFactory.createConfigError("Redis proxy could not resolve a Redis constructor from 'ioredis'.");
|
|
284
|
+
}
|
|
285
|
+
scriptCacheClient = new RedisCtor({
|
|
286
|
+
host: config.redis.host,
|
|
287
|
+
port: config.redis.port,
|
|
288
|
+
password: config.redis.password,
|
|
289
|
+
db: config.redis.db,
|
|
290
|
+
maxRetriesPerRequest: 3,
|
|
291
|
+
enableOfflineQueue: true,
|
|
292
|
+
lazyConnect: false,
|
|
293
|
+
retryStrategy: (times) => {
|
|
294
|
+
if (times > 3)
|
|
295
|
+
return null;
|
|
296
|
+
return Math.min(times * 100, 1000);
|
|
297
|
+
},
|
|
298
|
+
});
|
|
299
|
+
if (typeof scriptCacheClient.connect === 'function') {
|
|
300
|
+
await scriptCacheClient.connect();
|
|
301
|
+
}
|
|
302
|
+
scriptCacheClient.on('error', (error) => {
|
|
303
|
+
Logger.warn('[RedisProxyServer] script cache client error', error);
|
|
304
|
+
});
|
|
305
|
+
return scriptCacheClient;
|
|
306
|
+
};
|
|
174
307
|
export const RedisProxyServer = Object.freeze({
|
|
175
308
|
async start(overrides = {}) {
|
|
176
309
|
const config = resolveConfig(overrides);
|
|
177
310
|
const backend = createBackend(config);
|
|
311
|
+
Logger.info('[RedisProxyServer] Starting Redis proxy', {
|
|
312
|
+
host: config.host,
|
|
313
|
+
port: config.port,
|
|
314
|
+
redisHost: config.redis.host,
|
|
315
|
+
redisPort: config.redis.port,
|
|
316
|
+
redisDb: config.redis.db,
|
|
317
|
+
});
|
|
178
318
|
const server = createProxyServer({
|
|
179
319
|
host: config.host,
|
|
180
320
|
port: config.port,
|
|
@@ -189,7 +329,10 @@ export const RedisProxyServer = Object.freeze({
|
|
|
189
329
|
},
|
|
190
330
|
});
|
|
191
331
|
await server.start();
|
|
192
|
-
Logger.info(`[redis-proxy] Listening on http://${config.host}:${config.port}
|
|
332
|
+
Logger.info(`[redis-proxy] Listening on http://${config.host}:${config.port}`, {
|
|
333
|
+
scriptCacheSize: scriptCache.size,
|
|
334
|
+
luaScriptSupport: 'enabled',
|
|
335
|
+
});
|
|
193
336
|
},
|
|
194
337
|
});
|
|
195
338
|
export default RedisProxyServer;
|
package/src/redis-index.d.ts
CHANGED
|
@@ -5,4 +5,5 @@
|
|
|
5
5
|
export { RedisKeys, createRedisKey, extractOriginalKey, getBullMQSafeQueueName, getPrefix, isAppKey, type RedisKeyType, } from './tools/redis/RedisKeyManager';
|
|
6
6
|
export type { RedisConfig } from './config/type';
|
|
7
7
|
export { createRedisConnection } from './config/workers';
|
|
8
|
+
export type { RedisTransportOptions } from './tools/redis/RedisTransport';
|
|
8
9
|
//# 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"}
|
|
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"}
|
|
@@ -3,6 +3,7 @@ export type RedisTransportMode = 'direct' | 'proxy';
|
|
|
3
3
|
export type RedisTransportOptions = Readonly<{
|
|
4
4
|
subsystem?: string;
|
|
5
5
|
requireDirect?: boolean;
|
|
6
|
+
requireDirectForScripts?: boolean;
|
|
6
7
|
}>;
|
|
7
8
|
type RedisProxyConnection = {
|
|
8
9
|
[x: string]: unknown;
|
|
@@ -26,6 +27,9 @@ type RedisProxyConnection = {
|
|
|
26
27
|
setMaxListeners: (count: number) => RedisProxyConnection;
|
|
27
28
|
getMaxListeners: () => number;
|
|
28
29
|
call: (command: string, ...args: unknown[]) => Promise<unknown>;
|
|
30
|
+
scripts: {
|
|
31
|
+
[key: string]: (...args: unknown[]) => Promise<unknown>;
|
|
32
|
+
};
|
|
29
33
|
pipeline: () => {
|
|
30
34
|
exec: () => Promise<Array<[Error | null, unknown]>>;
|
|
31
35
|
runCommand?: (name: string, args: unknown[]) => unknown;
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"RedisTransport.d.ts","sourceRoot":"","sources":["../../../../src/tools/redis/RedisTransport.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { Env } from '../../config/env.js';
|
|
|
2
2
|
import { Logger } from '../../config/logger.js';
|
|
3
3
|
import { ErrorFactory } from '../../exceptions/ZintrustError.js';
|
|
4
4
|
import { parseCustomHeadersFromEnv } from '../../orm/adapters/SqlProxyAdapterUtils.js';
|
|
5
|
+
import { resolveProxyRpcService, } from '../../proxy/CloudflareProxyShared.js';
|
|
5
6
|
import { SignedRequest } from '../../security/SignedRequest.js';
|
|
6
7
|
const loggedSelections = new Set();
|
|
7
8
|
const readEnvString = (key, fallback = '') => {
|
|
@@ -55,11 +56,18 @@ const resolveProxyBaseUrl = () => {
|
|
|
55
56
|
return explicit;
|
|
56
57
|
return `http://${Env.REDIS_PROXY_HOST}:${Env.REDIS_PROXY_PORT}`;
|
|
57
58
|
};
|
|
58
|
-
const
|
|
59
|
+
const createRequestId = () => {
|
|
60
|
+
const crypto = globalThis.crypto;
|
|
61
|
+
if (typeof crypto?.randomUUID === 'function')
|
|
62
|
+
return crypto.randomUUID();
|
|
63
|
+
return `req_${Date.now()}_${Math.random().toString(16).slice(2)}`;
|
|
64
|
+
};
|
|
65
|
+
const resolveProxySettings = (options) => ({
|
|
59
66
|
baseUrl: resolveProxyBaseUrl(),
|
|
60
67
|
keyId: Env.REDIS_PROXY_KEY_ID.trim() === '' ? undefined : Env.REDIS_PROXY_KEY_ID,
|
|
61
68
|
secret: Env.REDIS_PROXY_SECRET.trim() === '' ? undefined : Env.REDIS_PROXY_SECRET,
|
|
62
69
|
timeoutMs: Env.REDIS_PROXY_TIMEOUT_MS,
|
|
70
|
+
service: resolveProxyRpcService(options?.subsystem),
|
|
63
71
|
customHeaders: parseCustomHeadersFromEnv('REDIS'),
|
|
64
72
|
});
|
|
65
73
|
const buildHeaders = async (settings, requestUrl, body) => {
|
|
@@ -82,11 +90,17 @@ const buildHeaders = async (settings, requestUrl, body) => {
|
|
|
82
90
|
}
|
|
83
91
|
return headers;
|
|
84
92
|
};
|
|
85
|
-
const requestProxyCommand = async (settings,
|
|
93
|
+
const requestProxyCommand = async (settings, action, payload) => {
|
|
86
94
|
if (settings.baseUrl.trim() === '') {
|
|
87
95
|
throw ErrorFactory.createConfigError('Redis proxy URL is missing (REDIS_PROXY_URL)');
|
|
88
96
|
}
|
|
89
|
-
const
|
|
97
|
+
const envelope = {
|
|
98
|
+
service: settings.service,
|
|
99
|
+
action,
|
|
100
|
+
requestId: createRequestId(),
|
|
101
|
+
payload,
|
|
102
|
+
};
|
|
103
|
+
const body = JSON.stringify(envelope);
|
|
90
104
|
const requestUrl = buildRequestUrl(settings.baseUrl, '/zin/redis/command');
|
|
91
105
|
const headers = await buildHeaders(settings, requestUrl, body);
|
|
92
106
|
const signal = typeof AbortSignal !== 'undefined' && 'timeout' in AbortSignal
|
|
@@ -164,13 +178,9 @@ const createScanStream = (settings, options) => {
|
|
|
164
178
|
let cursor = '0';
|
|
165
179
|
do {
|
|
166
180
|
// eslint-disable-next-line no-await-in-loop
|
|
167
|
-
const result = await requestProxyCommand(settings, 'SCAN',
|
|
168
|
-
cursor,
|
|
169
|
-
|
|
170
|
-
options?.match ?? '*',
|
|
171
|
-
'COUNT',
|
|
172
|
-
String(options?.count ?? 200),
|
|
173
|
-
]);
|
|
181
|
+
const result = await requestProxyCommand(settings, 'SCAN', {
|
|
182
|
+
args: [cursor, 'MATCH', options?.match ?? '*', 'COUNT', String(options?.count ?? 200)],
|
|
183
|
+
});
|
|
174
184
|
const [nextCursor, batch] = normalizeScanResponse(result);
|
|
175
185
|
cursor = nextCursor;
|
|
176
186
|
if (batch.length > 0) {
|
|
@@ -186,7 +196,7 @@ const createScanStream = (settings, options) => {
|
|
|
186
196
|
});
|
|
187
197
|
return stream;
|
|
188
198
|
};
|
|
189
|
-
const createPipeline = (settings
|
|
199
|
+
const createPipeline = (settings) => {
|
|
190
200
|
const commands = [];
|
|
191
201
|
const target = {
|
|
192
202
|
async exec() {
|
|
@@ -198,7 +208,7 @@ const createPipeline = (settings, _runCommand) => {
|
|
|
198
208
|
for (const entry of commands) {
|
|
199
209
|
try {
|
|
200
210
|
// eslint-disable-next-line no-await-in-loop
|
|
201
|
-
const result = await requestProxyCommand(settings, entry.command, entry.args);
|
|
211
|
+
const result = await requestProxyCommand(settings, entry.command, { args: entry.args });
|
|
202
212
|
results.push([null, result]);
|
|
203
213
|
}
|
|
204
214
|
catch (error) {
|
|
@@ -216,7 +226,6 @@ const createPipeline = (settings, _runCommand) => {
|
|
|
216
226
|
Logger.debug('[redis][proxy][pipeline] runCommand called in pipeline', {
|
|
217
227
|
commandName: name,
|
|
218
228
|
argsCount: args.length,
|
|
219
|
-
hasRunCommandFunction: _runCommand !== undefined,
|
|
220
229
|
});
|
|
221
230
|
commands.push({ command: name, args });
|
|
222
231
|
return pipeline;
|
|
@@ -228,12 +237,8 @@ const createPipeline = (settings, _runCommand) => {
|
|
|
228
237
|
return Reflect.get(obj, prop);
|
|
229
238
|
if (prop in obj)
|
|
230
239
|
return Reflect.get(obj, prop);
|
|
231
|
-
Logger.debug('[redis][proxy][pipeline] Property access in pipeline', {
|
|
232
|
-
property: prop,
|
|
233
|
-
currentCommandCount: commands.length,
|
|
234
|
-
});
|
|
235
240
|
return (...args) => {
|
|
236
|
-
commands.push({ command: prop
|
|
241
|
+
commands.push({ command: prop, args });
|
|
237
242
|
return pipeline;
|
|
238
243
|
};
|
|
239
244
|
},
|
|
@@ -245,45 +250,19 @@ export const resolveRedisTransportMode = () => {
|
|
|
245
250
|
? 'proxy'
|
|
246
251
|
: 'direct';
|
|
247
252
|
};
|
|
248
|
-
const
|
|
249
|
-
|
|
250
|
-
commandName: name,
|
|
251
|
-
numberOfKeys: definition.numberOfKeys,
|
|
252
|
-
luaLength: definition.lua.length,
|
|
253
|
-
luaPreview: definition.lua.substring(0, 100) + '...',
|
|
254
|
-
});
|
|
255
|
-
};
|
|
256
|
-
const storeScript = (scripts, name, definition) => {
|
|
257
|
-
scripts.set(name, {
|
|
258
|
-
numberOfKeys: definition.numberOfKeys,
|
|
259
|
-
lua: definition.lua,
|
|
260
|
-
});
|
|
261
|
-
Logger.debug('[redis][proxy][bullmq] Script stored', {
|
|
262
|
-
commandName: name,
|
|
263
|
-
totalScripts: scripts.size,
|
|
264
|
-
allScriptNames: Array.from(scripts.keys()),
|
|
265
|
-
});
|
|
253
|
+
const createCommandFunction = (settings, command) => {
|
|
254
|
+
return async (...args) => requestProxyCommand(settings, command, { args });
|
|
266
255
|
};
|
|
267
|
-
const
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
256
|
+
const createScriptsHandler = (settings) => {
|
|
257
|
+
return new Proxy({}, {
|
|
258
|
+
get(_target, prop) {
|
|
259
|
+
if (typeof prop !== 'string')
|
|
260
|
+
return undefined;
|
|
261
|
+
return async (...args) => requestProxyCommand(settings, prop, { args });
|
|
262
|
+
},
|
|
273
263
|
});
|
|
274
|
-
return requestProxyCommand(settings, 'EVAL', [script.lua, script.numberOfKeys, ...args]);
|
|
275
264
|
};
|
|
276
|
-
const
|
|
277
|
-
return async (...args) => {
|
|
278
|
-
Logger.debug('[redis][proxy][trap] Executing unknown property as command', {
|
|
279
|
-
property: prop,
|
|
280
|
-
argsCount: args.length,
|
|
281
|
-
args: args.slice(0, 3),
|
|
282
|
-
});
|
|
283
|
-
return requestProxyCommand(settings, typeof prop === 'string' ? prop.toUpperCase() : String(prop), args);
|
|
284
|
-
};
|
|
285
|
-
};
|
|
286
|
-
const handlePropertyAccess = (obj, prop, scripts, client, settings) => {
|
|
265
|
+
const handlePropertyAccess = (obj, prop, client, settings) => {
|
|
287
266
|
if (typeof prop !== 'string')
|
|
288
267
|
return Reflect.get(obj, prop);
|
|
289
268
|
if (prop === 'then')
|
|
@@ -299,26 +278,11 @@ const handlePropertyAccess = (obj, prop, scripts, client, settings) => {
|
|
|
299
278
|
};
|
|
300
279
|
}
|
|
301
280
|
if (prop in obj) {
|
|
302
|
-
Logger.debug('[redis][proxy][trap] Property access on target object', {
|
|
303
|
-
property: prop,
|
|
304
|
-
hasScript: scripts.has(prop),
|
|
305
|
-
});
|
|
306
|
-
return Reflect.get(obj, prop);
|
|
307
|
-
}
|
|
308
|
-
// Log when BullMQ accesses unknown properties (potential versioned commands)
|
|
309
|
-
Logger.debug('[redis][proxy][trap] Unknown property access - potential BullMQ command', {
|
|
310
|
-
property: prop,
|
|
311
|
-
propertyType: typeof prop,
|
|
312
|
-
hasScript: typeof prop === 'string' ? scripts.has(prop) : false,
|
|
313
|
-
availableScripts: Array.from(scripts.keys()),
|
|
314
|
-
isVersionedCommand: typeof prop === 'string' ? prop.includes(':') : false,
|
|
315
|
-
});
|
|
316
|
-
if (typeof prop !== 'string') {
|
|
317
281
|
return Reflect.get(obj, prop);
|
|
318
282
|
}
|
|
319
283
|
return createCommandFunction(settings, prop);
|
|
320
284
|
};
|
|
321
|
-
const createProxyTarget = (config, options,
|
|
285
|
+
const createProxyTarget = (config, options, settings, client) => {
|
|
322
286
|
const target = {
|
|
323
287
|
__bullmq_iredis: true,
|
|
324
288
|
isCluster: false,
|
|
@@ -330,66 +294,36 @@ const createProxyTarget = (config, options, scripts, runDefinedCommand, settings
|
|
|
330
294
|
disconnect: () => undefined,
|
|
331
295
|
duplicate: () => createRedisProxyConnection(config, options),
|
|
332
296
|
defineCommand: (name, definition) => {
|
|
333
|
-
|
|
334
|
-
|
|
297
|
+
Logger.debug('[redis][proxy][bullmq] defineCommand ignored on frontend proxy', {
|
|
298
|
+
commandName: name,
|
|
299
|
+
numberOfKeys: definition.numberOfKeys,
|
|
300
|
+
});
|
|
335
301
|
},
|
|
336
|
-
runCommand: async (name, args) =>
|
|
302
|
+
runCommand: async (name, args) => requestProxyCommand(settings, name, { args }),
|
|
337
303
|
on: (_event, _handler) => client ?? target,
|
|
338
304
|
once: (_event, _handler) => client ?? target,
|
|
339
305
|
off: (_event, _handler) => client ?? target,
|
|
340
306
|
removeListener: (_event, _handler) => client ?? target,
|
|
341
307
|
setMaxListeners: (_count) => client ?? target,
|
|
342
308
|
getMaxListeners: () => Infinity,
|
|
343
|
-
call: async (command, ...args) => {
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
hasScript: scripts.has(command),
|
|
348
|
-
isVersionedCommand: command.includes(':'),
|
|
349
|
-
args: args.slice(0, 3),
|
|
350
|
-
});
|
|
351
|
-
return requestProxyCommand(settings, command, args);
|
|
352
|
-
},
|
|
353
|
-
pipeline: () => createPipeline(settings, runDefinedCommand),
|
|
354
|
-
multi: () => createPipeline(settings, runDefinedCommand),
|
|
309
|
+
call: async (command, ...args) => requestProxyCommand(settings, command, { args }),
|
|
310
|
+
scripts: createScriptsHandler(settings),
|
|
311
|
+
pipeline: () => createPipeline(settings),
|
|
312
|
+
multi: () => createPipeline(settings),
|
|
355
313
|
scanStream: (scanOptions) => createScanStream(settings, scanOptions),
|
|
356
314
|
};
|
|
357
315
|
return target;
|
|
358
316
|
};
|
|
359
317
|
export const createRedisProxyConnection = (config, options) => {
|
|
360
|
-
const settings = resolveProxySettings();
|
|
361
|
-
const scripts = new Map();
|
|
362
|
-
const runDefinedCommand = async (name, args) => {
|
|
363
|
-
Logger.debug('[redis][proxy][bullmq] runDefinedCommand called', {
|
|
364
|
-
commandName: name,
|
|
365
|
-
argsCount: args.length,
|
|
366
|
-
hasScript: scripts.has(name),
|
|
367
|
-
scriptKeys: Array.from(scripts.keys()),
|
|
368
|
-
});
|
|
369
|
-
const script = scripts.get(name);
|
|
370
|
-
if (script === undefined) {
|
|
371
|
-
Logger.warn('[redis][proxy][bullmq] Script not found, falling back to direct proxy call', {
|
|
372
|
-
commandName: name,
|
|
373
|
-
availableScripts: Array.from(scripts.keys()),
|
|
374
|
-
});
|
|
375
|
-
return requestProxyCommand(settings, name, args);
|
|
376
|
-
}
|
|
377
|
-
return executeScriptViaEval(settings, name, script, args);
|
|
378
|
-
};
|
|
318
|
+
const settings = resolveProxySettings(options);
|
|
379
319
|
logTransportSelection('proxy', config, options);
|
|
380
|
-
Logger.info('[redis][proxy]
|
|
381
|
-
|
|
382
|
-
hasIsClusterFlag: true,
|
|
383
|
-
hasOptionsFlag: true,
|
|
384
|
-
hasDuplicateMethod: true,
|
|
385
|
-
hasDefineCommandMethod: true,
|
|
386
|
-
hasRunCommandMethod: true,
|
|
387
|
-
hasMultiMethod: true,
|
|
320
|
+
Logger.info('[redis][proxy] Creating opaque proxy connection', {
|
|
321
|
+
transport: 'BullMQ',
|
|
388
322
|
});
|
|
389
|
-
const proxyTarget = createProxyTarget(config, options,
|
|
323
|
+
const proxyTarget = createProxyTarget(config, options, settings, null);
|
|
390
324
|
const client = new Proxy(proxyTarget, {
|
|
391
325
|
get(obj, prop) {
|
|
392
|
-
return handlePropertyAccess(obj, prop,
|
|
326
|
+
return handlePropertyAccess(obj, prop, client, settings);
|
|
393
327
|
},
|
|
394
328
|
});
|
|
395
329
|
return client;
|