@zintrust/core 0.1.19 → 0.1.20

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 (495) hide show
  1. package/README.md +10 -10
  2. package/bin/zintrust-main.d.ts.map +1 -1
  3. package/bin/zintrust-main.js +9 -0
  4. package/package.json +2 -2
  5. package/public/error-pages/404.html +145 -0
  6. package/public/error-pages/500.html +266 -0
  7. package/public/error-pages/error.css +628 -0
  8. package/public/error-pages/error.js +428 -0
  9. package/public/zintrust.svg +30 -0
  10. package/routes/api.d.ts.map +1 -1
  11. package/routes/api.js +41 -17
  12. package/routes/metrics.d.ts +9 -0
  13. package/routes/metrics.d.ts.map +1 -0
  14. package/routes/metrics.js +20 -0
  15. package/routes/openapi.d.ts +9 -0
  16. package/routes/openapi.d.ts.map +1 -0
  17. package/routes/openapi.js +76 -0
  18. package/src/boot/Application.d.ts +2 -2
  19. package/src/boot/Application.d.ts.map +1 -1
  20. package/src/boot/Application.js +18 -3
  21. package/src/boot/Server.d.ts +3 -2
  22. package/src/boot/Server.d.ts.map +1 -1
  23. package/src/boot/Server.js +39 -165
  24. package/src/cache/Cache.d.ts +1 -1
  25. package/src/cache/Cache.d.ts.map +1 -1
  26. package/src/cache/CacheDriver.d.ts +4 -0
  27. package/src/cache/CacheDriver.d.ts.map +1 -1
  28. package/src/cache/drivers/KVDriver.d.ts +1 -1
  29. package/src/cache/drivers/KVDriver.d.ts.map +1 -1
  30. package/src/cache/drivers/MemoryDriver.d.ts +1 -1
  31. package/src/cache/drivers/MemoryDriver.d.ts.map +1 -1
  32. package/src/cache/drivers/MemoryDriver.js +16 -0
  33. package/src/cache/drivers/MongoDriver.d.ts +1 -1
  34. package/src/cache/drivers/MongoDriver.d.ts.map +1 -1
  35. package/src/cache/drivers/RedisDriver.d.ts +1 -1
  36. package/src/cache/drivers/RedisDriver.d.ts.map +1 -1
  37. package/src/cli/CLI.d.ts.map +1 -1
  38. package/src/cli/CLI.js +10 -4
  39. package/src/cli/commands/AddCommand.d.ts +2 -2
  40. package/src/cli/commands/AddCommand.d.ts.map +1 -1
  41. package/src/cli/commands/AddCommand.js +135 -58
  42. package/src/cli/commands/ConfigCommand.d.ts +1 -1
  43. package/src/cli/commands/ConfigCommand.d.ts.map +1 -1
  44. package/src/cli/commands/CreateCommand.d.ts +15 -0
  45. package/src/cli/commands/CreateCommand.d.ts.map +1 -0
  46. package/src/cli/commands/CreateCommand.js +143 -0
  47. package/src/cli/commands/D1MigrateCommand.d.ts +1 -1
  48. package/src/cli/commands/D1MigrateCommand.d.ts.map +1 -1
  49. package/src/cli/commands/D1MigrateCommand.js +16 -20
  50. package/src/cli/commands/DbSeedCommand.d.ts +9 -0
  51. package/src/cli/commands/DbSeedCommand.d.ts.map +1 -0
  52. package/src/cli/commands/DbSeedCommand.js +171 -0
  53. package/src/cli/commands/DebugCommand.d.ts +1 -1
  54. package/src/cli/commands/DebugCommand.d.ts.map +1 -1
  55. package/src/cli/commands/FixCommand.d.ts +1 -1
  56. package/src/cli/commands/FixCommand.d.ts.map +1 -1
  57. package/src/cli/commands/JwtDevCommand.d.ts +8 -0
  58. package/src/cli/commands/JwtDevCommand.d.ts.map +1 -0
  59. package/src/cli/commands/JwtDevCommand.js +114 -0
  60. package/src/cli/commands/KeyGenerateCommand.d.ts +1 -1
  61. package/src/cli/commands/KeyGenerateCommand.d.ts.map +1 -1
  62. package/src/cli/commands/LogsCommand.d.ts +2 -2
  63. package/src/cli/commands/LogsCommand.d.ts.map +1 -1
  64. package/src/cli/commands/LogsCommand.js +36 -2
  65. package/src/cli/commands/MakeMailTemplateCommand.d.ts +1 -1
  66. package/src/cli/commands/MakeMailTemplateCommand.d.ts.map +1 -1
  67. package/src/cli/commands/MakeNotificationTemplateCommand.d.ts +1 -1
  68. package/src/cli/commands/MakeNotificationTemplateCommand.d.ts.map +1 -1
  69. package/src/cli/commands/MigrateCommand.d.ts +1 -1
  70. package/src/cli/commands/MigrateCommand.d.ts.map +1 -1
  71. package/src/cli/commands/MigrateCommand.js +291 -35
  72. package/src/cli/commands/NewCommand.d.ts +1 -1
  73. package/src/cli/commands/NewCommand.d.ts.map +1 -1
  74. package/src/cli/commands/NewCommand.js +12 -4
  75. package/src/cli/commands/PluginCommand.d.ts +1 -1
  76. package/src/cli/commands/PluginCommand.d.ts.map +1 -1
  77. package/src/cli/commands/PrepareCommand.d.ts +1 -1
  78. package/src/cli/commands/PrepareCommand.d.ts.map +1 -1
  79. package/src/cli/commands/QACommand.d.ts +2 -2
  80. package/src/cli/commands/QACommand.d.ts.map +1 -1
  81. package/src/cli/commands/RoutesCommand.d.ts +10 -0
  82. package/src/cli/commands/RoutesCommand.d.ts.map +1 -0
  83. package/src/cli/commands/RoutesCommand.js +242 -0
  84. package/src/cli/commands/SimulateCommand.d.ts +1 -1
  85. package/src/cli/commands/SimulateCommand.d.ts.map +1 -1
  86. package/src/cli/commands/index.d.ts +3 -0
  87. package/src/cli/commands/index.d.ts.map +1 -1
  88. package/src/cli/commands/index.js +3 -0
  89. package/src/cli/config/ConfigManager.d.ts +1 -1
  90. package/src/cli/config/ConfigManager.d.ts.map +1 -1
  91. package/src/cli/config/ConfigValidator.d.ts +1 -1
  92. package/src/cli/config/ConfigValidator.d.ts.map +1 -1
  93. package/src/cli/config/ConfigValidator.js +1 -1
  94. package/src/cli/d1/D1SqlMigrations.d.ts +20 -0
  95. package/src/cli/d1/D1SqlMigrations.d.ts.map +1 -0
  96. package/src/cli/d1/D1SqlMigrations.js +224 -0
  97. package/src/cli/d1/WranglerConfig.d.ts +4 -0
  98. package/src/cli/d1/WranglerConfig.d.ts.map +1 -0
  99. package/src/cli/d1/WranglerConfig.js +122 -0
  100. package/src/cli/d1/WranglerD1.d.ts +11 -0
  101. package/src/cli/d1/WranglerD1.d.ts.map +1 -0
  102. package/src/cli/d1/WranglerD1.js +16 -0
  103. package/src/cli/scaffolding/ControllerGenerator.d.ts.map +1 -1
  104. package/src/cli/scaffolding/ControllerGenerator.js +72 -22
  105. package/src/cli/scaffolding/FactoryGenerator.d.ts.map +1 -1
  106. package/src/cli/scaffolding/FactoryGenerator.js +3 -1
  107. package/src/cli/scaffolding/GovernanceScaffolder.d.ts +23 -0
  108. package/src/cli/scaffolding/GovernanceScaffolder.d.ts.map +1 -0
  109. package/src/cli/scaffolding/GovernanceScaffolder.js +327 -0
  110. package/src/cli/scaffolding/MigrationGenerator.d.ts +10 -0
  111. package/src/cli/scaffolding/MigrationGenerator.d.ts.map +1 -1
  112. package/src/cli/scaffolding/MigrationGenerator.js +137 -51
  113. package/src/cli/scaffolding/ProjectScaffolder.d.ts.map +1 -1
  114. package/src/cli/scaffolding/ProjectScaffolder.js +36 -4
  115. package/src/cli/scaffolding/RouteGenerator.d.ts.map +1 -1
  116. package/src/cli/scaffolding/RouteGenerator.js +79 -43
  117. package/src/cli/scaffolding/SeederGenerator.d.ts +5 -0
  118. package/src/cli/scaffolding/SeederGenerator.d.ts.map +1 -1
  119. package/src/cli/scaffolding/SeederGenerator.js +63 -15
  120. package/src/cli/scaffolding/ServiceScaffolder.d.ts.map +1 -1
  121. package/src/cli/scaffolding/ServiceScaffolder.js +24 -3
  122. package/src/cli/scaffolding/index.d.ts +2 -0
  123. package/src/cli/scaffolding/index.d.ts.map +1 -1
  124. package/src/cli/scaffolding/index.js +1 -0
  125. package/src/common/index.d.ts +8 -0
  126. package/src/common/index.d.ts.map +1 -1
  127. package/src/common/index.js +28 -0
  128. package/src/common/utility.d.ts +38 -0
  129. package/src/common/utility.d.ts.map +1 -0
  130. package/src/common/utility.js +101 -0
  131. package/src/config/FileLogWriter.d.ts +2 -1
  132. package/src/config/FileLogWriter.d.ts.map +1 -1
  133. package/src/config/FileLogWriter.js +83 -2
  134. package/src/config/app.d.ts.map +1 -1
  135. package/src/config/app.js +3 -1
  136. package/src/config/broadcast.d.ts +1 -1
  137. package/src/config/broadcast.d.ts.map +1 -1
  138. package/src/config/cache.d.ts +1 -1
  139. package/src/config/cache.d.ts.map +1 -1
  140. package/src/config/cloudflare.d.ts +1 -1
  141. package/src/config/cloudflare.d.ts.map +1 -1
  142. package/src/config/database.d.ts +1 -1
  143. package/src/config/database.d.ts.map +1 -1
  144. package/src/config/database.js +92 -6
  145. package/src/config/env.d.ts +6 -0
  146. package/src/config/env.d.ts.map +1 -1
  147. package/src/config/env.js +7 -0
  148. package/src/config/index.d.ts +1 -1
  149. package/src/config/logging/KvLogger.js +1 -1
  150. package/src/config/logging/SlackLogger.js +2 -2
  151. package/src/config/middleware.d.ts +20 -1
  152. package/src/config/middleware.d.ts.map +1 -1
  153. package/src/config/middleware.js +135 -3
  154. package/src/config/security.d.ts +1 -1
  155. package/src/config/security.js +1 -1
  156. package/src/config/type.d.ts +1 -1
  157. package/src/config/type.d.ts.map +1 -1
  158. package/src/events/EventDispatcher.d.ts.map +1 -1
  159. package/src/events/EventDispatcher.js +6 -4
  160. package/src/exceptions/ZintrustError.d.ts +7 -0
  161. package/src/exceptions/ZintrustError.d.ts.map +1 -1
  162. package/src/exceptions/ZintrustError.js +56 -0
  163. package/src/features/Auth.d.ts +1 -1
  164. package/src/features/Auth.d.ts.map +1 -1
  165. package/src/features/Auth.js +3 -3
  166. package/src/features/Queue.js +1 -1
  167. package/src/functions/cloudflare.d.ts.map +1 -1
  168. package/src/functions/cloudflare.js +3 -14
  169. package/src/functions/deno.d.ts.map +1 -1
  170. package/src/functions/deno.js +3 -14
  171. package/src/functions/lambda.d.ts.map +1 -1
  172. package/src/functions/lambda.js +3 -14
  173. package/src/health/StartupHealthChecks.js +1 -1
  174. package/src/http/Controller.d.ts +2 -2
  175. package/src/http/Controller.d.ts.map +1 -1
  176. package/src/http/FileUpload.d.ts +68 -0
  177. package/src/http/FileUpload.d.ts.map +1 -0
  178. package/src/http/FileUpload.js +120 -0
  179. package/src/http/Kernel.d.ts +5 -5
  180. package/src/http/Kernel.d.ts.map +1 -1
  181. package/src/http/Kernel.js +139 -23
  182. package/src/http/Request.d.ts +20 -1
  183. package/src/http/Request.d.ts.map +1 -1
  184. package/src/http/Request.js +23 -0
  185. package/src/http/RequestContext.d.ts +6 -0
  186. package/src/http/RequestContext.d.ts.map +1 -1
  187. package/src/http/RequestContext.js +77 -1
  188. package/src/http/Response.d.ts +1 -1
  189. package/src/http/Response.d.ts.map +1 -1
  190. package/src/http/ValidationHelper.d.ts +78 -0
  191. package/src/http/ValidationHelper.d.ts.map +1 -0
  192. package/src/http/ValidationHelper.js +121 -0
  193. package/src/http/error-pages/ErrorPageRenderer.d.ts +17 -0
  194. package/src/http/error-pages/ErrorPageRenderer.d.ts.map +1 -0
  195. package/src/http/error-pages/ErrorPageRenderer.js +88 -0
  196. package/src/http/middleware/BodyParsingMiddleware.d.ts +12 -0
  197. package/src/http/middleware/BodyParsingMiddleware.d.ts.map +1 -0
  198. package/src/http/middleware/BodyParsingMiddleware.js +251 -0
  199. package/src/http/middleware/FileUploadMiddleware.d.ts +12 -0
  200. package/src/http/middleware/FileUploadMiddleware.d.ts.map +1 -0
  201. package/src/http/middleware/FileUploadMiddleware.js +74 -0
  202. package/src/http/parsers/BodyParsers.d.ts +32 -0
  203. package/src/http/parsers/BodyParsers.d.ts.map +1 -0
  204. package/src/http/parsers/BodyParsers.js +159 -0
  205. package/src/http/parsers/MultipartParser.d.ts +33 -0
  206. package/src/http/parsers/MultipartParser.d.ts.map +1 -0
  207. package/src/http/parsers/MultipartParser.js +129 -0
  208. package/src/http/parsers/MultipartParserRegistry.d.ts +34 -0
  209. package/src/http/parsers/MultipartParserRegistry.d.ts.map +1 -0
  210. package/src/http/parsers/MultipartParserRegistry.js +20 -0
  211. package/src/http/validated.d.ts +12 -0
  212. package/src/http/validated.d.ts.map +1 -0
  213. package/src/http/validated.js +41 -0
  214. package/src/index.d.ts +64 -7
  215. package/src/index.d.ts.map +1 -1
  216. package/src/index.js +59 -5
  217. package/src/microservices/RequestTracingMiddleware.d.ts +2 -2
  218. package/src/microservices/RequestTracingMiddleware.d.ts.map +1 -1
  219. package/src/microservices/RequestTracingMiddleware.js +3 -0
  220. package/src/microservices/ServiceAuthMiddleware.d.ts +2 -2
  221. package/src/microservices/ServiceAuthMiddleware.d.ts.map +1 -1
  222. package/src/middleware/AuthMiddleware.d.ts +10 -0
  223. package/src/middleware/AuthMiddleware.d.ts.map +1 -0
  224. package/src/middleware/AuthMiddleware.js +16 -0
  225. package/src/middleware/CsrfMiddleware.d.ts +11 -1
  226. package/src/middleware/CsrfMiddleware.d.ts.map +1 -1
  227. package/src/middleware/CsrfMiddleware.js +33 -0
  228. package/src/middleware/JwtAuthMiddleware.d.ts +11 -0
  229. package/src/middleware/JwtAuthMiddleware.d.ts.map +1 -0
  230. package/src/middleware/JwtAuthMiddleware.js +73 -0
  231. package/src/middleware/LoggingMiddleware.d.ts.map +1 -1
  232. package/src/middleware/LoggingMiddleware.js +8 -3
  233. package/src/middleware/MiddlewareStack.d.ts +2 -2
  234. package/src/middleware/MiddlewareStack.d.ts.map +1 -1
  235. package/src/middleware/RateLimiter.d.ts +2 -2
  236. package/src/middleware/RateLimiter.d.ts.map +1 -1
  237. package/src/middleware/SanitizeBodyMiddleware.d.ts +12 -0
  238. package/src/middleware/SanitizeBodyMiddleware.d.ts.map +1 -0
  239. package/src/middleware/SanitizeBodyMiddleware.js +31 -0
  240. package/src/middleware/SecurityMiddleware.d.ts +1 -1
  241. package/src/middleware/SecurityMiddleware.d.ts.map +1 -1
  242. package/src/middleware/SessionMiddleware.d.ts +1 -1
  243. package/src/middleware/SessionMiddleware.d.ts.map +1 -1
  244. package/src/middleware/ValidationMiddleware.d.ts +25 -0
  245. package/src/middleware/ValidationMiddleware.d.ts.map +1 -0
  246. package/src/middleware/ValidationMiddleware.js +251 -0
  247. package/src/migrations/MigrationDiscovery.d.ts +5 -0
  248. package/src/migrations/MigrationDiscovery.d.ts.map +1 -0
  249. package/src/migrations/MigrationDiscovery.js +16 -0
  250. package/src/migrations/MigrationLoader.d.ts +5 -0
  251. package/src/migrations/MigrationLoader.d.ts.map +1 -0
  252. package/src/migrations/MigrationLoader.js +43 -0
  253. package/src/migrations/MigrationLock.d.ts +4 -0
  254. package/src/migrations/MigrationLock.d.ts.map +1 -0
  255. package/src/migrations/MigrationLock.js +33 -0
  256. package/src/migrations/Migrator.d.ts +23 -0
  257. package/src/migrations/Migrator.d.ts.map +1 -0
  258. package/src/migrations/Migrator.js +4 -0
  259. package/src/migrations/MigratorFactory.d.ts +25 -0
  260. package/src/migrations/MigratorFactory.d.ts.map +1 -0
  261. package/src/migrations/MigratorFactory.js +323 -0
  262. package/src/migrations/schema/Blueprint.d.ts +5 -0
  263. package/src/migrations/schema/Blueprint.d.ts.map +1 -0
  264. package/src/migrations/schema/Blueprint.js +189 -0
  265. package/src/migrations/schema/Schema.d.ts +8 -0
  266. package/src/migrations/schema/Schema.d.ts.map +1 -0
  267. package/src/migrations/schema/Schema.js +141 -0
  268. package/src/migrations/schema/SchemaCompiler.d.ts +20 -0
  269. package/src/migrations/schema/SchemaCompiler.d.ts.map +1 -0
  270. package/src/migrations/schema/SchemaCompiler.js +262 -0
  271. package/src/migrations/schema/index.d.ts +5 -0
  272. package/src/migrations/schema/index.d.ts.map +1 -0
  273. package/src/migrations/schema/index.js +3 -0
  274. package/src/migrations/schema/types.d.ts +86 -0
  275. package/src/migrations/schema/types.d.ts.map +1 -0
  276. package/src/migrations/schema/types.js +1 -0
  277. package/src/migrations/types.d.ts +45 -0
  278. package/src/migrations/types.d.ts.map +1 -0
  279. package/src/migrations/types.js +1 -0
  280. package/src/node-singletons/crypto.d.ts +1 -1
  281. package/src/node-singletons/crypto.d.ts.map +1 -1
  282. package/src/node-singletons/crypto.js +1 -1
  283. package/src/node-singletons/fs.d.ts +2 -2
  284. package/src/node-singletons/fs.d.ts.map +1 -1
  285. package/src/node-singletons/fs.js +1 -1
  286. package/src/node-singletons/util.d.ts +6 -0
  287. package/src/node-singletons/util.d.ts.map +1 -0
  288. package/src/node-singletons/util.js +5 -0
  289. package/src/node.d.ts +3 -1
  290. package/src/node.d.ts.map +1 -1
  291. package/src/node.js +6 -2
  292. package/src/observability/OpenTelemetry.d.ts +62 -0
  293. package/src/observability/OpenTelemetry.d.ts.map +1 -0
  294. package/src/observability/OpenTelemetry.js +167 -0
  295. package/src/observability/PrometheusMetrics.d.ts +25 -0
  296. package/src/observability/PrometheusMetrics.d.ts.map +1 -0
  297. package/src/observability/PrometheusMetrics.js +114 -0
  298. package/src/openapi/OpenApiGenerator.d.ts +68 -0
  299. package/src/openapi/OpenApiGenerator.d.ts.map +1 -0
  300. package/src/openapi/OpenApiGenerator.js +287 -0
  301. package/src/orm/Database.d.ts +4 -2
  302. package/src/orm/Database.d.ts.map +1 -1
  303. package/src/orm/Database.js +142 -29
  304. package/src/orm/DatabaseAdapter.d.ts +13 -0
  305. package/src/orm/DatabaseAdapter.d.ts.map +1 -1
  306. package/src/orm/DatabaseAdapterRegistry.d.ts.map +1 -1
  307. package/src/orm/DatabaseAdapterRegistry.js +3 -1
  308. package/src/orm/Model.d.ts +30 -2
  309. package/src/orm/Model.d.ts.map +1 -1
  310. package/src/orm/Model.js +255 -62
  311. package/src/orm/QueryBuilder.d.ts +22 -1
  312. package/src/orm/QueryBuilder.d.ts.map +1 -1
  313. package/src/orm/QueryBuilder.js +405 -99
  314. package/src/orm/Relationships.d.ts +7 -1
  315. package/src/orm/Relationships.d.ts.map +1 -1
  316. package/src/orm/Relationships.js +18 -0
  317. package/src/orm/SchemaCompiler.d.ts +9 -0
  318. package/src/orm/SchemaCompiler.d.ts.map +1 -0
  319. package/src/orm/SchemaCompiler.js +145 -0
  320. package/src/orm/adapters/D1Adapter.d.ts +1 -1
  321. package/src/orm/adapters/D1Adapter.d.ts.map +1 -1
  322. package/src/orm/adapters/MySQLAdapter.d.ts +1 -1
  323. package/src/orm/adapters/MySQLAdapter.d.ts.map +1 -1
  324. package/src/orm/adapters/MySQLAdapter.js +88 -69
  325. package/src/orm/adapters/PostgreSQLAdapter.d.ts +1 -1
  326. package/src/orm/adapters/PostgreSQLAdapter.d.ts.map +1 -1
  327. package/src/orm/adapters/PostgreSQLAdapter.js +88 -69
  328. package/src/orm/adapters/SQLServerAdapter.d.ts +1 -1
  329. package/src/orm/adapters/SQLServerAdapter.d.ts.map +1 -1
  330. package/src/orm/adapters/SQLiteAdapter.d.ts +1 -1
  331. package/src/orm/adapters/SQLiteAdapter.d.ts.map +1 -1
  332. package/src/orm/adapters/SQLiteAdapter.js +58 -2
  333. package/src/orm/maintenance/SqliteMaintenance.d.ts +5 -0
  334. package/src/orm/maintenance/SqliteMaintenance.d.ts.map +1 -0
  335. package/src/orm/maintenance/SqliteMaintenance.js +14 -0
  336. package/src/orm/migrations/MigrationStore.d.ts +38 -0
  337. package/src/orm/migrations/MigrationStore.d.ts.map +1 -0
  338. package/src/orm/migrations/MigrationStore.js +157 -0
  339. package/src/performance/CodeGenerationBenchmark.d.ts.map +1 -1
  340. package/src/performance/Optimizer.d.ts +1 -0
  341. package/src/performance/Optimizer.d.ts.map +1 -1
  342. package/src/performance/Optimizer.js +37 -3
  343. package/src/profiling/MemoryProfiler.d.ts +1 -1
  344. package/src/profiling/MemoryProfiler.d.ts.map +1 -1
  345. package/src/profiling/N1Detector.d.ts +1 -1
  346. package/src/profiling/N1Detector.d.ts.map +1 -1
  347. package/src/profiling/QueryLogger.d.ts +1 -1
  348. package/src/profiling/QueryLogger.d.ts.map +1 -1
  349. package/src/profiling/RequestProfiler.d.ts +3 -3
  350. package/src/profiling/RequestProfiler.d.ts.map +1 -1
  351. package/src/routes/metrics.d.ts +2 -0
  352. package/src/routes/metrics.d.ts.map +1 -0
  353. package/src/routes/metrics.js +1 -0
  354. package/src/routing/CoreRoutes.d.ts +12 -0
  355. package/src/routing/CoreRoutes.d.ts.map +1 -0
  356. package/src/routing/CoreRoutes.js +151 -0
  357. package/src/routing/RouteRegistry.d.ts +39 -0
  358. package/src/routing/RouteRegistry.d.ts.map +1 -0
  359. package/src/routing/RouteRegistry.js +44 -0
  360. package/src/routing/Router.d.ts +26 -9
  361. package/src/routing/Router.d.ts.map +1 -1
  362. package/src/routing/Router.js +79 -35
  363. package/src/routing/common.d.ts +15 -0
  364. package/src/routing/common.d.ts.map +1 -0
  365. package/src/routing/common.js +47 -0
  366. package/src/routing/doc.d.ts +28 -0
  367. package/src/routing/doc.d.ts.map +1 -0
  368. package/src/routing/doc.js +95 -0
  369. package/src/routing/error.d.ts +21 -0
  370. package/src/routing/error.d.ts.map +1 -0
  371. package/src/routing/error.js +126 -0
  372. package/src/routing/errorPages.d.ts +14 -0
  373. package/src/routing/errorPages.d.ts.map +1 -0
  374. package/src/routing/errorPages.js +103 -0
  375. package/src/routing/publicRoot.d.ts +18 -0
  376. package/src/routing/publicRoot.d.ts.map +1 -0
  377. package/src/routing/publicRoot.js +49 -0
  378. package/src/runtime/PluginAutoImports.d.ts +21 -0
  379. package/src/runtime/PluginAutoImports.d.ts.map +1 -0
  380. package/src/runtime/PluginAutoImports.js +59 -0
  381. package/src/runtime/PluginManager.d.ts +1 -5
  382. package/src/runtime/PluginManager.d.ts.map +1 -1
  383. package/src/runtime/PluginManager.js +25 -18
  384. package/src/runtime/RuntimeDetector.d.ts +1 -1
  385. package/src/runtime/RuntimeDetector.d.ts.map +1 -1
  386. package/src/runtime/adapters/CloudflareAdapter.d.ts +1 -1
  387. package/src/runtime/adapters/CloudflareAdapter.d.ts.map +1 -1
  388. package/src/runtime/adapters/CloudflareAdapter.js +1 -1
  389. package/src/runtime/adapters/DenoAdapter.d.ts +1 -1
  390. package/src/runtime/adapters/DenoAdapter.d.ts.map +1 -1
  391. package/src/runtime/adapters/DenoAdapter.js +1 -1
  392. package/src/runtime/adapters/LambdaAdapter.d.ts +1 -1
  393. package/src/runtime/adapters/LambdaAdapter.d.ts.map +1 -1
  394. package/src/runtime/adapters/LambdaAdapter.js +1 -1
  395. package/src/runtime/adapters/NodeServerAdapter.d.ts +1 -1
  396. package/src/runtime/adapters/NodeServerAdapter.d.ts.map +1 -1
  397. package/src/runtime/getKernel.d.ts +9 -0
  398. package/src/runtime/getKernel.d.ts.map +1 -0
  399. package/src/runtime/getKernel.js +27 -0
  400. package/src/scripts/TemplateImportsCheck.js +40 -0
  401. package/src/scripts/TemplateSync.js +86 -20
  402. package/src/security/Encryptor.d.ts.map +1 -1
  403. package/src/security/Encryptor.js +64 -7
  404. package/src/security/JwtManager.d.ts +1 -0
  405. package/src/security/JwtManager.d.ts.map +1 -1
  406. package/src/security/JwtManager.js +33 -0
  407. package/src/security/Sanitizer.d.ts +76 -0
  408. package/src/security/Sanitizer.d.ts.map +1 -0
  409. package/src/security/Sanitizer.js +412 -0
  410. package/src/security/TokenRevocation.d.ts +7 -0
  411. package/src/security/TokenRevocation.d.ts.map +1 -0
  412. package/src/security/TokenRevocation.js +57 -0
  413. package/src/seeders/SeederDiscovery.d.ts +5 -0
  414. package/src/seeders/SeederDiscovery.d.ts.map +1 -0
  415. package/src/seeders/SeederDiscovery.js +21 -0
  416. package/src/seeders/SeederLoader.d.ts +5 -0
  417. package/src/seeders/SeederLoader.d.ts.map +1 -0
  418. package/src/seeders/SeederLoader.js +60 -0
  419. package/src/seeders/types.d.ts +18 -0
  420. package/src/seeders/types.d.ts.map +1 -0
  421. package/src/seeders/types.js +1 -0
  422. package/src/session/SessionManager.js +1 -1
  423. package/src/templates/adapters/MySQLAdapter.ts.tpl +109 -85
  424. package/src/templates/adapters/PostgreSQLAdapter.ts.tpl +129 -88
  425. package/src/templates/adapters/SQLServerAdapter.ts.tpl +5 -9
  426. package/src/templates/adapters/SQLiteAdapter.ts.tpl +78 -11
  427. package/src/templates/features/Queue.ts.tpl +3 -2
  428. package/src/templates/project/basic/app/Controllers/AuthController.ts.tpl +217 -0
  429. package/src/templates/project/basic/app/Controllers/UserController.ts.tpl +1 -12
  430. package/src/templates/project/basic/app/Types/controller.ts.tpl +46 -0
  431. package/src/templates/project/basic/config/FileLogWriter.ts.tpl +5 -236
  432. package/src/templates/project/basic/config/SecretsManager.ts.tpl +10 -447
  433. package/src/templates/project/basic/config/StartupConfigValidator.ts.tpl +9 -268
  434. package/src/templates/project/basic/config/app.ts.tpl +13 -153
  435. package/src/templates/project/basic/config/broadcast.ts.tpl +15 -128
  436. package/src/templates/project/basic/config/cache.ts.tpl +15 -91
  437. package/src/templates/project/basic/config/cloudflare.ts.tpl +4 -39
  438. package/src/templates/project/basic/config/constants.ts.tpl +9 -65
  439. package/src/templates/project/basic/config/database.ts.tpl +29 -122
  440. package/src/templates/project/basic/config/env.ts.tpl +5 -169
  441. package/src/templates/project/basic/config/features.ts.tpl +6 -54
  442. package/src/templates/project/basic/config/index.ts.tpl +8 -23
  443. package/src/templates/project/basic/config/mail.ts.tpl +15 -114
  444. package/src/templates/project/basic/config/microservices.ts.tpl +11 -97
  445. package/src/templates/project/basic/config/middleware.ts.tpl +25 -43
  446. package/src/templates/project/basic/config/notification.ts.tpl +14 -126
  447. package/src/templates/project/basic/config/queue.ts.tpl +16 -79
  448. package/src/templates/project/basic/config/security.ts.tpl +11 -163
  449. package/src/templates/project/basic/config/startup.ts.tpl +10 -21
  450. package/src/templates/project/basic/config/storage.ts.tpl +15 -132
  451. package/src/templates/project/basic/config/type.ts.tpl +33 -451
  452. package/src/templates/project/basic/database/factories/UserFactory.ts.tpl +80 -0
  453. package/src/templates/project/basic/database/migrations/create_tasks_table.ts.tpl +28 -0
  454. package/src/templates/project/basic/database/migrations/create_users_table.ts.tpl +29 -0
  455. package/src/templates/project/basic/database/seeders/DatabaseSeeder.ts.tpl +19 -0
  456. package/src/templates/project/basic/database/seeders/UserSeeder.ts.tpl +18 -0
  457. package/src/templates/project/basic/database/seeders/index.ts.tpl +2 -0
  458. package/src/templates/project/basic/routes/api.ts.tpl +71 -33
  459. package/src/templates/project/basic/routes/metrics.ts.tpl +22 -0
  460. package/src/templates/project/basic/tsconfig.json.tpl +12 -11
  461. package/src/testing/TestEnvironment.d.ts +40 -0
  462. package/src/testing/TestEnvironment.d.ts.map +1 -0
  463. package/src/testing/TestEnvironment.js +141 -0
  464. package/src/testing/TestHttp.d.ts +29 -0
  465. package/src/testing/TestHttp.d.ts.map +1 -0
  466. package/src/testing/TestHttp.js +96 -0
  467. package/src/testing/index.d.ts +5 -0
  468. package/src/testing/index.d.ts.map +1 -0
  469. package/src/testing/index.js +2 -0
  470. package/src/time/DateTime.d.ts +181 -0
  471. package/src/time/DateTime.d.ts.map +1 -0
  472. package/src/time/DateTime.js +300 -0
  473. package/src/time/index.d.ts +7 -0
  474. package/src/time/index.d.ts.map +1 -0
  475. package/src/time/index.js +5 -0
  476. package/src/tools/http/Http.d.ts.map +1 -1
  477. package/src/tools/http/Http.js +4 -0
  478. package/src/tools/mail/drivers/Smtp.js +1 -1
  479. package/src/tools/queue/drivers/InMemory.d.ts +1 -1
  480. package/src/tools/queue/drivers/InMemory.d.ts.map +1 -1
  481. package/src/tools/queue/drivers/InMemory.js +1 -1
  482. package/src/tools/queue/drivers/Redis.d.ts +1 -1
  483. package/src/tools/queue/drivers/Redis.d.ts.map +1 -1
  484. package/src/tools/queue/drivers/Redis.js +1 -1
  485. package/src/validation/ValidationError.d.ts.map +1 -1
  486. package/src/validation/ValidationError.js +4 -2
  487. package/src/validation/Validator.d.ts +49 -16
  488. package/src/validation/Validator.d.ts.map +1 -1
  489. package/src/validation/Validator.js +307 -5
  490. package/src/common/uuid.d.ts +0 -3
  491. package/src/common/uuid.d.ts.map +0 -1
  492. package/src/common/uuid.js +0 -30
  493. package/src/templates/project/basic/.env.example.tpl +0 -74
  494. package/src/templates/project/basic/.env.tpl +0 -166
  495. package/src/templates/project/basic/database/migrations/index.ts.tpl +0 -2
