@zintrust/core 0.1.39 → 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 (475) 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 -262
  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 -9
  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 +145 -18
  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.d.ts +2 -1
  110. package/src/cli/utils/EnvFileLoader.d.ts.map +1 -1
  111. package/src/cli/utils/EnvFileLoader.js +22 -21
  112. package/src/cli/utils/spawn.d.ts.map +1 -1
  113. package/src/cli/utils/spawn.js +17 -10
  114. package/src/cli/workers/QueueWorkRunner.js +1 -1
  115. package/src/common/ExternalServiceUtils.d.ts.map +1 -1
  116. package/src/common/ExternalServiceUtils.js +7 -2
  117. package/src/common/HealthRoutes.d.ts.map +1 -1
  118. package/src/common/HealthRoutes.js +50 -2
  119. package/src/common/RemoteSignedJson.d.ts +1 -0
  120. package/src/common/RemoteSignedJson.d.ts.map +1 -1
  121. package/src/common/RemoteSignedJson.js +39 -13
  122. package/src/common/index.d.ts +1 -0
  123. package/src/common/index.d.ts.map +1 -1
  124. package/src/common/index.js +12 -1
  125. package/src/config/FileLogWriter.d.ts.map +1 -1
  126. package/src/config/FileLogWriter.js +21 -6
  127. package/src/config/app.d.ts +4 -0
  128. package/src/config/app.d.ts.map +1 -1
  129. package/src/config/app.js +4 -0
  130. package/src/config/cache.d.ts.map +1 -1
  131. package/src/config/cache.js +22 -2
  132. package/src/config/cloudflare.d.ts +5 -1
  133. package/src/config/cloudflare.d.ts.map +1 -1
  134. package/src/config/cloudflare.js +48 -0
  135. package/src/config/database.d.ts.map +1 -1
  136. package/src/config/database.js +48 -13
  137. package/src/config/env.d.ts +90 -2
  138. package/src/config/env.d.ts.map +1 -1
  139. package/src/config/env.js +160 -18
  140. package/src/config/index.d.ts +1 -0
  141. package/src/config/index.d.ts.map +1 -1
  142. package/src/config/logger.d.ts.map +1 -1
  143. package/src/config/logger.js +60 -16
  144. package/src/config/mail.d.ts.map +1 -1
  145. package/src/config/mail.js +16 -10
  146. package/src/config/middleware.d.ts +5 -0
  147. package/src/config/middleware.d.ts.map +1 -1
  148. package/src/config/middleware.js +19 -1
  149. package/src/config/queue.d.ts.map +1 -1
  150. package/src/config/queue.js +70 -9
  151. package/src/config/redis.d.ts.map +1 -1
  152. package/src/config/redis.js +48 -13
  153. package/src/config/storage.d.ts.map +1 -1
  154. package/src/config/storage.js +1 -0
  155. package/src/config/type.d.ts +19 -0
  156. package/src/config/type.d.ts.map +1 -1
  157. package/src/config/workers.d.ts.map +1 -1
  158. package/src/config/workers.js +122 -16
  159. package/src/functions/cloudflare.d.ts.map +1 -1
  160. package/src/functions/cloudflare.js +55 -1
  161. package/src/health/StartupHealthChecks.js +1 -1
  162. package/src/http/FileUpload.d.ts +3 -2
  163. package/src/http/FileUpload.d.ts.map +1 -1
  164. package/src/http/Kernel.d.ts.map +1 -1
  165. package/src/http/Kernel.js +2 -1
  166. package/src/http/error-pages/ErrorPageRenderer.d.ts +4 -0
  167. package/src/http/error-pages/ErrorPageRenderer.d.ts.map +1 -1
  168. package/src/http/error-pages/ErrorPageRenderer.js +141 -1
  169. package/src/http/middleware/BodyParsingMiddleware.d.ts.map +1 -1
  170. package/src/http/middleware/BodyParsingMiddleware.js +33 -6
  171. package/src/index.d.ts +25 -53
  172. package/src/index.d.ts.map +1 -1
  173. package/src/index.js +30 -14
  174. package/src/microservices/ServiceAuthMiddleware.d.ts.map +1 -1
  175. package/src/microservices/ServiceAuthMiddleware.js +12 -4
  176. package/src/middleware/CsrfMiddleware.d.ts.map +1 -1
  177. package/src/middleware/CsrfMiddleware.js +39 -10
  178. package/src/middleware/ErrorHandlerMiddleware.d.ts.map +1 -1
  179. package/src/middleware/ErrorHandlerMiddleware.js +2 -1
  180. package/src/migrations/MigrationLoader.js +1 -1
  181. package/src/migrations/schema/SchemaCompiler.d.ts.map +1 -1
  182. package/src/migrations/schema/SchemaCompiler.js +6 -3
  183. package/src/node-singletons/crypto.d.ts +1 -1
  184. package/src/node-singletons/crypto.d.ts.map +1 -1
  185. package/src/node-singletons/crypto.js +1 -1
  186. package/src/node-singletons/fs.d.ts +1 -1
  187. package/src/node-singletons/fs.d.ts.map +1 -1
  188. package/src/node-singletons/path.d.ts +1 -1
  189. package/src/node-singletons/path.d.ts.map +1 -1
  190. package/src/node-singletons/path.js +1 -1
  191. package/src/node-singletons/stream.d.ts +11 -0
  192. package/src/node-singletons/stream.d.ts.map +1 -0
  193. package/src/node-singletons/stream.js +8 -0
  194. package/src/observability/OpenTelemetry.d.ts +7 -0
  195. package/src/observability/OpenTelemetry.d.ts.map +1 -1
  196. package/src/observability/OpenTelemetry.js +49 -2
  197. package/src/orm/Database.d.ts +4 -0
  198. package/src/orm/Database.d.ts.map +1 -1
  199. package/src/orm/Database.js +80 -9
  200. package/src/orm/DatabaseRuntimeRegistration.d.ts.map +1 -1
  201. package/src/orm/DatabaseRuntimeRegistration.js +2 -0
  202. package/src/orm/QueryBuilder.d.ts +1 -0
  203. package/src/orm/QueryBuilder.d.ts.map +1 -1
  204. package/src/orm/QueryBuilder.js +33 -3
  205. package/src/orm/SchemaCompiler.d.ts.map +1 -1
  206. package/src/orm/SchemaCompiler.js +6 -3
  207. package/src/orm/adapters/D1RemoteAdapter.d.ts.map +1 -1
  208. package/src/orm/adapters/D1RemoteAdapter.js +14 -1
  209. package/src/orm/adapters/MongoDBProxyAdapter.d.ts +3 -0
  210. package/src/orm/adapters/MongoDBProxyAdapter.d.ts.map +1 -0
  211. package/src/orm/adapters/MongoDBProxyAdapter.js +128 -0
  212. package/src/orm/adapters/MySQLProxyAdapter.d.ts +11 -0
  213. package/src/orm/adapters/MySQLProxyAdapter.d.ts.map +1 -0
  214. package/src/orm/adapters/MySQLProxyAdapter.js +143 -0
  215. package/src/orm/adapters/PostgreSQLProxyAdapter.d.ts +11 -0
  216. package/src/orm/adapters/PostgreSQLProxyAdapter.d.ts.map +1 -0
  217. package/src/orm/adapters/PostgreSQLProxyAdapter.js +147 -0
  218. package/src/orm/adapters/ProxyCache.d.ts +9 -0
  219. package/src/orm/adapters/ProxyCache.d.ts.map +1 -0
  220. package/src/orm/adapters/ProxyCache.js +24 -0
  221. package/src/orm/adapters/ProxySignedRequest.d.ts +11 -0
  222. package/src/orm/adapters/ProxySignedRequest.d.ts.map +1 -0
  223. package/src/orm/adapters/ProxySignedRequest.js +30 -0
  224. package/src/orm/adapters/ProxySigningPath.d.ts +3 -0
  225. package/src/orm/adapters/ProxySigningPath.d.ts.map +1 -0
  226. package/src/orm/adapters/ProxySigningPath.js +25 -0
  227. package/src/orm/adapters/SqlProxyAdapterUtils.d.ts +19 -0
  228. package/src/orm/adapters/SqlProxyAdapterUtils.d.ts.map +1 -0
  229. package/src/orm/adapters/SqlProxyAdapterUtils.js +35 -0
  230. package/src/orm/adapters/SqlServerProxyAdapter.d.ts +3 -0
  231. package/src/orm/adapters/SqlServerProxyAdapter.d.ts.map +1 -0
  232. package/src/orm/adapters/SqlServerProxyAdapter.js +146 -0
  233. package/src/performance/Optimizer.d.ts +1 -0
  234. package/src/performance/Optimizer.d.ts.map +1 -1
  235. package/src/performance/Optimizer.js +21 -8
  236. package/src/proxy/ErrorHandler.d.ts +11 -0
  237. package/src/proxy/ErrorHandler.d.ts.map +1 -0
  238. package/src/proxy/ErrorHandler.js +7 -0
  239. package/src/proxy/PoolManager.d.ts +8 -0
  240. package/src/proxy/PoolManager.d.ts.map +1 -0
  241. package/src/proxy/PoolManager.js +18 -0
  242. package/src/proxy/ProxyBackend.d.ts +18 -0
  243. package/src/proxy/ProxyBackend.d.ts.map +1 -0
  244. package/src/proxy/ProxyBackend.js +1 -0
  245. package/src/proxy/ProxyConfig.d.ts +12 -0
  246. package/src/proxy/ProxyConfig.d.ts.map +1 -0
  247. package/src/proxy/ProxyConfig.js +1 -0
  248. package/src/proxy/ProxyRegistry.d.ts +10 -0
  249. package/src/proxy/ProxyRegistry.d.ts.map +1 -0
  250. package/src/proxy/ProxyRegistry.js +11 -0
  251. package/src/proxy/ProxyServer.d.ts +21 -0
  252. package/src/proxy/ProxyServer.d.ts.map +1 -0
  253. package/src/proxy/ProxyServer.js +84 -0
  254. package/src/proxy/ProxyServerUtils.d.ts +37 -0
  255. package/src/proxy/ProxyServerUtils.d.ts.map +1 -0
  256. package/src/proxy/ProxyServerUtils.js +42 -0
  257. package/src/proxy/ProxySigningConfigResolver.d.ts +22 -0
  258. package/src/proxy/ProxySigningConfigResolver.d.ts.map +1 -0
  259. package/src/proxy/ProxySigningConfigResolver.js +24 -0
  260. package/src/proxy/ProxySigningRequest.d.ts +12 -0
  261. package/src/proxy/ProxySigningRequest.d.ts.map +1 -0
  262. package/src/proxy/ProxySigningRequest.js +31 -0
  263. package/src/proxy/RequestValidator.d.ts +15 -0
  264. package/src/proxy/RequestValidator.d.ts.map +1 -0
  265. package/src/proxy/RequestValidator.js +25 -0
  266. package/src/proxy/SigningService.d.ts +39 -0
  267. package/src/proxy/SigningService.d.ts.map +1 -0
  268. package/src/proxy/SigningService.js +107 -0
  269. package/src/proxy/SqlPayloadValidator.d.ts +13 -0
  270. package/src/proxy/SqlPayloadValidator.d.ts.map +1 -0
  271. package/src/proxy/SqlPayloadValidator.js +14 -0
  272. package/src/proxy/d1/ZintrustD1Proxy.d.ts +2 -0
  273. package/src/proxy/d1/ZintrustD1Proxy.d.ts.map +1 -0
  274. package/src/proxy/d1/ZintrustD1Proxy.js +1 -0
  275. package/src/proxy/d1/register.d.ts +2 -0
  276. package/src/proxy/d1/register.d.ts.map +1 -0
  277. package/src/proxy/d1/register.js +5 -0
  278. package/src/proxy/kv/ZintrustKvProxy.d.ts +2 -0
  279. package/src/proxy/kv/ZintrustKvProxy.d.ts.map +1 -0
  280. package/src/proxy/kv/ZintrustKvProxy.js +1 -0
  281. package/src/proxy/kv/register.d.ts +2 -0
  282. package/src/proxy/kv/register.d.ts.map +1 -0
  283. package/src/proxy/kv/register.js +5 -0
  284. package/src/proxy/mongodb/MongoDBProxyServer.d.ts +33 -0
  285. package/src/proxy/mongodb/MongoDBProxyServer.d.ts.map +1 -0
  286. package/src/proxy/mongodb/MongoDBProxyServer.js +202 -0
  287. package/src/proxy/mongodb/register.d.ts +2 -0
  288. package/src/proxy/mongodb/register.d.ts.map +1 -0
  289. package/src/proxy/mongodb/register.js +5 -0
  290. package/src/proxy/mysql/MySqlProxyServer.d.ts +14 -0
  291. package/src/proxy/mysql/MySqlProxyServer.d.ts.map +1 -0
  292. package/src/proxy/mysql/MySqlProxyServer.js +169 -0
  293. package/src/proxy/mysql/register.d.ts +2 -0
  294. package/src/proxy/mysql/register.d.ts.map +1 -0
  295. package/src/proxy/mysql/register.js +5 -0
  296. package/src/proxy/postgres/PostgresProxyServer.d.ts +14 -0
  297. package/src/proxy/postgres/PostgresProxyServer.d.ts.map +1 -0
  298. package/src/proxy/postgres/PostgresProxyServer.js +140 -0
  299. package/src/proxy/postgres/register.d.ts +2 -0
  300. package/src/proxy/postgres/register.d.ts.map +1 -0
  301. package/src/proxy/postgres/register.js +5 -0
  302. package/src/proxy/redis/RedisProxyServer.d.ts +12 -0
  303. package/src/proxy/redis/RedisProxyServer.d.ts.map +1 -0
  304. package/src/proxy/redis/RedisProxyServer.js +192 -0
  305. package/src/proxy/redis/register.d.ts +2 -0
  306. package/src/proxy/redis/register.d.ts.map +1 -0
  307. package/src/proxy/redis/register.js +5 -0
  308. package/src/proxy/smtp/SmtpProxyServer.d.ts +19 -0
  309. package/src/proxy/smtp/SmtpProxyServer.d.ts.map +1 -0
  310. package/src/proxy/smtp/SmtpProxyServer.js +289 -0
  311. package/src/proxy/smtp/register.d.ts +2 -0
  312. package/src/proxy/smtp/register.d.ts.map +1 -0
  313. package/src/proxy/smtp/register.js +5 -0
  314. package/src/proxy/sqlserver/SqlServerProxyServer.d.ts +14 -0
  315. package/src/proxy/sqlserver/SqlServerProxyServer.d.ts.map +1 -0
  316. package/src/proxy/sqlserver/SqlServerProxyServer.js +168 -0
  317. package/src/proxy/sqlserver/register.d.ts +2 -0
  318. package/src/proxy/sqlserver/register.d.ts.map +1 -0
  319. package/src/proxy/sqlserver/register.js +5 -0
  320. package/src/routes/doc.d.ts.map +1 -1
  321. package/src/routes/doc.js +16 -2
  322. package/src/routes/error.d.ts +5 -4
  323. package/src/routes/error.d.ts.map +1 -1
  324. package/src/routes/error.js +15 -13
  325. package/src/routes/errorPages.d.ts +2 -0
  326. package/src/routes/errorPages.d.ts.map +1 -1
  327. package/src/routes/errorPages.js +144 -4
  328. package/src/runtime/PluginAutoImports.d.ts +1 -0
  329. package/src/runtime/PluginAutoImports.d.ts.map +1 -1
  330. package/src/runtime/PluginAutoImports.js +94 -9
  331. package/src/runtime/RuntimeAdapter.d.ts +8 -9
  332. package/src/runtime/RuntimeAdapter.d.ts.map +1 -1
  333. package/src/runtime/RuntimeAdapter.js +120 -34
  334. package/src/runtime/RuntimeServices.d.ts +47 -0
  335. package/src/runtime/RuntimeServices.d.ts.map +1 -0
  336. package/src/runtime/RuntimeServices.js +164 -0
  337. package/src/runtime/StartupConfigFileRegistry.d.ts +4 -4
  338. package/src/runtime/StartupConfigFileRegistry.d.ts.map +1 -1
  339. package/src/runtime/StartupConfigFileRegistry.js +12 -0
  340. package/src/runtime/WorkerAdapterImports.d.ts +5 -0
  341. package/src/runtime/WorkerAdapterImports.d.ts.map +1 -0
  342. package/src/runtime/WorkerAdapterImports.js +17 -0
  343. package/src/runtime/WorkersModule.d.ts +6 -0
  344. package/src/runtime/WorkersModule.d.ts.map +1 -0
  345. package/src/runtime/WorkersModule.js +278 -0
  346. package/src/runtime/adapters/CloudflareAdapter.d.ts.map +1 -1
  347. package/src/runtime/adapters/CloudflareAdapter.js +19 -2
  348. package/src/runtime/adapters/DenoAdapter.js +1 -0
  349. package/src/runtime/adapters/FargateAdapter.js +1 -1
  350. package/src/runtime/adapters/LambdaAdapter.js +1 -1
  351. package/src/runtime/adapters/NodeServerAdapter.js +1 -1
  352. package/src/runtime/detectRuntime.d.ts +10 -0
  353. package/src/runtime/detectRuntime.d.ts.map +1 -0
  354. package/src/runtime/detectRuntime.js +57 -0
  355. package/src/runtime/useFileLoader.d.ts.map +1 -1
  356. package/src/runtime/useFileLoader.js +16 -0
  357. package/src/scripts/TemplateImportsCheck.js +2 -2
  358. package/src/scripts/TemplateSync.js +3 -4
  359. package/src/security/CsrfTokenManager.d.ts +18 -9
  360. package/src/security/CsrfTokenManager.d.ts.map +1 -1
  361. package/src/security/CsrfTokenManager.js +204 -11
  362. package/src/security/Hash.d.ts +1 -1
  363. package/src/security/Hash.d.ts.map +1 -1
  364. package/src/security/Hash.js +31 -36
  365. package/src/seeders/SeederLoader.js +1 -1
  366. package/src/session/SessionManager.d.ts +3 -0
  367. package/src/session/SessionManager.d.ts.map +1 -1
  368. package/src/session/SessionManager.js +49 -10
  369. package/src/sockets/CloudflareSocket.d.ts +24 -0
  370. package/src/sockets/CloudflareSocket.d.ts.map +1 -0
  371. package/src/sockets/CloudflareSocket.js +259 -0
  372. package/src/start.d.ts.map +1 -1
  373. package/src/start.js +1 -8
  374. package/src/templates/project/basic/app/Middleware/index.ts.tpl +1 -1
  375. package/src/templates/project/basic/src/zintrust.plugins.wg.ts.tpl +8 -0
  376. package/src/toolkit/Secrets/providers/AwsSecretsManager.d.ts.map +1 -1
  377. package/src/toolkit/Secrets/providers/AwsSecretsManager.js +4 -2
  378. package/src/tools/mail/drivers/Smtp.d.ts.map +1 -1
  379. package/src/tools/mail/drivers/Smtp.js +223 -18
  380. package/src/tools/mail/index.d.ts.map +1 -1
  381. package/src/tools/mail/index.js +5 -4
  382. package/src/tools/mail/template-loader.d.ts.map +1 -1
  383. package/src/tools/mail/template-loader.js +197 -29
  384. package/src/tools/mail/templates/auth-password-reset.d.ts +3 -0
  385. package/src/tools/mail/templates/auth-password-reset.d.ts.map +1 -0
  386. package/src/tools/mail/templates/auth-password-reset.js +231 -0
  387. package/src/tools/mail/templates/auth-welcome.d.ts +3 -0
  388. package/src/tools/mail/templates/auth-welcome.d.ts.map +1 -0
  389. package/src/tools/mail/templates/auth-welcome.js +236 -0
  390. package/src/tools/mail/templates/general.d.ts +3 -0
  391. package/src/tools/mail/templates/general.d.ts.map +1 -0
  392. package/src/tools/mail/templates/general.js +109 -0
  393. package/src/tools/mail/templates/index.js +2 -2
  394. package/src/tools/mail/templates/job-completed.d.ts +3 -0
  395. package/src/tools/mail/templates/job-completed.d.ts.map +1 -0
  396. package/src/tools/mail/templates/job-completed.js +188 -0
  397. package/src/tools/mail/templates/notifications-new-comment.d.ts +3 -0
  398. package/src/tools/mail/templates/notifications-new-comment.d.ts.map +1 -0
  399. package/src/tools/mail/templates/notifications-new-comment.js +228 -0
  400. package/src/tools/mail/templates/password-reset.d.ts +3 -0
  401. package/src/tools/mail/templates/password-reset.d.ts.map +1 -0
  402. package/src/tools/mail/templates/password-reset.js +221 -0
  403. package/src/tools/mail/templates/performance-report.d.ts +3 -0
  404. package/src/tools/mail/templates/performance-report.d.ts.map +1 -0
  405. package/src/tools/mail/templates/performance-report.js +258 -0
  406. package/src/tools/mail/templates/welcome.d.ts +3 -0
  407. package/src/tools/mail/templates/welcome.d.ts.map +1 -0
  408. package/src/tools/mail/templates/welcome.js +187 -0
  409. package/src/tools/mail/templates/worker-alert.d.ts +3 -0
  410. package/src/tools/mail/templates/worker-alert.d.ts.map +1 -0
  411. package/src/tools/mail/templates/worker-alert.js +229 -0
  412. package/src/tools/notification/Notification.js +1 -1
  413. package/src/tools/notification/testingHelpers.js +6 -5
  414. package/src/tools/queue/AdvancedQueue.js +2 -6
  415. package/src/tools/queue/IdempotencyManager.d.ts +6 -0
  416. package/src/tools/queue/IdempotencyManager.d.ts.map +1 -0
  417. package/src/tools/queue/IdempotencyManager.js +36 -0
  418. package/src/tools/queue/JobHeartbeatStore.d.ts +16 -0
  419. package/src/tools/queue/JobHeartbeatStore.d.ts.map +1 -0
  420. package/src/tools/queue/JobHeartbeatStore.js +67 -0
  421. package/src/tools/queue/JobReconciliationRunner.d.ts +16 -0
  422. package/src/tools/queue/JobReconciliationRunner.d.ts.map +1 -0
  423. package/src/tools/queue/JobReconciliationRunner.js +88 -0
  424. package/src/tools/queue/JobRecoveryDaemon.d.ts +27 -0
  425. package/src/tools/queue/JobRecoveryDaemon.d.ts.map +1 -0
  426. package/src/tools/queue/JobRecoveryDaemon.js +205 -0
  427. package/src/tools/queue/JobStateTracker.d.ts +131 -0
  428. package/src/tools/queue/JobStateTracker.d.ts.map +1 -0
  429. package/src/tools/queue/JobStateTracker.js +387 -0
  430. package/src/tools/queue/JobStateTrackerDbPersistence.d.ts +12 -0
  431. package/src/tools/queue/JobStateTrackerDbPersistence.d.ts.map +1 -0
  432. package/src/tools/queue/JobStateTrackerDbPersistence.js +148 -0
  433. package/src/tools/queue/Queue.d.ts.map +1 -1
  434. package/src/tools/queue/Queue.js +160 -16
  435. package/src/tools/queue/QueueDataRedactor.d.ts +6 -0
  436. package/src/tools/queue/QueueDataRedactor.d.ts.map +1 -0
  437. package/src/tools/queue/QueueDataRedactor.js +45 -0
  438. package/src/tools/queue/QueueExtensions.d.ts.map +1 -1
  439. package/src/tools/queue/QueueExtensions.js +2 -1
  440. package/src/tools/queue/QueueReliabilityMetrics.d.ts +38 -0
  441. package/src/tools/queue/QueueReliabilityMetrics.d.ts.map +1 -0
  442. package/src/tools/queue/QueueReliabilityMetrics.js +131 -0
  443. package/src/tools/queue/QueueReliabilityOrchestrator.d.ts +7 -0
  444. package/src/tools/queue/QueueReliabilityOrchestrator.d.ts.map +1 -0
  445. package/src/tools/queue/QueueReliabilityOrchestrator.js +59 -0
  446. package/src/tools/queue/QueueRuntimeRegistration.d.ts +1 -9
  447. package/src/tools/queue/QueueRuntimeRegistration.d.ts.map +1 -1
  448. package/src/tools/queue/QueueRuntimeRegistration.js +75 -4
  449. package/src/tools/queue/QueueTracing.d.ts +32 -0
  450. package/src/tools/queue/QueueTracing.d.ts.map +1 -0
  451. package/src/tools/queue/QueueTracing.js +151 -0
  452. package/src/tools/queue/StalledJobMonitor.d.ts +5 -0
  453. package/src/tools/queue/StalledJobMonitor.d.ts.map +1 -0
  454. package/src/tools/queue/StalledJobMonitor.js +21 -0
  455. package/src/tools/queue/TimeoutManager.d.ts +14 -0
  456. package/src/tools/queue/TimeoutManager.d.ts.map +1 -0
  457. package/src/tools/queue/TimeoutManager.js +77 -0
  458. package/src/tools/queue/drivers/Redis.d.ts +1 -0
  459. package/src/tools/queue/drivers/Redis.d.ts.map +1 -1
  460. package/src/tools/queue/drivers/Redis.js +1 -0
  461. package/src/tools/queue/index.d.ts +10 -0
  462. package/src/tools/queue/index.d.ts.map +1 -1
  463. package/src/tools/queue/index.js +10 -0
  464. package/src/tools/redis/RedisKeyManager.d.ts +3 -0
  465. package/src/tools/redis/RedisKeyManager.d.ts.map +1 -1
  466. package/src/tools/redis/RedisKeyManager.js +15 -0
  467. package/src/tools/storage/drivers/R2.d.ts +13 -0
  468. package/src/tools/storage/drivers/R2.d.ts.map +1 -1
  469. package/src/tools/storage/drivers/R2.js +29 -0
  470. package/src/zintrust.plugins.d.ts +9 -0
  471. package/src/zintrust.plugins.d.ts.map +1 -0
  472. package/src/zintrust.plugins.js +7 -0
  473. package/src/zintrust.plugins.wg.d.ts +9 -0
  474. package/src/zintrust.plugins.wg.d.ts.map +1 -0
  475. package/src/zintrust.plugins.wg.js +7 -0
