@zintrust/core 0.1.1 → 0.1.3

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 (487) hide show
  1. package/README.md +3 -3
  2. package/bin/zintrust.d.ts.map +1 -1
  3. package/bin/zintrust.js +18 -1
  4. package/package.json +15 -1
  5. package/src/boot/Application.d.ts.map +1 -1
  6. package/src/boot/Application.js +46 -3
  7. package/src/boot/Server.d.ts.map +1 -1
  8. package/src/boot/Server.js +3 -4
  9. package/src/boot/bootstrap.js +77 -6
  10. package/src/builder/BundleOptimizer.d.ts.map +1 -1
  11. package/src/builder/BundleOptimizer.js +6 -4
  12. package/src/cache/drivers/KVDriver.d.ts.map +1 -1
  13. package/src/cache/drivers/KVDriver.js +6 -6
  14. package/src/cache/drivers/RedisDriver.js +1 -1
  15. package/src/cli/BaseCommand.d.ts +2 -2
  16. package/src/cli/BaseCommand.d.ts.map +1 -1
  17. package/src/cli/BaseCommand.js +2 -1
  18. package/src/cli/CLI.d.ts.map +1 -1
  19. package/src/cli/CLI.js +11 -4
  20. package/src/cli/commands/AddCommand.js +1 -1
  21. package/src/cli/commands/ConfigCommand.d.ts.map +1 -1
  22. package/src/cli/commands/ConfigCommand.js +34 -4
  23. package/src/cli/commands/D1MigrateCommand.d.ts +4 -0
  24. package/src/cli/commands/D1MigrateCommand.d.ts.map +1 -1
  25. package/src/cli/commands/D1MigrateCommand.js +4 -3
  26. package/src/cli/commands/FixCommand.d.ts.map +1 -1
  27. package/src/cli/commands/FixCommand.js +3 -16
  28. package/src/cli/commands/LogsCleanupCommand.d.ts +6 -0
  29. package/src/cli/commands/LogsCleanupCommand.d.ts.map +1 -0
  30. package/src/cli/commands/LogsCleanupCommand.js +20 -0
  31. package/src/cli/commands/LogsCommand.d.ts.map +1 -1
  32. package/src/cli/commands/LogsCommand.js +1 -1
  33. package/src/cli/commands/MakeMailTemplateCommand.d.ts +10 -0
  34. package/src/cli/commands/MakeMailTemplateCommand.d.ts.map +1 -0
  35. package/src/cli/commands/MakeMailTemplateCommand.js +74 -0
  36. package/src/cli/commands/MakeNotificationTemplateCommand.d.ts +10 -0
  37. package/src/cli/commands/MakeNotificationTemplateCommand.d.ts.map +1 -0
  38. package/src/cli/commands/MakeNotificationTemplateCommand.js +113 -0
  39. package/src/cli/commands/NewCommand.d.ts +4 -0
  40. package/src/cli/commands/NewCommand.d.ts.map +1 -1
  41. package/src/cli/commands/NewCommand.js +33 -20
  42. package/src/cli/commands/PluginCommand.d.ts.map +1 -1
  43. package/src/cli/commands/PluginCommand.js +8 -4
  44. package/src/cli/commands/PrepareCommand.d.ts.map +1 -1
  45. package/src/cli/commands/PrepareCommand.js +1 -1
  46. package/src/cli/commands/QACommand.d.ts.map +1 -1
  47. package/src/cli/commands/QACommand.js +11 -20
  48. package/src/cli/commands/SecretsCommand.d.ts +16 -0
  49. package/src/cli/commands/SecretsCommand.d.ts.map +1 -0
  50. package/src/cli/commands/SecretsCommand.js +91 -0
  51. package/src/cli/commands/StartCommand.d.ts.map +1 -1
  52. package/src/cli/commands/StartCommand.js +2 -2
  53. package/src/cli/commands/TemplatesCommand.d.ts +3 -0
  54. package/src/cli/commands/TemplatesCommand.d.ts.map +1 -0
  55. package/src/cli/commands/TemplatesCommand.js +65 -0
  56. package/src/cli/commands/index.d.ts +5 -0
  57. package/src/cli/commands/index.d.ts.map +1 -1
  58. package/src/cli/commands/index.js +5 -0
  59. package/src/cli/config/ConfigManager.js +1 -1
  60. package/src/cli/index.d.ts +2 -1
  61. package/src/cli/index.d.ts.map +1 -1
  62. package/src/cli/index.js +2 -1
  63. package/src/cli/scaffolding/ControllerGenerator.js +1 -1
  64. package/src/cli/scaffolding/FeatureScaffolder.js +4 -4
  65. package/src/cli/scaffolding/FileGenerator.js +1 -1
  66. package/src/cli/scaffolding/ModelGenerator.js +1 -1
  67. package/src/cli/scaffolding/ProjectScaffolder.d.ts.map +1 -1
  68. package/src/cli/scaffolding/ProjectScaffolder.js +61 -11
  69. package/src/cli/scaffolding/ResponseFactoryGenerator.d.ts.map +1 -1
  70. package/src/cli/scaffolding/ResponseFactoryGenerator.js +3 -2
  71. package/src/cli/scaffolding/RouteGenerator.js +1 -1
  72. package/src/cli/scaffolding/ServiceIntegrationTestGenerator.js +1 -1
  73. package/src/cli/scaffolding/ServiceScaffolder.js +2 -2
  74. package/src/cli/scaffolding/TemplateGenerator.d.ts +40 -0
  75. package/src/cli/scaffolding/TemplateGenerator.d.ts.map +1 -0
  76. package/src/cli/scaffolding/TemplateGenerator.js +172 -0
  77. package/src/cli/scaffolding/index.d.ts +1 -0
  78. package/src/cli/scaffolding/index.d.ts.map +1 -1
  79. package/src/cli/scaffolding/index.js +1 -0
  80. package/src/cli/utils/spawn.js +1 -1
  81. package/src/common/AwsSigV4.d.ts +41 -0
  82. package/src/common/AwsSigV4.d.ts.map +1 -0
  83. package/src/common/AwsSigV4.js +69 -0
  84. package/src/common/index.d.ts +39 -0
  85. package/src/common/index.d.ts.map +1 -1
  86. package/src/common/index.js +101 -8
  87. package/src/common/uuid.d.ts +3 -0
  88. package/src/common/uuid.d.ts.map +1 -0
  89. package/src/common/uuid.js +30 -0
  90. package/src/config/FileLogWriter.d.ts +22 -0
  91. package/src/config/FileLogWriter.d.ts.map +1 -0
  92. package/src/config/FileLogWriter.js +192 -0
  93. package/src/config/SecretsManager.d.ts.map +1 -1
  94. package/src/config/SecretsManager.js +37 -11
  95. package/src/config/StartupConfigValidator.d.ts +15 -0
  96. package/src/config/StartupConfigValidator.d.ts.map +1 -0
  97. package/src/config/StartupConfigValidator.js +86 -0
  98. package/src/config/app.d.ts +2 -1
  99. package/src/config/app.d.ts.map +1 -1
  100. package/src/config/app.js +65 -15
  101. package/src/config/broadcast.d.ts +47 -0
  102. package/src/config/broadcast.d.ts.map +1 -0
  103. package/src/config/broadcast.js +54 -0
  104. package/src/config/cache.d.ts +13 -17
  105. package/src/config/cache.d.ts.map +1 -1
  106. package/src/config/cache.js +9 -11
  107. package/src/config/cloudflare.d.ts +26 -0
  108. package/src/config/cloudflare.d.ts.map +1 -0
  109. package/src/config/cloudflare.js +38 -0
  110. package/src/config/env.d.ts +6 -0
  111. package/src/config/env.d.ts.map +1 -1
  112. package/src/config/env.js +6 -0
  113. package/src/config/index.d.ts +52 -28
  114. package/src/config/index.d.ts.map +1 -1
  115. package/src/config/index.js +3 -0
  116. package/src/config/logger.d.ts +2 -0
  117. package/src/config/logger.d.ts.map +1 -1
  118. package/src/config/logger.js +270 -11
  119. package/src/config/logging/HttpLogger.d.ts +23 -0
  120. package/src/config/logging/HttpLogger.d.ts.map +1 -0
  121. package/src/config/logging/HttpLogger.js +93 -0
  122. package/src/config/logging/KvLogger.d.ts +22 -0
  123. package/src/config/logging/KvLogger.d.ts.map +1 -0
  124. package/src/config/logging/KvLogger.js +143 -0
  125. package/src/config/logging/SlackLogger.d.ts +23 -0
  126. package/src/config/logging/SlackLogger.d.ts.map +1 -0
  127. package/src/config/logging/SlackLogger.js +119 -0
  128. package/src/config/mail.d.ts +81 -0
  129. package/src/config/mail.d.ts.map +1 -0
  130. package/src/config/mail.js +73 -0
  131. package/src/config/middleware.d.ts +8 -0
  132. package/src/config/middleware.d.ts.map +1 -0
  133. package/src/config/middleware.js +18 -0
  134. package/src/config/notification.d.ts +62 -0
  135. package/src/config/notification.d.ts.map +1 -0
  136. package/src/config/notification.js +43 -0
  137. package/src/config/security.d.ts.map +1 -1
  138. package/src/config/security.js +2 -2
  139. package/src/config/startup.d.ts +23 -0
  140. package/src/config/startup.d.ts.map +1 -0
  141. package/src/config/startup.js +15 -0
  142. package/src/config/storage.d.ts +21 -35
  143. package/src/config/storage.d.ts.map +1 -1
  144. package/src/config/storage.js +57 -37
  145. package/src/database/migrations/index.d.ts +1 -1
  146. package/src/database/migrations/index.d.ts.map +1 -1
  147. package/src/database/migrations/index.js +2 -1
  148. package/src/features/Queue.js +1 -25
  149. package/src/health/RuntimeHealthProbes.d.ts +13 -0
  150. package/src/health/RuntimeHealthProbes.d.ts.map +1 -0
  151. package/src/health/RuntimeHealthProbes.js +62 -0
  152. package/src/health/StartupHealthChecks.d.ts +26 -0
  153. package/src/health/StartupHealthChecks.d.ts.map +1 -0
  154. package/src/health/StartupHealthChecks.js +124 -0
  155. package/src/http/ErrorResponse.d.ts +28 -0
  156. package/src/http/ErrorResponse.d.ts.map +1 -0
  157. package/src/http/ErrorResponse.js +42 -0
  158. package/src/http/Kernel.d.ts +5 -0
  159. package/src/http/Kernel.d.ts.map +1 -1
  160. package/src/http/Kernel.js +96 -30
  161. package/src/http/RequestContext.d.ts +20 -0
  162. package/src/http/RequestContext.d.ts.map +1 -0
  163. package/src/http/RequestContext.js +77 -0
  164. package/src/index.d.ts +9 -1
  165. package/src/index.d.ts.map +1 -1
  166. package/src/index.js +8 -2
  167. package/src/microservices/MicroserviceManager.d.ts.map +1 -1
  168. package/src/microservices/MicroserviceManager.js +9 -6
  169. package/src/microservices/PostgresAdapter.d.ts.map +1 -1
  170. package/src/microservices/PostgresAdapter.js +3 -1
  171. package/src/microservices/ServiceBundler.d.ts.map +1 -1
  172. package/src/microservices/ServiceBundler.js +6 -4
  173. package/src/microservices/ServiceHealthMonitor.js +2 -2
  174. package/src/middleware/CsrfMiddleware.d.ts.map +1 -1
  175. package/src/middleware/CsrfMiddleware.js +2 -19
  176. package/src/middleware/ErrorHandlerMiddleware.d.ts +6 -0
  177. package/src/middleware/ErrorHandlerMiddleware.d.ts.map +1 -0
  178. package/src/middleware/ErrorHandlerMiddleware.js +33 -0
  179. package/src/middleware/LoggingMiddleware.d.ts +9 -0
  180. package/src/middleware/LoggingMiddleware.d.ts.map +1 -0
  181. package/src/middleware/LoggingMiddleware.js +36 -0
  182. package/src/middleware/index.d.ts +2 -0
  183. package/src/middleware/index.d.ts.map +1 -1
  184. package/src/middleware/index.js +2 -0
  185. package/src/node-singletons/async_hooks.d.ts +9 -0
  186. package/src/node-singletons/async_hooks.d.ts.map +1 -0
  187. package/src/node-singletons/async_hooks.js +8 -0
  188. package/src/node-singletons/fs.d.ts +2 -2
  189. package/src/node-singletons/fs.d.ts.map +1 -1
  190. package/src/node-singletons/fs.js +2 -2
  191. package/src/node-singletons/http.d.ts +1 -1
  192. package/src/node-singletons/http.d.ts.map +1 -1
  193. package/src/node-singletons/http.js +1 -1
  194. package/src/node-singletons/index.d.ts +4 -0
  195. package/src/node-singletons/index.d.ts.map +1 -1
  196. package/src/node-singletons/index.js +4 -0
  197. package/src/node-singletons/net.d.ts +9 -0
  198. package/src/node-singletons/net.d.ts.map +1 -0
  199. package/src/node-singletons/net.js +8 -0
  200. package/src/node-singletons/os.d.ts +3 -3
  201. package/src/node-singletons/os.d.ts.map +1 -1
  202. package/src/node-singletons/os.js +3 -4
  203. package/src/node-singletons/path.d.ts +3 -1
  204. package/src/node-singletons/path.d.ts.map +1 -1
  205. package/src/node-singletons/path.js +3 -1
  206. package/src/node-singletons/perf-hooks.d.ts +3 -1
  207. package/src/node-singletons/perf-hooks.d.ts.map +1 -1
  208. package/src/node-singletons/perf-hooks.js +3 -1
  209. package/src/node-singletons/process.d.ts +23 -0
  210. package/src/node-singletons/process.d.ts.map +1 -0
  211. package/src/node-singletons/process.js +8 -0
  212. package/src/node-singletons/readline.d.ts +3 -3
  213. package/src/node-singletons/readline.d.ts.map +1 -1
  214. package/src/node-singletons/readline.js +3 -4
  215. package/src/node-singletons/tls.d.ts +9 -0
  216. package/src/node-singletons/tls.d.ts.map +1 -0
  217. package/src/node-singletons/tls.js +8 -0
  218. package/src/node-singletons/url.d.ts +3 -1
  219. package/src/node-singletons/url.d.ts.map +1 -1
  220. package/src/node-singletons/url.js +3 -1
  221. package/src/orm/ConnectionManager.d.ts +6 -1
  222. package/src/orm/ConnectionManager.d.ts.map +1 -1
  223. package/src/orm/ConnectionManager.js +14 -0
  224. package/src/orm/DatabaseAdapter.d.ts +6 -0
  225. package/src/orm/DatabaseAdapter.d.ts.map +1 -1
  226. package/src/orm/QueryBuilder.d.ts +8 -1
  227. package/src/orm/QueryBuilder.d.ts.map +1 -1
  228. package/src/orm/QueryBuilder.js +188 -28
  229. package/src/orm/adapters/D1Adapter.d.ts.map +1 -1
  230. package/src/orm/adapters/D1Adapter.js +18 -12
  231. package/src/orm/adapters/MySQLAdapter.d.ts.map +1 -1
  232. package/src/orm/adapters/MySQLAdapter.js +4 -0
  233. package/src/orm/adapters/PostgreSQLAdapter.d.ts.map +1 -1
  234. package/src/orm/adapters/PostgreSQLAdapter.js +4 -0
  235. package/src/orm/adapters/SQLServerAdapter.d.ts.map +1 -1
  236. package/src/orm/adapters/SQLServerAdapter.js +4 -0
  237. package/src/orm/adapters/SQLiteAdapter.d.ts.map +1 -1
  238. package/src/orm/adapters/SQLiteAdapter.js +4 -0
  239. package/src/performance/CodeGenerationBenchmark.js +3 -3
  240. package/src/performance/Optimizer.d.ts +1 -1
  241. package/src/performance/Optimizer.d.ts.map +1 -1
  242. package/src/performance/Optimizer.js +150 -75
  243. package/src/performance/establish-baseline.js +3 -3
  244. package/src/runtime/PluginManager.d.ts +3 -1
  245. package/src/runtime/PluginManager.d.ts.map +1 -1
  246. package/src/runtime/PluginManager.js +124 -28
  247. package/src/runtime/RuntimeDetector.d.ts.map +1 -1
  248. package/src/runtime/RuntimeDetector.js +47 -6
  249. package/src/runtime/adapters/CloudflareAdapter.js +2 -2
  250. package/src/runtime/adapters/FargateAdapter.d.ts.map +1 -1
  251. package/src/runtime/adapters/FargateAdapter.js +2 -1
  252. package/src/runtime/adapters/LambdaAdapter.d.ts.map +1 -1
  253. package/src/runtime/adapters/LambdaAdapter.js +4 -2
  254. package/src/runtime/adapters/NodeServerAdapter.d.ts.map +1 -1
  255. package/src/runtime/adapters/NodeServerAdapter.js +2 -1
  256. package/src/scheduler/ScheduleRunner.d.ts +18 -0
  257. package/src/scheduler/ScheduleRunner.d.ts.map +1 -0
  258. package/src/scheduler/ScheduleRunner.js +155 -0
  259. package/src/scheduler/index.d.ts +3 -0
  260. package/src/scheduler/index.d.ts.map +1 -0
  261. package/src/scheduler/index.js +1 -0
  262. package/src/scheduler/types.d.ts +16 -0
  263. package/src/scheduler/types.d.ts.map +1 -0
  264. package/src/scheduler/types.js +4 -0
  265. package/src/schedules/index.d.ts +2 -0
  266. package/src/schedules/index.d.ts.map +1 -0
  267. package/src/schedules/index.js +1 -0
  268. package/src/schedules/log-cleanup.d.ts +4 -0
  269. package/src/schedules/log-cleanup.d.ts.map +1 -0
  270. package/src/schedules/log-cleanup.js +18 -0
  271. package/src/scripts/GenerateEnvArtifacts.d.ts +13 -0
  272. package/src/scripts/GenerateEnvArtifacts.d.ts.map +1 -0
  273. package/src/scripts/GenerateEnvArtifacts.js +171 -0
  274. package/src/scripts/TemplateSync.js +109 -70
  275. package/src/security/CsrfTokenManager.js +1 -1
  276. package/src/security/Encryptor.js +1 -1
  277. package/src/security/Hash.d.ts +14 -0
  278. package/src/security/Hash.d.ts.map +1 -0
  279. package/src/security/Hash.js +81 -0
  280. package/src/security/StartupSecretValidation.d.ts +20 -0
  281. package/src/security/StartupSecretValidation.d.ts.map +1 -0
  282. package/src/security/StartupSecretValidation.js +61 -0
  283. package/src/security/UrlValidator.d.ts +0 -1
  284. package/src/security/UrlValidator.d.ts.map +1 -1
  285. package/src/security/UrlValidator.js +1 -2
  286. package/src/security/Xss.d.ts +14 -0
  287. package/src/security/Xss.d.ts.map +1 -0
  288. package/src/security/Xss.js +57 -0
  289. package/src/security/XssProtection.d.ts.map +1 -1
  290. package/src/security/XssProtection.js +155 -17
  291. package/src/templates/adapters/MySQLAdapter.ts.tpl +5 -0
  292. package/src/templates/adapters/PostgreSQLAdapter.ts.tpl +5 -0
  293. package/src/templates/adapters/SQLServerAdapter.ts.tpl +5 -0
  294. package/src/templates/adapters/SQLiteAdapter.ts.tpl +5 -0
  295. package/src/templates/features/Queue.ts.tpl +1 -29
  296. package/src/templates/project/basic/.env.example.tpl +48 -0
  297. package/src/templates/project/basic/.env.tpl +89 -94
  298. package/src/templates/project/basic/app/Toolkit/Broadcast/sendBroadcast.ts.tpl +7 -0
  299. package/src/templates/project/basic/app/Toolkit/Mail/sendWelcomeEmail.ts.tpl +30 -0
  300. package/src/templates/project/basic/app/Toolkit/Notification/sendSlackNotification.ts.tpl +10 -0
  301. package/src/templates/project/basic/app/Toolkit/Notification/sendSms.ts.tpl +13 -0
  302. package/src/templates/project/basic/config/FileLogWriter.ts.tpl +240 -0
  303. package/src/templates/project/basic/config/SecretsManager.ts.tpl +44 -21
  304. package/src/templates/project/basic/config/StartupConfigValidator.ts.tpl +151 -0
  305. package/src/templates/project/basic/config/app.ts.tpl +84 -15
  306. package/src/templates/project/basic/config/broadcast.ts.tpl +97 -0
  307. package/src/templates/project/basic/config/cache.ts.tpl +19 -23
  308. package/src/templates/project/basic/config/cloudflare.ts.tpl +57 -0
  309. package/src/templates/project/basic/config/env.ts.tpl +7 -1
  310. package/src/templates/project/basic/config/index.ts.tpl +3 -0
  311. package/src/templates/project/basic/config/logger.ts.tpl +301 -11
  312. package/src/templates/project/basic/config/logging/HttpLogger.ts.tpl +121 -0
  313. package/src/templates/project/basic/config/logging/KvLogger.ts.tpl +181 -0
  314. package/src/templates/project/basic/config/logging/SlackLogger.ts.tpl +156 -0
  315. package/src/templates/project/basic/config/mail.ts.tpl +141 -0
  316. package/src/templates/project/basic/config/middleware.ts.tpl +27 -0
  317. package/src/templates/project/basic/config/notification.ts.tpl +86 -0
  318. package/src/templates/project/basic/config/security.ts.tpl +4 -5
  319. package/src/templates/project/basic/config/startup.ts.tpl +27 -0
  320. package/src/templates/project/basic/config/storage.ts.tpl +77 -42
  321. package/src/templates/project/basic/database/migrations/index.ts.tpl +1 -1
  322. package/src/templates/project/basic/package.json.tpl +1 -1
  323. package/src/templates/project/basic/routes/api.ts.tpl +11 -37
  324. package/src/templates/project/basic/routes/broadcast.ts.tpl +32 -0
  325. package/src/templates/project/basic/routes/health.ts.tpl +134 -0
  326. package/src/templates/project/basic/routes/storage.ts.tpl +42 -0
  327. package/src/templates/project/basic/src/index.ts.tpl +38 -11
  328. package/src/templates/project/basic/template.json +3 -0
  329. package/src/toolkit/Secrets/EnvFile.d.ts +15 -0
  330. package/src/toolkit/Secrets/EnvFile.d.ts.map +1 -0
  331. package/src/toolkit/Secrets/EnvFile.js +63 -0
  332. package/src/toolkit/Secrets/Manifest.d.ts +24 -0
  333. package/src/toolkit/Secrets/Manifest.d.ts.map +1 -0
  334. package/src/toolkit/Secrets/Manifest.js +71 -0
  335. package/src/toolkit/Secrets/index.d.ts +42 -0
  336. package/src/toolkit/Secrets/index.d.ts.map +1 -0
  337. package/src/toolkit/Secrets/index.js +119 -0
  338. package/src/toolkit/Secrets/providers/AwsSecretsManager.d.ts +14 -0
  339. package/src/toolkit/Secrets/providers/AwsSecretsManager.d.ts.map +1 -0
  340. package/src/toolkit/Secrets/providers/AwsSecretsManager.js +131 -0
  341. package/src/toolkit/Secrets/providers/CloudflareKv.d.ts +9 -0
  342. package/src/toolkit/Secrets/providers/CloudflareKv.d.ts.map +1 -0
  343. package/src/toolkit/Secrets/providers/CloudflareKv.js +73 -0
  344. package/src/tools/broadcast/Broadcast.d.ts +7 -0
  345. package/src/tools/broadcast/Broadcast.d.ts.map +1 -0
  346. package/src/tools/broadcast/Broadcast.js +37 -0
  347. package/src/tools/broadcast/drivers/BaseDriver.d.ts +5 -0
  348. package/src/tools/broadcast/drivers/BaseDriver.d.ts.map +1 -0
  349. package/src/tools/broadcast/drivers/BaseDriver.js +8 -0
  350. package/src/tools/broadcast/drivers/InMemory.d.ts +18 -0
  351. package/src/tools/broadcast/drivers/InMemory.d.ts.map +1 -0
  352. package/src/tools/broadcast/drivers/InMemory.js +16 -0
  353. package/src/tools/broadcast/drivers/Pusher.d.ts +8 -0
  354. package/src/tools/broadcast/drivers/Pusher.d.ts.map +1 -0
  355. package/src/tools/broadcast/drivers/Pusher.js +75 -0
  356. package/src/tools/broadcast/drivers/Redis.d.ts +19 -0
  357. package/src/tools/broadcast/drivers/Redis.d.ts.map +1 -0
  358. package/src/tools/broadcast/drivers/Redis.js +73 -0
  359. package/src/tools/broadcast/drivers/RedisHttps.d.ts +14 -0
  360. package/src/tools/broadcast/drivers/RedisHttps.d.ts.map +1 -0
  361. package/src/tools/broadcast/drivers/RedisHttps.js +50 -0
  362. package/src/tools/broadcast/index.d.ts +7 -0
  363. package/src/tools/broadcast/index.d.ts.map +1 -0
  364. package/src/tools/broadcast/index.js +6 -0
  365. package/src/tools/http/Http.d.ts +49 -0
  366. package/src/tools/http/Http.d.ts.map +1 -0
  367. package/src/tools/http/Http.js +169 -0
  368. package/src/tools/http/HttpResponse.d.ts +32 -0
  369. package/src/tools/http/HttpResponse.d.ts.map +1 -0
  370. package/src/tools/http/HttpResponse.js +80 -0
  371. package/src/tools/http/index.d.ts +15 -0
  372. package/src/tools/http/index.d.ts.map +1 -0
  373. package/src/tools/http/index.js +9 -0
  374. package/src/tools/mail/Mail.d.ts +22 -0
  375. package/src/tools/mail/Mail.d.ts.map +1 -0
  376. package/src/tools/mail/Mail.js +105 -0
  377. package/src/tools/mail/attachments.d.ts +23 -0
  378. package/src/tools/mail/attachments.d.ts.map +1 -0
  379. package/src/tools/mail/attachments.js +26 -0
  380. package/src/tools/mail/drivers/BaseDriver.d.ts +5 -0
  381. package/src/tools/mail/drivers/BaseDriver.d.ts.map +1 -0
  382. package/src/tools/mail/drivers/BaseDriver.js +8 -0
  383. package/src/tools/mail/drivers/Mailgun.d.ts +31 -0
  384. package/src/tools/mail/drivers/Mailgun.d.ts.map +1 -0
  385. package/src/tools/mail/drivers/Mailgun.js +81 -0
  386. package/src/tools/mail/drivers/SendGrid.d.ts +29 -0
  387. package/src/tools/mail/drivers/SendGrid.d.ts.map +1 -0
  388. package/src/tools/mail/drivers/SendGrid.js +57 -0
  389. package/src/tools/mail/drivers/Ses.d.ts +24 -0
  390. package/src/tools/mail/drivers/Ses.d.ts.map +1 -0
  391. package/src/tools/mail/drivers/Ses.js +116 -0
  392. package/src/tools/mail/drivers/Smtp.d.ts +38 -0
  393. package/src/tools/mail/drivers/Smtp.d.ts.map +1 -0
  394. package/src/tools/mail/drivers/Smtp.js +327 -0
  395. package/src/tools/mail/templates/index.d.ts +27 -0
  396. package/src/tools/mail/templates/index.d.ts.map +1 -0
  397. package/src/tools/mail/templates/index.js +35 -0
  398. package/src/tools/mail/templates/markdown/index.d.ts +17 -0
  399. package/src/tools/mail/templates/markdown/index.d.ts.map +1 -0
  400. package/src/tools/mail/templates/markdown/index.js +49 -0
  401. package/src/tools/mail/templates/markdown/registry.d.ts +15 -0
  402. package/src/tools/mail/templates/markdown/registry.d.ts.map +1 -0
  403. package/src/tools/mail/templates/markdown/registry.js +34 -0
  404. package/src/tools/mail/templates/markdown/validator.d.ts +16 -0
  405. package/src/tools/mail/templates/markdown/validator.d.ts.map +1 -0
  406. package/src/tools/mail/templates/markdown/validator.js +24 -0
  407. package/src/tools/mail/testing.d.ts +41 -0
  408. package/src/tools/mail/testing.d.ts.map +1 -0
  409. package/src/tools/mail/testing.js +34 -0
  410. package/src/tools/notification/Driver.d.ts +11 -0
  411. package/src/tools/notification/Driver.d.ts.map +1 -0
  412. package/src/tools/notification/Driver.js +1 -0
  413. package/src/tools/notification/Notification.d.ts +11 -0
  414. package/src/tools/notification/Notification.d.ts.map +1 -0
  415. package/src/tools/notification/Notification.js +11 -0
  416. package/src/tools/notification/Registry.d.ts +10 -0
  417. package/src/tools/notification/Registry.d.ts.map +1 -0
  418. package/src/tools/notification/Registry.js +22 -0
  419. package/src/tools/notification/Service.d.ts +6 -0
  420. package/src/tools/notification/Service.d.ts.map +1 -0
  421. package/src/tools/notification/Service.js +18 -0
  422. package/src/tools/notification/config.d.ts +5 -0
  423. package/src/tools/notification/config.d.ts.map +1 -0
  424. package/src/tools/notification/config.js +5 -0
  425. package/src/tools/notification/drivers/BaseDriver.d.ts +5 -0
  426. package/src/tools/notification/drivers/BaseDriver.d.ts.map +1 -0
  427. package/src/tools/notification/drivers/BaseDriver.js +8 -0
  428. package/src/tools/notification/drivers/Console.d.ts +7 -0
  429. package/src/tools/notification/drivers/Console.d.ts.map +1 -0
  430. package/src/tools/notification/drivers/Console.js +13 -0
  431. package/src/tools/notification/drivers/Slack.d.ts +16 -0
  432. package/src/tools/notification/drivers/Slack.d.ts.map +1 -0
  433. package/src/tools/notification/drivers/Slack.js +24 -0
  434. package/src/tools/notification/drivers/Termii.d.ts +10 -0
  435. package/src/tools/notification/drivers/Termii.d.ts.map +1 -0
  436. package/src/tools/notification/drivers/Termii.js +47 -0
  437. package/src/tools/notification/drivers/Twilio.d.ts +21 -0
  438. package/src/tools/notification/drivers/Twilio.d.ts.map +1 -0
  439. package/src/tools/notification/drivers/Twilio.js +48 -0
  440. package/src/tools/notification/templates/markdown/index.d.ts +15 -0
  441. package/src/tools/notification/templates/markdown/index.d.ts.map +1 -0
  442. package/src/tools/notification/templates/markdown/index.js +38 -0
  443. package/src/tools/notification/templates/markdown/registry.d.ts +15 -0
  444. package/src/tools/notification/templates/markdown/registry.d.ts.map +1 -0
  445. package/src/tools/notification/templates/markdown/registry.js +36 -0
  446. package/src/tools/notification/testing.d.ts +19 -0
  447. package/src/tools/notification/testing.d.ts.map +1 -0
  448. package/src/tools/notification/testing.js +35 -0
  449. package/src/tools/notification/testingHelpers.d.ts +12 -0
  450. package/src/tools/notification/testingHelpers.d.ts.map +1 -0
  451. package/src/tools/notification/testingHelpers.js +32 -0
  452. package/src/tools/queue/Queue.d.ts +23 -0
  453. package/src/tools/queue/Queue.d.ts.map +1 -0
  454. package/src/tools/queue/Queue.js +38 -0
  455. package/src/tools/queue/drivers/InMemory.d.ts +10 -0
  456. package/src/tools/queue/drivers/InMemory.d.ts.map +1 -0
  457. package/src/tools/queue/drivers/InMemory.js +55 -0
  458. package/src/tools/queue/drivers/Redis.d.ts +10 -0
  459. package/src/tools/queue/drivers/Redis.d.ts.map +1 -0
  460. package/src/tools/queue/drivers/Redis.js +91 -0
  461. package/src/tools/storage/LocalSignedUrl.d.ts +12 -0
  462. package/src/tools/storage/LocalSignedUrl.d.ts.map +1 -0
  463. package/src/tools/storage/LocalSignedUrl.js +108 -0
  464. package/src/tools/storage/drivers/Gcs.d.ts +20 -0
  465. package/src/tools/storage/drivers/Gcs.d.ts.map +1 -0
  466. package/src/tools/storage/drivers/Gcs.js +152 -0
  467. package/src/tools/storage/drivers/Local.d.ts +18 -0
  468. package/src/tools/storage/drivers/Local.d.ts.map +1 -0
  469. package/src/tools/storage/drivers/Local.js +89 -0
  470. package/src/tools/storage/drivers/R2.d.ts +20 -0
  471. package/src/tools/storage/drivers/R2.d.ts.map +1 -0
  472. package/src/tools/storage/drivers/R2.js +73 -0
  473. package/src/tools/storage/drivers/S3.d.ts +26 -0
  474. package/src/tools/storage/drivers/S3.d.ts.map +1 -0
  475. package/src/tools/storage/drivers/S3.js +258 -0
  476. package/src/tools/storage/index.d.ts +24 -0
  477. package/src/tools/storage/index.d.ts.map +1 -0
  478. package/src/tools/storage/index.js +111 -0
  479. package/src/tools/storage/testing.d.ts +23 -0
  480. package/src/tools/storage/testing.d.ts.map +1 -0
  481. package/src/tools/storage/testing.js +52 -0
  482. package/src/tools/templates/MarkdownRenderer.d.ts +14 -0
  483. package/src/tools/templates/MarkdownRenderer.d.ts.map +1 -0
  484. package/src/tools/templates/MarkdownRenderer.js +300 -0
  485. package/src/tools/templates/index.d.ts +5 -0
  486. package/src/tools/templates/index.d.ts.map +1 -0
  487. package/src/tools/templates/index.js +4 -0
