@zintrust/core 0.1.40 → 0.1.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (460) hide show
  1. package/bin/zintrust-main.d.ts.map +1 -1
  2. package/bin/zintrust-main.js +22 -1
  3. package/package.json +8 -4
  4. package/public/error-pages/404.html +2 -2
  5. package/src/auth/Auth.js +1 -1
  6. package/src/boot/Application.d.ts +1 -16
  7. package/src/boot/Application.d.ts.map +1 -1
  8. package/src/boot/Application.js +2 -290
  9. package/src/boot/Server.d.ts +1 -1
  10. package/src/boot/Server.d.ts.map +1 -1
  11. package/src/boot/bootstrap.js +23 -5
  12. package/src/boot/registry/registerRoute.d.ts +6 -0
  13. package/src/boot/registry/registerRoute.d.ts.map +1 -0
  14. package/src/boot/registry/registerRoute.js +96 -0
  15. package/src/boot/registry/runtime.d.ts +15 -0
  16. package/src/boot/registry/runtime.d.ts.map +1 -0
  17. package/src/boot/registry/runtime.js +353 -0
  18. package/src/boot/registry/type.d.ts +25 -0
  19. package/src/boot/registry/type.d.ts.map +1 -0
  20. package/src/boot/registry/type.js +1 -0
  21. package/src/boot/registry/worker.d.ts +6 -0
  22. package/src/boot/registry/worker.d.ts.map +1 -0
  23. package/src/boot/registry/worker.js +35 -0
  24. package/src/cache/drivers/KVRemoteDriver.d.ts.map +1 -1
  25. package/src/cache/drivers/KVRemoteDriver.js +14 -1
  26. package/src/cli/CLI.d.ts.map +1 -1
  27. package/src/cli/CLI.js +82 -34
  28. package/src/cli/ErrorHandler.js +1 -1
  29. package/src/cli/commands/ContainerProxiesCommand.d.ts +5 -0
  30. package/src/cli/commands/ContainerProxiesCommand.d.ts.map +1 -0
  31. package/src/cli/commands/ContainerProxiesCommand.js +77 -0
  32. package/src/cli/commands/ContainerWorkersCommand.d.ts +5 -0
  33. package/src/cli/commands/ContainerWorkersCommand.d.ts.map +1 -0
  34. package/src/cli/commands/ContainerWorkersCommand.js +57 -0
  35. package/src/cli/commands/DeployCommand.d.ts +16 -0
  36. package/src/cli/commands/DeployCommand.d.ts.map +1 -0
  37. package/src/cli/commands/DeployCommand.js +110 -0
  38. package/src/cli/commands/DeployContainerProxiesCommand.d.ts +5 -0
  39. package/src/cli/commands/DeployContainerProxiesCommand.d.ts.map +1 -0
  40. package/src/cli/commands/DeployContainerProxiesCommand.js +27 -0
  41. package/src/cli/commands/DeployContainerWorkersCommand.d.ts +5 -0
  42. package/src/cli/commands/DeployContainerWorkersCommand.d.ts.map +1 -0
  43. package/src/cli/commands/DeployContainerWorkersCommand.js +27 -0
  44. package/src/cli/commands/DockerComposeCommandUtils.d.ts +3 -0
  45. package/src/cli/commands/DockerComposeCommandUtils.d.ts.map +1 -0
  46. package/src/cli/commands/DockerComposeCommandUtils.js +34 -0
  47. package/src/cli/commands/DoctorArchitectureCommand.d.ts +5 -0
  48. package/src/cli/commands/DoctorArchitectureCommand.d.ts.map +1 -0
  49. package/src/cli/commands/DoctorArchitectureCommand.js +54 -0
  50. package/src/cli/commands/InitContainerCommand.d.ts +5 -0
  51. package/src/cli/commands/InitContainerCommand.d.ts.map +1 -0
  52. package/src/cli/commands/InitContainerCommand.js +216 -0
  53. package/src/cli/commands/InitProducerCommand.d.ts +5 -0
  54. package/src/cli/commands/InitProducerCommand.d.ts.map +1 -0
  55. package/src/cli/commands/InitProducerCommand.js +47 -0
  56. package/src/cli/commands/InitProxyCommand.d.ts +5 -0
  57. package/src/cli/commands/InitProxyCommand.d.ts.map +1 -0
  58. package/src/cli/commands/InitProxyCommand.js +442 -0
  59. package/src/cli/commands/MongoDBProxyCommand.d.ts +5 -0
  60. package/src/cli/commands/MongoDBProxyCommand.d.ts.map +1 -0
  61. package/src/cli/commands/MongoDBProxyCommand.js +98 -0
  62. package/src/cli/commands/MySqlProxyCommand.d.ts +6 -0
  63. package/src/cli/commands/MySqlProxyCommand.d.ts.map +1 -0
  64. package/src/cli/commands/MySqlProxyCommand.js +32 -0
  65. package/src/cli/commands/PostgresProxyCommand.d.ts +6 -0
  66. package/src/cli/commands/PostgresProxyCommand.d.ts.map +1 -0
  67. package/src/cli/commands/PostgresProxyCommand.js +32 -0
  68. package/src/cli/commands/ProxyCommand.d.ts +12 -0
  69. package/src/cli/commands/ProxyCommand.d.ts.map +1 -0
  70. package/src/cli/commands/ProxyCommand.js +80 -0
  71. package/src/cli/commands/ProxyCommandUtils.d.ts +6 -0
  72. package/src/cli/commands/ProxyCommandUtils.d.ts.map +1 -0
  73. package/src/cli/commands/ProxyCommandUtils.js +38 -0
  74. package/src/cli/commands/QueueRecoveryCommand.d.ts +6 -0
  75. package/src/cli/commands/QueueRecoveryCommand.d.ts.map +1 -0
  76. package/src/cli/commands/QueueRecoveryCommand.js +513 -0
  77. package/src/cli/commands/RedisProxyCommand.d.ts +6 -0
  78. package/src/cli/commands/RedisProxyCommand.d.ts.map +1 -0
  79. package/src/cli/commands/RedisProxyCommand.js +53 -0
  80. package/src/cli/commands/SmtpProxyCommand.d.ts +6 -0
  81. package/src/cli/commands/SmtpProxyCommand.d.ts.map +1 -0
  82. package/src/cli/commands/SmtpProxyCommand.js +56 -0
  83. package/src/cli/commands/SqlProxyCommandUtils.d.ts +46 -0
  84. package/src/cli/commands/SqlProxyCommandUtils.d.ts.map +1 -0
  85. package/src/cli/commands/SqlProxyCommandUtils.js +48 -0
  86. package/src/cli/commands/SqlServerProxyCommand.d.ts +5 -0
  87. package/src/cli/commands/SqlServerProxyCommand.d.ts.map +1 -0
  88. package/src/cli/commands/SqlServerProxyCommand.js +85 -0
  89. package/src/cli/commands/StartCommand.d.ts.map +1 -1
  90. package/src/cli/commands/StartCommand.js +132 -17
  91. package/src/cli/commands/WorkerCommands.d.ts +1 -0
  92. package/src/cli/commands/WorkerCommands.d.ts.map +1 -1
  93. package/src/cli/commands/WorkerCommands.js +140 -6
  94. package/src/cli/commands/index.d.ts +2 -0
  95. package/src/cli/commands/index.d.ts.map +1 -1
  96. package/src/cli/commands/index.js +2 -0
  97. package/src/cli/commands/runner/index.d.ts +2 -2
  98. package/src/cli/commands/runner/index.d.ts.map +1 -1
  99. package/src/cli/commands/runner/index.js +15 -4
  100. package/src/cli/d1/D1SqlMigrations.d.ts.map +1 -1
  101. package/src/cli/d1/D1SqlMigrations.js +3 -0
  102. package/src/cli/index.d.ts +4 -0
  103. package/src/cli/index.d.ts.map +1 -1
  104. package/src/cli/index.js +4 -0
  105. package/src/cli/scaffolding/ProjectScaffolder.d.ts.map +1 -1
  106. package/src/cli/scaffolding/ProjectScaffolder.js +2 -0
  107. package/src/cli/scaffolding/ServiceScaffolder.d.ts.map +1 -1
  108. package/src/cli/scaffolding/ServiceScaffolder.js +1 -0
  109. package/src/cli/utils/EnvFileLoader.js +16 -15
  110. package/src/cli/workers/QueueWorkRunner.js +1 -1
  111. package/src/common/HealthRoutes.d.ts.map +1 -1
  112. package/src/common/HealthRoutes.js +50 -2
  113. package/src/common/RemoteSignedJson.d.ts +1 -0
  114. package/src/common/RemoteSignedJson.d.ts.map +1 -1
  115. package/src/common/RemoteSignedJson.js +39 -13
  116. package/src/common/index.d.ts +1 -0
  117. package/src/common/index.d.ts.map +1 -1
  118. package/src/common/index.js +12 -1
  119. package/src/config/FileLogWriter.d.ts.map +1 -1
  120. package/src/config/FileLogWriter.js +21 -6
  121. package/src/config/app.d.ts +4 -0
  122. package/src/config/app.d.ts.map +1 -1
  123. package/src/config/app.js +4 -0
  124. package/src/config/cache.d.ts.map +1 -1
  125. package/src/config/cache.js +22 -2
  126. package/src/config/cloudflare.d.ts +5 -1
  127. package/src/config/cloudflare.d.ts.map +1 -1
  128. package/src/config/cloudflare.js +48 -0
  129. package/src/config/database.d.ts.map +1 -1
  130. package/src/config/database.js +48 -13
  131. package/src/config/env.d.ts +87 -2
  132. package/src/config/env.d.ts.map +1 -1
  133. package/src/config/env.js +156 -17
  134. package/src/config/index.d.ts +1 -0
  135. package/src/config/index.d.ts.map +1 -1
  136. package/src/config/mail.d.ts.map +1 -1
  137. package/src/config/mail.js +16 -10
  138. package/src/config/middleware.d.ts +5 -0
  139. package/src/config/middleware.d.ts.map +1 -1
  140. package/src/config/middleware.js +19 -1
  141. package/src/config/queue.d.ts.map +1 -1
  142. package/src/config/queue.js +70 -9
  143. package/src/config/redis.d.ts.map +1 -1
  144. package/src/config/redis.js +48 -13
  145. package/src/config/storage.d.ts.map +1 -1
  146. package/src/config/storage.js +1 -0
  147. package/src/config/type.d.ts +18 -0
  148. package/src/config/type.d.ts.map +1 -1
  149. package/src/config/workers.d.ts.map +1 -1
  150. package/src/config/workers.js +122 -16
  151. package/src/functions/cloudflare.d.ts.map +1 -1
  152. package/src/functions/cloudflare.js +55 -1
  153. package/src/health/StartupHealthChecks.js +1 -1
  154. package/src/http/FileUpload.d.ts +3 -2
  155. package/src/http/FileUpload.d.ts.map +1 -1
  156. package/src/http/Kernel.d.ts.map +1 -1
  157. package/src/http/Kernel.js +2 -1
  158. package/src/http/error-pages/ErrorPageRenderer.d.ts +4 -0
  159. package/src/http/error-pages/ErrorPageRenderer.d.ts.map +1 -1
  160. package/src/http/error-pages/ErrorPageRenderer.js +141 -1
  161. package/src/http/middleware/BodyParsingMiddleware.d.ts.map +1 -1
  162. package/src/http/middleware/BodyParsingMiddleware.js +33 -6
  163. package/src/index.d.ts +25 -53
  164. package/src/index.d.ts.map +1 -1
  165. package/src/index.js +30 -14
  166. package/src/microservices/ServiceAuthMiddleware.d.ts.map +1 -1
  167. package/src/microservices/ServiceAuthMiddleware.js +12 -4
  168. package/src/middleware/CsrfMiddleware.d.ts.map +1 -1
  169. package/src/middleware/CsrfMiddleware.js +30 -16
  170. package/src/middleware/ErrorHandlerMiddleware.d.ts.map +1 -1
  171. package/src/middleware/ErrorHandlerMiddleware.js +2 -1
  172. package/src/migrations/MigrationLoader.js +1 -1
  173. package/src/migrations/schema/SchemaCompiler.d.ts.map +1 -1
  174. package/src/migrations/schema/SchemaCompiler.js +6 -3
  175. package/src/node-singletons/crypto.d.ts +1 -1
  176. package/src/node-singletons/crypto.d.ts.map +1 -1
  177. package/src/node-singletons/crypto.js +1 -1
  178. package/src/node-singletons/fs.d.ts +1 -1
  179. package/src/node-singletons/fs.d.ts.map +1 -1
  180. package/src/node-singletons/path.d.ts +1 -1
  181. package/src/node-singletons/path.d.ts.map +1 -1
  182. package/src/node-singletons/path.js +1 -1
  183. package/src/node-singletons/stream.d.ts +11 -0
  184. package/src/node-singletons/stream.d.ts.map +1 -0
  185. package/src/node-singletons/stream.js +8 -0
  186. package/src/observability/OpenTelemetry.d.ts +7 -0
  187. package/src/observability/OpenTelemetry.d.ts.map +1 -1
  188. package/src/observability/OpenTelemetry.js +49 -2
  189. package/src/orm/Database.d.ts +4 -0
  190. package/src/orm/Database.d.ts.map +1 -1
  191. package/src/orm/Database.js +80 -9
  192. package/src/orm/DatabaseRuntimeRegistration.d.ts.map +1 -1
  193. package/src/orm/DatabaseRuntimeRegistration.js +2 -0
  194. package/src/orm/QueryBuilder.d.ts +1 -0
  195. package/src/orm/QueryBuilder.d.ts.map +1 -1
  196. package/src/orm/QueryBuilder.js +33 -3
  197. package/src/orm/SchemaCompiler.d.ts.map +1 -1
  198. package/src/orm/SchemaCompiler.js +6 -3
  199. package/src/orm/adapters/D1RemoteAdapter.d.ts.map +1 -1
  200. package/src/orm/adapters/D1RemoteAdapter.js +14 -1
  201. package/src/orm/adapters/MongoDBProxyAdapter.d.ts +3 -0
  202. package/src/orm/adapters/MongoDBProxyAdapter.d.ts.map +1 -0
  203. package/src/orm/adapters/MongoDBProxyAdapter.js +128 -0
  204. package/src/orm/adapters/MySQLProxyAdapter.d.ts +11 -0
  205. package/src/orm/adapters/MySQLProxyAdapter.d.ts.map +1 -0
  206. package/src/orm/adapters/MySQLProxyAdapter.js +143 -0
  207. package/src/orm/adapters/PostgreSQLProxyAdapter.d.ts +11 -0
  208. package/src/orm/adapters/PostgreSQLProxyAdapter.d.ts.map +1 -0
  209. package/src/orm/adapters/PostgreSQLProxyAdapter.js +147 -0
  210. package/src/orm/adapters/ProxyCache.d.ts +9 -0
  211. package/src/orm/adapters/ProxyCache.d.ts.map +1 -0
  212. package/src/orm/adapters/ProxyCache.js +24 -0
  213. package/src/orm/adapters/ProxySignedRequest.d.ts +11 -0
  214. package/src/orm/adapters/ProxySignedRequest.d.ts.map +1 -0
  215. package/src/orm/adapters/ProxySignedRequest.js +30 -0
  216. package/src/orm/adapters/ProxySigningPath.d.ts +3 -0
  217. package/src/orm/adapters/ProxySigningPath.d.ts.map +1 -0
  218. package/src/orm/adapters/ProxySigningPath.js +25 -0
  219. package/src/orm/adapters/SqlProxyAdapterUtils.d.ts +19 -0
  220. package/src/orm/adapters/SqlProxyAdapterUtils.d.ts.map +1 -0
  221. package/src/orm/adapters/SqlProxyAdapterUtils.js +35 -0
  222. package/src/orm/adapters/SqlServerProxyAdapter.d.ts +3 -0
  223. package/src/orm/adapters/SqlServerProxyAdapter.d.ts.map +1 -0
  224. package/src/orm/adapters/SqlServerProxyAdapter.js +146 -0
  225. package/src/performance/Optimizer.d.ts +1 -0
  226. package/src/performance/Optimizer.d.ts.map +1 -1
  227. package/src/performance/Optimizer.js +21 -8
  228. package/src/proxy/ErrorHandler.d.ts +11 -0
  229. package/src/proxy/ErrorHandler.d.ts.map +1 -0
  230. package/src/proxy/ErrorHandler.js +7 -0
  231. package/src/proxy/PoolManager.d.ts +8 -0
  232. package/src/proxy/PoolManager.d.ts.map +1 -0
  233. package/src/proxy/PoolManager.js +18 -0
  234. package/src/proxy/ProxyBackend.d.ts +18 -0
  235. package/src/proxy/ProxyBackend.d.ts.map +1 -0
  236. package/src/proxy/ProxyBackend.js +1 -0
  237. package/src/proxy/ProxyConfig.d.ts +12 -0
  238. package/src/proxy/ProxyConfig.d.ts.map +1 -0
  239. package/src/proxy/ProxyConfig.js +1 -0
  240. package/src/proxy/ProxyRegistry.d.ts +10 -0
  241. package/src/proxy/ProxyRegistry.d.ts.map +1 -0
  242. package/src/proxy/ProxyRegistry.js +11 -0
  243. package/src/proxy/ProxyServer.d.ts +21 -0
  244. package/src/proxy/ProxyServer.d.ts.map +1 -0
  245. package/src/proxy/ProxyServer.js +84 -0
  246. package/src/proxy/ProxyServerUtils.d.ts +37 -0
  247. package/src/proxy/ProxyServerUtils.d.ts.map +1 -0
  248. package/src/proxy/ProxyServerUtils.js +42 -0
  249. package/src/proxy/ProxySigningConfigResolver.d.ts +22 -0
  250. package/src/proxy/ProxySigningConfigResolver.d.ts.map +1 -0
  251. package/src/proxy/ProxySigningConfigResolver.js +24 -0
  252. package/src/proxy/ProxySigningRequest.d.ts +12 -0
  253. package/src/proxy/ProxySigningRequest.d.ts.map +1 -0
  254. package/src/proxy/ProxySigningRequest.js +31 -0
  255. package/src/proxy/RequestValidator.d.ts +15 -0
  256. package/src/proxy/RequestValidator.d.ts.map +1 -0
  257. package/src/proxy/RequestValidator.js +25 -0
  258. package/src/proxy/SigningService.d.ts +39 -0
  259. package/src/proxy/SigningService.d.ts.map +1 -0
  260. package/src/proxy/SigningService.js +107 -0
  261. package/src/proxy/SqlPayloadValidator.d.ts +13 -0
  262. package/src/proxy/SqlPayloadValidator.d.ts.map +1 -0
  263. package/src/proxy/SqlPayloadValidator.js +14 -0
  264. package/src/proxy/d1/ZintrustD1Proxy.d.ts +2 -0
  265. package/src/proxy/d1/ZintrustD1Proxy.d.ts.map +1 -0
  266. package/src/proxy/d1/ZintrustD1Proxy.js +1 -0
  267. package/src/proxy/d1/register.d.ts +2 -0
  268. package/src/proxy/d1/register.d.ts.map +1 -0
  269. package/src/proxy/d1/register.js +5 -0
  270. package/src/proxy/kv/ZintrustKvProxy.d.ts +2 -0
  271. package/src/proxy/kv/ZintrustKvProxy.d.ts.map +1 -0
  272. package/src/proxy/kv/ZintrustKvProxy.js +1 -0
  273. package/src/proxy/kv/register.d.ts +2 -0
  274. package/src/proxy/kv/register.d.ts.map +1 -0
  275. package/src/proxy/kv/register.js +5 -0
  276. package/src/proxy/mongodb/MongoDBProxyServer.d.ts +33 -0
  277. package/src/proxy/mongodb/MongoDBProxyServer.d.ts.map +1 -0
  278. package/src/proxy/mongodb/MongoDBProxyServer.js +202 -0
  279. package/src/proxy/mongodb/register.d.ts +2 -0
  280. package/src/proxy/mongodb/register.d.ts.map +1 -0
  281. package/src/proxy/mongodb/register.js +5 -0
  282. package/src/proxy/mysql/MySqlProxyServer.d.ts +14 -0
  283. package/src/proxy/mysql/MySqlProxyServer.d.ts.map +1 -0
  284. package/src/proxy/mysql/MySqlProxyServer.js +169 -0
  285. package/src/proxy/mysql/register.d.ts +2 -0
  286. package/src/proxy/mysql/register.d.ts.map +1 -0
  287. package/src/proxy/mysql/register.js +5 -0
  288. package/src/proxy/postgres/PostgresProxyServer.d.ts +14 -0
  289. package/src/proxy/postgres/PostgresProxyServer.d.ts.map +1 -0
  290. package/src/proxy/postgres/PostgresProxyServer.js +140 -0
  291. package/src/proxy/postgres/register.d.ts +2 -0
  292. package/src/proxy/postgres/register.d.ts.map +1 -0
  293. package/src/proxy/postgres/register.js +5 -0
  294. package/src/proxy/redis/RedisProxyServer.d.ts +12 -0
  295. package/src/proxy/redis/RedisProxyServer.d.ts.map +1 -0
  296. package/src/proxy/redis/RedisProxyServer.js +192 -0
  297. package/src/proxy/redis/register.d.ts +2 -0
  298. package/src/proxy/redis/register.d.ts.map +1 -0
  299. package/src/proxy/redis/register.js +5 -0
  300. package/src/proxy/smtp/SmtpProxyServer.d.ts +19 -0
  301. package/src/proxy/smtp/SmtpProxyServer.d.ts.map +1 -0
  302. package/src/proxy/smtp/SmtpProxyServer.js +289 -0
  303. package/src/proxy/smtp/register.d.ts +2 -0
  304. package/src/proxy/smtp/register.d.ts.map +1 -0
  305. package/src/proxy/smtp/register.js +5 -0
  306. package/src/proxy/sqlserver/SqlServerProxyServer.d.ts +14 -0
  307. package/src/proxy/sqlserver/SqlServerProxyServer.d.ts.map +1 -0
  308. package/src/proxy/sqlserver/SqlServerProxyServer.js +168 -0
  309. package/src/proxy/sqlserver/register.d.ts +2 -0
  310. package/src/proxy/sqlserver/register.d.ts.map +1 -0
  311. package/src/proxy/sqlserver/register.js +5 -0
  312. package/src/routes/doc.d.ts.map +1 -1
  313. package/src/routes/doc.js +16 -2
  314. package/src/routes/error.d.ts +5 -4
  315. package/src/routes/error.d.ts.map +1 -1
  316. package/src/routes/error.js +15 -13
  317. package/src/routes/errorPages.d.ts +2 -0
  318. package/src/routes/errorPages.d.ts.map +1 -1
  319. package/src/routes/errorPages.js +144 -4
  320. package/src/runtime/PluginAutoImports.d.ts +1 -0
  321. package/src/runtime/PluginAutoImports.d.ts.map +1 -1
  322. package/src/runtime/PluginAutoImports.js +94 -9
  323. package/src/runtime/RuntimeAdapter.d.ts +8 -9
  324. package/src/runtime/RuntimeAdapter.d.ts.map +1 -1
  325. package/src/runtime/RuntimeAdapter.js +120 -34
  326. package/src/runtime/RuntimeServices.d.ts +47 -0
  327. package/src/runtime/RuntimeServices.d.ts.map +1 -0
  328. package/src/runtime/RuntimeServices.js +164 -0
  329. package/src/runtime/StartupConfigFileRegistry.d.ts +4 -4
  330. package/src/runtime/StartupConfigFileRegistry.d.ts.map +1 -1
  331. package/src/runtime/StartupConfigFileRegistry.js +12 -0
  332. package/src/runtime/WorkerAdapterImports.d.ts +5 -0
  333. package/src/runtime/WorkerAdapterImports.d.ts.map +1 -0
  334. package/src/runtime/WorkerAdapterImports.js +17 -0
  335. package/src/runtime/WorkersModule.d.ts +6 -0
  336. package/src/runtime/WorkersModule.d.ts.map +1 -0
  337. package/src/runtime/WorkersModule.js +278 -0
  338. package/src/runtime/adapters/CloudflareAdapter.d.ts.map +1 -1
  339. package/src/runtime/adapters/CloudflareAdapter.js +19 -2
  340. package/src/runtime/adapters/DenoAdapter.js +1 -0
  341. package/src/runtime/adapters/FargateAdapter.js +1 -1
  342. package/src/runtime/adapters/LambdaAdapter.js +1 -1
  343. package/src/runtime/adapters/NodeServerAdapter.js +1 -1
  344. package/src/runtime/detectRuntime.d.ts +10 -0
  345. package/src/runtime/detectRuntime.d.ts.map +1 -0
  346. package/src/runtime/detectRuntime.js +57 -0
  347. package/src/runtime/useFileLoader.d.ts.map +1 -1
  348. package/src/runtime/useFileLoader.js +16 -0
  349. package/src/scripts/TemplateImportsCheck.js +2 -2
  350. package/src/scripts/TemplateSync.js +3 -4
  351. package/src/security/CsrfTokenManager.d.ts.map +1 -1
  352. package/src/security/CsrfTokenManager.js +12 -0
  353. package/src/security/Hash.d.ts +1 -1
  354. package/src/security/Hash.d.ts.map +1 -1
  355. package/src/security/Hash.js +31 -36
  356. package/src/seeders/SeederLoader.js +1 -1
  357. package/src/session/SessionManager.d.ts +3 -0
  358. package/src/session/SessionManager.d.ts.map +1 -1
  359. package/src/session/SessionManager.js +49 -10
  360. package/src/sockets/CloudflareSocket.d.ts +24 -0
  361. package/src/sockets/CloudflareSocket.d.ts.map +1 -0
  362. package/src/sockets/CloudflareSocket.js +259 -0
  363. package/src/start.d.ts.map +1 -1
  364. package/src/start.js +1 -8
  365. package/src/templates/project/basic/src/zintrust.plugins.wg.ts.tpl +8 -0
  366. package/src/tools/mail/drivers/Smtp.d.ts.map +1 -1
  367. package/src/tools/mail/drivers/Smtp.js +223 -18
  368. package/src/tools/mail/index.d.ts.map +1 -1
  369. package/src/tools/mail/index.js +5 -4
  370. package/src/tools/mail/template-loader.d.ts.map +1 -1
  371. package/src/tools/mail/template-loader.js +197 -29
  372. package/src/tools/mail/templates/auth-password-reset.d.ts +3 -0
  373. package/src/tools/mail/templates/auth-password-reset.d.ts.map +1 -0
  374. package/src/tools/mail/templates/auth-password-reset.js +231 -0
  375. package/src/tools/mail/templates/auth-welcome.d.ts +3 -0
  376. package/src/tools/mail/templates/auth-welcome.d.ts.map +1 -0
  377. package/src/tools/mail/templates/auth-welcome.js +236 -0
  378. package/src/tools/mail/templates/general.d.ts +3 -0
  379. package/src/tools/mail/templates/general.d.ts.map +1 -0
  380. package/src/tools/mail/templates/general.js +109 -0
  381. package/src/tools/mail/templates/index.js +2 -2
  382. package/src/tools/mail/templates/job-completed.d.ts +3 -0
  383. package/src/tools/mail/templates/job-completed.d.ts.map +1 -0
  384. package/src/tools/mail/templates/job-completed.js +188 -0
  385. package/src/tools/mail/templates/notifications-new-comment.d.ts +3 -0
  386. package/src/tools/mail/templates/notifications-new-comment.d.ts.map +1 -0
  387. package/src/tools/mail/templates/notifications-new-comment.js +228 -0
  388. package/src/tools/mail/templates/password-reset.d.ts +3 -0
  389. package/src/tools/mail/templates/password-reset.d.ts.map +1 -0
  390. package/src/tools/mail/templates/password-reset.js +221 -0
  391. package/src/tools/mail/templates/performance-report.d.ts +3 -0
  392. package/src/tools/mail/templates/performance-report.d.ts.map +1 -0
  393. package/src/tools/mail/templates/performance-report.js +258 -0
  394. package/src/tools/mail/templates/welcome.d.ts +3 -0
  395. package/src/tools/mail/templates/welcome.d.ts.map +1 -0
  396. package/src/tools/mail/templates/welcome.js +187 -0
  397. package/src/tools/mail/templates/worker-alert.d.ts +3 -0
  398. package/src/tools/mail/templates/worker-alert.d.ts.map +1 -0
  399. package/src/tools/mail/templates/worker-alert.js +229 -0
  400. package/src/tools/notification/Notification.js +1 -1
  401. package/src/tools/notification/testingHelpers.js +6 -5
  402. package/src/tools/queue/AdvancedQueue.js +2 -6
  403. package/src/tools/queue/IdempotencyManager.d.ts +6 -0
  404. package/src/tools/queue/IdempotencyManager.d.ts.map +1 -0
  405. package/src/tools/queue/IdempotencyManager.js +36 -0
  406. package/src/tools/queue/JobHeartbeatStore.d.ts +16 -0
  407. package/src/tools/queue/JobHeartbeatStore.d.ts.map +1 -0
  408. package/src/tools/queue/JobHeartbeatStore.js +67 -0
  409. package/src/tools/queue/JobReconciliationRunner.d.ts +16 -0
  410. package/src/tools/queue/JobReconciliationRunner.d.ts.map +1 -0
  411. package/src/tools/queue/JobReconciliationRunner.js +88 -0
  412. package/src/tools/queue/JobRecoveryDaemon.d.ts +27 -0
  413. package/src/tools/queue/JobRecoveryDaemon.d.ts.map +1 -0
  414. package/src/tools/queue/JobRecoveryDaemon.js +205 -0
  415. package/src/tools/queue/JobStateTracker.d.ts +131 -0
  416. package/src/tools/queue/JobStateTracker.d.ts.map +1 -0
  417. package/src/tools/queue/JobStateTracker.js +387 -0
  418. package/src/tools/queue/JobStateTrackerDbPersistence.d.ts +12 -0
  419. package/src/tools/queue/JobStateTrackerDbPersistence.d.ts.map +1 -0
  420. package/src/tools/queue/JobStateTrackerDbPersistence.js +148 -0
  421. package/src/tools/queue/Queue.d.ts.map +1 -1
  422. package/src/tools/queue/Queue.js +160 -16
  423. package/src/tools/queue/QueueDataRedactor.d.ts +6 -0
  424. package/src/tools/queue/QueueDataRedactor.d.ts.map +1 -0
  425. package/src/tools/queue/QueueDataRedactor.js +45 -0
  426. package/src/tools/queue/QueueExtensions.d.ts.map +1 -1
  427. package/src/tools/queue/QueueExtensions.js +2 -1
  428. package/src/tools/queue/QueueReliabilityMetrics.d.ts +38 -0
  429. package/src/tools/queue/QueueReliabilityMetrics.d.ts.map +1 -0
  430. package/src/tools/queue/QueueReliabilityMetrics.js +131 -0
  431. package/src/tools/queue/QueueReliabilityOrchestrator.d.ts +7 -0
  432. package/src/tools/queue/QueueReliabilityOrchestrator.d.ts.map +1 -0
  433. package/src/tools/queue/QueueReliabilityOrchestrator.js +59 -0
  434. package/src/tools/queue/QueueRuntimeRegistration.d.ts +1 -9
  435. package/src/tools/queue/QueueRuntimeRegistration.d.ts.map +1 -1
  436. package/src/tools/queue/QueueRuntimeRegistration.js +75 -4
  437. package/src/tools/queue/QueueTracing.d.ts +32 -0
  438. package/src/tools/queue/QueueTracing.d.ts.map +1 -0
  439. package/src/tools/queue/QueueTracing.js +151 -0
  440. package/src/tools/queue/StalledJobMonitor.d.ts +5 -0
  441. package/src/tools/queue/StalledJobMonitor.d.ts.map +1 -0
  442. package/src/tools/queue/StalledJobMonitor.js +21 -0
  443. package/src/tools/queue/TimeoutManager.d.ts +14 -0
  444. package/src/tools/queue/TimeoutManager.d.ts.map +1 -0
  445. package/src/tools/queue/TimeoutManager.js +77 -0
  446. package/src/tools/queue/drivers/Redis.d.ts +1 -0
  447. package/src/tools/queue/drivers/Redis.d.ts.map +1 -1
  448. package/src/tools/queue/drivers/Redis.js +1 -0
  449. package/src/tools/queue/index.d.ts +10 -0
  450. package/src/tools/queue/index.d.ts.map +1 -1
  451. package/src/tools/queue/index.js +10 -0
  452. package/src/tools/storage/drivers/R2.d.ts +13 -0
  453. package/src/tools/storage/drivers/R2.d.ts.map +1 -1
  454. package/src/tools/storage/drivers/R2.js +29 -0
  455. package/src/zintrust.plugins.d.ts +9 -0
  456. package/src/zintrust.plugins.d.ts.map +1 -0
  457. package/src/zintrust.plugins.js +7 -0
  458. package/src/zintrust.plugins.wg.d.ts +9 -0
  459. package/src/zintrust.plugins.wg.d.ts.map +1 -0
  460. package/src/zintrust.plugins.wg.js +7 -0
