@zintrust/core 0.1.40 → 0.1.41

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.
Files changed (460) hide show
  1. package/bin/zintrust-main.d.ts.map +1 -1
  2. package/bin/zintrust-main.js +22 -1
  3. package/package.json +8 -4
  4. package/public/error-pages/404.html +2 -2
  5. package/src/auth/Auth.js +1 -1
  6. package/src/boot/Application.d.ts +1 -16
  7. package/src/boot/Application.d.ts.map +1 -1
  8. package/src/boot/Application.js +2 -290
  9. package/src/boot/Server.d.ts +1 -1
  10. package/src/boot/Server.d.ts.map +1 -1
  11. package/src/boot/bootstrap.js +23 -5
  12. package/src/boot/registry/registerRoute.d.ts +6 -0
  13. package/src/boot/registry/registerRoute.d.ts.map +1 -0
  14. package/src/boot/registry/registerRoute.js +96 -0
  15. package/src/boot/registry/runtime.d.ts +15 -0
  16. package/src/boot/registry/runtime.d.ts.map +1 -0
  17. package/src/boot/registry/runtime.js +353 -0
  18. package/src/boot/registry/type.d.ts +25 -0
  19. package/src/boot/registry/type.d.ts.map +1 -0
  20. package/src/boot/registry/type.js +1 -0
  21. package/src/boot/registry/worker.d.ts +6 -0
  22. package/src/boot/registry/worker.d.ts.map +1 -0
  23. package/src/boot/registry/worker.js +35 -0
  24. package/src/cache/drivers/KVRemoteDriver.d.ts.map +1 -1
  25. package/src/cache/drivers/KVRemoteDriver.js +14 -1
  26. package/src/cli/CLI.d.ts.map +1 -1
  27. package/src/cli/CLI.js +82 -34
  28. package/src/cli/ErrorHandler.js +1 -1
  29. package/src/cli/commands/ContainerProxiesCommand.d.ts +5 -0
  30. package/src/cli/commands/ContainerProxiesCommand.d.ts.map +1 -0
  31. package/src/cli/commands/ContainerProxiesCommand.js +77 -0
  32. package/src/cli/commands/ContainerWorkersCommand.d.ts +5 -0
  33. package/src/cli/commands/ContainerWorkersCommand.d.ts.map +1 -0
  34. package/src/cli/commands/ContainerWorkersCommand.js +57 -0
  35. package/src/cli/commands/DeployCommand.d.ts +16 -0
  36. package/src/cli/commands/DeployCommand.d.ts.map +1 -0
  37. package/src/cli/commands/DeployCommand.js +110 -0
  38. package/src/cli/commands/DeployContainerProxiesCommand.d.ts +5 -0
  39. package/src/cli/commands/DeployContainerProxiesCommand.d.ts.map +1 -0
  40. package/src/cli/commands/DeployContainerProxiesCommand.js +27 -0
  41. package/src/cli/commands/DeployContainerWorkersCommand.d.ts +5 -0
  42. package/src/cli/commands/DeployContainerWorkersCommand.d.ts.map +1 -0
  43. package/src/cli/commands/DeployContainerWorkersCommand.js +27 -0
  44. package/src/cli/commands/DockerComposeCommandUtils.d.ts +3 -0
  45. package/src/cli/commands/DockerComposeCommandUtils.d.ts.map +1 -0
  46. package/src/cli/commands/DockerComposeCommandUtils.js +34 -0
  47. package/src/cli/commands/DoctorArchitectureCommand.d.ts +5 -0
  48. package/src/cli/commands/DoctorArchitectureCommand.d.ts.map +1 -0
  49. package/src/cli/commands/DoctorArchitectureCommand.js +54 -0
  50. package/src/cli/commands/InitContainerCommand.d.ts +5 -0
  51. package/src/cli/commands/InitContainerCommand.d.ts.map +1 -0
  52. package/src/cli/commands/InitContainerCommand.js +216 -0
  53. package/src/cli/commands/InitProducerCommand.d.ts +5 -0
  54. package/src/cli/commands/InitProducerCommand.d.ts.map +1 -0
  55. package/src/cli/commands/InitProducerCommand.js +47 -0
  56. package/src/cli/commands/InitProxyCommand.d.ts +5 -0
  57. package/src/cli/commands/InitProxyCommand.d.ts.map +1 -0
  58. package/src/cli/commands/InitProxyCommand.js +442 -0
  59. package/src/cli/commands/MongoDBProxyCommand.d.ts +5 -0
  60. package/src/cli/commands/MongoDBProxyCommand.d.ts.map +1 -0
  61. package/src/cli/commands/MongoDBProxyCommand.js +98 -0
  62. package/src/cli/commands/MySqlProxyCommand.d.ts +6 -0
  63. package/src/cli/commands/MySqlProxyCommand.d.ts.map +1 -0
  64. package/src/cli/commands/MySqlProxyCommand.js +32 -0
  65. package/src/cli/commands/PostgresProxyCommand.d.ts +6 -0
  66. package/src/cli/commands/PostgresProxyCommand.d.ts.map +1 -0
  67. package/src/cli/commands/PostgresProxyCommand.js +32 -0
  68. package/src/cli/commands/ProxyCommand.d.ts +12 -0
  69. package/src/cli/commands/ProxyCommand.d.ts.map +1 -0
  70. package/src/cli/commands/ProxyCommand.js +80 -0
  71. package/src/cli/commands/ProxyCommandUtils.d.ts +6 -0
  72. package/src/cli/commands/ProxyCommandUtils.d.ts.map +1 -0
  73. package/src/cli/commands/ProxyCommandUtils.js +38 -0
  74. package/src/cli/commands/QueueRecoveryCommand.d.ts +6 -0
  75. package/src/cli/commands/QueueRecoveryCommand.d.ts.map +1 -0
  76. package/src/cli/commands/QueueRecoveryCommand.js +513 -0
  77. package/src/cli/commands/RedisProxyCommand.d.ts +6 -0
  78. package/src/cli/commands/RedisProxyCommand.d.ts.map +1 -0
  79. package/src/cli/commands/RedisProxyCommand.js +53 -0
  80. package/src/cli/commands/SmtpProxyCommand.d.ts +6 -0
  81. package/src/cli/commands/SmtpProxyCommand.d.ts.map +1 -0
  82. package/src/cli/commands/SmtpProxyCommand.js +56 -0
  83. package/src/cli/commands/SqlProxyCommandUtils.d.ts +46 -0
  84. package/src/cli/commands/SqlProxyCommandUtils.d.ts.map +1 -0
  85. package/src/cli/commands/SqlProxyCommandUtils.js +48 -0
  86. package/src/cli/commands/SqlServerProxyCommand.d.ts +5 -0
  87. package/src/cli/commands/SqlServerProxyCommand.d.ts.map +1 -0
  88. package/src/cli/commands/SqlServerProxyCommand.js +85 -0
  89. package/src/cli/commands/StartCommand.d.ts.map +1 -1
  90. package/src/cli/commands/StartCommand.js +132 -17
  91. package/src/cli/commands/WorkerCommands.d.ts +1 -0
  92. package/src/cli/commands/WorkerCommands.d.ts.map +1 -1
  93. package/src/cli/commands/WorkerCommands.js +140 -6
  94. package/src/cli/commands/index.d.ts +2 -0
  95. package/src/cli/commands/index.d.ts.map +1 -1
  96. package/src/cli/commands/index.js +2 -0
  97. package/src/cli/commands/runner/index.d.ts +2 -2
  98. package/src/cli/commands/runner/index.d.ts.map +1 -1
  99. package/src/cli/commands/runner/index.js +15 -4
  100. package/src/cli/d1/D1SqlMigrations.d.ts.map +1 -1
  101. package/src/cli/d1/D1SqlMigrations.js +3 -0
  102. package/src/cli/index.d.ts +4 -0
  103. package/src/cli/index.d.ts.map +1 -1
  104. package/src/cli/index.js +4 -0
  105. package/src/cli/scaffolding/ProjectScaffolder.d.ts.map +1 -1
  106. package/src/cli/scaffolding/ProjectScaffolder.js +2 -0
  107. package/src/cli/scaffolding/ServiceScaffolder.d.ts.map +1 -1
  108. package/src/cli/scaffolding/ServiceScaffolder.js +1 -0
  109. package/src/cli/utils/EnvFileLoader.js +16 -15
  110. package/src/cli/workers/QueueWorkRunner.js +1 -1
  111. package/src/common/HealthRoutes.d.ts.map +1 -1
  112. package/src/common/HealthRoutes.js +50 -2
  113. package/src/common/RemoteSignedJson.d.ts +1 -0
  114. package/src/common/RemoteSignedJson.d.ts.map +1 -1
  115. package/src/common/RemoteSignedJson.js +39 -13
  116. package/src/common/index.d.ts +1 -0
  117. package/src/common/index.d.ts.map +1 -1
  118. package/src/common/index.js +12 -1
  119. package/src/config/FileLogWriter.d.ts.map +1 -1
  120. package/src/config/FileLogWriter.js +21 -6
  121. package/src/config/app.d.ts +4 -0
  122. package/src/config/app.d.ts.map +1 -1
  123. package/src/config/app.js +4 -0
  124. package/src/config/cache.d.ts.map +1 -1
  125. package/src/config/cache.js +22 -2
  126. package/src/config/cloudflare.d.ts +5 -1
  127. package/src/config/cloudflare.d.ts.map +1 -1
  128. package/src/config/cloudflare.js +48 -0
  129. package/src/config/database.d.ts.map +1 -1
  130. package/src/config/database.js +48 -13
  131. package/src/config/env.d.ts +87 -2
  132. package/src/config/env.d.ts.map +1 -1
  133. package/src/config/env.js +156 -17
  134. package/src/config/index.d.ts +1 -0
  135. package/src/config/index.d.ts.map +1 -1
  136. package/src/config/mail.d.ts.map +1 -1
  137. package/src/config/mail.js +16 -10
  138. package/src/config/middleware.d.ts +5 -0
  139. package/src/config/middleware.d.ts.map +1 -1
  140. package/src/config/middleware.js +19 -1
  141. package/src/config/queue.d.ts.map +1 -1
  142. package/src/config/queue.js +70 -9
  143. package/src/config/redis.d.ts.map +1 -1
  144. package/src/config/redis.js +48 -13
  145. package/src/config/storage.d.ts.map +1 -1
  146. package/src/config/storage.js +1 -0
  147. package/src/config/type.d.ts +18 -0
  148. package/src/config/type.d.ts.map +1 -1
  149. package/src/config/workers.d.ts.map +1 -1
  150. package/src/config/workers.js +122 -16
  151. package/src/functions/cloudflare.d.ts.map +1 -1
  152. package/src/functions/cloudflare.js +55 -1
  153. package/src/health/StartupHealthChecks.js +1 -1
  154. package/src/http/FileUpload.d.ts +3 -2
  155. package/src/http/FileUpload.d.ts.map +1 -1
  156. package/src/http/Kernel.d.ts.map +1 -1
  157. package/src/http/Kernel.js +2 -1
  158. package/src/http/error-pages/ErrorPageRenderer.d.ts +4 -0
  159. package/src/http/error-pages/ErrorPageRenderer.d.ts.map +1 -1
  160. package/src/http/error-pages/ErrorPageRenderer.js +141 -1
  161. package/src/http/middleware/BodyParsingMiddleware.d.ts.map +1 -1
  162. package/src/http/middleware/BodyParsingMiddleware.js +33 -6
  163. package/src/index.d.ts +25 -53
  164. package/src/index.d.ts.map +1 -1
  165. package/src/index.js +30 -14
  166. package/src/microservices/ServiceAuthMiddleware.d.ts.map +1 -1
  167. package/src/microservices/ServiceAuthMiddleware.js +12 -4
  168. package/src/middleware/CsrfMiddleware.d.ts.map +1 -1
  169. package/src/middleware/CsrfMiddleware.js +30 -16
  170. package/src/middleware/ErrorHandlerMiddleware.d.ts.map +1 -1
  171. package/src/middleware/ErrorHandlerMiddleware.js +2 -1
  172. package/src/migrations/MigrationLoader.js +1 -1
  173. package/src/migrations/schema/SchemaCompiler.d.ts.map +1 -1
  174. package/src/migrations/schema/SchemaCompiler.js +6 -3
  175. package/src/node-singletons/crypto.d.ts +1 -1
  176. package/src/node-singletons/crypto.d.ts.map +1 -1
  177. package/src/node-singletons/crypto.js +1 -1
  178. package/src/node-singletons/fs.d.ts +1 -1
  179. package/src/node-singletons/fs.d.ts.map +1 -1
  180. package/src/node-singletons/path.d.ts +1 -1
  181. package/src/node-singletons/path.d.ts.map +1 -1
  182. package/src/node-singletons/path.js +1 -1
  183. package/src/node-singletons/stream.d.ts +11 -0
  184. package/src/node-singletons/stream.d.ts.map +1 -0
  185. package/src/node-singletons/stream.js +8 -0
  186. package/src/observability/OpenTelemetry.d.ts +7 -0
  187. package/src/observability/OpenTelemetry.d.ts.map +1 -1
  188. package/src/observability/OpenTelemetry.js +49 -2
  189. package/src/orm/Database.d.ts +4 -0
  190. package/src/orm/Database.d.ts.map +1 -1
  191. package/src/orm/Database.js +80 -9
  192. package/src/orm/DatabaseRuntimeRegistration.d.ts.map +1 -1
  193. package/src/orm/DatabaseRuntimeRegistration.js +2 -0
  194. package/src/orm/QueryBuilder.d.ts +1 -0
  195. package/src/orm/QueryBuilder.d.ts.map +1 -1
  196. package/src/orm/QueryBuilder.js +33 -3
  197. package/src/orm/SchemaCompiler.d.ts.map +1 -1
  198. package/src/orm/SchemaCompiler.js +6 -3
  199. package/src/orm/adapters/D1RemoteAdapter.d.ts.map +1 -1
  200. package/src/orm/adapters/D1RemoteAdapter.js +14 -1
  201. package/src/orm/adapters/MongoDBProxyAdapter.d.ts +3 -0
  202. package/src/orm/adapters/MongoDBProxyAdapter.d.ts.map +1 -0
  203. package/src/orm/adapters/MongoDBProxyAdapter.js +128 -0
  204. package/src/orm/adapters/MySQLProxyAdapter.d.ts +11 -0
  205. package/src/orm/adapters/MySQLProxyAdapter.d.ts.map +1 -0
  206. package/src/orm/adapters/MySQLProxyAdapter.js +143 -0
  207. package/src/orm/adapters/PostgreSQLProxyAdapter.d.ts +11 -0
  208. package/src/orm/adapters/PostgreSQLProxyAdapter.d.ts.map +1 -0
  209. package/src/orm/adapters/PostgreSQLProxyAdapter.js +147 -0
  210. package/src/orm/adapters/ProxyCache.d.ts +9 -0
  211. package/src/orm/adapters/ProxyCache.d.ts.map +1 -0
  212. package/src/orm/adapters/ProxyCache.js +24 -0
  213. package/src/orm/adapters/ProxySignedRequest.d.ts +11 -0
  214. package/src/orm/adapters/ProxySignedRequest.d.ts.map +1 -0
  215. package/src/orm/adapters/ProxySignedRequest.js +30 -0
  216. package/src/orm/adapters/ProxySigningPath.d.ts +3 -0
  217. package/src/orm/adapters/ProxySigningPath.d.ts.map +1 -0
  218. package/src/orm/adapters/ProxySigningPath.js +25 -0
  219. package/src/orm/adapters/SqlProxyAdapterUtils.d.ts +19 -0
  220. package/src/orm/adapters/SqlProxyAdapterUtils.d.ts.map +1 -0
  221. package/src/orm/adapters/SqlProxyAdapterUtils.js +35 -0
  222. package/src/orm/adapters/SqlServerProxyAdapter.d.ts +3 -0
  223. package/src/orm/adapters/SqlServerProxyAdapter.d.ts.map +1 -0
  224. package/src/orm/adapters/SqlServerProxyAdapter.js +146 -0
  225. package/src/performance/Optimizer.d.ts +1 -0
  226. package/src/performance/Optimizer.d.ts.map +1 -1
  227. package/src/performance/Optimizer.js +21 -8
  228. package/src/proxy/ErrorHandler.d.ts +11 -0
  229. package/src/proxy/ErrorHandler.d.ts.map +1 -0
  230. package/src/proxy/ErrorHandler.js +7 -0
  231. package/src/proxy/PoolManager.d.ts +8 -0
  232. package/src/proxy/PoolManager.d.ts.map +1 -0
  233. package/src/proxy/PoolManager.js +18 -0
  234. package/src/proxy/ProxyBackend.d.ts +18 -0
  235. package/src/proxy/ProxyBackend.d.ts.map +1 -0
  236. package/src/proxy/ProxyBackend.js +1 -0
  237. package/src/proxy/ProxyConfig.d.ts +12 -0
  238. package/src/proxy/ProxyConfig.d.ts.map +1 -0
  239. package/src/proxy/ProxyConfig.js +1 -0
  240. package/src/proxy/ProxyRegistry.d.ts +10 -0
  241. package/src/proxy/ProxyRegistry.d.ts.map +1 -0
  242. package/src/proxy/ProxyRegistry.js +11 -0
  243. package/src/proxy/ProxyServer.d.ts +21 -0
  244. package/src/proxy/ProxyServer.d.ts.map +1 -0
  245. package/src/proxy/ProxyServer.js +84 -0
  246. package/src/proxy/ProxyServerUtils.d.ts +37 -0
  247. package/src/proxy/ProxyServerUtils.d.ts.map +1 -0
  248. package/src/proxy/ProxyServerUtils.js +42 -0
  249. package/src/proxy/ProxySigningConfigResolver.d.ts +22 -0
  250. package/src/proxy/ProxySigningConfigResolver.d.ts.map +1 -0
  251. package/src/proxy/ProxySigningConfigResolver.js +24 -0
  252. package/src/proxy/ProxySigningRequest.d.ts +12 -0
  253. package/src/proxy/ProxySigningRequest.d.ts.map +1 -0
  254. package/src/proxy/ProxySigningRequest.js +31 -0
  255. package/src/proxy/RequestValidator.d.ts +15 -0
  256. package/src/proxy/RequestValidator.d.ts.map +1 -0
  257. package/src/proxy/RequestValidator.js +25 -0
  258. package/src/proxy/SigningService.d.ts +39 -0
  259. package/src/proxy/SigningService.d.ts.map +1 -0
  260. package/src/proxy/SigningService.js +107 -0
  261. package/src/proxy/SqlPayloadValidator.d.ts +13 -0
  262. package/src/proxy/SqlPayloadValidator.d.ts.map +1 -0
  263. package/src/proxy/SqlPayloadValidator.js +14 -0
  264. package/src/proxy/d1/ZintrustD1Proxy.d.ts +2 -0
  265. package/src/proxy/d1/ZintrustD1Proxy.d.ts.map +1 -0
  266. package/src/proxy/d1/ZintrustD1Proxy.js +1 -0
  267. package/src/proxy/d1/register.d.ts +2 -0
  268. package/src/proxy/d1/register.d.ts.map +1 -0
  269. package/src/proxy/d1/register.js +5 -0
  270. package/src/proxy/kv/ZintrustKvProxy.d.ts +2 -0
  271. package/src/proxy/kv/ZintrustKvProxy.d.ts.map +1 -0
  272. package/src/proxy/kv/ZintrustKvProxy.js +1 -0
  273. package/src/proxy/kv/register.d.ts +2 -0
  274. package/src/proxy/kv/register.d.ts.map +1 -0
  275. package/src/proxy/kv/register.js +5 -0
  276. package/src/proxy/mongodb/MongoDBProxyServer.d.ts +33 -0
  277. package/src/proxy/mongodb/MongoDBProxyServer.d.ts.map +1 -0
  278. package/src/proxy/mongodb/MongoDBProxyServer.js +202 -0
  279. package/src/proxy/mongodb/register.d.ts +2 -0
  280. package/src/proxy/mongodb/register.d.ts.map +1 -0
  281. package/src/proxy/mongodb/register.js +5 -0
  282. package/src/proxy/mysql/MySqlProxyServer.d.ts +14 -0
  283. package/src/proxy/mysql/MySqlProxyServer.d.ts.map +1 -0
  284. package/src/proxy/mysql/MySqlProxyServer.js +169 -0
  285. package/src/proxy/mysql/register.d.ts +2 -0
  286. package/src/proxy/mysql/register.d.ts.map +1 -0
  287. package/src/proxy/mysql/register.js +5 -0
  288. package/src/proxy/postgres/PostgresProxyServer.d.ts +14 -0
  289. package/src/proxy/postgres/PostgresProxyServer.d.ts.map +1 -0
  290. package/src/proxy/postgres/PostgresProxyServer.js +140 -0
  291. package/src/proxy/postgres/register.d.ts +2 -0
  292. package/src/proxy/postgres/register.d.ts.map +1 -0
  293. package/src/proxy/postgres/register.js +5 -0
  294. package/src/proxy/redis/RedisProxyServer.d.ts +12 -0
  295. package/src/proxy/redis/RedisProxyServer.d.ts.map +1 -0
  296. package/src/proxy/redis/RedisProxyServer.js +192 -0
  297. package/src/proxy/redis/register.d.ts +2 -0
  298. package/src/proxy/redis/register.d.ts.map +1 -0
  299. package/src/proxy/redis/register.js +5 -0
  300. package/src/proxy/smtp/SmtpProxyServer.d.ts +19 -0
  301. package/src/proxy/smtp/SmtpProxyServer.d.ts.map +1 -0
  302. package/src/proxy/smtp/SmtpProxyServer.js +289 -0
  303. package/src/proxy/smtp/register.d.ts +2 -0
  304. package/src/proxy/smtp/register.d.ts.map +1 -0
  305. package/src/proxy/smtp/register.js +5 -0
  306. package/src/proxy/sqlserver/SqlServerProxyServer.d.ts +14 -0
  307. package/src/proxy/sqlserver/SqlServerProxyServer.d.ts.map +1 -0
  308. package/src/proxy/sqlserver/SqlServerProxyServer.js +168 -0
  309. package/src/proxy/sqlserver/register.d.ts +2 -0
  310. package/src/proxy/sqlserver/register.d.ts.map +1 -0
  311. package/src/proxy/sqlserver/register.js +5 -0
  312. package/src/routes/doc.d.ts.map +1 -1
  313. package/src/routes/doc.js +16 -2
  314. package/src/routes/error.d.ts +5 -4
  315. package/src/routes/error.d.ts.map +1 -1
  316. package/src/routes/error.js +15 -13
  317. package/src/routes/errorPages.d.ts +2 -0
  318. package/src/routes/errorPages.d.ts.map +1 -1
  319. package/src/routes/errorPages.js +144 -4
  320. package/src/runtime/PluginAutoImports.d.ts +1 -0
  321. package/src/runtime/PluginAutoImports.d.ts.map +1 -1
  322. package/src/runtime/PluginAutoImports.js +94 -9
  323. package/src/runtime/RuntimeAdapter.d.ts +8 -9
  324. package/src/runtime/RuntimeAdapter.d.ts.map +1 -1
  325. package/src/runtime/RuntimeAdapter.js +120 -34
  326. package/src/runtime/RuntimeServices.d.ts +47 -0
  327. package/src/runtime/RuntimeServices.d.ts.map +1 -0
  328. package/src/runtime/RuntimeServices.js +164 -0
  329. package/src/runtime/StartupConfigFileRegistry.d.ts +4 -4
  330. package/src/runtime/StartupConfigFileRegistry.d.ts.map +1 -1
  331. package/src/runtime/StartupConfigFileRegistry.js +12 -0
  332. package/src/runtime/WorkerAdapterImports.d.ts +5 -0
  333. package/src/runtime/WorkerAdapterImports.d.ts.map +1 -0
  334. package/src/runtime/WorkerAdapterImports.js +17 -0
  335. package/src/runtime/WorkersModule.d.ts +6 -0
  336. package/src/runtime/WorkersModule.d.ts.map +1 -0
  337. package/src/runtime/WorkersModule.js +278 -0
  338. package/src/runtime/adapters/CloudflareAdapter.d.ts.map +1 -1
  339. package/src/runtime/adapters/CloudflareAdapter.js +19 -2
  340. package/src/runtime/adapters/DenoAdapter.js +1 -0
  341. package/src/runtime/adapters/FargateAdapter.js +1 -1
  342. package/src/runtime/adapters/LambdaAdapter.js +1 -1
  343. package/src/runtime/adapters/NodeServerAdapter.js +1 -1
  344. package/src/runtime/detectRuntime.d.ts +10 -0
  345. package/src/runtime/detectRuntime.d.ts.map +1 -0
  346. package/src/runtime/detectRuntime.js +57 -0
  347. package/src/runtime/useFileLoader.d.ts.map +1 -1
  348. package/src/runtime/useFileLoader.js +16 -0
  349. package/src/scripts/TemplateImportsCheck.js +2 -2
  350. package/src/scripts/TemplateSync.js +3 -4
  351. package/src/security/CsrfTokenManager.d.ts.map +1 -1
  352. package/src/security/CsrfTokenManager.js +12 -0
  353. package/src/security/Hash.d.ts +1 -1
  354. package/src/security/Hash.d.ts.map +1 -1
  355. package/src/security/Hash.js +31 -36
  356. package/src/seeders/SeederLoader.js +1 -1
  357. package/src/session/SessionManager.d.ts +3 -0
  358. package/src/session/SessionManager.d.ts.map +1 -1
  359. package/src/session/SessionManager.js +49 -10
  360. package/src/sockets/CloudflareSocket.d.ts +24 -0
  361. package/src/sockets/CloudflareSocket.d.ts.map +1 -0
  362. package/src/sockets/CloudflareSocket.js +259 -0
  363. package/src/start.d.ts.map +1 -1
  364. package/src/start.js +1 -8
  365. package/src/templates/project/basic/src/zintrust.plugins.wg.ts.tpl +8 -0
  366. package/src/tools/mail/drivers/Smtp.d.ts.map +1 -1
  367. package/src/tools/mail/drivers/Smtp.js +223 -18
  368. package/src/tools/mail/index.d.ts.map +1 -1
  369. package/src/tools/mail/index.js +5 -4
  370. package/src/tools/mail/template-loader.d.ts.map +1 -1
  371. package/src/tools/mail/template-loader.js +197 -29
  372. package/src/tools/mail/templates/auth-password-reset.d.ts +3 -0
  373. package/src/tools/mail/templates/auth-password-reset.d.ts.map +1 -0
  374. package/src/tools/mail/templates/auth-password-reset.js +231 -0
  375. package/src/tools/mail/templates/auth-welcome.d.ts +3 -0
  376. package/src/tools/mail/templates/auth-welcome.d.ts.map +1 -0
  377. package/src/tools/mail/templates/auth-welcome.js +236 -0
  378. package/src/tools/mail/templates/general.d.ts +3 -0
  379. package/src/tools/mail/templates/general.d.ts.map +1 -0
  380. package/src/tools/mail/templates/general.js +109 -0
  381. package/src/tools/mail/templates/index.js +2 -2
  382. package/src/tools/mail/templates/job-completed.d.ts +3 -0
  383. package/src/tools/mail/templates/job-completed.d.ts.map +1 -0
  384. package/src/tools/mail/templates/job-completed.js +188 -0
  385. package/src/tools/mail/templates/notifications-new-comment.d.ts +3 -0
  386. package/src/tools/mail/templates/notifications-new-comment.d.ts.map +1 -0
  387. package/src/tools/mail/templates/notifications-new-comment.js +228 -0
  388. package/src/tools/mail/templates/password-reset.d.ts +3 -0
  389. package/src/tools/mail/templates/password-reset.d.ts.map +1 -0
  390. package/src/tools/mail/templates/password-reset.js +221 -0
  391. package/src/tools/mail/templates/performance-report.d.ts +3 -0
  392. package/src/tools/mail/templates/performance-report.d.ts.map +1 -0
  393. package/src/tools/mail/templates/performance-report.js +258 -0
  394. package/src/tools/mail/templates/welcome.d.ts +3 -0
  395. package/src/tools/mail/templates/welcome.d.ts.map +1 -0
  396. package/src/tools/mail/templates/welcome.js +187 -0
  397. package/src/tools/mail/templates/worker-alert.d.ts +3 -0
  398. package/src/tools/mail/templates/worker-alert.d.ts.map +1 -0
  399. package/src/tools/mail/templates/worker-alert.js +229 -0
  400. package/src/tools/notification/Notification.js +1 -1
  401. package/src/tools/notification/testingHelpers.js +6 -5
  402. package/src/tools/queue/AdvancedQueue.js +2 -6
  403. package/src/tools/queue/IdempotencyManager.d.ts +6 -0
  404. package/src/tools/queue/IdempotencyManager.d.ts.map +1 -0
  405. package/src/tools/queue/IdempotencyManager.js +36 -0
  406. package/src/tools/queue/JobHeartbeatStore.d.ts +16 -0
  407. package/src/tools/queue/JobHeartbeatStore.d.ts.map +1 -0
  408. package/src/tools/queue/JobHeartbeatStore.js +67 -0
  409. package/src/tools/queue/JobReconciliationRunner.d.ts +16 -0
  410. package/src/tools/queue/JobReconciliationRunner.d.ts.map +1 -0
  411. package/src/tools/queue/JobReconciliationRunner.js +88 -0
  412. package/src/tools/queue/JobRecoveryDaemon.d.ts +27 -0
  413. package/src/tools/queue/JobRecoveryDaemon.d.ts.map +1 -0
  414. package/src/tools/queue/JobRecoveryDaemon.js +205 -0
  415. package/src/tools/queue/JobStateTracker.d.ts +131 -0
  416. package/src/tools/queue/JobStateTracker.d.ts.map +1 -0
  417. package/src/tools/queue/JobStateTracker.js +387 -0
  418. package/src/tools/queue/JobStateTrackerDbPersistence.d.ts +12 -0
  419. package/src/tools/queue/JobStateTrackerDbPersistence.d.ts.map +1 -0
  420. package/src/tools/queue/JobStateTrackerDbPersistence.js +148 -0
  421. package/src/tools/queue/Queue.d.ts.map +1 -1
  422. package/src/tools/queue/Queue.js +160 -16
  423. package/src/tools/queue/QueueDataRedactor.d.ts +6 -0
  424. package/src/tools/queue/QueueDataRedactor.d.ts.map +1 -0
  425. package/src/tools/queue/QueueDataRedactor.js +45 -0
  426. package/src/tools/queue/QueueExtensions.d.ts.map +1 -1
  427. package/src/tools/queue/QueueExtensions.js +2 -1
  428. package/src/tools/queue/QueueReliabilityMetrics.d.ts +38 -0
  429. package/src/tools/queue/QueueReliabilityMetrics.d.ts.map +1 -0
  430. package/src/tools/queue/QueueReliabilityMetrics.js +131 -0
  431. package/src/tools/queue/QueueReliabilityOrchestrator.d.ts +7 -0
  432. package/src/tools/queue/QueueReliabilityOrchestrator.d.ts.map +1 -0
  433. package/src/tools/queue/QueueReliabilityOrchestrator.js +59 -0
  434. package/src/tools/queue/QueueRuntimeRegistration.d.ts +1 -9
  435. package/src/tools/queue/QueueRuntimeRegistration.d.ts.map +1 -1
  436. package/src/tools/queue/QueueRuntimeRegistration.js +75 -4
  437. package/src/tools/queue/QueueTracing.d.ts +32 -0
  438. package/src/tools/queue/QueueTracing.d.ts.map +1 -0
  439. package/src/tools/queue/QueueTracing.js +151 -0
  440. package/src/tools/queue/StalledJobMonitor.d.ts +5 -0
  441. package/src/tools/queue/StalledJobMonitor.d.ts.map +1 -0
  442. package/src/tools/queue/StalledJobMonitor.js +21 -0
  443. package/src/tools/queue/TimeoutManager.d.ts +14 -0
  444. package/src/tools/queue/TimeoutManager.d.ts.map +1 -0
  445. package/src/tools/queue/TimeoutManager.js +77 -0
  446. package/src/tools/queue/drivers/Redis.d.ts +1 -0
  447. package/src/tools/queue/drivers/Redis.d.ts.map +1 -1
  448. package/src/tools/queue/drivers/Redis.js +1 -0
  449. package/src/tools/queue/index.d.ts +10 -0
  450. package/src/tools/queue/index.d.ts.map +1 -1
  451. package/src/tools/queue/index.js +10 -0
  452. package/src/tools/storage/drivers/R2.d.ts +13 -0
  453. package/src/tools/storage/drivers/R2.d.ts.map +1 -1
  454. package/src/tools/storage/drivers/R2.js +29 -0
  455. package/src/zintrust.plugins.d.ts +9 -0
  456. package/src/zintrust.plugins.d.ts.map +1 -0
  457. package/src/zintrust.plugins.js +7 -0
  458. package/src/zintrust.plugins.wg.d.ts +9 -0
  459. package/src/zintrust.plugins.wg.d.ts.map +1 -0
  460. package/src/zintrust.plugins.wg.js +7 -0
