@zintrust/core 0.1.22 → 0.1.23

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 (229) hide show
  1. package/bin/z.d.ts +1 -1
  2. package/bin/z.js +1 -1
  3. package/bin/zin.d.ts +1 -1
  4. package/bin/zin.js +1 -1
  5. package/bin/zintrust-main.d.ts +1 -1
  6. package/bin/zintrust-main.js +2 -2
  7. package/bin/zintrust-microservices.d.ts +1 -1
  8. package/bin/zintrust-microservices.js +1 -1
  9. package/bin/zintrust.d.ts +1 -1
  10. package/bin/zintrust.js +1 -1
  11. package/bin/zt.d.ts +1 -1
  12. package/bin/zt.js +1 -1
  13. package/package.json +2 -3
  14. package/public/index.html +3 -3
  15. package/routes/api.js +1 -1
  16. package/routes/health.d.ts +3 -4
  17. package/routes/health.d.ts.map +1 -1
  18. package/routes/health.js +3 -125
  19. package/src/boot/Application.d.ts.map +1 -1
  20. package/src/boot/Application.js +11 -22
  21. package/src/boot/bootstrap.d.ts +1 -1
  22. package/src/boot/bootstrap.js +48 -7
  23. package/src/builder/BundleOptimizer.d.ts +1 -1
  24. package/src/builder/BundleOptimizer.js +1 -1
  25. package/src/cache/drivers/KVRemoteDriver.d.ts +1 -1
  26. package/src/cache/drivers/KVRemoteDriver.js +1 -1
  27. package/src/cli/CLI.d.ts.map +1 -1
  28. package/src/cli/CLI.js +15 -1
  29. package/src/cli/ErrorHandler.js +3 -3
  30. package/src/cli/commands/AddCommand.d.ts +1 -1
  31. package/src/cli/commands/AddCommand.d.ts.map +1 -1
  32. package/src/cli/commands/AddCommand.js +1 -1
  33. package/src/cli/commands/DbSeedCommand.js +1 -1
  34. package/src/cli/commands/MakeMailTemplateCommand.js +2 -1
  35. package/src/cli/commands/MakeNotificationTemplateCommand.js +2 -1
  36. package/src/cli/commands/MigrateWorkerCommand.d.ts +9 -0
  37. package/src/cli/commands/MigrateWorkerCommand.d.ts.map +1 -0
  38. package/src/cli/commands/MigrateWorkerCommand.js +182 -0
  39. package/src/cli/commands/NewCommand.d.ts +1 -1
  40. package/src/cli/commands/NewCommand.d.ts.map +1 -1
  41. package/src/cli/commands/NewCommand.js +21 -7
  42. package/src/cli/commands/PublishCommand.d.ts +5 -0
  43. package/src/cli/commands/PublishCommand.d.ts.map +1 -0
  44. package/src/cli/commands/PublishCommand.js +54 -0
  45. package/src/cli/commands/QACommand.js +4 -4
  46. package/src/cli/commands/ResourceControlCommand.d.ts +6 -0
  47. package/src/cli/commands/ResourceControlCommand.d.ts.map +1 -0
  48. package/src/cli/commands/ResourceControlCommand.js +43 -0
  49. package/src/cli/commands/SimulateCommand.d.ts +1 -1
  50. package/src/cli/commands/SimulateCommand.js +4 -4
  51. package/src/cli/commands/StartCommand.d.ts.map +1 -1
  52. package/src/cli/commands/StartCommand.js +19 -7
  53. package/src/cli/commands/UpgradeCommand.d.ts +1 -1
  54. package/src/cli/commands/UpgradeCommand.js +2 -2
  55. package/src/cli/commands/WorkerCommands.d.ts +17 -0
  56. package/src/cli/commands/WorkerCommands.d.ts.map +1 -0
  57. package/src/cli/commands/WorkerCommands.js +264 -0
  58. package/src/cli/commands/index.d.ts +2 -0
  59. package/src/cli/commands/index.d.ts.map +1 -1
  60. package/src/cli/commands/index.js +2 -0
  61. package/src/cli/config/ConfigSchema.d.ts +1 -1
  62. package/src/cli/config/ConfigSchema.d.ts.map +1 -1
  63. package/src/cli/config/ConfigSchema.js +4 -3
  64. package/src/cli/scaffolding/ProjectScaffolder.js +5 -5
  65. package/src/cli/scaffolding/RouteGenerator.d.ts.map +1 -1
  66. package/src/cli/scaffolding/RouteGenerator.js +21 -2
  67. package/src/cli/scaffolding/TemplateEngine.js +1 -1
  68. package/src/cli/utils/EnvFileLoader.d.ts.map +1 -1
  69. package/src/common/ExternalServiceUtils.d.ts +63 -0
  70. package/src/common/ExternalServiceUtils.d.ts.map +1 -0
  71. package/src/common/ExternalServiceUtils.js +116 -0
  72. package/src/common/HealthRoutes.d.ts +10 -0
  73. package/src/common/HealthRoutes.d.ts.map +1 -0
  74. package/src/common/HealthRoutes.js +114 -0
  75. package/src/config/SecretsManager.d.ts.map +1 -1
  76. package/src/config/SecretsManager.js +2 -1
  77. package/src/config/app.d.ts +2 -1
  78. package/src/config/app.d.ts.map +1 -1
  79. package/src/config/app.js +98 -52
  80. package/src/config/broadcast.d.ts.map +1 -1
  81. package/src/config/broadcast.js +1 -1
  82. package/src/config/cache.d.ts.map +1 -1
  83. package/src/config/cache.js +2 -2
  84. package/src/config/database.d.ts.map +1 -1
  85. package/src/config/database.js +24 -5
  86. package/src/config/env.d.ts +43 -1
  87. package/src/config/env.d.ts.map +1 -1
  88. package/src/config/env.js +68 -21
  89. package/src/config/index.d.ts +10 -1
  90. package/src/config/index.d.ts.map +1 -1
  91. package/src/config/index.js +1 -0
  92. package/src/config/mail.d.ts.map +1 -1
  93. package/src/config/mail.js +3 -3
  94. package/src/config/middleware.d.ts.map +1 -1
  95. package/src/config/middleware.js +1 -1
  96. package/src/config/notification.d.ts.map +1 -1
  97. package/src/config/notification.js +2 -2
  98. package/src/config/queue.d.ts +14 -0
  99. package/src/config/queue.d.ts.map +1 -1
  100. package/src/config/queue.js +61 -36
  101. package/src/config/security.js +2 -2
  102. package/src/config/storage.d.ts.map +1 -1
  103. package/src/config/storage.js +1 -1
  104. package/src/config/type.d.ts +111 -0
  105. package/src/config/type.d.ts.map +1 -1
  106. package/src/config/workers.d.ts +13 -0
  107. package/src/config/workers.d.ts.map +1 -0
  108. package/src/config/workers.js +173 -0
  109. package/src/database/Paginator.d.ts +37 -0
  110. package/src/database/Paginator.d.ts.map +1 -0
  111. package/src/database/Paginator.js +81 -0
  112. package/src/exceptions/ZintrustError.d.ts +5 -2
  113. package/src/exceptions/ZintrustError.d.ts.map +1 -1
  114. package/src/exceptions/ZintrustError.js +6 -2
  115. package/src/features/Auth.d.ts +1 -1
  116. package/src/features/Auth.d.ts.map +1 -1
  117. package/src/features/Auth.js +3 -2
  118. package/src/features/Queue.d.ts.map +1 -1
  119. package/src/features/Queue.js +0 -2
  120. package/src/index.d.ts +15 -5
  121. package/src/index.d.ts.map +1 -1
  122. package/src/index.js +24 -3
  123. package/src/microservices/MicroserviceBootstrap.d.ts.map +1 -1
  124. package/src/microservices/MicroserviceBootstrap.js +3 -1
  125. package/src/microservices/MicroserviceGenerator.js +4 -4
  126. package/src/microservices/MicroserviceManager.d.ts +1 -1
  127. package/src/microservices/MicroserviceManager.js +1 -1
  128. package/src/middleware/RateLimiter.d.ts.map +1 -1
  129. package/src/middleware/RateLimiter.js +4 -3
  130. package/src/node-singletons/crypto.d.ts +1 -1
  131. package/src/node-singletons/crypto.d.ts.map +1 -1
  132. package/src/node-singletons/crypto.js +1 -1
  133. package/src/node-singletons/os.d.ts +10 -1
  134. package/src/node-singletons/os.d.ts.map +1 -1
  135. package/src/node-singletons/os.js +10 -1
  136. package/src/openapi/OpenApiGenerator.js +2 -2
  137. package/src/orm/ConnectionManager.d.ts +1 -1
  138. package/src/orm/ConnectionManager.d.ts.map +1 -1
  139. package/src/orm/ConnectionManager.js +37 -19
  140. package/src/orm/Model.d.ts +8 -1
  141. package/src/orm/Model.d.ts.map +1 -1
  142. package/src/orm/Model.js +85 -24
  143. package/src/orm/QueryBuilder.d.ts +12 -2
  144. package/src/orm/QueryBuilder.d.ts.map +1 -1
  145. package/src/orm/QueryBuilder.js +438 -38
  146. package/src/orm/Relationships.d.ts +61 -1
  147. package/src/orm/Relationships.d.ts.map +1 -1
  148. package/src/orm/Relationships.js +190 -0
  149. package/src/orm/adapters/D1RemoteAdapter.d.ts +1 -1
  150. package/src/orm/adapters/D1RemoteAdapter.js +1 -1
  151. package/src/performance/Optimizer.d.ts.map +1 -1
  152. package/src/performance/Optimizer.js +2 -4
  153. package/src/routing/CoreRoutes.d.ts +1 -1
  154. package/src/routing/CoreRoutes.d.ts.map +1 -1
  155. package/src/routing/CoreRoutes.js +2 -116
  156. package/src/routing/error.d.ts.map +1 -1
  157. package/src/routing/error.js +3 -2
  158. package/src/routing/publicRoot.d.ts.map +1 -1
  159. package/src/routing/publicRoot.js +4 -2
  160. package/src/runtime/PluginAutoImports.d.ts.map +1 -1
  161. package/src/runtime/PluginAutoImports.js +20 -4
  162. package/src/runtime/PluginManager.d.ts.map +1 -1
  163. package/src/runtime/PluginManager.js +23 -6
  164. package/src/runtime/RuntimeAdapter.d.ts +3 -3
  165. package/src/runtime/RuntimeAdapter.d.ts.map +1 -1
  166. package/src/runtime/StartupConfigFileRegistry.d.ts +2 -1
  167. package/src/runtime/StartupConfigFileRegistry.d.ts.map +1 -1
  168. package/src/runtime/StartupConfigFileRegistry.js +2 -1
  169. package/src/runtime/adapters/CloudflareAdapter.d.ts.map +1 -1
  170. package/src/runtime/adapters/CloudflareAdapter.js +1 -1
  171. package/src/runtime/adapters/DenoAdapter.d.ts.map +1 -1
  172. package/src/runtime/adapters/DenoAdapter.js +1 -1
  173. package/src/runtime/adapters/FargateAdapter.d.ts +2 -2
  174. package/src/runtime/adapters/FargateAdapter.d.ts.map +1 -1
  175. package/src/runtime/adapters/FargateAdapter.js +1 -1
  176. package/src/runtime/adapters/LambdaAdapter.d.ts +1 -1
  177. package/src/runtime/adapters/LambdaAdapter.d.ts.map +1 -1
  178. package/src/runtime/adapters/LambdaAdapter.js +6 -4
  179. package/src/runtime/adapters/NodeServerAdapter.js +1 -1
  180. package/src/scripts/GenerateEnvArtifacts.js +1 -1
  181. package/src/security/SignedRequest.js +1 -1
  182. package/src/security/StartupSecretValidation.d.ts.map +1 -1
  183. package/src/security/StartupSecretValidation.js +7 -1
  184. package/src/start.d.ts.map +1 -1
  185. package/src/start.js +0 -2
  186. package/src/templates/features/Auth.ts.tpl +4 -4
  187. package/src/templates/project/basic/README.md.tpl +1 -1
  188. package/src/templates/project/basic/app/Middleware/index.ts.tpl +1 -1
  189. package/src/templates/project/basic/config/notification.ts.tpl +1 -1
  190. package/src/templates/project/basic/routes/api.ts.tpl +1 -3
  191. package/src/templates/project/basic/src/index.ts.tpl +1 -1
  192. package/src/templates/project/basic/src/zintrust.plugins.ts.tpl +1 -1
  193. package/src/templates/project/basic/template.json +1 -1
  194. package/src/toolkit/Secrets/index.d.ts.map +1 -1
  195. package/src/toolkit/Secrets/index.js +13 -9
  196. package/src/toolkit/Secrets/providers/AwsSecretsManager.d.ts.map +1 -1
  197. package/src/toolkit/Secrets/providers/AwsSecretsManager.js +20 -7
  198. package/src/toolkit/Secrets/providers/CloudflareKv.d.ts.map +1 -1
  199. package/src/toolkit/Secrets/providers/CloudflareKv.js +19 -6
  200. package/src/tools/http/Http.js +1 -1
  201. package/src/tools/mail/drivers/Ses.d.ts.map +1 -1
  202. package/src/tools/mail/drivers/Ses.js +5 -4
  203. package/src/tools/mail/templates/index.js +2 -2
  204. package/src/tools/notification/drivers/Termii.d.ts.map +1 -1
  205. package/src/tools/notification/drivers/Termii.js +6 -17
  206. package/src/tools/notification/testingHelpers.d.ts.map +1 -1
  207. package/src/tools/queue/Queue.d.ts.map +1 -1
  208. package/src/tools/queue/Queue.js +3 -5
  209. package/src/tools/queue/drivers/Redis.d.ts.map +1 -1
  210. package/src/tools/queue/drivers/Redis.js +7 -1
  211. package/src/tools/storage/drivers/S3.d.ts.map +1 -1
  212. package/src/tools/storage/drivers/S3.js +16 -3
  213. package/src/routes/health.d.ts +0 -2
  214. package/src/routes/health.d.ts.map +0 -1
  215. package/src/routes/health.js +0 -1
  216. package/src/runtime/RuntimeDetector.d.ts +0 -15
  217. package/src/runtime/RuntimeDetector.d.ts.map +0 -1
  218. package/src/runtime/RuntimeDetector.js +0 -271
  219. package/src/templates/project/basic/routes/health.ts.tpl +0 -143
  220. package/src/templates/project/basic/routes/metrics.ts.tpl +0 -22
  221. package/src/workers/BroadcastWorker.d.ts +0 -22
  222. package/src/workers/BroadcastWorker.d.ts.map +0 -1
  223. package/src/workers/BroadcastWorker.js +0 -24
  224. package/src/workers/NotificationWorker.d.ts +0 -22
  225. package/src/workers/NotificationWorker.d.ts.map +0 -1
  226. package/src/workers/NotificationWorker.js +0 -23
  227. package/src/workers/createQueueWorker.d.ts +0 -24
  228. package/src/workers/createQueueWorker.d.ts.map +0 -1
  229. package/src/workers/createQueueWorker.js +0 -114
