@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
@@ -0,0 +1,225 @@
1
+ /**
2
+ * Lightweight validation / type helper utilities used across the codebase.
3
+ * Keep implementations small and dependency-free so they work in both
4
+ * Node and Cloudflare Worker runtimes.
5
+ */
6
+ /** Check whether value is a string primitive */
7
+ export declare const isString: (value: unknown) => value is string;
8
+ /** Check whether value is an array */
9
+ export declare const isArray: (value: unknown) => value is unknown[];
10
+ /** Check whether value is an object (and not null/array) */
11
+ export declare const isObject: (value: unknown) => value is Record<string, unknown>;
12
+ /** Check whether value is a function */
13
+ export declare const isFunction: (value: unknown) => value is (...args: unknown[]) => unknown;
14
+ /** Check whether value is a valid Date object */
15
+ export declare const isDate: (value: unknown) => value is Date;
16
+ /**
17
+ * Check if value is "empty".
18
+ * Matches legacy behavior: null, undefined, false, 0, '', '0' are all considered empty.
19
+ */
20
+ export declare const isEmpty: (value: unknown) => boolean;
21
+ /** Check if value is null or string 'null'/'NULL' or empty string */
22
+ export declare const isNull: (value: unknown) => boolean;
23
+ /** Check if value is undefined */
24
+ export declare const isUndefined: (value: unknown) => boolean;
25
+ /** Check if value is undefined or satisfies isNull() */
26
+ export declare const isUndefinedOrNull: (value: unknown) => boolean;
27
+ /**
28
+ * Check whether value is a boolean primitive.
29
+ */
30
+ export declare function isBoolean(value: unknown, allowString?: false): value is boolean;
31
+ /**
32
+ * Check whether value is a boolean primitive OR a boolean-like string.
33
+ */
34
+ export declare function isBoolean(value: unknown, allowString: true): value is boolean | string;
35
+ /** Check if value is a string representation of a boolean (true/false/1/0) */
36
+ export declare const isBooleanString: (value: unknown) => boolean;
37
+ /** Check if value is a valid number or numeric string */
38
+ export declare const isNumeric: (value: unknown) => boolean;
39
+ /**
40
+ * Check if value is an integer.
41
+ */
42
+ export declare function isInt(value: unknown, allowString?: false, conditions?: {
43
+ min?: number;
44
+ max?: number;
45
+ }): value is number;
46
+ /**
47
+ * Check if value is an integer OR a string representing an integer.
48
+ */
49
+ export declare function isInt(value: unknown, allowString: true, conditions?: {
50
+ min?: number;
51
+ max?: number;
52
+ }): value is number | string;
53
+ /**
54
+ * Check if value is a float (finite number).
55
+ */
56
+ export declare function isFloat(value: unknown, allowString?: false, conditions?: {
57
+ min?: number;
58
+ max?: number;
59
+ }): value is number;
60
+ /**
61
+ * Check if value is a float OR a string representing a float.
62
+ */
63
+ export declare function isFloat(value: unknown, allowString: true, conditions?: {
64
+ min?: number;
65
+ max?: number;
66
+ }): value is number | string;
67
+ /** Check if value is a valid integer string (supports min/max) */
68
+ export declare const isIntString: (value: unknown, conditions?: {
69
+ min?: number;
70
+ max?: number;
71
+ }) => boolean;
72
+ /** Check if value is a valid float string (supports min/max) */
73
+ export declare const isFloatString: (value: unknown, conditions?: {
74
+ min?: number;
75
+ max?: number;
76
+ }) => boolean;
77
+ /** Check if value is a valid email string */
78
+ export declare const isEmail: (value: unknown) => boolean;
79
+ /** Check if value is a valid URL string (http/https) */
80
+ export declare const isUrl: (value: unknown) => boolean;
81
+ /** Check if string contains only letters */
82
+ export declare const isAlpha: (value: unknown) => boolean;
83
+ /** Check if string contains only letters and numbers */
84
+ export declare const isAlphanumeric: (value: unknown) => boolean;
85
+ /**
86
+ * Check if string matches regex.
87
+ *
88
+ * Security/perf: Regex evaluation can be expensive for some patterns.
89
+ * This helper defensively caps the input length to reduce ReDoS risk
90
+ * when used on untrusted strings.
91
+ */
92
+ export declare const isMatch: (value: unknown, regex: RegExp, options?: {
93
+ maxLength?: number;
94
+ }) => boolean;
95
+ /** Check if value exists in array */
96
+ export declare const isIn: (value: unknown, array: unknown[]) => boolean;
97
+ /** Check if value does not exist in array */
98
+ export declare const isNotIn: (value: unknown, array: unknown[]) => boolean;
99
+ /** Check if string or array has exact length */
100
+ export declare const isLength: (value: unknown, length: number) => boolean;
101
+ /** Check if string or array has minimum length */
102
+ export declare const isMinLength: (value: unknown, min: number) => boolean;
103
+ /** Check if string or array has maximum length */
104
+ export declare const isMaxLength: (value: unknown, max: number) => boolean;
105
+ /** Check if value is a string with length > 0 (after trim) */
106
+ export declare const isNonEmptyString: (value: unknown) => value is string;
107
+ /** Check if value is an array with items */
108
+ export declare const isNonEmptyArray: (value: unknown) => value is unknown[];
109
+ /** Check if value is an object with keys */
110
+ export declare const isNonEmptyObject: (value: unknown) => value is Record<string, unknown>;
111
+ /**
112
+ * Check if value is a string containing only whitespace.
113
+ * Useful for distinguishing between truly empty and whitespace-only strings.
114
+ */
115
+ export declare const isWhitespaceOnly: (value: unknown) => boolean;
116
+ /**
117
+ * Check if value is a valid UUID v4 string.
118
+ * Format: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
119
+ */
120
+ export declare const isUUID: (value: unknown) => boolean;
121
+ /**
122
+ * Check if value is a valid JSON string (parses without error).
123
+ */
124
+ export declare const isJSON: (value: unknown) => boolean;
125
+ /**
126
+ * Check if value is a valid Base64-encoded string.
127
+ */
128
+ export declare const isBase64: (value: unknown) => boolean;
129
+ /**
130
+ * Check if value is a valid hexadecimal color string.
131
+ * Accepts #RGB, #RGBA, #RRGGBB, #RRGGBBAA formats.
132
+ */
133
+ export declare const isHexColor: (value: unknown) => boolean;
134
+ /**
135
+ * Check if value is a valid URL slug (lowercase alphanumeric with hyphens).
136
+ * Example: "my-blog-post", "user-profile-page"
137
+ */
138
+ export declare const isSlug: (value: unknown) => boolean;
139
+ /**
140
+ * Check if value is a string with uppercase letters.
141
+ */
142
+ export declare const isUpperCase: (value: unknown) => boolean;
143
+ /**
144
+ * Check if value is a string with lowercase letters.
145
+ */
146
+ export declare const isLowerCase: (value: unknown) => boolean;
147
+ /** Check if number is positive (> 0) */
148
+ export declare const isPositive: (value: unknown) => boolean;
149
+ /** Check if number is negative (< 0) */
150
+ export declare const isNegative: (value: unknown) => boolean;
151
+ /** Check if number is zero */
152
+ export declare const isZero: (value: unknown) => boolean;
153
+ /** Check if number is even */
154
+ export declare const isEven: (value: unknown) => boolean;
155
+ /** Check if number is odd */
156
+ export declare const isOdd: (value: unknown) => boolean;
157
+ /**
158
+ * Check if number has decimal places.
159
+ * Examples: 1.5 → true, 1.0 → false, 1 → false
160
+ */
161
+ export declare const isDecimal: (value: unknown) => boolean;
162
+ /**
163
+ * Check if number is between min and max (inclusive).
164
+ */
165
+ export declare const isBetween: (value: unknown, min: number, max: number) => boolean;
166
+ /**
167
+ * Check if number is divisible by divisor.
168
+ */
169
+ export declare const isDivisibleBy: (value: unknown, divisor: number) => boolean;
170
+ export declare const Helpers: Readonly<{
171
+ isString: (value: unknown) => value is string;
172
+ isBoolean: typeof isBoolean;
173
+ isBooleanString: (value: unknown) => boolean;
174
+ isEmpty: (value: unknown) => boolean;
175
+ isNull: (value: unknown) => boolean;
176
+ isUndefined: (value: unknown) => boolean;
177
+ isUndefinedOrNull: (value: unknown) => boolean;
178
+ isArray: (value: unknown) => value is unknown[];
179
+ isObject: (value: unknown) => value is Record<string, unknown>;
180
+ isFunction: (value: unknown) => value is (...args: unknown[]) => unknown;
181
+ isDate: (value: unknown) => value is Date;
182
+ isEmail: (value: unknown) => boolean;
183
+ isUrl: (value: unknown) => boolean;
184
+ isIn: (value: unknown, array: unknown[]) => boolean;
185
+ isNotIn: (value: unknown, array: unknown[]) => boolean;
186
+ isLength: (value: unknown, length: number) => boolean;
187
+ isMinLength: (value: unknown, min: number) => boolean;
188
+ isMaxLength: (value: unknown, max: number) => boolean;
189
+ isMatch: (value: unknown, regex: RegExp, options?: {
190
+ maxLength?: number;
191
+ }) => boolean;
192
+ isAlpha: (value: unknown) => boolean;
193
+ isAlphanumeric: (value: unknown) => boolean;
194
+ isNumeric: (value: unknown) => boolean;
195
+ isInt: typeof isInt;
196
+ isFloat: typeof isFloat;
197
+ isIntString: (value: unknown, conditions?: {
198
+ min?: number;
199
+ max?: number;
200
+ }) => boolean;
201
+ isFloatString: (value: unknown, conditions?: {
202
+ min?: number;
203
+ max?: number;
204
+ }) => boolean;
205
+ isNonEmptyString: (value: unknown) => value is string;
206
+ isNonEmptyArray: (value: unknown) => value is unknown[];
207
+ isNonEmptyObject: (value: unknown) => value is Record<string, unknown>;
208
+ isWhitespaceOnly: (value: unknown) => boolean;
209
+ isUUID: (value: unknown) => boolean;
210
+ isJSON: (value: unknown) => boolean;
211
+ isBase64: (value: unknown) => boolean;
212
+ isHexColor: (value: unknown) => boolean;
213
+ isSlug: (value: unknown) => boolean;
214
+ isUpperCase: (value: unknown) => boolean;
215
+ isLowerCase: (value: unknown) => boolean;
216
+ isPositive: (value: unknown) => boolean;
217
+ isNegative: (value: unknown) => boolean;
218
+ isZero: (value: unknown) => boolean;
219
+ isEven: (value: unknown) => boolean;
220
+ isOdd: (value: unknown) => boolean;
221
+ isDecimal: (value: unknown) => boolean;
222
+ isBetween: (value: unknown, min: number, max: number) => boolean;
223
+ isDivisibleBy: (value: unknown, divisor: number) => boolean;
224
+ }>;
225
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/helper/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,347 @@
1
+ /**
2
+ * Lightweight validation / type helper utilities used across the codebase.
3
+ * Keep implementations small and dependency-free so they work in both
4
+ * Node and Cloudflare Worker runtimes.
5
+ */
6
+ /* -------------------------------------------------------------------------- */
7
+ /* Type Checkers */
8
+ /* -------------------------------------------------------------------------- */
9
+ /** Check whether value is a string primitive */
10
+ export const isString = (value) => typeof value === 'string';
11
+ /** Check whether value is an array */
12
+ export const isArray = (value) => Array.isArray(value);
13
+ /** Check whether value is an object (and not null/array) */
14
+ export const isObject = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
15
+ /** Check whether value is a function */
16
+ export const isFunction = (value) => typeof value === 'function';
17
+ /** Check whether value is a valid Date object */
18
+ export const isDate = (value) => value instanceof Date && !Number.isNaN(value.getTime());
19
+ /* -------------------------------------------------------------------------- */
20
+ /* Empty / Null Checks */
21
+ /* -------------------------------------------------------------------------- */
22
+ /**
23
+ * Check if value is "empty".
24
+ * Matches legacy behavior: null, undefined, false, 0, '', '0' are all considered empty.
25
+ */
26
+ export const isEmpty = (value) => value === null ||
27
+ value === undefined ||
28
+ value === false ||
29
+ value === 0 ||
30
+ value === '' ||
31
+ value === '0';
32
+ /** Check if value is null or string 'null'/'NULL' or empty string */
33
+ export const isNull = (value) => value === null ||
34
+ (typeof value === 'string' && value.trim().toLowerCase() === 'null') ||
35
+ (typeof value === 'string' && value === '');
36
+ /** Check if value is undefined */
37
+ export const isUndefined = (value) => value === undefined;
38
+ /** Check if value is undefined or satisfies isNull() */
39
+ export const isUndefinedOrNull = (value) => isUndefined(value) || isNull(value);
40
+ /**
41
+ * Implementation
42
+ */
43
+ export function isBoolean(value, allowString = false) {
44
+ if (typeof value === 'boolean')
45
+ return true;
46
+ if (!allowString)
47
+ return false;
48
+ if (typeof value !== 'string' && typeof value !== 'number')
49
+ return false;
50
+ const v = String(value).trim().toLowerCase();
51
+ return v === 'true' || v === 'false' || v === '1' || v === '0';
52
+ }
53
+ /** Check if value is a string representation of a boolean (true/false/1/0) */
54
+ export const isBooleanString = (value) => typeof value === 'string' && /^(?:true|false|1|0)$/i.test(value.trim());
55
+ /* -------------------------------------------------------------------------- */
56
+ /* Numeric Checks */
57
+ /* -------------------------------------------------------------------------- */
58
+ /** Check if value is a valid number or numeric string */
59
+ export const isNumeric = (value) => {
60
+ if (typeof value === 'number')
61
+ return Number.isFinite(value);
62
+ if (typeof value !== 'string')
63
+ return false;
64
+ const s = value.trim();
65
+ if (s.length === 0)
66
+ return false;
67
+ return /^[-+]?\d+(?:\.\d+)?$/.test(s);
68
+ };
69
+ /**
70
+ * Implementation
71
+ */
72
+ export function isInt(value, allowString = false, conditions) {
73
+ let n;
74
+ if (typeof value === 'number') {
75
+ n = value;
76
+ }
77
+ else if (allowString && typeof value === 'string' && /^[+-]?\d+$/.test(value.trim())) {
78
+ n = Number(value);
79
+ }
80
+ else {
81
+ return false;
82
+ }
83
+ if (!Number.isInteger(n))
84
+ return false;
85
+ if (conditions?.min !== undefined && n < conditions.min)
86
+ return false;
87
+ if (conditions?.max !== undefined && n > conditions.max)
88
+ return false;
89
+ return true;
90
+ }
91
+ /**
92
+ * Implementation
93
+ */
94
+ export function isFloat(value, allowString = false, conditions) {
95
+ let n;
96
+ if (typeof value === 'number') {
97
+ n = value;
98
+ }
99
+ else if (allowString &&
100
+ typeof value === 'string' &&
101
+ /^[-+]?\d+(?:\.\d+)?$/.test(value.trim())) {
102
+ n = Number(value);
103
+ }
104
+ else {
105
+ return false;
106
+ }
107
+ if (!Number.isFinite(n))
108
+ return false;
109
+ if (conditions?.min !== undefined && n < conditions.min)
110
+ return false;
111
+ if (conditions?.max !== undefined && n > conditions.max)
112
+ return false;
113
+ return true;
114
+ }
115
+ /** Check if value is a valid integer string (supports min/max) */
116
+ export const isIntString = (value, conditions) => typeof value === 'string' && isInt(value, true, conditions);
117
+ /** Check if value is a valid float string (supports min/max) */
118
+ export const isFloatString = (value, conditions) => typeof value === 'string' && isFloat(value, true, conditions);
119
+ /* -------------------------------------------------------------------------- */
120
+ /* String / Format Checks */
121
+ /* -------------------------------------------------------------------------- */
122
+ const EMAIL_RE = /^[^\s@]+@[^\s@.]+(\.[^\s@.]+)+$/;
123
+ /** Check if value is a valid email string */
124
+ export const isEmail = (value) => typeof value === 'string' && EMAIL_RE.test(value);
125
+ /** Check if value is a valid URL string (http/https) */
126
+ export const isUrl = (value) => {
127
+ if (typeof value !== 'string')
128
+ return false;
129
+ try {
130
+ const u = new URL(value);
131
+ return u.protocol === 'http:' || u.protocol === 'https:';
132
+ }
133
+ catch {
134
+ return false;
135
+ }
136
+ };
137
+ /** Check if string contains only letters */
138
+ export const isAlpha = (value) => typeof value === 'string' && /^[A-Za-z]+$/.test(value);
139
+ /** Check if string contains only letters and numbers */
140
+ export const isAlphanumeric = (value) => typeof value === 'string' && /^[A-Za-z0-9]+$/.test(value);
141
+ /** Check if string matches regex */
142
+ const DEFAULT_MAX_REGEX_INPUT_LENGTH = 2048;
143
+ /**
144
+ * Check if string matches regex.
145
+ *
146
+ * Security/perf: Regex evaluation can be expensive for some patterns.
147
+ * This helper defensively caps the input length to reduce ReDoS risk
148
+ * when used on untrusted strings.
149
+ */
150
+ export const isMatch = (value, regex, options) => {
151
+ if (typeof value !== 'string')
152
+ return false;
153
+ if (!(regex instanceof RegExp))
154
+ return false;
155
+ const maxLength = typeof options?.maxLength === 'number' &&
156
+ Number.isInteger(options.maxLength) &&
157
+ options.maxLength >= 0
158
+ ? options.maxLength
159
+ : DEFAULT_MAX_REGEX_INPUT_LENGTH;
160
+ if (value.length > maxLength)
161
+ return false;
162
+ // Normalize stateful RegExp usage (e.g. /.../g) to avoid surprising false negatives.
163
+ if (regex.global || regex.sticky)
164
+ regex.lastIndex = 0;
165
+ return regex.test(value);
166
+ };
167
+ /* -------------------------------------------------------------------------- */
168
+ /* Collection / Length */
169
+ /* -------------------------------------------------------------------------- */
170
+ /** Check if value exists in array */
171
+ export const isIn = (value, array) => array.includes(value);
172
+ /** Check if value does not exist in array */
173
+ export const isNotIn = (value, array) => !array.includes(value);
174
+ /** Check if string or array has exact length */
175
+ export const isLength = (value, length) => {
176
+ if (typeof value === 'string' || Array.isArray(value))
177
+ return value.length === length;
178
+ return false;
179
+ };
180
+ /** Check if string or array has minimum length */
181
+ export const isMinLength = (value, min) => {
182
+ if (typeof value === 'string' || Array.isArray(value))
183
+ return value.length >= min;
184
+ return false;
185
+ };
186
+ /** Check if string or array has maximum length */
187
+ export const isMaxLength = (value, max) => {
188
+ if (typeof value === 'string' || Array.isArray(value))
189
+ return value.length <= max;
190
+ return false;
191
+ };
192
+ /* -------------------------------------------------------------------------- */
193
+ /* Non-Empty Checks */
194
+ /* -------------------------------------------------------------------------- */
195
+ /** Check if value is a string with length > 0 (after trim) */
196
+ export const isNonEmptyString = (value) => typeof value === 'string' && value.trim().length > 0;
197
+ /** Check if value is an array with items */
198
+ export const isNonEmptyArray = (value) => Array.isArray(value) && value.length > 0;
199
+ /** Check if value is an object with keys */
200
+ export const isNonEmptyObject = (value) => isObject(value) && Object.keys(value).length > 0;
201
+ /* -------------------------------------------------------------------------- */
202
+ /* Additional Format Checks */
203
+ /* -------------------------------------------------------------------------- */
204
+ /**
205
+ * Check if value is a string containing only whitespace.
206
+ * Useful for distinguishing between truly empty and whitespace-only strings.
207
+ */
208
+ export const isWhitespaceOnly = (value) => typeof value === 'string' && value.length > 0 && value.trim().length === 0;
209
+ /**
210
+ * Check if value is a valid UUID v4 string.
211
+ * Format: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
212
+ */
213
+ export const isUUID = (value) => {
214
+ if (typeof value !== 'string')
215
+ return false;
216
+ const uuidv4Regex = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
217
+ return uuidv4Regex.test(value);
218
+ };
219
+ /**
220
+ * Check if value is a valid JSON string (parses without error).
221
+ */
222
+ export const isJSON = (value) => {
223
+ if (typeof value !== 'string')
224
+ return false;
225
+ try {
226
+ JSON.parse(value);
227
+ return true;
228
+ }
229
+ catch {
230
+ return false;
231
+ }
232
+ };
233
+ /**
234
+ * Check if value is a valid Base64-encoded string.
235
+ */
236
+ export const isBase64 = (value) => {
237
+ if (typeof value !== 'string')
238
+ return false;
239
+ const base64Regex = /^[A-Za-z0-9+/]*={0,2}$/;
240
+ if (!base64Regex.test(value))
241
+ return false;
242
+ // Base64 length must be multiple of 4
243
+ return value.length % 4 === 0;
244
+ };
245
+ /**
246
+ * Check if value is a valid hexadecimal color string.
247
+ * Accepts #RGB, #RGBA, #RRGGBB, #RRGGBBAA formats.
248
+ */
249
+ export const isHexColor = (value) => {
250
+ if (typeof value !== 'string')
251
+ return false;
252
+ // Matches: #RGB (3), #RGBA (4), #RRGGBB (6), #RRGGBBAA (8)
253
+ return /^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(value);
254
+ };
255
+ /**
256
+ * Check if value is a valid URL slug (lowercase alphanumeric with hyphens).
257
+ * Example: "my-blog-post", "user-profile-page"
258
+ */
259
+ export const isSlug = (value) => {
260
+ if (typeof value !== 'string')
261
+ return false;
262
+ return /^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(value);
263
+ };
264
+ /**
265
+ * Check if value is a string with uppercase letters.
266
+ */
267
+ export const isUpperCase = (value) => typeof value === 'string' && value.length > 0 && value === value.toUpperCase();
268
+ /**
269
+ * Check if value is a string with lowercase letters.
270
+ */
271
+ export const isLowerCase = (value) => typeof value === 'string' && value.length > 0 && value === value.toLowerCase();
272
+ /* -------------------------------------------------------------------------- */
273
+ /* Numeric Predicates */
274
+ /* -------------------------------------------------------------------------- */
275
+ /** Check if number is positive (> 0) */
276
+ export const isPositive = (value) => typeof value === 'number' && Number.isFinite(value) && value > 0;
277
+ /** Check if number is negative (< 0) */
278
+ export const isNegative = (value) => typeof value === 'number' && Number.isFinite(value) && value < 0;
279
+ /** Check if number is zero */
280
+ export const isZero = (value) => typeof value === 'number' && Number.isFinite(value) && value === 0;
281
+ /** Check if number is even */
282
+ export const isEven = (value) => typeof value === 'number' && Number.isInteger(value) && value % 2 === 0;
283
+ /** Check if number is odd */
284
+ export const isOdd = (value) => typeof value === 'number' && Number.isInteger(value) && value % 2 !== 0;
285
+ /**
286
+ * Check if number has decimal places.
287
+ * Examples: 1.5 → true, 1.0 → false, 1 → false
288
+ */
289
+ export const isDecimal = (value) => typeof value === 'number' && Number.isFinite(value) && !Number.isInteger(value);
290
+ /**
291
+ * Check if number is between min and max (inclusive).
292
+ */
293
+ export const isBetween = (value, min, max) => typeof value === 'number' && Number.isFinite(value) && value >= min && value <= max;
294
+ /**
295
+ * Check if number is divisible by divisor.
296
+ */
297
+ export const isDivisibleBy = (value, divisor) => typeof value === 'number' && Number.isInteger(value) && divisor !== 0 && value % divisor === 0;
298
+ /* -------------------------------------------------------------------------- */
299
+ /* Factory Export */
300
+ /* -------------------------------------------------------------------------- */
301
+ export const Helpers = Object.freeze({
302
+ isString,
303
+ isBoolean,
304
+ isBooleanString,
305
+ isEmpty,
306
+ isNull,
307
+ isUndefined,
308
+ isUndefinedOrNull,
309
+ isArray,
310
+ isObject,
311
+ isFunction,
312
+ isDate,
313
+ isEmail,
314
+ isUrl,
315
+ isIn,
316
+ isNotIn,
317
+ isLength,
318
+ isMinLength,
319
+ isMaxLength,
320
+ isMatch,
321
+ isAlpha,
322
+ isAlphanumeric,
323
+ isNumeric,
324
+ isInt,
325
+ isFloat,
326
+ isIntString,
327
+ isFloatString,
328
+ isNonEmptyString,
329
+ isNonEmptyArray,
330
+ isNonEmptyObject,
331
+ isWhitespaceOnly,
332
+ isUUID,
333
+ isJSON,
334
+ isBase64,
335
+ isHexColor,
336
+ isSlug,
337
+ isUpperCase,
338
+ isLowerCase,
339
+ isPositive,
340
+ isNegative,
341
+ isZero,
342
+ isEven,
343
+ isOdd,
344
+ isDecimal,
345
+ isBetween,
346
+ isDivisibleBy,
347
+ });
@@ -2,8 +2,9 @@
2
2
  * File Upload Handler
