@zintrust/core 0.1.19 → 0.1.21

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 (528) 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 +3 -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 +66 -13
  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/boot/bootstrap.js +2 -0
  25. package/src/cache/Cache.d.ts +1 -1
  26. package/src/cache/Cache.d.ts.map +1 -1
  27. package/src/cache/CacheDriver.d.ts +4 -0
  28. package/src/cache/CacheDriver.d.ts.map +1 -1
  29. package/src/cache/drivers/KVDriver.d.ts +1 -1
  30. package/src/cache/drivers/KVDriver.d.ts.map +1 -1
  31. package/src/cache/drivers/MemoryDriver.d.ts +1 -1
  32. package/src/cache/drivers/MemoryDriver.d.ts.map +1 -1
  33. package/src/cache/drivers/MemoryDriver.js +16 -0
  34. package/src/cache/drivers/MongoDriver.d.ts +1 -1
  35. package/src/cache/drivers/MongoDriver.d.ts.map +1 -1
  36. package/src/cache/drivers/RedisDriver.d.ts +1 -1
  37. package/src/cache/drivers/RedisDriver.d.ts.map +1 -1
  38. package/src/cli/CLI.d.ts.map +1 -1
  39. package/src/cli/CLI.js +10 -4
  40. package/src/cli/commands/AddCommand.d.ts +2 -2
  41. package/src/cli/commands/AddCommand.d.ts.map +1 -1
  42. package/src/cli/commands/AddCommand.js +135 -58
  43. package/src/cli/commands/ConfigCommand.d.ts +1 -1
  44. package/src/cli/commands/ConfigCommand.d.ts.map +1 -1
  45. package/src/cli/commands/CreateCommand.d.ts +15 -0
  46. package/src/cli/commands/CreateCommand.d.ts.map +1 -0
  47. package/src/cli/commands/CreateCommand.js +143 -0
  48. package/src/cli/commands/D1MigrateCommand.d.ts +1 -1
  49. package/src/cli/commands/D1MigrateCommand.d.ts.map +1 -1
  50. package/src/cli/commands/D1MigrateCommand.js +16 -20
  51. package/src/cli/commands/DbSeedCommand.d.ts +9 -0
  52. package/src/cli/commands/DbSeedCommand.d.ts.map +1 -0
  53. package/src/cli/commands/DbSeedCommand.js +171 -0
  54. package/src/cli/commands/DebugCommand.d.ts +1 -1
  55. package/src/cli/commands/DebugCommand.d.ts.map +1 -1
  56. package/src/cli/commands/FixCommand.d.ts +1 -1
  57. package/src/cli/commands/FixCommand.d.ts.map +1 -1
  58. package/src/cli/commands/JwtDevCommand.d.ts +8 -0
  59. package/src/cli/commands/JwtDevCommand.d.ts.map +1 -0
  60. package/src/cli/commands/JwtDevCommand.js +114 -0
  61. package/src/cli/commands/KeyGenerateCommand.d.ts +1 -1
  62. package/src/cli/commands/KeyGenerateCommand.d.ts.map +1 -1
  63. package/src/cli/commands/LogsCommand.d.ts +2 -2
  64. package/src/cli/commands/LogsCommand.d.ts.map +1 -1
  65. package/src/cli/commands/LogsCommand.js +36 -2
  66. package/src/cli/commands/MakeMailTemplateCommand.d.ts +1 -1
  67. package/src/cli/commands/MakeMailTemplateCommand.d.ts.map +1 -1
  68. package/src/cli/commands/MakeNotificationTemplateCommand.d.ts +1 -1
  69. package/src/cli/commands/MakeNotificationTemplateCommand.d.ts.map +1 -1
  70. package/src/cli/commands/MigrateCommand.d.ts +1 -1
  71. package/src/cli/commands/MigrateCommand.d.ts.map +1 -1
  72. package/src/cli/commands/MigrateCommand.js +324 -35
  73. package/src/cli/commands/NewCommand.d.ts +1 -1
  74. package/src/cli/commands/NewCommand.d.ts.map +1 -1
  75. package/src/cli/commands/NewCommand.js +12 -4
  76. package/src/cli/commands/PluginCommand.d.ts +1 -1
  77. package/src/cli/commands/PluginCommand.d.ts.map +1 -1
  78. package/src/cli/commands/PrepareCommand.d.ts +1 -1
  79. package/src/cli/commands/PrepareCommand.d.ts.map +1 -1
  80. package/src/cli/commands/QACommand.d.ts +2 -2
  81. package/src/cli/commands/QACommand.d.ts.map +1 -1
  82. package/src/cli/commands/RoutesCommand.d.ts +10 -0
  83. package/src/cli/commands/RoutesCommand.d.ts.map +1 -0
  84. package/src/cli/commands/RoutesCommand.js +242 -0
  85. package/src/cli/commands/SimulateCommand.d.ts +1 -1
  86. package/src/cli/commands/SimulateCommand.d.ts.map +1 -1
  87. package/src/cli/commands/index.d.ts +3 -0
  88. package/src/cli/commands/index.d.ts.map +1 -1
  89. package/src/cli/commands/index.js +3 -0
  90. package/src/cli/config/ConfigManager.d.ts +1 -1
  91. package/src/cli/config/ConfigManager.d.ts.map +1 -1
  92. package/src/cli/config/ConfigValidator.d.ts +1 -1
  93. package/src/cli/config/ConfigValidator.d.ts.map +1 -1
  94. package/src/cli/config/ConfigValidator.js +1 -1
  95. package/src/cli/d1/D1SqlMigrations.d.ts +20 -0
  96. package/src/cli/d1/D1SqlMigrations.d.ts.map +1 -0
  97. package/src/cli/d1/D1SqlMigrations.js +229 -0
  98. package/src/cli/d1/WranglerConfig.d.ts +4 -0
  99. package/src/cli/d1/WranglerConfig.d.ts.map +1 -0
  100. package/src/cli/d1/WranglerConfig.js +122 -0
  101. package/src/cli/d1/WranglerD1.d.ts +11 -0
  102. package/src/cli/d1/WranglerD1.d.ts.map +1 -0
  103. package/src/cli/d1/WranglerD1.js +16 -0
  104. package/src/cli/scaffolding/ControllerGenerator.d.ts.map +1 -1
  105. package/src/cli/scaffolding/ControllerGenerator.js +76 -26
  106. package/src/cli/scaffolding/FactoryGenerator.d.ts.map +1 -1
  107. package/src/cli/scaffolding/FactoryGenerator.js +3 -1
  108. package/src/cli/scaffolding/GovernanceScaffolder.d.ts +23 -0
  109. package/src/cli/scaffolding/GovernanceScaffolder.d.ts.map +1 -0
  110. package/src/cli/scaffolding/GovernanceScaffolder.js +327 -0
  111. package/src/cli/scaffolding/MigrationGenerator.d.ts +10 -0
  112. package/src/cli/scaffolding/MigrationGenerator.d.ts.map +1 -1
  113. package/src/cli/scaffolding/MigrationGenerator.js +137 -51
  114. package/src/cli/scaffolding/ModelGenerator.js +1 -1
  115. package/src/cli/scaffolding/ProjectScaffolder.d.ts.map +1 -1
  116. package/src/cli/scaffolding/ProjectScaffolder.js +36 -4
  117. package/src/cli/scaffolding/RouteGenerator.d.ts.map +1 -1
  118. package/src/cli/scaffolding/RouteGenerator.js +79 -43
  119. package/src/cli/scaffolding/SeederGenerator.d.ts +5 -0
  120. package/src/cli/scaffolding/SeederGenerator.d.ts.map +1 -1
  121. package/src/cli/scaffolding/SeederGenerator.js +63 -15
  122. package/src/cli/scaffolding/ServiceScaffolder.d.ts.map +1 -1
  123. package/src/cli/scaffolding/ServiceScaffolder.js +28 -7
  124. package/src/cli/scaffolding/index.d.ts +2 -0
  125. package/src/cli/scaffolding/index.d.ts.map +1 -1
  126. package/src/cli/scaffolding/index.js +1 -0
  127. package/src/common/index.d.ts +8 -0
  128. package/src/common/index.d.ts.map +1 -1
  129. package/src/common/index.js +28 -0
  130. package/src/common/utility.d.ts +38 -0
  131. package/src/common/utility.d.ts.map +1 -0
  132. package/src/common/utility.js +101 -0
  133. package/src/config/FileLogWriter.d.ts +2 -1
  134. package/src/config/FileLogWriter.d.ts.map +1 -1
  135. package/src/config/FileLogWriter.js +83 -2
  136. package/src/config/app.d.ts.map +1 -1
  137. package/src/config/app.js +3 -1
  138. package/src/config/broadcast.d.ts +14 -28
  139. package/src/config/broadcast.d.ts.map +1 -1
  140. package/src/config/broadcast.js +69 -35
  141. package/src/config/cache.d.ts +13 -45
  142. package/src/config/cache.d.ts.map +1 -1
  143. package/src/config/cache.js +69 -25
  144. package/src/config/cloudflare.d.ts +1 -1
  145. package/src/config/cloudflare.d.ts.map +1 -1
  146. package/src/config/database.d.ts +22 -64
  147. package/src/config/database.d.ts.map +1 -1
  148. package/src/config/database.js +191 -37
  149. package/src/config/env.d.ts +12 -0
  150. package/src/config/env.d.ts.map +1 -1
  151. package/src/config/env.js +14 -0
  152. package/src/config/index.d.ts +33 -137
  153. package/src/config/index.d.ts.map +1 -1
  154. package/src/config/logging/KvLogger.js +1 -1
  155. package/src/config/logging/SlackLogger.js +2 -2
  156. package/src/config/mail.d.ts +19 -55
  157. package/src/config/mail.d.ts.map +1 -1
  158. package/src/config/mail.js +63 -21
  159. package/src/config/middleware.d.ts +44 -1
  160. package/src/config/middleware.d.ts.map +1 -1
  161. package/src/config/middleware.js +157 -5
  162. package/src/config/notification.d.ts +14 -27
  163. package/src/config/notification.d.ts.map +1 -1
  164. package/src/config/notification.js +82 -36
  165. package/src/config/queue.d.ts +21 -51
  166. package/src/config/queue.d.ts.map +1 -1
  167. package/src/config/queue.js +72 -27
  168. package/src/config/security.d.ts +1 -1
  169. package/src/config/security.js +1 -1
  170. package/src/config/storage.d.ts +27 -34
  171. package/src/config/storage.d.ts.map +1 -1
  172. package/src/config/storage.js +97 -56
  173. package/src/config/type.d.ts +13 -2
  174. package/src/config/type.d.ts.map +1 -1
  175. package/src/events/EventDispatcher.d.ts.map +1 -1
  176. package/src/events/EventDispatcher.js +6 -4
  177. package/src/exceptions/ZintrustError.d.ts +7 -0
  178. package/src/exceptions/ZintrustError.d.ts.map +1 -1
  179. package/src/exceptions/ZintrustError.js +56 -0
  180. package/src/features/Auth.d.ts +1 -1
  181. package/src/features/Auth.d.ts.map +1 -1
  182. package/src/features/Auth.js +3 -3
  183. package/src/features/Queue.js +1 -1
  184. package/src/functions/cloudflare.d.ts.map +1 -1
  185. package/src/functions/cloudflare.js +3 -14
  186. package/src/functions/deno.d.ts.map +1 -1
  187. package/src/functions/deno.js +3 -14
  188. package/src/functions/lambda.d.ts.map +1 -1
  189. package/src/functions/lambda.js +3 -14
  190. package/src/health/StartupHealthChecks.js +1 -1
  191. package/src/http/Controller.d.ts +2 -2
  192. package/src/http/Controller.d.ts.map +1 -1
  193. package/src/http/FileUpload.d.ts +68 -0
  194. package/src/http/FileUpload.d.ts.map +1 -0
  195. package/src/http/FileUpload.js +120 -0
  196. package/src/http/Kernel.d.ts +5 -5
  197. package/src/http/Kernel.d.ts.map +1 -1
  198. package/src/http/Kernel.js +139 -23
  199. package/src/http/Request.d.ts +20 -1
  200. package/src/http/Request.d.ts.map +1 -1
  201. package/src/http/Request.js +23 -0
  202. package/src/http/RequestContext.d.ts +6 -0
  203. package/src/http/RequestContext.d.ts.map +1 -1
  204. package/src/http/RequestContext.js +77 -1
  205. package/src/http/Response.d.ts +1 -1
  206. package/src/http/Response.d.ts.map +1 -1
  207. package/src/http/ValidationHelper.d.ts +78 -0
  208. package/src/http/ValidationHelper.d.ts.map +1 -0
  209. package/src/http/ValidationHelper.js +121 -0
  210. package/src/http/error-pages/ErrorPageRenderer.d.ts +17 -0
  211. package/src/http/error-pages/ErrorPageRenderer.d.ts.map +1 -0
  212. package/src/http/error-pages/ErrorPageRenderer.js +88 -0
  213. package/src/http/middleware/BodyParsingMiddleware.d.ts +12 -0
  214. package/src/http/middleware/BodyParsingMiddleware.d.ts.map +1 -0
  215. package/src/http/middleware/BodyParsingMiddleware.js +251 -0
  216. package/src/http/middleware/FileUploadMiddleware.d.ts +12 -0
  217. package/src/http/middleware/FileUploadMiddleware.d.ts.map +1 -0
  218. package/src/http/middleware/FileUploadMiddleware.js +74 -0
  219. package/src/http/parsers/BodyParsers.d.ts +32 -0
  220. package/src/http/parsers/BodyParsers.d.ts.map +1 -0
  221. package/src/http/parsers/BodyParsers.js +159 -0
  222. package/src/http/parsers/MultipartParser.d.ts +33 -0
  223. package/src/http/parsers/MultipartParser.d.ts.map +1 -0
  224. package/src/http/parsers/MultipartParser.js +156 -0
  225. package/src/http/parsers/MultipartParserRegistry.d.ts +34 -0
  226. package/src/http/parsers/MultipartParserRegistry.d.ts.map +1 -0
  227. package/src/http/parsers/MultipartParserRegistry.js +20 -0
  228. package/src/http/validated.d.ts +12 -0
  229. package/src/http/validated.d.ts.map +1 -0
  230. package/src/http/validated.js +41 -0
  231. package/src/index.d.ts +73 -12
  232. package/src/index.d.ts.map +1 -1
  233. package/src/index.js +60 -5
  234. package/src/microservices/PostgresAdapter.d.ts.map +1 -1
  235. package/src/microservices/PostgresAdapter.js +0 -1
  236. package/src/microservices/RequestTracingMiddleware.d.ts +2 -2
  237. package/src/microservices/RequestTracingMiddleware.d.ts.map +1 -1
  238. package/src/microservices/RequestTracingMiddleware.js +3 -0
  239. package/src/microservices/ServiceAuthMiddleware.d.ts +2 -2
  240. package/src/microservices/ServiceAuthMiddleware.d.ts.map +1 -1
  241. package/src/middleware/AuthMiddleware.d.ts +10 -0
  242. package/src/middleware/AuthMiddleware.d.ts.map +1 -0
  243. package/src/middleware/AuthMiddleware.js +16 -0
  244. package/src/middleware/CsrfMiddleware.d.ts +11 -1
  245. package/src/middleware/CsrfMiddleware.d.ts.map +1 -1
  246. package/src/middleware/CsrfMiddleware.js +33 -0
  247. package/src/middleware/JwtAuthMiddleware.d.ts +11 -0
  248. package/src/middleware/JwtAuthMiddleware.d.ts.map +1 -0
  249. package/src/middleware/JwtAuthMiddleware.js +73 -0
  250. package/src/middleware/LoggingMiddleware.d.ts.map +1 -1
  251. package/src/middleware/LoggingMiddleware.js +8 -3
  252. package/src/middleware/MiddlewareStack.d.ts +2 -2
  253. package/src/middleware/MiddlewareStack.d.ts.map +1 -1
  254. package/src/middleware/RateLimiter.d.ts +2 -2
  255. package/src/middleware/RateLimiter.d.ts.map +1 -1
  256. package/src/middleware/SanitizeBodyMiddleware.d.ts +12 -0
  257. package/src/middleware/SanitizeBodyMiddleware.d.ts.map +1 -0
  258. package/src/middleware/SanitizeBodyMiddleware.js +31 -0
  259. package/src/middleware/SecurityMiddleware.d.ts +1 -1
  260. package/src/middleware/SecurityMiddleware.d.ts.map +1 -1
  261. package/src/middleware/SessionMiddleware.d.ts +1 -1
  262. package/src/middleware/SessionMiddleware.d.ts.map +1 -1
  263. package/src/middleware/ValidationMiddleware.d.ts +25 -0
  264. package/src/middleware/ValidationMiddleware.d.ts.map +1 -0
  265. package/src/middleware/ValidationMiddleware.js +251 -0
  266. package/src/migrations/MigrationDiscovery.d.ts +5 -0
  267. package/src/migrations/MigrationDiscovery.d.ts.map +1 -0
  268. package/src/migrations/MigrationDiscovery.js +16 -0
  269. package/src/migrations/MigrationLoader.d.ts +5 -0
  270. package/src/migrations/MigrationLoader.d.ts.map +1 -0
  271. package/src/migrations/MigrationLoader.js +43 -0
  272. package/src/migrations/MigrationLock.d.ts +4 -0
  273. package/src/migrations/MigrationLock.d.ts.map +1 -0
  274. package/src/migrations/MigrationLock.js +33 -0
  275. package/src/migrations/Migrator.d.ts +23 -0
  276. package/src/migrations/Migrator.d.ts.map +1 -0
  277. package/src/migrations/Migrator.js +4 -0
  278. package/src/migrations/MigratorFactory.d.ts +25 -0
  279. package/src/migrations/MigratorFactory.d.ts.map +1 -0
  280. package/src/migrations/MigratorFactory.js +339 -0
  281. package/src/migrations/schema/Blueprint.d.ts +5 -0
  282. package/src/migrations/schema/Blueprint.d.ts.map +1 -0
  283. package/src/migrations/schema/Blueprint.js +189 -0
  284. package/src/migrations/schema/Schema.d.ts +8 -0
  285. package/src/migrations/schema/Schema.d.ts.map +1 -0
  286. package/src/migrations/schema/Schema.js +141 -0
  287. package/src/migrations/schema/SchemaCompiler.d.ts +20 -0
  288. package/src/migrations/schema/SchemaCompiler.d.ts.map +1 -0
  289. package/src/migrations/schema/SchemaCompiler.js +262 -0
  290. package/src/migrations/schema/index.d.ts +5 -0
  291. package/src/migrations/schema/index.d.ts.map +1 -0
  292. package/src/migrations/schema/index.js +3 -0
  293. package/src/migrations/schema/types.d.ts +86 -0
  294. package/src/migrations/schema/types.d.ts.map +1 -0
  295. package/src/migrations/schema/types.js +1 -0
  296. package/src/migrations/types.d.ts +45 -0
  297. package/src/migrations/types.d.ts.map +1 -0
  298. package/src/migrations/types.js +1 -0
  299. package/src/node-singletons/crypto.d.ts +1 -1
  300. package/src/node-singletons/crypto.d.ts.map +1 -1
  301. package/src/node-singletons/crypto.js +1 -1
  302. package/src/node-singletons/fs.d.ts +2 -2
  303. package/src/node-singletons/fs.d.ts.map +1 -1
  304. package/src/node-singletons/fs.js +1 -1
  305. package/src/node-singletons/util.d.ts +6 -0
  306. package/src/node-singletons/util.d.ts.map +1 -0
  307. package/src/node-singletons/util.js +5 -0
  308. package/src/node.d.ts +3 -1
  309. package/src/node.d.ts.map +1 -1
  310. package/src/node.js +6 -2
  311. package/src/observability/OpenTelemetry.d.ts +62 -0
  312. package/src/observability/OpenTelemetry.d.ts.map +1 -0
  313. package/src/observability/OpenTelemetry.js +167 -0
  314. package/src/observability/PrometheusMetrics.d.ts +25 -0
  315. package/src/observability/PrometheusMetrics.d.ts.map +1 -0
  316. package/src/observability/PrometheusMetrics.js +114 -0
  317. package/src/openapi/OpenApiGenerator.d.ts +68 -0
  318. package/src/openapi/OpenApiGenerator.d.ts.map +1 -0
  319. package/src/openapi/OpenApiGenerator.js +287 -0
  320. package/src/orm/Database.d.ts +5 -2
  321. package/src/orm/Database.d.ts.map +1 -1
  322. package/src/orm/Database.js +219 -63
  323. package/src/orm/DatabaseAdapter.d.ts +14 -0
  324. package/src/orm/DatabaseAdapter.d.ts.map +1 -1
  325. package/src/orm/DatabaseAdapterRegistry.d.ts.map +1 -1
  326. package/src/orm/DatabaseAdapterRegistry.js +3 -1
  327. package/src/orm/DatabaseRuntimeRegistration.d.ts.map +1 -1
  328. package/src/orm/DatabaseRuntimeRegistration.js +12 -0
  329. package/src/orm/Model.d.ts +30 -2
  330. package/src/orm/Model.d.ts.map +1 -1
  331. package/src/orm/Model.js +255 -62
  332. package/src/orm/QueryBuilder.d.ts +22 -1
  333. package/src/orm/QueryBuilder.d.ts.map +1 -1
  334. package/src/orm/QueryBuilder.js +406 -99
  335. package/src/orm/Relationships.d.ts +7 -1
  336. package/src/orm/Relationships.d.ts.map +1 -1
  337. package/src/orm/Relationships.js +18 -0
  338. package/src/orm/SchemaCompiler.d.ts +9 -0
  339. package/src/orm/SchemaCompiler.d.ts.map +1 -0
  340. package/src/orm/SchemaCompiler.js +145 -0
  341. package/src/orm/adapters/D1Adapter.d.ts +1 -1
  342. package/src/orm/adapters/D1Adapter.d.ts.map +1 -1
  343. package/src/orm/adapters/MySQLAdapter.d.ts +1 -1
  344. package/src/orm/adapters/MySQLAdapter.d.ts.map +1 -1
  345. package/src/orm/adapters/MySQLAdapter.js +88 -69
  346. package/src/orm/adapters/PostgreSQLAdapter.d.ts +1 -1
  347. package/src/orm/adapters/PostgreSQLAdapter.d.ts.map +1 -1
  348. package/src/orm/adapters/PostgreSQLAdapter.js +88 -69
  349. package/src/orm/adapters/SQLServerAdapter.d.ts +1 -1
  350. package/src/orm/adapters/SQLServerAdapter.d.ts.map +1 -1
  351. package/src/orm/adapters/SQLiteAdapter.d.ts +1 -1
  352. package/src/orm/adapters/SQLiteAdapter.d.ts.map +1 -1
  353. package/src/orm/adapters/SQLiteAdapter.js +59 -3
  354. package/src/orm/maintenance/SqliteMaintenance.d.ts +5 -0
  355. package/src/orm/maintenance/SqliteMaintenance.d.ts.map +1 -0
  356. package/src/orm/maintenance/SqliteMaintenance.js +14 -0
  357. package/src/orm/migrations/MigrationStore.d.ts +38 -0
  358. package/src/orm/migrations/MigrationStore.d.ts.map +1 -0
  359. package/src/orm/migrations/MigrationStore.js +157 -0
  360. package/src/performance/CodeGenerationBenchmark.d.ts.map +1 -1
  361. package/src/performance/Optimizer.d.ts +7 -6
  362. package/src/performance/Optimizer.d.ts.map +1 -1
  363. package/src/performance/Optimizer.js +170 -55
  364. package/src/profiling/MemoryProfiler.d.ts +1 -1
  365. package/src/profiling/MemoryProfiler.d.ts.map +1 -1
  366. package/src/profiling/N1Detector.d.ts +1 -1
  367. package/src/profiling/N1Detector.d.ts.map +1 -1
  368. package/src/profiling/QueryLogger.d.ts +1 -1
  369. package/src/profiling/QueryLogger.d.ts.map +1 -1
  370. package/src/profiling/RequestProfiler.d.ts +3 -3
  371. package/src/profiling/RequestProfiler.d.ts.map +1 -1
  372. package/src/routes/metrics.d.ts +2 -0
  373. package/src/routes/metrics.d.ts.map +1 -0
  374. package/src/routes/metrics.js +1 -0
  375. package/src/routing/CoreRoutes.d.ts +12 -0
  376. package/src/routing/CoreRoutes.d.ts.map +1 -0
  377. package/src/routing/CoreRoutes.js +151 -0
  378. package/src/routing/RouteRegistry.d.ts +39 -0
  379. package/src/routing/RouteRegistry.d.ts.map +1 -0
  380. package/src/routing/RouteRegistry.js +44 -0
  381. package/src/routing/Router.d.ts +26 -9
  382. package/src/routing/Router.d.ts.map +1 -1
  383. package/src/routing/Router.js +79 -35
  384. package/src/routing/common.d.ts +15 -0
  385. package/src/routing/common.d.ts.map +1 -0
  386. package/src/routing/common.js +47 -0
  387. package/src/routing/doc.d.ts +27 -0
  388. package/src/routing/doc.d.ts.map +1 -0
  389. package/src/routing/doc.js +110 -0
  390. package/src/routing/error.d.ts +21 -0
  391. package/src/routing/error.d.ts.map +1 -0
  392. package/src/routing/error.js +126 -0
  393. package/src/routing/errorPages.d.ts +14 -0
  394. package/src/routing/errorPages.d.ts.map +1 -0
  395. package/src/routing/errorPages.js +103 -0
  396. package/src/routing/publicRoot.d.ts +27 -0
  397. package/src/routing/publicRoot.d.ts.map +1 -0
  398. package/src/routing/publicRoot.js +110 -0
  399. package/src/runtime/PluginAutoImports.d.ts +21 -0
  400. package/src/runtime/PluginAutoImports.d.ts.map +1 -0
  401. package/src/runtime/PluginAutoImports.js +59 -0
  402. package/src/runtime/PluginManager.d.ts +1 -5
  403. package/src/runtime/PluginManager.d.ts.map +1 -1
  404. package/src/runtime/PluginManager.js +25 -18
  405. package/src/runtime/RuntimeDetector.d.ts +1 -1
  406. package/src/runtime/RuntimeDetector.d.ts.map +1 -1
  407. package/src/runtime/StartupConfigFileRegistry.d.ts +20 -0
  408. package/src/runtime/StartupConfigFileRegistry.d.ts.map +1 -0
  409. package/src/runtime/StartupConfigFileRegistry.js +44 -0
  410. package/src/runtime/adapters/CloudflareAdapter.d.ts +1 -1
  411. package/src/runtime/adapters/CloudflareAdapter.d.ts.map +1 -1
  412. package/src/runtime/adapters/CloudflareAdapter.js +1 -1
  413. package/src/runtime/adapters/DenoAdapter.d.ts +1 -1
  414. package/src/runtime/adapters/DenoAdapter.d.ts.map +1 -1
  415. package/src/runtime/adapters/DenoAdapter.js +1 -1
  416. package/src/runtime/adapters/LambdaAdapter.d.ts +1 -1
  417. package/src/runtime/adapters/LambdaAdapter.d.ts.map +1 -1
  418. package/src/runtime/adapters/LambdaAdapter.js +1 -1
  419. package/src/runtime/adapters/NodeServerAdapter.d.ts +1 -1
  420. package/src/runtime/adapters/NodeServerAdapter.d.ts.map +1 -1
  421. package/src/runtime/getKernel.d.ts +9 -0
  422. package/src/runtime/getKernel.d.ts.map +1 -0
  423. package/src/runtime/getKernel.js +27 -0
  424. package/src/runtime/useFileLoader.d.ts +26 -0
  425. package/src/runtime/useFileLoader.d.ts.map +1 -0
  426. package/src/runtime/useFileLoader.js +188 -0
  427. package/src/scripts/TemplateImportsCheck.js +40 -0
  428. package/src/scripts/TemplateSync.js +90 -24
  429. package/src/security/Encryptor.d.ts.map +1 -1
  430. package/src/security/Encryptor.js +64 -7
  431. package/src/security/JwtManager.d.ts +1 -0
  432. package/src/security/JwtManager.d.ts.map +1 -1
  433. package/src/security/JwtManager.js +33 -0
  434. package/src/security/Sanitizer.d.ts +76 -0
  435. package/src/security/Sanitizer.d.ts.map +1 -0
  436. package/src/security/Sanitizer.js +412 -0
  437. package/src/security/TokenRevocation.d.ts +7 -0
  438. package/src/security/TokenRevocation.d.ts.map +1 -0
  439. package/src/security/TokenRevocation.js +57 -0
  440. package/src/security/XssProtection.d.ts.map +1 -1
  441. package/src/security/XssProtection.js +62 -14
  442. package/src/seeders/SeederDiscovery.d.ts +5 -0
  443. package/src/seeders/SeederDiscovery.d.ts.map +1 -0
  444. package/src/seeders/SeederDiscovery.js +21 -0
  445. package/src/seeders/SeederLoader.d.ts +5 -0
  446. package/src/seeders/SeederLoader.d.ts.map +1 -0
  447. package/src/seeders/SeederLoader.js +60 -0
  448. package/src/seeders/types.d.ts +18 -0
  449. package/src/seeders/types.d.ts.map +1 -0
  450. package/src/seeders/types.js +1 -0
  451. package/src/session/SessionManager.js +1 -1
  452. package/src/templates/adapters/MySQLAdapter.ts.tpl +109 -85
  453. package/src/templates/adapters/PostgreSQLAdapter.ts.tpl +129 -88
  454. package/src/templates/adapters/SQLServerAdapter.ts.tpl +5 -9
  455. package/src/templates/adapters/SQLiteAdapter.ts.tpl +78 -11
  456. package/src/templates/features/Queue.ts.tpl +3 -2
  457. package/src/templates/project/basic/app/Controllers/AuthController.ts.tpl +217 -0
  458. package/src/templates/project/basic/app/Controllers/UserController.ts.tpl +1 -12
  459. package/src/templates/project/basic/app/Types/controller.ts.tpl +46 -0
  460. package/src/templates/project/basic/config/FileLogWriter.ts.tpl +5 -236
  461. package/src/templates/project/basic/config/SecretsManager.ts.tpl +10 -447
  462. package/src/templates/project/basic/config/StartupConfigValidator.ts.tpl +9 -268
  463. package/src/templates/project/basic/config/app.ts.tpl +13 -153
  464. package/src/templates/project/basic/config/broadcast.ts.tpl +29 -126
  465. package/src/templates/project/basic/config/cache.ts.tpl +12 -70
  466. package/src/templates/project/basic/config/cloudflare.ts.tpl +4 -39
  467. package/src/templates/project/basic/config/constants.ts.tpl +9 -65
  468. package/src/templates/project/basic/config/database.ts.tpl +66 -123
  469. package/src/templates/project/basic/config/env.ts.tpl +5 -169
  470. package/src/templates/project/basic/config/features.ts.tpl +6 -54
  471. package/src/templates/project/basic/config/index.ts.tpl +8 -23
  472. package/src/templates/project/basic/config/logging/HttpLogger.ts.tpl +7 -114
  473. package/src/templates/project/basic/config/mail.ts.tpl +9 -62
  474. package/src/templates/project/basic/config/microservices.ts.tpl +11 -97
  475. package/src/templates/project/basic/config/middleware.ts.tpl +25 -43
  476. package/src/templates/project/basic/config/notification.ts.tpl +13 -114
  477. package/src/templates/project/basic/config/queue.ts.tpl +9 -40
  478. package/src/templates/project/basic/config/security.ts.tpl +11 -163
  479. package/src/templates/project/basic/config/startup.ts.tpl +10 -21
  480. package/src/templates/project/basic/config/storage.ts.tpl +57 -137
  481. package/src/templates/project/basic/config/type.ts.tpl +32 -451
  482. package/src/templates/project/basic/database/factories/UserFactory.ts.tpl +80 -0
  483. package/src/templates/project/basic/database/migrations/create_tasks_table.ts.tpl +28 -0
  484. package/src/templates/project/basic/database/migrations/create_users_table.ts.tpl +29 -0
  485. package/src/templates/project/basic/database/seeders/DatabaseSeeder.ts.tpl +19 -0
  486. package/src/templates/project/basic/database/seeders/UserSeeder.ts.tpl +18 -0
  487. package/src/templates/project/basic/database/seeders/index.ts.tpl +2 -0
  488. package/src/templates/project/basic/routes/api.ts.tpl +71 -33
  489. package/src/templates/project/basic/routes/metrics.ts.tpl +22 -0
  490. package/src/templates/project/basic/src/index.ts.tpl +3 -0
  491. package/src/templates/project/basic/tsconfig.json.tpl +12 -11
  492. package/src/testing/TestEnvironment.d.ts +40 -0
  493. package/src/testing/TestEnvironment.d.ts.map +1 -0
  494. package/src/testing/TestEnvironment.js +141 -0
  495. package/src/testing/TestHttp.d.ts +29 -0
  496. package/src/testing/TestHttp.d.ts.map +1 -0
  497. package/src/testing/TestHttp.js +96 -0
  498. package/src/testing/index.d.ts +5 -0
  499. package/src/testing/index.d.ts.map +1 -0
  500. package/src/testing/index.js +2 -0
  501. package/src/time/DateTime.d.ts +181 -0
  502. package/src/time/DateTime.d.ts.map +1 -0
  503. package/src/time/DateTime.js +300 -0
  504. package/src/time/index.d.ts +7 -0
  505. package/src/time/index.d.ts.map +1 -0
  506. package/src/time/index.js +5 -0
  507. package/src/tools/http/Http.d.ts.map +1 -1
  508. package/src/tools/http/Http.js +4 -0
  509. package/src/tools/mail/drivers/Smtp.js +1 -1
  510. package/src/tools/queue/drivers/InMemory.d.ts +1 -1
  511. package/src/tools/queue/drivers/InMemory.d.ts.map +1 -1
  512. package/src/tools/queue/drivers/InMemory.js +1 -1
  513. package/src/tools/queue/drivers/Redis.d.ts +1 -1
  514. package/src/tools/queue/drivers/Redis.d.ts.map +1 -1
  515. package/src/tools/queue/drivers/Redis.js +1 -1
  516. package/src/validation/ValidationError.d.ts.map +1 -1
  517. package/src/validation/ValidationError.js +4 -2
  518. package/src/validation/Validator.d.ts +49 -16
  519. package/src/validation/Validator.d.ts.map +1 -1
  520. package/src/validation/Validator.js +307 -5
  521. package/src/common/uuid.d.ts +0 -3
  522. package/src/common/uuid.d.ts.map +0 -1
  523. package/src/common/uuid.js +0 -30
  524. package/src/templates/project/basic/.env.example.tpl +0 -74
  525. package/src/templates/project/basic/.env.tpl +0 -166
  526. package/src/templates/project/basic/config/logging/KvLogger.ts.tpl +0 -181
  527. package/src/templates/project/basic/config/logging/SlackLogger.ts.tpl +0 -156
  528. package/src/templates/project/basic/database/migrations/index.ts.tpl +0 -2
