@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zintrust/core",
3
- "version": "2.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": "^5.12.1",
218
+ "redis": "^6.0.0",
219
219
  "tsx": "^4.22.3"
220
220
  },
221
221
  "overrides": {
@@ -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;
@@ -1 +1 @@
1
- {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../src/config/env.ts"],"names":[],"mappings":"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"}
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, Paginator } from './database/Paginator';
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 { InsertResult, IQueryBuilder, PaginationOptions } from './orm/QueryBuilder';
28
+ export type { IQueryBuilder, InsertResult, PaginationOptions } from './orm/QueryBuilder';
29
29
  export type { IRelationship } from './orm/Relationships';
30
- export { BodyParsers, bodyParsingMiddleware, BulletproofAuthMiddleware, Controller, CsrfMiddleware, ErrorHandlerMiddleware, FileUpload, fileUploadMiddleware, getValidatedBody, getValidatedHeaders, getValidatedParams, getValidatedQuery, hasValidatedBody, Kernel, LoggingMiddleware, MiddlewareStack, MultipartParser, RateLimiter, Request, RequestContext, requireValidatedBody, Response, SecurityMiddleware, SessionMiddleware, ValidationHelper, ValidationMiddleware, } from './runtime-index.js';
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 { normalizeRouteMeta, RouteRegistry } from './routes/RouteRegistry';
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, RemoteSignedJson, Utilities, } from './runtime-index.js';
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 { collect, Collection } from './collections/index';
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 { createSanitizer, Sanitizer, type SanitizerType } from './security/Sanitizer';
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 { detectCloudflareWorkers, detectRuntimePlatform, RUNTIME_PLATFORM, RuntimeServices, type RuntimeCrypto, type RuntimeEnvReader, type RuntimeFs, type RuntimePlatform, type RuntimeServices as RuntimeServicesType, type RuntimeTimers, } from './runtime/RuntimeServices';
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, MiddlewareKeys } from './config/middleware';
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 { getDatabaseCredentials, getJwtSecrets, SECRETS, SecretsManager, } from './config/SecretsManager';
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, RedisKeys, type RedisKeyType, } from './tools/redis/RedisKeyManager';
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';
@@ -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
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-28T12:49:02.769Z
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-28T12:49:02.707Z'; // Replaced during build
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, Paginator } from './database/Paginator.js';
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, bodyParsingMiddleware, BulletproofAuthMiddleware, Controller, CsrfMiddleware, ErrorHandlerMiddleware, FileUpload, fileUploadMiddleware, getValidatedBody, getValidatedHeaders, getValidatedParams, getValidatedQuery, hasValidatedBody, Kernel, LoggingMiddleware, MiddlewareStack, MultipartParser, RateLimiter, Request, RequestContext, requireValidatedBody, Response, SecurityMiddleware, SessionMiddleware, ValidationHelper, ValidationMiddleware, } from './runtime-index.js';
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 { normalizeRouteMeta, RouteRegistry } from './routes/RouteRegistry.js';
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, RemoteSignedJson, Utilities, } from './runtime-index.js';
53
+ export { ContextLoader, RemoteSignedJson, Utilities, delay, ensureDirSafe, generateSecureJobId, generateUuid, getString, } from './runtime-index.js';
54
54
  // Collections
55
- export { collect, Collection } from './collections/index.js';
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 { createSanitizer, Sanitizer } from './security/Sanitizer.js';
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 { detectCloudflareWorkers, detectRuntimePlatform, RUNTIME_PLATFORM, RuntimeServices, } from './runtime/RuntimeServices.js';
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, MiddlewareKeys } from './config/middleware.js';
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 { getDatabaseCredentials, getJwtSecrets, SECRETS, SecretsManager, } from './config/SecretsManager.js';
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, RedisKeys, } from './tools/redis/RedisKeyManager.js';
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;AAiBjC,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;AA2NL,eAAO,MAAM,gBAAgB;sBACJ,cAAc,GAAQ,OAAO,CAAC,IAAI,CAAC;EAqB1D,CAAC;AAEH,eAAe,gBAAgB,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 { ErrorHandler } from '../ErrorHandler.js';
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
- const mod = await import('ioredis');
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 executeCommand = async (client, command, args) => {
94
- const trimmed = command.trim();
95
- const lower = trimmed.toLowerCase();
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 candidate.apply(client, args);
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(trimmed, ...args);
180
+ return { status: 200, body: { result: await client.call(action.trim(), ...args) } };
102
181
  }