3
3
  * Handles multipart/form-data file uploads with validation and storage integration
4
4
  */
5
+ import type { ReadableOptions } from '../node-singletons/stream';
5
6
  import type { IRequest } from './Request';
6
- import type { Readable } from 'node:stream';
7
+ type Streamer = ReadableOptions | NodeJS.ReadableStream;
7
8
  export interface UploadedFile {
8
9
  fieldName: string;
9
10
  originalName: string;
@@ -21,7 +22,7 @@ export interface UploadedFile {
21
22
  /**
22
23
  * Returns a fresh readable stream for the uploaded content.
23
24
  */
24
- stream?: () => Readable;
25
+ stream?: () => Streamer;
25
26
  /**
26
27
  * Optional cleanup hook (e.g., delete temp file after response).
27
28
  */
@@ -1 +1 @@
1
- {"version":3,"file":"FileUpload.d.ts","sourceRoot":"","sources":["../../../src/http/FileUpload.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,QAAQ,CAAC;IAExB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,YAAY,GAAG,SAAS,CAAC;IAC/E,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,YAAY,EAAE,CAAC;IACtE,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IACpC,QAAQ,IAAI;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;KAAE,CAAC;CAClE;AAoBD;;GAEG;AACH,eAAO,MAAM,uBAAuB,GAAI,KAAK,QAAQ,KAAG,kBAsEvD,CAAC;AAEF,eAAO,MAAM,UAAU;IACrB;;OAEG;uBACgB,QAAQ,GAAG,kBAAkB;IAIhD;;OAEG;yBAEM,YAAY,EAAE,WACZ;QACP,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GACA;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;EA6BrC,CAAC;AAEH,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"FileUpload.d.ts","sourceRoot":"","sources":["../../../src/http/FileUpload.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,KAAK,QAAQ,GAAG,eAAe,GAAG,MAAM,CAAC,cAAc,CAAC;AAExD,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,QAAQ,CAAC;IAExB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,YAAY,GAAG,SAAS,CAAC;IAC/E,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,YAAY,EAAE,CAAC;IACtE,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IACpC,QAAQ,IAAI;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;KAAE,CAAC;CAClE;AAoBD;;GAEG;AACH,eAAO,MAAM,uBAAuB,GAAI,KAAK,QAAQ,KAAG,kBAsEvD,CAAC;AAEF,eAAO,MAAM,UAAU;IACrB;;OAEG;uBACgB,QAAQ,GAAG,kBAAkB;IAIhD;;OAEG;yBAEM,YAAY,EAAE,WACZ;QACP,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GACA;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;EA6BrC,CAAC;AAEH,eAAe,UAAU,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Kernel.d.ts","sourceRoot":"","sources":["../../../src/http/Kernel.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAErE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAG9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEhF,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAK7E,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,mBAAmB,CAAC;AAGpE,MAAM,WAAW,OAAO;IACtB,MAAM,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,aAAa,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,GAAG,IAAI,CAAC;IAC/C,wBAAwB,CAAC,GAAG,UAAU,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IAC5D,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IACpE,SAAS,IAAI,OAAO,CAAC;IACrB,YAAY,IAAI,iBAAiB,CAAC;IAClC,kBAAkB,IAAI,gBAAgB,CAAC;IAGvC,gBAAgB,CAAC,QAAQ,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5C,cAAc,IAAI,IAAI,CAAC;IACvB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9C;AAuTD,eAAO,MAAM,MAAM;qBA1DK,OAAO,aAAa,iBAAiB,KAAG,OAAO;EA4DrE,CAAC;AAEH,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"Kernel.d.ts","sourceRoot":"","sources":["../../../src/http/Kernel.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAErE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAG9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEhF,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAK7E,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,mBAAmB,CAAC;AAGpE,MAAM,WAAW,OAAO;IACtB,MAAM,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,aAAa,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,GAAG,IAAI,CAAC;IAC/C,wBAAwB,CAAC,GAAG,UAAU,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IAC5D,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IACpE,SAAS,IAAI,OAAO,CAAC;IACrB,YAAY,IAAI,iBAAiB,CAAC;IAClC,kBAAkB,IAAI,gBAAgB,CAAC;IAGvC,gBAAgB,CAAC,QAAQ,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5C,cAAc,IAAI,IAAI,CAAC;IACvB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9C;AA4TD,eAAO,MAAM,MAAM;qBA1DK,OAAO,aAAa,iBAAiB,KAAG,OAAO;EA4DrE,CAAC;AAEH,eAAe,MAAM,CAAC"}
@@ -89,7 +89,8 @@ const runKernelPipeline = async (router, globalMiddleware, routeMiddleware, req,
89
89
  if (!route) {
90
90
  const routeLabel = 'not_found';
91
91
  maybeSetKernelTraceRoute(traceSpan, context.method, routeLabel);
92
- ErrorRouting.handleNotFound(req, res, context.requestId);
92
+ const handleNotFound = ErrorRouting.handleNotFound;
93
+ await handleNotFound(req, res, context.requestId);
93
94
  return routeLabel;
94
95
  }
95
96
  // Safe type guard to ensure route.routePath is a non-empty string before calling .trim()
@@ -1,4 +1,5 @@
1
1
  import type { IRequest } from '../Request';
2
+ type ErrorTemplateName = '404' | '500';
2
3
  type RenderInput = {
3
4
  statusCode: number;
4
5
  errorName: string;
@@ -9,9 +10,12 @@ type RenderInput = {
9
10
  requestPretty?: string;
10
11
  requestRaw?: string;
11
12
  };
13
+ type TemplateStore = Partial<Record<ErrorTemplateName, string>>;
12
14
  export declare const ErrorPageRenderer: Readonly<{
15
+ setTemplates(templates: TemplateStore): void;
13
16
  shouldSendHtml(request: IRequest): boolean;
14
17
  renderHtml(publicRoot: string, input: RenderInput): string | undefined;
18
+ renderHtmlAsync(publicRoot: string, input: RenderInput): Promise<string | undefined>;
15
19
  }>;
16
20
  export {};
17
21
  //# sourceMappingURL=ErrorPageRenderer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorPageRenderer.d.ts","sourceRoot":"","sources":["../../../../src/http/error-pages/ErrorPageRenderer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAM9C,KAAK,WAAW,GAAG;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AA2EF,eAAO,MAAM,iBAAiB;4BACJ,QAAQ,GAAG,OAAO;2BAInB,MAAM,SAAS,WAAW,GAAG,MAAM,GAAG,SAAS;EAUtE,CAAC"}
1
+ {"version":3,"file":"ErrorPageRenderer.d.ts","sourceRoot":"","sources":["../../../../src/http/error-pages/ErrorPageRenderer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAI9C,KAAK,iBAAiB,GAAG,KAAK,GAAG,KAAK,CAAC;AAEvC,KAAK,WAAW,GAAG;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,KAAK,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAAC;AAmJhE,eAAO,MAAM,iBAAiB;4BACJ,aAAa,GAAG,IAAI;4BASpB,QAAQ,GAAG,OAAO;2BAInB,MAAM,SAAS,WAAW,GAAG,MAAM,GAAG,SAAS;gCAyBpC,MAAM,SAAS,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;EAiB1F,CAAC"}