@@ -82,7 +82,7 @@ async function handleCloudflareRequest(adapter, config, logger, event) {
82
82
  });
83
83
  }, timeout);
84
84
  try {
85
- // Process request through Zintrust handler
85
+ // Process request through ZinTrust handler
86
86
  await config.handler(req, res, body);
87
87
  }
88
88
  finally {
@@ -1 +1 @@
1
- {"version":3,"file":"DenoAdapter.d.ts","sourceRoot":"","sources":["../../../../src/runtime/adapters/DenoAdapter.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,aAAa,EAGb,cAAc,EAAC,MAAM,yBAAyB,CAAC;AAMjD;;;GAGG;AACH,eAAO,MAAM,WAAW;IACtB;;OAEG;mBACY,aAAa,GAAG,cAAc,GAAG;QAC9C,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KAC1D;IAwDD;;OAEG;yBAEQ,cAAc,SACjB,MAAM,SACN,MAAM,GACX,OAAO,CAAC,IAAI,CAAC;IAQhB;;OAEG;aACY,OAAO,CAAC,OAAO,CAAC;IAK/B;;OAEG;mBACY,MAAM,iBAAiB,MAAM,GAAG,MAAM;IAKrD;;OAEG;2BACoB,OAAO;EAI9B,CAAC"}
1
+ {"version":3,"file":"DenoAdapter.d.ts","sourceRoot":"","sources":["../../../../src/runtime/adapters/DenoAdapter.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,aAAa,EAGb,cAAc,EACf,MAAM,yBAAyB,CAAC;AAGjC;;;GAGG;AACH,eAAO,MAAM,WAAW;IACtB;;OAEG;mBACY,aAAa,GAAG,cAAc,GAAG;QAC9C,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KAC1D;IAwDD;;OAEG;yBAEQ,cAAc,SACjB,MAAM,SACN,MAAM,GACX,OAAO,CAAC,IAAI,CAAC;IAQhB;;OAEG;aACY,OAAO,CAAC,OAAO,CAAC;IAK/B;;OAEG;mBACY,MAAM,iBAAiB,MAAM,GAAG,MAAM;IAKrD;;OAEG;2BACoB,OAAO;EAI9B,CAAC"}
@@ -176,7 +176,7 @@ function getDenoEnvironment() {
176
176
  // @ts-ignore - Deno.env is available in Deno runtime
177
177
  const env = (typeof Deno === 'undefined' ? {} : (Deno.env.toObject?.() ?? {}));
178
178
  return {
179
- nodeEnv: env['DENO_ENV'] ?? 'production',
179
+ nodeEnv: (env['DENO_ENV'] ?? 'production'),
180
180
  runtime: 'deno',
181
181
  dbConnection: env['DB_CONNECTION'] ?? 'postgresql',
182
182
  dbHost: env['DB_HOST'],
@@ -2,7 +2,7 @@ import { type IncomingMessage, type Server, type ServerResponse } from '../../no
2
2
  import type { AdapterConfig, RuntimeAdapter } from '../RuntimeAdapter';
3
3
  export interface FargateEnvironment {
4
4
  [key: string]: unknown;
5
- nodeEnv: string;
5
+ nodeEnv: NodeJS.ProcessEnv['NODE_ENV'];
6
6
  runtime: string;
7
7
  dbConnection: string;
8
8
  dbHost: string | undefined;
@@ -17,7 +17,7 @@ export declare function createFargateAdapter(config: AdapterConfig): RuntimeAdap
17
17
  stop(): Promise<void>;
18
18
  };
19
19
  /**
20
- * Fargate/Container adapter for running Zintrust in AWS Fargate, Cloud Run, or Docker
20
+ * Fargate/Container adapter for running ZinTrust in AWS Fargate, Cloud Run, or Docker
21
21
  * Wraps existing Node.js HTTP server for container orchestration
22
22
  * Sealed namespace for immutability
23
23
  */
@@ -1 +1 @@
1
- {"version":3,"file":"FargateAdapter.d.ts","sourceRoot":"","sources":["../../../../src/runtime/adapters/FargateAdapter.ts"],"names":[],"mappings":"AAUA,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACV,aAAa,EAGb,cAAc,EACf,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,kBAAkB;IACjC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,iBAAiB,GAAG,CAC9B,eAAe,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,KAAK,IAAI,KACjE,MAAM,CAAC;AAEZ,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,GAAG,cAAc,GAAG;IAC5E,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB,CA0DA;AAED;;;;GAIG;AACH,eAAO,MAAM,cAAc;;EAEzB,CAAC;AAEH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,mBAAmB,EAC1B,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,EAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,aAAa,GAAE,iBAAgC,GAC9C,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,mBAAmB,EAC1B,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,GAC9B,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgB1F;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,EAC/B,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,GAClB,OAAO,CAAC,IAAI,CAAC,CAuBf;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAIpD;AAED,wBAAgB,0BAA0B,IAAI,aAAa,CAAC,QAAQ,CAAC,CAUpE"}
1
+ {"version":3,"file":"FargateAdapter.d.ts","sourceRoot":"","sources":["../../../../src/runtime/adapters/FargateAdapter.ts"],"names":[],"mappings":"AAUA,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACV,aAAa,EAGb,cAAc,EACf,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,kBAAkB;IACjC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,iBAAiB,GAAG,CAC9B,eAAe,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,KAAK,IAAI,KACjE,MAAM,CAAC;AAEZ,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,GAAG,cAAc,GAAG;IAC5E,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB,CA0DA;AAED;;;;GAIG;AACH,eAAO,MAAM,cAAc;;EAEzB,CAAC;AAEH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,mBAAmB,EAC1B,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,EAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,aAAa,GAAE,iBAAgC,GAC9C,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,mBAAmB,EAC1B,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,GAC9B,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgB1F;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,EAC/B,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,GAClB,OAAO,CAAC,IAAI,CAAC,CAuBf;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAIpD;AAED,wBAAgB,0BAA0B,IAAI,aAAa,CAAC,QAAQ,CAAC,CAUpE"}
@@ -56,7 +56,7 @@ export function createFargateAdapter(config) {
56
56
  };
57
57
  }
58
58
  /**
59
- * Fargate/Container adapter for running Zintrust in AWS Fargate, Cloud Run, or Docker
59
+ * Fargate/Container adapter for running ZinTrust in AWS Fargate, Cloud Run, or Docker
60
60
  * Wraps existing Node.js HTTP server for container orchestration
61
61
  * Sealed namespace for immutability
62
62
  */
@@ -1,7 +1,7 @@
1
1
  import type { AdapterConfig, RuntimeAdapter } from '../RuntimeAdapter';
2
2
  /**
3
3
  * AWS Lambda adapter for API Gateway and ALB events
4
- * Converts Lambda events to standard HTTP format for Zintrust framework
4
+ * Converts Lambda events to standard HTTP format for ZinTrust framework
5
5
  * Sealed namespace for immutability
6
6
  */
7
7
  export declare const LambdaAdapter: Readonly<{
@@ -1 +1 @@
1
- {"version":3,"file":"LambdaAdapter.d.ts","sourceRoot":"","sources":["../../../../src/runtime/adapters/LambdaAdapter.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,aAAa,EAGb,cAAc,EAAC,MAAM,yBAAyB,CAAC;AAMjD;;;;GAIG;AACH,eAAO,MAAM,aAAa;IACxB;;OAEG;mBACY,aAAa,GAAG,cAAc;EA8D7C,CAAC"}
1
+ {"version":3,"file":"LambdaAdapter.d.ts","sourceRoot":"","sources":["../../../../src/runtime/adapters/LambdaAdapter.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,aAAa,EAGb,cAAc,EACf,MAAM,yBAAyB,CAAC;AAGjC;;;;GAIG;AACH,eAAO,MAAM,aAAa;IACxB;;OAEG;mBACY,aAAa,GAAG,cAAc;EA8D7C,CAAC"}
@@ -7,7 +7,7 @@ import { IncomingMessage, ServerResponse, } from '../../node-singletons/http.js'
7
7
  import { ErrorResponse, HttpResponse } from '../RuntimeAdapter.js';
8
8
  /**
9
9
  * AWS Lambda adapter for API Gateway and ALB events
10
- * Converts Lambda events to standard HTTP format for Zintrust framework
10
+ * Converts Lambda events to standard HTTP format for ZinTrust framework
11
11
  * Sealed namespace for immutability
12
12
  */
13
13
  export const LambdaAdapter = Object.freeze({
@@ -75,7 +75,7 @@ async function handleLambdaRequest(adapter, config, event, _context) {
75
75
  }));
76
76
  }, timeout);
77
77
  try {
78
- // Process request through Zintrust handler
78
+ // Process request through ZinTrust handler
79
79
  await config.handler(req, res, body);
80
80
  }
81
81
  finally {
@@ -95,8 +95,10 @@ async function handleLambdaRequest(adapter, config, event, _context) {
95
95
  }
96
96
  catch (error) {
97
97
  Logger.error('Lambda handler error', error);
98
- const nodeEnv = typeof Env.NODE_ENV === 'string' && Env.NODE_ENV !== '' ? Env.NODE_ENV : 'development';
99
- const includeDetails = nodeEnv === 'development' || nodeEnv === 'dev';
98
+ const nodeEnv = typeof Env.NODE_ENV === 'string' && String(Env.NODE_ENV) !== ''
99
+ ? Env.NODE_ENV
100
+ : 'development';
101
+ const includeDetails = nodeEnv === 'development' || String(nodeEnv) === 'dev';
100
102
  const errorResponse = ErrorResponse.create(500, 'Internal Server Error', includeDetails ? { message: error.message } : undefined);
101
103
  return errorResponse.toResponse();
102
104
  }
@@ -136,7 +136,7 @@ function handleRequest(req, res, config, logger) {
136
136
  }
137
137
  }, timeout);
138
138
  try {
139
- // Call Zintrust handler
139
+ // Call ZinTrust handler
140
140
  await config.handler(req, res, body);
141
141
  }
142
142
  finally {
@@ -112,7 +112,7 @@ const renderEnvDts = (keys) => {
112
112
  return `declare namespace NodeJS {\n interface ProcessEnv {\n NODE_ENV: 'development' | 'production' | 'testing' | undefined;\n\n${lines}\n }\n}\n`;
113
113
  };
114
114
  const renderEnvExample = (keys) => {
115
- const header = `# Zintrust Framework - Environment Configuration\n# Generated by src/scripts/GenerateEnvArtifacts.ts\n# Copy this file to .env and configure for your environment\n\n`;
115
+ const header = `# ZinTrust Framework - Environment Configuration\n# Generated by src/scripts/GenerateEnvArtifacts.ts\n# Copy this file to .env and configure for your environment\n\n`;
116
116
  const sortedKeys = keys.toSorted((a, b) => a.localeCompare(b));
117
117
  const body = sortedKeys
118
118
  .filter((k) => k !== 'NODE_ENV')
@@ -18,7 +18,7 @@ const timingSafeEquals = (a, b) => {
18
18
  const getCrypto = () => {
19
19
  if (typeof crypto === 'undefined' || crypto.subtle === undefined) {
20
20
  // Some runtimes (or test environments) may not expose WebCrypto.
21
- // Keep this as a typed Zintrust error to satisfy lint rules.
21
+ // Keep this as a typed ZinTrust error to satisfy lint rules.
22
22
  throw ErrorFactory.createSecurityError('WebCrypto is not available in this runtime');
23
23
  }
24
24
  return crypto;
@@ -1 +1 @@
1
- {"version":3,"file":"StartupSecretValidation.d.ts","sourceRoot":"","sources":["../../../src/security/StartupSecretValidation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,MAAM,MAAM,4BAA4B,GAAG;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,4BAA4B,EAAE,CAAC;CACxC,CAAC;AA2GF,eAAO,MAAM,uBAAuB;gBACtB,6BAA6B;mBAiB1B,IAAI;EAQnB,CAAC;AAEH,eAAe,uBAAuB,CAAC"}
1
+ {"version":3,"file":"StartupSecretValidation.d.ts","sourceRoot":"","sources":["../../../src/security/StartupSecretValidation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,MAAM,MAAM,4BAA4B,GAAG;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,4BAA4B,EAAE,CAAC;CACxC,CAAC;AAgHF,eAAO,MAAM,uBAAuB;gBACtB,6BAA6B;mBAiB1B,IAAI;EAQnB,CAAC;AAEH,eAAe,uBAAuB,CAAC"}
@@ -25,8 +25,14 @@ const validateJwtSecret = () => {
25
25
  return null;
26
26
  try {
27
27
  const secret = securityConfig.jwt.secret.trim();
28
+ const appKey = (Env.APP_KEY ?? '').trim();
28
29
  if (secret.length === 0) {
29
- return { key: 'JWT_SECRET', message: 'JWT_SECRET must be set when JWT is enabled' };
30
+ if (appKey.length > 0)
31
+ return null;
32
+ return {
33
+ key: 'JWT_SECRET',
34
+ message: 'JWT_SECRET must be set when JWT is enabled (or provide APP_KEY)',
35
+ };
30
36
  }
31
37
  return null;
32
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/start.ts"],"names":[],"mappings":"AAqBA,eAAO,MAAM,UAAU,GAAI,eAAe,MAAM,KAAG,OAYlD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,KAAK,QAAa,OAAO,CAAC,IAAI,CAS1C,CAAC;AAEF;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEpE;;GAEG;AACH,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAElD;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/start.ts"],"names":[],"mappings":"AAsBA,eAAO,MAAM,UAAU,GAAI,eAAe,MAAM,KAAG,OAYlD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,KAAK,QAAa,OAAO,CAAC,IAAI,CAO1C,CAAC;AAEF;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEpE;;GAEG;AACH,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAElD;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC"}
package/src/start.js CHANGED
@@ -36,14 +36,12 @@ export const isNodeMain = (importMetaUrl) => {
36
36
  * This uses a non-literal dynamic import so Worker bundlers don't pull Node-only modules.
37
37
  */
38
38
  export const start = async () => {
39
- /* c8 ignore start */
40
39
  if (!isNodeRuntime())
41
40
  return;
42
41
  // Compiled output places bootstrap at `dist/src/boot/bootstrap.js`.
43
42
  // This file compiles to `dist/src/start.js`, so relative import is stable.
44
43
  // In unit tests, importing bootstrap has heavy side effects (starts server + exits).
45
44
  await import('./boot/' + 'bootstrap.js');
46
- /* c8 ignore stop */
47
45
  };
48
46
  /**
49
47
  * Cloudflare Workers entry (module worker style).
@@ -1,6 +1,6 @@
1
1
  // TEMPLATE_START
2
2
  import * as bcrypt from 'bcrypt';
3
- import { sign, verify, type Secret, type SignOptions } from 'jsonwebtoken';
3
+ import jwt, { type Secret, type SignOptions } from 'jsonwebtoken';
4
4
 
5
5
  export const Auth = Object.freeze({
6
6
  /**
@@ -27,14 +27,14 @@ export const Auth = Object.freeze({
27
27
  expiresIn: NonNullable<SignOptions['expiresIn']> = '1h'
28
28
  ): string {
29
29
  const options: SignOptions = { expiresIn };
30
- return sign(payload, secret, options);
30
+ return jwt.sign(payload, secret, options);
31
31
  },
32
32
 
33
33
  /**
34
34
  * Verify a JWT token
35
35
  */
36
36
  verifyToken<T>(token: string, secret: Secret): T {
37
- return verify(token, secret) as T;
37
+ return jwt.verify(token, secret) as T;
38
38
  },
39
39
  });
40
- // TEMPLATE_END
40
+ // TEMPLATE_END
@@ -1,6 +1,6 @@
1
1
  # {{projectName}}
2
2
 
3
- Starter Task API built with Zintrust.
3
+ Starter Task API built with ZinTrust.
4
4
 
5
5
  ## Run
6
6
 
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Example Middleware
3
- * Common middleware patterns for Zintrust
3
+ * Common middleware patterns for ZinTrust
4
4
  */
5
5
 
6
6
  import type { IJwtManager, JwtAlgorithm, JwtManagerType, ISchema, SchemaType, CsrfTokenManagerType, ICsrfTokenManager } from '@zintrust/core';
@@ -17,7 +17,7 @@ export default {
17
17
  termii: {
18
18
  driver: 'termii' as const,
19
19
  apiKey: Env.get('TERMII_API_KEY', ''),
20
- sender: Env.get('TERMII_SENDER', 'Zintrust'),
20
+ sender: Env.get('TERMII_SENDER', 'ZinTrust'),
21
21
  endpoint: Env.get('TERMII_ENDPOINT', 'https://api.termii.com/sms/send'),
22
22
  },
23
23
  twilio: {
@@ -8,7 +8,6 @@ import { UserQueryBuilderController } from '@app/Controllers/UserQueryBuilderCon
8
8
  import { Env , Router } from '@zintrust/core';
9
9
  import type { MiddlewareKey , IRouter , IResponse, IRequest} from '@zintrust/core';
10
10
  import { registerBroadcastRoutes } from '@routes/broadcast';
11
- import { registerHealthRoutes } from '@routes/health';
12
11
  import { registerStorageRoutes } from '@routes/storage';
13
12
 
14
13
  export function registerRoutes(router: IRouter): void {
@@ -24,7 +23,6 @@ export function registerRoutes(router: IRouter): void {
24
23
  */
25
24
  function registerPublicRoutes(router: IRouter): void {
26
25
  registerRootRoute(router);
27
- registerHealthRoutes(router);
28
26
  registerBroadcastRoutes(router);
29
27
  registerStorageRoutes(router);
30
28
  }
@@ -32,7 +30,7 @@ function registerPublicRoutes(router: IRouter): void {
32
30
  function registerRootRoute(router: IRouter): void {
33
31
  Router.get(router, '/', async (_req: IRequest, res:IResponse) => {
34
32
  res.json({
35
- framework: 'Zintrust Framework',
33
+ framework: 'ZinTrust Framework',
36
34
  app_name: Env.APP_NAME,
37
35
  version: '0.1.0',
38
36
  env: Env.NODE_ENV ?? 'development',
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Zintrust Application Entry Point
2
+ * ZinTrust Application Entry Point
3
3
  */
4
4
 
5
5
  import { isNodeMain, start } from '@zintrust/core/start';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Zintrust plugin auto-imports
2
+ * ZinTrust plugin auto-imports
3
3
  *
4
4
  * This file is managed by `zin plugin install` and contains side-effect
5
5
  * imports that register optional adapters/drivers into core registries.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "basic",
3
- "description": "Basic Zintrust project structure",
3
+ "description": "Basic ZinTrust project structure",
4
4
  "directories": [
5
5
  "config",
6
6
  "app/Controllers",
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/toolkit/Secrets/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAY,KAAK,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAI/E,YAAY,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,EAAE,mBAAmB,CAAC;CAChC,CAAC;AA0GF,eAAO,MAAM,cAAc;kBACL,WAAW,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;kBAkB1D,WAAW,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;oBAoB7D,aAAa,GAAG;QAC9B,QAAQ,EAAE,mBAAmB,CAAC;QAC9B,EAAE,EAAE,OAAO,CAAC;QACZ,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB;EASD,CAAC;AAEH,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/toolkit/Secrets/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAY,KAAK,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAI/E,YAAY,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,EAAE,mBAAmB,CAAC;CAChC,CAAC;AA+GF,eAAO,MAAM,cAAc;kBACL,WAAW,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;kBAe1D,WAAW,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;oBAiB7D,aAAa,GAAG;QAC9B,QAAQ,EAAE,mBAAmB,CAAC;QAC9B,EAAE,EAAE,OAAO,CAAC;QACZ,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB;EAMD,CAAC;AAEH,eAAe,cAAc,CAAC"}
@@ -4,19 +4,26 @@
4
4
  * Internal framework module intended for CLI usage.
5
5
  * It may use Node APIs (via node-singletons) and should not be used by runtime apps.
6
6
  */
7
+ import { Env } from '../../config/env.js';
7
8
  import { ErrorFactory } from '../../exceptions/ZintrustError.js';
8
9
  import { EnvFile } from '../Secrets/EnvFile.js';
9
10
  import { Manifest } from '../Secrets/Manifest.js';
10
11
  import { AwsSecretsManager } from '../Secrets/providers/AwsSecretsManager.js';
11
12
  import { CloudflareKv } from '../Secrets/providers/CloudflareKv.js';
13
+ const resolveDefaultEnvFile = () => Env.ZINTRUST_ENV_FILE;
14
+ const resolveDefaultManifest = () => Env.ZINTRUST_SECRETS_MANIFEST;
15
+ const resolveDefaultInFile = () => Env.ZINTRUST_ENV_IN_FILE;
16
+ const resolveSecretsProvider = () => {
17
+ return Env.ZINTRUST_SECRETS_PROVIDER;
18
+ };
12
19
  const resolveProvider = (provider) => {
13
20
  if (provider === 'aws' || provider === 'cloudflare')
14
21
  return provider;
15
22
  throw ErrorFactory.createCliError('Missing/invalid provider. Use --provider aws|cloudflare or set ZINTRUST_SECRETS_PROVIDER.');
16
23
  };
17
- const resolveOutFile = (outFile) => outFile ?? process.env['ZINTRUST_ENV_FILE'] ?? '.env.pull';
18
- const resolveManifestPath = (manifestPath) => manifestPath ?? process.env['ZINTRUST_SECRETS_MANIFEST'] ?? 'secrets.manifest.json';
19
- const resolveInFile = (inFile) => inFile ?? process.env['ZINTRUST_ENV_IN_FILE'] ?? '.env';
24
+ const resolveOutFile = (outFile) => outFile ?? resolveDefaultEnvFile();
25
+ const resolveManifestPath = (manifestPath) => manifestPath ?? resolveDefaultManifest();
26
+ const resolveInFile = (inFile) => inFile ?? resolveDefaultInFile();
20
27
  const pullAws = async (manifest) => {
21
28
  const client = AwsSecretsManager.createFromEnv();
22
29
  const entries = Object.entries(manifest.keys).filter(([, spec]) => spec.aws !== undefined);
@@ -85,8 +92,7 @@ const pushCloudflare = async (manifest, env, dryRun) => {
85
92
  };
86
93
  export const SecretsToolkit = Object.freeze({
87
94
  async pull(options) {
88
- const provider = resolveProvider(options.provider ??
89
- process.env['ZINTRUST_SECRETS_PROVIDER']);
95
+ const provider = resolveProvider(options.provider ?? resolveSecretsProvider());
90
96
  const outFile = resolveOutFile(options.outFile);
91
97
  const manifestPath = resolveManifestPath(options.manifestPath);
92
98
  const manifest = await Manifest.load({ cwd: options.cwd, path: manifestPath, provider });
@@ -97,8 +103,7 @@ export const SecretsToolkit = Object.freeze({
97
103
  return { outFile, keys: Object.keys(resolved) };
98
104
  },
99
105
  async push(options) {
100
- const provider = resolveProvider(options.provider ??
101
- process.env['ZINTRUST_SECRETS_PROVIDER']);
106
+ const provider = resolveProvider(options.provider ?? resolveSecretsProvider());
102
107
  const inFile = resolveInFile(options.inFile);
103
108
  const manifestPath = resolveManifestPath(options.manifestPath);
104
109
  const manifest = await Manifest.load({ cwd: options.cwd, path: manifestPath, provider });
@@ -110,8 +115,7 @@ export const SecretsToolkit = Object.freeze({
110
115
  return { inFile, keys };
111
116
  },
112
117
  doctor(options) {
113
- const provider = resolveProvider(options.provider ??
114
- process.env['ZINTRUST_SECRETS_PROVIDER']);
118
+ const provider = resolveProvider(options.provider ?? resolveSecretsProvider());
115
119
  const missing = provider === 'aws' ? AwsSecretsManager.doctorEnv() : CloudflareKv.doctorEnv();
116
120
  return { provider, ok: missing.length === 0, missing };
117
121
  },
@@ -1 +1 @@
1
- {"version":3,"file":"AwsSecretsManager.d.ts","sourceRoot":"","sources":["../../../../../src/toolkit/Secrets/providers/AwsSecretsManager.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,cAAc,GAAG;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AA0GF,eAAO,MAAM,iBAAiB;qBACX;QACf,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QACzE,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KAC9D;iBAsDY,MAAM,EAAE;EAcrB,CAAC;AAEH,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"AwsSecretsManager.d.ts","sourceRoot":"","sources":["../../../../../src/toolkit/Secrets/providers/AwsSecretsManager.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,cAAc,GAAG;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAqHF,eAAO,MAAM,iBAAiB;qBACX;QACf,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QACzE,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KAC9D;iBAsDY,MAAM,EAAE;EAcrB,CAAC;AAEH,eAAe,iBAAiB,CAAC"}
@@ -1,6 +1,19 @@
1
1
  import { AwsSigV4 } from '../../../common/index.js';
2
+ import { Env } from '../../../config/env.js';
2
3
  import { ErrorFactory } from '../../../exceptions/ZintrustError.js';
3
4
  const sha256Hex = (data) => AwsSigV4.sha256Hex(data);
5
+ const readEnvString = (key) => {
6
+ const anyEnv = Env;
7
+ const fromEnv = typeof anyEnv.get === 'function' ? anyEnv.get(key, '') : '';
8
+ if (typeof fromEnv === 'string' && fromEnv.trim() !== '')
9
+ return fromEnv;
10
+ if (typeof process !== 'undefined') {
11
+ const raw = process.env?.[key];
12
+ if (typeof raw === 'string')
13
+ return raw;
14
+ }
15
+ return fromEnv ?? '';
16
+ };
4
17
  const buildAuthorization = (params) => {
5
18
  const canonicalUri = '/';
6
19
  const canonicalQueryString = '';
@@ -78,10 +91,10 @@ const requestAwsSecretsManager = async (region, credentials, target, body) => {
78
91
  };
79
92
  export const AwsSecretsManager = Object.freeze({
80
93
  createFromEnv() {
81
- const region = process.env['AWS_REGION'] ?? process.env['AWS_DEFAULT_REGION'] ?? '';
82
- const accessKeyId = process.env['AWS_ACCESS_KEY_ID'] ?? '';
83
- const secretAccessKey = process.env['AWS_SECRET_ACCESS_KEY'] ?? '';
84
- const sessionToken = process.env['AWS_SESSION_TOKEN'] ?? undefined;
94
+ const region = readEnvString('AWS_REGION') || readEnvString('AWS_DEFAULT_REGION');
95
+ const accessKeyId = readEnvString('AWS_ACCESS_KEY_ID');
96
+ const secretAccessKey = readEnvString('AWS_SECRET_ACCESS_KEY');
97
+ const sessionToken = readEnvString('AWS_SESSION_TOKEN') || undefined;
85
98
  if (region.trim() === '' || accessKeyId.trim() === '' || secretAccessKey.trim() === '') {
86
99
  throw ErrorFactory.createCliError('AWS credentials missing: set AWS_REGION, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY');
87
100
  }
@@ -116,13 +129,13 @@ export const AwsSecretsManager = Object.freeze({
116
129
  },
117
130
  doctorEnv() {
118
131
  const missing = [];
119
- const region = (process.env['AWS_REGION'] ?? process.env['AWS_DEFAULT_REGION'] ?? '').trim();
132
+ const region = (readEnvString('AWS_REGION') || readEnvString('AWS_DEFAULT_REGION')).trim();
120
133
  if (region === '')
121
134
  missing.push('AWS_REGION');
122
- const accessKeyId = (process.env['AWS_ACCESS_KEY_ID'] ?? '').trim();
135
+ const accessKeyId = readEnvString('AWS_ACCESS_KEY_ID').trim();
123
136
  if (accessKeyId === '')
124
137
  missing.push('AWS_ACCESS_KEY_ID');
125
- const secretAccessKey = (process.env['AWS_SECRET_ACCESS_KEY'] ?? '').trim();
138
+ const secretAccessKey = readEnvString('AWS_SECRET_ACCESS_KEY').trim();
126
139
  if (secretAccessKey === '')
127
140
  missing.push('AWS_SECRET_ACCESS_KEY');
128
141
  return missing;
@@ -1 +1 @@
1
- {"version":3,"file":"CloudflareKv.d.ts","sourceRoot":"","sources":["../../../../../src/toolkit/Secrets/providers/CloudflareKv.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY;qBACN;QACf,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QACxE,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KAC/E;iBAsEY,MAAM,EAAE;EAcrB,CAAC;AAEH,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"CloudflareKv.d.ts","sourceRoot":"","sources":["../../../../../src/toolkit/Secrets/providers/CloudflareKv.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,YAAY;qBACN;QACf,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QACxE,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KAC/E;iBAiFY,MAAM,EAAE;EAgBrB,CAAC;AAEH,eAAe,YAAY,CAAC"}
@@ -1,9 +1,22 @@
1
+ import { Env } from '../../../config/env.js';
1
2
  import { ErrorFactory } from '../../../exceptions/ZintrustError.js';
2
3
  export const CloudflareKv = Object.freeze({
3
4
  createFromEnv() {
4
- const accountId = process.env['CLOUDFLARE_ACCOUNT_ID'] ?? '';
5
- const apiToken = process.env['CLOUDFLARE_API_TOKEN'] ?? '';
6
- const defaultNamespaceId = process.env['CLOUDFLARE_KV_NAMESPACE_ID'] ?? '';
5
+ const readEnvString = (key) => {
6
+ const anyEnv = Env;
7
+ const fromEnv = typeof anyEnv.get === 'function' ? anyEnv.get(key, '') : '';
8
+ if (typeof fromEnv === 'string' && fromEnv.trim() !== '')
9
+ return fromEnv;
10
+ if (typeof process !== 'undefined') {
11
+ const raw = process.env?.[key];
12
+ if (typeof raw === 'string')
13
+ return raw;
14
+ }
15
+ return fromEnv ?? '';
16
+ };
17
+ const accountId = readEnvString('CLOUDFLARE_ACCOUNT_ID');
18
+ const apiToken = readEnvString('CLOUDFLARE_API_TOKEN');
19
+ const defaultNamespaceId = readEnvString('CLOUDFLARE_KV_NAMESPACE_ID');
7
20
  if (accountId.trim() === '' || apiToken.trim() === '') {
8
21
  throw ErrorFactory.createCliError('Cloudflare credentials missing: set CLOUDFLARE_ACCOUNT_ID, CLOUDFLARE_API_TOKEN');
9
22
  }
@@ -58,13 +71,13 @@ export const CloudflareKv = Object.freeze({
58
71
  },
59
72
  doctorEnv() {
60
73
  const missing = [];
61
- const accountId = (process.env['CLOUDFLARE_ACCOUNT_ID'] ?? '').trim();
74
+ const accountId = (Env.get?.('CLOUDFLARE_ACCOUNT_ID', '') ?? Env.CLOUDFLARE_ACCOUNT_ID).trim();
62
75
  if (accountId === '')
63
76
  missing.push('CLOUDFLARE_ACCOUNT_ID');
64
- const apiToken = (process.env['CLOUDFLARE_API_TOKEN'] ?? '').trim();
77
+ const apiToken = (Env.get?.('CLOUDFLARE_API_TOKEN', '') ?? Env.CLOUDFLARE_API_TOKEN).trim();
65
78
  if (apiToken === '')
66
79
  missing.push('CLOUDFLARE_API_TOKEN');
67
- const namespaceId = (process.env['CLOUDFLARE_KV_NAMESPACE_ID'] ?? '').trim();
80
+ const namespaceId = (Env.get?.('CLOUDFLARE_KV_NAMESPACE_ID', '') ?? Env.CLOUDFLARE_KV_NAMESPACE_ID).trim();
68
81
  if (namespaceId === '')
69
82
  missing.push('CLOUDFLARE_KV_NAMESPACE_ID');
70
83
  return missing;
@@ -77,7 +77,7 @@ const createRequestBuilder = (method, url, initialBody) => {
77
77
  method,
78
78
  url,
79
79
  headers: {
80
- 'User-Agent': 'Zintrust/1.0',
80
+ 'User-Agent': 'ZinTrust/1.0',
81
81
  },
82
82
  body: initialBody ? JSON.stringify(initialBody) : undefined,
83
83
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Ses.d.ts","sourceRoot":"","sources":["../../../../../src/tools/mail/drivers/Ses.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACtB,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,KAAK,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAsGF,eAAO,MAAM,SAAS;iBACD,SAAS,WAAW,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;EAgDxE,CAAC;AAEH,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"Ses.d.ts","sourceRoot":"","sources":["../../../../../src/tools/mail/drivers/Ses.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACtB,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,KAAK,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAsGF,eAAO,MAAM,SAAS;iBACD,SAAS,WAAW,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;EAgDxE,CAAC;AAEH,eAAe,SAAS,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { readEnvString } from '../../../common/ExternalServiceUtils.js';
1
2
  import { AwsSigV4 } from '../../../common/index.js';
2
3
  import { ErrorFactory } from '../../../exceptions/ZintrustError.js';
3
4
  const sha256Hex = (data) => AwsSigV4.sha256Hex(data);
@@ -33,10 +34,10 @@ const ensureRegion = (config) => {
33
34
  return region;
34
35
  };
35
36
  const ensureCredentials = () => {
36
- const accessKeyId = process.env['AWS_ACCESS_KEY_ID'] ?? '';
37
- const secretAccessKey = process.env['AWS_SECRET_ACCESS_KEY'] ?? '';
38
- const sessionToken = process.env['AWS_SESSION_TOKEN'] ?? undefined;
39
- if (accessKeyId.trim() === '' || secretAccessKey.trim() === '') {
37
+ const accessKeyId = readEnvString('AWS_ACCESS_KEY_ID');
38
+ const secretAccessKey = readEnvString('AWS_SECRET_ACCESS_KEY');
39
+ const sessionToken = readEnvString('AWS_SESSION_TOKEN') ?? undefined;
40
+ if (accessKeyId.length === 0 || secretAccessKey.length === 0) {
40
41
  throw ErrorFactory.createConfigError('SES: missing AWS credentials (set AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY)');
41
42
  }
42
43
  return { accessKeyId, secretAccessKey, sessionToken };
@@ -28,8 +28,8 @@ export const MailTemplates = Object.freeze({
28
28
  // Example template. Apps can add their own workflows under app/Toolkit/Mail.
29
29
  welcome: Object.freeze({
30
30
  subject: 'Welcome, {{name}}!',
31
- text: 'Hi {{name}},\n\nWelcome to Zintrust.',
32
- html: '<p>Hi {{name}},</p><p>Welcome to Zintrust.</p>',
31
+ text: 'Hi {{name}},\n\nWelcome to ZinTrust.',
32
+ html: '<p>Hi {{name}},</p><p>Welcome to ZinTrust.</p>',
33
33
  }),
34
34
  }),
35
35
  });
@@ -1 +1 @@
1
- {"version":3,"file":"Termii.d.ts","sourceRoot":"","sources":["../../../../../src/tools/notification/drivers/Termii.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,YAAY;oBACD,MAAM,WAAW,MAAM,YAAW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;EA6C/E,CAAC;AAEH,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"Termii.d.ts","sourceRoot":"","sources":["../../../../../src/tools/notification/drivers/Termii.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,eAAO,MAAM,YAAY;oBACD,MAAM,WAAW,MAAM,YAAW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;EA+B/E,CAAC;AAEH,eAAe,YAAY,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { readEnvString, safeFetch, validateRequiredParams } from '../../../common/ExternalServiceUtils.js';
1
2
  import { ErrorFactory } from '../../../exceptions/ZintrustError.js';
2
3
  /**
3
4
  * Termii SMS Driver (skeleton)
@@ -6,14 +7,9 @@ import { ErrorFactory } from '../../../exceptions/ZintrustError.js';
6
7
  */
7
8
  export const TermiiDriver = Object.freeze({
8
9
  async send(recipient, message, options = {}) {
9
- if (!recipient || typeof recipient !== 'string') {
10
- throw ErrorFactory.createValidationError('Recipient phone number is required');
11
- }
12
- if (!message || typeof message !== 'string') {
13
- throw ErrorFactory.createValidationError('Message body is required');
14
- }
15
- const apiKey = process.env['TERMII_API_KEY'] ?? '';
16
- const sender = process.env['TERMII_SENDER'] ?? 'Zintrust';
10
+ validateRequiredParams({ recipient, message }, ['recipient', 'message']);
11
+ const apiKey = readEnvString('TERMII_API_KEY');
12
+ const sender = readEnvString('TERMII_SENDER');
17
13
  if (!apiKey) {
18
14
  throw ErrorFactory.createConfigError('TERMII_API_KEY is not configured');
19
15
  }
@@ -24,22 +20,15 @@ export const TermiiDriver = Object.freeze({
24
20
  api_key: apiKey,
25
21
  ...options,
26
22
  };
27
- // Use global fetch — tests will mock this
23
+ // Use shared fetch wrapper
28
24
  const url = 'https://api.termii.com/sms/send';
29
- const res = await globalThis.fetch(url, {
25
+ const res = await safeFetch(url, {
30
26
  method: 'POST',
31
27
  headers: {
32
28
  'Content-Type': 'application/json',
33
29
  },
34
30
  body: JSON.stringify(payload),
35
31
  });
36
- if (!res.ok) {
37
- const txt = await res.text().catch(() => '');
38
- throw ErrorFactory.createTryCatchError(`Termii request failed (${res.status})`, {
39
- status: res.status,
40
- body: txt,
41
- });
42
- }
43
32
  const json = await res.json().catch(() => ({}));
44
33
  return json;
45
34
  },
@@ -1 +1 @@
1
- {"version":3,"file":"testingHelpers.d.ts","sourceRoot":"","sources":["../../../../src/tools/notification/testingHelpers.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,aAAa,GACxB,aAA0B,EAC1B,OAAM,OAA0B,KAC/B;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CA2B3C,CAAC;;0CA5BM,OAAO,KACZ;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE;;AA6B9C,wBAAiC"}
1
+ {"version":3,"file":"testingHelpers.d.ts","sourceRoot":"","sources":["../../../../src/tools/notification/testingHelpers.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,aAAa,GACxB,aAA0B,EAC1B,OAAM,OAA0B,KAC/B;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CA2B3C,CAAC;;0CA5BM,OAAO,KACZ;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE;;AA6B9C,wBAAiC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Queue.d.ts","sourceRoot":"","sources":["../../../../src/tools/queue/Queue.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,CAAC,CAAC,GAAG,OAAO,IAAI;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,CAAC,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAErF,UAAU,YAAY;IACpB,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACjE,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAC1E,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC;AAID,eAAO,MAAM,KAAK;mBACD,MAAM,UAAU,YAAY;aAIlC,IAAI;eAIF,MAAM,GAAG,YAAY;YAelB,CAAC,mBAAmB,MAAM,WAAW,CAAC,eAAe,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAK7E,CAAC,mBACN,MAAM,eACA,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;eAKtB,MAAM,MAAM,MAAM,eAAe,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;kBAKpD,MAAM,eAAe,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;iBAK9C,MAAM,eAAe,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;EAI9D,CAAC;AAEH,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"Queue.d.ts","sourceRoot":"","sources":["../../../../src/tools/queue/Queue.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,YAAY,CAAC,CAAC,GAAG,OAAO,IAAI;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,CAAC,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAErF,UAAU,YAAY;IACpB,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACjE,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAC1E,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC;AAID,eAAO,MAAM,KAAK;mBACD,MAAM,UAAU,YAAY;aAIlC,IAAI;eAIF,MAAM,GAAG,YAAY;YAUlB,CAAC,mBAAmB,MAAM,WAAW,CAAC,eAAe,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAK7E,CAAC,mBACN,MAAM,eACA,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;eAKtB,MAAM,MAAM,MAAM,eAAe,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;kBAKpD,MAAM,eAAe,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;iBAK9C,MAAM,eAAe,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;EAI9D,CAAC;AAEH,eAAe,KAAK,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { Env } from '../../config/env.js';
1
2
  import { ErrorFactory } from '../../exceptions/ZintrustError.js';
2
3
  const drivers = new Map();
3
4
  export const Queue = Object.freeze({
@@ -8,11 +9,8 @@ export const Queue = Object.freeze({
8
9
  drivers.clear();
9
10
  },
10
11
  get(name) {
11
- const driverName = (name ??
12
- process.env['QUEUE_CONNECTION'] ??
13
- process.env['QUEUE_DRIVER'] ??
14
- 'inmemory')
15
- .toString()
12
+ const resolved = (name ?? Env.QUEUE_CONNECTION) || Env.QUEUE_DRIVER || 'inmemory';
13
+ const driverName = (resolved !== null && resolved !== undefined ? String(resolved) : 'inmemory')
16
14
  .trim()
17
15
  .toLowerCase();
18
16
  const driver = drivers.get(driverName);