@@ -3,13 +3,17 @@
3
3
  * Central database connection management and query execution
4
4
  */
5
5
  import { OpenTelemetry } from '../observability/OpenTelemetry.js';
6
+ import { Cloudflare } from '../config/cloudflare.js';
6
7
  import { Env } from '../config/env.js';
8
+ import { Logger } from '../config/logger.js';
7
9
  import { ErrorFactory } from '../exceptions/ZintrustError.js';
8
10
  import { EventEmitter } from '../node-singletons/events.js';
9
11
  import { D1Adapter } from './adapters/D1Adapter.js';
10
12
  import { D1RemoteAdapter } from './adapters/D1RemoteAdapter.js';
11
13
  import { MySQLAdapter } from './adapters/MySQLAdapter.js';
14
+ import { MySQLProxyAdapter } from './adapters/MySQLProxyAdapter.js';
12
15
  import { PostgreSQLAdapter } from './adapters/PostgreSQLAdapter.js';
16
+ import { PostgreSQLProxyAdapter } from './adapters/PostgreSQLProxyAdapter.js';
13
17
  import { SQLiteAdapter } from './adapters/SQLiteAdapter.js';
14
18
  import { SQLServerAdapter } from './adapters/SQLServerAdapter.js';
15
19
  import { DatabaseAdapterRegistry } from './DatabaseAdapterRegistry.js';
