@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
@@ -31,62 +31,16 @@ export declare const config: Readonly<{
31
31
  readonly maxBodySize: string;
32
32
  readonly getSafeEnv: () => NodeJS.ProcessEnv;
33
33
  }>;
34
- readonly broadcast: Readonly<{
35
- readonly default: string;
36
- readonly drivers: {
37
- readonly inmemory: import("./type").InMemoryBroadcastDriverConfig;
38
- readonly pusher: import("./type").PusherBroadcastDriverConfig;
39
- readonly redis: import("./type").RedisBroadcastDriverConfig;
40
- readonly redishttps: import("./type").RedisHttpsBroadcastDriverConfig;
41
- };
42
- readonly getDriverName: () => string;
43
- readonly getDriverConfig: (name?: string) => import("./type").KnownBroadcastDriverConfig;
44
- }>;
45
- readonly database: Readonly<{
34
+ readonly broadcast: {
46
35
  default: string;
47
- connections: {
48
- sqlite: {
49
- driver: "sqlite";
50
- database: string;
51
- migrations: string;
52
- };
53
- d1: {
54
- driver: "d1";
55
- };
56
- 'd1-remote': {
57
- driver: "d1-remote";
58
- };
59
- postgresql: {
60
- driver: "postgresql";
61
- host: string;
62
- port: number;
63
- database: string;
64
- username: string;
65
- password: string;
66
- ssl: boolean;
67
- pooling: {
68
- enabled: boolean;
69
- min: number;
70
- max: number;
71
- idleTimeout: number;
72
- connectionTimeout: number;
73
- };
74
- };
75
- mysql: {
76
- driver: "mysql";
77
- host: string;
78
- port: number;
79
- database: string;
80
- username: string;
81
- password: string;
82
- pooling: {
83
- enabled: boolean;
84
- min: number;
85
- max: number;
86
- };
87
- };
88
- };
89
- getConnection(this: import("./type").DatabaseConfigShape): import("./type").DatabaseConnectionConfig;
36
+ drivers: import("./type").BroadcastDrivers;
37
+ getDriverName: () => string;
38
+ getDriverConfig: (name?: string) => import("./type").KnownBroadcastDriverConfig;
39
+ };
40
+ readonly database: {
41
+ default: string;
42
+ connections: import("./type").DatabaseConnections;
43
+ getConnection: (this: import("./type").DatabaseConfigShape) => import("./type").DatabaseConnectionConfig;
90
44
  logging: {
91
45
  enabled: boolean;
92
46
  level: string;
@@ -98,39 +52,37 @@ export declare const config: Readonly<{
98
52
  seeders: {
99
53
  directory: string;
100
54
  };
101
- }>;
102
- readonly storage: Readonly<{
103
- readonly default: string;
104
- readonly drivers: import("./type").StorageDrivers;
105
- getDriver(this: import("./type").StorageConfigRuntime): import("./type").StorageDriverConfig;
106
- getDriverConfig(this: import("./type").StorageConfigRuntime, name?: string): import("./type").StorageDriverConfig;
107
- readonly temp: {
55
+ };
56
+ readonly storage: import("./type").StorageConfigRuntime & {
57
+ getDriver: (this: import("./type").StorageConfigRuntime) => import("./type").StorageDriverConfig;
58
+ getDriverConfig: (this: import("./type").StorageConfigRuntime, name?: string) => import("./type").StorageDriverConfig;
59
+ temp: {
108
60
  path: string;
109
61
  maxAge: number;
110
62
  };
111
- readonly uploads: {
63
+ uploads: {
112
64
  maxSize: string;
113
65
  allowedMimes: string;
114
66
  path: string;
115
67
  };
116
- readonly backups: {
68
+ backups: {
117
69
  path: string;
118
70
  driver: string;
119
71
  };
120
- }>;
121
- readonly notification: Readonly<{
122
- readonly default: string;
123
- readonly drivers: import("./type").NotificationDrivers;
124
- readonly providers: import("./type").NotificationProviders;
125
- readonly getDriverName: () => string;
126
- readonly getDriverConfig: (name?: string) => import("./type").KnownNotificationDriverConfig;
127
- }>;
72
+ };
73
+ readonly notification: {
74
+ default: string;
75
+ drivers: import("./type").NotificationDrivers;
76
+ providers: import("./type").NotificationProviders;
77
+ getDriverName: () => string;
78
+ getDriverConfig: (name?: string) => import("./type").KnownNotificationDriverConfig;
79
+ };
128
80
  readonly security: Readonly<{
129
81
  readonly jwt: {
130
82
  readonly enabled: boolean;
131
83
  readonly secret: string;
132
84
  readonly algorithm: "HS256" | "HS512" | "RS256";
133
- readonly expiresIn: string;
85
+ readonly expiresIn: number;
134
86
  readonly refreshExpiresIn: string;
135
87
  readonly issuer: string;
136
88
  readonly audience: string;
@@ -252,73 +204,17 @@ export declare const config: Readonly<{
252
204
  readonly namespace: string;
253
205
  };
254
206
  }>;
255
- readonly cache: Readonly<{
207
+ readonly cache: {
256
208
  default: string;
257
- drivers: {
258
- memory: {
259
- driver: "memory";
260
- ttl: number;
261
- };
262
- redis: {
263
- driver: "redis";
264
- host: string;
265
- port: number;
266
- ttl: number;
267
- };
268
- mongodb: {
269
- driver: "mongodb";
270
- uri: string;
271
- db: string;
272
- ttl: number;
273
- };
274
- kv: {
275
- driver: "kv";
276
- ttl: number;
277
- };
278
- 'kv-remote': {
279
- driver: "kv-remote";
280
- ttl: number;
281
- };
282
- };
283
- getDriver(name?: string): import("./type").CacheDriverConfig;
209
+ drivers: import("./type").CacheConfigInput["drivers"];
210
+ getDriver: (name?: string) => import("./type").CacheDriverConfig;
284
211
  keyPrefix: string;
285
212
  ttl: number;
286
- }>;
287
- readonly queue: Readonly<{
213
+ };
214
+ readonly queue: {
288
215
  default: import("./type").QueueDriverName;
289
- drivers: {
290
- sync: {
291
- driver: "sync";
292
- };
293
- database: {
294
- driver: "database";
295
- table: string;
296
- connection: string;
297
- };
298
- redis: {
299
- driver: "redis";
300
- host: string;
301
- port: number;
302
- password: string;
303
- database: number;
304
- };
305
- rabbitmq: {
306
- driver: "rabbitmq";
307
- host: string;
308
- port: number;
309
- username: string;
310
- password: string;
311
- vhost: string;
312
- };
313
- sqs: {
314
- driver: "sqs";
315
- key: string;
316
- secret: string;
317
- region: string;
318
- queueUrl: string;
319
- };
320
- };
321
- getDriver(): import("./type").QueueDriversConfig[import("./type").QueueDriverName];
216
+ drivers: import("./type").QueueDriversConfig;
217
+ getDriver: (this: import("./type").QueueConfigWithDrivers) => import("./type").QueueDriversConfig[import("./type").QueueDriverName];
322
218
  failed: {
323
219
  database: string;
324
220
  table: string;
@@ -329,7 +225,7 @@ export declare const config: Readonly<{
329
225
  backoff: number;
330
226
  workers: number;
331
227
  };
332
- }>;
228
+ };
333
229
  }>;
334
230
  export type Config = typeof config;
335
231
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,OAAO,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEpE;;;GAGG;AACH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWR,CAAC;AAEZ,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,OAAO,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEpE;;;GAGG;AACH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;8BAXgB,CAAA;;;;;;;;;;;;;;;;;;;;2EAAA,CAAC;;;;;;;;;;;;;;;;;;;;8BAD2B,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAoBxD,CAAC;;;;;;;;;;;;;;;;;;;EAGE,CAAC;AAEZ,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC"}
@@ -125,7 +125,7 @@ const flushSoon = async () => {
125
125
  export const KvLogger = Object.freeze({
126
126
  async enqueue(event) {
127
127
  if (!isEnabled())
128
- return Promise.resolve();
128
+ return;
129
129
  buffer.push(event);
130
130
  // Basic size guard: flush if it gets too large
131
131
  const maxBatch = 100;
@@ -104,10 +104,10 @@ const scheduleFlush = async () => {
104
104
  export const SlackLogger = Object.freeze({
105
105
  async enqueue(event) {
106
106
  if (!isEnabled())
107
- return Promise.resolve();
107
+ return;
108
108
  const levels = getLevels();
109
109
  if (!levels.has(event.level))
110
- return Promise.resolve();
110
+ return;
111
111
  const key = dedupeKeyFor(event);
112
112
  if (dedupeKeys.has(key))
113
113
  return scheduleFlush();
@@ -3,61 +3,25 @@
3
3
  * Runtime mail drivers and settings
4
4
  * Sealed namespace for immutability
5
5
  */
6
- import type { MailDriverConfig } from './type';
7
- export declare const mailConfig: Readonly<{
8
- /**
9
- * Default mail driver
10
- */
11
- readonly default: string;
12
- /**
13
- * Default "From" identity
14
- */
15
- readonly from: {
16
- readonly address: string;
17
- readonly name: string;
6
+ import type { MailConfigInput, MailDriverConfig } from './type';
7
+ export type MailConfigOverrides = Partial<{
8
+ default: string;
9
+ from: {
10
+ address: string;
11
+ name: string;
18
12
  };
19
- /**
20
- * Driver configs
21
- */
22
- readonly drivers: {
23
- readonly disabled: {
24
- readonly driver: "disabled";
25
- };
26
- readonly sendgrid: {
27
- readonly driver: "sendgrid";
28
- readonly apiKey: string;
29
- };
30
- readonly mailgun: {
31
- readonly driver: "mailgun";
32
- readonly apiKey: string;
33
- readonly domain: string;
34
- readonly baseUrl: string;
35
- };
36
- readonly smtp: {
37
- readonly driver: "smtp";
38
- readonly host: string;
39
- readonly port: number;
40
- readonly username: string;
41
- readonly password: string;
42
- readonly secure: boolean | "starttls";
43
- };
44
- readonly nodemailer: {
45
- readonly driver: "nodemailer";
46
- readonly host: string;
47
- readonly port: number;
48
- readonly username: string;
49
- readonly password: string;
50
- readonly secure: boolean | "starttls";
51
- };
52
- readonly ses: {
53
- readonly driver: "ses";
54
- readonly region: string;
55
- };
56
- };
57
- /**
58
- * Get selected driver config
59
- */
60
- readonly getDriver: (name?: string) => MailDriverConfig;
13
+ drivers: Record<string, MailDriverConfig>;
61
14
  }>;
62
- export type MailConfig = typeof mailConfig;
15
+ declare const createMailConfig: () => {
16
+ default: string;
17
+ from: {
18
+ address: string;
19
+ name: string;
20
+ };
21
+ drivers: Record<string, MailDriverConfig>;
22
+ getDriver: (this: MailConfigInput, name?: string) => MailDriverConfig;
23
+ };
24
+ export type MailConfig = ReturnType<typeof createMailConfig>;
25
+ export declare const mailConfig: MailConfig;
26
+ export {};
63
27
  //# sourceMappingURL=mail.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mail.d.ts","sourceRoot":"","sources":["../../../src/config/mail.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAmB,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAkHtE,eAAO,MAAM,UAAU;IA7ErB;;OAEG;;IAGH;;OAEG;;;;;IAMH;;OAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAsDH;;OAEG;gCACc,MAAM,KAAG,gBAAgB;EAKU,CAAC;AACvD,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC"}
1
+ {"version":3,"file":"mail.d.ts","sourceRoot":"","sources":["../../../src/config/mail.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGtE,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CAC3C,CAAC,CAAC;AAmCH,QAAA,MAAM,gBAAgB,QAAO;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC1C,SAAS,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,gBAAgB,CAAC;CAgGvE,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAqB7D,eAAO,MAAM,UAAU,EAAE,UAYvB,CAAC"}
@@ -3,6 +3,7 @@
3
3
  * Runtime mail drivers and settings
4
4
  * Sealed namespace for immutability
5
5
  */
6
+ import { StartupConfigFile, StartupConfigFileRegistry } from '../runtime/StartupConfigFileRegistry.js';
6
7
  import { Env } from './env.js';
7
8
  import { ErrorFactory } from '../exceptions/ZintrustError.js';
8
9
  const isMailDriverConfig = (value) => {
@@ -34,22 +35,16 @@ const getMailDriver = (config, name) => {
34
35
  }
35
36
  throw ErrorFactory.createConfigError(`Mail driver not configured: ${selected}`);
36
37
  };
37
- const mailConfigObj = {
38
- /**
39
- * Default mail driver
40
- */
41
- default: Env.get('MAIL_CONNECTION', Env.get('MAIL_DRIVER', 'disabled')).trim().toLowerCase(),
42
- /**
43
- * Default "From" identity
44
- */
45
- from: {
38
+ const createMailConfig = () => {
39
+ const overrides = StartupConfigFileRegistry.get(StartupConfigFile.Mail) ?? {};
40
+ const baseDefault = Env.get('MAIL_CONNECTION', Env.get('MAIL_DRIVER', 'disabled'))
41
+ .trim()
42
+ .toLowerCase();
43
+ const baseFrom = {
46
44
  address: Env.get('MAIL_FROM_ADDRESS', ''),
47
45
  name: Env.get('MAIL_FROM_NAME', ''),
48
- },
49
- /**
50
- * Driver configs
51
- */
52
- drivers: {
46
+ };
47
+ const baseDrivers = {
53
48
  disabled: {
54
49
  driver: 'disabled',
55
50
  },
@@ -101,12 +96,59 @@ const mailConfigObj = {
101
96
  driver: 'ses',
102
97
  region: Env.get('AWS_REGION', 'us-east-1'),
103
98
  },
99
+ };
100
+ const mailConfigObj = {
101
+ /**
102
+ * Default mail driver
103
+ */
104
+ default: (overrides.default ?? baseDefault).trim().toLowerCase(),
105
+ /**
106
+ * Default "From" identity
107
+ */
108
+ from: {
109
+ ...baseFrom,
110
+ ...(overrides.from ?? {}),
111
+ },
112
+ /**
113
+ * Driver configs
114
+ */
115
+ drivers: {
116
+ ...baseDrivers,
117
+ ...(overrides.drivers ?? {}),
118
+ },
119
+ /**
120
+ * Get selected driver config
121
+ */
122
+ getDriver(name) {
123
+ return getMailDriver(this, name);
124
+ },
125
+ };
126
+ return Object.freeze(mailConfigObj);
127
+ };
128
+ let cached = null;
129
+ const proxyTarget = {};
130
+ const ensureMailConfig = () => {
131
+ if (cached)
132
+ return cached;
133
+ cached = createMailConfig();
134
+ try {
135
+ Object.defineProperties(proxyTarget, Object.getOwnPropertyDescriptors(cached));
136
+ }
137
+ catch {
138
+ // best-effort
139
+ }
140
+ return cached;
141
+ };
142
+ export const mailConfig = new Proxy(proxyTarget, {
143
+ get(_target, prop) {
144
+ return ensureMailConfig()[prop];
104
145
  },
105
- /**
106
- * Get selected driver config
107
- */
108
- getDriver(name) {
109
- return getMailDriver(this, name);
146
+ ownKeys() {
147
+ ensureMailConfig();
148
+ return Reflect.ownKeys(proxyTarget);
110
149
  },
111
- };
112
- export const mailConfig = Object.freeze(mailConfigObj);
150
+ getOwnPropertyDescriptor(_target, prop) {
151
+ ensureMailConfig();
152
+ return Object.getOwnPropertyDescriptor(proxyTarget, prop);
153
+ },
154
+ });
@@ -1,4 +1,47 @@
1
- import { MiddlewareConfigType } from './type';
1
+ import type { MiddlewareConfigType } from './type';
2
+ export declare enum MiddlewareBody {
3
+ email = "email",
4
+ password = "password",
5
+ name = "name",
6
+ count = "count"
7
+ }
8
+ export type MiddlewaresType = {
9
+ skipPaths: string[];
10
+ fillRateLimit: {
11
+ windowMs: number;
12
+ max: number;
13
+ message: string;
14
+ };
15
+ authRateLimit: {
16
+ windowMs: number;
17
+ max: number;
18
+ message: string;
19
+ };
20
+ userMutationRateLimit: {
21
+ windowMs: number;
22
+ max: number;
23
+ message: string;
24
+ };
25
+ };
26
+ export declare const MiddlewareKeys: Readonly<{
27
+ log: true;
28
+ error: true;
29
+ security: true;
30
+ rateLimit: true;
31
+ sanitizeBody: true;
32
+ fillRateLimit: true;
33
+ authRateLimit: true;
34
+ userMutationRateLimit: true;
35
+ csrf: true;
36
+ auth: true;
37
+ jwt: true;
38
+ validateLogin: true;
39
+ validateRegister: true;
40
+ validateUserStore: true;
41
+ validateUserUpdate: true;
42
+ validateUserFill: true;
43
+ }>;
44
+ export type MiddlewareKey = keyof typeof MiddlewareKeys;
2
45
  export declare function createMiddlewareConfig(): MiddlewareConfigType;
3
46
  export declare const middlewareConfig: MiddlewareConfigType;
4
47
  export default middlewareConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../src/config/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AA0BpD,wBAAgB,sBAAsB,IAAI,oBAAoB,CAS7D;AA0BD,eAAO,MAAM,gBAAgB,EAAE,oBAY7B,CAAC;AAEH,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../src/config/middleware.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AA8DzD,oBAAY,cAAc;IACxB,KAAK,UAAU;IACf,QAAQ,aAAa;IACrB,IAAI,SAAS;IACb,KAAK,UAAU;CAChB;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,aAAa,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAClE,aAAa,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAClE,qBAAqB,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3E,CAAC;AAEF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;EAiBuB,CAAC;AAEnD,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,cAAc,CAAC;AA0MxD,wBAAgB,sBAAsB,IAAI,oBAAoB,CAqB7D;AA0BD,eAAO,MAAM,gBAAgB,EAAE,oBAY7B,CAAC;AAEH,eAAe,gBAAgB,CAAC"}
@@ -1,21 +1,173 @@
1
+ import { StartupConfigFile, StartupConfigFileRegistry } from '../runtime/StartupConfigFileRegistry.js';
2
+ import { bodyParsingMiddleware } from '../http/middleware/BodyParsingMiddleware.js';
3
+ import { fileUploadMiddleware } from '../http/middleware/FileUploadMiddleware.js';
4
+ import { AuthMiddleware } from '../middleware/AuthMiddleware.js';
1
5
  import { CsrfMiddleware } from '../middleware/CsrfMiddleware.js';
2
6
  import { ErrorHandlerMiddleware } from '../middleware/ErrorHandlerMiddleware.js';
7
+ import { JwtAuthMiddleware } from '../middleware/JwtAuthMiddleware.js';
3
8
  import { LoggingMiddleware } from '../middleware/LoggingMiddleware.js';
4
9
  import { RateLimiter } from '../middleware/RateLimiter.js';
10
+ import { SanitizeBodyMiddleware } from '../middleware/SanitizeBodyMiddleware.js';
5
11
  import { SecurityMiddleware } from '../middleware/SecurityMiddleware.js';
6
- function createSharedMiddlewares() {
12
+ import { ValidationMiddleware } from '../middleware/ValidationMiddleware.js';
13
+ import { Sanitizer } from '../security/Sanitizer.js';
14
+ import { Schema } from '../validation/Validator.js';
15
+ export var MiddlewareBody;
16
+ (function (MiddlewareBody) {
17
+ MiddlewareBody["email"] = "email";
18
+ MiddlewareBody["password"] = "password";
19
+ MiddlewareBody["name"] = "name";
20
+ MiddlewareBody["count"] = "count";
21
+ })(MiddlewareBody || (MiddlewareBody = {}));
22
+ export const MiddlewareKeys = Object.freeze({
23
+ log: true,
24
+ error: true,
25
+ security: true,
26
+ rateLimit: true,
27
+ sanitizeBody: true,
28
+ fillRateLimit: true,
29
+ authRateLimit: true,
30
+ userMutationRateLimit: true,
31
+ csrf: true,
32
+ auth: true,
33
+ jwt: true,
34
+ validateLogin: true,
35
+ validateRegister: true,
36
+ validateUserStore: true,
37
+ validateUserUpdate: true,
38
+ validateUserFill: true,
39
+ });
40
+ // Ensure `ValidationMiddleware` is strongly typed here to avoid `error`-typed values
41
+ // triggering `@typescript-eslint/no-unsafe-*` rules.
42
+ const Validation = ValidationMiddleware;
43
+ const resolveFillRateLimit = (loadMiddlewareConfig) => {
44
+ return {
45
+ windowMs: loadMiddlewareConfig.fillRateLimit?.windowMs ?? 60_000,
46
+ max: loadMiddlewareConfig.fillRateLimit?.max ?? 5,
47
+ message: loadMiddlewareConfig.fillRateLimit?.message ??
48
+ 'Too many requests, please try again after 1 minute.',
49
+ };
50
+ };
51
+ const resolveAuthRateLimit = (loadMiddlewareConfig) => {
52
+ return {
53
+ windowMs: loadMiddlewareConfig.authRateLimit?.windowMs ?? 60_000,
54
+ max: loadMiddlewareConfig.authRateLimit?.max ?? 10,
55
+ message: loadMiddlewareConfig.authRateLimit?.message ??
56
+ 'Too many login attempts, please try again after 1 minute.',
57
+ };
58
+ };
59
+ const resolveUserMutationRateLimit = (loadMiddlewareConfig) => {
60
+ return {
61
+ windowMs: loadMiddlewareConfig.userMutationRateLimit?.windowMs ?? 60_000,
62
+ max: loadMiddlewareConfig.userMutationRateLimit?.max ?? 20,
63
+ message: loadMiddlewareConfig.userMutationRateLimit?.message ??
64
+ 'Too many user requests, please try again after 1 minute.',
65
+ };
66
+ };
67
+ function createRateLimitMiddlewares(loadMiddlewareConfig) {
68
+ const fillRateLimit = RateLimiter.create(resolveFillRateLimit(loadMiddlewareConfig));
69
+ const authRateLimit = RateLimiter.create(resolveAuthRateLimit(loadMiddlewareConfig));
70
+ const userMutationRateLimit = RateLimiter.create(resolveUserMutationRateLimit(loadMiddlewareConfig));
71
+ return Object.freeze({
72
+ rateLimit: RateLimiter.create(),
73
+ fillRateLimit,
74
+ authRateLimit,
75
+ userMutationRateLimit,
76
+ });
77
+ }
78
+ function createAuthValidationMiddlewares() {
79
+ return {
80
+ validateLogin: Validation.createBodyWithSanitization(Schema.typed()
81
+ .required(MiddlewareBody.email)
82
+ .email(MiddlewareBody.email)
83
+ .required(MiddlewareBody.password)
84
+ .string(MiddlewareBody.password), {
85
+ email: (v) => Sanitizer.email(v).trim().toLowerCase(),
86
+ password: (v) => Sanitizer.safePasswordChars(v),
87
+ }),
88
+ validateRegister: Validation.createBodyWithSanitization(Schema.typed()
89
+ .required(MiddlewareBody.name)
90
+ .string(MiddlewareBody.name)
91
+ .minLength(MiddlewareBody.name, 1)
92
+ .required(MiddlewareBody.email)
93
+ .email(MiddlewareBody.email)
94
+ .required(MiddlewareBody.password)
95
+ .string(MiddlewareBody.password)
96
+ .minLength(MiddlewareBody.password, 8), {
97
+ name: (v) => Sanitizer.nameText(v).trim(),
98
+ email: (v) => Sanitizer.email(v).trim().toLowerCase(),
99
+ password: (v) => Sanitizer.safePasswordChars(v),
100
+ }),
101
+ };
102
+ }
103
+ function createUserValidationMiddlewares() {
104
+ return {
105
+ validateUserStore: Validation.createBodyWithSanitization(Schema.typed()
106
+ .required(MiddlewareBody.name)
107
+ .string(MiddlewareBody.name)
108
+ .minLength(MiddlewareBody.name, 1)
109
+ .required(MiddlewareBody.email)
110
+ .email(MiddlewareBody.email)
111
+ .required(MiddlewareBody.password)
112
+ .string(MiddlewareBody.password)
113
+ .minLength(MiddlewareBody.password, 8), {
114
+ name: (v) => Sanitizer.nameText(v).trim(),
115
+ email: (v) => Sanitizer.email(v).trim().toLowerCase(),
116
+ password: (v) => Sanitizer.safePasswordChars(v),
117
+ }),
118
+ validateUserUpdate: Validation.createBodyWithSanitization(Schema.typed()
119
+ .custom(MiddlewareBody.name, (v) => v === undefined || typeof v === 'string', MiddlewareBody.name + ' must be a string')
120
+ .minLength(MiddlewareBody.name, 1)
121
+ .custom(MiddlewareBody.email, (v) => v === undefined || typeof v === 'string', MiddlewareBody.email + ' must be a string')
122
+ .custom(MiddlewareBody.password, (v) => v === undefined || typeof v === 'string', MiddlewareBody.password + ' must be a string')
123
+ .minLength(MiddlewareBody.password, 8), {
124
+ name: (v) => Sanitizer.nameText(v).trim(),
125
+ email: (v) => Sanitizer.email(v).trim().toLowerCase(),
126
+ password: (v) => Sanitizer.safePasswordChars(v),
127
+ }),
128
+ validateUserFill: Validation.createBodyWithSanitization(Schema.typed()
129
+ .custom(MiddlewareBody.count, (v) => v === undefined || (typeof v === 'number' && Number.isFinite(v)), MiddlewareBody.count + ' must be a number')
130
+ .min(MiddlewareBody.count, 1)
131
+ .max(MiddlewareBody.count, 100)),
132
+ };
133
+ }
134
+ function createValidationMiddlewares() {
135
+ return Object.freeze({
136
+ ...createAuthValidationMiddlewares(),
137
+ ...createUserValidationMiddlewares(),
138
+ });
139
+ }
140
+ function createSharedMiddlewares(loadMiddlewareConfig) {
141
+ const rateLimits = createRateLimitMiddlewares(loadMiddlewareConfig);
142
+ const validations = createValidationMiddlewares();
7
143
  return Object.freeze({
8
144
  log: LoggingMiddleware.create(),
9
145
  error: ErrorHandlerMiddleware.create(),
10
146
  security: SecurityMiddleware.create(),
11
- rateLimit: RateLimiter.create(),
12
- csrf: CsrfMiddleware.create(),
147
+ sanitizeBody: SanitizeBodyMiddleware.create(),
148
+ ...rateLimits,
149
+ csrf: CsrfMiddleware.create({
150
+ skipPaths: loadMiddlewareConfig?.skipPaths ?? [],
151
+ }),
152
+ auth: AuthMiddleware.create(),
153
+ jwt: JwtAuthMiddleware.create(),
154
+ ...validations,
13
155
  });
14
156
  }
15
157
  export function createMiddlewareConfig() {
16
- const shared = createSharedMiddlewares();
158
+ const loadMiddlewareConfig = StartupConfigFileRegistry.get(StartupConfigFile.Middleware) ?? {};
159
+ const shared = createSharedMiddlewares(loadMiddlewareConfig);
17
160
  const middlewareConfigObj = {
18
- global: [shared.log, shared.error, shared.security, shared.rateLimit, shared.csrf],
161
+ global: [
162
+ shared.log,
163
+ shared.error,
164
+ shared.security,
165
+ shared.rateLimit,
166
+ fileUploadMiddleware,
167
+ bodyParsingMiddleware,
168
+ shared.csrf,
169
+ shared.sanitizeBody,
170
+ ],
19
171
  route: shared,
20
172
  };
21
173
  return Object.freeze(middlewareConfigObj);