@@ -0,0 +1,192 @@
1
+ /**
2
+ * FileLogWriter (Node.js only)
3
+ *
4
+ * Provides best-effort file logging with daily + size-based rotation.
5
+ * This module imports Node built-ins and should be loaded only in Node environments.
6
+ */
7
+ import { ensureDirSafe } from '../common/index';
8
+ import { Env } from './env';
9
+ import * as fs from '../node-singletons/fs';
10
+ import * as path from '../node-singletons/path';
11
+ const getCwdSafe = () => {
12
+ try {
13
+ if (typeof process === 'undefined' || typeof process.cwd !== 'function')
14
+ return '';
15
+ return process.cwd();
16
+ }
17
+ catch {
18
+ return '';
19
+ }
20
+ };
21
+ const getDateStr = (d) => d.toISOString().slice(0, 10);
22
+ const isAppLogFile = (fileName) => fileName.startsWith('app-') && fileName.endsWith('.log');
23
+ const parseDateFromLogFilename = (fileName) => {
24
+ const match = /^app-(\d{4}-\d{2}-\d{2})(?:-\d+)?\.log$/.exec(fileName);
25
+ if (match?.[1] === undefined)
26
+ return null;
27
+ const parsed = Date.parse(`${match[1]}T00:00:00.000Z`);
28
+ return Number.isNaN(parsed) ? null : parsed;
29
+ };
30
+ const isOlderThanCutoffByMtime = (fullPath, cutoff) => {
31
+ try {
32
+ const stat = fs.statSync(fullPath);
33
+ return stat.mtime.getTime() < cutoff;
34
+ }
35
+ catch {
36
+ return false;
37
+ }
38
+ };
39
+ const safeUnlink = (fullPath) => {
40
+ try {
41
+ fs.unlinkSync(fullPath);
42
+ }
43
+ catch {
44
+ // best-effort
45
+ }
46
+ };
47
+ const readDirSafe = (dirPath) => {
48
+ try {
49
+ return fs.readdirSync(dirPath);
50
+ }
51
+ catch {
52
+ return [];
53
+ }
54
+ };
55
+ const shouldDeleteLogFile = (fileName, fullPath, cutoff) => {
56
+ const parsed = parseDateFromLogFilename(fileName);
57
+ if (parsed !== null)
58
+ return parsed < cutoff;
59
+ return isOlderThanCutoffByMtime(fullPath, cutoff);
60
+ };
61
+ const cleanupOldLogs = (logsDir, keepDays) => {
62
+ if (keepDays <= 0)
63
+ return;
64
+ const cutoff = Date.now() - keepDays * 24 * 60 * 60 * 1000;
65
+ const files = readDirSafe(logsDir);
66
+ if (files.length === 0)
67
+ return;
68
+ for (const fileName of files) {
69
+ if (!isAppLogFile(fileName))
70
+ continue;
71
+ const fullPath = path.join(logsDir, fileName);
72
+ if (!shouldDeleteLogFile(fileName, fullPath, cutoff))
73
+ continue;
74
+ safeUnlink(fullPath);
75
+ }
76
+ };
77
+ const listAppLogFiles = (logsDir, order) => {
78
+ const files = readDirSafe(logsDir)
79
+ .filter((f) => isAppLogFile(f))
80
+ .map((f) => ({ name: f, path: path.join(logsDir, f) }));
81
+ return files.sort((a, b) => {
82
+ if (a.name === b.name)
83
+ return 0;
84
+ const newerFirst = a.name < b.name ? 1 : -1;
85
+ return order === 'newest-first' ? newerFirst : -newerFirst;
86
+ });
87
+ };
88
+ const enforceKeepFilesPolicy = (filesNewestFirst, keepFiles, deleted) => {
89
+ if (typeof keepFiles !== 'number' || keepFiles < 0)
90
+ return;
91
+ if (filesNewestFirst.length <= keepFiles)
92
+ return;
93
+ const toDelete = filesNewestFirst.slice(keepFiles);
94
+ for (const f of toDelete) {
95
+ safeUnlink(f.path);
96
+ deleted.push(f.path);
97
+ }
98
+ };
99
+ const getFileSizesTotal = (filesOldestFirst) => {
100
+ let total = 0;
101
+ const sizes = [];
102
+ for (const file of filesOldestFirst) {
103
+ try {
104
+ const stat = fs.statSync(file.path);
105
+ sizes.push({ path: file.path, size: stat.size });
106
+ total += stat.size;
107
+ }
108
+ catch {
109
+ // ignore
110
+ }
111
+ }
112
+ return { total, sizes };
113
+ };
114
+ const deleteOldestUntilWithinLimit = (sizesOldestFirst, maxTotalSize, deleted, initialTotal) => {
115
+ let total = initialTotal;
116
+ let idx = 0;
117
+ while (total > maxTotalSize && idx < sizesOldestFirst.length) {
118
+ const del = sizesOldestFirst[idx];
119
+ safeUnlink(del.path);
120
+ deleted.push(del.path);
121
+ total -= del.size;
122
+ idx++;
123
+ }
124
+ };
125
+ const enforceMaxTotalSizePolicy = (logsDir, maxTotalSize, deleted) => {
126
+ if (typeof maxTotalSize !== 'number' || maxTotalSize <= 0)
127
+ return;
128
+ const remainingOldestFirst = listAppLogFiles(logsDir, 'oldest-first');
129
+ const { total, sizes } = getFileSizesTotal(remainingOldestFirst);
130
+ deleteOldestUntilWithinLimit(sizes, maxTotalSize, deleted, total);
131
+ };
132
+ /**
133
+ * Clean log files with additional retention policies.
134
+ * Returns an array of deleted file paths for auditing/tests.
135
+ */
136
+ export const cleanOnce = (options) => {
137
+ const cwd = getCwdSafe();
138
+ if (cwd === '')
139
+ return [];
140
+ const logsDir = options?.logsDir ?? path.join(cwd, 'logs');
141
+ const keepDays = options?.keepDays ?? Env.LOG_ROTATION_DAYS;
142
+ const maxTotalSize = options?.maxTotalSize ?? Env.getInt('LOG_MAX_TOTAL_SIZE', 0);
143
+ const keepFiles = options?.keepFiles ?? Env.getInt('LOG_KEEP_FILES', 0);
144
+ // Step 1: delete by age
145
+ cleanupOldLogs(logsDir, keepDays);
146
+ const deleted = [];
147
+ // Step 2: enforce keepFiles (keep newest N files)
148
+ const filesNewestFirst = listAppLogFiles(logsDir, 'newest-first');
149
+ enforceKeepFilesPolicy(filesNewestFirst, keepFiles, deleted);
150
+ // Step 3: enforce max total size
151
+ enforceMaxTotalSizePolicy(logsDir, maxTotalSize, deleted);
152
+ return deleted;
153
+ };
154
+ const rotateIfNeeded = (logFile, maxSizeBytes) => {
155
+ if (maxSizeBytes <= 0)
156
+ return;
157
+ try {
158
+ if (!fs.existsSync(logFile))
159
+ return;
160
+ const stat = fs.statSync(logFile);
161
+ if (stat.size <= maxSizeBytes)
162
+ return;
163
+ const ext = '.log';
164
+ const base = logFile.endsWith(ext) ? logFile.slice(0, -ext.length) : logFile;
165
+ const rotated = `${base}-${Date.now()}${ext}`;
166
+ fs.renameSync(logFile, rotated);
167
+ }
168
+ catch {
169
+ // best-effort
170
+ }
171
+ };
172
+ export const FileLogWriter = Object.freeze({
173
+ write(line) {
174
+ const cwd = getCwdSafe();
175
+ if (cwd === '')
176
+ return;
177
+ const logsDir = path.join(cwd, 'logs');
178
+ ensureDirSafe(logsDir);
179
+ const dateStr = getDateStr(new Date());
180
+ const logFile = path.join(logsDir, `app-${dateStr}.log`);
181
+ rotateIfNeeded(logFile, Env.LOG_ROTATION_SIZE);
182
+ try {
183
+ fs.appendFileSync(logFile, `${line}\n`);
184
+ }
185
+ catch {
186
+ // best-effort
187
+ return;
188
+ }
189
+ cleanupOldLogs(logsDir, Env.LOG_ROTATION_DAYS);
190
+ },
191
+ });
192
+ export default FileLogWriter;
@@ -1 +1 @@
1
- {"version":3,"file":"SecretsManager.d.ts","sourceRoot":"","sources":["../../../src/config/SecretsManager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACzC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrF,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAAE,CAAC,CAAC;CAC5E;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,KAAK,GAAG,YAAY,GAAG,MAAM,GAAG,OAAO,CAAC;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,YAAY,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAID,UAAU,sBAAsB;IAC9B,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACpE,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjF,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACjD,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAuRD;;;GAGG;AACH,eAAO,MAAM,cAAc;IACzB;;OAEG;yBACkB,YAAY,GAAG,sBAAsB;IAY1D;;OAEG;mBACkB,MAAM,YAAY,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IAIzE;;OAEG;mBACkB,MAAM,SAAS,MAAM,YAAY,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAItF;;OAEG;sBACqB,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9C;;OAEG;sBACqB,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9C;;OAEG;0BACyB,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAItD;;OAEG;qBACc,MAAM,GAAG,IAAI;EAG9B,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;EA0BT,CAAC;AAEZ,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAU3E;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,CAOzD;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;CACvB"}
1
+ {"version":3,"file":"SecretsManager.d.ts","sourceRoot":"","sources":["../../../src/config/SecretsManager.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,22 @@
6
6
  import { Logger } from './logger';
7
7
  import { ErrorFactory } from '../exceptions/ZintrustError';
8
8
  let instance;
9
+ function pruneCache(cache, maxEntries) {
10
+ if (cache.size <= maxEntries)
11
+ return;
12
+ const now = Date.now();
13
+ for (const [key, entry] of cache.entries()) {
14
+ if (entry.expiresAt <= now)
15
+ cache.delete(key);
16
+ }
17
+ // If still large, drop oldest entries (Map preserves insertion order)
18
+ while (cache.size > maxEntries) {
19
+ const next = cache.keys().next();
20
+ if (next.done === true)
21
+ break;
22
+ cache.delete(next.value);
23
+ }
24
+ }
9
25
  /**
10
26
  * Get secret value from appropriate backend
11
27
  */
@@ -15,6 +31,8 @@ async function runGetSecret(config, cache, key, options) {
15
31
  if (cached !== undefined && cached.expiresAt > Date.now()) {
16
32
  return cached.value;
17
33
  }
34
+ // Opportunistic cleanup if cache has grown
35
+ pruneCache(cache, 500);
18
36
  let value;
19
37
  switch (config.platform) {
20
38
  case 'aws':
@@ -36,6 +54,7 @@ async function runGetSecret(config, cache, key, options) {
36
54
  value,
37
55
  expiresAt: Date.now() + ttl,
38
56
  });
57
+ pruneCache(cache, 500);
39
58
  return value;
40
59
  }
41
60
  /**
@@ -109,12 +128,13 @@ const SecretsManagerImpl = {
109
128
  /**
110
129
  * Rotate secret (trigger new secret generation)
111
130
  */
131
+ // eslint-disable-next-line @typescript-eslint/require-await
112
132
  async rotateSecret(_key) {
113
133
  if (config.platform === 'aws') {
114
134
  // AWS Secrets Manager supports automatic rotation
115
- return Promise.reject(ErrorFactory.createConfigError('Secret rotation not implemented'));
135
+ throw ErrorFactory.createConfigError('Secret rotation not implemented');
116
136
  }
117
- return Promise.reject(ErrorFactory.createConfigError('Secret rotation not supported on this platform'));
137
+ throw ErrorFactory.createConfigError('Secret rotation not supported on this platform');
118
138
  },
119
139
  /**
120
140
  * Get all secrets matching pattern
@@ -128,7 +148,7 @@ const SecretsManagerImpl = {
128
148
  case 'deno':
129
149
  case 'local':
130
150
  default:
131
- return Promise.resolve([]);
151
+ return [];
132
152
  }
133
153
  },
134
154
  /**
@@ -148,26 +168,30 @@ const SecretsManagerImpl = {
148
168
  /**
149
169
  * AWS Secrets Manager integration
150
170
  */
171
+ // eslint-disable-next-line @typescript-eslint/require-await
151
172
  async function getFromAWSSecretsManager(key) {
152
173
  try {
153
174
  Logger.debug(`[AWS] Getting secret: ${key}`);
154
175
  throw ErrorFactory.createConfigError('AWS SDK not available in core - use wrapper module');
155
176
  }
156
177
  catch (error) {
157
- return Promise.reject(ErrorFactory.createTryCatchError(`Failed to retrieve secret from AWS: ${error.message}`, error));
178
+ throw ErrorFactory.createTryCatchError(`Failed to retrieve secret from AWS: ${error.message}`, error);
158
179
  }
159
180
  }
181
+ // eslint-disable-next-line @typescript-eslint/require-await
160
182
  async function setInAWSSecretsManager(key, _value, _options) {
161
183
  Logger.info(`[AWS] Setting secret: ${key}`);
162
- return Promise.reject(ErrorFactory.createConfigError('AWS SDK not available in core - use wrapper module'));
184
+ throw ErrorFactory.createConfigError('AWS SDK not available in core - use wrapper module');
163
185
  }
186
+ // eslint-disable-next-line @typescript-eslint/require-await
164
187
  async function deleteFromAWSSecretsManager(key) {
165
188
  Logger.info(`[AWS] Deleting secret: ${key}`);
166
- return Promise.reject(ErrorFactory.createConfigError('AWS SDK not available in core - use wrapper module'));
189
+ throw ErrorFactory.createConfigError('AWS SDK not available in core - use wrapper module');
167
190
  }
191
+ // eslint-disable-next-line @typescript-eslint/require-await
168
192
  async function listFromAWSSecretsManager(pattern) {
169
193
  Logger.info(`[AWS] Listing secrets with pattern: ${pattern ?? '*'}`);
170
- return Promise.resolve([]);
194
+ return [];
171
195
  }
172
196
  /**
173
197
  * Cloudflare KV integration
@@ -205,22 +229,24 @@ async function listFromCloudflareKV(config, pattern) {
205
229
  /**
206
230
  * Deno environment integration
207
231
  */
232
+ // eslint-disable-next-line @typescript-eslint/require-await
208
233
  async function getFromDenoEnv(key) {
209
234
  const value = globalThis['Deno']?.env?.get?.(key);
210
235
  if (value === undefined || value === null || value === '') {
211
- return Promise.reject(ErrorFactory.createNotFoundError(`Secret not found: ${key}`, { key }));
236
+ throw ErrorFactory.createNotFoundError(`Secret not found: ${key}`, { key });
212
237
  }
213
- return Promise.resolve(value);
238
+ return value;
214
239
  }
215
240
  /**
216
241
  * Local environment variables (Node.js)
217
242
  */
243
+ // eslint-disable-next-line @typescript-eslint/require-await
218
244
  async function getFromEnv(key) {
219
245
  const value = process.env[key];
220
246
  if (value === undefined || value === null || value === '') {
221
- return Promise.reject(ErrorFactory.createNotFoundError(`Secret not found: ${key}`, { key }));
247
+ throw ErrorFactory.createNotFoundError(`Secret not found: ${key}`, { key });
222
248
  }
223
- return Promise.resolve(value);
249
+ return value;
224
250
  }
225
251
  /**
226
252
  * SecretsManager - Unified interface for retrieving secrets
@@ -0,0 +1,15 @@
1
+ export type StartupConfigValidationError = {
2
+ key: string;
3
+ value: unknown;
4
+ message: string;
5
+ };
6
+ export type StartupConfigValidationResult = {
7
+ valid: boolean;
8
+ errors: StartupConfigValidationError[];
9
+ };
10
+ export declare const StartupConfigValidator: Readonly<{
11
+ validate(): StartupConfigValidationResult;
12
+ assertValid(): void;
13
+ }>;
14
+ export default StartupConfigValidator;
15
+ //# sourceMappingURL=StartupConfigValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StartupConfigValidator.d.ts","sourceRoot":"","sources":["../../../src/config/StartupConfigValidator.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,4BAA4B,GAAG;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,4BAA4B,EAAE,CAAC;CACxC,CAAC;AAwFF,eAAO,MAAM,sBAAsB;gBACrB,6BAA6B;mBAuC1B,IAAI;EAQnB,CAAC;AAEH,eAAe,sBAAsB,CAAC"}
@@ -0,0 +1,86 @@
1
+ import { appConfig } from './app';
2
+ import { ErrorFactory } from '../exceptions/ZintrustError';
3
+ const isSensitiveKey = (key) => {
4
+ const normalized = key.toLowerCase();
5
+ return (normalized.includes('password') ||
6
+ normalized.includes('secret') ||
7
+ normalized.includes('token') ||
8
+ normalized.includes('key') ||
9
+ normalized.includes('authorization'));
10
+ };
11
+ const redactValue = (key, value) => {
12
+ return isSensitiveKey(key) ? '<redacted>' : value;
13
+ };
14
+ const pushError = (errors, key, value, message) => {
15
+ errors.push({ key, value: redactValue(key, value), message });
16
+ };
17
+ const validateEnum = (errors, key, value, allowed) => {
18
+ if (!allowed.includes(value)) {
19
+ pushError(errors, key, value, `${key} must be one of: ${allowed.join(', ')}`);
20
+ }
21
+ };
22
+ const validateIntRange = (errors, key, value, min, max) => {
23
+ if (Number.isNaN(value)) {
24
+ pushError(errors, key, value, `${key} must be a valid integer`);
25
+ return;
26
+ }
27
+ if (value < min || value > max) {
28
+ pushError(errors, key, value, `${key} must be between ${min} and ${max}`);
29
+ }
30
+ };
31
+ const validatePositiveInt = (errors, key, value) => {
32
+ if (Number.isNaN(value)) {
33
+ pushError(errors, key, value, `${key} must be a valid integer`);
34
+ return;
35
+ }
36
+ if (value <= 0) {
37
+ pushError(errors, key, value, `${key} must be greater than 0`);
38
+ }
39
+ };
40
+ const getProcessLike = () => {
41
+ return typeof process === 'undefined' ? undefined : process;
42
+ };
43
+ const getEnvString = (key, defaultValue) => {
44
+ const proc = getProcessLike();
45
+ const env = proc?.env ?? {};
46
+ return env[key] ?? defaultValue;
47
+ };
48
+ const getEnvInt = (key, defaultValue) => {
49
+ const raw = getEnvString(key, String(defaultValue));
50
+ return Number.parseInt(raw, 10);
51
+ };
52
+ export const StartupConfigValidator = Object.freeze({
53
+ validate() {
54
+ const errors = [];
55
+ const nodeEnv = getEnvString('NODE_ENV', 'development');
56
+ validateEnum(errors, 'NODE_ENV', nodeEnv, ['development', 'production', 'testing', 'test']);
57
+ const appPort = getEnvInt('APP_PORT', 3000);
58
+ validateIntRange(errors, 'APP_PORT', appPort, 1, 65535);
59
+ const logFormat = getEnvString('LOG_FORMAT', 'text');
60
+ validateEnum(errors, 'LOG_FORMAT', logFormat, ['text', 'json']);
61
+ const logLevel = getEnvString('LOG_LEVEL', 'debug');
62
+ validateEnum(errors, 'LOG_LEVEL', logLevel, ['debug', 'info', 'warn', 'error']);
63
+ const logRotationSize = getEnvInt('LOG_ROTATION_SIZE', 10485760);
64
+ validatePositiveInt(errors, 'LOG_ROTATION_SIZE', logRotationSize);
65
+ const logRotationDays = getEnvInt('LOG_ROTATION_DAYS', 7);
66
+ validatePositiveInt(errors, 'LOG_ROTATION_DAYS', logRotationDays);
67
+ const startupHealthTimeoutMs = getEnvInt('STARTUP_HEALTH_TIMEOUT_MS', 2500);
68
+ validatePositiveInt(errors, 'STARTUP_HEALTH_TIMEOUT_MS', startupHealthTimeoutMs);
69
+ if (appConfig.isProduction()) {
70
+ const appKey = getEnvString('APP_KEY', '');
71
+ if (appKey.trim().length < 16) {
72
+ pushError(errors, 'APP_KEY', appKey, 'APP_KEY must be set and at least 16 characters in production');
73
+ }
74
+ }
75
+ return { valid: errors.length === 0, errors };
76
+ },
77
+ assertValid() {
78
+ const result = StartupConfigValidator.validate();
79
+ if (result.valid)
80
+ return;
81
+ throw ErrorFactory.createConfigError('Invalid startup configuration', {
82
+ errors: result.errors,
83
+ });
84
+ },
85
+ });
86
+ export default StartupConfigValidator;
@@ -3,6 +3,7 @@
3
3
  * Core application settings
4
4
  * Sealed namespace for immutability
5
5
  */
6
+ type StartMode = 'development' | 'production' | 'testing';
6
7
  declare const getSafeEnv: () => NodeJS.ProcessEnv;
7
8
  export declare const appConfig: Readonly<{
8
9
  /**
@@ -12,7 +13,7 @@ export declare const appConfig: Readonly<{
12
13
  /**
13
14
  * Application environment
14
15
  */
15
- readonly environment: "development" | "production" | "testing";
16
+ readonly environment: StartMode;
16
17
  /**
17
18
  * Application port
18
19
  */
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/config/app.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,QAAA,MAAM,UAAU,QAAO,MAAM,CAAC,UAkB7B,CAAC;AAmEF,eAAO,MAAM,SAAS;IAhEpB;;OAEG;;IAGH;;OAEG;0BAC0B,aAAa,GAAG,YAAY,GAAG,SAAS;IAErE;;OAEG;;IAGH;;OAEG;;IAGH;;OAEG;kCACc,OAAO;IAIxB;;OAEG;iCACa,OAAO;IAIvB;;OAEG;8BACU,OAAO;IAIpB;;OAEG;;IAGH;;OAEG;;IAGH;;OAEG;;IAGH;;OAEG;;+BA/EkB,MAAM,CAAC,UAAU;EAqFY,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,CAAC;AAEtB,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/config/app.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,KAAK,SAAS,GAAG,aAAa,GAAG,YAAY,GAAG,SAAS,CAAC;AAsC1D,QAAA,MAAM,UAAU,QAAO,MAAM,CAAC,UAuB7B,CAAC;AA0FF,eAAO,MAAM,SAAS;IA5EpB;;OAEG;;IAMH;;OAEG;;IAGH;;OAEG;;IAMH;;OAEG;;IAMH;;OAEG;kCACc,OAAO;IAIxB;;OAEG;iCACa,OAAO;IAIvB;;OAEG;8BACU,OAAO;IAIpB;;OAEG;;IAMH;;OAEG;;IAGH;;OAEG;;IAGH;;OAEG;;+BA3GkB,MAAM,CAAC,UAAU;EAiHY,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,CAAC;AAEtB,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC"}
package/src/config/app.js CHANGED
@@ -4,39 +4,87 @@
4
4
  * Sealed namespace for immutability
5
5
  */
6
6
  import { Env } from './env';
7
+ const getProcessLike = () => {
8
+ return typeof process === 'undefined' ? undefined : process;
9
+ };
10
+ const readEnvString = (key, defaultValue = '') => {
11
+ const anyEnv = Env;
12
+ if (typeof anyEnv.get === 'function') {
13
+ return anyEnv.get(key, defaultValue);
14
+ }
15
+ const proc = getProcessLike();
16
+ const raw = proc?.env?.[key];
17
+ return raw ?? defaultValue;
18
+ };
19
+ const readEnvInt = (key, defaultValue) => {
20
+ const anyEnv = Env;
21
+ if (typeof anyEnv.getInt === 'function') {
22
+ return anyEnv.getInt(key, defaultValue);
23
+ }
24
+ const raw = readEnvString(key, String(defaultValue));
25
+ const parsed = Number.parseInt(raw, 10);
26
+ return Number.isNaN(parsed) ? defaultValue : parsed;
27
+ };
28
+ const readEnvBool = (key, defaultValue) => {
29
+ const anyEnv = Env;
30
+ if (typeof anyEnv.getBool === 'function') {
31
+ return anyEnv.getBool(key, defaultValue);
32
+ }
33
+ const raw = readEnvString(key, defaultValue ? 'true' : 'false');
34
+ return raw.toLowerCase() === 'true' || raw === '1';
35
+ };
7
36
  const getSafeEnv = () => {
8
37
  const baseEnv = typeof process === 'undefined' ? {} : process.env;
9
38
  return {
10
39
  ...baseEnv,
11
40
  // Ensure required keys exist (env.d.ts augments ProcessEnv with required fields)
12
- NODE_ENV: baseEnv.NODE_ENV ?? Env.NODE_ENV,
13
- USE_RAW_QRY: baseEnv.USE_RAW_QRY ?? (Env.get('USE_RAW_QRY') || undefined),
14
- SERVICE_API_KEY: baseEnv.SERVICE_API_KEY ?? Env.get('SERVICE_API_KEY', ''),
15
- SERVICE_JWT_SECRET: baseEnv.SERVICE_JWT_SECRET ?? Env.get('SERVICE_JWT_SECRET', ''),
16
- BASE_URL: baseEnv.BASE_URL ?? Env.get('BASE_URL', ''),
17
- MODE: baseEnv.MODE ?? Env.get('MODE', ''),
41
+ NODE_ENV: baseEnv.NODE_ENV ??
42
+ readEnvString('NODE_ENV', 'development'),
43
+ USE_RAW_QRY: baseEnv.USE_RAW_QRY ?? (readEnvString('USE_RAW_QRY', '') || undefined),
44
+ SERVICE_API_KEY: baseEnv.SERVICE_API_KEY ?? readEnvString('SERVICE_API_KEY', ''),
45
+ SERVICE_JWT_SECRET: baseEnv.SERVICE_JWT_SECRET ?? readEnvString('SERVICE_JWT_SECRET', ''),
46
+ BASE_URL: baseEnv['BASE_URL'] ?? readEnvString('BASE_URL', ''),
47
+ MODE: baseEnv['MODE'] ?? readEnvString('MODE', ''),
18
48
  // Hardening for child-process usage
19
- PATH: Env.SAFE_PATH,
49
+ PATH: typeof Env.SAFE_PATH === 'string'
50
+ ? Env.SAFE_PATH
51
+ : (baseEnv['PATH'] ?? ''),
20
52
  npm_config_scripts_prepend_node_path: 'true',
21
53
  };
22
54
  };
55
+ const normalizeMode = () => {
56
+ const value = (typeof Env.NODE_ENV === 'string'
57
+ ? Env.NODE_ENV
58
+ : readEnvString('NODE_ENV', 'development'));
59
+ if (value === 'production' || value === 'pro' || value === 'prod')
60
+ return 'production';
61
+ if (value === 'testing' || value === 'test')
62
+ return 'testing';
63
+ return 'development';
64
+ };
23
65
  const appConfigObj = {
24
66
  /**
25
67
  * Application name
26
68
  */
27
- name: Env.APP_NAME,
69
+ name: typeof Env.APP_NAME === 'string'
70
+ ? Env.APP_NAME
71
+ : readEnvString('APP_NAME', 'ZinTrust'),
28
72
  /**
29
73
  * Application environment
30
74
  */
31
- environment: Env.NODE_ENV,
75
+ environment: normalizeMode(),
32
76
  /**
33
77
  * Application port
34
78
  */
35
- port: Env.PORT,
79
+ port: typeof Env.PORT === 'number'
80
+ ? Env.PORT
81
+ : readEnvInt('APP_PORT', 3000),
36
82
  /**
37
83
  * Application host
38
84
  */
39
- host: Env.HOST,
85
+ host: typeof Env.HOST === 'string'
86
+ ? Env.HOST
87
+ : readEnvString('HOST', 'localhost'),
40
88
  /**
41
89
  * Is development environment
42
90
  */
@@ -58,19 +106,21 @@ const appConfigObj = {
58
106
  /**
59
107
  * Application debug mode
60
108
  */
61
- debug: Env.DEBUG,
109
+ debug: typeof Env.DEBUG === 'boolean'
110
+ ? Env.DEBUG
111
+ : readEnvBool('DEBUG', false),
62
112
  /**
63
113
  * Application timezone
64
114
  */
65
- timezone: Env.get('APP_TIMEZONE', 'UTC'),
115
+ timezone: readEnvString('APP_TIMEZONE', 'UTC'),
66
116
  /**
67
117
  * Request timeout (milliseconds)
68
118
  */
69
- requestTimeout: Env.getInt('REQUEST_TIMEOUT', 30000),
119
+ requestTimeout: readEnvInt('REQUEST_TIMEOUT', 30000),
70
120
  /**
71
121
  * Max request body size
72
122
  */
73
- maxBodySize: Env.get('MAX_BODY_SIZE', '10mb'),
123
+ maxBodySize: readEnvString('MAX_BODY_SIZE', '10mb'),
74
124
  getSafeEnv,
75
125
  };
76
126
  export const appConfig = Object.freeze(appConfigObj);
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Broadcast Configuration
3
+ *
4
+ * Centralizes broadcast driver selection and provider env mappings.
5
+ * Driver selection must be dynamic (tests may mutate process.env).
6
+ */
7
+ export type KnownBroadcastDriverName = 'inmemory' | 'pusher' | 'redis' | 'redishttps';
8
+ export type InMemoryBroadcastDriverConfig = {
9
+ driver: 'inmemory';
10
+ };
11
+ export type PusherBroadcastDriverConfig = {
12
+ driver: 'pusher';
13
+ appId: string;
14
+ key: string;
15
+ secret: string;
16
+ cluster: string;
17
+ useTLS: boolean;
18
+ };
19
+ export type RedisBroadcastDriverConfig = {
20
+ driver: 'redis';
21
+ host: string;
22
+ port: number;
23
+ password: string;
24
+ channelPrefix: string;
25
+ };
26
+ export type RedisHttpsBroadcastDriverConfig = {
27
+ driver: 'redishttps';
28
+ endpoint: string;
29
+ token: string;
30
+ channelPrefix: string;
31
+ };
32
+ export type KnownBroadcastDriverConfig = InMemoryBroadcastDriverConfig | PusherBroadcastDriverConfig | RedisBroadcastDriverConfig | RedisHttpsBroadcastDriverConfig;
33
+ declare const _default: Readonly<{
34
+ /**
35
+ * Normalized broadcast driver name.
36
+ *
37
+ * NOTE: Allows custom driver names (project-specific drivers), so returns string.
38
+ */
39
+ readonly getDriverName: () => string;
40
+ /**
41
+ * Get a config object for the currently selected driver.
42
+ * Defaults to inmemory for unknown/unsupported names.
43
+ */
44
+ readonly getDriverConfig: () => KnownBroadcastDriverConfig;
45
+ }>;
46
+ export default _default;
47
+ //# sourceMappingURL=broadcast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broadcast.d.ts","sourceRoot":"","sources":["../../../src/config/broadcast.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,MAAM,wBAAwB,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,YAAY,CAAC;AAEtF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,MAAM,EAAE,UAAU,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,MAAM,EAAE,QAAQ,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAClC,6BAA6B,GAC7B,2BAA2B,GAC3B,0BAA0B,GAC1B,+BAA+B,CAAC;;IA6BlC;;;;OAIG;kCACc,MAAM;IAIvB;;;OAGG;oCACgB,0BAA0B;;AAW/C,wBAAiD"}