@@ -1,21 +1,8 @@
1
1
  /**
2
- * Configuration Exports
2
+ * Configuration Exports (template)
3
3
  * Central export point for all configuration
4
4
  */
5
5
 
6
- import {
7
- appConfig,
8
- broadcastConfig,
9
- cacheConfig,
10
- databaseConfig,
11
- microservicesConfig,
12
- middlewareConfig,
13
- notificationConfig,
14
- queueConfig,
15
- securityConfig,
16
- storageConfig,
17
- } from '@zintrust/core';
18
-
19
6
  export {
20
7
  appConfig,
21
8
  broadcastConfig,
@@ -31,23 +18,21 @@ export {
31
18
 
32
19
  export type {
33
20
  AppConfig,
21
+ BroadcastConfig,
34
22
  CacheConfig,
23
+ DatabaseConfig,
35
24
  MicroservicesConfig,
25
+ MiddlewareConfig,
26
+ NotificationConfig,
36
27
  QueueConfig,
28
+ SecurityConfig,
37
29
  StorageConfig,
38
30
  } from '@zintrust/core';
39
31
 
40
- // Core exports this as `DatabaseRuntimeConfig`; keep template API stable.
41
- export type { DatabaseRuntimeConfig as DatabaseConfig } from '@zintrust/core';
42
-
43
- export type BroadcastConfig = typeof broadcastConfig;
44
- export type NotificationConfig = typeof notificationConfig;
45
-
46
32
  /**
47
33
  * Combined configuration object
48
- * Sealed namespace for immutability
49
34
  */
50
- export const config = Object.freeze({
35
+ export const config = {
51
36
  app: appConfig,
52
37
  broadcast: broadcastConfig,
53
38
  database: databaseConfig,
@@ -58,6 +43,6 @@ export const config = Object.freeze({
58
43
  microservices: microservicesConfig,
59
44
  cache: cacheConfig,
60
45
  queue: queueConfig,
61
- } as const);
46
+ } as const;
62
47
 
63
48
  export type Config = typeof config;
@@ -1,122 +1,23 @@
1
1
  /**
2
- * Mail Configuration
3
- * Runtime mail drivers and settings
4
- * Sealed namespace for immutability
2
+ * Mail Configuration (template)
3
+ *
4
+ * Keep this file declarative:
5
+ * - Core owns env parsing/default logic.
6
+ * - Projects can override values by editing `drivers` and `mailConfigObj`.
5
7
  */
6
8
 
7
- import type { MailConfigInput, MailDriverConfig } from '@zintrust/core';
8
- import { ErrorFactory, Env } from '@zintrust/core';
9
+ import { mailConfig as coreMailConfig } from '@zintrust/core';
9
10
 
10
- const isMailDriverConfig = (value: unknown): value is MailDriverConfig => {
11
- if (typeof value !== 'object' || value === null) return false;
12
- if (!('driver' in value)) return false;
11
+ type MailConfigShape = typeof coreMailConfig;
13
12
 
14
- const driver = (value as { driver?: unknown }).driver;
15
- return typeof driver === 'string' && driver.trim().length > 0;
16
- };
13
+ export const drivers = {
14
+ ...coreMailConfig.drivers,
15
+ } satisfies MailConfigShape['drivers'];
17
16
 
18
- const getMailDriver = (config: MailConfigInput, name?: string): MailDriverConfig => {
19
- const drivers = config.drivers as Record<string, unknown>;
20
- const envSelectedRaw = Env.get('MAIL_CONNECTION', Env.get('MAIL_DRIVER', '')).trim();
21
- const selected = (
22
- name ??
23
- (envSelectedRaw.length > 0 ? envSelectedRaw : undefined) ??
24
- config.default
25
- )
26
- .toString()
27
- .trim();
17
+ export const mailConfigObj = {
18
+ ...coreMailConfig,
19
+ drivers,
20
+ } satisfies MailConfigShape;
28
21
 
29
- if (selected.length === 0) {
30
- const disabled = drivers['disabled'];
31
- if (isMailDriverConfig(disabled)) return disabled;
32
- throw ErrorFactory.createConfigError('Mail driver not configured: disabled');
33
- }
34
-
35
- if (Object.hasOwn(drivers, selected)) {
36
- const resolved = drivers[selected];
37
- if (isMailDriverConfig(resolved)) return resolved;
38
- }
39
-
40
- throw ErrorFactory.createConfigError(`Mail driver not configured: ${selected}`);
41
- };
42
-
43
- const mailConfigObj = {
44
- /**
45
- * Default mail driver
46
- */
47
- default: Env.get('MAIL_CONNECTION', Env.get('MAIL_DRIVER', 'disabled')).trim().toLowerCase(),
48
-
49
- /**
50
- * Default "From" identity
51
- */
52
- from: {
53
- address: Env.get('MAIL_FROM_ADDRESS', ''),
54
- name: Env.get('MAIL_FROM_NAME', ''),
55
- },
56
-
57
- /**
58
- * Driver configs
59
- */
60
- drivers: {
61
- disabled: {
62
- driver: 'disabled' as const,
63
- },
64
-
65
- sendgrid: {
66
- driver: 'sendgrid' as const,
67
- apiKey: Env.get('SENDGRID_API_KEY', ''),
68
- },
69
-
70
- mailgun: {
71
- driver: 'mailgun' as const,
72
- apiKey: Env.get('MAILGUN_API_KEY', ''),
73
- domain: Env.get('MAILGUN_DOMAIN', ''),
74
- baseUrl: Env.get('MAILGUN_BASE_URL', 'https://api.mailgun.net').trim(),
75
- },
76
-
77
- smtp: {
78
- driver: 'smtp' as const,
79
- host: Env.get('MAIL_HOST', ''),
80
- port: Env.getInt('MAIL_PORT', 587),
81
- username: Env.get('MAIL_USERNAME', ''),
82
- password: Env.get('MAIL_PASSWORD', ''),
83
- secure: (() => {
84
- const raw = Env.get('MAIL_SECURE', '').trim().toLowerCase();
85
- if (raw === 'starttls') return 'starttls' as const;
86
- if (raw === 'tls' || raw === 'ssl' || raw === 'smtps' || raw === 'implicit') return true;
87
- if (raw === 'none' || raw === 'off' || raw === 'false' || raw === '0') return false;
88
- return Env.getBool('MAIL_SECURE', false);
89
- })(),
90
- },
91
-
92
- nodemailer: {
93
- driver: 'nodemailer' as const,
94
- host: Env.get('MAIL_HOST', ''),
95
- port: Env.getInt('MAIL_PORT', 587),
96
- username: Env.get('MAIL_USERNAME', ''),
97
- password: Env.get('MAIL_PASSWORD', ''),
98
- secure: (() => {
99
- const raw = Env.get('MAIL_SECURE', '').trim().toLowerCase();
100
- if (raw === 'starttls') return 'starttls' as const;
101
- if (raw === 'tls' || raw === 'ssl' || raw === 'smtps' || raw === 'implicit') return true;
102
- if (raw === 'none' || raw === 'off' || raw === 'false' || raw === '0') return false;
103
- return Env.getBool('MAIL_SECURE', false);
104
- })(),
105
- },
106
-
107
- ses: {
108
- driver: 'ses' as const,
109
- region: Env.get('AWS_REGION', 'us-east-1'),
110
- },
111
- },
112
-
113
- /**
114
- * Get selected driver config
115
- */
116
- getDriver(name?: string): MailDriverConfig {
117
- return getMailDriver(this, name);
118
- },
119
- } as const;
120
-
121
- export const mailConfig = Object.freeze(mailConfigObj);
22
+ export const mailConfig = mailConfigObj;
122
23
  export type MailConfig = typeof mailConfig;
@@ -1,104 +1,18 @@
1
1
  /**
2
- * Microservices Configuration
3
- * Microservices architecture and service discovery settings
4
- * Sealed namespace for immutability
2
+ * Microservices Configuration (template)
3
+ *
4
+ * Keep this file declarative:
5
+ * - Core owns env parsing/default logic.
6
+ * - Projects can override values by editing `microservicesConfigObj`.
5
7
  */
6
8
 
7
- import { Env } from '@zintrust/core';
9
+ import { microservicesConfig as coreMicroservicesConfig } from '@zintrust/core';
8
10
 
9
- const microservicesConfigObj = {
10
- /**
11
- * Enable microservices mode
12
- */
13
- enabled: Env.getBool('MICROSERVICES', false),
11
+ type MicroservicesConfigShape = typeof coreMicroservicesConfig;
14
12
 
15
- /**
16
- * Enabled services (comma-separated)
17
- */
18
- services: Env.get('SERVICES', '')
19
- .split(',')
20
- .filter((s) => s.trim()),
21
-
22
- /**
23
- * Service discovery
24
- */
25
- discovery: {
26
- type: Env.get('SERVICE_DISCOVERY_TYPE', 'filesystem') as 'filesystem' | 'consul' | 'etcd',
27
- servicesPath: Env.get('SERVICES_PATH', 'services'),
28
- refreshInterval: Env.getInt('SERVICE_DISCOVERY_REFRESH_INTERVAL', 30000),
29
- },
30
-
31
- /**
32
- * Service Registry
33
- */
34
- registry: {
35
- host: Env.get('SERVICE_REGISTRY_HOST', 'localhost'),
36
- port: Env.getInt('SERVICE_REGISTRY_PORT', 8500),
37
- deregisterCriticalServiceAfter: Env.get('SERVICE_DEREGISTER_CRITICAL_AFTER', '30s'),
38
- },
39
-
40
- /**
41
- * Service Authentication
42
- */
43
- auth: {
44
- strategy: Env.get('SERVICE_AUTH_STRATEGY', 'none') as 'api-key' | 'jwt' | 'none' | 'custom',
45
- apiKey: Env.get('SERVICE_API_KEY'),
46
- jwtSecret: Env.get('SERVICE_JWT_SECRET'),
47
- },
48
-
49
- /**
50
- * Request Tracing
51
- */
52
- tracing: {
53
- enabled: Env.getBool('MICROSERVICES_TRACING', false),
54
- samplingRate: Env.getInt('MICROSERVICES_TRACING_RATE', 100) / 100,
55
- exportInterval: Env.getInt('TRACING_EXPORT_INTERVAL', 10000),
56
- jaegerEndpoint: Env.get('JAEGER_AGENT_HOST', 'localhost'),
57
- },
58
-
59
- /**
60
- * Database Isolation
61
- */
62
- database: {
63
- isolation: Env.get('DATABASE_ISOLATION', 'shared') as 'shared' | 'isolated',
64
- schema: Env.get('DATABASE_SCHEMA_PREFIX', 'microservice'),
65
- },
66
-
67
- /**
68
- * Service Health Check
69
- */
70
- healthCheck: {
71
- enabled: Env.getBool('SERVICE_HEALTH_CHECK_ENABLED', true),
72
- interval: Env.getInt('SERVICE_HEALTH_CHECK_INTERVAL', 30000),
73
- timeout: Env.getInt('SERVICE_HEALTH_CHECK_TIMEOUT', 5000),
74
- unhealthyThreshold: Env.getInt('SERVICE_UNHEALTHY_THRESHOLD', 3),
75
- healthyThreshold: Env.getInt('SERVICE_HEALTHY_THRESHOLD', 2),
76
- },
77
-
78
- /**
79
- * Service Communication
80
- */
81
- communication: {
82
- timeout: Env.getInt('SERVICE_CALL_TIMEOUT', 30000),
83
- retries: Env.getInt('SERVICE_CALL_RETRIES', 3),
84
- retryDelay: Env.getInt('SERVICE_CALL_RETRY_DELAY', 1000),
85
- circuitBreaker: {
86
- enabled: Env.getBool('CIRCUIT_BREAKER_ENABLED', true),
87
- threshold: Env.getInt('CIRCUIT_BREAKER_THRESHOLD', 5),
88
- timeout: Env.getInt('CIRCUIT_BREAKER_TIMEOUT', 60000),
89
- },
90
- },
91
-
92
- /**
93
- * Service Mesh (Istio/Linkerd support)
94
- */
95
- mesh: {
96
- enabled: Env.getBool('SERVICE_MESH_ENABLED', false),
97
- type: Env.get('SERVICE_MESH_TYPE', 'istio') as 'istio' | 'linkerd',
98
- namespace: Env.get('SERVICE_MESH_NAMESPACE', 'default'),
99
- },
100
- } as const;
101
-
102
- export const microservicesConfig = Object.freeze(microservicesConfigObj);
13
+ export const microservicesConfigObj = {
14
+ ...coreMicroservicesConfig,
15
+ } satisfies MicroservicesConfigShape;
103
16
 
17
+ export const microservicesConfig = microservicesConfigObj;
104
18
  export type MicroservicesConfig = typeof microservicesConfig;
@@ -1,50 +1,32 @@
1
- import type { MiddlewareConfigType } from '@zintrust/core';
1
+ /**
2
+ * Middleware Configuration (template)
3
+ *
4
+ * Keep this file declarative:
5
+ * - Core owns middleware construction / any runtime behavior.
6
+ * - Projects can override by editing `middlewareConfigObj`.
7
+ */
8
+
9
+ import { middlewareConfig as coreMiddlewareConfig } from '@zintrust/core';
2
10
  import { CsrfMiddleware } from '@zintrust/core';
3
- import { ErrorHandlerMiddleware } from '@zintrust/core';
4
- import { LoggingMiddleware } from '@zintrust/core';
5
- import type { Middleware } from '@zintrust/core';
6
- import { RateLimiter } from '@zintrust/core';
7
- import { SecurityMiddleware } from '@zintrust/core';
8
11
 
9
- function createSharedMiddlewares() {
10
- return Object.freeze({
11
- log: LoggingMiddleware.create(),
12
- error: ErrorHandlerMiddleware.create(),
13
- security: SecurityMiddleware.create(),
14
- rateLimit: RateLimiter.create(),
15
- csrf: CsrfMiddleware.create(),
16
- });
17
- }
12
+ type MiddlewareConfigShape = typeof coreMiddlewareConfig;
18
13
 
19
- export function createMiddlewareConfig(): MiddlewareConfigType {
20
- const shared = createSharedMiddlewares();
21
-
22
- const middlewareConfigObj: MiddlewareConfigType = {
23
- global: [shared.log, shared.error, shared.security, shared.rateLimit, shared.csrf],
24
- route: shared,
25
- };
26
-
27
- return Object.freeze(middlewareConfigObj);
28
- }
29
-
30
- let cached: MiddlewareConfigType | null = null;
31
-
32
- function ensureMiddlewareConfig(): MiddlewareConfigType {
33
- if (cached) return cached;
34
- cached = createMiddlewareConfig();
35
- return cached;
36
- }
14
+ // Optional: if you're building a pure Bearer-token API (no cookie auth),
15
+ // you can bypass CSRF for API routes.
16
+ // Example: ['\/api\/*'] skips CSRF for all API endpoints.
17
+ const csrf = CsrfMiddleware.create({
18
+ skipPaths: [],
19
+ });
37
20
 
38
- export const middlewareConfig: MiddlewareConfigType = new Proxy({} as MiddlewareConfigType, {
39
- get(_target, prop: keyof MiddlewareConfigType) {
40
- return ensureMiddlewareConfig()[prop];
41
- },
42
- ownKeys() {
43
- return Reflect.ownKeys(ensureMiddlewareConfig());
21
+ export const middlewareConfigObj = {
22
+ ...coreMiddlewareConfig,
23
+ route: {
24
+ ...coreMiddlewareConfig.route,
25
+ csrf,
44
26
  },
45
- getOwnPropertyDescriptor(_target, prop) {
46
- return Object.getOwnPropertyDescriptor(ensureMiddlewareConfig(), prop);
47
- },
48
- });
27
+ // Keep global middleware order but swap in the overridden CSRF middleware.
28
+ global: coreMiddlewareConfig.global.map((mw) => (mw === coreMiddlewareConfig.route.csrf ? csrf : mw)),
29
+ } satisfies MiddlewareConfigShape;
49
30
 
31
+ export const middlewareConfig = middlewareConfigObj;
50
32
  export default middlewareConfig;
@@ -1,135 +1,23 @@
1
1
  /**
2
- * Notification Configuration
2
+ * Notification Configuration (template)
3
3
  *
4
- * Config-first mapping of notification providers/channels.
5
- * Driver selection must be dynamic (tests may mutate process.env).
4
+ * Keep this file declarative:
5
+ * - Core owns env parsing/default logic.
6
+ * - Projects can override values by editing `drivers` and `notificationConfigObj`.
6
7
  */
7
8
 
8
- import type {
9
- KnownNotificationDriverConfig,
10
- NotificationConfigInput,
11
- NotificationDrivers,
12
- NotificationProviders,
13
- } from '@zintrust/core';
14
- import { ErrorFactory ,Env} from '@zintrust/core';
9
+ import { notificationConfig as coreNotificationConfig } from '@zintrust/core';
15
10
 
16
- const normalizeName = (value: string): string => value.trim().toLowerCase();
11
+ type NotificationConfigShape = typeof coreNotificationConfig;
17
12
 
18
- const hasOwn = (obj: Record<string, unknown>, key: string): boolean => {
19
- return Object.hasOwn(obj, key);
20
- };
13
+ export const drivers = {
14
+ ...coreNotificationConfig.drivers,
15
+ } satisfies NotificationConfigShape['drivers'];
21
16
 
22
- const getDefaultChannel = (drivers: NotificationDrivers): string => {
23
- const envSelectedRaw = Env.get(
24
- 'NOTIFICATION_CONNECTION',
25
- Env.get('NOTIFICATION_DRIVER', 'console')
26
- );
27
- const value = normalizeName(envSelectedRaw ?? 'console');
28
-
29
- if (value.length > 0 && hasOwn(drivers, value)) return value;
30
-
31
- if (envSelectedRaw.trim().length > 0) {
32
- throw ErrorFactory.createConfigError(`Notification channel not configured: ${value}`);
33
- }
34
-
35
- return hasOwn(drivers, 'console') ? 'console' : (Object.keys(drivers)[0] ?? 'console');
36
- };
37
-
38
- const getNotificationDriver = (
39
- config: NotificationConfigInput,
40
- name?: string
41
- ): KnownNotificationDriverConfig => {
42
- const selected = normalizeName(String(name ?? config.default));
43
- const channelName = selected === 'default' ? normalizeName(config.default) : selected;
44
-
45
- const isExplicitSelection =
46
- name !== undefined &&
47
- String(name).trim().length > 0 &&
48
- normalizeName(String(name)) !== 'default';
49
-
50
- if (channelName.length > 0 && hasOwn(config.drivers, channelName)) {
51
- const resolved = config.drivers[channelName];
52
- if (resolved !== undefined) return resolved;
53
- }
54
-
55
- if (Object.keys(config.drivers ?? {}).length === 0) {
56
- throw ErrorFactory.createConfigError('No notification channels are configured');
57
- }
58
-
59
- if (isExplicitSelection) {
60
- throw ErrorFactory.createConfigError(`Notification channel not configured: ${channelName}`);
61
- }
62
-
63
- // Default selection is strict: if `default` points at an unconfigured channel, throw.
64
- throw ErrorFactory.createConfigError(`Notification channel not configured: ${channelName}`);
65
- };
66
-
67
- const getBaseProviders = (): NotificationProviders => {
68
- return {
69
- console: { driver: 'console' as const },
70
- termii: {
71
- driver: 'termii' as const,
72
- apiKey: Env.get('TERMII_API_KEY', ''),
73
- sender: Env.get('TERMII_SENDER', 'Zintrust'),
74
- endpoint: Env.get('TERMII_ENDPOINT', 'https://api.termii.com/sms/send'),
75
- },
76
- twilio: {
77
- driver: 'twilio' as const,
78
- accountSid: Env.get('TWILIO_ACCOUNT_SID', ''),
79
- authToken: Env.get('TWILIO_AUTH_TOKEN', ''),
80
- fromNumber: Env.get('TWILIO_FROM_NUMBER', ''),
81
- },
82
- slack: {
83
- driver: 'slack' as const,
84
- webhookUrl: Env.get('SLACK_WEBHOOK_URL', ''),
85
- },
86
- };
87
- };
88
-
89
- const notificationConfigObj = {
90
- /**
91
- * Default notification channel name (normalized).
92
- */
93
- get default(): string {
94
- return getDefaultChannel(this.drivers);
95
- },
96
-
97
- /**
98
- * Notification channels.
99
- *
100
- * You may add custom named channels (e.g. `opsSlack`, `smsMarketing`) that
101
- * point to any known driver config.
102
- */
103
- get drivers(): NotificationDrivers {
104
- // Return a record of channels; can be extended by app-level config.
105
- return getBaseProviders() as unknown as NotificationDrivers;
106
- },
107
-
108
- /**
109
- * Legacy provider configs (kept for backwards compatibility with wrappers).
110
- */
111
- get providers(): NotificationProviders {
112
- return getBaseProviders();
113
- },
114
-
115
- /**
116
- * Normalized notification channel name.
117
- */
118
- getDriverName(): string {
119
- return normalizeName(this.default);
120
- },
121
-
122
- /**
123
- * Resolve a channel config.
124
- * - Unknown names throw when explicitly selected.
125
- * - `default` is a reserved alias of the configured default.
126
- */
127
- getDriverConfig(name?: string): KnownNotificationDriverConfig {
128
- return getNotificationDriver(this, name);
129
- },
130
- } as const;
131
-
132
- export const notificationConfig = Object.freeze(notificationConfigObj);
133
- export type NotificationConfig = typeof notificationConfig;
17
+ export const notificationConfigObj = {
18
+ ...coreNotificationConfig,
19
+ drivers,
20
+ } satisfies NotificationConfigShape;
134
21
 
22
+ const notificationConfig = notificationConfigObj;
135
23
  export default notificationConfig;
@@ -1,86 +1,23 @@
1
1
  /**
2
- * Queue Configuration
3
- * Background job and message queue settings
4
- * Sealed namespace for immutability
2
+ * Queue Configuration (template)
3
+ *
4
+ * Keep this file declarative:
5
+ * - Core owns env parsing/default logic.
6
+ * - Projects can override values by editing `connections` and `queueConfigObj`.
5
7
  */
6
8
 
7
- import { Env } from '@zintrust/core';
9
+ import { queueConfig as coreQueueConfig } from '@zintrust/core';
8
10
 
9
- import type { QueueConfigWithDrivers, QueueDriverName, QueueDriversConfig } from '@zintrust/core';
11
+ type QueueConfigShape = typeof coreQueueConfig;
10
12
 
11
- const getQueueDriver = (config: QueueConfigWithDrivers): QueueDriversConfig[QueueDriverName] => {
12
- const driverName = config.default;
13
- return config.drivers[driverName];
14
- };
13
+ export const connections = {
14
+ ...coreQueueConfig.connections,
15
+ } satisfies QueueConfigShape['connections'];
15
16
 
16
- const queueConfigObj = {
17
- /**
18
- * Default queue driver
19
- */
20
- default: Env.get('QUEUE_DRIVER', 'sync') as QueueDriverName,
17
+ export const queueConfigObj = {
18
+ ...coreQueueConfig,
19
+ connections,
20
+ } satisfies QueueConfigShape;
21
21
 
22
- /**
23
- * Queue drivers
24
- */
25
- drivers: {
26
- sync: {
27
- driver: 'sync' as const,
28
- },
29
- database: {
30
- driver: 'database' as const,
31
- table: Env.get('QUEUE_TABLE', 'jobs'),
32
- connection: Env.get('QUEUE_DB_CONNECTION', 'default'),
33
- },
34
- redis: {
35
- driver: 'redis' as const,
36
- host: Env.get('REDIS_HOST', 'localhost'),
37
- port: Env.getInt('REDIS_PORT', 6379),
38
- password: Env.get('REDIS_PASSWORD'),
39
- database: Env.getInt('REDIS_QUEUE_DB', 1),
40
- },
41
- rabbitmq: {
42
- driver: 'rabbitmq' as const,
43
- host: Env.get('RABBITMQ_HOST', 'localhost'),
44
- port: Env.getInt('RABBITMQ_PORT', 5672),
45
- username: Env.get('RABBITMQ_USER', 'guest'),
46
- password: Env.get('RABBITMQ_PASSWORD', 'guest'),
47
- vhost: Env.get('RABBITMQ_VHOST', '/'),
48
- },
49
- sqs: {
50
- driver: 'sqs' as const,
51
- key: Env.get('AWS_ACCESS_KEY_ID'),
52
- secret: Env.get('AWS_SECRET_ACCESS_KEY'),
53
- region: Env.AWS_REGION,
54
- queueUrl: Env.get('AWS_SQS_QUEUE_URL'),
55
- },
56
- } satisfies QueueDriversConfig,
57
-
58
- /**
59
- * Get queue driver config
60
- */
61
- getDriver(): QueueDriversConfig[QueueDriverName] {
62
- return getQueueDriver(this);
63
- },
64
-
65
- /**
66
- * Failed jobs table
67
- */
68
- failed: {
69
- database: Env.get('FAILED_JOBS_DB_CONNECTION', 'default'),
70
- table: Env.get('FAILED_JOBS_TABLE', 'failed_jobs'),
71
- },
72
-
73
- /**
74
- * Job processing
75
- */
76
- processing: {
77
- timeout: Env.getInt('QUEUE_JOB_TIMEOUT', 60),
78
- retries: Env.getInt('QUEUE_JOB_RETRIES', 3),
79
- backoff: Env.getInt('QUEUE_JOB_BACKOFF', 0),
80
- workers: Env.getInt('QUEUE_WORKERS', 1),
81
- },
82
- };
83
-
84
- export const queueConfig = Object.freeze(queueConfigObj);
85
-
86
- export type QueueConfig = typeof queueConfig;
22
+ const queueConfig = queueConfigObj;
23
+ export default queueConfig;