@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,37 +1,173 @@
1
1
  import { ErrorFactory } from '../../exceptions/ZintrustError.js';
2
2
  import { readFile } from '../../node-singletons/fs.js';
3
3
  import { dirname, join } from '../../node-singletons/path.js';
4
- import { fileURLToPath } from '../../node-singletons/url.js';
4
+ import { fileURLToPath, pathToFileURL } from '../../node-singletons/url.js';
5
5
  import { Env } from '../../config/env.js';
6
6
  import { interpolate } from './template-utils.js';
7
+ const looksLikeHtml = (value) => /<\s*html\b|<!doctype\b|<\s*body\b/i.test(value);
8
+ const builtinTemplateLoaders = Object.freeze({
9
+ 'auth-password-reset': async () => import('./templates/auth-password-reset.js'),
10
+ 'auth-welcome': async () => import('./templates/auth-welcome.js'),
11
+ general: async () => import('./templates/general.js'),
12
+ 'job-completed': async () => import('./templates/job-completed.js'),
13
+ 'notifications-new-comment': async () => import('./templates/notifications-new-comment.js'),
14
+ 'password-reset': async () => import('./templates/password-reset.js'),
15
+ 'performance-report': async () => import('./templates/performance-report.js'),
16
+ welcome: async () => import('./templates/welcome.js'),
17
+ 'worker-alert': async () => import('./templates/worker-alert.js'),
18
+ });
19
+ const getSafeCwd = () => {
20
+ try {
21
+ if (typeof process !== 'undefined' && typeof process.cwd === 'function') {
22
+ const cwd = process.cwd();
23
+ if (typeof cwd === 'string' && cwd.trim() !== '')
24
+ return cwd;
25
+ }
26
+ }
27
+ catch {
28
+ return '';
29
+ }
30
+ return '';
31
+ };
7
32
  /**
8
- * Load and render email template with variable substitution
33
+ * Get the base directory for templates.
34
+ * In Cloudflare Workers, import.meta.url may be undefined, so we handle that case.
9
35
  */