103
- throw ErrorFactory.createValidationError(`Unsupported Redis command: ${trimmed}`);
182
+ throw ErrorFactory.createValidationError(`Unsupported Redis command: ${action}`);
104
183
  };
105
- const createBackend = (config) => ({
106
- name: 'redis',
107
- handle: async (request) => {
108
- const methodError = RequestValidator.requirePost(request.method);
109
- if (methodError) {
110
- return {
111
- status: 405,
112
- body: { code: methodError.code, message: methodError.message },
113
- };
114
- }
115
- if (request.path !== '/zin/redis/command') {
116
- return { status: 404, body: { code: 'NOT_FOUND', message: 'Unknown endpoint' } };
117
- }
118
- const parsed = RequestValidator.parseJson(request.body);
119
- if (!parsed.ok) {
120
- return { status: 400, body: { code: parsed.error.code, message: parsed.error.message } };
121
- }
122
- const validated = validateCommandPayload(parsed.value);
123
- if (!validated.valid) {
124
- return {
125
- status: 400,
126
- body: {
127
- code: validated.error?.code ?? 'VALIDATION_ERROR',
128
- message: validated.error?.message ?? 'Invalid request',
129
- },
130
- };
131
- }
132
- const command = validated.command ?? '';
133
- if (command.trim() === '') {
134
- return {
135
- status: 400,
136
- body: { code: 'VALIDATION_ERROR', message: 'command is required' },
137
- };
138
- }
139
- try {
140
- const client = await createClient(config);
141
- try {
142
- const startedAt = Date.now();
143
- const result = await executeCommand(client, command, validated.args ?? []);
144
- SystemTraceBridge.emitRedis(command, Date.now() - startedAt);
145
- return { status: 200, body: { result } };
146
- }
147
- finally {
148
- await client.quit();
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
- health: async () => {
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 executeCommand(client, 'PING', []);
244
+ await handleStandardRedisCommand(client, 'PING', []);
164
245
  }
165
- await client.quit();
166
246
  return { status: 200, body: { status: 'healthy' } };
167
247
  }
168
- catch (error) {
169
- Logger.warn('[RedisProxyServer] health check failed', error);
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;
@@ -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
@@ -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":"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"}
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 resolveProxySettings = () => ({
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, command, args) => {
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 body = JSON.stringify({ command, args });
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
- 'MATCH',
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, _runCommand) => {
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.toUpperCase(), args });
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 logDefineCommandCall = (name, definition) => {
249
- Logger.debug('[redis][proxy][bullmq] defineCommand called', {
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 executeScriptViaEval = async (settings, name, script, args) => {
268
- Logger.debug('[redis][proxy][bullmq] Executing script via EVAL', {
269
- commandName: name,
270
- numberOfKeys: script.numberOfKeys,
271
- luaLength: script.lua.length,
272
- args: args.slice(0, 3), // Log first 3 args to avoid huge logs
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 createCommandFunction = (settings, prop) => {
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, scripts, runDefinedCommand, settings, client) => {
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
- logDefineCommandCall(name, definition);
334
- storeScript(scripts, name, definition);
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) => runDefinedCommand(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
- Logger.debug('[redis][proxy][call] Direct call method invoked', {
345
- command,
346
- argsCount: args.length,
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][bullmq] Creating BullMQ-compatible proxy connection', {
381
- hasBullMQFlag: true,
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, scripts, runDefinedCommand, settings, null);
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, scripts, client, settings);
326
+ return handlePropertyAccess(obj, prop, client, settings);
393
327
  },
394
328
  });
395
329
  return client;