@zintrust/core 0.1.40 → 0.1.42

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 (590) hide show
  1. package/bin/zintrust-main.d.ts.map +1 -1
  2. package/bin/zintrust-main.js +22 -1
  3. package/package.json +24 -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 +50 -16
  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 +364 -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 +94 -34
  28. package/src/cli/ErrorHandler.js +1 -1
  29. package/src/cli/commands/ConfigCommand.d.ts.map +1 -1
  30. package/src/cli/commands/ConfigCommand.js +3 -5
  31. package/src/cli/commands/ContainerProxiesCommand.d.ts +5 -0
  32. package/src/cli/commands/ContainerProxiesCommand.d.ts.map +1 -0
  33. package/src/cli/commands/ContainerProxiesCommand.js +77 -0
  34. package/src/cli/commands/ContainerWorkersCommand.d.ts +5 -0
  35. package/src/cli/commands/ContainerWorkersCommand.d.ts.map +1 -0
  36. package/src/cli/commands/ContainerWorkersCommand.js +57 -0
  37. package/src/cli/commands/D1LearnCommand.d.ts +9 -0
  38. package/src/cli/commands/D1LearnCommand.d.ts.map +1 -0
  39. package/src/cli/commands/D1LearnCommand.js +143 -0
  40. package/src/cli/commands/D1MigrateCommand.d.ts.map +1 -1
  41. package/src/cli/commands/D1MigrateCommand.js +55 -16
  42. package/src/cli/commands/DeployCommand.d.ts +16 -0
  43. package/src/cli/commands/DeployCommand.d.ts.map +1 -0
  44. package/src/cli/commands/DeployCommand.js +110 -0
  45. package/src/cli/commands/DeployContainerProxiesCommand.d.ts +5 -0
  46. package/src/cli/commands/DeployContainerProxiesCommand.d.ts.map +1 -0
  47. package/src/cli/commands/DeployContainerProxiesCommand.js +27 -0
  48. package/src/cli/commands/DeployContainerWorkersCommand.d.ts +5 -0
  49. package/src/cli/commands/DeployContainerWorkersCommand.d.ts.map +1 -0
  50. package/src/cli/commands/DeployContainerWorkersCommand.js +27 -0
  51. package/src/cli/commands/DockerComposeCommandUtils.d.ts +3 -0
  52. package/src/cli/commands/DockerComposeCommandUtils.d.ts.map +1 -0
  53. package/src/cli/commands/DockerComposeCommandUtils.js +34 -0
  54. package/src/cli/commands/DoctorArchitectureCommand.d.ts +5 -0
  55. package/src/cli/commands/DoctorArchitectureCommand.d.ts.map +1 -0
  56. package/src/cli/commands/DoctorArchitectureCommand.js +54 -0
  57. package/src/cli/commands/InitContainerCommand.d.ts +5 -0
  58. package/src/cli/commands/InitContainerCommand.d.ts.map +1 -0
  59. package/src/cli/commands/InitContainerCommand.js +231 -0
  60. package/src/cli/commands/InitEcosystemCommand.d.ts +6 -0
  61. package/src/cli/commands/InitEcosystemCommand.d.ts.map +1 -0
  62. package/src/cli/commands/InitEcosystemCommand.js +51 -0
  63. package/src/cli/commands/InitProducerCommand.d.ts +5 -0
  64. package/src/cli/commands/InitProducerCommand.d.ts.map +1 -0
  65. package/src/cli/commands/InitProducerCommand.js +47 -0
  66. package/src/cli/commands/InitProxyCommand.d.ts +5 -0
  67. package/src/cli/commands/InitProxyCommand.d.ts.map +1 -0
  68. package/src/cli/commands/InitProxyCommand.js +442 -0
  69. package/src/cli/commands/MigrateCommand.d.ts.map +1 -1
  70. package/src/cli/commands/MigrateCommand.js +78 -36
  71. package/src/cli/commands/MigrateWorkerCommand.d.ts.map +1 -1
  72. package/src/cli/commands/MigrateWorkerCommand.js +36 -2
  73. package/src/cli/commands/MongoDBProxyCommand.d.ts +5 -0
  74. package/src/cli/commands/MongoDBProxyCommand.d.ts.map +1 -0
  75. package/src/cli/commands/MongoDBProxyCommand.js +98 -0
  76. package/src/cli/commands/MySqlProxyCommand.d.ts +6 -0
  77. package/src/cli/commands/MySqlProxyCommand.d.ts.map +1 -0
  78. package/src/cli/commands/MySqlProxyCommand.js +32 -0
  79. package/src/cli/commands/PostgresProxyCommand.d.ts +6 -0
  80. package/src/cli/commands/PostgresProxyCommand.d.ts.map +1 -0
  81. package/src/cli/commands/PostgresProxyCommand.js +32 -0
  82. package/src/cli/commands/ProxyCommand.d.ts +12 -0
  83. package/src/cli/commands/ProxyCommand.d.ts.map +1 -0
  84. package/src/cli/commands/ProxyCommand.js +80 -0
  85. package/src/cli/commands/ProxyCommandUtils.d.ts +6 -0
  86. package/src/cli/commands/ProxyCommandUtils.d.ts.map +1 -0
  87. package/src/cli/commands/ProxyCommandUtils.js +38 -0
  88. package/src/cli/commands/PutCommand.d.ts +6 -0
  89. package/src/cli/commands/PutCommand.d.ts.map +1 -0
  90. package/src/cli/commands/PutCommand.js +173 -0
  91. package/src/cli/commands/QueueRecoveryCommand.d.ts +6 -0
  92. package/src/cli/commands/QueueRecoveryCommand.d.ts.map +1 -0
  93. package/src/cli/commands/QueueRecoveryCommand.js +612 -0
  94. package/src/cli/commands/RedisProxyCommand.d.ts +6 -0
  95. package/src/cli/commands/RedisProxyCommand.d.ts.map +1 -0
  96. package/src/cli/commands/RedisProxyCommand.js +53 -0
  97. package/src/cli/commands/ScheduleListCommand.d.ts +6 -0
  98. package/src/cli/commands/ScheduleListCommand.d.ts.map +1 -0
  99. package/src/cli/commands/ScheduleListCommand.js +62 -0
  100. package/src/cli/commands/ScheduleRunCommand.d.ts +6 -0
  101. package/src/cli/commands/ScheduleRunCommand.d.ts.map +1 -0
  102. package/src/cli/commands/ScheduleRunCommand.js +32 -0
  103. package/src/cli/commands/ScheduleStartCommand.d.ts +6 -0
  104. package/src/cli/commands/ScheduleStartCommand.d.ts.map +1 -0
  105. package/src/cli/commands/ScheduleStartCommand.js +40 -0
  106. package/src/cli/commands/SecretsCommand.d.ts.map +1 -1
  107. package/src/cli/commands/SecretsCommand.js +2 -2
  108. package/src/cli/commands/SmtpProxyCommand.d.ts +6 -0
  109. package/src/cli/commands/SmtpProxyCommand.d.ts.map +1 -0
  110. package/src/cli/commands/SmtpProxyCommand.js +56 -0
  111. package/src/cli/commands/SqlProxyCommandUtils.d.ts +46 -0
  112. package/src/cli/commands/SqlProxyCommandUtils.d.ts.map +1 -0
  113. package/src/cli/commands/SqlProxyCommandUtils.js +48 -0
  114. package/src/cli/commands/SqlServerProxyCommand.d.ts +5 -0
  115. package/src/cli/commands/SqlServerProxyCommand.d.ts.map +1 -0
  116. package/src/cli/commands/SqlServerProxyCommand.js +85 -0
  117. package/src/cli/commands/StartCommand.d.ts.map +1 -1
  118. package/src/cli/commands/StartCommand.js +132 -17
  119. package/src/cli/commands/WorkerCommands.d.ts +1 -0
  120. package/src/cli/commands/WorkerCommands.d.ts.map +1 -1
  121. package/src/cli/commands/WorkerCommands.js +140 -6
  122. package/src/cli/commands/index.d.ts +2 -0
  123. package/src/cli/commands/index.d.ts.map +1 -1
  124. package/src/cli/commands/index.js +2 -0
  125. package/src/cli/commands/runner/index.d.ts +2 -2
  126. package/src/cli/commands/runner/index.d.ts.map +1 -1
  127. package/src/cli/commands/runner/index.js +15 -4
  128. package/src/cli/commands/schedule/ScheduleCliSupport.d.ts +6 -0
  129. package/src/cli/commands/schedule/ScheduleCliSupport.d.ts.map +1 -0
  130. package/src/cli/commands/schedule/ScheduleCliSupport.js +55 -0
  131. package/src/cli/config/ConfigManager.d.ts.map +1 -1
  132. package/src/cli/config/ConfigManager.js +8 -1
  133. package/src/cli/d1/D1SqlMigrations.d.ts.map +1 -1
  134. package/src/cli/d1/D1SqlMigrations.js +14 -1
  135. package/src/cli/d1/WranglerConfig.d.ts.map +1 -1
  136. package/src/cli/d1/WranglerConfig.js +34 -2
  137. package/src/cli/index.d.ts +4 -0
  138. package/src/cli/index.d.ts.map +1 -1
  139. package/src/cli/index.js +4 -0
  140. package/src/cli/scaffolding/ProjectScaffolder.d.ts.map +1 -1
  141. package/src/cli/scaffolding/ProjectScaffolder.js +2 -0
  142. package/src/cli/scaffolding/ServiceScaffolder.d.ts.map +1 -1
  143. package/src/cli/scaffolding/ServiceScaffolder.js +1 -0
  144. package/src/cli/services/VersionChecker.d.ts.map +1 -1
  145. package/src/cli/services/VersionChecker.js +5 -1
  146. package/src/cli/utils/DatabaseCliUtils.d.ts.map +1 -1
  147. package/src/cli/utils/DatabaseCliUtils.js +6 -1
  148. package/src/cli/utils/EnvFileLoader.d.ts.map +1 -1
  149. package/src/cli/utils/EnvFileLoader.js +35 -15
  150. package/src/cli/workers/QueueWorkRunner.js +1 -1
  151. package/src/cli.d.ts +5 -0
  152. package/src/cli.d.ts.map +1 -0
  153. package/src/cli.js +4 -0
  154. package/src/collections/index.d.ts +2 -2
  155. package/src/collections/index.d.ts.map +1 -1
  156. package/src/collections/index.js +1 -1
  157. package/src/common/HealthRoutes.d.ts.map +1 -1
  158. package/src/common/HealthRoutes.js +50 -2
  159. package/src/common/RemoteSignedJson.d.ts +1 -0
  160. package/src/common/RemoteSignedJson.d.ts.map +1 -1
  161. package/src/common/RemoteSignedJson.js +81 -29
  162. package/src/common/index.d.ts +1 -0
  163. package/src/common/index.d.ts.map +1 -1
  164. package/src/common/index.js +12 -1
  165. package/src/common/utility.d.ts.map +1 -1
  166. package/src/common/utility.js +2 -6
  167. package/src/config/FileLogWriter.d.ts.map +1 -1
  168. package/src/config/FileLogWriter.js +21 -6
  169. package/src/config/app.d.ts +4 -0
  170. package/src/config/app.d.ts.map +1 -1
  171. package/src/config/app.js +4 -0
  172. package/src/config/cache.d.ts.map +1 -1
  173. package/src/config/cache.js +22 -2
  174. package/src/config/cloudflare.d.ts +5 -1
  175. package/src/config/cloudflare.d.ts.map +1 -1
  176. package/src/config/cloudflare.js +67 -8
  177. package/src/config/database.d.ts.map +1 -1
  178. package/src/config/database.js +48 -13
  179. package/src/config/env.d.ts +87 -2
  180. package/src/config/env.d.ts.map +1 -1
  181. package/src/config/env.js +158 -19
  182. package/src/config/index.d.ts +1 -0
  183. package/src/config/index.d.ts.map +1 -1
  184. package/src/config/mail.d.ts.map +1 -1
  185. package/src/config/mail.js +16 -10
  186. package/src/config/middleware.d.ts +5 -0
  187. package/src/config/middleware.d.ts.map +1 -1
  188. package/src/config/middleware.js +19 -1
  189. package/src/config/queue.d.ts.map +1 -1
  190. package/src/config/queue.js +70 -9
  191. package/src/config/redis.d.ts.map +1 -1
  192. package/src/config/redis.js +48 -13
  193. package/src/config/storage.d.ts.map +1 -1
  194. package/src/config/storage.js +1 -0
  195. package/src/config/type.d.ts +18 -0
  196. package/src/config/type.d.ts.map +1 -1
  197. package/src/config/workers.d.ts.map +1 -1
  198. package/src/config/workers.js +122 -16
  199. package/src/functions/cloudflare.d.ts.map +1 -1
  200. package/src/functions/cloudflare.js +55 -1
  201. package/src/health/StartupHealthChecks.js +1 -1
  202. package/src/helper/index.d.ts +225 -0
  203. package/src/helper/index.d.ts.map +1 -0
  204. package/src/helper/index.js +347 -0
  205. package/src/http/FileUpload.d.ts +3 -2
  206. package/src/http/FileUpload.d.ts.map +1 -1
  207. package/src/http/Kernel.d.ts.map +1 -1
  208. package/src/http/Kernel.js +2 -1
  209. package/src/http/error-pages/ErrorPageRenderer.d.ts +4 -0
  210. package/src/http/error-pages/ErrorPageRenderer.d.ts.map +1 -1
  211. package/src/http/error-pages/ErrorPageRenderer.js +141 -1
  212. package/src/http/middleware/BodyParsingMiddleware.d.ts.map +1 -1
  213. package/src/http/middleware/BodyParsingMiddleware.js +33 -6
  214. package/src/index.d.ts +26 -57
  215. package/src/index.d.ts.map +1 -1
  216. package/src/index.js +32 -18
  217. package/src/microservices/ServiceAuthMiddleware.d.ts.map +1 -1
  218. package/src/microservices/ServiceAuthMiddleware.js +12 -4
  219. package/src/middleware/CsrfMiddleware.d.ts.map +1 -1
  220. package/src/middleware/CsrfMiddleware.js +30 -16
  221. package/src/middleware/ErrorHandlerMiddleware.d.ts.map +1 -1
  222. package/src/middleware/ErrorHandlerMiddleware.js +2 -1
  223. package/src/migrations/MigrationDiscovery.d.ts.map +1 -1
  224. package/src/migrations/MigrationDiscovery.js +2 -1
  225. package/src/migrations/MigrationLoader.js +1 -1
  226. package/src/migrations/schema/SchemaCompiler.d.ts.map +1 -1
  227. package/src/migrations/schema/SchemaCompiler.js +6 -3
  228. package/src/node-singletons/crypto.d.ts +1 -1
  229. package/src/node-singletons/crypto.d.ts.map +1 -1
  230. package/src/node-singletons/crypto.js +1 -1
  231. package/src/node-singletons/fs.d.ts +1 -1
  232. package/src/node-singletons/fs.d.ts.map +1 -1
  233. package/src/node-singletons/path.d.ts +1 -1
  234. package/src/node-singletons/path.d.ts.map +1 -1
  235. package/src/node-singletons/path.js +1 -1
  236. package/src/node-singletons/stream.d.ts +11 -0
  237. package/src/node-singletons/stream.d.ts.map +1 -0
  238. package/src/node-singletons/stream.js +8 -0
  239. package/src/observability/OpenTelemetry.d.ts +7 -0
  240. package/src/observability/OpenTelemetry.d.ts.map +1 -1
  241. package/src/observability/OpenTelemetry.js +49 -2
  242. package/src/orm/Database.d.ts +4 -0
  243. package/src/orm/Database.d.ts.map +1 -1
  244. package/src/orm/Database.js +80 -9
  245. package/src/orm/DatabaseAdapter.d.ts +1 -0
  246. package/src/orm/DatabaseAdapter.d.ts.map +1 -1
  247. package/src/orm/DatabaseRuntimeRegistration.d.ts.map +1 -1
  248. package/src/orm/DatabaseRuntimeRegistration.js +2 -0
  249. package/src/orm/QueryBuilder.d.ts +1 -0
  250. package/src/orm/QueryBuilder.d.ts.map +1 -1
  251. package/src/orm/QueryBuilder.js +33 -3
  252. package/src/orm/SchemaCompiler.d.ts.map +1 -1
  253. package/src/orm/SchemaCompiler.js +6 -3
  254. package/src/orm/SchemaStatemenWriter.d.ts +15 -0
  255. package/src/orm/SchemaStatemenWriter.d.ts.map +1 -0
  256. package/src/orm/SchemaStatemenWriter.js +78 -0
  257. package/src/orm/adapters/D1Adapter.d.ts.map +1 -1
  258. package/src/orm/adapters/D1Adapter.js +52 -2
  259. package/src/orm/adapters/D1RemoteAdapter.d.ts.map +1 -1
  260. package/src/orm/adapters/D1RemoteAdapter.js +150 -89
  261. package/src/orm/adapters/MongoDBProxyAdapter.d.ts +3 -0
  262. package/src/orm/adapters/MongoDBProxyAdapter.d.ts.map +1 -0
  263. package/src/orm/adapters/MongoDBProxyAdapter.js +128 -0
  264. package/src/orm/adapters/MySQLProxyAdapter.d.ts +11 -0
  265. package/src/orm/adapters/MySQLProxyAdapter.d.ts.map +1 -0
  266. package/src/orm/adapters/MySQLProxyAdapter.js +162 -0
  267. package/src/orm/adapters/PostgreSQLProxyAdapter.d.ts +11 -0
  268. package/src/orm/adapters/PostgreSQLProxyAdapter.d.ts.map +1 -0
  269. package/src/orm/adapters/PostgreSQLProxyAdapter.js +163 -0
  270. package/src/orm/adapters/ProxyCache.d.ts +9 -0
  271. package/src/orm/adapters/ProxyCache.d.ts.map +1 -0
  272. package/src/orm/adapters/ProxyCache.js +24 -0
  273. package/src/orm/adapters/ProxySignedRequest.d.ts +11 -0
  274. package/src/orm/adapters/ProxySignedRequest.d.ts.map +1 -0
  275. package/src/orm/adapters/ProxySignedRequest.js +30 -0
  276. package/src/orm/adapters/ProxySigningPath.d.ts +3 -0
  277. package/src/orm/adapters/ProxySigningPath.d.ts.map +1 -0
  278. package/src/orm/adapters/ProxySigningPath.js +25 -0
  279. package/src/orm/adapters/SqlProxyAdapterUtils.d.ts +19 -0
  280. package/src/orm/adapters/SqlProxyAdapterUtils.d.ts.map +1 -0
  281. package/src/orm/adapters/SqlProxyAdapterUtils.js +36 -0
  282. package/src/orm/adapters/SqlProxyRegistryMode.d.ts +12 -0
  283. package/src/orm/adapters/SqlProxyRegistryMode.d.ts.map +1 -0
  284. package/src/orm/adapters/SqlProxyRegistryMode.js +24 -0
  285. package/src/orm/adapters/SqlServerProxyAdapter.d.ts +6 -0
  286. package/src/orm/adapters/SqlServerProxyAdapter.d.ts.map +1 -0
  287. package/src/orm/adapters/SqlServerProxyAdapter.js +154 -0
  288. package/src/orm/migrations/MigrationStore.js +1 -1
  289. package/src/performance/Optimizer.d.ts +1 -0
  290. package/src/performance/Optimizer.d.ts.map +1 -1
  291. package/src/performance/Optimizer.js +21 -8
  292. package/src/proxy/ErrorHandler.d.ts +11 -0
  293. package/src/proxy/ErrorHandler.d.ts.map +1 -0
  294. package/src/proxy/ErrorHandler.js +7 -0
  295. package/src/proxy/PoolManager.d.ts +8 -0
  296. package/src/proxy/PoolManager.d.ts.map +1 -0
  297. package/src/proxy/PoolManager.js +18 -0
  298. package/src/proxy/ProxyBackend.d.ts +18 -0
  299. package/src/proxy/ProxyBackend.d.ts.map +1 -0
  300. package/src/proxy/ProxyBackend.js +1 -0
  301. package/src/proxy/ProxyConfig.d.ts +12 -0
  302. package/src/proxy/ProxyConfig.d.ts.map +1 -0
  303. package/src/proxy/ProxyConfig.js +1 -0
  304. package/src/proxy/ProxyRegistry.d.ts +10 -0
  305. package/src/proxy/ProxyRegistry.d.ts.map +1 -0
  306. package/src/proxy/ProxyRegistry.js +11 -0
  307. package/src/proxy/ProxyRequestParsing.d.ts +9 -0
  308. package/src/proxy/ProxyRequestParsing.d.ts.map +1 -0
  309. package/src/proxy/ProxyRequestParsing.js +16 -0
  310. package/src/proxy/ProxyServer.d.ts +21 -0
  311. package/src/proxy/ProxyServer.d.ts.map +1 -0
  312. package/src/proxy/ProxyServer.js +84 -0
  313. package/src/proxy/ProxyServerUtils.d.ts +37 -0
  314. package/src/proxy/ProxyServerUtils.d.ts.map +1 -0
  315. package/src/proxy/ProxyServerUtils.js +42 -0
  316. package/src/proxy/ProxySigningConfigResolver.d.ts +22 -0
  317. package/src/proxy/ProxySigningConfigResolver.d.ts.map +1 -0
  318. package/src/proxy/ProxySigningConfigResolver.js +24 -0
  319. package/src/proxy/ProxySigningRequest.d.ts +12 -0
  320. package/src/proxy/ProxySigningRequest.d.ts.map +1 -0
  321. package/src/proxy/ProxySigningRequest.js +31 -0
  322. package/src/proxy/RequestValidator.d.ts +15 -0
  323. package/src/proxy/RequestValidator.d.ts.map +1 -0
  324. package/src/proxy/RequestValidator.js +26 -0
  325. package/src/proxy/SigningService.d.ts +39 -0
  326. package/src/proxy/SigningService.d.ts.map +1 -0
  327. package/src/proxy/SigningService.js +107 -0
  328. package/src/proxy/SqlPayloadValidator.d.ts +13 -0
  329. package/src/proxy/SqlPayloadValidator.d.ts.map +1 -0
  330. package/src/proxy/SqlPayloadValidator.js +14 -0
  331. package/src/proxy/SqlProxyDbOverrides.d.ts +17 -0
  332. package/src/proxy/SqlProxyDbOverrides.d.ts.map +1 -0
  333. package/src/proxy/SqlProxyDbOverrides.js +1 -0
  334. package/src/proxy/SqlProxyServerDeps.d.ts +12 -0
  335. package/src/proxy/SqlProxyServerDeps.d.ts.map +1 -0
  336. package/src/proxy/SqlProxyServerDeps.js +9 -0
  337. package/src/proxy/StatementPayloadValidator.d.ts +13 -0
  338. package/src/proxy/StatementPayloadValidator.d.ts.map +1 -0
  339. package/src/proxy/StatementPayloadValidator.js +18 -0
  340. package/src/proxy/StatementRegistryLoader.d.ts +2 -0
  341. package/src/proxy/StatementRegistryLoader.d.ts.map +1 -0
  342. package/src/proxy/StatementRegistryLoader.js +36 -0
  343. package/src/proxy/StatementRegistryResolver.d.ts +15 -0
  344. package/src/proxy/StatementRegistryResolver.d.ts.map +1 -0
  345. package/src/proxy/StatementRegistryResolver.js +34 -0
  346. package/src/proxy/d1/ZintrustD1Proxy.d.ts +3 -0
  347. package/src/proxy/d1/ZintrustD1Proxy.d.ts.map +1 -0
  348. package/src/proxy/d1/ZintrustD1Proxy.js +2 -0
  349. package/src/proxy/d1/register.d.ts +2 -0
  350. package/src/proxy/d1/register.d.ts.map +1 -0
  351. package/src/proxy/d1/register.js +5 -0
  352. package/src/proxy/isMutatingSql.d.ts +2 -0
  353. package/src/proxy/isMutatingSql.d.ts.map +1 -0
  354. package/src/proxy/isMutatingSql.js +12 -0
  355. package/src/proxy/kv/ZintrustKvProxy.d.ts +3 -0
  356. package/src/proxy/kv/ZintrustKvProxy.d.ts.map +1 -0
  357. package/src/proxy/kv/ZintrustKvProxy.js +2 -0
  358. package/src/proxy/kv/register.d.ts +2 -0
  359. package/src/proxy/kv/register.d.ts.map +1 -0
  360. package/src/proxy/kv/register.js +5 -0
  361. package/src/proxy/mongodb/MongoDBProxyServer.d.ts +33 -0
  362. package/src/proxy/mongodb/MongoDBProxyServer.d.ts.map +1 -0
  363. package/src/proxy/mongodb/MongoDBProxyServer.js +202 -0
  364. package/src/proxy/mongodb/register.d.ts +2 -0
  365. package/src/proxy/mongodb/register.d.ts.map +1 -0
  366. package/src/proxy/mongodb/register.js +5 -0
  367. package/src/proxy/mysql/MySqlProxyServer.d.ts +8 -0
  368. package/src/proxy/mysql/MySqlProxyServer.d.ts.map +1 -0
  369. package/src/proxy/mysql/MySqlProxyServer.js +202 -0
  370. package/src/proxy/mysql/register.d.ts +2 -0
  371. package/src/proxy/mysql/register.d.ts.map +1 -0
  372. package/src/proxy/mysql/register.js +5 -0
  373. package/src/proxy/postgres/PostgresProxyServer.d.ts +8 -0
  374. package/src/proxy/postgres/PostgresProxyServer.d.ts.map +1 -0
  375. package/src/proxy/postgres/PostgresProxyServer.js +178 -0
  376. package/src/proxy/postgres/register.d.ts +2 -0
  377. package/src/proxy/postgres/register.d.ts.map +1 -0
  378. package/src/proxy/postgres/register.js +5 -0
  379. package/src/proxy/redis/RedisProxyServer.d.ts +12 -0
  380. package/src/proxy/redis/RedisProxyServer.d.ts.map +1 -0
  381. package/src/proxy/redis/RedisProxyServer.js +192 -0
  382. package/src/proxy/redis/register.d.ts +2 -0
  383. package/src/proxy/redis/register.d.ts.map +1 -0
  384. package/src/proxy/redis/register.js +5 -0
  385. package/src/proxy/smtp/SmtpProxyServer.d.ts +19 -0
  386. package/src/proxy/smtp/SmtpProxyServer.d.ts.map +1 -0
  387. package/src/proxy/smtp/SmtpProxyServer.js +290 -0
  388. package/src/proxy/smtp/register.d.ts +2 -0
  389. package/src/proxy/smtp/register.d.ts.map +1 -0
  390. package/src/proxy/smtp/register.js +5 -0
  391. package/src/proxy/sqlserver/SqlServerProxyServer.d.ts +8 -0
  392. package/src/proxy/sqlserver/SqlServerProxyServer.d.ts.map +1 -0
  393. package/src/proxy/sqlserver/SqlServerProxyServer.js +203 -0
  394. package/src/proxy/sqlserver/register.d.ts +2 -0
  395. package/src/proxy/sqlserver/register.d.ts.map +1 -0
  396. package/src/proxy/sqlserver/register.js +5 -0
  397. package/src/proxy.d.ts +4 -0
  398. package/src/proxy.d.ts.map +1 -0
  399. package/src/proxy.js +3 -0
  400. package/src/routes/doc.d.ts.map +1 -1
  401. package/src/routes/doc.js +16 -2
  402. package/src/routes/error.d.ts +5 -4
  403. package/src/routes/error.d.ts.map +1 -1
  404. package/src/routes/error.js +15 -13
  405. package/src/routes/errorPages.d.ts +2 -0
  406. package/src/routes/errorPages.d.ts.map +1 -1
  407. package/src/routes/errorPages.js +144 -4
  408. package/src/runtime/PluginAutoImports.d.ts +1 -0
  409. package/src/runtime/PluginAutoImports.d.ts.map +1 -1
  410. package/src/runtime/PluginAutoImports.js +94 -9
  411. package/src/runtime/RuntimeAdapter.d.ts +8 -9
  412. package/src/runtime/RuntimeAdapter.d.ts.map +1 -1
  413. package/src/runtime/RuntimeAdapter.js +120 -34
  414. package/src/runtime/RuntimeServices.d.ts +47 -0
  415. package/src/runtime/RuntimeServices.d.ts.map +1 -0
  416. package/src/runtime/RuntimeServices.js +164 -0
  417. package/src/runtime/StartupConfigFileRegistry.d.ts +4 -4
  418. package/src/runtime/StartupConfigFileRegistry.d.ts.map +1 -1
  419. package/src/runtime/StartupConfigFileRegistry.js +12 -0
  420. package/src/runtime/WorkerAdapterImports.d.ts +5 -0
  421. package/src/runtime/WorkerAdapterImports.d.ts.map +1 -0
  422. package/src/runtime/WorkerAdapterImports.js +17 -0
  423. package/src/runtime/WorkersModule.d.ts +6 -0
  424. package/src/runtime/WorkersModule.d.ts.map +1 -0
  425. package/src/runtime/WorkersModule.js +278 -0
  426. package/src/runtime/adapters/CloudflareAdapter.d.ts.map +1 -1
  427. package/src/runtime/adapters/CloudflareAdapter.js +19 -2
  428. package/src/runtime/adapters/DenoAdapter.js +1 -0
  429. package/src/runtime/adapters/FargateAdapter.js +1 -1
  430. package/src/runtime/adapters/LambdaAdapter.js +1 -1
  431. package/src/runtime/adapters/NodeServerAdapter.js +1 -1
  432. package/src/runtime/detectRuntime.d.ts +10 -0
  433. package/src/runtime/detectRuntime.d.ts.map +1 -0
  434. package/src/runtime/detectRuntime.js +57 -0
  435. package/src/runtime/useFileLoader.d.ts.map +1 -1
  436. package/src/runtime/useFileLoader.js +16 -0
  437. package/src/scheduler/Schedule.d.ts +36 -0
  438. package/src/scheduler/Schedule.d.ts.map +1 -0
  439. package/src/scheduler/Schedule.js +197 -0
  440. package/src/scheduler/ScheduleHttpGateway.d.ts +8 -0
  441. package/src/scheduler/ScheduleHttpGateway.d.ts.map +1 -0
  442. package/src/scheduler/ScheduleHttpGateway.js +196 -0
  443. package/src/scheduler/ScheduleRunner.d.ts +6 -0
  444. package/src/scheduler/ScheduleRunner.d.ts.map +1 -1
  445. package/src/scheduler/ScheduleRunner.js +166 -29
  446. package/src/scheduler/SchedulerRuntime.d.ts +15 -0
  447. package/src/scheduler/SchedulerRuntime.d.ts.map +1 -0
  448. package/src/scheduler/SchedulerRuntime.js +79 -0
  449. package/src/scheduler/cron/Cron.d.ts +19 -0
  450. package/src/scheduler/cron/Cron.d.ts.map +1 -0
  451. package/src/scheduler/cron/Cron.js +200 -0
  452. package/src/scheduler/leader/SchedulerLeader.d.ts +14 -0
  453. package/src/scheduler/leader/SchedulerLeader.d.ts.map +1 -0
  454. package/src/scheduler/leader/SchedulerLeader.js +187 -0
  455. package/src/scheduler/state/ScheduleStateStore.d.ts +27 -0
  456. package/src/scheduler/state/ScheduleStateStore.d.ts.map +1 -0
  457. package/src/scheduler/state/ScheduleStateStore.js +27 -0
  458. package/src/scheduler/types.d.ts +10 -0
  459. package/src/scheduler/types.d.ts.map +1 -1
  460. package/src/schedules/index.d.ts +1 -0
  461. package/src/schedules/index.d.ts.map +1 -1
  462. package/src/schedules/index.js +1 -0
  463. package/src/schedules/job-tracking-cleanup.d.ts +4 -0
  464. package/src/schedules/job-tracking-cleanup.d.ts.map +1 -0
  465. package/src/schedules/job-tracking-cleanup.js +116 -0
  466. package/src/schedules/log-cleanup.d.ts +1 -2
  467. package/src/schedules/log-cleanup.d.ts.map +1 -1
  468. package/src/schedules/log-cleanup.js +12 -15
  469. package/src/scripts/TemplateImportsCheck.js +2 -2
  470. package/src/scripts/TemplateSync.js +3 -4
  471. package/src/security/CsrfTokenManager.d.ts.map +1 -1
  472. package/src/security/CsrfTokenManager.js +12 -0
  473. package/src/security/Hash.d.ts +1 -1
  474. package/src/security/Hash.d.ts.map +1 -1
  475. package/src/security/Hash.js +31 -36
  476. package/src/security/Sanitizer.d.ts.map +1 -1
  477. package/src/security/Sanitizer.js +1 -9
  478. package/src/security/SignedRequest.d.ts.map +1 -1
  479. package/src/security/SignedRequest.js +2 -2
  480. package/src/seeders/SeederLoader.js +1 -1
  481. package/src/session/SessionManager.d.ts +3 -0
  482. package/src/session/SessionManager.d.ts.map +1 -1
  483. package/src/session/SessionManager.js +49 -10
  484. package/src/sockets/CloudflareSocket.d.ts +24 -0
  485. package/src/sockets/CloudflareSocket.d.ts.map +1 -0
  486. package/src/sockets/CloudflareSocket.js +259 -0
  487. package/src/start.d.ts.map +1 -1
  488. package/src/start.js +1 -8
  489. package/src/templates/docker/docker-compose.ecosystem.yml.tpl +301 -0
  490. package/src/templates/docker/docker-compose.schedules.yml.tpl +84 -0
  491. package/src/templates/project/basic/app/Schedules/index.ts.tpl +0 -0
  492. package/src/templates/project/basic/config/database.ts.tpl +1 -1
  493. package/src/templates/project/basic/src/zintrust.plugins.wg.ts.tpl +8 -0
  494. package/src/toolkit/Secrets/Manifest.d.ts.map +1 -1
  495. package/src/toolkit/Secrets/Manifest.js +5 -7
  496. package/src/tools/mail/drivers/Smtp.d.ts.map +1 -1
  497. package/src/tools/mail/drivers/Smtp.js +229 -18
  498. package/src/tools/mail/index.d.ts.map +1 -1
  499. package/src/tools/mail/index.js +5 -4
  500. package/src/tools/mail/template-loader.d.ts.map +1 -1
  501. package/src/tools/mail/template-loader.js +197 -29
  502. package/src/tools/mail/templates/auth-password-reset.d.ts +3 -0
  503. package/src/tools/mail/templates/auth-password-reset.d.ts.map +1 -0
  504. package/src/tools/mail/templates/auth-password-reset.js +231 -0
  505. package/src/tools/mail/templates/auth-welcome.d.ts +3 -0
  506. package/src/tools/mail/templates/auth-welcome.d.ts.map +1 -0
  507. package/src/tools/mail/templates/auth-welcome.js +236 -0
  508. package/src/tools/mail/templates/general.d.ts +3 -0
  509. package/src/tools/mail/templates/general.d.ts.map +1 -0
  510. package/src/tools/mail/templates/general.js +109 -0
  511. package/src/tools/mail/templates/index.js +2 -2
  512. package/src/tools/mail/templates/job-completed.d.ts +3 -0
  513. package/src/tools/mail/templates/job-completed.d.ts.map +1 -0
  514. package/src/tools/mail/templates/job-completed.js +188 -0
  515. package/src/tools/mail/templates/notifications-new-comment.d.ts +3 -0
  516. package/src/tools/mail/templates/notifications-new-comment.d.ts.map +1 -0
  517. package/src/tools/mail/templates/notifications-new-comment.js +228 -0
  518. package/src/tools/mail/templates/password-reset.d.ts +3 -0
  519. package/src/tools/mail/templates/password-reset.d.ts.map +1 -0
  520. package/src/tools/mail/templates/password-reset.js +221 -0
  521. package/src/tools/mail/templates/performance-report.d.ts +3 -0
  522. package/src/tools/mail/templates/performance-report.d.ts.map +1 -0
  523. package/src/tools/mail/templates/performance-report.js +258 -0
  524. package/src/tools/mail/templates/welcome.d.ts +3 -0
  525. package/src/tools/mail/templates/welcome.d.ts.map +1 -0
  526. package/src/tools/mail/templates/welcome.js +187 -0
  527. package/src/tools/mail/templates/worker-alert.d.ts +3 -0
  528. package/src/tools/mail/templates/worker-alert.d.ts.map +1 -0
  529. package/src/tools/mail/templates/worker-alert.js +229 -0
  530. package/src/tools/notification/Notification.js +1 -1
  531. package/src/tools/notification/testingHelpers.js +6 -5
  532. package/src/tools/queue/AdvancedQueue.js +2 -6
  533. package/src/tools/queue/IdempotencyManager.d.ts +6 -0
  534. package/src/tools/queue/IdempotencyManager.d.ts.map +1 -0
  535. package/src/tools/queue/IdempotencyManager.js +36 -0
  536. package/src/tools/queue/JobHeartbeatStore.d.ts +16 -0
  537. package/src/tools/queue/JobHeartbeatStore.d.ts.map +1 -0
  538. package/src/tools/queue/JobHeartbeatStore.js +67 -0
  539. package/src/tools/queue/JobReconciliationRunner.d.ts +16 -0
  540. package/src/tools/queue/JobReconciliationRunner.d.ts.map +1 -0
  541. package/src/tools/queue/JobReconciliationRunner.js +56 -0
  542. package/src/tools/queue/JobRecoveryDaemon.d.ts +27 -0
  543. package/src/tools/queue/JobRecoveryDaemon.d.ts.map +1 -0
  544. package/src/tools/queue/JobRecoveryDaemon.js +303 -0
  545. package/src/tools/queue/JobStateTracker.d.ts +140 -0
  546. package/src/tools/queue/JobStateTracker.d.ts.map +1 -0
  547. package/src/tools/queue/JobStateTracker.js +409 -0
  548. package/src/tools/queue/JobStateTrackerDbPersistence.d.ts +12 -0
  549. package/src/tools/queue/JobStateTrackerDbPersistence.d.ts.map +1 -0
  550. package/src/tools/queue/JobStateTrackerDbPersistence.js +239 -0
  551. package/src/tools/queue/Queue.d.ts.map +1 -1
  552. package/src/tools/queue/Queue.js +160 -16
  553. package/src/tools/queue/QueueDataRedactor.d.ts +6 -0
  554. package/src/tools/queue/QueueDataRedactor.d.ts.map +1 -0
  555. package/src/tools/queue/QueueDataRedactor.js +45 -0
  556. package/src/tools/queue/QueueExtensions.d.ts.map +1 -1
  557. package/src/tools/queue/QueueExtensions.js +2 -1
  558. package/src/tools/queue/QueueReliabilityMetrics.d.ts +38 -0
  559. package/src/tools/queue/QueueReliabilityMetrics.d.ts.map +1 -0
  560. package/src/tools/queue/QueueReliabilityMetrics.js +131 -0
  561. package/src/tools/queue/QueueReliabilityOrchestrator.d.ts +7 -0
  562. package/src/tools/queue/QueueReliabilityOrchestrator.d.ts.map +1 -0
  563. package/src/tools/queue/QueueReliabilityOrchestrator.js +59 -0
  564. package/src/tools/queue/QueueRuntimeRegistration.d.ts +1 -9
  565. package/src/tools/queue/QueueRuntimeRegistration.d.ts.map +1 -1
  566. package/src/tools/queue/QueueRuntimeRegistration.js +75 -4
  567. package/src/tools/queue/QueueTracing.d.ts +32 -0
  568. package/src/tools/queue/QueueTracing.d.ts.map +1 -0
  569. package/src/tools/queue/QueueTracing.js +151 -0
  570. package/src/tools/queue/StalledJobMonitor.d.ts +5 -0
  571. package/src/tools/queue/StalledJobMonitor.d.ts.map +1 -0
  572. package/src/tools/queue/StalledJobMonitor.js +21 -0
  573. package/src/tools/queue/TimeoutManager.d.ts +14 -0
  574. package/src/tools/queue/TimeoutManager.d.ts.map +1 -0
  575. package/src/tools/queue/TimeoutManager.js +77 -0
  576. package/src/tools/queue/drivers/Redis.d.ts +1 -0
  577. package/src/tools/queue/drivers/Redis.d.ts.map +1 -1
  578. package/src/tools/queue/drivers/Redis.js +1 -0
  579. package/src/tools/queue/index.d.ts +10 -0
  580. package/src/tools/queue/index.d.ts.map +1 -1
  581. package/src/tools/queue/index.js +10 -0
  582. package/src/tools/storage/drivers/R2.d.ts +13 -0
  583. package/src/tools/storage/drivers/R2.d.ts.map +1 -1
  584. package/src/tools/storage/drivers/R2.js +29 -0
  585. package/src/zintrust.plugins.d.ts +9 -0
  586. package/src/zintrust.plugins.d.ts.map +1 -0
  587. package/src/zintrust.plugins.js +7 -0
  588. package/src/zintrust.plugins.wg.d.ts +9 -0
  589. package/src/zintrust.plugins.wg.d.ts.map +1 -0
  590. package/src/zintrust.plugins.wg.js +7 -0