@@ -0,0 +1,76 @@
1
+ /**
2
+ * OpenAPI Routes
3
+ *
4
+ * Serves a generated OpenAPI spec from the in-memory RouteRegistry.
5
+ */
6
+ import { OpenApiGenerator } from '../src/openapi/OpenApiGenerator.js';
7
+ import { Env } from '../src/config/env.js';
8
+ import { Router } from '../src/routing/Router.js';
9
+ import { RouteRegistry } from '../src/routing/RouteRegistry.js';
10
+ const getServerUrl = () => {
11
+ const explicit = Env.BASE_URL;
12
+ if (explicit.trim() !== '')
13
+ return explicit;
14
+ const host = Env.HOST;
15
+ const port = Env.PORT;
16
+ if (host.trim() === '' || Number.isNaN(port) || port <= 0)
17
+ return undefined;
18
+ return `http://${host}:${port}`;
19
+ };
20
+ const getDocsHtml = (specUrl) => `<!doctype html>
21
+ <html lang="en">
22
+ <head>
23
+ <meta charset="utf-8" />
24
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
25
+ <title>${Env.APP_NAME} API Docs</title>
26
+ <link rel="stylesheet" href="https://unpkg.com/swagger-ui-dist@5/swagger-ui.css" />
27
+ <style>
28
+ html, body { margin: 0; padding: 0; }
29
+ #swagger-ui { box-sizing: border-box; }
30
+ </style>
31
+ </head>
32
+ <body>
33
+ <div id="swagger-ui"></div>
34
+ <script src="https://unpkg.com/swagger-ui-dist@5/swagger-ui-bundle.js"></script>
35
+ <script src="https://unpkg.com/swagger-ui-dist@5/swagger-ui-standalone-preset.js"></script>
36
+ <script>
37
+ window.onload = function () {
38
+ window.ui = SwaggerUIBundle({
39
+ url: ${JSON.stringify(specUrl)},
40
+ dom_id: '#swagger-ui',
41
+ presets: [SwaggerUIBundle.presets.apis, SwaggerUIStandalonePreset],
42
+ layout: 'BaseLayout'
43
+ });
44
+ };
45
+ </script>
46
+ </body>
47
+ </html>`;
48
+ export function registerOpenApiRoutes(router) {
49
+ Router.get(router, '/openapi.json', async (_req, res) => {
50
+ // Convert readonly to mutable array for OpenApiGenerator
51
+ const routes = Array.from(RouteRegistry.list());
52
+ const doc = OpenApiGenerator.generate(routes, {
53
+ title: Env.APP_NAME,
54
+ version: Env.get('APP_VERSION', '0.0.0'),
55
+ serverUrl: getServerUrl(),
56
+ excludePaths: ['/openapi.json', '/docs'],
57
+ });
58
+ res.json(doc);
59
+ }, {
60
+ meta: {
61
+ summary: 'OpenAPI spec',
62
+ tags: ['Docs'],
63
+ responseStatus: 200,
64
+ },
65
+ });
66
+ Router.get(router, '/docs', async (_req, res) => {
67
+ res.html(getDocsHtml('/openapi.json'));
68
+ }, {
69
+ meta: {
70
+ summary: 'Swagger UI',
71
+ tags: ['Docs'],
72
+ responseStatus: 200,
73
+ },
74
+ });
75
+ }
76
+ export default registerOpenApiRoutes;
@@ -2,8 +2,8 @@
2
2
  * Application - Framework core entry point