package/src/config/env.js CHANGED
@@ -7,6 +7,24 @@
7
7
  */
8
8
  // Cache process check once at module load time
9
9
  const processLike = typeof process === 'undefined' ? undefined : process;
10
+ let externalEnvSource = null;
11
+ const getEnvSource = () => {
12
+ if (typeof externalEnvSource === 'function')
13
+ return externalEnvSource();
14
+ if (externalEnvSource !== null)
15
+ return externalEnvSource;
16
+ return processLike?.env ?? {};
17
+ };
18
+ const normalizeEnvValue = (value) => {
19
+ if (value === null || value === undefined)
20
+ return '';
21
+ if (typeof value === 'string')
22
+ return value;
23
+ if (typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint') {
24
+ return String(value);
25
+ }
26
+ return '';
27
+ };
10
28
  export const getProcessLike = () => processLike;
11
29
  export const dirnameFromExecPath = (execPath, platform) => {
12
30
  const separator = platform === 'win32' ? '\\' : '/';
@@ -17,34 +35,50 @@ export const dirnameFromExecPath = (execPath, platform) => {
17
35
  };
18
36
  // Private helper functions
19
37
  export const get = (key, defaultValue) => {
20
- const env = processLike?.env ?? {};
21
- return env[key] ?? defaultValue ?? '';
38
+ const env = getEnvSource();
39
+ const value = normalizeEnvValue(env[key]);
40
+ return value === '' ? (defaultValue ?? '') : value;
22
41
  };
23
42
  export const getInt = (key, defaultValue) => {
24
- const env = processLike?.env ?? {};
25
- const value = env[key];
26
- if (value === undefined || value === null)
27
- return defaultValue ?? 0;
28
- if (typeof value === 'string' && value.trim() === '')
43
+ const value = get(key, String(defaultValue ?? 0));
44
+ if (value.trim() === '')
29
45
  return defaultValue ?? 0;
30
46
  return Number.parseInt(value, 10);
31
47
  };
32
48
  export const getFloat = (key, defaultValue) => {
33
- const env = processLike?.env ?? {};
34
- const value = env[key];
35
- if (value === undefined || value === null)
36
- return defaultValue ?? 0;
37
- if (typeof value === 'string' && value.trim() === '')
49
+ const value = get(key, String(defaultValue ?? 0));
50
+ if (value.trim() === '')
38
51
  return defaultValue ?? 0;
39
52
  return Number.parseFloat(value);
40
53
  };
41
54
  export const getBool = (key, defaultValue) => {
42
- const env = processLike?.env ?? {};
43
- const value = env[key];
44
- if (value === undefined || value === null)
55
+ const value = get(key, defaultValue === true ? 'true' : 'false');
56
+ if (value.trim() === '')
45
57
  return defaultValue ?? false;
46
58
  return value.toLowerCase() === 'true' || value === '1';
47
59
  };
60
+ export const set = (key, value) => {
61
+ if (processLike?.env === undefined)
62
+ return;
63
+ processLike.env[key] = value;
64
+ };
65
+ export const unset = (key) => {
66
+ if (processLike?.env === undefined)
67
+ return;
68
+ // Use Reflect.deleteProperty to avoid deleting dynamically computed property keys
69
+ Reflect.deleteProperty(processLike.env, key);
70
+ };
71
+ export const setSource = (source) => {
72
+ externalEnvSource = source;
73
+ };
74
+ export const snapshot = () => {
75
+ const env = getEnvSource();
76
+ const out = {};
77
+ for (const [key, value] of Object.entries(env)) {
78
+ out[key] = normalizeEnvValue(value);
79
+ }
80
+ return out;
81
+ };
48
82
  export const getDefaultLogLevel = () => {
49
83
  const NODE_ENV_VALUE = get('NODE_ENV', 'development');
50
84
  if (NODE_ENV_VALUE === 'production')
@@ -53,6 +87,9 @@ export const getDefaultLogLevel = () => {
53
87
  return 'error';
54
88
  return 'debug';
55
89
  };
90
+ export const ZT_PROXY_TIMEOUT_MS = getInt('ZT_PROXY_TIMEOUT_MS', 30000);
91
+ const PROXY_KEY_ID_FALLBACK = get('APP_NAME', 'ZinTrust');
92
+ const PROXY_SECRET_FALLBACK = get('APP_KEY', '');
56
93
  // Sealed namespace with all environment configuration
57
94
  export const Env = Object.freeze({
58
95
  // Helper functions
@@ -60,6 +97,10 @@ export const Env = Object.freeze({
60
97
  getInt,
61
98
  getBool,
62
99
  getFloat,
100
+ set,
101
+ unset,
102
+ setSource,
103
+ snapshot,
63
104
  // Core
64
105
  NODE_ENV: get('NODE_ENV', 'development'),
65
106
  // Prefer PORT, fallback to APP_PORT for compatibility
@@ -100,6 +141,67 @@ export const Env = Object.freeze({
100
141
  D1_REMOTE_KEY_ID: get('D1_REMOTE_KEY_ID', ''),
101
142
  D1_REMOTE_SECRET: get('D1_REMOTE_SECRET', ''),
102
143
  D1_REMOTE_MODE: get('D1_REMOTE_MODE', 'registry'),
144
+ MYSQL_PROXY_URL: get('MYSQL_PROXY_URL', ''),
145
+ MYSQL_PROXY_HOST: get('MYSQL_PROXY_HOST', '127.0.0.1'),
146
+ MYSQL_PROXY_PORT: getInt('MYSQL_PROXY_PORT', 8789),
147
+ MYSQL_PROXY_MAX_BODY_BYTES: getInt('MYSQL_PROXY_MAX_BODY_BYTES', 131072),
148
+ MYSQL_PROXY_POOL_LIMIT: getInt('MYSQL_PROXY_POOL_LIMIT', 10),
149
+ MYSQL_PROXY_KEY_ID: get('MYSQL_PROXY_KEY_ID', PROXY_KEY_ID_FALLBACK),
150
+ MYSQL_PROXY_SECRET: get('MYSQL_PROXY_SECRET', PROXY_SECRET_FALLBACK),
151
+ MYSQL_PROXY_TIMEOUT_MS: getInt('MYSQL_PROXY_TIMEOUT_MS', ZT_PROXY_TIMEOUT_MS),
152
+ MYSQL_PROXY_REQUIRE_SIGNING: getBool('MYSQL_PROXY_REQUIRE_SIGNING', true),
153
+ MYSQL_PROXY_SIGNING_WINDOW_MS: getInt('MYSQL_PROXY_SIGNING_WINDOW_MS', getInt('ZT_PROXY_SIGNING_WINDOW_MS', 60000)),
154
+ POSTGRES_PROXY_URL: get('POSTGRES_PROXY_URL', ''),
155
+ POSTGRES_PROXY_HOST: get('POSTGRES_PROXY_HOST', '127.0.0.1'),
156
+ POSTGRES_PROXY_PORT: getInt('POSTGRES_PROXY_PORT', 8790),
157
+ POSTGRES_PROXY_MAX_BODY_BYTES: getInt('POSTGRES_PROXY_MAX_BODY_BYTES', 131072),
158
+ POSTGRES_PROXY_POOL_LIMIT: getInt('POSTGRES_PROXY_POOL_LIMIT', 10),
159
+ POSTGRES_PROXY_KEY_ID: get('POSTGRES_PROXY_KEY_ID', PROXY_KEY_ID_FALLBACK),
160
+ POSTGRES_PROXY_SECRET: get('POSTGRES_PROXY_SECRET', PROXY_SECRET_FALLBACK),
161
+ POSTGRES_PROXY_TIMEOUT_MS: getInt('POSTGRES_PROXY_TIMEOUT_MS', ZT_PROXY_TIMEOUT_MS),
162
+ POSTGRES_PROXY_REQUIRE_SIGNING: getBool('POSTGRES_PROXY_REQUIRE_SIGNING', true),
163
+ POSTGRES_PROXY_SIGNING_WINDOW_MS: getInt('POSTGRES_PROXY_SIGNING_WINDOW_MS', getInt('ZT_PROXY_SIGNING_WINDOW_MS', 60000)),
164
+ REDIS_PROXY_URL: get('REDIS_PROXY_URL', ''),
165
+ REDIS_PROXY_HOST: get('REDIS_PROXY_HOST', '127.0.0.1'),
166
+ REDIS_PROXY_PORT: getInt('REDIS_PROXY_PORT', 8791),
167
+ REDIS_PROXY_MAX_BODY_BYTES: getInt('REDIS_PROXY_MAX_BODY_BYTES', 131072),
168
+ REDIS_PROXY_KEY_ID: get('REDIS_PROXY_KEY_ID', PROXY_KEY_ID_FALLBACK),
169
+ REDIS_PROXY_SECRET: get('REDIS_PROXY_SECRET', PROXY_SECRET_FALLBACK),
170
+ REDIS_PROXY_TIMEOUT_MS: getInt('REDIS_PROXY_TIMEOUT_MS', ZT_PROXY_TIMEOUT_MS),
171
+ REDIS_PROXY_REQUIRE_SIGNING: getBool('REDIS_PROXY_REQUIRE_SIGNING', true),
172
+ REDIS_PROXY_SIGNING_WINDOW_MS: getInt('REDIS_PROXY_SIGNING_WINDOW_MS', getInt('ZT_PROXY_SIGNING_WINDOW_MS', 60000)),
173
+ USE_REDIS_PROXY: getBool('USE_REDIS_PROXY', false),
174
+ SMTP_PROXY_URL: get('SMTP_PROXY_URL', ''),
175
+ SMTP_PROXY_HOST: get('SMTP_PROXY_HOST', '127.0.0.1'),
176
+ SMTP_PROXY_PORT: getInt('SMTP_PROXY_PORT', 8794),
177
+ SMTP_PROXY_MAX_BODY_BYTES: getInt('SMTP_PROXY_MAX_BODY_BYTES', 131072),
178
+ SMTP_PROXY_KEY_ID: get('SMTP_PROXY_KEY_ID', PROXY_KEY_ID_FALLBACK),
179
+ SMTP_PROXY_SECRET: get('SMTP_PROXY_SECRET', PROXY_SECRET_FALLBACK),
180
+ SMTP_PROXY_TIMEOUT_MS: getInt('SMTP_PROXY_TIMEOUT_MS', ZT_PROXY_TIMEOUT_MS),
181
+ SMTP_PROXY_REQUIRE_SIGNING: getBool('SMTP_PROXY_REQUIRE_SIGNING', true),
182
+ SMTP_PROXY_SIGNING_WINDOW_MS: getInt('SMTP_PROXY_SIGNING_WINDOW_MS', getInt('ZT_PROXY_SIGNING_WINDOW_MS', 60000)),
183
+ USE_SMTP_PROXY: getBool('USE_SMTP_PROXY', false),
184
+ MONGODB_PROXY_URL: get('MONGODB_PROXY_URL', ''),
185
+ MONGODB_PROXY_HOST: get('MONGODB_PROXY_HOST', '127.0.0.1'),
186
+ MONGODB_PROXY_PORT: getInt('MONGODB_PROXY_PORT', 8792),
187
+ MONGODB_PROXY_MAX_BODY_BYTES: getInt('MONGODB_PROXY_MAX_BODY_BYTES', 131072),
188
+ MONGODB_PROXY_KEY_ID: get('MONGODB_PROXY_KEY_ID', PROXY_KEY_ID_FALLBACK),
189
+ MONGODB_PROXY_SECRET: get('MONGODB_PROXY_SECRET', PROXY_SECRET_FALLBACK),
190
+ MONGODB_PROXY_TIMEOUT_MS: getInt('MONGODB_PROXY_TIMEOUT_MS', ZT_PROXY_TIMEOUT_MS),
191
+ MONGODB_PROXY_REQUIRE_SIGNING: getBool('MONGODB_PROXY_REQUIRE_SIGNING', true),
192
+ MONGODB_PROXY_SIGNING_WINDOW_MS: getInt('MONGODB_PROXY_SIGNING_WINDOW_MS', getInt('ZT_PROXY_SIGNING_WINDOW_MS', 60000)),
193
+ USE_MONGODB_PROXY: getBool('USE_MONGODB_PROXY', false),
194
+ SQLSERVER_PROXY_URL: get('SQLSERVER_PROXY_URL', ''),
195
+ SQLSERVER_PROXY_HOST: get('SQLSERVER_PROXY_HOST', '127.0.0.1'),
196
+ SQLSERVER_PROXY_PORT: getInt('SQLSERVER_PROXY_PORT', 8793),
197
+ SQLSERVER_PROXY_MAX_BODY_BYTES: getInt('SQLSERVER_PROXY_MAX_BODY_BYTES', 131072),
198
+ SQLSERVER_PROXY_POOL_LIMIT: getInt('SQLSERVER_PROXY_POOL_LIMIT', 10),
199
+ SQLSERVER_PROXY_KEY_ID: get('SQLSERVER_PROXY_KEY_ID', PROXY_KEY_ID_FALLBACK),
200
+ SQLSERVER_PROXY_SECRET: get('SQLSERVER_PROXY_SECRET', PROXY_SECRET_FALLBACK),
201
+ SQLSERVER_PROXY_TIMEOUT_MS: getInt('SQLSERVER_PROXY_TIMEOUT_MS', ZT_PROXY_TIMEOUT_MS),
202
+ SQLSERVER_PROXY_REQUIRE_SIGNING: getBool('SQLSERVER_PROXY_REQUIRE_SIGNING', true),
203
+ SQLSERVER_PROXY_SIGNING_WINDOW_MS: getInt('SQLSERVER_PROXY_SIGNING_WINDOW_MS', getInt('ZT_PROXY_SIGNING_WINDOW_MS', 60000)),
204
+ USE_SQLSERVER_PROXY: getBool('USE_SQLSERVER_PROXY', false),
103
205
  KV_REMOTE_URL: get('KV_REMOTE_URL', ''),
104
206
  KV_REMOTE_KEY_ID: get('KV_REMOTE_KEY_ID', ''),
105
207
  KV_REMOTE_SECRET: get('KV_REMOTE_SECRET', ''),
@@ -112,12 +214,23 @@ export const Env = Object.freeze({
112
214
  REDIS_HOST: get('REDIS_HOST', 'localhost'),
113
215
  REDIS_PORT: getInt('REDIS_PORT', 6379),
114
216
  REDIS_PASSWORD: get('REDIS_PASSWORD', ''),
217
+ REDIS_DB: getInt('REDIS_DB', 0),
115
218
  REDIS_URL: get('REDIS_URL', ''),
116
219
  MONGO_URI: get('MONGO_URI'),
117
220
  MONGO_DB: get('MONGO_DB', 'zintrust_cache'),
118
221
  // Queue
119
222
  QUEUE_CONNECTION: get('QUEUE_CONNECTION', ''),
120
223
  QUEUE_DRIVER: get('QUEUE_DRIVER', ''),
224
+ QUEUE_HTTP_PROXY_ENABLED: getBool('QUEUE_HTTP_PROXY_ENABLED', false),
225
+ QUEUE_HTTP_PROXY_GATEWAY_ENABLED: getBool('QUEUE_HTTP_PROXY_GATEWAY_ENABLED', true),
226
+ QUEUE_HTTP_PROXY_URL: get('QUEUE_HTTP_PROXY_URL', ''),
227
+ QUEUE_HTTP_PROXY_PATH: get('QUEUE_HTTP_PROXY_PATH', '/api/_sys/queue/rpc'),
228
+ QUEUE_HTTP_PROXY_KEY_ID: get('QUEUE_HTTP_PROXY_KEY_ID', PROXY_KEY_ID_FALLBACK),
229
+ QUEUE_HTTP_PROXY_KEY: get('QUEUE_HTTP_PROXY_KEY', PROXY_SECRET_FALLBACK),
230
+ QUEUE_HTTP_PROXY_TIMEOUT_MS: getInt('QUEUE_HTTP_PROXY_TIMEOUT_MS', ZT_PROXY_TIMEOUT_MS),
231
+ QUEUE_HTTP_PROXY_MAX_SKEW_MS: getInt('QUEUE_HTTP_PROXY_MAX_SKEW_MS', getInt('ZT_PROXY_SIGNING_WINDOW_MS', 60000)),
232
+ QUEUE_HTTP_PROXY_NONCE_TTL_MS: getInt('QUEUE_HTTP_PROXY_NONCE_TTL_MS', 120000),
233
+ QUEUE_HTTP_PROXY_MIDDLEWARE: get('QUEUE_HTTP_PROXY_MIDDLEWARE', ''),
121
234
  // Rate Limiting
122
235
  RATE_LIMIT_STORE: get('RATE_LIMIT_STORE', ''),
123
236
  RATE_LIMIT_DRIVER: get('RATE_LIMIT_DRIVER', ''),
@@ -163,6 +276,7 @@ export const Env = Object.freeze({
163
276
  LOG_LEVEL: get('LOG_LEVEL', getDefaultLogLevel()),
164
277
  LOG_FORMAT: get('LOG_FORMAT', 'text'),
165
278
  LOG_CHANNEL: get('LOG_CHANNEL', ''),
279
+ DOCKER_WORKER: getBool('DOCKER_WORKER', false),
166
280
  DISABLE_LOGGING: getBool('DISABLE_LOGGING', false),
167
281
  LOG_HTTP_REQUEST: getBool('LOG_HTTP_REQUEST', false),
168
282
  LOG_TO_FILE: getBool('LOG_TO_FILE', false),
@@ -176,6 +290,7 @@ export const Env = Object.freeze({
176
290
  ZINTRUST_ENV_IN_FILE: get('ZINTRUST_ENV_IN_FILE', '.env'),
177
291
  ZINTRUST_SECRETS_PROVIDER: get('ZINTRUST_SECRETS_PROVIDER', ''),
178
292
  ZINTRUST_ALLOW_AUTO_INSTALL: get('ZINTRUST_ALLOW_AUTO_INSTALL', ''),
293
+ WORKER_SHUTDOWN_ON_APP_EXIT: getBool('WORKER_SHUTDOWN_ON_APP_EXIT', true),
179
294
  // Cloudflare Credentials
180
295
  CLOUDFLARE_ACCOUNT_ID: get('CLOUDFLARE_ACCOUNT_ID', ''),
181
296
  CLOUDFLARE_API_TOKEN: get('CLOUDFLARE_API_TOKEN', ''),
@@ -191,7 +306,7 @@ export const Env = Object.freeze({
191
306
  HOME: get('HOME', ''),
192
307
  USERPROFILE: get('USERPROFILE', ''),
193
308
  // Template/Misc
194
- TEMPLATE_COPYRIGHT: get('TEMPLATE_COPYRIGHT', 2025 ZinTrust Framework. All rights reserved.'),
309
+ TEMPLATE_COPYRIGHT: get('TEMPLATE_COPYRIGHT', ${new Date().getFullYear()} ZinTrust Framework. All rights reserved.`),
195
310
  SERVICE_NAME: get('SERVICE_NAME', ''),
196
311
  APP_MODE: get('APP_MODE', get('NODE_ENV', 'development')),
197
312
  APP_PORT: getInt('APP_PORT', 3000),
@@ -216,7 +331,15 @@ export const Env = Object.freeze({
216
331
  if (processLike.platform === 'win32') {
217
332
  return [String.raw `C:\Windows\System32`, String.raw `C:\Windows`, binDir].join(';');
218
333
  }
219
- return ['/usr/bin', '/bin', '/usr/sbin', '/sbin', binDir].join(':');
334
+ return [
335
+ '/opt/homebrew/bin',
336
+ '/usr/local/bin',
337
+ '/usr/bin',
338
+ '/bin',
339
+ '/usr/sbin',
340
+ '/sbin',
341
+ binDir,
342
+ ].join(':');
220
343
  }
221
344
  catch {
222
345
  // Fallback for non-Node environments
@@ -224,3 +347,19 @@ export const Env = Object.freeze({
224
347
  }
225
348
  })(),
226
349
  });
350
+ export const buildRedisUrl = () => {
351
+ const raw = get('REDIS_URL', '').trim();
352
+ if (raw !== '')
353
+ return raw;
354
+ const host = get('REDIS_HOST', 'localhost');
355
+ const port = getInt('REDIS_PORT', 6379);
356
+ const password = get('REDIS_PASSWORD', '');
357
+ const db = getInt('REDIS_QUEUE_DB', 0);
358
+ let url = 'redis://';
359
+ if (password.trim() !== '')
360
+ url += `:${encodeURIComponent(password)}@`;
361
+ url += `${host}:${port}`;
362
+ if (db > 0)
363
+ url += `/${db}`;
364
+ return url;
365
+ };
@@ -28,6 +28,7 @@ export declare const config: Readonly<{
28
28
  readonly isProduction: () => boolean;
29
29
  readonly isTesting: () => boolean;
30
30
  readonly debug: boolean;
31
+ readonly dockerWorker: boolean;
31
32
  readonly timezone: string;
32
33
  readonly requestTimeout: number;
33
34
  readonly maxBodySize: number;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,OAAO,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD;;;GAGG;AACH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;8BAZc,CAAC;;;;;;;;;;;;;;;;;;;;2EAAC,CAAA;;;;;;;;;;;;;;;;;;;;8BAD2B,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAmBrD,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;EAKA,CAAC;AAEZ,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,OAAO,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD;;;GAGG;AACH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;8BAZc,CAAC;;;;;;;;;;;;;;;;;;;;2EAAC,CAAA;;;;;;;;;;;;;;;;;;;;8BAD2B,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBA2BomB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;EAHzpB,CAAC;AAEZ,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"mail.d.ts","sourceRoot":"","sources":["../../../src/config/mail.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAItE,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CAC3C,CAAC,CAAC;AAmCH,QAAA,MAAM,gBAAgB,QAAO;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC1C,SAAS,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,gBAAgB,CAAC;CAgGvE,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAqB7D,eAAO,MAAM,UAAU,EAAE,UAYvB,CAAC"}
1
+ {"version":3,"file":"mail.d.ts","sourceRoot":"","sources":["../../../src/config/mail.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAItE,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CAC3C,CAAC,CAAC;AA6FH,QAAA,MAAM,gBAAgB,QAAO;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC1C,SAAS,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,gBAAgB,CAAC;CA6CvE,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAqB7D,eAAO,MAAM,UAAU,EAAE,UAYvB,CAAC"}
@@ -35,16 +35,11 @@ const getMailDriver = (config, name) => {
35
35
  }
36
36
  throw ErrorFactory.createConfigError(`Mail driver not configured: ${selected}`);
37
37
  };
38
- const createMailConfig = () => {
39
- const overrides = StartupConfigFileRegistry.get(StartupConfigFile.Mail) ?? {};
40
- const baseDefault = Env.get('MAIL_CONNECTION', Env.get('MAIL_DRIVER', 'disabled'))
41
- .trim()
42
- .toLowerCase();
43
- const baseFrom = {
44
- address: Env.get('MAIL_FROM_ADDRESS', ''),
45
- name: Env.get('MAIL_FROM_NAME', ''),
46
- };
47
- const baseDrivers = {
38
+ /**
39
+ * Create base mail drivers configuration
40
+ */
41
+ const createMailDrivers = () => {
42
+ return {
48
43
  disabled: {
49
44
  driver: 'disabled',
50
45
  },
@@ -97,6 +92,17 @@ const createMailConfig = () => {
97
92
  region: Env.get('AWS_REGION', 'us-east-1'),
98
93
  },
99
94
  };
95
+ };
96
+ const createMailConfig = () => {
97
+ const overrides = StartupConfigFileRegistry.get(StartupConfigFile.Mail) ?? {};
98
+ const baseDefault = Env.get('MAIL_CONNECTION', Env.get('MAIL_DRIVER', 'disabled'))
99
+ .trim()
100
+ .toLowerCase();
101
+ const baseFrom = {
102
+ address: Env.get('MAIL_FROM_ADDRESS', ''),
103
+ name: Env.get('MAIL_FROM_NAME', ''),
104
+ };
105
+ const baseDrivers = createMailDrivers();
100
106
  const mailConfigObj = {
101
107
  /**
102
108
  * Default mail driver
@@ -43,6 +43,11 @@ export declare const MiddlewareKeys: Readonly<{
43
43
  }>;
44
44
  export type MiddlewareKey = keyof typeof MiddlewareKeys;
45
45
  export declare function createMiddlewareConfig(): MiddlewareConfigType;
46
+ /**
47
+ * Clear the middleware configuration cache
48
+ * This ensures fresh config loading in watch mode
49
+ */
50
+ export declare const clearMiddlewareConfigCache: () => void;
46
51
  export declare const middlewareConfig: MiddlewareConfigType;
47
52
  export default middlewareConfig;
48
53
  //# sourceMappingURL=middleware.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../src/config/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AA+DzD,eAAO,MAAM,cAAc;;;;;CAKjB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,aAAa,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAClE,aAAa,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAClE,qBAAqB,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3E,CAAC;AAEF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;EAiBuB,CAAC;AAEnD,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,cAAc,CAAC;AA0MxD,wBAAgB,sBAAsB,IAAI,oBAAoB,CAqB7D;AA0BD,eAAO,MAAM,gBAAgB,EAAE,oBAY7B,CAAC;AAEH,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../src/config/middleware.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AA+DzD,eAAO,MAAM,cAAc;;;;;CAKjB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,aAAa,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAClE,aAAa,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAClE,qBAAqB,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3E,CAAC;AAEF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;EAiBuB,CAAC;AAEnD,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,cAAc,CAAC;AA0MxD,wBAAgB,sBAAsB,IAAI,oBAAoB,CAkC7D;AAID;;;GAGG;AACH,eAAO,MAAM,0BAA0B,QAAO,IAE7C,CAAC;AAwBF,eAAO,MAAM,gBAAgB,EAAE,oBAY7B,CAAC;AAEH,eAAe,gBAAgB,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { Env } from './env.js';
1
2
  import { bodyParsingMiddleware } from '../http/middleware/BodyParsingMiddleware.js';
2
3
  import { fileUploadMiddleware } from '../http/middleware/FileUploadMiddleware.js';
3
4
  import { AuthMiddleware } from '../middleware/AuthMiddleware.js';
@@ -155,7 +156,17 @@ function createSharedMiddlewares(loadMiddlewareConfig) {
155
156
  }
156
157
  export function createMiddlewareConfig() {
157
158
  const loadMiddlewareConfig = StartupConfigFileRegistry.get(StartupConfigFile.Middleware) ?? {};
158
- const shared = createSharedMiddlewares(loadMiddlewareConfig);
159
+ const skipPathsFromEnv = Env.get('CSRF_SKIP_PATHS', '')
160
+ .split(',')
161
+ .map((path) => path.trim())
162
+ .filter((path) => path.length > 0);
163
+ const effectiveMiddlewareConfig = {
164
+ ...loadMiddlewareConfig,
165
+ skipPaths: Array.isArray(loadMiddlewareConfig.skipPaths) && loadMiddlewareConfig.skipPaths.length > 0
166
+ ? loadMiddlewareConfig.skipPaths
167
+ : skipPathsFromEnv,
168
+ };
169
+ const shared = createSharedMiddlewares(effectiveMiddlewareConfig);
159
170
  const middlewareConfigObj = {
160
171
  global: [
161
172
  shared.log,
@@ -172,6 +183,13 @@ export function createMiddlewareConfig() {
172
183
  return Object.freeze(middlewareConfigObj);
173
184
  }
174
185
  let cached = null;
186
+ /**
187
+ * Clear the middleware configuration cache
188
+ * This ensures fresh config loading in watch mode
189
+ */
190
+ export const clearMiddlewareConfigCache = () => {
191
+ cached = null;
192
+ };
175
193
  // Proxy target must satisfy JS Proxy invariants.
176
194
  // When we lazily create a frozen config object (with non-configurable properties),
177
195
  // we mirror its property descriptors onto this target so reflective operations
@@ -1 +1 @@
1
- {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../../src/config/queue.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,sBAAsB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGhG,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC;IACzC,OAAO,EAAE,eAAe,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACrC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,UAAU,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACnF,OAAO,EAAE;QACP,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;QAClC,WAAW,EAAE,OAAO,CAAC;QACrB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;CACH,CAAC,CAAC;AASH;;GAEG;AACH,eAAO,MAAM,iBAAiB,QAAO,kBAmCnC,CAAC;AAsBH,QAAA,MAAM,iBAAiB,QAAO;IAC5B,OAAO,EAAE,eAAe,CAAC;IACzB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,SAAS,EAAE,CAAC,YAAY,EAAE,sBAAsB,KAAK,kBAAkB,CAAC,eAAe,CAAC,CAAC;IACzF,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,UAAU,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACnF,OAAO,EAAE;QACP,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;QAClC,WAAW,EAAE,OAAO,CAAC;QACrB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;CAuEH,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAqB/D,eAAO,MAAM,WAAW,EAAE,WAYxB,CAAC"}
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../../src/config/queue.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,sBAAsB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGhG,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC;IACzC,OAAO,EAAE,eAAe,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACrC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,UAAU,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACnF,OAAO,EAAE;QACP,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;QAClC,WAAW,EAAE,OAAO,CAAC;QACrB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;CACH,CAAC,CAAC;AA+EH;;GAEG;AACH,eAAO,MAAM,iBAAiB,QAAO,kBA4DnC,CAAC;AAsBH,QAAA,MAAM,iBAAiB,QAAO;IAC5B,OAAO,EAAE,eAAe,CAAC;IACzB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,SAAS,EAAE,CAAC,YAAY,EAAE,sBAAsB,KAAK,kBAAkB,CAAC,eAAe,CAAC,CAAC;IACzF,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,UAAU,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACnF,OAAO,EAAE;QACP,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;QAClC,WAAW,EAAE,OAAO,CAAC;QACrB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;CAuEH,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAqB/D,eAAO,MAAM,WAAW,EAAE,WAYxB,CAAC"}
@@ -3,6 +3,7 @@
3
3
  * Background job and message queue settings
4
4
  * Sealed namespace for immutability
5
5
  */
6
+ import { Cloudflare } from './cloudflare.js';
6
7
  import { Env } from './env.js';
7
8
  import { ZintrustLang } from '../lang/lang.js';
8
9
  import { StartupConfigFile, StartupConfigFileRegistry } from '../runtime/StartupConfigFileRegistry.js';
@@ -10,6 +11,59 @@ const getQueueDriver = (driverConfig) => {
10
11
  const driverName = driverConfig.default;
11
12
  return driverConfig.drivers[driverName];
12
13
  };
14
+ const readWorkersEnvString = (key) => {
15
+ const workerValue = Cloudflare.getWorkersVar(key);
16
+ if (workerValue !== null && workerValue.trim() !== '')
17
+ return workerValue;
18
+ return '';
19
+ };
20
+ const readWorkersFallbackString = (workersKey, fallbackKey, fallback = '') => {
21
+ const workerValue = readWorkersEnvString(workersKey);
22
+ if (workerValue.trim() !== '')
23
+ return workerValue;
24
+ return Env.get(fallbackKey, fallback);
25
+ };
26
+ const readWorkersFallbackInt = (workersKey, fallbackKey, fallback) => {
27
+ const raw = readWorkersFallbackString(workersKey, fallbackKey, String(fallback));
28
+ if (raw.trim() === '')
29
+ return fallback;
30
+ const parsed = Number.parseInt(raw, 10);
31
+ return Number.isFinite(parsed) ? parsed : fallback;
32
+ };
33
+ const parseRedisUrl = (rawUrl) => {
34
+ try {
35
+ const url = new URL(rawUrl);
36
+ if (url.protocol !== 'redis:' && url.protocol !== 'rediss:')
37
+ return null;
38
+ const host = url.hostname;
39
+ const port = url.port ? Number.parseInt(url.port, 10) : 6379;
40
+ const password = url.password ? decodeURIComponent(url.password) : undefined;
41
+ const db = url.pathname ? Number.parseInt(url.pathname.replace('/', ''), 10) : undefined;
42
+ return { host, port, password, database: Number.isFinite(db ?? Number.NaN) ? db : undefined };
43
+ }
44
+ catch {
45
+ return null;
46
+ }
47
+ };
48
+ const resolveRedisProxyConfig = () => {
49
+ const isWorkersRuntime = Cloudflare.getWorkersEnv() !== null;
50
+ if (!isWorkersRuntime) {
51
+ return null;
52
+ }
53
+ const proxyUrl = Env.get('REDIS_PROXY_URL', '').trim();
54
+ const parsed = proxyUrl ? parseRedisUrl(proxyUrl) : null;
55
+ if (parsed)
56
+ return parsed;
57
+ if (Env.getBool('USE_REDIS_PROXY', false)) {
58
+ return {
59
+ host: Env.get('REDIS_PROXY_HOST', ''),
60
+ port: Env.getInt('REDIS_PROXY_PORT', 6379),
61
+ password: Env.get('REDIS_PASSWORD', ''),
62
+ database: Env.getInt('REDIS_QUEUE_DB', ZintrustLang.REDIS_DEFAULT_DB),
63
+ };
64
+ }
65
+ return null;
66
+ };
13
67
  /**
14
68
  * Helper: Create base driver configurations from environment
15
69
  */
@@ -28,18 +82,25 @@ export const createBaseDrivers = () => ({
28
82
  },
29
83
  redis: {
30
84
  driver: 'redis',
31
- host: Env.get('REDIS_HOST', 'localhost'),
32
- port: Env.getInt('REDIS_PORT', 6379),
33
- password: Env.get('REDIS_PASSWORD'),
34
- database: Env.getInt('REDIS_QUEUE_DB', ZintrustLang.REDIS_DEFAULT_DB),
85
+ host: resolveRedisProxyConfig()?.host ??
86
+ readWorkersFallbackString('WORKERS_REDIS_HOST', 'REDIS_HOST', 'localhost'),
87
+ port: resolveRedisProxyConfig()?.port ??
88
+ readWorkersFallbackInt('WORKERS_REDIS_PORT', 'REDIS_PORT', 6379),
89
+ password: resolveRedisProxyConfig()?.password ??
90
+ readWorkersFallbackString('WORKERS_REDIS_PASSWORD', 'REDIS_PASSWORD'),
91
+ database: resolveRedisProxyConfig()?.database ??
92
+ readWorkersFallbackInt('WORKERS_REDIS_QUEUE_DB', 'REDIS_QUEUE_DB', ZintrustLang.REDIS_DEFAULT_DB),
35
93
  },
36
94
  rabbitmq: {
37
95
  driver: 'rabbitmq',
38
- host: Env.get('RABBITMQ_HOST', 'localhost'),
39
- port: Env.getInt('RABBITMQ_PORT', 5672),
40
- username: Env.get('RABBITMQ_USER', 'guest'),
41
- password: Env.get('RABBITMQ_PASSWORD', 'guest'),
42
- vhost: Env.get('RABBITMQ_VHOST', '/'),
96
+ host: readWorkersFallbackString('WORKERS_RABBITMQ_HOST', 'RABBITMQ_HOST', 'localhost'),
97
+ port: readWorkersFallbackInt('WORKERS_RABBITMQ_PORT', 'RABBITMQ_PORT', 5672),
98
+ username: readWorkersFallbackString('WORKERS_RABBITMQ_USER', 'RABBITMQ_USER', 'guest'),
99
+ password: readWorkersFallbackString('WORKERS_RABBITMQ_PASSWORD', 'RABBITMQ_PASSWORD', 'guest'),
100
+ vhost: readWorkersFallbackString('WORKERS_RABBITMQ_VHOST', 'RABBITMQ_VHOST', '/'),
101
+ httpGatewayUrl: readWorkersFallbackString('WORKERS_RABBITMQ_HTTP_GATEWAY_URL', 'RABBITMQ_HTTP_GATEWAY_URL'),
102
+ httpGatewayToken: readWorkersFallbackString('WORKERS_RABBITMQ_HTTP_GATEWAY_TOKEN', 'RABBITMQ_HTTP_GATEWAY_TOKEN'),
103
+ httpGatewayTimeoutMs: readWorkersFallbackInt('WORKERS_RABBITMQ_HTTP_GATEWAY_TIMEOUT_MS', 'RABBITMQ_HTTP_GATEWAY_TIMEOUT_MS', 15000),
43
104
  },
44
105
  sqs: {
45
106
  driver: 'sqs',
@@ -1 +1 @@
1
- {"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../../src/config/redis.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAG/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGjD,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACjE,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAC1E,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5D,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,SAAS,0BAA0B,KAAG,MAYnE,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,SAAS,0BAA0B,KAAG,MAAM,GAAG,IAW1E,CAAC;AAEF,eAAO,MAAM,YAAY,GAAU,CAAC,GAAG,WAAW,EAAE,OAAO,OAAO,GAAG,SAAS,KAAG,OAAO,CAAC,CAAC,CAqCzF,CAAC"}
1
+ {"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../../src/config/redis.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAM/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGjD,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACjE,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAC1E,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5D,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,SAAS,0BAA0B,KAAG,MAYnE,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,SAAS,0BAA0B,KAAG,MAAM,GAAG,IAW1E,CAAC;AAqDF,eAAO,MAAM,YAAY,GAAU,CAAC,GAAG,WAAW,EAAE,OAAO,OAAO,GAAG,SAAS,KAAG,OAAO,CAAC,CAAC,CA0BzF,CAAC"}
@@ -1,6 +1,9 @@
1
1
  import { Env } from './env.js';
2
2
  import { ErrorFactory } from '../exceptions/ZintrustError.js';
3
3
  import { ZintrustLang } from '../lang/lang.js';
4
+ import { existsSync } from '../node-singletons/fs.js';
5
+ import * as path from '../node-singletons/path.js';
6
+ import { pathToFileURL } from '../node-singletons/url.js';
4
7
  import { Queue } from '../tools/queue/Queue.js';
5
8
  export const buildRedisUrl = (config) => {
6
9
  // Otherwise build URL from individual settings (like cache driver)
@@ -27,29 +30,61 @@ export const getRedisUrl = (config) => {
27
30
  return url;
28
31
  return buildRedisUrl(config);
29
32
  };
33
+ const resolveLocalQueueRedisEntry = () => {
34
+ const cwd = typeof process !== 'undefined' && typeof process.cwd === 'function' ? process.cwd() : '';
35
+ if (cwd.trim() === '')
36
+ return null;
37
+ const localEntry = path.join(cwd, 'dist', 'packages', 'queue-redis', 'src', 'index.js');
38
+ return existsSync(localEntry) ? localEntry : null;
39
+ };
40
+ const importQueueRedisModule = async () => {
41
+ try {
42
+ return (await import('@zintrust/queue-redis'));
43
+ }
44
+ catch {
45
+ const localEntry = resolveLocalQueueRedisEntry();
46
+ if (localEntry === null)
47
+ return undefined;
48
+ const url = pathToFileURL(localEntry).href;
49
+ return (await import(url));
50
+ }
51
+ };
52
+ const loadPluginDriver = async () => {
53
+ try {
54
+ const mod = await importQueueRedisModule();
55
+ if (mod === undefined) {
56
+ throw ErrorFactory.createConfigError('queue-redis package not found');
57
+ }
58
+ if (mod.RedisQueue !== undefined) {
59
+ Queue.register('redis', mod.RedisQueue);
60
+ }
61
+ else if (mod.BullMQRedisQueue !== undefined) {
62
+ Queue.register('redis', mod.BullMQRedisQueue);
63
+ }
64
+ return Queue.get('redis');
65
+ }
66
+ catch (error) {
67
+ throw ErrorFactory.createConfigError('Redis queue driver is not registered. Install queue:redis via zin plugin install.', error);
68
+ }
69
+ };
30
70
  export const ensureDriver = async (type) => {
31
71
  if (type === 'publish') {
32
72
  // Return Redis publish client with publish() method from package
33
- const mod = (await import('@zintrust/queue-redis'));
34
- if (mod.createRedisPublishClient) {
73
+ const mod = await importQueueRedisModule();
74
+ if (mod?.createRedisPublishClient) {
35
75
  return mod.createRedisPublishClient();
36
76
  }
37
77
  throw ErrorFactory.createConfigError('Redis publish client is not available in queue-redis package');
38
78
  }
39
79
  // Return queue driver (current behavior)
40
80
  try {
41
- return Queue.get('redis');
81
+ const resolved = Queue.get('redis');
82
+ if (!(resolved.__zintrustCoreRedisQueue ?? false)) {
83
+ return resolved;
84
+ }
85
+ return await loadPluginDriver();
42
86
  }
43
87
  catch {
44
- try {
45
- const mod = (await import('@zintrust/queue-redis'));
46
- if (mod.RedisQueue !== undefined) {
47
- Queue.register('redis', mod.RedisQueue);
48
- }
49
- return Queue.get('redis');
50
- }
51
- catch (error) {
52
- throw ErrorFactory.createConfigError('Redis queue driver is not registered. Install queue:redis via zin plugin install.', error);
53
- }
88
+ return loadPluginDriver();
54
89
  }
55
90
  };
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/config/storage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAI9F,MAAM,MAAM,sBAAsB,GAAG,OAAO,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACvE,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACjE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3C,CAAC,CAAC;AAEH,KAAK,oBAAoB,GAAG,oBAAoB,GAAG;IACjD,SAAS,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,mBAAmB,CAAC;IAC/D,eAAe,EAAE,CAAC,IAAI,EAAE,oBAAoB,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,mBAAmB,CAAC;IACpF,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACjE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3C,CAAC;AAgEF,QAAA,MAAM,mBAAmB,QAAO,oBAgF/B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAqBnE,eAAO,MAAM,aAAa,EAAE,aAY1B,CAAC"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/config/storage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAI9F,MAAM,MAAM,sBAAsB,GAAG,OAAO,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACvE,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACjE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3C,CAAC,CAAC;AAEH,KAAK,oBAAoB,GAAG,oBAAoB,GAAG;IACjD,SAAS,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,mBAAmB,CAAC;IAC/D,eAAe,EAAE,CAAC,IAAI,EAAE,oBAAoB,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,mBAAmB,CAAC;IACpF,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACjE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3C,CAAC;AAiEF,QAAA,MAAM,mBAAmB,QAAO,oBAgF/B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAqBnE,eAAO,MAAM,aAAa,EAAE,aAY1B,CAAC"}
@@ -51,6 +51,7 @@ const getDrivers = () => ({
51
51
  bucket: Env.get('R2_BUCKET', ''),
52
52
  endpoint: Env.get('R2_ENDPOINT', ''),
53
53
  url: Env.get('R2_URL', ''),
54
+ binding: Env.get('R2_BINDING', ''),
54
55
  },
55
56
  gcs: {
56
57
  driver: 'gcs',