@@ -21,7 +25,76 @@ import { QueryBuilder } from './QueryBuilder.js';
21
25
  /**
22
26
  * Create appropriate adapter based on driver
23
27
  */
28
+ const resolveMySqlProxyAdapter = (cfg) => {
29
+ if (cfg.driver !== 'mysql')
30
+ return null;
31
+ const proxyUrl = Env.get('MYSQL_PROXY_URL', '').trim();
32
+ const useProxy = Env.getBool('USE_MYSQL_PROXY', false);
33
+ if (useProxy || proxyUrl.length > 0) {
34
+ Logger.info('[Database] Selecting MySQL proxy adapter for Workers runtime', {
35
+ driver: cfg.driver,
36
+ useMySqlProxy: useProxy,
37
+ mysqlProxyUrlConfigured: proxyUrl.length > 0,
38
+ mysqlProxyUrl: proxyUrl,
39
+ });
40
+ return MySQLProxyAdapter.create(cfg);
41
+ }
42
+ return null;
43
+ };
44
+ const resolvePostgresProxyAdapter = (cfg) => {
45
+ if (cfg.driver !== 'postgresql')
46
+ return null;
47
+ const proxyUrl = Env.get('POSTGRES_PROXY_URL', '').trim();
48
+ const useProxy = Env.getBool('USE_POSTGRES_PROXY', false);
49
+ if (useProxy || proxyUrl.length > 0) {
50
+ Logger.info('[Database] Selecting PostgreSQL proxy adapter for Workers runtime', {
51
+ driver: cfg.driver,
52
+ usePostgresProxy: useProxy,
53
+ postgresProxyUrlConfigured: proxyUrl.length > 0,
54
+ postgresProxyUrl: proxyUrl,
55
+ });
56
+ return PostgreSQLProxyAdapter.create(cfg);
57
+ }
58
+ return null;
59
+ };
60
+ const ensureCloudflareSocketSupport = (cfg) => {
61
+ const isSocketDriver = cfg.driver === 'postgresql' || cfg.driver === 'mysql';
62
+ if (!isSocketDriver)
63
+ return;
64
+ if (Cloudflare.isCloudflareSocketsEnabled())
65
+ return;
66
+ Logger.warn('[Database] Cloudflare socket driver selected but sockets are disabled', {
67
+ driver: cfg.driver,
68
+ enableCloudflareSockets: Env.getBool('ENABLE_CLOUDFLARE_SOCKETS', false),
69
+ });
70
+ throw ErrorFactory.createConfigError('Cloudflare sockets are disabled. Set ENABLE_CLOUDFLARE_SOCKETS=true to use SQL adapters on Workers.');
71
+ };
72
+ const resolveWorkersAdapter = (cfg) => {
73
+ const workersEnv = Cloudflare.getWorkersEnv();
74
+ if (workersEnv === null)
75
+ return null;
76
+ Logger.info('[Database] Resolving adapter for Cloudflare Workers runtime', {
77
+ driver: cfg.driver,
78
+ useMySqlProxy: Env.getBool('USE_MYSQL_PROXY', false),
79
+ mysqlProxyUrlConfigured: Env.get('MYSQL_PROXY_URL', '').trim() !== '',
80
+ usePostgresProxy: Env.getBool('USE_POSTGRES_PROXY', false),
81
+ postgresProxyUrlConfigured: Env.get('POSTGRES_PROXY_URL', '').trim() !== '',
82
+ cloudflareSocketsEnabled: Cloudflare.isCloudflareSocketsEnabled(),
83
+ workersBindingsCount: Object.keys(workersEnv).length,
84
+ });
85
+ const mysqlProxy = resolveMySqlProxyAdapter(cfg);
86
+ if (mysqlProxy)
87
+ return mysqlProxy;
88
+ const postgresProxy = resolvePostgresProxyAdapter(cfg);
89
+ if (postgresProxy)
90
+ return postgresProxy;
91
+ ensureCloudflareSocketSupport(cfg);
92
+ return null;
93
+ };
24
94
  const createAdapter = (cfg) => {
95
+ const workersAdapter = resolveWorkersAdapter(cfg);
96
+ if (workersAdapter)
97
+ return workersAdapter;
25
98
  const registered = DatabaseAdapterRegistry.get(cfg.driver);
26
99
  if (registered !== undefined) {
27
100
  return registered(cfg);
@@ -47,15 +120,7 @@ const createAdapter = (cfg) => {
47
120
  */
48
121
  const initializeAdapters = (dbConfig) => {
49
122
  const writeAdapter = createAdapter(dbConfig);
50
- const readAdapters = [];
51
- if (dbConfig.readHosts !== undefined && dbConfig.readHosts.length > 0) {
52
- for (const host of dbConfig.readHosts) {
53
- readAdapters.push(createAdapter({ ...dbConfig, host }));
54
- }
55
- }
56
- else {
57
- readAdapters.push(writeAdapter);
58
- }
123
+ const readAdapters = [writeAdapter];
59
124
  return { writeAdapter, readAdapters };
60
125
  };
61
126
  /**
@@ -237,6 +302,9 @@ const createDbFacade = (input) => {
237
302
  query: queryHandlers.query,
238
303
  queryOne: queryHandlers.queryOne,
239
304
  execute: queryHandlers.execute,
305
+ raw(value) {
306
+ return { __raw: value };
307
+ },
240
308
  transaction: queryHandlers.transaction,
241
309
  table(name) {
242
310
  return QueryBuilder.create(name, db);
@@ -319,6 +387,9 @@ export const useEnsureDbConnected = async (config = undefined, connectionName =
319
387
  export function useDatabase(config, connection = 'default') {
320
388
  if (databaseInstances.has(connection) === false) {
321
389
  if (config === undefined) {
390
+ // Diagnostic logging
391
+ Logger.error('[DEBUG] Database instances keys:', Array.from(databaseInstances.keys()));
392
+ Logger.error('[DEBUG] Requesting connection:', connection);
322
393
  throw ErrorFactory.createConfigError(`Database connection '${connection}' is not registered. ` +
323
394
  `Call useDatabase(config, '${connection}') during startup to register it.`);
324
395
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DatabaseRuntimeRegistration.d.ts","sourceRoot":"","sources":["../../../src/orm/DatabaseRuntimeRegistration.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,mBAAmB,EAGpB,MAAM,cAAc,CAAC;AAwDtB;;;;;;;GAOG;AACH,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAWpF"}
1
+ {"version":3,"file":"DatabaseRuntimeRegistration.d.ts","sourceRoot":"","sources":["../../../src/orm/DatabaseRuntimeRegistration.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,mBAAmB,EAGpB,MAAM,cAAc,CAAC;AA0DtB;;;;;;;GAOG;AACH,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAYpF"}
@@ -55,6 +55,7 @@ const registerConnections = (connections) => {
55
55
  useDatabase(toOrmConfig(runtimeCfg), name);
56
56
  }
57
57
  };
58
+ import { Logger } from '../config/logger.js';
58
59
  /**
59
60
  * Register all connections from runtime config.
60
61
  *
@@ -69,5 +70,6 @@ export function registerDatabasesFromRuntimeConfig(config) {
69
70
  if (defaultCfg === undefined) {
70
71
  throw ErrorFactory.createConfigError(`Database default connection not configured: ${String(config.default ?? '')}`);
71
72
  }
73
+ Logger.info(`✓ Registering default database connection: ${config.default}`);
72
74
  useDatabase(toOrmConfig(defaultCfg), 'default');
73
75
  }
@@ -37,6 +37,7 @@ export interface IQueryBuilder {
37
37
  where(column: string, operator: string | number | boolean | null, value?: unknown): IQueryBuilder;
38
38
  andWhere(column: string, operator: string, value?: unknown): IQueryBuilder;
39
39
  orWhere(column: string, operator: string, value?: unknown): IQueryBuilder;
40
+ whereNull(column: string): IQueryBuilder;
40
41
  whereIn(column: string, values: unknown[]): IQueryBuilder;
41
42
  whereNotIn(column: string, values: unknown[]): IQueryBuilder;
42
43
  withTrashed(): IQueryBuilder;
@@ -1 +1 @@
1
- {"version":3,"file":"QueryBuilder.d.ts","sourceRoot":"","sources":["../../../src/orm/QueryBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"QueryBuilder.d.ts","sourceRoot":"","sources":["../../../src/orm/QueryBuilder.ts"],"names":[],"mappings":"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"}
@@ -36,6 +36,7 @@ const escapeIdentifier = (id, dialect) => {
36
36
  };
37
37
  const SAFE_IDENTIFIER_PATH = /^[A-Za-z_]\w*(?:\.[A-Za-z_]\w*)*$/;
38
38
  const SAFE_IDENTIFIER = /^[A-Za-z_]\w*$/;
39
+ const SAFE_FUNCTION_CALL = /^[A-Za-z_]\w*\(\)$/;
39
40
  const assertSafeIdentifierPath = (id, label) => {
40
41
  const trimmed = id.trim();
41
42
  if (trimmed.length === 0) {
@@ -54,6 +55,20 @@ const assertSafeIdentifier = (id, label) => {
54
55
  throw ErrorFactory.createDatabaseError(`Unsafe SQL identifier for ${label}`);
55
56
  }
56
57
  };
58
+ const isRawValue = (value) => typeof value === 'object' &&
59
+ value !== null &&
60
+ '__raw' in value &&
61
+ typeof value.__raw === 'string';
62
+ const assertSafeRawExpression = (raw) => {
63
+ const trimmed = raw.trim();
64
+ if (trimmed.length === 0) {
65
+ throw ErrorFactory.createDatabaseError('Empty raw SQL expression');
66
+ }
67
+ if (SAFE_IDENTIFIER_PATH.test(trimmed) || SAFE_FUNCTION_CALL.test(trimmed)) {
68
+ return trimmed;
69
+ }
70
+ throw ErrorFactory.createDatabaseError('Unsafe raw SQL expression');
71
+ };
57
72
  const normalizeOrderDirection = (direction) => {
58
73
  if (direction === undefined || direction === null)
59
74
  return 'ASC';
@@ -370,7 +385,9 @@ const compileInsert = (tableName, values, dialect) => {
370
385
  parameters.push(item[key]);
371
386
  }
372
387
  }
373
- const sql = `INSERT INTO ${escapeIdentifier(tableName, dialect)} (${colsSql}) VALUES ${placeholders}`;
388
+ const baseSql = `INSERT INTO ${escapeIdentifier(tableName, dialect)} (${colsSql}) VALUES ${placeholders}`;
389
+ const wantsReturning = dialect === 'postgresql' && items.length === 1;
390
+ const sql = wantsReturning ? `${baseSql} RETURNING id` : baseSql;
374
391
  return { sql, parameters };
375
392
  };
376
393
  const compileUpdate = (tableName, values, conditions, dialect) => {
@@ -384,8 +401,20 @@ const compileUpdate = (tableName, values, conditions, dialect) => {
384
401
  assertSafeIdentifierPath(tableName, 'table name');
385
402
  for (const key of keys)
386
403
  assertSafeIdentifier(key, 'update column');
387
- const setSql = keys.map((k) => `${escapeIdentifier(k, dialect)} = ?`).join(', ');
388
- const setParams = keys.map((k) => values[k]);
404
+ const setParts = [];
405
+ const setParams = [];
406
+ for (const key of keys) {
407
+ const value = values[key];
408
+ if (isRawValue(value)) {
409
+ const rawSql = assertSafeRawExpression(value.__raw);
410
+ setParts.push(`${escapeIdentifier(key, dialect)} = ${rawSql}`);
411
+ }
412
+ else {
413
+ setParts.push(`${escapeIdentifier(key, dialect)} = ?`);
414
+ setParams.push(value);
415
+ }
416
+ }
417
+ const setSql = setParts.join(', ');
389
418
  const where = compileWhere(conditions, dialect);
390
419
  const sql = `UPDATE ${escapeIdentifier(tableName, dialect)} SET ${setSql}${where.sql}`;
391
420
  return { sql, parameters: [...setParams, ...where.parameters] };
@@ -479,6 +508,7 @@ function attachWhereMethods(builder, state) {
479
508
  };
480
509
  builder.andWhere = (column, operator, value) => builder.where(column, operator, value);
481
510
  builder.orWhere = (column, operator, value) => builder.where(column, operator, value);
511
+ builder.whereNull = (column) => builder.where(column, 'IS', null);
482
512
  builder.whereIn = (column, values) => {
483
513
  builder.where(column, 'IN', values);
484
514
  return builder;
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaCompiler.d.ts","sourceRoot":"","sources":["../../../src/orm/SchemaCompiler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAoB,OAAO,EAAE,MAAM,aAAa,CAAC;AA4I7D,eAAO,MAAM,cAAc;oBAEnB,SAAS,UACL,OAAO,SACR;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GAC/B,OAAO,CAAC,IAAI,CAAC;kBAMI,SAAS,SAAS,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;EAM5D,CAAC"}
1
+ {"version":3,"file":"SchemaCompiler.d.ts","sourceRoot":"","sources":["../../../src/orm/SchemaCompiler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAoB,OAAO,EAAE,MAAM,aAAa,CAAC;AA+I7D,eAAO,MAAM,cAAc;oBAEnB,SAAS,UACL,OAAO,SACR;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GAC/B,OAAO,CAAC,IAAI,CAAC;kBAMI,SAAS,SAAS,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;EAM5D,CAAC"}
@@ -80,7 +80,7 @@ function getColumnTypeSql(driver, def) {
80
80
  return specialSql;
81
81
  return 'TEXT';
82
82
  }
83
- function getDefaultValueSql(table, def) {
83
+ function getDefaultValueSql(driver, table, def) {
84
84
  if (def.default === undefined)
85
85
  return null;
86
86
  const dv = def.default;
@@ -88,8 +88,11 @@ function getDefaultValueSql(table, def) {
88
88
  return 'DEFAULT NULL';
89
89
  if (typeof dv === 'number' && Number.isFinite(dv))
90
90
  return `DEFAULT ${dv}`;
91
- if (typeof dv === 'boolean')
91
+ if (typeof dv === 'boolean') {
92
+ if (driver === 'postgresql')
93
+ return `DEFAULT ${dv ? 'true' : 'false'}`;
92
94
  return `DEFAULT ${dv ? 1 : 0}`;
95
+ }
93
96
  if (typeof dv === 'string') {
94
97
  const escaped = dv.replaceAll("'", "''");
95
98
  return `DEFAULT '${escaped}'`;
@@ -113,7 +116,7 @@ function columnSql(driver, table, def) {
113
116
  parts.push('UNIQUE');
114
117
  if (isPrimary)
115
118
  parts.push('PRIMARY KEY');
116
- const defaultVal = getDefaultValueSql(table, def);
119
+ const defaultVal = getDefaultValueSql(driver, table, def);
117
120
  if (defaultVal !== null)
118
121
  parts.push(defaultVal);
119
122
  return parts.join(' ');
@@ -1 +1 @@
1
- {"version":3,"file":"D1RemoteAdapter.d.ts","sourceRoot":"","sources":["../../../../src/orm/adapters/D1RemoteAdapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAe,MAAM,sBAAsB,CAAC;AA+I1F,eAAO,MAAM,eAAe;oBACV,cAAc,GAAG,gBAAgB;EA+EjD,CAAC;AAEH,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"D1RemoteAdapter.d.ts","sourceRoot":"","sources":["../../../../src/orm/adapters/D1RemoteAdapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAe,MAAM,sBAAsB,CAAC;AA2J1F,eAAO,MAAM,eAAe;oBACV,cAAc,GAAG,gBAAgB;EA+EjD,CAAC;AAEH,eAAe,eAAe,CAAC"}
@@ -9,11 +9,23 @@ import { ErrorFactory } from '../../exceptions/ZintrustError.js';
9
9
  import { AdaptersEnum } from '../../migrations/enum/index.js';
10
10
  import { QueryBuilder } from '../QueryBuilder.js';
11
11
  import { SignedRequest } from '../../security/SignedRequest.js';
12
+ const resolveSigningPrefix = (baseUrl) => {
13
+ try {
14
+ const parsed = new URL(baseUrl);
15
+ const path = parsed.pathname.endsWith('/') ? parsed.pathname.slice(0, -1) : parsed.pathname;
16
+ if (path === '' || path === '/')
17
+ return undefined;
18
+ return path;
19
+ }
20
+ catch {
21
+ return undefined;
22
+ }
23
+ };
12
24
  const createRemoteConfig = () => {
13
25
  const settings = {
14
26
  baseUrl: Env.get('D1_REMOTE_URL'),
15
27
  keyId: Env.get('D1_REMOTE_KEY_ID'),
16
- secret: Env.get('D1_REMOTE_SECRET'),
28
+ secret: Env.get('D1_REMOTE_SECRET', Env.APP_KEY),
17
29
  mode: Env.get('D1_REMOTE_MODE', 'registry') ?? 'registry',
18
30
  timeoutMs: Env.getInt('ZT_PROXY_TIMEOUT_MS', Env.REQUEST_TIMEOUT),
19
31
  };
@@ -22,6 +34,7 @@ const createRemoteConfig = () => {
22
34
  keyId: settings.keyId,
23
35
  secret: settings.secret,
24
36
  timeoutMs: settings.timeoutMs,
37
+ signaturePathPrefixToStrip: resolveSigningPrefix(settings.baseUrl),
25
38
  missingUrlMessage: 'D1 remote proxy URL is missing (D1_REMOTE_URL)',
26
39
  missingCredentialsMessage: 'D1 remote signing credentials are missing (D1_REMOTE_KEY_ID / D1_REMOTE_SECRET)',
27
40
  messages: {
@@ -0,0 +1,3 @@
1
+ import type { IDatabaseAdapter } from '../DatabaseAdapter';
2
+ export declare function createMongoDBProxyAdapter(): IDatabaseAdapter;
3
+ //# sourceMappingURL=MongoDBProxyAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MongoDBProxyAdapter.d.ts","sourceRoot":"","sources":["../../../../src/orm/adapters/MongoDBProxyAdapter.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAe,MAAM,sBAAsB,CAAC;AA6D1E,wBAAgB,yBAAyB,IAAI,gBAAgB,CA4F5D"}
@@ -0,0 +1,128 @@
1
+ /* eslint-disable @typescript-eslint/require-await */
2
+ import { Env } from '../../config/env.js';
3
+ import { Logger } from '../../config/logger.js';
4
+ import { ErrorFactory } from '../../exceptions/ZintrustError.js';
5
+ import { ProxyCache } from '../adapters/ProxyCache.js';
6
+ import { ensureSignedSettings, isRecord, requestSignedProxy, } from '../adapters/SqlProxyAdapterUtils.js';
7
+ const normalizeRows = (value) => {
8
+ if (value === null)
9
+ return [];
10
+ if (Array.isArray(value))
11
+ return value;
12
+ return [value];
13
+ };
14
+ const extractResultPayload = (response) => {
15
+ if (!isRecord(response))
16
+ return response;
17
+ if ('result' in response)
18
+ return response['result'];
19
+ if ('rows' in response)
20
+ return response['rows'];
21
+ return response;
22
+ };
23
+ const getCacheKey = (collection, operation, args) => {
24
+ return `${collection}:${operation}:${JSON.stringify(args)}`;
25
+ };
26
+ const resolveProxyUrl = () => {
27
+ const url = Env.get('MONGODB_PROXY_URL', '');
28
+ if (typeof url === 'string' && url.trim() !== '')
29
+ return url;
30
+ const host = Env.get('MONGODB_PROXY_HOST', '127.0.0.1');
31
+ const port = Env.getInt('MONGODB_PROXY_PORT', 8792);
32
+ return `http://${host}:${port}`;
33
+ };
34
+ const buildProxySettings = () => {
35
+ const baseUrl = resolveProxyUrl();
36
+ const keyId = Env.get('MONGODB_PROXY_KEY_ID', '');
37
+ const secret = Env.get('MONGODB_PROXY_SECRET', '');
38
+ const timeoutMs = Env.getInt('MONGODB_PROXY_TIMEOUT_MS', 30000);
39
+ return { baseUrl, keyId, secret, timeoutMs };
40
+ };
41
+ const buildSignedProxyConfig = (settings) => ({
42
+ settings,
43
+ missingUrlMessage: 'MongoDB proxy URL is missing',
44
+ missingCredentialsMessage: 'MongoDB proxy signing credentials are missing',
45
+ messages: {
46
+ unauthorized: 'MongoDB proxy unauthorized',
47
+ forbidden: 'MongoDB proxy forbidden',
48
+ rateLimited: 'MongoDB proxy rate limited',
49
+ rejected: 'MongoDB proxy rejected',
50
+ error: 'MongoDB proxy error',
51
+ timedOut: 'MongoDB proxy timed out',
52
+ },
53
+ });
54
+ const MONGODB_OPERATION_PATH = '/zin/mongodb/operation';
55
+ export function createMongoDBProxyAdapter() {
56
+ let connected = false;
57
+ const cache = ProxyCache.create();
58
+ const settings = buildProxySettings();
59
+ return {
60
+ async connect() {
61
+ ensureSignedSettings(buildSignedProxyConfig(settings));
62
+ Logger.info(`Connecting to MongoDB via proxy: ${settings.baseUrl}`);
63
+ connected = true;
64
+ },
65
+ async disconnect() {
66
+ connected = false;
67
+ cache.clear();
68
+ Logger.info('Disconnected from MongoDB proxy');
69
+ },
70
+ async query(_sql, _parameters) {
71
+ if (!connected) {
72
+ throw ErrorFactory.createConnectionError('Not connected to MongoDB proxy');
73
+ }
74
+ // Parse MongoDB-like query (simple implementation)
75
+ // Expected format: collection.operation({...})
76
+ const pattern = /^(\w+)\.(\w+)\((.+)\$/;
77
+ const match = pattern.exec(_sql);
78
+ if (!match) {
79
+ throw ErrorFactory.createGeneralError('Invalid MongoDB query format');
80
+ }
81
+ const [, collection, operation, argsStr] = match;
82
+ const args = JSON.parse(argsStr);
83
+ const cacheKey = getCacheKey(collection, operation, args);
84
+ const cached = cache.get(cacheKey);
85
+ if (cached)
86
+ return cached;
87
+ const response = await requestSignedProxy(buildSignedProxyConfig({
88
+ ...settings,
89
+ signaturePathPrefixToStrip: MONGODB_OPERATION_PATH,
90
+ }), MONGODB_OPERATION_PATH, { collection, operation, args });
91
+ const result = extractResultPayload(response);
92
+ const rows = normalizeRows(result);
93
+ const queryResult = {
94
+ rows,
95
+ rowCount: rows.length,
96
+ };
97
+ cache.set(cacheKey, queryResult);
98
+ return queryResult;
99
+ },
100
+ async queryOne(sql, parameters) {
101
+ const result = await this.query(sql, parameters);
102
+ return result.rows[0] ?? null;
103
+ },
104
+ async ping() {
105
+ if (!connected) {
106
+ throw ErrorFactory.createConnectionError('Not connected to MongoDB proxy');
107
+ }
108
+ },
109
+ async transaction(callback) {
110
+ // MongoDB proxy doesn't support traditional transactions via HTTP
111
+ Logger.warn('MongoDB proxy adapter does not support transactions');
112
+ return callback(this);
113
+ },
114
+ async rawQuery(sql, parameters) {
115
+ const result = await this.query(sql, parameters ?? []);
116
+ return result.rows;
117
+ },
118
+ getType() {
119
+ return 'mongodb-proxy';
120
+ },
121
+ isConnected() {
122
+ return connected;
123
+ },
124
+ getPlaceholder(index) {
125
+ return `$${index}`;
126
+ },
127
+ };
128
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * MySQL Proxy Adapter (HTTP)
3
+ *
4
+ * Used in Cloudflare Workers when MYSQL_PROXY_URL is configured.
5
+ */
6
+ import type { DatabaseConfig, IDatabaseAdapter } from '../DatabaseAdapter';
7
+ export declare const MySQLProxyAdapter: Readonly<{
8
+ create(_config: DatabaseConfig): IDatabaseAdapter;
9
+ }>;
10
+ export default MySQLProxyAdapter;
11
+ //# sourceMappingURL=MySQLProxyAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MySQLProxyAdapter.d.ts","sourceRoot":"","sources":["../../../../src/orm/adapters/MySQLProxyAdapter.ts"],"names":[],"mappings":"AACA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAe,MAAM,sBAAsB,CAAC;AAuF1F,eAAO,MAAM,iBAAiB;oBACZ,cAAc,GAAG,gBAAgB;EAqFjD,CAAC;AAEH,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,143 @@
1
+ /* eslint-disable @typescript-eslint/require-await */
2
+ /**
3
+ * MySQL Proxy Adapter (HTTP)
4
+ *
5
+ * Used in Cloudflare Workers when MYSQL_PROXY_URL is configured.
6
+ */
7
+ import { Env } from '../../config/env.js';
8
+ import { Logger } from '../../config/logger.js';
9
+ import { ErrorFactory } from '../../exceptions/ZintrustError.js';
10
+ import { AdaptersEnum } from '../../migrations/enum/index.js';
11
+ import { QueryBuilder } from '../QueryBuilder.js';
12
+ import { ensureSignedSettings, isRecord, requestSignedProxy, } from '../adapters/SqlProxyAdapterUtils.js';
13
+ const buildProxySettings = () => {
14
+ const baseUrl = Env.MYSQL_PROXY_URL;
15
+ const keyId = Env.MYSQL_PROXY_KEY_ID ?? '';
16
+ const secret = Env.MYSQL_PROXY_SECRET ?? '';
17
+ const timeoutMs = Env.MYSQL_PROXY_TIMEOUT_MS;
18
+ return { baseUrl, keyId, secret, timeoutMs };
19
+ };
20
+ const buildSignedProxyConfig = (settings) => ({
21
+ settings,
22
+ missingUrlMessage: 'MySQL proxy URL is missing (MYSQL_PROXY_URL)',
23
+ missingCredentialsMessage: 'MySQL proxy signing credentials are missing (MYSQL_PROXY_KEY_ID / MYSQL_PROXY_SECRET)',
24
+ messages: {
25
+ unauthorized: 'MySQL proxy unauthorized',
26
+ forbidden: 'MySQL proxy forbidden',
27
+ rateLimited: 'MySQL proxy rate limited',
28
+ rejected: 'MySQL proxy rejected request',
29
+ error: 'MySQL proxy error',
30
+ timedOut: 'MySQL proxy request timed out',
31
+ },
32
+ });
33
+ const isQueryResponse = (value) => isRecord(value) && Array.isArray(value['rows']) && typeof value['rowCount'] === 'number';
34
+ const isQueryOneResponse = (value) => isRecord(value) && 'row' in value;
35
+ const getExecMeta = (value) => {
36
+ if (!isRecord(value) || typeof value['ok'] !== 'boolean')
37
+ return { changes: 0 };
38
+ const meta = value['meta'];
39
+ if (!isRecord(meta))
40
+ return { changes: 0 };
41
+ const changes = typeof meta['changes'] === 'number' ? meta['changes'] : 0;
42
+ const lastRowId = meta['lastRowId'];
43
+ return { changes, lastRowId: lastRowId };
44
+ };
45
+ const requestProxy = async (settings, path, payload) => {
46
+ const signedProxyConfig = buildSignedProxyConfig(settings);
47
+ try {
48
+ return await requestSignedProxy(signedProxyConfig, path, payload);
49
+ }
50
+ catch (error) {
51
+ Logger.error('[MySQLProxyAdapter] Proxy request failed', {
52
+ path,
53
+ baseUrl: settings.baseUrl,
54
+ timeoutMs: settings.timeoutMs,
55
+ hasKeyId: (settings.keyId ?? '').trim() !== '',
56
+ hasSecret: (settings.secret ?? '').trim() !== '',
57
+ error: error instanceof Error ? error.message : String(error),
58
+ });
59
+ throw error;
60
+ }
61
+ };
62
+ export const MySQLProxyAdapter = Object.freeze({
63
+ create(_config) {
64
+ let connected = false;
65
+ const settings = buildProxySettings();
66
+ Logger.info('[MySQLProxyAdapter] Created with runtime settings', {
67
+ baseUrl: settings.baseUrl,
68
+ timeoutMs: settings.timeoutMs,
69
+ hasKeyId: (settings.keyId ?? '').trim() !== '',
70
+ hasSecret: (settings.secret ?? '').trim() !== '',
71
+ });
72
+ return {
73
+ async connect() {
74
+ ensureSignedSettings(buildSignedProxyConfig(settings));
75
+ connected = true;
76
+ },
77
+ async disconnect() {
78
+ connected = false;
79
+ },
80
+ async query(sql, parameters) {
81
+ if (!connected)
82
+ throw ErrorFactory.createConnectionError('Database not connected');
83
+ const out = await requestProxy(settings, '/zin/mysql/query', {
84
+ sql,
85
+ params: parameters,
86
+ });
87
+ if (isQueryResponse(out)) {
88
+ return {
89
+ rows: out.rows,
90
+ rowCount: out.rowCount,
91
+ lastInsertId: out.lastInsertId,
92
+ };
93
+ }
94
+ if (isQueryOneResponse(out)) {
95
+ const row = out.row;
96
+ return { rows: row ? [row] : [], rowCount: row ? 1 : 0 };
97
+ }
98
+ const meta = getExecMeta(out);
99
+ return { rows: [], rowCount: meta.changes, lastInsertId: meta.lastRowId };
100
+ },
101
+ async queryOne(sql, parameters) {
102
+ if (!connected)
103
+ throw ErrorFactory.createConnectionError('Database not connected');
104
+ const out = await requestProxy(settings, '/zin/mysql/queryOne', {
105
+ sql,
106
+ params: parameters,
107
+ });
108
+ return out.row ?? null;
109
+ },
110
+ async ping() {
111
+ if (!connected)
112
+ throw ErrorFactory.createConnectionError('Database not connected');
113
+ await this.queryOne(QueryBuilder.create('').select('1').toSQL(), []);
114
+ },
115
+ async transaction(callback) {
116
+ if (!connected)
117
+ throw ErrorFactory.createConnectionError('Database not connected');
118
+ try {
119
+ return await callback(this);
120
+ }
121
+ catch (error) {
122
+ throw ErrorFactory.createTryCatchError('MySQL proxy transaction failed', error);
123
+ }
124
+ },
125
+ async rawQuery(sql, parameters = []) {
126
+ if (!connected)
127
+ throw ErrorFactory.createConnectionError('Database not connected');
128
+ const out = await this.query(sql, parameters);
129
+ return out.rows;
130
+ },
131
+ getType() {
132
+ return AdaptersEnum.mysql;
133
+ },
134
+ isConnected() {
135
+ return connected;
136
+ },
137
+ getPlaceholder(_index) {
138
+ return '?';
139
+ },
140
+ };
141
+ },
142
+ });
143
+ export default MySQLProxyAdapter;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * PostgreSQL Proxy Adapter (HTTP)
3
+ *
4
+ * Used in Cloudflare Workers when POSTGRES_PROXY_URL is configured.
5
+ */
6
+ import type { DatabaseConfig, IDatabaseAdapter } from '../DatabaseAdapter';
7
+ export declare const PostgreSQLProxyAdapter: Readonly<{
8
+ create(_config: DatabaseConfig): IDatabaseAdapter;
9
+ }>;
10
+ export default PostgreSQLProxyAdapter;
11
+ //# sourceMappingURL=PostgreSQLProxyAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PostgreSQLProxyAdapter.d.ts","sourceRoot":"","sources":["../../../../src/orm/adapters/PostgreSQLProxyAdapter.ts"],"names":[],"mappings":"AACA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAe,MAAM,sBAAsB,CAAC;AAkH1F,eAAO,MAAM,sBAAsB;oBACjB,cAAc,GAAG,gBAAgB;EA+DjD,CAAC;AAEH,eAAe,sBAAsB,CAAC"}