3
3
  * Handles application lifecycle, booting, and environment
4
4
  */
5
- import { IServiceContainer } from '../container/ServiceContainer';
6
- import { IMiddlewareStack } from '../middleware/MiddlewareStack';
5
+ import type { IServiceContainer } from '../container/ServiceContainer';
6
+ import type { IMiddlewareStack } from '../middleware/MiddlewareStack';
7
7
  import { type IRouter } from '../routing/Router';
8
8
  export interface IApplication {
9
9
  boot(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"Application.d.ts","sourceRoot":"","sources":["../../../src/boot/Application.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,iBAAiB,EAAoB,MAAM,8BAA8B,CAAC;AAEnF,OAAO,EAAE,gBAAgB,EAAmB,MAAM,8BAA8B,CAAC;AACjF,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,kBAAkB,CAAC;AASxD,MAAM,WAAW,YAAY;IAC3B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,QAAQ,IAAI,OAAO,CAAC;IACpB,aAAa,IAAI,OAAO,CAAC;IACzB,YAAY,IAAI,OAAO,CAAC;IACxB,SAAS,IAAI,OAAO,CAAC;IACrB,cAAc,IAAI,MAAM,CAAC;IACzB,SAAS,IAAI,OAAO,CAAC;IACrB,YAAY,IAAI,iBAAiB,CAAC;IAClC,kBAAkB,IAAI,gBAAgB,CAAC;IACvC,WAAW,IAAI,MAAM,CAAC;CACvB;AAsUD;;GAEG;AACH,eAAO,MAAM,WAAW;IACtB;;OAEG;sBACe,MAAM,GAAG,YAAY;EA0CvC,CAAC;AAEH,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"Application.d.ts","sourceRoot":"","sources":["../../../src/boot/Application.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAGtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAErE,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,kBAAkB,CAAC;AAUxD,MAAM,WAAW,YAAY;IAC3B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,QAAQ,IAAI,OAAO,CAAC;IACpB,aAAa,IAAI,OAAO,CAAC;IACzB,YAAY,IAAI,OAAO,CAAC;IACxB,SAAS,IAAI,OAAO,CAAC;IACrB,cAAc,IAAI,MAAM,CAAC;IACzB,SAAS,IAAI,OAAO,CAAC;IACrB,YAAY,IAAI,iBAAiB,CAAC;IAClC,kBAAkB,IAAI,gBAAgB,CAAC;IACvC,WAAW,IAAI,MAAM,CAAC;CACvB;AAyYD;;GAEG;AACH,eAAO,MAAM,WAAW;IACtB;;OAEG;sBACe,MAAM,GAAG,YAAY;EA0CvC,CAAC;AAEH,eAAe,WAAW,CAAC"}
@@ -7,6 +7,7 @@ import { ServiceContainer } from '../container/ServiceContainer.js';
7
7
  import { StartupHealthChecks } from '../health/StartupHealthChecks.js';
8
8
  import { MiddlewareStack } from '../middleware/MiddlewareStack.js';
9
9
  import { Router } from '../routing/Router.js';
10
+ import { StartupConfigFile, StartupConfigFileRegistry } from '../runtime/StartupConfigFileRegistry.js';
10
11
  import broadcastConfig from '../config/broadcast.js';
11
12
  import { FeatureFlags } from '../config/features.js';
12
13
  import { Logger } from '../config/logger.js';
@@ -88,6 +89,16 @@ const registerFrameworkShutdownHooks = (shutdownManager) => {
88
89
  /* ignore import failures in restrictive runtimes */
89
90
  });
90
91
  /* c8 ignore stop */
92
+ // Flush file logging streams
93
+ import('../config/FileLogWriter.js')
94
+ .then((mod) => {
95
+ shutdownManager.add(() => mod.FileLogWriter.flush());
96
+ })
97
+ /* c8 ignore start */
98
+ .catch(() => {
99
+ /* ignore import failures in restrictive runtimes */
100
+ });
101
+ /* c8 ignore stop */
91
102
  import('../tools/broadcast/BroadcastRegistry.js')
92
103
  .then((mod) => {
93
104
  shutdownManager.add(() => mod.BroadcastRegistry.reset());
@@ -162,10 +173,15 @@ const registerRoutes = async (resolvedBasePath, router) => {
162
173
  const mod = await tryImportRoutesFromAppBase(resolvedBasePath);
163
174
  if (typeof mod?.registerRoutes === 'function') {
164
175
  mod.registerRoutes(router);
165
- return;
166
176
  }
167
- const { registerRoutes: registerFrameworkRoutes } = await import('../routes/api.js');
168
- registerFrameworkRoutes(router);
177
+ else {
178
+ const { registerRoutes: registerFrameworkRoutes } = await import('../routes/api.js');
179
+ registerFrameworkRoutes(router);
180
+ }
181
+ // Always register core framework routes (health, metrics, doc) after app routes
182
+ // This ensures app can override but core routes always exist
183
+ const { registerCoreRoutes } = await import('../routing/CoreRoutes.js');
184
+ registerCoreRoutes(router);
169
185
  }
170
186
  catch (error) {
171
187
  Logger.error('Failed to register routes:', error);
@@ -205,21 +221,47 @@ const tryImportOptional = async (modulePath) => {
205
221
  return undefined;
206
222
  }
207
223
  };
208
- const registerFromRuntimeConfig = async () => {
209
- const db = await tryImportOptional('@orm/DatabaseRuntimeRegistration');
224
+ const isCompiledJsModule = () => {
225
+ // When running from dist, this module is compiled to .js and Node ESM resolution
226
+ // requires explicit file extensions for relative imports.
227
+ return import.meta.url.endsWith('.js');
228
+ };
229
+ const dbLoader = async () => {
230
+ const db = await tryImportOptional(isCompiledJsModule()
231
+ ? '../orm/DatabaseRuntimeRegistration.js'
232
+ : '../orm/DatabaseRuntimeRegistration');
210
233
  db?.registerDatabasesFromRuntimeConfig?.(databaseConfig);
211
- const queues = await tryImportOptional('@tools/queue/QueueRuntimeRegistration');
234
+ };
235
+ const queuesLoader = async () => {
236
+ const queues = await tryImportOptional(isCompiledJsModule()
237
+ ? '../tools/queue/QueueRuntimeRegistration.js'
238
+ : '../tools/queue/QueueRuntimeRegistration');
212
239
  queues?.registerQueuesFromRuntimeConfig?.(queueConfig);
213
- const caches = await tryImportOptional('@cache/CacheRuntimeRegistration');
240
+ };
241
+ const cachesLoader = async () => {
242
+ const caches = await tryImportOptional(isCompiledJsModule()
243
+ ? '../cache/CacheRuntimeRegistration.js'
244
+ : '../cache/CacheRuntimeRegistration');
214
245
  caches?.registerCachesFromRuntimeConfig?.(cacheConfig);
215
- const broadcasters = await tryImportOptional('@broadcast/BroadcastRuntimeRegistration');
246
+ };
247
+ const registerFromRuntimeConfig = async () => {
248
+ await dbLoader();
249
+ await queuesLoader();
250
+ await cachesLoader();
251
+ const broadcasters = await tryImportOptional(isCompiledJsModule()
252
+ ? '../tools/broadcast/BroadcastRuntimeRegistration.js'
253
+ : '../tools/broadcast/BroadcastRuntimeRegistration');
216
254
  broadcasters?.registerBroadcastersFromRuntimeConfig?.({
217
255
  default: broadcastConfig.default,
218
256
  drivers: broadcastConfig.drivers,
219
257
  });
220
- const disks = await tryImportOptional('@storage/StorageRuntimeRegistration');
258
+ const disks = await tryImportOptional(isCompiledJsModule()
259
+ ? '../tools/storage/StorageRuntimeRegistration.js'
260
+ : '../tools/storage/StorageRuntimeRegistration');
221
261
  disks?.registerDisksFromRuntimeConfig?.(storageConfig);
222
- const notifications = await tryImportOptional('@notification/NotificationRuntimeRegistration');
262
+ const notifications = await tryImportOptional(isCompiledJsModule()
263
+ ? '../tools/notification/NotificationRuntimeRegistration.js'
264
+ : '../tools/notification/NotificationRuntimeRegistration');
223
265
  notifications?.registerNotificationChannelsFromRuntimeConfig?.({
224
266
  default: notificationConfig.default,
225
267
  drivers: notificationConfig.drivers,
@@ -231,6 +273,17 @@ const createLifecycle = (params) => {
231
273
  return;
232
274
  Logger.info(`🚀 Booting Zintrust Application in ${params.environment} mode...`);
233
275
  StartupConfigValidator.assertValid();
276
+ // Preload project-owned config overrides that must be available synchronously.
277
+ await StartupConfigFileRegistry.preload([
278
+ StartupConfigFile.Middleware,
279
+ StartupConfigFile.Cache,
280
+ StartupConfigFile.Database,
281
+ StartupConfigFile.Queue,
282
+ StartupConfigFile.Storage,
283
+ StartupConfigFile.Mail,
284
+ StartupConfigFile.Broadcast,
285
+ StartupConfigFile.Notification,
286
+ ]);
234
287
  FeatureFlags.initialize();
235
288
  await StartupHealthChecks.assertHealthy();
236
289
  await registerFromRuntimeConfig();
@@ -287,9 +340,9 @@ export const Application = Object.freeze({
287
340
  boot,
288
341
  shutdown,
289
342
  isBooted: () => booted,
290
- isDevelopment: () => environment === 'development',
291
- isProduction: () => environment === 'production',
292
- isTesting: () => environment === 'testing',
343
+ isDevelopment: () => appConfig.isDevelopment(),
344
+ isProduction: () => appConfig.isProduction(),
345
+ isTesting: () => appConfig.isTesting(),
293
346
  getEnvironment: () => environment,
294
347
  getRouter: () => router,
295
348
  getContainer: () => container,
@@ -2,7 +2,8 @@
2
2
  * Server - HTTP Server implementation
3
3
  * Uses Node.js built-in HTTP server with no external dependencies
4
4
  */
5
- import { IApplication } from './Application';
5
+ import type { IApplication } from './Application';
6
+ import type { IKernel } from '../http/Kernel';
6
7
  import * as http from '../node-singletons/http';
7
8
  export interface IServer {
8
9
  listen(): Promise<void>;
@@ -17,7 +18,7 @@ export declare const Server: Readonly<{
17
18
  /**
18
19
  * Create a new server instance
19
20
  */
20
- create(app: IApplication, port?: number, host?: string): IServer;
21
+ create(app: IApplication, port?: number, host?: string, kernel?: IKernel | null): IServer;
21
22
  }>;
22
23
  export default Server;
23
24
  //# sourceMappingURL=Server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Server.d.ts","sourceRoot":"","sources":["../../../src/boot/Server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AASjD,OAAO,KAAK,IAAI,MAAM,uBAAuB,CAAC;AAK9C,MAAM,WAAW,OAAO;IACtB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC;CAC9B;AA6MD;;;GAGG;AACH,eAAO,MAAM,MAAM;IACjB;;OAEG;gBACS,YAAY,SAAS,MAAM,SAAS,MAAM,GAAG,OAAO;EA4ChE,CAAC;AAEH,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"Server.d.ts","sourceRoot":"","sources":["../../../src/boot/Server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAMtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAM5C,OAAO,KAAK,IAAI,MAAM,uBAAuB,CAAC;AAI9C,MAAM,WAAW,OAAO;IACtB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC;CAC9B;AA2DD;;;GAGG;AACH,eAAO,MAAM,MAAM;IACjB;;OAEG;gBACS,YAAY,SAAS,MAAM,SAAS,MAAM,WAAU,OAAO,GAAG,IAAI,GAAU,OAAO;EA4D/F,CAAC;AAEH,eAAe,MAAM,CAAC"}
@@ -2,194 +2,57 @@
2
2
  * Server - HTTP Server implementation
3
3
  * Uses Node.js built-in HTTP server with no external dependencies
4
4
  */
5
- import { esmDirname } from '../common/index.js';
6
5
  import { appConfig } from '../config/app.js';
7
- import { HTTP_HEADERS, MIME_TYPES } from '../config/constants.js';
6
+ import { HTTP_HEADERS } from '../config/constants.js';
8
7
  import { Logger } from '../config/logger.js';
8
+ import { ServiceContainer } from '../container/ServiceContainer.js';
9
9
  import { ErrorFactory } from '../exceptions/ZintrustError.js';
10
+ import { Kernel } from '../http/Kernel.js';
10
11
  import { Request } from '../http/Request.js';
11
12
  import { Response } from '../http/Response.js';
12
- import * as fs from '../node-singletons/fs.js';
13
13
  import * as http from '../node-singletons/http.js';
14
- import * as path from '../node-singletons/path.js';
15
- import { Router } from '../routing/Router.js';
16
- const MIME_TYPES_MAP = {
17
- '.html': MIME_TYPES.HTML,
18
- '.js': MIME_TYPES.JS,
19
- '.css': MIME_TYPES.CSS,
20
- '.json': MIME_TYPES.JSON,
21
- '.png': MIME_TYPES.PNG,
22
- '.jpg': MIME_TYPES.JPG,
23
- '.gif': MIME_TYPES.GIF,
24
- '.svg': MIME_TYPES.SVG,
25
- '.wav': MIME_TYPES.WAV,
26
- '.mp4': MIME_TYPES.MP4,
27
- '.woff': MIME_TYPES.WOFF,
28
- '.ttf': MIME_TYPES.TTF,
29
- '.eot': MIME_TYPES.EOT,
30
- '.otf': MIME_TYPES.OTF,
31
- '.wasm': MIME_TYPES.WASM,
32
- };
33
- const findPackageRoot = (startDir) => {
34
- let current = startDir;
35
- for (let i = 0; i < 10; i++) {
36
- if (fs.existsSync(path.join(current, 'package.json')))
37
- return current;
38
- const parent = path.dirname(current);
39
- if (parent === current)
40
- break;
41
- current = parent;
42
- }
43
- return startDir;
44
- };
45
- const getFrameworkPublicRoots = () => {
46
- const thisDir = esmDirname(import.meta.url);
47
- const packageRoot = findPackageRoot(thisDir);
48
- return [
49
- path.join(packageRoot, 'dist/public'),
50
- path.join(packageRoot, 'public'), // Fallback for shipped package
51
- ];
52
- };
53
- const getDocsPublicRoot = () => {
54
- // First try app-local roots (developer app override), then fall back to framework-shipped assets.
55
- const appRoots = [path.join(process.cwd(), 'public')];
56
- const candidates = [...appRoots, ...getFrameworkPublicRoots()];
57
- const hasDocsEntrypoint = (root) => {
58
- const directIndex = path.join(root, 'index.html');
59
- return fs.existsSync(directIndex);
60
- };
61
- // Prefer a root that actually contains docs assets.
62
- for (const candidate of candidates) {
63
- if (fs.existsSync(candidate) && hasDocsEntrypoint(candidate))
64
- return candidate;
65
- }
66
- // Fall back to the first existing directory.
67
- for (const candidate of candidates) {
68
- if (fs.existsSync(candidate))
69
- return candidate;
70
- }
71
- return candidates[0];
72
- };
73
- /**
74
- * Map URL path to physical file path
75
- */
76
- const mapStaticPath = (urlPath) => {
77
- const publicRoot = getDocsPublicRoot();
78
- const normalize = (p) => (p.startsWith('/') ? p.slice(1) : p);
79
- // /doc acts as a mount for the docs/static site.
80
- if (urlPath === '/doc' || urlPath === '/doc/')
81
- return publicRoot;
82
- if (urlPath.startsWith('/doc/'))
83
- return path.join(publicRoot, normalize(urlPath.slice('/doc/'.length)));
84
- // Also serve app-local static files from the same public root.
85
- return path.join(publicRoot, normalize(urlPath));
86
- };
87
- /**
88
- * Send static file to response
89
- */
90
- const sendStaticFile = (filePath, response) => {
91
- const ext = path.extname(filePath).toLowerCase();
92
- const contentType = MIME_TYPES_MAP[ext] || 'application/octet-stream';
93
- const content = fs.readFileSync(filePath);
94
- response.setStatus(200);
95
- response.setHeader('Content-Type', contentType);
96
- response.send(content);
97
- };
98
- /**
99
- * Serve static files from docs-website
100
- */
101
- // eslint-disable-next-line @typescript-eslint/require-await
102
- const serveStatic = async (request, response) => {
103
- const urlPath = request.getPath();
104
- let filePath = mapStaticPath(urlPath);
105
- if (!filePath)
106
- return false;
107
- try {
108
- // If it's a directory, look for index.html
109
- if (fs.existsSync(filePath) && fs.statSync(filePath).isDirectory()) {
110
- filePath = path.join(filePath, 'index.html');
111
- }
112
- // Handle clean URLs (try adding .html)
113
- if (!fs.existsSync(filePath) && !path.extname(filePath)) {
114
- const htmlPath = `${filePath}.html`;
115
- if (fs.existsSync(htmlPath)) {
116
- filePath = htmlPath;
117
- }
118
- }
119
- if (fs.existsSync(filePath)) {
120
- sendStaticFile(filePath, response);
121
- return true;
122
- }
123
- }
124
- catch (error) {
125
- ErrorFactory.createTryCatchError(`Error serving static file ${filePath}`, error);
126
- }
127
- return false;
128
- };
14
+ import { ErrorRouting } from '../routing/error.js';
129
15
  /**
130
16
  * Set security headers on response
131
17
  */
132
- const getContentSecurityPolicyForPath = (requestPath) => {
133
- // Default CSP for the API/framework.
134
- const baseCsp = "default-src 'self'; " +
18
+ const getContentSecurityPolicyForPath = () => {
19
+ // Default CSP for the API/framework
20
+ return ("default-src 'self'; " +
135
21
  "script-src 'self' 'unsafe-inline'; " +
136
22
  "style-src 'self' 'unsafe-inline'; " +
137
23
  "img-src 'self' data:; " +
138
- "font-src 'self';";
139
- // Docs pages intentionally load external assets (Tailwind CDN + Google Fonts).
140
- // Keep this relaxation scoped to the docs base path.
141
- if (!requestPath.startsWith('/doc'))
142
- return baseCsp;
143
- return ("default-src 'self'; " +
144
- "script-src 'self' 'unsafe-inline' 'unsafe-eval' https://cdn.tailwindcss.com; " +
145
- "script-src-elem 'self' 'unsafe-inline' https://cdn.tailwindcss.com; " +
146
- "style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; " +
147
- "style-src-elem 'self' 'unsafe-inline' https://fonts.googleapis.com; " +
148
- "img-src 'self' data: https:; " +
149
- "font-src 'self' data: https://fonts.gstatic.com;");
24
+ "font-src 'self';");
150
25
  };
151
- const setSecurityHeaders = (res, requestPath) => {
26
+ const setSecurityHeaders = (res) => {
152
27
  res.setHeader(HTTP_HEADERS.X_POWERED_BY, 'ZinTrust');
153
28
  res.setHeader(HTTP_HEADERS.X_CONTENT_TYPE_OPTIONS, 'nosniff');
154
29
  res.setHeader(HTTP_HEADERS.X_FRAME_OPTIONS, 'DENY');
155
30
  res.setHeader(HTTP_HEADERS.X_XSS_PROTECTION, '1; mode=block');
156
31
  res.setHeader(HTTP_HEADERS.REFERRER_POLICY, 'strict-origin-when-cross-origin');
157
- res.setHeader(HTTP_HEADERS.CONTENT_SECURITY_POLICY, getContentSecurityPolicyForPath(requestPath));
32
+ res.setHeader(HTTP_HEADERS.CONTENT_SECURITY_POLICY, getContentSecurityPolicyForPath());
158
33
  };
159
- /**
160
- * Handle incoming HTTP requests
161
- */
162
- const handleRequest = async (app, req, res) => {
34
+ const handleRequest = async (params, req, res) => {
35
+ let request;
36
+ let response;
163
37
  try {
164
- // Use the raw URL so docs assets (/doc/assets/...) get the correct CSP.
165
- const requestPath = typeof req?.url === 'string' ? req.url : '/';
166
- setSecurityHeaders(res, requestPath);
38
+ setSecurityHeaders(res);
167
39
  if (!req) {
168
40
  throw ErrorFactory.createConnectionError('Request object is missing');
169
41
  }
170
- const request = Request.create(req);
171
- const response = Response.create(res);
172
- // Route the request
173
- const router = app.getRouter();
174
- const route = Router.match(router, request.getMethod(), request.getPath());
175
- if (route === null) {
176
- // Try serving static files from docs-website
177
- if (await serveStatic(request, response)) {
178
- return;
179
- }
180
- // 404 Not Found
181
- response.setStatus(404).json({ message: 'Not Found' });
182
- }
183
- else {
184
- // Handler found, execute route handler
185
- request.setParams(route.params);
186
- await route.handler(request, response);
187
- }
42
+ const kernel = params.getKernel();
43
+ request = Request.create(req);
44
+ response = Response.create(res);
45
+ // Delegate request lifecycle to Kernel (routing + middleware + handler execution).
46
+ await kernel.handleRequest(request, response);
188
47
  }
189
48
  catch (error) {
190
49
  ErrorFactory.createTryCatchError('Server error:', error);
191
- res.writeHead(500, { [HTTP_HEADERS.CONTENT_TYPE]: MIME_TYPES.JSON });
192
- res.end(JSON.stringify({ message: 'Internal Server Error' }));
50
+ // Prefer wrapper-based error handling when available.
51
+ if (request !== undefined && response !== undefined) {
52
+ ErrorRouting.handleInternalServerErrorWithWrappers(request, response, error);
53
+ return;
54
+ }
55
+ ErrorRouting.handleInternalServerErrorRaw(res);
193
56
  }
194
57
  };
195
58
  /**
@@ -200,10 +63,21 @@ export const Server = Object.freeze({
200
63
  /**
201
64
  * Create a new server instance
202
65
  */
203
- create(app, port, host) {
66
+ create(app, port, host, kernel = null) {
204
67
  const serverPort = port ?? appConfig.port;
205
68
  const serverHost = host ?? appConfig.host;
206
- const httpServer = http.createServer(async (req, res) => handleRequest(app, req, res));
69
+ let kernelInstance = kernel;
70
+ const getKernel = () => {
71
+ if (kernelInstance !== null)
72
+ return kernelInstance;
73
+ const anyApp = app;
74
+ const container = typeof anyApp.getContainer === 'function'
75
+ ? anyApp.getContainer()
76
+ : ServiceContainer.create();
77
+ kernelInstance = Kernel.create(app.getRouter(), container);
78
+ return kernelInstance;
79
+ };
80
+ const httpServer = http.createServer(async (req, res) => handleRequest({ getKernel }, req, res));
207
81
  const sockets = new Set();
208
82
  httpServer.on('connection', (socket) => {
209
83
  sockets.add(socket);
@@ -220,7 +94,7 @@ export const Server = Object.freeze({
220
94
  async close() {
221
95
  return new Promise((resolve) => {
222
96
  httpServer.close(() => {
223
- Logger.info('Zintrust server stopped');
97
+ Logger.info('ZinTrust server stopped');
224
98
  resolve();
225
99
  });
226
100
  // Ensure keep-alive / hanging connections don't block shutdown
@@ -8,6 +8,8 @@ import { Server } from './Server.js';
8
8
  import { Env } from '../config/env.js';
9
9
  import { Logger } from '../config/logger.js';
10
10
  import { ErrorFactory } from '../exceptions/ZintrustError.js';
11
+ // Register plugins (adapters, drivers, etc.)
12
+ // import '@/zintrust.plugins';
11
13
  let appInstance;
12
14
  let serverInstance;
13
15
  let isShuttingDown = false;
@@ -3,7 +3,7 @@
3
3
  * Central cache management and driver resolution
4
4
  * Sealed namespace pattern - all exports through Cache namespace
5
5
  */
6
- import { CacheDriver } from './CacheDriver';
6
+ import type { CacheDriver } from './CacheDriver';
7
7
  type CacheStore = Readonly<{
8
8
  get: <T>(key: string) => Promise<T | null>;
9
9
  set: <T>(key: string, value: T, ttl?: number) => Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"Cache.d.ts","sourceRoot":"","sources":["../../../src/cache/Cache.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAmHjD,KAAK,UAAU,GAAG,QAAQ,CAAC;IACzB,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC3C,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,SAAS,EAAE,MAAM,WAAW,CAAC;CAC9B,CAAC,CAAC;AA0CH,eAAO,MAAM,KAAK;UA1FC,CAAC,OAAO,MAAM,KAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;UAQlC,CAAC,OAAO,MAAM,SAAS,CAAC,QAAQ,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;kBAOjD,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;iBAOtB,OAAO,CAAC,IAAI,CAAC;eAOb,MAAM,KAAG,OAAO,CAAC,OAAO,CAAC;qBAQ3B,WAAW;mBAaX,MAAM,KAAG,UAAU;iBAmCvB,IAAI;EAcpB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,KAAK;UAxGC,CAAC,OAAO,MAAM,KAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;UAQlC,CAAC,OAAO,MAAM,SAAS,CAAC,QAAQ,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;kBAOjD,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;iBAOtB,OAAO,CAAC,IAAI,CAAC;eAOb,MAAM,KAAG,OAAO,CAAC,OAAO,CAAC;qBAQ3B,WAAW;mBAaX,MAAM,KAAG,UAAU;iBAmCvB,IAAI;EAmBI,CAAC"}
1
+ {"version":3,"file":"Cache.d.ts","sourceRoot":"","sources":["../../../src/cache/Cache.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAmHtD,KAAK,UAAU,GAAG,QAAQ,CAAC;IACzB,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC3C,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,SAAS,EAAE,MAAM,WAAW,CAAC;CAC9B,CAAC,CAAC;AA0CH,eAAO,MAAM,KAAK;UA1FC,CAAC,OAAO,MAAM,KAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;UAQlC,CAAC,OAAO,MAAM,SAAS,CAAC,QAAQ,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;kBAOjD,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;iBAOtB,OAAO,CAAC,IAAI,CAAC;eAOb,MAAM,KAAG,OAAO,CAAC,OAAO,CAAC;qBAQ3B,WAAW;mBAaX,MAAM,KAAG,UAAU;iBAmCvB,IAAI;EAcpB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,KAAK;UAxGC,CAAC,OAAO,MAAM,KAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;UAQlC,CAAC,OAAO,MAAM,SAAS,CAAC,QAAQ,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;kBAOjD,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;iBAOtB,OAAO,CAAC,IAAI,CAAC;eAOb,MAAM,KAAG,OAAO,CAAC,OAAO,CAAC;qBAQ3B,WAAW;mBAaX,MAAM,KAAG,UAAU;iBAmCvB,IAAI;EAmBI,CAAC"}
@@ -23,6 +23,10 @@ export interface CacheDriver {
23
23
  * Check if an item exists in the cache
24
24
  */
25
25
  has(key: string): Promise<boolean>;
26
+ /**
27
+ * Dispose of resources (optional cleanup method)
28
+ */
29
+ dispose?(): Promise<void>;
26
30
  }
27
31
  export declare const CACHE_DRIVER_INTERFACE = "CacheDriver";
28
32
  //# sourceMappingURL=CacheDriver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CacheDriver.d.ts","sourceRoot":"","sources":["../../../src/cache/CacheDriver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAEvC;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3D;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnC;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACpC;AAGD,eAAO,MAAM,sBAAsB,gBAAgB,CAAC"}
1
+ {"version":3,"file":"CacheDriver.d.ts","sourceRoot":"","sources":["../../../src/cache/CacheDriver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAEvC;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3D;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnC;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEnC;;OAEG;IACH,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAGD,eAAO,MAAM,sBAAsB,gBAAgB,CAAC"}
@@ -2,7 +2,7 @@
2
2
  * Cloudflare KV Cache Driver
3
3
  * Interfaces with the native KV binding in Cloudflare Workers
4
4
  */
5
- import { CacheDriver } from '../CacheDriver';
5
+ import type { CacheDriver } from '../CacheDriver';
6
6
  /**
7
7
  * KVDriver namespace - sealed for immutability
8
8
  */
@@ -1 +1 @@
1
- {"version":3,"file":"KVDriver.d.ts","sourceRoot":"","sources":["../../../../src/cache/drivers/KVDriver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAoDjD;;GAEG;AACH,eAAO,MAAM,QAAQ;kBAhDF,WAAW;EAkD5B,CAAC"}
1
+ {"version":3,"file":"KVDriver.d.ts","sourceRoot":"","sources":["../../../../src/cache/drivers/KVDriver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAoDtD;;GAEG;AACH,eAAO,MAAM,QAAQ;kBAhDF,WAAW;EAkD5B,CAAC"}
@@ -2,7 +2,7 @@
2
2
  * Memory Cache Driver
3
3
  * Simple in-memory storage for local development
4
4
  */
5
- import { CacheDriver } from '../CacheDriver';
5
+ import type { CacheDriver } from '../CacheDriver';
6
6
  /**
7
7
  * MemoryDriver namespace - sealed for immutability
8
8
  */
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryDriver.d.ts","sourceRoot":"","sources":["../../../../src/cache/drivers/MemoryDriver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAuDjD;;GAEG;AACH,eAAO,MAAM,YAAY;kBAnDN,WAAW;EAqD5B,CAAC"}
1
+ {"version":3,"file":"MemoryDriver.d.ts","sourceRoot":"","sources":["../../../../src/cache/drivers/MemoryDriver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AA0EtD;;GAEG;AACH,eAAO,MAAM,YAAY;kBAtEN,WAAW;EAwE5B,CAAC"}
@@ -9,6 +9,17 @@
9
9
  */
10
10
  const create = () => {
11
11
  const storage = new Map();
12
+ // Background cleanup interval (runs every 60 seconds)
13
+ const cleanupInterval = setInterval(() => {
14
+ const now = Date.now();
15
+ for (const [key, item] of storage.entries()) {
16
+ if (item.expires !== null && item.expires < now) {
17
+ storage.delete(key);
18
+ }
19
+ }
20
+ }, 60_000); // 60 seconds
21
+ // Unref so it doesn't keep process alive
22
+ cleanupInterval.unref();
12
23
  return {
13
24
  async get(key) {
14
25
  await Promise.resolve();
@@ -45,6 +56,11 @@ const create = () => {
45
56
  }
46
57
  return true;
47
58
  },
59
+ async dispose() {
60
+ clearInterval(cleanupInterval);
61
+ storage.clear();
62
+ await Promise.resolve();
63
+ },
48
64
  };
49
65
  };
50
66
  /**
@@ -2,7 +2,7 @@
2
2
  * MongoDB Cache Driver
3
3
  * Uses MongoDB Atlas Data API (HTTPS) for zero-dependency integration
4
4
  */
5
- import { CacheDriver } from '../CacheDriver';
5
+ import type { CacheDriver } from '../CacheDriver';
6
6
  /**
7
7
  * MongoDB Cache Driver
8
8
  * Uses MongoDB Atlas Data API (HTTPS) for zero-dependency integration
@@ -1 +1 @@
1
- {"version":3,"file":"MongoDriver.d.ts","sourceRoot":"","sources":["../../../../src/cache/drivers/MongoDriver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAKjD;;;;GAIG;AACH,eAAO,MAAM,WAAW;IACtB;;OAEG;cACO,WAAW;EA4ErB,CAAC"}
1
+ {"version":3,"file":"MongoDriver.d.ts","sourceRoot":"","sources":["../../../../src/cache/drivers/MongoDriver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAKtD;;;;GAIG;AACH,eAAO,MAAM,WAAW;IACtB;;OAEG;cACO,WAAW;EA4ErB,CAAC"}
@@ -2,7 +2,7 @@
2
2
  * Redis Cache Driver
3
3
  * Zero-dependency implementation using Node.js native net module
4
4
  */
5
- import { CacheDriver } from '../CacheDriver';
5
+ import type { CacheDriver } from '../CacheDriver';
6
6
  /**
7
7
  * RedisDriver namespace - sealed for immutability
8
8
  */
@@ -1 +1 @@
1
- {"version":3,"file":"RedisDriver.d.ts","sourceRoot":"","sources":["../../../../src/cache/drivers/RedisDriver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AA+EjD;;GAEG;AACH,eAAO,MAAM,WAAW;kBA1EL,WAAW;EA4E5B,CAAC"}
1
+ {"version":3,"file":"RedisDriver.d.ts","sourceRoot":"","sources":["../../../../src/cache/drivers/RedisDriver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AA+EtD;;GAEG;AACH,eAAO,MAAM,WAAW;kBA1EL,WAAW;EA4E5B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"CLI.d.ts","sourceRoot":"","sources":["../../../src/cli/CLI.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA6BH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,MAAM,WAAW,IAAI;IACnB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,UAAU,IAAI,OAAO,CAAC;CACvB;AA0LD;;;;;;;GAOG;AACH,eAAO,MAAM,GAAG;cACJ,IAAI;EAed,CAAC"}
1
+ {"version":3,"file":"CLI.d.ts","sourceRoot":"","sources":["../../../src/cli/CLI.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAqCH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,MAAM,WAAW,IAAI;IACnB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,UAAU,IAAI,OAAO,CAAC;CACvB;AA2LD;;;;;;;GAOG;AACH,eAAO,MAAM,GAAG;cACJ,IAAI;EAed,CAAC"}