@zintrust/core 0.1.0 → 0.1.2

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 (518) hide show
  1. package/README.md +214 -0
  2. package/bin/zintrust.d.ts.map +1 -1
  3. package/bin/zintrust.js +18 -1
  4. package/package.json +4 -34
  5. package/public/index.html +535 -0
  6. package/src/boot/Application.d.ts.map +1 -1
  7. package/src/boot/Application.js +46 -3
  8. package/src/boot/Server.d.ts.map +1 -1
  9. package/src/boot/Server.js +3 -4
  10. package/src/boot/bootstrap.js +77 -6
  11. package/src/builder/BundleOptimizer.d.ts.map +1 -1
  12. package/src/builder/BundleOptimizer.js +25 -29
  13. package/src/cache/Cache.d.ts.map +1 -1
  14. package/src/cache/Cache.js +4 -2
  15. package/src/cache/drivers/KVDriver.d.ts.map +1 -1
  16. package/src/cache/drivers/KVDriver.js +8 -7
  17. package/src/cache/drivers/MemoryDriver.d.ts.map +1 -1
  18. package/src/cache/drivers/MemoryDriver.js +5 -0
  19. package/src/cache/drivers/RedisDriver.js +1 -1
  20. package/src/cli/BaseCommand.d.ts +2 -2
  21. package/src/cli/BaseCommand.d.ts.map +1 -1
  22. package/src/cli/BaseCommand.js +2 -1
  23. package/src/cli/CLI.d.ts.map +1 -1
  24. package/src/cli/CLI.js +22 -18
  25. package/src/cli/ErrorHandler.d.ts.map +1 -1
  26. package/src/cli/ErrorHandler.js +2 -4
  27. package/src/cli/commands/AddCommand.d.ts +81 -0
  28. package/src/cli/commands/AddCommand.d.ts.map +1 -1
  29. package/src/cli/commands/AddCommand.js +24 -5
  30. package/src/cli/commands/ConfigCommand.d.ts.map +1 -1
  31. package/src/cli/commands/ConfigCommand.js +59 -25
  32. package/src/cli/commands/D1MigrateCommand.d.ts +4 -0
  33. package/src/cli/commands/D1MigrateCommand.d.ts.map +1 -1
  34. package/src/cli/commands/D1MigrateCommand.js +6 -4
  35. package/src/cli/commands/FixCommand.d.ts.map +1 -1
  36. package/src/cli/commands/FixCommand.js +3 -15
  37. package/src/cli/commands/LogsCleanupCommand.d.ts +6 -0
  38. package/src/cli/commands/LogsCleanupCommand.d.ts.map +1 -0
  39. package/src/cli/commands/LogsCleanupCommand.js +20 -0
  40. package/src/cli/commands/LogsCommand.d.ts.map +1 -1
  41. package/src/cli/commands/LogsCommand.js +4 -6
  42. package/src/cli/commands/MakeMailTemplateCommand.d.ts +10 -0
  43. package/src/cli/commands/MakeMailTemplateCommand.d.ts.map +1 -0
  44. package/src/cli/commands/MakeMailTemplateCommand.js +74 -0
  45. package/src/cli/commands/MakeNotificationTemplateCommand.d.ts +10 -0
  46. package/src/cli/commands/MakeNotificationTemplateCommand.d.ts.map +1 -0
  47. package/src/cli/commands/MakeNotificationTemplateCommand.js +113 -0
  48. package/src/cli/commands/MigrateCommand.d.ts.map +1 -1
  49. package/src/cli/commands/MigrateCommand.js +3 -3
  50. package/src/cli/commands/NewCommand.d.ts +4 -0
  51. package/src/cli/commands/NewCommand.d.ts.map +1 -1
  52. package/src/cli/commands/NewCommand.js +34 -19
  53. package/src/cli/commands/PluginCommand.d.ts.map +1 -1
  54. package/src/cli/commands/PluginCommand.js +8 -4
  55. package/src/cli/commands/PrepareCommand.d.ts.map +1 -1
  56. package/src/cli/commands/PrepareCommand.js +1 -1
  57. package/src/cli/commands/QACommand.d.ts.map +1 -1
  58. package/src/cli/commands/QACommand.js +16 -26
  59. package/src/cli/commands/SecretsCommand.d.ts +16 -0
  60. package/src/cli/commands/SecretsCommand.d.ts.map +1 -0
  61. package/src/cli/commands/SecretsCommand.js +91 -0
  62. package/src/cli/commands/StartCommand.d.ts.map +1 -1
  63. package/src/cli/commands/StartCommand.js +2 -2
  64. package/src/cli/commands/TemplatesCommand.d.ts +3 -0
  65. package/src/cli/commands/TemplatesCommand.d.ts.map +1 -0
  66. package/src/cli/commands/TemplatesCommand.js +65 -0
  67. package/src/cli/commands/index.d.ts +5 -0
  68. package/src/cli/commands/index.d.ts.map +1 -1
  69. package/src/cli/commands/index.js +5 -0
  70. package/src/cli/config/ConfigManager.js +1 -1
  71. package/src/cli/index.d.ts +2 -1
  72. package/src/cli/index.d.ts.map +1 -1
  73. package/src/cli/index.js +2 -1
  74. package/src/cli/scaffolding/ControllerGenerator.d.ts.map +1 -1
  75. package/src/cli/scaffolding/ControllerGenerator.js +11 -10
  76. package/src/cli/scaffolding/FeatureScaffolder.js +4 -4
  77. package/src/cli/scaffolding/FileGenerator.js +1 -1
  78. package/src/cli/scaffolding/MigrationGenerator.d.ts.map +1 -1
  79. package/src/cli/scaffolding/MigrationGenerator.js +10 -9
  80. package/src/cli/scaffolding/ModelGenerator.d.ts.map +1 -1
  81. package/src/cli/scaffolding/ModelGenerator.js +11 -10
  82. package/src/cli/scaffolding/ProjectScaffolder.d.ts.map +1 -1
  83. package/src/cli/scaffolding/ProjectScaffolder.js +61 -11
  84. package/src/cli/scaffolding/ResponseFactoryGenerator.d.ts.map +1 -1
  85. package/src/cli/scaffolding/ResponseFactoryGenerator.js +2 -1
  86. package/src/cli/scaffolding/RouteGenerator.d.ts.map +1 -1
  87. package/src/cli/scaffolding/RouteGenerator.js +15 -14
  88. package/src/cli/scaffolding/SeederGenerator.js +1 -1
  89. package/src/cli/scaffolding/ServiceIntegrationTestGenerator.d.ts.map +1 -1
  90. package/src/cli/scaffolding/ServiceIntegrationTestGenerator.js +7 -6
  91. package/src/cli/scaffolding/ServiceRequestFactoryGenerator.d.ts +1 -1
  92. package/src/cli/scaffolding/ServiceRequestFactoryGenerator.d.ts.map +1 -1
  93. package/src/cli/scaffolding/ServiceRequestFactoryGenerator.js +2 -2
  94. package/src/cli/scaffolding/ServiceScaffolder.d.ts.map +1 -1
  95. package/src/cli/scaffolding/ServiceScaffolder.js +13 -12
  96. package/src/cli/scaffolding/TemplateEngine.d.ts +10 -3
  97. package/src/cli/scaffolding/TemplateEngine.d.ts.map +1 -1
  98. package/src/cli/scaffolding/TemplateEngine.js +15 -285
  99. package/src/cli/scaffolding/TemplateGenerator.d.ts +40 -0
  100. package/src/cli/scaffolding/TemplateGenerator.d.ts.map +1 -0
  101. package/src/cli/scaffolding/TemplateGenerator.js +172 -0
  102. package/src/cli/scaffolding/index.d.ts +1 -0
  103. package/src/cli/scaffolding/index.d.ts.map +1 -1
  104. package/src/cli/scaffolding/index.js +1 -0
  105. package/src/cli/utils/spawn.js +1 -1
  106. package/src/common/AwsSigV4.d.ts +41 -0
  107. package/src/common/AwsSigV4.d.ts.map +1 -0
  108. package/src/common/AwsSigV4.js +69 -0
  109. package/src/common/index.d.ts +39 -0
  110. package/src/common/index.d.ts.map +1 -1
  111. package/src/common/index.js +101 -8
  112. package/src/common/uuid.d.ts +3 -0
  113. package/src/common/uuid.d.ts.map +1 -0
  114. package/src/common/uuid.js +30 -0
  115. package/src/config/FileLogWriter.d.ts +22 -0
  116. package/src/config/FileLogWriter.d.ts.map +1 -0
  117. package/src/config/FileLogWriter.js +192 -0
  118. package/src/config/SecretsManager.d.ts.map +1 -1
  119. package/src/config/SecretsManager.js +26 -0
  120. package/src/config/StartupConfigValidator.d.ts +15 -0
  121. package/src/config/StartupConfigValidator.d.ts.map +1 -0
  122. package/src/config/StartupConfigValidator.js +86 -0
  123. package/src/config/app.d.ts +2 -1
  124. package/src/config/app.d.ts.map +1 -1
  125. package/src/config/app.js +65 -15
  126. package/src/config/broadcast.d.ts +47 -0
  127. package/src/config/broadcast.d.ts.map +1 -0
  128. package/src/config/broadcast.js +54 -0
  129. package/src/config/cache.d.ts +13 -17
  130. package/src/config/cache.d.ts.map +1 -1
  131. package/src/config/cache.js +9 -11
  132. package/src/config/cloudflare.d.ts +26 -0
  133. package/src/config/cloudflare.d.ts.map +1 -0
  134. package/src/config/cloudflare.js +38 -0
  135. package/src/config/env.d.ts +6 -0
  136. package/src/config/env.d.ts.map +1 -1
  137. package/src/config/env.js +6 -0
  138. package/src/config/index.d.ts +52 -28
  139. package/src/config/index.d.ts.map +1 -1
  140. package/src/config/index.js +3 -0
  141. package/src/config/logger.d.ts +2 -0
  142. package/src/config/logger.d.ts.map +1 -1
  143. package/src/config/logger.js +270 -11
  144. package/src/config/logging/HttpLogger.d.ts +23 -0
  145. package/src/config/logging/HttpLogger.d.ts.map +1 -0
  146. package/src/config/logging/HttpLogger.js +93 -0
  147. package/src/config/logging/KvLogger.d.ts +22 -0
  148. package/src/config/logging/KvLogger.d.ts.map +1 -0
  149. package/src/config/logging/KvLogger.js +143 -0
  150. package/src/config/logging/SlackLogger.d.ts +23 -0
  151. package/src/config/logging/SlackLogger.d.ts.map +1 -0
  152. package/src/config/logging/SlackLogger.js +119 -0
  153. package/src/config/mail.d.ts +81 -0
  154. package/src/config/mail.d.ts.map +1 -0
  155. package/src/config/mail.js +73 -0
  156. package/src/config/middleware.d.ts +8 -0
  157. package/src/config/middleware.d.ts.map +1 -0
  158. package/src/config/middleware.js +18 -0
  159. package/src/config/notification.d.ts +62 -0
  160. package/src/config/notification.d.ts.map +1 -0
  161. package/src/config/notification.js +43 -0
  162. package/src/config/security.d.ts.map +1 -1
  163. package/src/config/security.js +2 -2
  164. package/src/config/startup.d.ts +23 -0
  165. package/src/config/startup.d.ts.map +1 -0
  166. package/src/config/startup.js +15 -0
  167. package/src/config/storage.d.ts +21 -35
  168. package/src/config/storage.d.ts.map +1 -1
  169. package/src/config/storage.js +57 -37
  170. package/src/database/migrations/index.d.ts +1 -1
  171. package/src/database/migrations/index.d.ts.map +1 -1
  172. package/src/database/migrations/index.js +2 -1
  173. package/src/features/Queue.js +1 -25
  174. package/src/functions/lambda.d.ts.map +1 -1
  175. package/src/functions/lambda.js +6 -1
  176. package/src/health/RuntimeHealthProbes.d.ts +13 -0
  177. package/src/health/RuntimeHealthProbes.d.ts.map +1 -0
  178. package/src/health/RuntimeHealthProbes.js +62 -0
  179. package/src/health/StartupHealthChecks.d.ts +26 -0
  180. package/src/health/StartupHealthChecks.d.ts.map +1 -0
  181. package/src/health/StartupHealthChecks.js +124 -0
  182. package/src/http/ErrorResponse.d.ts +28 -0
  183. package/src/http/ErrorResponse.d.ts.map +1 -0
  184. package/src/http/ErrorResponse.js +42 -0
  185. package/src/http/Kernel.d.ts +5 -0
  186. package/src/http/Kernel.d.ts.map +1 -1
  187. package/src/http/Kernel.js +96 -30
  188. package/src/http/Request.d.ts +1 -1
  189. package/src/http/Request.d.ts.map +1 -1
  190. package/src/http/RequestContext.d.ts +20 -0
  191. package/src/http/RequestContext.d.ts.map +1 -0
  192. package/src/http/RequestContext.js +77 -0
  193. package/src/index.d.ts +9 -1
  194. package/src/index.d.ts.map +1 -1
  195. package/src/index.js +8 -2
  196. package/src/microservices/MicroserviceBootstrap.d.ts.map +1 -1
  197. package/src/microservices/MicroserviceBootstrap.js +6 -5
  198. package/src/microservices/MicroserviceManager.d.ts.map +1 -1
  199. package/src/microservices/MicroserviceManager.js +7 -5
  200. package/src/microservices/PostgresAdapter.d.ts.map +1 -1
  201. package/src/microservices/PostgresAdapter.js +7 -4
  202. package/src/microservices/ServiceBundler.d.ts.map +1 -1
  203. package/src/microservices/ServiceBundler.js +3 -1
  204. package/src/microservices/ServiceHealthMonitor.d.ts.map +1 -1
  205. package/src/microservices/ServiceHealthMonitor.js +7 -3
  206. package/src/middleware/CsrfMiddleware.d.ts.map +1 -1
  207. package/src/middleware/CsrfMiddleware.js +2 -19
  208. package/src/middleware/ErrorHandlerMiddleware.d.ts +6 -0
  209. package/src/middleware/ErrorHandlerMiddleware.d.ts.map +1 -0
  210. package/src/middleware/ErrorHandlerMiddleware.js +33 -0
  211. package/src/middleware/LoggingMiddleware.d.ts +9 -0
  212. package/src/middleware/LoggingMiddleware.d.ts.map +1 -0
  213. package/src/middleware/LoggingMiddleware.js +36 -0
  214. package/src/middleware/index.d.ts +2 -0
  215. package/src/middleware/index.d.ts.map +1 -1
  216. package/src/middleware/index.js +2 -0
  217. package/src/node-singletons/async_hooks.d.ts +9 -0
  218. package/src/node-singletons/async_hooks.d.ts.map +1 -0
  219. package/src/node-singletons/async_hooks.js +8 -0
  220. package/src/node-singletons/fs.d.ts +2 -2
  221. package/src/node-singletons/fs.d.ts.map +1 -1
  222. package/src/node-singletons/fs.js +2 -2
  223. package/src/node-singletons/http.d.ts +1 -1
  224. package/src/node-singletons/http.d.ts.map +1 -1
  225. package/src/node-singletons/http.js +1 -1
  226. package/src/node-singletons/index.d.ts +4 -0
  227. package/src/node-singletons/index.d.ts.map +1 -1
  228. package/src/node-singletons/index.js +4 -0
  229. package/src/node-singletons/net.d.ts +9 -0
  230. package/src/node-singletons/net.d.ts.map +1 -0
  231. package/src/node-singletons/net.js +8 -0
  232. package/src/node-singletons/os.d.ts +3 -3
  233. package/src/node-singletons/os.d.ts.map +1 -1
  234. package/src/node-singletons/os.js +3 -4
  235. package/src/node-singletons/path.d.ts +3 -1
  236. package/src/node-singletons/path.d.ts.map +1 -1
  237. package/src/node-singletons/path.js +3 -1
  238. package/src/node-singletons/perf-hooks.d.ts +3 -1
  239. package/src/node-singletons/perf-hooks.d.ts.map +1 -1
  240. package/src/node-singletons/perf-hooks.js +3 -1
  241. package/src/node-singletons/process.d.ts +23 -0
  242. package/src/node-singletons/process.d.ts.map +1 -0
  243. package/src/node-singletons/process.js +8 -0
  244. package/src/node-singletons/readline.d.ts +3 -3
  245. package/src/node-singletons/readline.d.ts.map +1 -1
  246. package/src/node-singletons/readline.js +3 -4
  247. package/src/node-singletons/tls.d.ts +9 -0
  248. package/src/node-singletons/tls.d.ts.map +1 -0
  249. package/src/node-singletons/tls.js +8 -0
  250. package/src/node-singletons/url.d.ts +3 -1
  251. package/src/node-singletons/url.d.ts.map +1 -1
  252. package/src/node-singletons/url.js +3 -1
  253. package/src/orm/ConnectionManager.d.ts +6 -1
  254. package/src/orm/ConnectionManager.d.ts.map +1 -1
  255. package/src/orm/ConnectionManager.js +14 -0
  256. package/src/orm/DatabaseAdapter.d.ts +6 -0
  257. package/src/orm/DatabaseAdapter.d.ts.map +1 -1
  258. package/src/orm/QueryBuilder.d.ts +8 -1
  259. package/src/orm/QueryBuilder.d.ts.map +1 -1
  260. package/src/orm/QueryBuilder.js +188 -28
  261. package/src/orm/adapters/D1Adapter.d.ts.map +1 -1
  262. package/src/orm/adapters/D1Adapter.js +18 -12
  263. package/src/orm/adapters/MySQLAdapter.d.ts.map +1 -1
  264. package/src/orm/adapters/MySQLAdapter.js +4 -0
  265. package/src/orm/adapters/PostgreSQLAdapter.d.ts.map +1 -1
  266. package/src/orm/adapters/PostgreSQLAdapter.js +4 -0
  267. package/src/orm/adapters/SQLServerAdapter.d.ts.map +1 -1
  268. package/src/orm/adapters/SQLServerAdapter.js +4 -0
  269. package/src/orm/adapters/SQLiteAdapter.d.ts.map +1 -1
  270. package/src/orm/adapters/SQLiteAdapter.js +4 -0
  271. package/src/performance/Benchmark.d.ts.map +1 -1
  272. package/src/performance/Benchmark.js +3 -0
  273. package/src/performance/CodeGenerationBenchmark.js +3 -3
  274. package/src/performance/Optimizer.d.ts +1 -1
  275. package/src/performance/Optimizer.d.ts.map +1 -1
  276. package/src/performance/Optimizer.js +157 -80
  277. package/src/performance/establish-baseline.js +3 -3
  278. package/src/runtime/PluginManager.d.ts +3 -1
  279. package/src/runtime/PluginManager.d.ts.map +1 -1
  280. package/src/runtime/PluginManager.js +124 -28
  281. package/src/runtime/RuntimeDetector.d.ts.map +1 -1
  282. package/src/runtime/RuntimeDetector.js +47 -5
  283. package/src/runtime/adapters/CloudflareAdapter.js +2 -2
  284. package/src/runtime/adapters/DenoAdapter.js +9 -7
  285. package/src/runtime/adapters/FargateAdapter.d.ts.map +1 -1
  286. package/src/runtime/adapters/FargateAdapter.js +4 -3
  287. package/src/runtime/adapters/LambdaAdapter.d.ts.map +1 -1
  288. package/src/runtime/adapters/LambdaAdapter.js +4 -2
  289. package/src/runtime/adapters/NodeServerAdapter.d.ts.map +1 -1
  290. package/src/runtime/adapters/NodeServerAdapter.js +7 -6
  291. package/src/scheduler/ScheduleRunner.d.ts +18 -0
  292. package/src/scheduler/ScheduleRunner.d.ts.map +1 -0
  293. package/src/scheduler/ScheduleRunner.js +155 -0
  294. package/src/scheduler/index.d.ts +3 -0
  295. package/src/scheduler/index.d.ts.map +1 -0
  296. package/src/scheduler/index.js +1 -0
  297. package/src/scheduler/types.d.ts +16 -0
  298. package/src/scheduler/types.d.ts.map +1 -0
  299. package/src/scheduler/types.js +4 -0
  300. package/src/schedules/index.d.ts +2 -0
  301. package/src/schedules/index.d.ts.map +1 -0
  302. package/src/schedules/index.js +1 -0
  303. package/src/schedules/log-cleanup.d.ts +4 -0
  304. package/src/schedules/log-cleanup.d.ts.map +1 -0
  305. package/src/schedules/log-cleanup.js +18 -0
  306. package/src/scripts/GenerateEnvArtifacts.d.ts +13 -0
  307. package/src/scripts/GenerateEnvArtifacts.d.ts.map +1 -0
  308. package/src/scripts/GenerateEnvArtifacts.js +171 -0
  309. package/src/scripts/TemplateSync.js +109 -70
  310. package/src/security/CsrfTokenManager.js +1 -1
  311. package/src/security/Encryptor.js +1 -1
  312. package/src/security/Hash.d.ts +14 -0
  313. package/src/security/Hash.d.ts.map +1 -0
  314. package/src/security/Hash.js +81 -0
  315. package/src/security/StartupSecretValidation.d.ts +20 -0
  316. package/src/security/StartupSecretValidation.d.ts.map +1 -0
  317. package/src/security/StartupSecretValidation.js +61 -0
  318. package/src/security/UrlValidator.d.ts +0 -1
  319. package/src/security/UrlValidator.d.ts.map +1 -1
  320. package/src/security/UrlValidator.js +1 -2
  321. package/src/security/Xss.d.ts +14 -0
  322. package/src/security/Xss.d.ts.map +1 -0
  323. package/src/security/Xss.js +57 -0
  324. package/src/security/XssProtection.d.ts.map +1 -1
  325. package/src/security/XssProtection.js +150 -16
  326. package/src/templates/adapters/MySQLAdapter.ts.tpl +5 -0
  327. package/src/templates/adapters/PostgreSQLAdapter.ts.tpl +5 -0
  328. package/src/templates/adapters/SQLServerAdapter.ts.tpl +5 -0
  329. package/src/templates/adapters/SQLiteAdapter.ts.tpl +5 -0
  330. package/src/templates/features/Queue.ts.tpl +1 -29
  331. package/src/templates/project/basic/.env.example.tpl +48 -0
  332. package/src/templates/project/basic/.env.tpl +89 -94
  333. package/src/templates/project/basic/app/Toolkit/Broadcast/sendBroadcast.ts.tpl +7 -0
  334. package/src/templates/project/basic/app/Toolkit/Mail/sendWelcomeEmail.ts.tpl +30 -0
  335. package/src/templates/project/basic/app/Toolkit/Notification/sendSlackNotification.ts.tpl +10 -0
  336. package/src/templates/project/basic/app/Toolkit/Notification/sendSms.ts.tpl +13 -0
  337. package/src/templates/project/basic/config/FileLogWriter.ts.tpl +240 -0
  338. package/src/templates/project/basic/config/SecretsManager.ts.tpl +32 -1
  339. package/src/templates/project/basic/config/StartupConfigValidator.ts.tpl +151 -0
  340. package/src/templates/project/basic/config/app.ts.tpl +84 -15
  341. package/src/templates/project/basic/config/broadcast.ts.tpl +97 -0
  342. package/src/templates/project/basic/config/cache.ts.tpl +19 -23
  343. package/src/templates/project/basic/config/cloudflare.ts.tpl +57 -0
  344. package/src/templates/project/basic/config/env.ts.tpl +7 -1
  345. package/src/templates/project/basic/config/index.ts.tpl +3 -0
  346. package/src/templates/project/basic/config/logger.ts.tpl +301 -11
  347. package/src/templates/project/basic/config/logging/HttpLogger.ts.tpl +121 -0
  348. package/src/templates/project/basic/config/logging/KvLogger.ts.tpl +181 -0
  349. package/src/templates/project/basic/config/logging/SlackLogger.ts.tpl +156 -0
  350. package/src/templates/project/basic/config/mail.ts.tpl +141 -0
  351. package/src/templates/project/basic/config/middleware.ts.tpl +27 -0
  352. package/src/templates/project/basic/config/notification.ts.tpl +86 -0
  353. package/src/templates/project/basic/config/security.ts.tpl +4 -5
  354. package/src/templates/project/basic/config/startup.ts.tpl +27 -0
  355. package/src/templates/project/basic/config/storage.ts.tpl +77 -42
  356. package/src/templates/project/basic/database/migrations/index.ts.tpl +1 -1
  357. package/src/templates/project/basic/package.json.tpl +1 -1
  358. package/src/templates/project/basic/routes/api.ts.tpl +9 -37
  359. package/src/templates/project/basic/routes/broadcast.ts.tpl +32 -0
  360. package/src/templates/project/basic/routes/health.ts.tpl +134 -0
  361. package/src/templates/project/basic/src/index.ts.tpl +38 -11
  362. package/src/templates/project/basic/template.json +3 -0
  363. package/src/toolkit/Secrets/EnvFile.d.ts +15 -0
  364. package/src/toolkit/Secrets/EnvFile.d.ts.map +1 -0
  365. package/src/toolkit/Secrets/EnvFile.js +63 -0
  366. package/src/toolkit/Secrets/Manifest.d.ts +24 -0
  367. package/src/toolkit/Secrets/Manifest.d.ts.map +1 -0
  368. package/src/toolkit/Secrets/Manifest.js +71 -0
  369. package/src/toolkit/Secrets/index.d.ts +42 -0
  370. package/src/toolkit/Secrets/index.d.ts.map +1 -0
  371. package/src/toolkit/Secrets/index.js +119 -0
  372. package/src/toolkit/Secrets/providers/AwsSecretsManager.d.ts +14 -0
  373. package/src/toolkit/Secrets/providers/AwsSecretsManager.d.ts.map +1 -0
  374. package/src/toolkit/Secrets/providers/AwsSecretsManager.js +131 -0
  375. package/src/toolkit/Secrets/providers/CloudflareKv.d.ts +9 -0
  376. package/src/toolkit/Secrets/providers/CloudflareKv.d.ts.map +1 -0
  377. package/src/toolkit/Secrets/providers/CloudflareKv.js +73 -0
  378. package/src/tools/broadcast/Broadcast.d.ts +7 -0
  379. package/src/tools/broadcast/Broadcast.d.ts.map +1 -0
  380. package/src/tools/broadcast/Broadcast.js +37 -0
  381. package/src/tools/broadcast/drivers/BaseDriver.d.ts +5 -0
  382. package/src/tools/broadcast/drivers/BaseDriver.d.ts.map +1 -0
  383. package/src/tools/broadcast/drivers/BaseDriver.js +8 -0
  384. package/src/tools/broadcast/drivers/InMemory.d.ts +18 -0
  385. package/src/tools/broadcast/drivers/InMemory.d.ts.map +1 -0
  386. package/src/tools/broadcast/drivers/InMemory.js +16 -0
  387. package/src/tools/broadcast/drivers/Pusher.d.ts +8 -0
  388. package/src/tools/broadcast/drivers/Pusher.d.ts.map +1 -0
  389. package/src/tools/broadcast/drivers/Pusher.js +75 -0
  390. package/src/tools/broadcast/drivers/Redis.d.ts +19 -0
  391. package/src/tools/broadcast/drivers/Redis.d.ts.map +1 -0
  392. package/src/tools/broadcast/drivers/Redis.js +73 -0
  393. package/src/tools/broadcast/drivers/RedisHttps.d.ts +14 -0
  394. package/src/tools/broadcast/drivers/RedisHttps.d.ts.map +1 -0
  395. package/src/tools/broadcast/drivers/RedisHttps.js +50 -0
  396. package/src/tools/broadcast/index.d.ts +7 -0
  397. package/src/tools/broadcast/index.d.ts.map +1 -0
  398. package/src/tools/broadcast/index.js +6 -0
  399. package/src/tools/http/Http.d.ts +51 -0
  400. package/src/tools/http/Http.d.ts.map +1 -0
  401. package/src/tools/http/Http.js +171 -0
  402. package/src/tools/http/HttpResponse.d.ts +32 -0
  403. package/src/tools/http/HttpResponse.d.ts.map +1 -0
  404. package/src/tools/http/HttpResponse.js +80 -0
  405. package/src/tools/http/index.d.ts +15 -0
  406. package/src/tools/http/index.d.ts.map +1 -0
  407. package/src/tools/http/index.js +9 -0
  408. package/src/tools/mail/Mail.d.ts +22 -0
  409. package/src/tools/mail/Mail.d.ts.map +1 -0
  410. package/src/tools/mail/Mail.js +105 -0
  411. package/src/tools/mail/attachments.d.ts +23 -0
  412. package/src/tools/mail/attachments.d.ts.map +1 -0
  413. package/src/tools/mail/attachments.js +26 -0
  414. package/src/tools/mail/drivers/BaseDriver.d.ts +5 -0
  415. package/src/tools/mail/drivers/BaseDriver.d.ts.map +1 -0
  416. package/src/tools/mail/drivers/BaseDriver.js +8 -0
  417. package/src/tools/mail/drivers/Mailgun.d.ts +31 -0
  418. package/src/tools/mail/drivers/Mailgun.d.ts.map +1 -0
  419. package/src/tools/mail/drivers/Mailgun.js +81 -0
  420. package/src/tools/mail/drivers/SendGrid.d.ts +29 -0
  421. package/src/tools/mail/drivers/SendGrid.d.ts.map +1 -0
  422. package/src/tools/mail/drivers/SendGrid.js +57 -0
  423. package/src/tools/mail/drivers/Ses.d.ts +24 -0
  424. package/src/tools/mail/drivers/Ses.d.ts.map +1 -0
  425. package/src/tools/mail/drivers/Ses.js +116 -0
  426. package/src/tools/mail/drivers/Smtp.d.ts +38 -0
  427. package/src/tools/mail/drivers/Smtp.d.ts.map +1 -0
  428. package/src/tools/mail/drivers/Smtp.js +327 -0
  429. package/src/tools/mail/templates/index.d.ts +27 -0
  430. package/src/tools/mail/templates/index.d.ts.map +1 -0
  431. package/src/tools/mail/templates/index.js +35 -0
  432. package/src/tools/mail/templates/markdown/index.d.ts +17 -0
  433. package/src/tools/mail/templates/markdown/index.d.ts.map +1 -0
  434. package/src/tools/mail/templates/markdown/index.js +49 -0
  435. package/src/tools/mail/templates/markdown/registry.d.ts +15 -0
  436. package/src/tools/mail/templates/markdown/registry.d.ts.map +1 -0
  437. package/src/tools/mail/templates/markdown/registry.js +34 -0
  438. package/src/tools/mail/templates/markdown/validator.d.ts +16 -0
  439. package/src/tools/mail/templates/markdown/validator.d.ts.map +1 -0
  440. package/src/tools/mail/templates/markdown/validator.js +24 -0
  441. package/src/tools/mail/testing.d.ts +41 -0
  442. package/src/tools/mail/testing.d.ts.map +1 -0
  443. package/src/tools/mail/testing.js +34 -0
  444. package/src/tools/notification/Driver.d.ts +11 -0
  445. package/src/tools/notification/Driver.d.ts.map +1 -0
  446. package/src/tools/notification/Driver.js +1 -0
  447. package/src/tools/notification/Notification.d.ts +11 -0
  448. package/src/tools/notification/Notification.d.ts.map +1 -0
  449. package/src/tools/notification/Notification.js +11 -0
  450. package/src/tools/notification/Registry.d.ts +10 -0
  451. package/src/tools/notification/Registry.d.ts.map +1 -0
  452. package/src/tools/notification/Registry.js +22 -0
  453. package/src/tools/notification/Service.d.ts +6 -0
  454. package/src/tools/notification/Service.d.ts.map +1 -0
  455. package/src/tools/notification/Service.js +18 -0
  456. package/src/tools/notification/config.d.ts +5 -0
  457. package/src/tools/notification/config.d.ts.map +1 -0
  458. package/src/tools/notification/config.js +5 -0
  459. package/src/tools/notification/drivers/BaseDriver.d.ts +5 -0
  460. package/src/tools/notification/drivers/BaseDriver.d.ts.map +1 -0
  461. package/src/tools/notification/drivers/BaseDriver.js +8 -0
  462. package/src/tools/notification/drivers/Console.d.ts +7 -0
  463. package/src/tools/notification/drivers/Console.d.ts.map +1 -0
  464. package/src/tools/notification/drivers/Console.js +13 -0
  465. package/src/tools/notification/drivers/Slack.d.ts +16 -0
  466. package/src/tools/notification/drivers/Slack.d.ts.map +1 -0
  467. package/src/tools/notification/drivers/Slack.js +24 -0
  468. package/src/tools/notification/drivers/Termii.d.ts +10 -0
  469. package/src/tools/notification/drivers/Termii.d.ts.map +1 -0
  470. package/src/tools/notification/drivers/Termii.js +47 -0
  471. package/src/tools/notification/drivers/Twilio.d.ts +21 -0
  472. package/src/tools/notification/drivers/Twilio.d.ts.map +1 -0
  473. package/src/tools/notification/drivers/Twilio.js +48 -0
  474. package/src/tools/notification/templates/markdown/index.d.ts +15 -0
  475. package/src/tools/notification/templates/markdown/index.d.ts.map +1 -0
  476. package/src/tools/notification/templates/markdown/index.js +38 -0
  477. package/src/tools/notification/templates/markdown/registry.d.ts +15 -0
  478. package/src/tools/notification/templates/markdown/registry.d.ts.map +1 -0
  479. package/src/tools/notification/templates/markdown/registry.js +36 -0
  480. package/src/tools/notification/testing.d.ts +19 -0
  481. package/src/tools/notification/testing.d.ts.map +1 -0
  482. package/src/tools/notification/testing.js +35 -0
  483. package/src/tools/notification/testingHelpers.d.ts +12 -0
  484. package/src/tools/notification/testingHelpers.d.ts.map +1 -0
  485. package/src/tools/notification/testingHelpers.js +32 -0
  486. package/src/tools/queue/Queue.d.ts +23 -0
  487. package/src/tools/queue/Queue.d.ts.map +1 -0
  488. package/src/tools/queue/Queue.js +38 -0
  489. package/src/tools/queue/drivers/InMemory.d.ts +10 -0
  490. package/src/tools/queue/drivers/InMemory.d.ts.map +1 -0
  491. package/src/tools/queue/drivers/InMemory.js +55 -0
  492. package/src/tools/queue/drivers/Redis.d.ts +10 -0
  493. package/src/tools/queue/drivers/Redis.d.ts.map +1 -0
  494. package/src/tools/queue/drivers/Redis.js +91 -0
  495. package/src/tools/storage/drivers/Gcs.d.ts +20 -0
  496. package/src/tools/storage/drivers/Gcs.d.ts.map +1 -0
  497. package/src/tools/storage/drivers/Gcs.js +152 -0
  498. package/src/tools/storage/drivers/Local.d.ts +17 -0
  499. package/src/tools/storage/drivers/Local.d.ts.map +1 -0
  500. package/src/tools/storage/drivers/Local.js +63 -0
  501. package/src/tools/storage/drivers/R2.d.ts +20 -0
  502. package/src/tools/storage/drivers/R2.d.ts.map +1 -0
  503. package/src/tools/storage/drivers/R2.js +73 -0
  504. package/src/tools/storage/drivers/S3.d.ts +26 -0
  505. package/src/tools/storage/drivers/S3.d.ts.map +1 -0
  506. package/src/tools/storage/drivers/S3.js +258 -0
  507. package/src/tools/storage/index.d.ts +24 -0
  508. package/src/tools/storage/index.d.ts.map +1 -0
  509. package/src/tools/storage/index.js +112 -0
  510. package/src/tools/storage/testing.d.ts +23 -0
  511. package/src/tools/storage/testing.d.ts.map +1 -0
  512. package/src/tools/storage/testing.js +52 -0
  513. package/src/tools/templates/MarkdownRenderer.d.ts +14 -0
  514. package/src/tools/templates/MarkdownRenderer.d.ts.map +1 -0
  515. package/src/tools/templates/MarkdownRenderer.js +300 -0
  516. package/src/tools/templates/index.d.ts +5 -0
  517. package/src/tools/templates/index.d.ts.map +1 -0
  518. package/src/tools/templates/index.js +4 -0