10
- export async function loadTemplate(templateName, variables = {}) {
36
+ function getBaseDir() {
11
37
  try {
12
- const baseDir = dirname(fileURLToPath(import.meta.url));
13
- const isPath = templateName.includes('/') || templateName.endsWith('.html');
14
- let templatePath;
15
- if (isPath) {
16
- if (templateName.startsWith('/')) {
17
- templatePath = templateName;
18
- }
19
- else {
20
- templatePath = join(process.cwd(), templateName);
21
- }
38
+ // Check if import.meta.url is available (Node.js, Deno, modern bundlers)
39
+ if (typeof import.meta.url === 'string' && import.meta.url.trim() !== '') {
40
+ return dirname(fileURLToPath(import.meta.url));
41
+ }
42
+ }
43
+ catch {
44
+ // Fallback for environments where fileURLToPath fails
45
+ }
46
+ // Fallback: use cwd if available
47
+ const cwd = getSafeCwd();
48
+ if (cwd.trim() !== '') {
49
+ return join(cwd, 'src', 'tools', 'mail');
50
+ }
51
+ // Last resort: return a relative path that might work
52
+ return './src/tools/mail';
53
+ }
54
+ function resolveTemplatePath(templateName) {
55
+ const baseDir = getBaseDir();
56
+ const isPath = templateName.includes('/') || templateName.endsWith('.html');
57
+ if (!isPath) {
58
+ return join(baseDir, 'templates', `${templateName}.html`);
59
+ }
60
+ if (templateName.startsWith('/')) {
61
+ return templateName;
62
+ }
63
+ const cwd = getSafeCwd();
64
+ return cwd.trim() === '' ? join(baseDir, templateName) : join(cwd, templateName);
65
+ }
66
+ function normalizeTemplateName(templateName) {
67
+ return {
68
+ normalizedTemplate: templateName.endsWith('.html') ? templateName : `${templateName}.html`,
69
+ normalizedModuleName: templateName.endsWith('.html') ? templateName.slice(0, -5) : templateName,
70
+ };
71
+ }
72
+ async function tryBuiltinLoader(normalizedModuleName) {
73
+ const builtinLoader = builtinTemplateLoaders[normalizedModuleName];
74
+ if (builtinLoader === undefined) {
75
+ return null;
76
+ }
77
+ try {
78
+ const imported = (await builtinLoader());
79
+ if (typeof imported.default === 'string' && imported.default.trim() !== '') {
80
+ return imported.default;
81
+ }
82
+ }
83
+ catch {
84
+ // Fall through to filesystem/module path probes.
85
+ }
86
+ return null;
87
+ }
88
+ function getFileCandidates(templatePath, normalizedTemplate) {
89
+ const cwd = getSafeCwd();
90
+ const baseDir = getBaseDir();
91
+ return [
92
+ templatePath,
93
+ join(baseDir, 'templates', normalizedTemplate),
94
+ join(cwd, 'dist', 'src', 'tools', 'mail', 'templates', normalizedTemplate),
95
+ join(cwd, 'src', 'tools', 'mail', 'templates', normalizedTemplate),
96
+ ].filter((path, index, arr) => path.trim() !== '' && arr.indexOf(path) === index);
97
+ }
98
+ function getModuleCandidates(normalizedModuleName) {
99
+ const cwd = getSafeCwd();
100
+ const baseDir = getBaseDir();
101
+ return [
102
+ join(cwd, 'dist', 'src', 'tools', 'mail', 'templates', `${normalizedModuleName}.js`),
103
+ join(cwd, 'src', 'tools', 'mail', 'templates', `${normalizedModuleName}.ts`),
104
+ join(baseDir, 'templates', `${normalizedModuleName}.js`),
105
+ join(baseDir, 'templates', `${normalizedModuleName}.ts`),
106
+ ].filter((path, index, arr) => path.trim() !== '' && arr.indexOf(path) === index);
107
+ }
108
+ async function tryReadFromCandidates(candidates) {
109
+ let lastError;
110
+ for (const candidate of candidates) {
111
+ try {
112
+ // eslint-disable-next-line no-await-in-loop
113
+ const content = await readFile(candidate, 'utf-8');
114
+ return { content };
22
115
  }
23
- else {
24
- templatePath = join(baseDir, 'templates', `${templateName}.html`);
116
+ catch (error) {
117
+ lastError = error;
25
118
  }
26
- let template;
119
+ }
120
+ return { error: lastError };
121
+ }
122
+ async function tryImportFromCandidates(moduleCandidates) {
123
+ let lastError;
124
+ for (const modulePath of moduleCandidates) {
27
125
  try {
28
- template = await readFile(templatePath, 'utf-8');
126
+ // eslint-disable-next-line no-await-in-loop
127
+ const imported = (await import(pathToFileURL(modulePath).href));
128
+ if (typeof imported.default === 'string' && imported.default.trim() !== '') {
129
+ return { content: imported.default };
130
+ }
29
131
  }
30
- catch {
31
- // Fallback to built-in directory if the supplied name looked like a file but wasn't found
32
- const fallbackPath = join(baseDir, 'templates', templateName.endsWith('.html') ? templateName : `${templateName}.html`);
33
- template = await readFile(fallbackPath, 'utf-8');
132
+ catch (error) {
133
+ lastError = error;
34
134
  }
135
+ }
136
+ return { error: lastError };
137
+ }
138
+ async function loadTemplateContent(templateName) {
139
+ const templatePath = resolveTemplatePath(templateName);
140
+ const { normalizedTemplate, normalizedModuleName } = normalizeTemplateName(templateName);
141
+ // Try builtin loader first
142
+ const builtinResult = await tryBuiltinLoader(normalizedModuleName);
143
+ if (builtinResult !== null && typeof builtinResult === 'string') {
144
+ return builtinResult;
145
+ }
146
+ // Try file system candidates
147
+ const fileCandidates = getFileCandidates(templatePath, normalizedTemplate);
148
+ const fileResult = await tryReadFromCandidates(fileCandidates);
149
+ if (fileResult.content !== undefined) {
150
+ return fileResult.content;
151
+ }
152
+ // Try module candidates
153
+ const moduleCandidates = getModuleCandidates(normalizedModuleName);
154
+ const moduleResult = await tryImportFromCandidates(moduleCandidates);
155
+ if (moduleResult.content !== undefined) {
156
+ return moduleResult.content;
157
+ }
158
+ // Extract last error from failed attempts
159
+ const lastError = fileResult.error ?? moduleResult.error;
160
+ throw ErrorFactory.createConfigError(`Failed to load template from known paths: ${[...fileCandidates, ...moduleCandidates].join(', ')}` +
161
+ (lastError === undefined ? '' : `. Last error: ${String(lastError)}`));
162
+ }
163
+ /**
164
+ * Load and render email template with variable substitution
165
+ */
166
+ export async function loadTemplate(templateName, variables = {}) {
167
+ try {
168
+ const template = looksLikeHtml(templateName)
169
+ ? templateName
170
+ : await loadTemplateContent(templateName);
35
171
  // Replace variables using shared interpolate util
36
172
  const mergedVars = {
37
173
  year: new Date().getFullYear().toString(),
@@ -53,21 +189,16 @@ export async function loadTemplate(templateName, variables = {}) {
53
189
  * Render conditional blocks {{#if_condition}}...{{/if_condition}}
54
190
  */
55
191
  function renderConditionals(template, variables) {
56
- const conditionalRegex = /{{#if_(\w+)}}(.+?){{\/if_\1}}/gs;
57
- return template.replaceAll(conditionalRegex, (_fullMatch, condition, content) => {
192
+ return renderBlockTags(template, 'if', (condition, content) => {
58
193
  const value = variables[condition];
59
- if (value === true || value === 'true') {
60
- return content;
61
- }
62
- return '';
194
+ return value === true || value === 'true' ? content : '';
63
195
  });
64
196
  }
65
197
  /**
66
198
  * Render loop blocks {{#each_array}}...{{/each_array}}
67
199
  */
68
200
  function renderLoops(template, variables) {
69
- const loopRegex = /{{#each_(\w+)}}(.+?){{\/each_\1}}/gs;
70
- return template.replaceAll(loopRegex, (_fullMatch, arrayName, content) => {
201
+ return renderBlockTags(template, 'each', (arrayName, content) => {
71
202
  const array = variables[arrayName];
72
203
  if (!Array.isArray(array)) {
73
204
  return '';
@@ -86,6 +217,43 @@ function renderLoops(template, variables) {
86
217
  .join('');
87
218
  });
88
219
  }
220
+ const isSafeBlockName = (value) => /^\w+$/.test(value);
221
+ const renderBlockTags = (template, tagPrefix, resolver) => {
222
+ const openPrefix = `{{#${tagPrefix}_`;
223
+ let cursor = 0;
224
+ let output = '';
225
+ while (cursor < template.length) {
226
+ const openIndex = template.indexOf(openPrefix, cursor);
227
+ if (openIndex < 0) {
228
+ output += template.slice(cursor);
229
+ break;
230
+ }
231
+ output += template.slice(cursor, openIndex);
232
+ const nameStart = openIndex + openPrefix.length;
233
+ const openEnd = template.indexOf('}}', nameStart);
234
+ if (openEnd < 0) {
235
+ output += template.slice(openIndex);
236
+ break;
237
+ }
238
+ const name = template.slice(nameStart, openEnd);
239
+ if (!isSafeBlockName(name)) {
240
+ output += template.slice(openIndex, openEnd + 2);
241
+ cursor = openEnd + 2;
242
+ continue;
243
+ }
244
+ const closeToken = `{{/${tagPrefix}_${name}}}`;
245
+ const contentStart = openEnd + 2;
246
+ const closeIndex = template.indexOf(closeToken, contentStart);
247
+ if (closeIndex < 0) {
248
+ output += template.slice(openIndex);
249
+ break;
250
+ }
251
+ const content = template.slice(contentStart, closeIndex);
252
+ output += resolver(name, content);
253
+ cursor = closeIndex + closeToken.length;
254
+ }
255
+ return output;
256
+ };
89
257
  /**
90
258
  * Get list of available templates
91
259
  */
@@ -0,0 +1,3 @@
1
+ declare const _default: "<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n <title>Password Reset Request</title>\n <style>\n body {\n margin: 0;\n padding: 0;\n background-color: #0b1220;\n color: #e2e8f0;\n font-family:\n -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n }\n\n .email-container {\n max-width: 600px;\n margin: 40px auto;\n background-color: #0f172a;\n border: 1px solid #334155;\n border-radius: 12px;\n overflow: hidden;\n }\n\n .header {\n padding: 40px 40px 30px;\n text-align: center;\n background: linear-gradient(180deg, rgba(239, 68, 68, 0.15), rgba(220, 38, 38, 0.08));\n border-bottom: 1px solid #334155;\n }\n\n .icon {\n width: 48px;\n height: 48px;\n margin: 0 auto 20px;\n border-radius: 12px;\n border: 1px solid rgba(239, 68, 68, 0.35);\n background: linear-gradient(180deg, rgba(239, 68, 68, 0.2), rgba(220, 38, 38, 0.1));\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n\n .title {\n margin: 0 0 8px;\n font-size: 28px;\n font-weight: 700;\n color: #e2e8f0;\n line-height: 1.2;\n }\n\n .subtitle {\n margin: 0;\n font-size: 16px;\n color: #e2e8f0;\n line-height: 1.5;\n }\n\n .content {\n padding: 40px;\n }\n\n .greeting {\n margin: 0 0 24px;\n font-size: 15px;\n color: #f1f5f9;\n line-height: 1.6;\n }\n\n .message {\n margin: 0 0 24px;\n font-size: 15px;\n color: #f1f5f9;\n line-height: 1.6;\n }\n\n .button-container {\n margin-bottom: 30px;\n text-align: center;\n }\n\n .reset-button {\n display: inline-block;\n padding: 14px 32px;\n background: linear-gradient(135deg, #ef4444, #dc2626);\n color: #ffffff;\n text-decoration: none;\n border-radius: 8px;\n font-weight: 600;\n font-size: 15px;\n border: 1px solid rgba(217, 82, 82, 0.8);\n }\n\n .security-notice {\n padding: 16px;\n background: rgba(251, 191, 36, 0.08);\n border-left: 3px solid #fbbf24;\n border-radius: 6px;\n margin-bottom: 30px;\n }\n\n .security-notice p {\n margin: 0;\n font-size: 14px;\n color: #e2e8f0;\n line-height: 1.6;\n }\n\n .security-notice strong {\n color: #fbbf24;\n }\n\n .expiry {\n margin: 0 0 16px;\n font-size: 14px;\n color: #e2e8f0;\n line-height: 1.6;\n }\n\n .expiry strong {\n color: #e2e8f0;\n }\n\n .alternative-link {\n margin: 0;\n font-size: 13px;\n color: #e2e8f0;\n line-height: 1.6;\n }\n\n .alternative-link a {\n color: #bae6fd;\n text-decoration: none;\n word-break: break-all;\n }\n\n .divider {\n margin: 30px 0;\n border-top: 1px solid #334155;\n }\n\n .support {\n margin: 0;\n font-size: 14px;\n color: #e2e8f0;\n line-height: 1.6;\n }\n\n .support a {\n color: #bae6fd;\n text-decoration: none;\n }\n\n .footer {\n padding: 30px 40px;\n background: rgba(15, 23, 42, 0.65);\n border-top: 1px solid #334155;\n text-align: center;\n }\n\n .footer p {\n margin: 0;\n font-size: 12px;\n color: #64748b;\n }\n </style>\n </head>\n <body>\n <div class=\"email-container\">\n <!-- Header -->\n <div class=\"header\">\n <div class=\"icon\">\n <span style=\"font-size: 24px\">\uD83D\uDD12</span>\n </div>\n <h1 class=\"title\">Password Reset Request</h1>\n <p class=\"subtitle\">We received a request to reset your password</p>\n </div>\n\n <!-- Main Content -->\n <div class=\"content\">\n <p class=\"greeting\">Hi <strong style=\"color: #e2e8f0\">{{name}}</strong>,</p>\n\n <p class=\"message\">\n Someone requested a password reset for your {{APP_NAME}} account (<strong\n style=\"color: #e2e8f0\"\n >{{email}}</strong\n >). If this was you, click the button below to reset your password:\n </p>\n\n <!-- CTA Button -->\n <div class=\"button-container\">\n <a href=\"{{reset_url}}\" class=\"reset-button\">Reset Password</a>\n </div>\n\n <!-- Security Notice -->\n <div class=\"security-notice\">\n <p>\n <strong>\u26A0 Security Notice</strong><br />\n If you didn't request this password reset, please ignore this email. Your password will\n remain unchanged.\n </p>\n </div>\n\n <p class=\"expiry\">\n For security reasons, this link will expire in <strong>{{expiryMinutes}} minutes</strong>.\n </p>\n\n <!-- Alternative Link -->\n <p class=\"alternative-link\">\n If the button above doesn't work, copy and paste this link into your browser:<br />\n <a href=\"{{reset_url}}\">{{reset_url}}</a>\n </p>\n\n <!-- Divider -->\n <div class=\"divider\"></div>\n\n <p class=\"support\">\n If you continue to have problems, please contact our\n <a href=\"{{support_url}}\">support team</a>.\n </p>\n </div>\n\n <!-- Footer -->\n <div class=\"footer\">\n <p>&copy; {{year}} {{APP_NAME}}. All rights reserved.</p>\n </div>\n </div>\n </body>\n</html>";
2
+ export default _default;
3
+ //# sourceMappingURL=auth-password-reset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-password-reset.d.ts","sourceRoot":"","sources":["../../../../../src/tools/mail/templates/auth-password-reset.ts"],"names":[],"mappings":";AAAA,wBAsOS"}
@@ -0,0 +1,231 @@
1
+ export default `<!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <meta http-equiv="X-UA-Compatible" content="IE=edge" />
7
+ <title>Password Reset Request</title>
8
+ <style>
9
+ body {
10
+ margin: 0;
11
+ padding: 0;
12
+ background-color: #0b1220;
13
+ color: #e2e8f0;
14
+ font-family:
15
+ -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
16
+ }
17
+
18
+ .email-container {
19
+ max-width: 600px;
20
+ margin: 40px auto;
21
+ background-color: #0f172a;
22
+ border: 1px solid #334155;
23
+ border-radius: 12px;
24
+ overflow: hidden;
25
+ }
26
+
27
+ .header {
28
+ padding: 40px 40px 30px;
29
+ text-align: center;
30
+ background: linear-gradient(180deg, rgba(239, 68, 68, 0.15), rgba(220, 38, 38, 0.08));
31
+ border-bottom: 1px solid #334155;
32
+ }
33
+
34
+ .icon {
35
+ width: 48px;
36
+ height: 48px;
37
+ margin: 0 auto 20px;
38
+ border-radius: 12px;
39
+ border: 1px solid rgba(239, 68, 68, 0.35);
40
+ background: linear-gradient(180deg, rgba(239, 68, 68, 0.2), rgba(220, 38, 38, 0.1));
41
+ display: inline-flex;
42
+ align-items: center;
43
+ justify-content: center;
44
+ }
45
+
46
+ .title {
47
+ margin: 0 0 8px;
48
+ font-size: 28px;
49
+ font-weight: 700;
50
+ color: #e2e8f0;
51
+ line-height: 1.2;
52
+ }
53
+
54
+ .subtitle {
55
+ margin: 0;
56
+ font-size: 16px;
57
+ color: #e2e8f0;
58
+ line-height: 1.5;
59
+ }
60
+
61
+ .content {
62
+ padding: 40px;
63
+ }
64
+
65
+ .greeting {
66
+ margin: 0 0 24px;
67
+ font-size: 15px;
68
+ color: #f1f5f9;
69
+ line-height: 1.6;
70
+ }
71
+
72
+ .message {
73
+ margin: 0 0 24px;
74
+ font-size: 15px;
75
+ color: #f1f5f9;
76
+ line-height: 1.6;
77
+ }
78
+
79
+ .button-container {
80
+ margin-bottom: 30px;
81
+ text-align: center;
82
+ }
83
+
84
+ .reset-button {
85
+ display: inline-block;
86
+ padding: 14px 32px;
87
+ background: linear-gradient(135deg, #ef4444, #dc2626);
88
+ color: #ffffff;
89
+ text-decoration: none;
90
+ border-radius: 8px;
91
+ font-weight: 600;
92
+ font-size: 15px;
93
+ border: 1px solid rgba(217, 82, 82, 0.8);
94
+ }
95
+
96
+ .security-notice {
97
+ padding: 16px;
98
+ background: rgba(251, 191, 36, 0.08);
99
+ border-left: 3px solid #fbbf24;
100
+ border-radius: 6px;
101
+ margin-bottom: 30px;
102
+ }
103
+
104
+ .security-notice p {
105
+ margin: 0;
106
+ font-size: 14px;
107
+ color: #e2e8f0;
108
+ line-height: 1.6;
109
+ }
110
+
111
+ .security-notice strong {
112
+ color: #fbbf24;
113
+ }
114
+
115
+ .expiry {
116
+ margin: 0 0 16px;
117
+ font-size: 14px;
118
+ color: #e2e8f0;
119
+ line-height: 1.6;
120
+ }
121
+
122
+ .expiry strong {
123
+ color: #e2e8f0;
124
+ }
125
+
126
+ .alternative-link {
127
+ margin: 0;
128
+ font-size: 13px;
129
+ color: #e2e8f0;
130
+ line-height: 1.6;
131
+ }
132
+
133
+ .alternative-link a {
134
+ color: #bae6fd;
135
+ text-decoration: none;
136
+ word-break: break-all;
137
+ }
138
+
139
+ .divider {
140
+ margin: 30px 0;
141
+ border-top: 1px solid #334155;
142
+ }
143
+
144
+ .support {
145
+ margin: 0;
146
+ font-size: 14px;
147
+ color: #e2e8f0;
148
+ line-height: 1.6;
149
+ }
150
+
151
+ .support a {
152
+ color: #bae6fd;
153
+ text-decoration: none;
154
+ }
155
+
156
+ .footer {
157
+ padding: 30px 40px;
158
+ background: rgba(15, 23, 42, 0.65);
159
+ border-top: 1px solid #334155;
160
+ text-align: center;
161
+ }
162
+
163
+ .footer p {
164
+ margin: 0;
165
+ font-size: 12px;
166
+ color: #64748b;
167
+ }
168
+ </style>
169
+ </head>
170
+ <body>
171
+ <div class="email-container">
172
+ <!-- Header -->
173
+ <div class="header">
174
+ <div class="icon">
175
+ <span style="font-size: 24px">🔒</span>
176
+ </div>
177
+ <h1 class="title">Password Reset Request</h1>
178
+ <p class="subtitle">We received a request to reset your password</p>
179
+ </div>
180
+
181
+ <!-- Main Content -->
182
+ <div class="content">
183
+ <p class="greeting">Hi <strong style="color: #e2e8f0">{{name}}</strong>,</p>
184
+
185
+ <p class="message">
186
+ Someone requested a password reset for your {{APP_NAME}} account (<strong
187
+ style="color: #e2e8f0"
188
+ >{{email}}</strong
189
+ >). If this was you, click the button below to reset your password:
190
+ </p>
191
+
192
+ <!-- CTA Button -->
193
+ <div class="button-container">
194
+ <a href="{{reset_url}}" class="reset-button">Reset Password</a>
195
+ </div>
196
+
197
+ <!-- Security Notice -->
198
+ <div class="security-notice">
199
+ <p>
200
+ <strong>⚠ Security Notice</strong><br />
201
+ If you didn't request this password reset, please ignore this email. Your password will
202
+ remain unchanged.
203
+ </p>
204
+ </div>
205
+
206
+ <p class="expiry">
207
+ For security reasons, this link will expire in <strong>{{expiryMinutes}} minutes</strong>.
208
+ </p>
209
+
210
+ <!-- Alternative Link -->
211
+ <p class="alternative-link">
212
+ If the button above doesn't work, copy and paste this link into your browser:<br />
213
+ <a href="{{reset_url}}">{{reset_url}}</a>
214
+ </p>
215
+
216
+ <!-- Divider -->
217
+ <div class="divider"></div>
218
+
219
+ <p class="support">
220
+ If you continue to have problems, please contact our
221
+ <a href="{{support_url}}">support team</a>.
222
+ </p>
223
+ </div>
224
+
225
+ <!-- Footer -->
226
+ <div class="footer">
227
+ <p>&copy; {{year}} {{APP_NAME}}. All rights reserved.</p>
228
+ </div>
229
+ </div>
230
+ </body>
231
+ </html>`;
@@ -0,0 +1,3 @@
1
+ declare const _default: "<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n <title>Welcome to {{APP_NAME}}</title>\n <!--[if mso]>\n <style type=\"text/css\">\n table {\n border-collapse: collapse;\n }\n </style>\n <![endif]-->\n <style>\n body {\n margin: 0;\n padding: 0;\n background-color: #0b1220;\n font-family:\n -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n }\n\n .email-container {\n max-width: 600px;\n margin: 40px auto;\n background-color: #0f172a;\n border: 1px solid #334155;\n border-radius: 12px;\n overflow: hidden;\n }\n\n .header {\n padding: 40px 40px 30px;\n text-align: center;\n background: linear-gradient(180deg, rgba(14, 165, 233, 0.18), rgba(2, 132, 199, 0.1));\n border-bottom: 1px solid #334155;\n }\n\n .icon {\n width: 48px;\n height: 48px;\n margin: 0 auto 20px;\n border-radius: 12px;\n border: 1px solid rgba(14, 165, 233, 0.35);\n background: linear-gradient(180deg, rgba(14, 165, 233, 0.25), rgba(2, 132, 199, 0.15));\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n\n .title {\n margin: 0 0 8px;\n font-size: 28px;\n font-weight: 700;\n color: #e2e8f0;\n line-height: 1.2;\n }\n\n .subtitle {\n margin: 0;\n font-size: 16px;\n color: #e2e8f0;\n line-height: 1.5;\n }\n\n .content {\n padding: 40px;\n }\n\n .getting-started {\n margin: 0 0 20px;\n font-size: 20px;\n font-weight: 700;\n color: #f1f5f9;\n }\n\n .steps {\n width: 100%;\n border-collapse: collapse;\n margin-bottom: 30px;\n }\n\n .step-item {\n padding: 16px;\n background: rgba(14, 165, 233, 0.08);\n border-left: 3px solid #0ea5e9;\n border-radius: 6px;\n }\n\n .step-item p {\n margin: 0 0 12px;\n font-size: 14px;\n color: #f1f5f9;\n line-height: 1.6;\n }\n\n .message {\n margin: 0 0 24px;\n font-size: 15px;\n color: #f1f5f9;\n line-height: 1.6;\n }\n\n .button-container {\n margin-bottom: 30px;\n text-align: center;\n }\n\n .verify-button {\n display: inline-block;\n padding: 14px 32px;\n background: linear-gradient(135deg, #1e3a8a, #1a2e4a);\n color: #ffffff;\n text-decoration: none;\n border-radius: 8px;\n font-weight: 600;\n font-size: 15px;\n border: 1px solid rgba(30, 58, 138, 0.5);\n }\n\n .expiry-notice {\n margin: 0;\n font-size: 13px;\n color: #f1f5f9;\n line-height: 1.5;\n text-align: center;\n }\n\n .expiry-notice em {\n font-style: italic;\n }\n\n .divider {\n margin: 30px 0;\n border-top: 1px solid #334155;\n }\n\n .support {\n margin: 0;\n font-size: 14px;\n color: #e2e8f0;\n line-height: 1.6;\n }\n\n .support a {\n color: #bae6fd;\n text-decoration: none;\n }\n\n .footer {\n padding: 30px 40px;\n background: rgba(15, 23, 42, 0.65);\n border-top: 1px solid #334155;\n text-align: center;\n }\n\n .footer p {\n margin: 0;\n font-size: 12px;\n color: #64748b;\n }\n </style>\n </head>\n <body>\n <div class=\"email-container\">\n <!-- Header with Logo -->\n <div class=\"header\">\n <div class=\"icon\">\n <span style=\"font-size: 24px\">\uD83C\uDF89</span>\n </div>\n <h1 class=\"title\">Welcome, {{name}}!</h1>\n <p class=\"subtitle\">\n Thanks for joining {{APP_NAME}} \u2014 we're excited to have you on board.\n </p>\n </div>\n\n <!-- Main Content -->\n <div class=\"content\">\n <h2 class=\"getting-started\">Getting Started</h2>\n\n <table class=\"steps\">\n <tr>\n <th\n style=\"\n text-align: left;\n padding: 12px;\n background: rgba(14, 165, 233, 0.12);\n border-bottom: 2px solid #0ea5e9;\n color: #ffffff;\n font-weight: 600;\n \"\n >\n Getting Started Steps\n </th>\n </tr>\n <tr>\n <td>\n <div class=\"step-item\">\n <p>\n \u2713 Verify your email<br />\n \u2713 Complete your profile<br />\n \u2713 Explore features\n </p>\n </div>\n </td>\n </tr>\n </table>\n\n <p class=\"message\">To activate your account, please verify your email address:</p>\n\n <!-- CTA Button -->\n <div class=\"button-container\">\n <a href=\"{{confirmLink}}\" class=\"verify-button\">Verify Email Address</a>\n </div>\n\n <p class=\"expiry-notice\">\n <em>This link expires in {{expiryMinutes}} minutes.</em>\n </p>\n\n <!-- Divider -->\n <div class=\"divider\"></div>\n\n <p class=\"support\">\n If you have any questions, reply to this email or contact our\n <a href=\"{{support_url}}\">support team</a>. We're here to help!\n </p>\n </div>\n\n <!-- Footer -->\n <div class=\"footer\">\n <p>&copy; {{year}} {{APP_NAME}}. All rights reserved.</p>\n </div>\n </div>\n </body>\n</html>";
2
+ export default _default;
3
+ //# sourceMappingURL=auth-welcome.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-welcome.d.ts","sourceRoot":"","sources":["../../../../../src/tools/mail/templates/auth-welcome.ts"],"names":[],"mappings":";AAAA,wBA2OS"}