@@ -1 +1 @@
1
- {"version":3,"file":"errorPages.d.ts","sourceRoot":"","sources":["../../../src/routes/errorPages.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAInD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAoDhD,eAAO,MAAM,mBAAmB,GAAI,SAAS,MAAM,EAAE,UAAU,SAAS,KAAG,OAkD1E,CAAC;AAeF,eAAO,MAAM,oBAAoB,GAAI,UAAU,SAAS,KAAG,OAE1D,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,QAAQ,OAAO,KAAG,IAO1D,CAAC;;uCAP+C,OAAO,KAAG,IAAI;mCArElB,MAAM,YAAY,SAAS,KAAG,OAAO;;AA8ElF,wBAAiE"}
1
+ {"version":3,"file":"errorPages.d.ts","sourceRoot":"","sources":["../../../src/routes/errorPages.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAInD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AA8JhD,eAAO,MAAM,mBAAmB,GAAI,SAAS,MAAM,EAAE,UAAU,SAAS,KAAG,OAkD1E,CAAC;AAEF,eAAO,MAAM,wBAAwB,GACnC,SAAS,MAAM,EACf,UAAU,SAAS,KAClB,OAAO,CAAC,OAAO,CA4CjB,CAAC;AAmBF,eAAO,MAAM,oBAAoB,GAAI,UAAU,SAAS,KAAG,OAE1D,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAAU,UAAU,SAAS,KAAG,OAAO,CAAC,OAAO,CAKpF,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,QAAQ,OAAO,KAAG,IAO1D,CAAC;;uCAP+C,OAAO,KAAG,IAAI;mCAjIlB,MAAM,YAAY,SAAS,KAAG,OAAO;;AA0IlF,wBAAiE"}
@@ -2,6 +2,7 @@
2
2
  * Error Pages Static Assets
3
3
  * Serves /error-pages/* assets (CSS/JS/SVG/etc) used by HTML error templates.
4
4
  */
5
+ import { Cloudflare } from '../config/cloudflare.js';
5
6
  import { HTTP_HEADERS, MIME_TYPES } from '../config/constants.js';
6
7
  import { MIME_TYPES_MAP, resolveSafePath, tryDecodeURIComponent } from './common.js';
7
8
  import { getFrameworkPublicRoots } from './publicRoot.js';
@@ -14,6 +15,74 @@ const getCandidatePublicRoots = () => {
14
15
  const unique = new Set(roots.map((root) => root.trim()).filter((root) => root !== ''));
15
16
  return [...unique];
16
17
  };
18
+ const pathExistsAsync = async (candidate) => {
19
+ try {
20
+ await fs.fsPromises.access(candidate);
21
+ return true;
22
+ }
23
+ catch {
24
+ return false;
25
+ }
26
+ };
27
+ const isFileAsync = async (candidate) => {
28
+ try {
29
+ const stats = await fs.fsPromises.stat(candidate);
30
+ return stats.isFile();
31
+ }
32
+ catch {
33
+ return false;
34
+ }
35
+ };
36
+ const findFirstExistingFileAsync = async (candidates) => {
37
+ const results = await Promise.all(candidates.map(async (candidate) => ({
38
+ candidate,
39
+ isFile: await isFileAsync(candidate),
40
+ })));
41
+ return results.find((result) => result.isFile)?.candidate;
42
+ };
43
+ const resolveErrorPageFilePathAsync = async (candidateRoots, normalizedRelative) => {
44
+ const checks = await Promise.all(candidateRoots.map(async (root) => {
45
+ const baseDir = path.join(root, 'error-pages');
46
+ const filePath = resolveSafePath(baseDir, normalizedRelative);
47
+ if (filePath === undefined)
48
+ return undefined;
49
+ try {
50
+ const stats = await fs.fsPromises.stat(filePath);
51
+ if (stats.isDirectory())
52
+ return undefined;
53
+ return filePath;
54
+ }
55
+ catch {
56
+ return undefined;
57
+ }
58
+ }));
59
+ return checks.find((filePath) => typeof filePath === 'string');
60
+ };
61
+ const servePublicRootFileAsync = async (relativePath, response, contentType) => {
62
+ const candidateRoots = getCandidatePublicRoots();
63
+ const candidates = candidateRoots.map((root) => path.join(root, relativePath));
64
+ const filePath = await findFirstExistingFileAsync(candidates);
65
+ try {
66
+ if (filePath === undefined || filePath === null) {
67
+ response.setStatus(404);
68
+ response.setHeader(HTTP_HEADERS.CONTENT_TYPE, MIME_TYPES.TEXT);
69
+ response.send('Not Found');
70
+ return false;
71
+ }
72
+ const content = await fs.fsPromises.readFile(filePath);
73
+ response.setStatus(200);
74
+ response.setHeader(HTTP_HEADERS.CONTENT_TYPE, contentType);
75
+ response.send(content);
76
+ return true;
77
+ }
78
+ catch (error) {
79
+ ErrorFactory.createTryCatchError(`Error serving public file ${filePath}`, error);
80
+ response.setStatus(500);
81
+ response.setHeader(HTTP_HEADERS.CONTENT_TYPE, MIME_TYPES.TEXT);
82
+ response.send('Internal Server Error');
83
+ return false;
84
+ }
85
+ };
17
86
  const findFirstExistingFile = (candidates) => {
18
87
  for (const candidate of candidates) {
19
88
  try {
@@ -51,6 +120,28 @@ const servePublicRootFile = (relativePath, response, contentType) => {
51
120
  return false;
52
121
  }
53
122
  };
123
+ const serveAssetsFileAsync = async (urlPath, response) => {
124
+ const assets = Cloudflare.getAssetsBinding();
125
+ if (!assets)
126
+ return false;
127
+ try {
128
+ const url = new URL(urlPath, 'https://assets.local');
129
+ const res = await assets.fetch(url.toString());
130
+ const contentType = res.headers.get(HTTP_HEADERS.CONTENT_TYPE) ?? MIME_TYPES.TEXT;
131
+ const body = Buffer.from(await res.arrayBuffer());
132
+ response.setStatus(res.status);
133
+ response.setHeader(HTTP_HEADERS.CONTENT_TYPE, contentType);
134
+ response.send(body);
135
+ return true;
136
+ }
137
+ catch (error) {
138
+ ErrorFactory.createTryCatchError(`Error serving asset ${urlPath}`, error);
139
+ response.setStatus(500);
140
+ response.setHeader(HTTP_HEADERS.CONTENT_TYPE, MIME_TYPES.TEXT);
141
+ response.send('Internal Server Error');
142
+ return true;
143
+ }
144
+ };
54
145
  export const serveErrorPagesFile = (urlPath, response) => {
55
146
  if (urlPath === '/error-pages' || urlPath === '/error-pages/') {
56
147
  response.setStatus(404);
@@ -96,20 +187,69 @@ export const serveErrorPagesFile = (urlPath, response) => {
96
187
  response.send('Not Found');
97
188
  return true;
98
189
  };
99
- const handleErrorPagesRequest = (req, res) => {
190
+ export const serveErrorPagesFileAsync = async (urlPath, response) => {
191
+ if (urlPath === '/error-pages' || urlPath === '/error-pages/') {
192
+ response.setStatus(404);
193
+ response.setHeader(HTTP_HEADERS.CONTENT_TYPE, MIME_TYPES.TEXT);
194
+ response.send('Not Found');
195
+ return true;
196
+ }
197
+ if (!urlPath.startsWith('/error-pages/'))
198
+ return false;
199
+ if (Cloudflare.getWorkersEnv() !== null) {
200
+ return serveAssetsFileAsync(urlPath, response);
201
+ }
202
+ const candidateRoots = getCandidatePublicRoots();
203
+ const rawRelative = urlPath.slice('/error-pages/'.length);
204
+ const normalizedRelative = tryDecodeURIComponent(rawRelative).replaceAll('\\', '/');
205
+ const filePath = await resolveErrorPageFilePathAsync(candidateRoots, normalizedRelative);
206
+ try {
207
+ if (filePath !== undefined && (await pathExistsAsync(filePath))) {
208
+ const ext = path.extname(filePath).toLowerCase();
209
+ const contentType = MIME_TYPES_MAP[ext] || 'application/octet-stream';
210
+ const content = await fs.fsPromises.readFile(filePath);
211
+ response.setStatus(200);
212
+ response.setHeader(HTTP_HEADERS.CONTENT_TYPE, contentType);
213
+ response.send(content);
214
+ return true;
215
+ }
216
+ }
217
+ catch (error) {
218
+ ErrorFactory.createTryCatchError(`Error serving error-pages file ${filePath}`, error);
219
+ response.setStatus(500);
220
+ response.setHeader(HTTP_HEADERS.CONTENT_TYPE, MIME_TYPES.TEXT);
221
+ response.send('Internal Server Error');
222
+ return true;
223
+ }
224
+ response.setStatus(404);
225
+ response.setHeader(HTTP_HEADERS.CONTENT_TYPE, MIME_TYPES.TEXT);
226
+ response.send('Not Found');
227
+ return true;
228
+ };
229
+ const handleErrorPagesRequest = async (req, res) => {
100
230
  const urlPath = req.getPath();
101
- if (serveErrorPagesFile(urlPath, res))
231
+ if (await serveErrorPagesFileAsync(urlPath, res))
102
232
  return;
103
233
  res.setStatus(404);
104
234
  res.setHeader(HTTP_HEADERS.CONTENT_TYPE, MIME_TYPES.TEXT);
105
235
  res.send('Not Found');
106
236
  };
107
- const handleZintrustSvgRequest = (_req, res) => {
108
- servePublicRootFile('zintrust.svg', res, MIME_TYPES.SVG);
237
+ const handleZintrustSvgRequest = async (_req, res) => {
238
+ if (Cloudflare.getWorkersEnv() !== null) {
239
+ await serveAssetsFileAsync('/zintrust.svg', res);
240
+ return;
241
+ }
242
+ await servePublicRootFileAsync('zintrust.svg', res, MIME_TYPES.SVG);
109
243
  };
110
244
  export const serveZintrustSvgFile = (response) => {
111
245
  return servePublicRootFile('zintrust.svg', response, MIME_TYPES.SVG);
112
246
  };
247
+ export const serveZintrustSvgFileAsync = async (response) => {
248
+ if (Cloudflare.getWorkersEnv() !== null) {
249
+ return serveAssetsFileAsync('/zintrust.svg', response);
250
+ }
251
+ return servePublicRootFileAsync('zintrust.svg', response, MIME_TYPES.SVG);
252
+ };
113
253
  export const registerErrorPagesRoutes = (router) => {
114
254
  Router.get(router, '/error-pages', handleErrorPagesRequest);
115
255
  Router.get(router, '/error-pages/', handleErrorPagesRequest);
@@ -16,6 +16,7 @@ export declare const PluginAutoImports: Readonly<{
16
16
  * adapters/drivers into core registries.
17
17
  */
18
18
  tryImportProjectAutoImports(): Promise<ImportResult>;
19
+ tryImportFromFileContents(files: string[]): Promise<ImportResult>;
19
20
  }>;
20
21
  export {};
21
22
  //# sourceMappingURL=PluginAutoImports.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PluginAutoImports.d.ts","sourceRoot":"","sources":["../../../src/runtime/PluginAutoImports.ts"],"names":[],"mappings":"AAMA,KAAK,YAAY,GACb;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAChC;IACE,EAAE,EAAE,KAAK,CAAC;IACV,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,WAAW,GAAG,eAAe,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAwBN,eAAO,MAAM,iBAAiB;IAC5B;;;;;;OAMG;mCACkC,OAAO,CAAC,YAAY,CAAC;EA2D1D,CAAC"}
1
+ {"version":3,"file":"PluginAutoImports.d.ts","sourceRoot":"","sources":["../../../src/runtime/PluginAutoImports.ts"],"names":[],"mappings":"AAMA,KAAK,YAAY,GACb;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAChC;IACE,EAAE,EAAE,KAAK,CAAC;IACV,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,WAAW,GAAG,eAAe,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AA0GN,eAAO,MAAM,iBAAiB;IAC5B;;;;;;OAMG;mCACkC,OAAO,CAAC,YAAY,CAAC;qCAmEnB,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC;EAavE,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { pathToFileURL } from '../node-singletons/url.js';
2
2
  import { readEnvString } from '../common/ExternalServiceUtils.js';
3
3
  import { Logger } from '../config/logger.js';
4
- import { existsSync } from '../node-singletons/fs.js';
4
+ import { existsSync, readFile } from '../node-singletons/fs.js';
5
5
  import * as path from '../node-singletons/path.js';
6
6
  const getProjectCwd = () => process.cwd();
7
7
  const getProjectRootEnv = () => readEnvString('ZINTRUST_PROJECT_ROOT');
@@ -22,6 +22,77 @@ const getCandidates = (projectRoot) => {
22
22
  path.join(projectRoot, 'src', 'zintrust.plugins.js'),
23
23
  ];
24
24
  };
25
+ const extractImportSpecifiers = (raw) => {
26
+ const specifiers = [];
27
+ for (const line of raw.split(/\r?\n/)) {
28
+ const match = /^\s*import\s+['"]([^'"]+)['"];?\s*$/.exec(line);
29
+ if (match?.[1] !== null && match?.[1] !== undefined) {
30
+ specifiers.push(match[1]);
31
+ }
32
+ }
33
+ return specifiers;
34
+ };
35
+ const readImportSpecifiersFromFiles = async (files) => {
36
+ const importSpecifiers = [];
37
+ // Read all files in parallel
38
+ const fileReadPromises = files.map(async (filePath) => {
39
+ try {
40
+ const raw = await readFile(filePath, 'utf-8');
41
+ return { filePath, specifiers: extractImportSpecifiers(raw), success: true };
42
+ }
43
+ catch (error) {
44
+ Logger.debug('[plugins] Failed to read auto-import file for fallback', {
45
+ filePath,
46
+ error: error instanceof Error ? error.message : String(error),
47
+ });
48
+ return { filePath, specifiers: [], success: false };
49
+ }
50
+ });
51
+ const results = await Promise.all(fileReadPromises);
52
+ // Collect all successful specifiers
53
+ for (const { filePath, specifiers } of results) {
54
+ for (const specifier of specifiers) {
55
+ importSpecifiers.push({ specifier, filePath });
56
+ }
57
+ }
58
+ return importSpecifiers;
59
+ };
60
+ const resolveRelativeSpecifier = (entry) => {
61
+ const baseDir = path.dirname(entry.filePath);
62
+ const basePath = path.resolve(baseDir, entry.specifier);
63
+ const candidates = [
64
+ basePath,
65
+ `${basePath}.js`,
66
+ `${basePath}.ts`,
67
+ path.join(basePath, 'index.js'),
68
+ path.join(basePath, 'index.ts'),
69
+ ];
70
+ const resolved = candidates.find((candidate) => existsSync(candidate)) ?? basePath;
71
+ return pathToFileURL(resolved).href;
72
+ };
73
+ const importSpecifiers = async (specifiers) => {
74
+ // Import all specifiers in parallel
75
+ const importPromises = Array.from(specifiers).map(async (entry) => {
76
+ const target = entry.specifier.startsWith('.')
77
+ ? resolveRelativeSpecifier(entry)
78
+ : entry.specifier;
79
+ try {
80
+ await import(target);
81
+ Logger.debug('[plugins] Loaded auto-import specifier', { specifier: entry.specifier });
82
+ return { specifier: entry.specifier, success: true };
83
+ }
84
+ catch (error) {
85
+ Logger.debug('[plugins] Failed auto-import specifier', {
86
+ specifier: entry.specifier,
87
+ error: error instanceof Error ? error.message : String(error),
88
+ });
89
+ return { specifier: entry.specifier, success: false };
90
+ }
91
+ });
92
+ const results = await Promise.allSettled(importPromises);
93
+ // Count successful imports
94
+ return results.filter((result) => result.status === 'fulfilled' && result.value.success).length;
95
+ };
25
96
  export const PluginAutoImports = Object.freeze({
26
97
  /**
27
98
  * Best-effort import of a project's `src/zintrust.plugins.ts` file.
@@ -39,8 +110,7 @@ export const PluginAutoImports = Object.freeze({
39
110
  Logger.debug('[plugins] No plugin auto-imports file found', { projectRoot, candidates });
40
111
  return { ok: false, reason: 'not-found' };
41
112
  }
42
- // Try all existing candidates in parallel
43
- const importPromises = existingCandidates.map(async (candidate) => {
113
+ const tryImportCandidate = async (candidate) => {
44
114
  try {
45
115
  const url = pathToFileURL(candidate).href;
46
116
  await import(url);
@@ -55,7 +125,9 @@ export const PluginAutoImports = Object.freeze({
55
125
  errorMessage,
56
126
  };
57
127
  }
58
- });
128
+ };
129
+ // Try all existing candidates in parallel
130
+ const importPromises = existingCandidates.map(async (candidate) => tryImportCandidate(candidate));
59
131
  // Return the first successful import, or the first failure if none succeed
60
132
  try {
61
133
  const results = await Promise.allSettled(importPromises);
@@ -65,15 +137,28 @@ export const PluginAutoImports = Object.freeze({
65
137
  }
66
138
  // Return the first failed result if no success
67
139
  const firstFailedResult = results.find((result) => result.status === 'fulfilled' && !result.value.ok);
68
- return (firstFailedResult?.value ?? {
69
- ok: false,
70
- reason: 'import-failed',
71
- errorMessage: 'All candidates failed',
72
- });
140
+ const failed = firstFailedResult?.value ??
141
+ { ok: false, reason: 'import-failed', errorMessage: 'All candidates failed' };
142
+ Logger.debug('[plugins] Auto-import file failed, attempting per-import fallback', failed);
143
+ const fallbackResult = await this.tryImportFromFileContents(existingCandidates);
144
+ if (fallbackResult.ok)
145
+ return fallbackResult;
146
+ return failed;
73
147
  }
74
148
  catch (error) {
75
149
  const errorMessage = error instanceof Error ? error.message : String(error);
76
150
  return { ok: false, reason: 'import-failed', errorMessage };
77
151
  }
78
152
  },
153
+ async tryImportFromFileContents(files) {
154
+ const specifiers = await readImportSpecifiersFromFiles(files);
155
+ if (specifiers.length === 0) {
156
+ return { ok: false, reason: 'import-failed', errorMessage: 'No import specifiers found' };
157
+ }
158
+ const loaded = await importSpecifiers(specifiers);
159
+ if (loaded > 0) {
160
+ return { ok: true, loadedPath: 'manual-imports' };
161
+ }
162
+ return { ok: false, reason: 'import-failed', errorMessage: 'All specifier imports failed' };
163
+ },
79
164
  });
@@ -1,5 +1,5 @@
1
1
  import type { IncomingMessage, ServerResponse } from '../node-singletons/http';
2
- type Tbody = string | Buffer | null;
2
+ type Tbody = string | Buffer | ReadableStream<Uint8Array> | null;
3
3
  /**
4
4
  * Request body type for handlers
5
5
  */
@@ -14,6 +14,7 @@ export interface PlatformRequest {
14
14
  body?: Tbody;
15
15
  query?: Record<string, string | string[]>;
16
16
  remoteAddr?: string;
17
+ signal?: AbortSignal;
17
18
  }
18
19
  export interface PlatformResponse {
19
20
  statusCode: number;
@@ -110,17 +111,15 @@ export declare const HttpResponse: Readonly<{
110
111
  export declare const ErrorResponse: Readonly<{
111
112
  create(statusCode: number, message: string, details?: unknown): IHttpResponse;
112
113
  }>;
113
- /**
114
- * Create mock Node.js request/response objects for platform compatibility
115
- */
114
+ type ResData = {
115
+ statusCode: number;
116
+ headers: Record<string, string | string[]>;
117
+ body: Tbody;
118
+ };
116
119
  export declare function createMockHttpObjects(request: PlatformRequest): {
117
120
  req: Record<string, unknown>;
118
121
  res: Record<string, unknown>;
119
- responseData: {
120
- statusCode: number;
121
- headers: Record<string, string | string[]>;
122
- body: Tbody;
123
- };
122
+ responseData: ResData;
124
123
  };
125
124
  export {};
126
125
  //# sourceMappingURL=RuntimeAdapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeAdapter.d.ts","sourceRoot":"","sources":["../../../src/runtime/RuntimeAdapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RuntimeAdapter.d.ts","sourceRoot":"","sources":["../../../src/runtime/RuntimeAdapter.ts"],"names":[],"mappings":"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"}
@@ -85,45 +85,79 @@ export const ErrorResponse = Object.freeze({
85
85
  /**
86
86
  * Create mock Node.js request/response objects for platform compatibility
87
87
  */
88
- export function createMockHttpObjects(request) {
89
- const coerceFirstForwardedFor = (value) => {
90
- if (Array.isArray(value)) {
91
- const first = value[0];
92
- return typeof first === 'string' && first.trim() !== '' ? first.trim() : undefined;
93
- }
94
- if (typeof value === 'string' && value.trim() !== '')
95
- return value.trim();
96
- return undefined;
97
- };
88
+ const coerceFirstForwardedFor = (value) => {
89
+ if (Array.isArray(value)) {
90
+ const first = value[0];
91
+ return typeof first === 'string' && first.trim() !== '' ? first.trim() : undefined;
92
+ }
93
+ if (typeof value === 'string' && value.trim() !== '')
94
+ return value.trim();
95
+ return undefined;
96
+ };
97
+ const resolveRemoteAddress = (request) => {
98
98
  const forwardedFor = coerceFirstForwardedFor(request.headers?.['x-forwarded-for']);
99
- const remoteAddress = typeof request.remoteAddr === 'string' && request.remoteAddr.trim() !== ''
100
- ? request.remoteAddr.trim()
101
- : (forwardedFor?.split(',')[0]?.trim() ?? '') || '0.0.0.0';
102
- const responseData = {
103
- statusCode: 200,
104
- headers: { 'Content-Type': 'application/json' },
105
- body: null,
106
- };
107
- // Create minimal mock objects for compatibility
108
- const req = {
109
- method: request.method,
110
- url: request.path,
111
- headers: request.headers,
99
+ if (typeof request.remoteAddr === 'string' && request.remoteAddr.trim() !== '') {
100
+ return request.remoteAddr.trim();
101
+ }
102
+ return (forwardedFor?.split(',')[0]?.trim() ?? '') || '0.0.0.0';
103
+ };
104
+ const createResponseData = () => ({
105
+ statusCode: 200,
106
+ headers: { 'content-type': 'application/json' },
107
+ body: null,
108
+ });
109
+ const createMockRequest = (request, remoteAddress) => ({
110
+ method: request.method,
111
+ url: request.path,
112
+ headers: request.headers,
113
+ body: request.body ?? undefined,
114
+ remoteAddress,
115
+ socket: {
112
116
  remoteAddress,
113
- socket: {
114
- remoteAddress,
115
- },
116
- connection: {
117
- remoteAddress,
118
- },
119
- };
120
- const res = {
117
+ },
118
+ connection: {
119
+ remoteAddress,
120
+ },
121
+ });
122
+ const applyWriteHead = (responseData, statusCode, headers) => {
123
+ responseData.statusCode = statusCode;
124
+ if (headers) {
125
+ const normalizedHeaders = {};
126
+ for (const [key, value] of Object.entries(headers)) {
127
+ normalizedHeaders[key.toLowerCase()] = value;
128
+ }
129
+ responseData.headers = { ...responseData.headers, ...normalizedHeaders };
130
+ }
131
+ if (responseData.headers['content-type'] === 'text/event-stream') {
132
+ // @ts-ignore - ReadableStream/TransformStream might not be in all TS envs type definitions
133
+ if (typeof TransformStream !== 'undefined') {
134
+ // @ts-ignore
135
+ const stream = new TransformStream();
136
+ responseData.body = stream.readable;
137
+ return stream.writable.getWriter();
138
+ }
139
+ }
140
+ return null;
141
+ };
142
+ const resData = (responseData, request) => {
143
+ return {
121
144
  statusCode: 200,
122
145
  headers: responseData.headers,
123
146
  writeHead: function (statusCode, headers) {
124
- responseData.statusCode = statusCode;
125
- if (headers) {
126
- responseData.headers = { ...responseData.headers, ...headers };
147
+ this._writer = applyWriteHead(responseData, statusCode, headers);
148
+ // Handle abortion if signal is present
149
+ if (request.signal && this._writer) {
150
+ request.signal.addEventListener('abort', () => {
151
+ if (this._writer) {
152
+ try {
153
+ this._writer.close();
154
+ }
155
+ catch {
156
+ // Ignore close errors
157
+ }
158
+ }
159
+ this.emit('close');
160
+ });
127
161
  }
128
162
  return this;
129
163
  },
@@ -132,15 +166,67 @@ export function createMockHttpObjects(request) {
132
166
  return this;
133
167
  },
134
168
  end: function (chunk) {
169
+ if (this._writer) {
170
+ if (chunk !== undefined && chunk !== null) {
171
+ this._writer.write(new TextEncoder().encode(String(chunk)));
172
+ }
173
+ this._writer.close();
174
+ return this;
175
+ }
135
176
  if (chunk !== undefined) {
136
177
  responseData.body = chunk;
137
178
  }
179
+ this.emit('finish');
138
180
  return this;
139
181
  },
140
182
  write: function (chunk) {
183
+ if (this._writer) {
184
+ try {
185
+ this._writer.write(new TextEncoder().encode(String(chunk)));
186
+ return true;
187
+ }
188
+ catch {
189
+ return false;
190
+ }
191
+ }
141
192
  responseData.body = chunk;
142
193
  return true;
143
194
  },
195
+ on: function (event, listener) {
196
+ this._listeners ??= {};
197
+ this._listeners[event] ??= [];
198
+ this._listeners[event].push(listener);
199
+ return this;
200
+ },
201
+ once: function (event, listener) {
202
+ const wrapper = (...args) => {
203
+ this.removeListener(event, wrapper);
204
+ listener(...args);
205
+ };
206
+ return this.on(event, wrapper);
207
+ },
208
+ removeListener: function (event, listener) {
209
+ if (this._listeners?.[event] !== undefined) {
210
+ this._listeners[event] = this._listeners[event].filter((l) => l !== listener);
211
+ }
212
+ return this;
213
+ },
214
+ emit: function (event, ...args) {
215
+ if (this._listeners?.[event] !== undefined) {
216
+ // Create a copy to avoid issues if listeners remove themselves
217
+ [...this._listeners[event]].forEach((fn) => {
218
+ fn(...args);
219
+ });
220
+ }
221
+ },
222
+ _writer: null,
223
+ _listeners: {},
144
224
  };
225
+ };
226
+ export function createMockHttpObjects(request) {
227
+ const remoteAddress = resolveRemoteAddress(request);
228
+ const responseData = createResponseData();
229
+ const req = createMockRequest(request, remoteAddress);
230
+ const res = resData(responseData, request);
145
231
  return { req, res, responseData };
146
232
  }
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Runtime Services
3
+ * Adapter layer for env/crypto/timers/fs/fetch across Node and Workers
4
+ * Sealed namespace for immutability
5
+ */
6
+ export type RuntimePlatform = 'nodejs' | 'lambda' | 'fargate' | 'cloudflare' | 'deno';
7
+ export type RuntimeEnvReader = {
8
+ get: (key: string, defaultValue?: string) => string;
9
+ getInt: (key: string, defaultValue?: number) => number;
10
+ getFloat: (key: string, defaultValue?: number) => number;
11
+ getBool: (key: string, defaultValue?: boolean) => boolean;
12
+ };
13
+ export type RandomValuesArray = Uint8Array | Uint8ClampedArray | Uint16Array | Uint32Array | Int8Array | Int16Array | Int32Array | BigInt64Array | BigUint64Array;
14
+ export type RuntimeCrypto = {
15
+ subtle: SubtleCrypto;
16
+ getRandomValues: <T extends RandomValuesArray>(array: T) => T;
17
+ randomUUID: () => string;
18
+ randomBytes?: (size: number) => Uint8Array;
19
+ };
20
+ export type RuntimeTimers = {
21
+ setTimeout: typeof setTimeout;
22
+ clearTimeout: typeof clearTimeout;
23
+ setInterval: typeof setInterval;
24
+ clearInterval: typeof clearInterval;
25
+ };
26
+ export type RuntimeFs = {
27
+ supported: boolean;
28
+ readFileSync: (path: string, encoding?: BufferEncoding) => string | Buffer;
29
+ readdirSync: (path: string) => string[];
30
+ existsSync: (path: string) => boolean;
31
+ };
32
+ export type RuntimeServices = {
33
+ platform: RuntimePlatform;
34
+ env: RuntimeEnvReader;
35
+ crypto: RuntimeCrypto;
36
+ timers: RuntimeTimers;
37
+ fs: RuntimeFs;
38
+ fetch: typeof fetch;
39
+ };
40
+ export declare const detectCloudflareWorkers: () => boolean;
41
+ export declare const detectRuntimePlatform: () => RuntimePlatform;
42
+ export declare const RUNTIME_PLATFORM: RuntimePlatform;
43
+ export declare const RuntimeServices: Readonly<{
44
+ create(platform: RuntimePlatform): RuntimeServices;
45
+ }>;
46
+ export default RuntimeServices;
47
+ //# sourceMappingURL=RuntimeServices.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuntimeServices.d.ts","sourceRoot":"","sources":["../../../src/runtime/RuntimeServices.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,YAAY,GAAG,MAAM,CAAC;AAEtF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACpD,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACvD,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACzD,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC;CAC3D,CAAC;AAEF,MAAM,MAAM,iBAAiB,GACzB,UAAU,GACV,iBAAiB,GACjB,WAAW,GACX,WAAW,GACX,SAAS,GACT,UAAU,GACV,UAAU,GACV,aAAa,GACb,cAAc,CAAC;AAEnB,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,YAAY,CAAC;IACrB,eAAe,EAAE,CAAC,CAAC,SAAS,iBAAiB,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC;IAC9D,UAAU,EAAE,MAAM,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,YAAY,EAAE,OAAO,YAAY,CAAC;IAClC,WAAW,EAAE,OAAO,WAAW,CAAC;IAChC,aAAa,EAAE,OAAO,aAAa,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,cAAc,KAAK,MAAM,GAAG,MAAM,CAAC;IAC3E,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IACxC,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,eAAe,CAAC;IAC1B,GAAG,EAAE,gBAAgB,CAAC;IACtB,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,aAAa,CAAC;IACtB,EAAE,EAAE,SAAS,CAAC;IACd,KAAK,EAAE,OAAO,KAAK,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,uBAAuB,QAAO,OAE1C,CAAC;AAEF,eAAO,MAAM,qBAAqB,QAAO,eAGxC,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,eAAyC,CAAC;AAwIzE,eAAO,MAAM,eAAe;qBACT,eAAe,GAAG,eAAe;EAqBlD,CAAC;AAEH,eAAe,eAAe,CAAC"}