@@ -0,0 +1,75 @@
1
+ import { ErrorFactory } from '../../../exceptions/ZintrustError';
2
+ import { createHash, createHmac } from '../../../node-singletons/crypto';
3
+ const md5Hex = (data) => createHash('md5').update(data).digest('hex');
4
+ const buildQueryString = (params) => {
5
+ const keys = Object.keys(params).sort((a, b) => a.localeCompare(b));
6
+ return keys
7
+ .map((key) => `${encodeURIComponent(key)}=${encodeURIComponent(params[key] ?? '')}`)
8
+ .join('&');
9
+ };
10
+ const buildBaseUrl = (cluster) => {
11
+ const normalized = cluster.trim();
12
+ if (normalized === '')
13
+ return 'https://api.pusherapp.com';
14
+ return `https://api-${normalized}.pusher.com`;
15
+ };
16
+ const ensureConfig = (config) => {
17
+ if (config.appId.trim() === '') {
18
+ throw ErrorFactory.createConfigError('Pusher broadcast misconfigured: PUSHER_APP_ID is required');
19
+ }
20
+ if (config.key.trim() === '') {
21
+ throw ErrorFactory.createConfigError('Pusher broadcast misconfigured: PUSHER_APP_KEY is required');
22
+ }
23
+ if (config.secret.trim() === '') {
24
+ throw ErrorFactory.createConfigError('Pusher broadcast misconfigured: PUSHER_APP_SECRET is required');
25
+ }
26
+ };
27
+ const signRequest = (params) => {
28
+ const stringToSign = `${params.method}\n${params.path}\n${params.queryString}`;
29
+ return createHmac('sha256', params.secret).update(stringToSign).digest('hex');
30
+ };
31
+ export const PusherDriver = Object.freeze({
32
+ async send(config, channel, event, data) {
33
+ ensureConfig(config);
34
+ const payload = {
35
+ name: event,
36
+ channels: [channel],
37
+ data: JSON.stringify(data ?? null),
38
+ };
39
+ const body = JSON.stringify(payload);
40
+ const path = `/apps/${config.appId}/events`;
41
+ const authTimestamp = String(Math.floor(Date.now() / 1000));
42
+ const queryParams = {
43
+ auth_key: config.key,
44
+ auth_timestamp: authTimestamp,
45
+ auth_version: '1.0',
46
+ body_md5: md5Hex(body),
47
+ };
48
+ const queryString = buildQueryString(queryParams);
49
+ const authSignature = signRequest({ method: 'POST', path, secret: config.secret, queryString });
50
+ const baseUrl = buildBaseUrl(config.cluster);
51
+ const url = `${baseUrl}${path}?${queryString}&auth_signature=${authSignature}`;
52
+ const res = await fetch(url, {
53
+ method: 'POST',
54
+ headers: {
55
+ 'content-type': 'application/json',
56
+ },
57
+ body,
58
+ });
59
+ if (!res.ok) {
60
+ let responseBody;
61
+ try {
62
+ responseBody = await res.text();
63
+ }
64
+ catch {
65
+ responseBody = undefined;
66
+ }
67
+ throw ErrorFactory.createTryCatchError(`Pusher broadcast request failed (${res.status})`, {
68
+ status: res.status,
69
+ body: responseBody,
70
+ });
71
+ }
72
+ return { ok: true };
73
+ },
74
+ });
75
+ export default PusherDriver;
@@ -0,0 +1,19 @@
1
+ export type IRedisPublishClient = {
2
+ connect?: () => Promise<void>;
3
+ publish(channel: string, message: string): Promise<number>;
4
+ };
5
+ export type RedisBroadcastDriverConfig = {
6
+ driver: 'redis';
7
+ host: string;
8
+ port: number;
9
+ password: string;
10
+ channelPrefix: string;
11
+ };
12
+ export declare const RedisDriver: {
13
+ readonly send: (config: RedisBroadcastDriverConfig, channel: string, event: string, data: unknown) => Promise<{
14
+ ok: boolean;
15
+ published: number;
16
+ }>;
17
+ };
18
+ export default RedisDriver;
19
+ //# sourceMappingURL=Redis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Redis.d.ts","sourceRoot":"","sources":["../../../../../src/tools/broadcast/drivers/Redis.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5D,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;AAiBF,eAAO,MAAM,WAAW;4BAsDD,0BAA0B,WAAW,MAAM,SAAS,MAAM,QAAQ,OAAO;;;;CAmB5F,CAAC;AAEL,eAAe,WAAW,CAAC"}
@@ -0,0 +1,73 @@
1
+ import { ErrorFactory } from '../../../exceptions/ZintrustError';
2
+ const buildRedisUrl = (config) => {
3
+ const host = (config.host ?? '').trim();
4
+ const port = Number(config.port);
5
+ if (!host)
6
+ throw ErrorFactory.createConfigError('Redis broadcast driver requires host');
7
+ if (!Number.isFinite(port) || port <= 0) {
8
+ throw ErrorFactory.createConfigError('Redis broadcast driver requires a valid port');
9
+ }
10
+ const password = (config.password ?? '').trim();
11
+ const authPart = password ? `:${encodeURIComponent(password)}@` : '';
12
+ return `redis://${authPart}${host}:${port}`;
13
+ };
14
+ export const RedisDriver = (() => {
15
+ let client = null;
16
+ let connected = false;
17
+ const ensureClient = async (config) => {
18
+ // Always validate config even if a client is already cached
19
+ const url = buildRedisUrl(config);
20
+ if (connected && client !== null)
21
+ return client;
22
+ // Import lazily so package is optional for environments that don't use Redis
23
+ try {
24
+ const mod = (await import('redis'));
25
+ client = mod.createClient({ url });
26
+ if (typeof client.connect === 'function') {
27
+ try {
28
+ await client.connect();
29
+ connected = true;
30
+ }
31
+ catch (err) {
32
+ connected = false;
33
+ throw ErrorFactory.createTryCatchError('Redis broadcast driver failed to connect', err);
34
+ }
35
+ }
36
+ else {
37
+ connected = true;
38
+ }
39
+ }
40
+ catch {
41
+ const globalFake = globalThis
42
+ .__fakeRedisClient;
43
+ if (globalFake === undefined) {
44
+ throw ErrorFactory.createConfigError("Redis broadcast driver requires the 'redis' package or a test fake client set in globalThis.__fakeRedisClient");
45
+ }
46
+ client = globalFake;
47
+ connected = true;
48
+ }
49
+ if (client === null)
50
+ throw ErrorFactory.createConfigError('Redis client could not be initialized');
51
+ return client;
52
+ };
53
+ const normalizePrefix = (value) => {
54
+ const prefix = (value ?? '').trim();
55
+ return prefix || 'broadcast:';
56
+ };
57
+ return {
58
+ async send(config, channel, event, data) {
59
+ const cli = await ensureClient(config);
60
+ const fullChannel = `${normalizePrefix(config.channelPrefix)}${channel}`;
61
+ let message;
62
+ try {
63
+ message = JSON.stringify({ event, data });
64
+ }
65
+ catch (err) {
66
+ throw ErrorFactory.createTryCatchError('Failed to serialize broadcast payload', err);
67
+ }
68
+ const published = await cli.publish(fullChannel, message);
69
+ return { ok: true, published };
70
+ },
71
+ };
72
+ })();
73
+ export default RedisDriver;
@@ -0,0 +1,14 @@
1
+ export type RedisHttpsBroadcastDriverConfig = {
2
+ driver: 'redishttps';
3
+ endpoint: string;
4
+ token: string;
5
+ channelPrefix: string;
6
+ };
7
+ export declare const RedisHttpsDriver: Readonly<{
8
+ send(config: RedisHttpsBroadcastDriverConfig, channel: string, event: string, data: unknown): Promise<{
9
+ ok: boolean;
10
+ published: number | undefined;
11
+ }>;
12
+ }>;
13
+ export default RedisHttpsDriver;
14
+ //# sourceMappingURL=RedisHttps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RedisHttps.d.ts","sourceRoot":"","sources":["../../../../../src/tools/broadcast/drivers/RedisHttps.ts"],"names":[],"mappings":"AAIA,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;AAsBF,eAAO,MAAM,gBAAgB;iBAEjB,+BAA+B,WAC9B,MAAM,SACR,MAAM,QACP,OAAO;;;;EAmCf,CAAC;AAEH,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { Env } from '../../../config/env';
2
+ import { ErrorFactory } from '../../../exceptions/ZintrustError';
3
+ import { HttpClient } from '../../http/Http';
4
+ const normalizePrefix = (value) => {
5
+ const prefix = (value ?? '').trim();
6
+ return prefix || 'broadcast:';
7
+ };
8
+ const validateConfig = (config) => {
9
+ const endpoint = (config.endpoint ?? '').trim();
10
+ const token = (config.token ?? '').trim();
11
+ if (!endpoint) {
12
+ throw ErrorFactory.createConfigError('Redis HTTPS broadcast driver requires REDIS_HTTPS_ENDPOINT');
13
+ }
14
+ if (!token) {
15
+ throw ErrorFactory.createConfigError('Redis HTTPS broadcast driver requires REDIS_HTTPS_TOKEN');
16
+ }
17
+ };
18
+ export const RedisHttpsDriver = Object.freeze({
19
+ async send(config, channel, event, data) {
20
+ validateConfig(config);
21
+ let message;
22
+ try {
23
+ message = JSON.stringify({ event, data });
24
+ }
25
+ catch (err) {
26
+ throw ErrorFactory.createTryCatchError('Failed to serialize broadcast payload', err);
27
+ }
28
+ const fullChannel = `${normalizePrefix(config.channelPrefix)}${channel}`;
29
+ const timeout = Env.getInt('REDIS_HTTPS_TIMEOUT', 5000);
30
+ const response = await HttpClient.post(config.endpoint, {
31
+ command: 'PUBLISH',
32
+ channel: fullChannel,
33
+ message,
34
+ })
35
+ .withAuth(config.token)
36
+ .withTimeout(timeout)
37
+ .send();
38
+ response.throwIfServerError();
39
+ response.throwIfClientError();
40
+ const published = (() => {
41
+ const trimmed = response.body.trim();
42
+ const asNum = Number(trimmed);
43
+ if (!Number.isFinite(asNum))
44
+ return undefined;
45
+ return asNum;
46
+ })();
47
+ return { ok: true, published };
48
+ },
49
+ });
50
+ export default RedisHttpsDriver;
@@ -0,0 +1,7 @@
1
+ export { Broadcast } from './Broadcast';
2
+ export { BaseDriver } from './drivers/BaseDriver';
3
+ export { InMemoryDriver } from './drivers/InMemory';
4
+ export { PusherDriver } from './drivers/Pusher';
5
+ export { RedisDriver } from './drivers/Redis';
6
+ export { RedisHttpsDriver } from './drivers/RedisHttps';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/tools/broadcast/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { Broadcast } from './Broadcast';
2
+ export { BaseDriver } from './drivers/BaseDriver';
3
+ export { InMemoryDriver } from './drivers/InMemory';
4
+ export { PusherDriver } from './drivers/Pusher';
5
+ export { RedisDriver } from './drivers/Redis';
6
+ export { RedisHttpsDriver } from './drivers/RedisHttps';
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Http Client - Fluent HTTP request builder
3
+ * Laravel-style HTTP client for making authenticated requests
4
+ *
5
+ * Usage:
6
+ * await HttpClient.get('https://api.example.com/users').withAuth(token).send();
7
+ * await HttpClient.post('https://api.example.com/users', data).withTimeout(5000).send();
8
+ */
9
+ import { type IHttpResponse } from './HttpResponse';
10
+ export type { IHttpResponse } from './HttpResponse';
11
+ /**
12
+ * HTTP Request builder interface
13
+ */
14
+ export interface IHttpRequest {
15
+ withHeader(name: string, value: string): IHttpRequest;
16
+ withHeaders(headers: Record<string, string>): IHttpRequest;
17
+ withAuth(token: string, scheme?: 'Bearer' | 'Basic'): IHttpRequest;
18
+ withBasicAuth(username: string, password: string): IHttpRequest;
19
+ withTimeout(ms: number): IHttpRequest;
20
+ asJson(): IHttpRequest;
21
+ asForm(): IHttpRequest;
22
+ send(): Promise<IHttpResponse>;
23
+ }
24
+ /**
25
+ * HTTP Client - Sealed namespace for making HTTP requests
26
+ * Provides Laravel-style fluent API
27
+ */
28
+ export declare const HttpClient: Readonly<{
29
+ /**
30
+ * Make GET request
31
+ */
32
+ get(url: string): IHttpRequest;
33
+ /**
34
+ * Make POST request
35
+ */
36
+ post(url: string, data?: Record<string, unknown>): IHttpRequest;
37
+ /**
38
+ * Make PUT request
39
+ */
40
+ put(url: string, data?: Record<string, unknown>): IHttpRequest;
41
+ /**
42
+ * Make PATCH request
43
+ */
44
+ patch(url: string, data?: Record<string, unknown>): IHttpRequest;
45
+ /**
46
+ * Make DELETE request
47
+ */
48
+ delete(url: string, data?: Record<string, unknown>): IHttpRequest;
49
+ }>;
50
+ export default HttpClient;
51
+ //# sourceMappingURL=Http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Http.d.ts","sourceRoot":"","sources":["../../../../src/tools/http/Http.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAElF,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAAC;IACtD,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,YAAY,CAAC;IAC3D,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,YAAY,CAAC;IACnE,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,YAAY,CAAC;IAChE,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,CAAC;IACtC,MAAM,IAAI,YAAY,CAAC;IACvB,MAAM,IAAI,YAAY,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;CAChC;AAiJD;;;GAGG;AACH,eAAO,MAAM,UAAU;IACrB;;OAEG;aACM,MAAM,GAAG,YAAY;IAI9B;;OAEG;cACO,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY;IAQ/D;;OAEG;aACM,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY;IAQ9D;;OAEG;eACQ,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY;IAQhE;;OAEG;gBACS,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY;EAOjE,CAAC;AAEH,eAAe,UAAU,CAAC"}
@@ -0,0 +1,171 @@
1
+ /**
2
+ * Http Client - Fluent HTTP request builder
3
+ * Laravel-style HTTP client for making authenticated requests
4
+ *
5
+ * Usage:
6
+ * await HttpClient.get('https://api.example.com/users').withAuth(token).send();
7
+ * await HttpClient.post('https://api.example.com/users', data).withTimeout(5000).send();
8
+ */
9
+ import { Env } from '../../config/env';
10
+ import { Logger } from '../../config/logger';
11
+ import { ErrorFactory } from '../../exceptions/ZintrustError';
12
+ import { createHttpResponse } from './HttpResponse';
13
+ /**
14
+ * Perform the actual request for a given state. Separated to keep the builder small
15
+ */
16
+ async function performRequest(state) {
17
+ const timeout = state.timeout ?? Env.getInt('HTTP_TIMEOUT', 30000);
18
+ const controller = new AbortController();
19
+ let timeoutId;
20
+ if (timeout > 0) {
21
+ timeoutId = globalThis.setTimeout(() => controller.abort(), timeout);
22
+ }
23
+ const buildInit = () => {
24
+ const init = {
25
+ method: state.method,
26
+ headers: state.headers,
27
+ signal: controller.signal,
28
+ };
29
+ if (state.body !== undefined &&
30
+ state.body !== null &&
31
+ ['POST', 'PUT', 'PATCH'].includes(state.method)) {
32
+ init.body = state.body;
33
+ }
34
+ return init;
35
+ };
36
+ try {
37
+ const init = buildInit();
38
+ const startTime = Date.now();
39
+ const response = await globalThis.fetch(state.url, init);
40
+ const responseBody = await response.text();
41
+ const duration = Date.now() - startTime;
42
+ Logger.debug(`HTTP ${state.method} ${state.url}`, {
43
+ status: response.status,
44
+ duration: `${duration}ms`,
45
+ size: responseBody.length,
46
+ });
47
+ return createHttpResponse(response, responseBody);
48
+ }
49
+ catch (error) {
50
+ if (error instanceof Error && error.name === 'AbortError') {
51
+ throw ErrorFactory.createConnectionError(`HTTP request timeout after ${timeout}ms`, {
52
+ url: state.url,
53
+ method: state.method,
54
+ timeout,
55
+ });
56
+ }
57
+ throw ErrorFactory.createTryCatchError(`HTTP request failed: ${error.message}`, {
58
+ url: state.url,
59
+ method: state.method,
60
+ error: error instanceof Error ? error.message : String(error),
61
+ });
62
+ }
63
+ finally {
64
+ if (timeoutId !== undefined) {
65
+ globalThis.clearTimeout(timeoutId);
66
+ }
67
+ }
68
+ }
69
+ /**
70
+ * Create request builder with fluent API
71
+ */
72
+ const createRequestBuilder = (method, url, initialBody) => {
73
+ const state = {
74
+ method,
75
+ url,
76
+ headers: {
77
+ 'User-Agent': 'Zintrust/1.0',
78
+ },
79
+ body: initialBody ? JSON.stringify(initialBody) : undefined,
80
+ };
81
+ const self = {
82
+ withHeader(name, value) {
83
+ state.headers[name] = value;
84
+ return self;
85
+ },
86
+ withHeaders(headers) {
87
+ Object.assign(state.headers, headers);
88
+ return self;
89
+ },
90
+ withAuth(token, scheme = 'Bearer') {
91
+ state.headers['Authorization'] = `${scheme} ${token}`;
92
+ return self;
93
+ },
94
+ withBasicAuth(username, password) {
95
+ const credentials = Buffer.from(`${username}:${password}`).toString('base64');
96
+ state.headers['Authorization'] = `Basic ${credentials}`;
97
+ return self;
98
+ },
99
+ withTimeout(ms) {
100
+ state.timeout = ms;
101
+ return self;
102
+ },
103
+ asJson() {
104
+ state.contentType = 'json';
105
+ state.headers['Content-Type'] = 'application/json';
106
+ return self;
107
+ },
108
+ asForm() {
109
+ state.contentType = 'form';
110
+ state.headers['Content-Type'] = 'application/x-www-form-urlencoded';
111
+ return self;
112
+ },
113
+ async send() {
114
+ return performRequest(state);
115
+ },
116
+ };
117
+ return self;
118
+ };
119
+ /**
120
+ * HTTP Client - Sealed namespace for making HTTP requests
121
+ * Provides Laravel-style fluent API
122
+ */
123
+ export const HttpClient = Object.freeze({
124
+ /**
125
+ * Make GET request
126
+ */
127
+ get(url) {
128
+ return createRequestBuilder('GET', url);
129
+ },
130
+ /**
131
+ * Make POST request
132
+ */
133
+ post(url, data) {
134
+ const builder = createRequestBuilder('POST', url, data);
135
+ if (data) {
136
+ builder.asJson();
137
+ }
138
+ return builder;
139
+ },
140
+ /**
141
+ * Make PUT request
142
+ */
143
+ put(url, data) {
144
+ const builder = createRequestBuilder('PUT', url, data);
145
+ if (data) {
146
+ builder.asJson();
147
+ }
148
+ return builder;
149
+ },
150
+ /**
151
+ * Make PATCH request
152
+ */
153
+ patch(url, data) {
154
+ const builder = createRequestBuilder('PATCH', url, data);
155
+ if (data) {
156
+ builder.asJson();
157
+ }
158
+ return builder;
159
+ },
160
+ /**
161
+ * Make DELETE request
162
+ */
163
+ delete(url, data) {
164
+ const builder = createRequestBuilder('DELETE', url, data);
165
+ if (data) {
166
+ builder.asJson();
167
+ }
168
+ return builder;
169
+ },
170
+ });
171
+ export default HttpClient;
@@ -0,0 +1,32 @@
1
+ /**
2
+ * HttpResponse - Response wrapper with utility methods
3
+ * Provides convenient access to response status, headers, body, and parsed JSON
4
+ */
5
+ /**
6
+ * HTTP Response interface for convenience methods
7
+ */
8
+ export interface IHttpResponse {
9
+ status: number;
10
+ headers: Record<string, string>;
11
+ body: string;
12
+ json<T = unknown>(): T;
13
+ text(): string;
14
+ ok: boolean;
15
+ successful: boolean;
16
+ failed: boolean;
17
+ serverError: boolean;
18
+ clientError: boolean;
19
+ header(name: string): string | undefined;
20
+ hasHeader(name: string): boolean;
21
+ throwIfServerError(): IHttpResponse;
22
+ throwIfClientError(): IHttpResponse;
23
+ }
24
+ /**
25
+ * Create HTTP response from fetch Response
26
+ */
27
+ export declare const createHttpResponse: (response: Response, body: string) => IHttpResponse;
28
+ declare const _default: {
29
+ createHttpResponse: (response: Response, body: string) => IHttpResponse;
30
+ };
31
+ export default _default;
32
+ //# sourceMappingURL=HttpResponse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpResponse.d.ts","sourceRoot":"","sources":["../../../../src/tools/http/HttpResponse.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC,CAAC;IACvB,IAAI,IAAI,MAAM,CAAC;IACf,EAAE,EAAE,OAAO,CAAC;IACZ,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACzC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,kBAAkB,IAAI,aAAa,CAAC;IACpC,kBAAkB,IAAI,aAAa,CAAC;CACrC;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAI,UAAU,QAAQ,EAAE,MAAM,MAAM,KAAG,aAmFrE,CAAC;;mCAnF2C,QAAQ,QAAQ,MAAM,KAAG,aAAa;;AAqFnF,wBAEE"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * HttpResponse - Response wrapper with utility methods
3
+ * Provides convenient access to response status, headers, body, and parsed JSON
4
+ */
5
+ import { ErrorFactory } from '../../exceptions/ZintrustError';
6
+ /**
7
+ * Create HTTP response from fetch Response
8
+ */
9
+ export const createHttpResponse = (response, body) => {
10
+ const statusCode = response.status;
11
+ const headers = Object.fromEntries(response.headers.entries());
12
+ const lowerHeaders = Object.fromEntries(Object.entries(headers).map(([key, value]) => [key.toLowerCase(), value]));
13
+ return {
14
+ get status() {
15
+ return statusCode;
16
+ },
17
+ get headers() {
18
+ return headers;
19
+ },
20
+ get body() {
21
+ return body;
22
+ },
23
+ json() {
24
+ try {
25
+ return JSON.parse(body);
26
+ }
27
+ catch (error) {
28
+ throw ErrorFactory.createValidationError('Failed to parse JSON response', {
29
+ body: body.substring(0, 200), // Truncate for logging
30
+ error: error instanceof Error ? error.message : String(error),
31
+ });
32
+ }
33
+ },
34
+ text() {
35
+ return body;
36
+ },
37
+ get ok() {
38
+ return response.ok;
39
+ },
40
+ get successful() {
41
+ return statusCode >= 200 && statusCode < 300;
42
+ },
43
+ get failed() {
44
+ return !this.successful;
45
+ },
46
+ get serverError() {
47
+ return statusCode >= 500;
48
+ },
49
+ get clientError() {
50
+ return statusCode >= 400 && statusCode < 500;
51
+ },
52
+ header(name) {
53
+ return lowerHeaders[name.toLowerCase()];
54
+ },
55
+ hasHeader(name) {
56
+ return name.toLowerCase() in lowerHeaders;
57
+ },
58
+ throwIfServerError() {
59
+ if (this.serverError) {
60
+ throw ErrorFactory.createTryCatchError(`HTTP server error: ${this.status}`, {
61
+ status: this.status,
62
+ body: this.body.substring(0, 200),
63
+ });
64
+ }
65
+ return this;
66
+ },
67
+ throwIfClientError() {
68
+ if (this.clientError) {
69
+ throw ErrorFactory.createTryCatchError(`HTTP client error: ${this.status}`, {
70
+ status: this.status,
71
+ body: this.body.substring(0, 200),
72
+ });
73
+ }
74
+ return this;
75
+ },
76
+ };
77
+ };
78
+ export default {
79
+ createHttpResponse,
80
+ };
@@ -0,0 +1,15 @@
1
+ /**
2
+ * HTTP Client Tools - Export all HTTP utilities
3
+ */
4
+ declare const _default: Readonly<{
5
+ HttpClient: Readonly<{
6
+ get(url: string): import("./Http").IHttpRequest;
7
+ post(url: string, data?: Record<string, unknown>): import("./Http").IHttpRequest;
8
+ put(url: string, data?: Record<string, unknown>): import("./Http").IHttpRequest;
9
+ patch(url: string, data?: Record<string, unknown>): import("./Http").IHttpRequest;
10
+ delete(url: string, data?: Record<string, unknown>): import("./Http").IHttpRequest;
11
+ }>;
12
+ createHttpResponse: (response: Response, body: string) => import("./HttpResponse").IHttpResponse;
13
+ }>;
14
+ export default _default;
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/tools/http/index.ts"],"names":[],"mappings":"AAAA;;GAEG;;;;;;;;;;;AAKH,wBAGG"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * HTTP Client Tools - Export all HTTP utilities
3
+ */
4
+ import { HttpClient } from './Http';
5
+ import { createHttpResponse } from './HttpResponse';
6
+ export default Object.freeze({
7
+ HttpClient,
8
+ createHttpResponse,
9
+ });
@@ -0,0 +1,22 @@
1
+ import { type AttachmentInput } from './attachments';
2
+ export type SendMailInput = {
3
+ to: string | string[];
4
+ subject: string;
5
+ text: string;
6
+ html?: string;
7
+ from?: {
8
+ address?: string;
9
+ name?: string;
10
+ };
11
+ attachments?: AttachmentInput[];
12
+ };
13
+ export type SendMailResult = {
14
+ ok: boolean;
15
+ driver: 'sendgrid' | 'disabled' | 'smtp' | 'ses' | 'mailgun';
16
+ messageId?: string;
17
+ };
18
+ export declare const Mail: Readonly<{
19
+ send(input: SendMailInput): Promise<SendMailResult>;
20
+ }>;
21
+ export default Mail;
22
+ //# sourceMappingURL=Mail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Mail.d.ts","sourceRoot":"","sources":["../../../../src/tools/mail/Mail.ts"],"names":[],"mappings":"AAQA,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAG7E,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE;QACL,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,WAAW,CAAC,EAAE,eAAe,EAAE,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,UAAU,GAAG,UAAU,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAkIF,eAAO,MAAM,IAAI;gBACG,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;EAqBzD,CAAC;AAEH,eAAe,IAAI,CAAC"}