@@ -1 +1 @@
1
- {"version":3,"file":"zintrust-main.d.ts","sourceRoot":"","sources":["../../bin/zintrust-main.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgFH,wBAAsB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CA0CzC;AAED,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"zintrust-main.d.ts","sourceRoot":"","sources":["../../bin/zintrust-main.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAuGH,wBAAsB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CA0CzC;AAED,OAAO,EAAE,CAAC"}
@@ -50,6 +50,27 @@ const printFancyVersion = (version) => {
50
50
  const shouldDebugArgs = (rawArgs) => {
51
51
  return process.env['ZINTRUST_CLI_DEBUG_ARGS'] === '1' && rawArgs.includes('--verbose');
52
52
  };
53
+ const normalizeProxyTargetArgs = (args) => {
54
+ if (args.length < 2 || args[0] !== 'proxy')
55
+ return args;
56
+ const target = args[1];
57
+ if (!target || target.startsWith('-') || target.includes(':'))
58
+ return args;
59
+ const normalized = target.trim().toLowerCase();
60
+ const aliases = {
61
+ redis: 'redis',
62
+ red: 'red',
63
+ smtp: 'smtp',
64
+ mysql: 'mysql',
65
+ postgres: 'postgres',
66
+ mongodb: 'mongodb',
67
+ sqlserver: 'sqlserver',
68
+ };
69
+ const mappedTarget = aliases[normalized];
70
+ if (!mappedTarget)
71
+ return args;
72
+ return [`proxy:${mappedTarget}`, ...args.slice(2)];
73
+ };
53
74
  const handleCliFatal = async (error, context) => {
54
75
  try {
55
76
  const { Logger } = await import('../src/config/logger.js');
@@ -102,7 +123,7 @@ export async function run() {
102
123
  // ignore
103
124
  }
104
125
  }
105
- await cli.run(args);
126
+ await cli.run(normalizeProxyTargetArgs(args));
106
127
  }
107
128
  catch (error) {
108
129
  await handleCliFatal(error, 'CLI execution failed');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zintrust/core",
3
- "version": "0.1.40",
3
+ "version": "0.1.42",
4
4
  "description": "Production-grade TypeScript backend framework for JavaScript",
5
5
  "homepage": "https://zintrust.com",
6
6
  "repository": {
@@ -22,6 +22,22 @@
22
22
  "types": "./src/start.d.ts",
23
23
  "import": "./src/start.js"
24
24
  },
25
+ "./cli": {
26
+ "types": "./src/cli.d.ts",
27
+ "import": "./src/cli.js"
28
+ },
29
+ "./proxy": {
30
+ "types": "./src/proxy.d.ts",
31
+ "import": "./src/proxy.js"
32
+ },
33
+ "./collections": {
34
+ "types": "./src/collections/index.d.ts",
35
+ "import": "./src/collections/index.js"
36
+ },
37
+ "./helper": {
38
+ "types": "./src/helper/index.d.ts",
39
+ "import": "./src/helper/index.js"
40
+ },
25
41
  "./node": {
26
42
  "types": "./src/node.d.ts",
27
43
  "import": "./src/node.js"
@@ -33,11 +49,15 @@
33
49
  "./package.json": "./package.json"
34
50
  },
35
51
  "dependencies": {
36
- "bcrypt": "^6.0.0",
52
+ "bcryptjs": "^3.0.3",
53
+ "bullmq": "^5.67.3",
37
54
  "chalk": "^5.6.2",
38
- "commander": "^14.0.2",
55
+ "commander": "^14.0.3",
39
56
  "inquirer": "^13.2.2",
40
- "jsonwebtoken": "^9.0.3"
57
+ "jsonwebtoken": "^9.0.3",
58
+ "@zintrust/workers": "^0.1.31",
59
+ "mysql2": "^3.16.3",
60
+ "pg": "^8.18.0"
41
61
  },
42
62
  "overrides": {
43
63
  "node-forge": "1.3.3",
@@ -13,7 +13,7 @@
13
13
  <div id="header-actions">
14
14
  <div id="toggle-theme-container">
15
15
  <input type="checkbox" id="toggle-theme-checkbox" />
16
- <label id="toggle-theme-label" for="toggle-theme-checkbox">
16
+ <span id="toggle-theme-label" for="toggle-theme-checkbox">
17
17
  <span id="light-theme-indicator" title="Light mode">
18
18
  <svg
19
19
  xmlns="http://www.w3.org/2000/svg"
@@ -51,7 +51,7 @@
51
51
  <path d="M12 3h.393a7.5 7.5 0 0 0 7.92 12.446A9 9 0 1 1 12 2.992z"></path>
52
52
  </svg>
53
53
  </span>
54
- </label>
54
+ </span>
55
55
  </div>
56
56
  </div>
57
57
  </header>
package/src/auth/Auth.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // TEMPLATE_START
2
- import * as bcrypt from 'bcrypt';
2
+ import bcrypt from 'bcryptjs';
3
3
  import jwt from 'jsonwebtoken';
4
4
  const { sign, verify } = jwt;
5
5
  export const Auth = Object.freeze({
@@ -2,22 +2,7 @@
2
2
  * Application - Framework core entry point
3
3
  * Handles application lifecycle, booting, and environment
4
4
  */
5
- import type { IServiceContainer } from '../container/ServiceContainer';
6
- import type { IMiddlewareStack } from '../middleware/MiddlewareStack';
7
- import { type IRouter } from '../routes/Router';
8
- export interface IApplication {
9
- boot(): Promise<void>;
10
- shutdown(): Promise<void>;
11
- isBooted(): boolean;
12
- isDevelopment(): boolean;
13
- isProduction(): boolean;
14
- isTesting(): boolean;
15
- getEnvironment(): string;
16
- getRouter(): IRouter;
17
- getContainer(): IServiceContainer;
18
- getMiddlewareStack(): IMiddlewareStack;
19
- getBasePath(): string;
20
- }
5
+ import type { IApplication } from './registry/type';
21
6
  /**
22
7
  * Application Factory
23
8
  */
@@ -1 +1 @@
1
- {"version":3,"file":"Application.d.ts","sourceRoot":"","sources":["../../../src/boot/Application.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAGtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAOrE,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,qBAAqB,CAAC;AAK3D,MAAM,WAAW,YAAY;IAC3B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,QAAQ,IAAI,OAAO,CAAC;IACpB,aAAa,IAAI,OAAO,CAAC;IACzB,YAAY,IAAI,OAAO,CAAC;IACxB,SAAS,IAAI,OAAO,CAAC;IACrB,cAAc,IAAI,MAAM,CAAC;IACzB,SAAS,IAAI,OAAO,CAAC;IACrB,YAAY,IAAI,iBAAiB,CAAC;IAClC,kBAAkB,IAAI,gBAAgB,CAAC;IACvC,WAAW,IAAI,MAAM,CAAC;CACvB;AAicD;;GAEG;AACH,eAAO,MAAM,WAAW;IACtB;;OAEG;sBACe,MAAM,GAAG,YAAY;EA0CvC,CAAC;AAEH,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"Application.d.ts","sourceRoot":"","sources":["../../../src/boot/Application.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,OAAO,KAAK,EAAE,YAAY,EAAkC,MAAM,gBAAgB,CAAC;AA2DnF;;GAEG;AACH,eAAO,MAAM,WAAW;IACtB;;OAEG;sBACe,MAAM,GAAG,YAAY;EA0CvC,CAAC;AAEH,eAAe,WAAW,CAAC"}
@@ -2,19 +2,11 @@
2
2
  * Application - Framework core entry point
3
3
  * Handles application lifecycle, booting, and environment
4
4
  */
5
- import { appConfig, cacheConfig, databaseConfig, queueConfig, storageConfig } from '../config/index.js';
5
+ import { appConfig } from '../config/index.js';
6
6
  import { ServiceContainer } from '../container/ServiceContainer.js';
7
- import { StartupHealthChecks } from '../health/StartupHealthChecks.js';
8
7
  import { MiddlewareStack } from '../middleware/MiddlewareStack.js';
9
- import broadcastConfig from '../config/broadcast.js';
10
- import { FeatureFlags } from '../config/features.js';
11
- import { Logger } from '../config/logger.js';
12
- import notificationConfig from '../config/notification.js';
13
- import { StartupConfigValidator } from '../config/StartupConfigValidator.js';
14
8
  import { Router } from '../routes/Router.js';
15
- import * as path from '../node-singletons/path.js';
16
- import { pathToFileURL } from '../node-singletons/url.js';
17
- import { StartupConfigFile, StartupConfigFileRegistry } from '../runtime/StartupConfigFileRegistry.js';
9
+ import { createLifecycle, registerFrameworkShutdownHooks } from './registry/runtime.js';
18
10
  const ShutdownManager = Object.freeze({
19
11
  create() {
20
12
  const hooks = [];
@@ -56,286 +48,6 @@ const registerCoreInstances = (params) => {
56
48
  params.container.singleton('container', params.container);
57
49
  params.container.singleton('shutdownManager', params.shutdownManager);
58
50
  };
59
- /**
60
- * Helper: Register ConnectionManager shutdown hook
61
- */
62
- const registerConnectionManagerHook = (shutdownManager) => {
63
- shutdownManager.add(async () => {
64
- try {
65
- const mod = await import('../orm/ConnectionManager.js');
66
- await mod.ConnectionManager.shutdownIfInitialized();
67
- }
68
- catch {
69
- /* ignore import failures in restrictive runtimes */
70
- }
71
- });
72
- };
73
- /**
74
- * Helper: Register Worker management system shutdown hook
75
- */
76
- const registerWorkerShutdownHook = async (shutdownManager) => {
77
- // Ensure worker management system is asked to shutdown BEFORE databases are reset.
78
- // This prevents workers from trying to access DB connections that have already
79
- // been closed by subsequent shutdown hooks.
80
- shutdownManager.add(async () => {
81
- try {
82
- const mod = (await import('@zintrust/workers'));
83
- const isShuttingDown = typeof mod.WorkerShutdown.isShuttingDown === 'function'
84
- ? mod.WorkerShutdown.isShuttingDown()
85
- : (mod.WorkerShutdown.getShutdownState?.().isShuttingDown ?? false);
86
- const completedAt = mod.WorkerShutdown.getShutdownState?.().completedAt ?? null;
87
- if (isShuttingDown || completedAt !== null)
88
- return;
89
- await mod.WorkerShutdown.shutdown({
90
- signal: 'APP_SHUTDOWN',
91
- timeout: 5000,
92
- forceExit: false,
93
- });
94
- }
95
- catch {
96
- /* ignore import failures in restrictive runtimes */
97
- }
98
- });
99
- return Promise.resolve(); // NOSONAR
100
- };
101
- /**
102
- * Helper: Register Database reset hook
103
- */
104
- const registerDatabaseResetHook = (shutdownManager) => {
105
- shutdownManager.add(async () => {
106
- try {
107
- const mod = await import('../orm/Database.js');
108
- mod.resetDatabase();
109
- }
110
- catch {
111
- /* ignore import failures in restrictive runtimes */
112
- }
113
- });
114
- };
115
- /**
116
- * Helper: Register generic reset hook for modules with reset() method
117
- */
118
- const registerResetHook = (shutdownManager, modulePath, exportName) => {
119
- shutdownManager.add(async () => {
120
- try {
121
- const mod = (await import(modulePath));
122
- const resetModule = mod[exportName];
123
- if (resetModule?.reset) {
124
- resetModule.reset();
125
- }
126
- }
127
- catch {
128
- /* ignore import failures in restrictive runtimes */
129
- }
130
- });
131
- };
132
- /**
133
- * Helper: Register FileLogWriter flush hook
134
- */
135
- const registerFileLogFlushHook = (shutdownManager) => {
136
- shutdownManager.add(async () => {
137
- try {
138
- const mod = await import('../config/FileLogWriter.js');
139
- mod.FileLogWriter.flush();
140
- }
141
- catch {
142
- /* ignore import failures in restrictive runtimes */
143
- }
144
- });
145
- };
146
- const registerFrameworkShutdownHooks = (shutdownManager) => {
147
- // Register framework-level shutdown hooks for long-lived resources
148
- registerConnectionManagerHook(shutdownManager);
149
- // Ensure worker management system is asked to shutdown BEFORE databases are reset
150
- void registerWorkerShutdownHook(shutdownManager);
151
- // Database and cache reset
152
- registerDatabaseResetHook(shutdownManager);
153
- registerResetHook(shutdownManager, '@cache/Cache', 'Cache');
154
- // File logging
155
- registerFileLogFlushHook(shutdownManager);
156
- // Registry resets
157
- registerResetHook(shutdownManager, '@broadcast/BroadcastRegistry', 'BroadcastRegistry');
158
- registerResetHook(shutdownManager, '@storage/StorageDiskRegistry', 'StorageDiskRegistry');
159
- registerResetHook(shutdownManager, '@notification/NotificationChannelRegistry', 'NotificationChannelRegistry');
160
- registerResetHook(shutdownManager, '@mail/MailDriverRegistry', 'MailDriverRegistry');
161
- registerResetHook(shutdownManager, '@tools/queue/Queue', 'Queue');
162
- };
163
- const tryImportRoutesFromAppBase = async (resolvedBasePath) => {
164
- if (resolvedBasePath === '')
165
- return undefined;
166
- const candidates = [
167
- // Dev (tsx)
168
- path.join(resolvedBasePath, 'routes', 'api.ts'),
169
- // Production build output
170
- path.join(resolvedBasePath, 'dist', 'routes', 'api.js'),
171
- // Fallback (in case someone transpiles without /dist)
172
- path.join(resolvedBasePath, 'routes', 'api.js'),
173
- ];
174
- for (const candidate of candidates) {
175
- try {
176
- const url = pathToFileURL(candidate).href;
177
- // Intentionally sequential to find the first working candidates
178
- // eslint-disable-next-line no-await-in-loop
179
- return (await import(url));
180
- }
181
- catch {
182
- // keep trying
183
- }
184
- }
185
- return undefined;
186
- };
187
- const registerRoutes = async (resolvedBasePath, router) => {
188
- try {
189
- const mod = await tryImportRoutesFromAppBase(resolvedBasePath);
190
- if (typeof mod?.registerRoutes === 'function') {
191
- mod.registerRoutes(router);
192
- }
193
- else {
194
- const frameworkRoutes = await tryImportOptional('@routes/api');
195
- if (typeof frameworkRoutes?.registerRoutes === 'function') {
196
- frameworkRoutes.registerRoutes(router);
197
- }
198
- else {
199
- Logger.warn('No app routes found and framework routes are unavailable. Ensure routes/api.ts exists in the project.');
200
- }
201
- }
202
- // Always register core framework routes (health, metrics, doc) after app routes
203
- // This ensures app can override but core routes always exist
204
- const { registerCoreRoutes } = await import('../routes/CoreRoutes.js');
205
- registerCoreRoutes(router);
206
- }
207
- catch (error) {
208
- Logger.error('Failed to register routes:', error);
209
- }
210
- };
211
- const initializeArtifactDirectories = async (resolvedBasePath) => {
212
- if (resolvedBasePath === '')
213
- return;
214
- if (typeof process === 'undefined')
215
- return;
216
- let nodeFs;
217
- try {
218
- nodeFs = await import('../node-singletons/fs.js');
219
- }
220
- catch {
221
- return;
222
- }
223
- const dirs = ['logs', 'storage', 'tmp'];
224
- for (const dir of dirs) {
225
- const fullPath = path.join(resolvedBasePath, dir);
226
- try {
227
- if (!nodeFs.existsSync(fullPath)) {
228
- nodeFs.mkdirSync(fullPath, { recursive: true });
229
- Logger.info(`✓ Created directory: ${dir}`);
230
- }
231
- }
232
- catch (error) {
233
- Logger.warn(`Failed to create ${dir} directory`, error);
234
- }
235
- }
236
- };
237
- const tryImportOptional = async (modulePath) => {
238
- try {
239
- return (await import(modulePath));
240
- }
241
- catch {
242
- return undefined;
243
- }
244
- };
245
- const isCompiledJsModule = () => {
246
- // When running from dist, this module is compiled to .js and Node ESM resolution
247
- // requires explicit file extensions for relative imports.
248
- return import.meta.url.endsWith('.js');
249
- };
250
- const dbLoader = async () => {
251
- const db = await tryImportOptional(isCompiledJsModule()
252
- ? '../orm/DatabaseRuntimeRegistration.js'
253
- : '../orm/DatabaseRuntimeRegistration');
254
- db?.registerDatabasesFromRuntimeConfig?.(databaseConfig);
255
- };
256
- const queuesLoader = async () => {
257
- const queues = await tryImportOptional(isCompiledJsModule()
258
- ? '../tools/queue/QueueRuntimeRegistration.js'
259
- : '../tools/queue/QueueRuntimeRegistration');
260
- queues?.registerQueuesFromRuntimeConfig?.(queueConfig);
261
- };
262
- const cachesLoader = async () => {
263
- const caches = await tryImportOptional(isCompiledJsModule()
264
- ? '../cache/CacheRuntimeRegistration.js'
265
- : '../cache/CacheRuntimeRegistration');
266
- caches?.registerCachesFromRuntimeConfig?.(cacheConfig);
267
- };
268
- const registerFromRuntimeConfig = async () => {
269
- await dbLoader();
270
- await queuesLoader();
271
- await cachesLoader();
272
- const broadcasters = await tryImportOptional(isCompiledJsModule()
273
- ? '../tools/broadcast/BroadcastRuntimeRegistration.js'
274
- : '../tools/broadcast/BroadcastRuntimeRegistration');
275
- broadcasters?.registerBroadcastersFromRuntimeConfig?.({
276
- default: broadcastConfig.default,
277
- drivers: broadcastConfig.drivers,
278
- });
279
- const disks = await tryImportOptional(isCompiledJsModule()
280
- ? '../tools/storage/StorageRuntimeRegistration.js'
281
- : '../tools/storage/StorageRuntimeRegistration');
282
- disks?.registerDisksFromRuntimeConfig?.(storageConfig);
283
- const notifications = await tryImportOptional(isCompiledJsModule()
284
- ? '../tools/notification/NotificationRuntimeRegistration.js'
285
- : '../tools/notification/NotificationRuntimeRegistration');
286
- notifications?.registerNotificationChannelsFromRuntimeConfig?.({
287
- default: notificationConfig.default,
288
- drivers: notificationConfig.drivers,
289
- });
290
- };
291
- const createLifecycle = (params) => {
292
- const boot = async () => {
293
- if (params.getBooted())
294
- return;
295
- Logger.info(`🚀 Booting ZinTrust Application in ${params.environment} mode...`);
296
- StartupConfigValidator.assertValid();
297
- // Preload project-owned config overrides that must be available synchronously.
298
- await StartupConfigFileRegistry.preload([
299
- StartupConfigFile.Middleware,
300
- StartupConfigFile.Cache,
301
- StartupConfigFile.Database,
302
- StartupConfigFile.Queue,
303
- StartupConfigFile.Storage,
304
- StartupConfigFile.Mail,
305
- StartupConfigFile.Broadcast,
306
- StartupConfigFile.Notification,
307
- ]);
308
- FeatureFlags.initialize();
309
- await StartupHealthChecks.assertHealthy();
310
- await registerFromRuntimeConfig();
311
- await initializeArtifactDirectories(params.resolvedBasePath);
312
- await registerRoutes(params.resolvedBasePath, params.router);
313
- // Register service providers
314
- // Bootstrap services
315
- Logger.info('✅ Application booted successfully');
316
- params.setBooted(true);
317
- };
318
- const shutdown = async () => {
319
- Logger.info('🛑 Shutting down application...');
320
- try {
321
- await params.shutdownManager.run();
322
- }
323
- catch (error) {
324
- Logger.error('Shutdown hook failed:', error);
325
- }
326
- // Ensure FileLogWriter.flush is attempted even if dynamic registration failed.
327
- try {
328
- const fileLogWriter = await tryImportOptional('@config/FileLogWriter');
329
- fileLogWriter?.FileLogWriter?.flush?.();
330
- }
331
- catch {
332
- /* best-effort */
333
- }
334
- params.setBooted(false);
335
- Logger.info('✅ Application shut down successfully');
336
- };
337
- return { boot, shutdown };
338
- };
339
51
  /**
340
52
  * Application Factory
341
53
  */
@@ -2,9 +2,9 @@
2
2
  * Server - HTTP Server implementation
3
3
  * Uses Node.js built-in HTTP server with no external dependencies
4
4
  */
5
- import type { IApplication } from './Application';
6
5
  import type { IKernel } from '../http/Kernel';
7
6
  import * as http from '../node-singletons/http';
7
+ import type { IApplication } from './registry/type';
8
8
  export interface IServer {
9
9
  listen(): Promise<void>;
10
10
  close(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"Server.d.ts","sourceRoot":"","sources":["../../../src/boot/Server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAOtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAM5C,OAAO,KAAK,IAAI,MAAM,uBAAuB,CAAC;AAG9C,MAAM,WAAW,OAAO;IACtB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC;CAC9B;AAkED;;;GAGG;AACH,eAAO,MAAM,MAAM;IACjB;;OAEG;gBACS,YAAY,SAAS,MAAM,SAAS,MAAM,WAAU,OAAO,GAAG,IAAI,GAAU,OAAO;EA4D/F,CAAC;AAEH,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"Server.d.ts","sourceRoot":"","sources":["../../../src/boot/Server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAM5C,OAAO,KAAK,IAAI,MAAM,uBAAuB,CAAC;AAE9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,MAAM,WAAW,OAAO;IACtB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC;CAC9B;AAkED;;;GAGG;AACH,eAAO,MAAM,MAAM;IACjB;;OAEG;gBACS,YAAY,SAAS,MAAM,SAAS,MAAM,WAAU,OAAO,GAAG,IAAI,GAAU,OAAO;EA4D/F,CAAC;AAEH,eAAe,MAAM,CAAC"}
@@ -9,6 +9,7 @@ import { appConfig } from '../config/app.js';
9
9
  import { Env } from '../config/env.js';
10
10
  import { Logger } from '../config/logger.js';
11
11
  import { ErrorFactory } from '../exceptions/ZintrustError.js';
12
+ import { loadWorkersModule } from '../runtime/WorkersModule.js';
12
13
  let appInstance;
13
14
  let serverInstance;
14
15
  let isShuttingDown = false;
@@ -36,29 +37,45 @@ const logBootstrapErrorDetails = (error) => {
36
37
  // best-effort logging
37
38
  }
38
39
  };
39
- const startSchedulesIfNeeded = async (app) => {
40
+ const startSchedulesIfNeeded = async (application) => {
40
41
  try {
42
+ if (Env.getBool('SCHEDULES_ENABLED', false) === false)
43
+ return;
41
44
  const runtime = appConfig.detectRuntime();
42
45
  if (runtime !== 'nodejs' && runtime !== 'fargate')
43
46
  return;
44
- const { create: createScheduleRunner } = await import('../scheduler/ScheduleRunner.js');
45
- const schedules = await import('../schedules/index.js');
46
- const runner = createScheduleRunner();
47
- for (const schedule of Object.values(schedules)) {
48
- // Each schedule is expected to export a default ISchedule
49
- // @ts-ignore
50
- runner.register(schedule);
47
+ const { SchedulerRuntime } = await import('../scheduler/SchedulerRuntime.js');
48
+ const coreSchedules = await import('../schedules/index.js');
49
+ let appSchedules = {};
50
+ try {
51
+ const appSchedulesModuleId = '@app/' + 'Schedules';
52
+ appSchedules = (await import(appSchedulesModuleId));
53
+ }
54
+ catch {
55
+ /* v8 ignore next */
56
+ appSchedules = {};
51
57
  }
52
- runner.start();
58
+ const isSchedule = (value) => {
59
+ if (value === null || value === undefined || typeof value !== 'object')
60
+ return false;
61
+ return ('name' in value &&
62
+ typeof value.name === 'string' &&
63
+ value.name.trim().length > 0);
64
+ };
65
+ const coreScheduleEntries = Object.values(coreSchedules).filter(isSchedule);
66
+ const appScheduleEntries = Object.values(appSchedules).filter(isSchedule);
67
+ SchedulerRuntime.registerMany(coreScheduleEntries, 'core');
68
+ SchedulerRuntime.registerMany(appScheduleEntries, 'app');
69
+ SchedulerRuntime.start();
53
70
  // Add shutdown hook to stop schedules gracefully
54
- const shutdownManager = app.getContainer().get('shutdownManager');
71
+ const shutdownManager = application.getContainer().get('shutdownManager');
55
72
  if ((typeof shutdownManager === 'object' || typeof shutdownManager === 'function') &&
56
73
  shutdownManager !== null &&
57
74
  'add' in shutdownManager &&
58
75
  typeof shutdownManager.add === 'function') {
59
76
  shutdownManager.add(async () => {
60
77
  const scheduleTimeoutMs = Env.getInt('SCHEDULE_SHUTDOWN_TIMEOUT_MS', 30000);
61
- await runner.stop(scheduleTimeoutMs);
78
+ await SchedulerRuntime.stop(scheduleTimeoutMs);
62
79
  });
63
80
  }
64
81
  }
@@ -101,9 +118,10 @@ const gracefulShutdown = async (signal) => {
101
118
  forceExitTimer.unref?.();
102
119
  await withTimeout((async () => {
103
120
  // Shutdown worker management system FIRST (before database closes)
104
- if (appConfig.detectRuntime() === 'nodejs' || appConfig.detectRuntime() === 'lambda') {
121
+ if ((appConfig.detectRuntime() === 'nodejs' || appConfig.detectRuntime() === 'lambda') &&
122
+ appConfig.dockerWorker === false) {
105
123
  try {
106
- const workers = await import('@zintrust/workers');
124
+ const workers = await loadWorkersModule();
107
125
  const workerBudgetMs = Math.min(15000, remainingMs());
108
126
  await withTimeout(workers.WorkerShutdown.shutdown({
109
127
  signal,
@@ -137,10 +155,16 @@ const gracefulShutdown = async (signal) => {
137
155
  }
138
156
  };
139
157
  async function useWorkerStarter() {
158
+ // Check if workers are enabled in this environment
159
+ const workerEnabled = Env.getBool('WORKER_ENABLED', true);
160
+ if (!workerEnabled || appConfig.dockerWorker === true) {
161
+ Logger.info('Workers disabled in this runtime (WORKER_ENABLED=false && DOCKER_WORKER=true), skipping worker management initialization');
162
+ return;
163
+ }
140
164
  // Initialize worker management system
141
165
  let workerInit = null;
142
166
  try {
143
- const workers = await import('@zintrust/workers');
167
+ const workers = await loadWorkersModule();
144
168
  if (workers?.WorkerInit !== undefined) {
145
169
  workerInit = workers.WorkerInit;
146
170
  await workers.WorkerInit.initialize({
@@ -199,12 +223,22 @@ const BootstrapFunctions = Object.freeze({
199
223
  Logger.info(`ZinTrust documentation at http://${host}:${port}/doc`);
200
224
  // Start schedules for long-running runtimes (Node.js / Fargate)
201
225
  await startSchedulesIfNeeded(app);
202
- if (appConfig.detectRuntime() === 'nodejs' || appConfig.detectRuntime() === 'lambda') {
226
+ if (appConfig.dockerWorker === false &&
227
+ (appConfig.detectRuntime() === 'nodejs' || appConfig.detectRuntime() === 'lambda')) {
203
228
  await useWorkerStarter();
204
229
  }
205
230
  }
206
231
  catch (error) {
207
- Logger.error('Failed to bootstrap application:', error);
232
+ try {
233
+ Logger.error('Failed to bootstrap application:', error);
234
+ }
235
+ catch {
236
+ // best-effort logging
237
+ }
238
+ Logger.debug('[bootstrap] start: failed', {
239
+ message: error instanceof Error ? error.message : String(error),
240
+ stack: error instanceof Error ? error.stack : undefined,
241
+ });
208
242
  logBootstrapErrorDetails(error);
209
243
  process.exit(1);
210
244
  }
@@ -0,0 +1,6 @@
1
+ import type { IRouter } from '../../routes/Router';
2
+ export declare const isCompiledJsModule: () => boolean;
3
+ export declare const tryImportOptional: <T>(modulePath: string) => Promise<T | undefined>;
4
+ export declare const tryImportOptionalR: <T>(modulePath: string) => Promise<T | undefined>;
5
+ export declare const registerMasterRoutes: (resolvedBasePath: string, router: IRouter) => Promise<void>;
6
+ //# sourceMappingURL=registerRoute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registerRoute.d.ts","sourceRoot":"","sources":["../../../../src/boot/registry/registerRoute.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAQnD,eAAO,MAAM,kBAAkB,QAAO,OAKrC,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAU,CAAC,EAAE,YAAY,MAAM,KAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAMpF,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAU,CAAC,EAAE,YAAY,MAAM,KAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAOrF,CAAC;AAkEF,eAAO,MAAM,oBAAoB,GAC/B,kBAAkB,MAAM,EACxB,QAAQ,OAAO,KACd,OAAO,CAAC,IAAI,CAmBd,CAAC"}