@zintrust/core 0.1.0

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 (494) hide show
  1. package/bin/z.d.ts +7 -0
  2. package/bin/z.d.ts.map +1 -0
  3. package/bin/z.js +6 -0
  4. package/bin/zin.d.ts +7 -0
  5. package/bin/zin.d.ts.map +1 -0
  6. package/bin/zin.js +6 -0
  7. package/bin/zintrust-microservices.d.ts +7 -0
  8. package/bin/zintrust-microservices.d.ts.map +1 -0
  9. package/bin/zintrust-microservices.js +165 -0
  10. package/bin/zintrust.d.ts +9 -0
  11. package/bin/zintrust.d.ts.map +1 -0
  12. package/bin/zintrust.js +51 -0
  13. package/bin/zt.d.ts +7 -0
  14. package/bin/zt.d.ts.map +1 -0
  15. package/bin/zt.js +6 -0
  16. package/package.json +80 -0
  17. package/src/boot/Application.d.ts +31 -0
  18. package/src/boot/Application.d.ts.map +1 -0
  19. package/src/boot/Application.js +159 -0
  20. package/src/boot/Server.d.ts +23 -0
  21. package/src/boot/Server.d.ts.map +1 -0
  22. package/src/boot/Server.js +236 -0
  23. package/src/boot/bootstrap.d.ts +7 -0
  24. package/src/boot/bootstrap.d.ts.map +1 -0
  25. package/src/boot/bootstrap.js +64 -0
  26. package/src/builder/BundleOptimizer.d.ts +42 -0
  27. package/src/builder/BundleOptimizer.d.ts.map +1 -0
  28. package/src/builder/BundleOptimizer.js +356 -0
  29. package/src/cache/Cache.d.ts +26 -0
  30. package/src/cache/Cache.d.ts.map +1 -0
  31. package/src/cache/Cache.js +89 -0
  32. package/src/cache/CacheDriver.d.ts +28 -0
  33. package/src/cache/CacheDriver.d.ts.map +1 -0
  34. package/src/cache/CacheDriver.js +6 -0
  35. package/src/cache/drivers/KVDriver.d.ts +12 -0
  36. package/src/cache/drivers/KVDriver.d.ts.map +1 -0
  37. package/src/cache/drivers/KVDriver.js +54 -0
  38. package/src/cache/drivers/MemoryDriver.d.ts +12 -0
  39. package/src/cache/drivers/MemoryDriver.d.ts.map +1 -0
  40. package/src/cache/drivers/MemoryDriver.js +50 -0
  41. package/src/cache/drivers/MongoDriver.d.ts +17 -0
  42. package/src/cache/drivers/MongoDriver.d.ts.map +1 -0
  43. package/src/cache/drivers/MongoDriver.js +80 -0
  44. package/src/cache/drivers/RedisDriver.d.ts +12 -0
  45. package/src/cache/drivers/RedisDriver.d.ts.map +1 -0
  46. package/src/cache/drivers/RedisDriver.js +79 -0
  47. package/src/cli/BaseCommand.d.ts +39 -0
  48. package/src/cli/BaseCommand.d.ts.map +1 -0
  49. package/src/cli/BaseCommand.js +58 -0
  50. package/src/cli/CLI.d.ts +21 -0
  51. package/src/cli/CLI.d.ts.map +1 -0
  52. package/src/cli/CLI.js +203 -0
  53. package/src/cli/ErrorHandler.d.ts +23 -0
  54. package/src/cli/ErrorHandler.d.ts.map +1 -0
  55. package/src/cli/ErrorHandler.js +95 -0
  56. package/src/cli/PromptHelper.d.ts +47 -0
  57. package/src/cli/PromptHelper.d.ts.map +1 -0
  58. package/src/cli/PromptHelper.js +155 -0
  59. package/src/cli/commands/AddCommand.d.ts +15 -0
  60. package/src/cli/commands/AddCommand.d.ts.map +1 -0
  61. package/src/cli/commands/AddCommand.js +817 -0
  62. package/src/cli/commands/ConfigCommand.d.ts +15 -0
  63. package/src/cli/commands/ConfigCommand.d.ts.map +1 -0
  64. package/src/cli/commands/ConfigCommand.js +273 -0
  65. package/src/cli/commands/D1MigrateCommand.d.ts +15 -0
  66. package/src/cli/commands/D1MigrateCommand.d.ts.map +1 -0
  67. package/src/cli/commands/D1MigrateCommand.js +73 -0
  68. package/src/cli/commands/DebugCommand.d.ts +15 -0
  69. package/src/cli/commands/DebugCommand.d.ts.map +1 -0
  70. package/src/cli/commands/DebugCommand.js +52 -0
  71. package/src/cli/commands/FixCommand.d.ts +15 -0
  72. package/src/cli/commands/FixCommand.d.ts.map +1 -0
  73. package/src/cli/commands/FixCommand.js +80 -0
  74. package/src/cli/commands/KeyGenerateCommand.d.ts +9 -0
  75. package/src/cli/commands/KeyGenerateCommand.d.ts.map +1 -0
  76. package/src/cli/commands/KeyGenerateCommand.js +76 -0
  77. package/src/cli/commands/LogsCommand.d.ts +19 -0
  78. package/src/cli/commands/LogsCommand.d.ts.map +1 -0
  79. package/src/cli/commands/LogsCommand.js +185 -0
  80. package/src/cli/commands/MigrateCommand.d.ts +15 -0
  81. package/src/cli/commands/MigrateCommand.d.ts.map +1 -0
  82. package/src/cli/commands/MigrateCommand.js +56 -0
  83. package/src/cli/commands/NewCommand.d.ts +32 -0
  84. package/src/cli/commands/NewCommand.d.ts.map +1 -0
  85. package/src/cli/commands/NewCommand.js +280 -0
  86. package/src/cli/commands/PluginCommand.d.ts +9 -0
  87. package/src/cli/commands/PluginCommand.d.ts.map +1 -0
  88. package/src/cli/commands/PluginCommand.js +94 -0
  89. package/src/cli/commands/PrepareCommand.d.ts +8 -0
  90. package/src/cli/commands/PrepareCommand.d.ts.map +1 -0
  91. package/src/cli/commands/PrepareCommand.js +51 -0
  92. package/src/cli/commands/QACommand.d.ts +33 -0
  93. package/src/cli/commands/QACommand.d.ts.map +1 -0
  94. package/src/cli/commands/QACommand.js +490 -0
  95. package/src/cli/commands/SimulateCommand.d.ts +12 -0
  96. package/src/cli/commands/SimulateCommand.d.ts.map +1 -0
  97. package/src/cli/commands/SimulateCommand.js +79 -0
  98. package/src/cli/commands/StartCommand.d.ts +5 -0
  99. package/src/cli/commands/StartCommand.d.ts.map +1 -0
  100. package/src/cli/commands/StartCommand.js +227 -0
  101. package/src/cli/commands/index.d.ts +11 -0
  102. package/src/cli/commands/index.d.ts.map +1 -0
  103. package/src/cli/commands/index.js +10 -0
  104. package/src/cli/config/ConfigManager.d.ts +42 -0
  105. package/src/cli/config/ConfigManager.d.ts.map +1 -0
  106. package/src/cli/config/ConfigManager.js +175 -0
  107. package/src/cli/config/ConfigSchema.d.ts +195 -0
  108. package/src/cli/config/ConfigSchema.d.ts.map +1 -0
  109. package/src/cli/config/ConfigSchema.js +171 -0
  110. package/src/cli/config/ConfigValidator.d.ts +41 -0
  111. package/src/cli/config/ConfigValidator.d.ts.map +1 -0
  112. package/src/cli/config/ConfigValidator.js +200 -0
  113. package/src/cli/config/index.d.ts +8 -0
  114. package/src/cli/config/index.d.ts.map +1 -0
  115. package/src/cli/config/index.js +7 -0
  116. package/src/cli/debug/Dashboard.d.ts +34 -0
  117. package/src/cli/debug/Dashboard.d.ts.map +1 -0
  118. package/src/cli/debug/Dashboard.js +152 -0
  119. package/src/cli/index.d.ts +14 -0
  120. package/src/cli/index.d.ts.map +1 -0
  121. package/src/cli/index.js +14 -0
  122. package/src/cli/logger/Logger.d.ts +43 -0
  123. package/src/cli/logger/Logger.d.ts.map +1 -0
  124. package/src/cli/logger/Logger.js +137 -0
  125. package/src/cli/scaffolding/ControllerGenerator.d.ts +44 -0
  126. package/src/cli/scaffolding/ControllerGenerator.d.ts.map +1 -0
  127. package/src/cli/scaffolding/ControllerGenerator.js +540 -0
  128. package/src/cli/scaffolding/FactoryGenerator.d.ts +47 -0
  129. package/src/cli/scaffolding/FactoryGenerator.d.ts.map +1 -0
  130. package/src/cli/scaffolding/FactoryGenerator.js +356 -0
  131. package/src/cli/scaffolding/FeatureScaffolder.d.ts +40 -0
  132. package/src/cli/scaffolding/FeatureScaffolder.d.ts.map +1 -0
  133. package/src/cli/scaffolding/FeatureScaffolder.js +747 -0
  134. package/src/cli/scaffolding/FileGenerator.d.ts +31 -0
  135. package/src/cli/scaffolding/FileGenerator.d.ts.map +1 -0
  136. package/src/cli/scaffolding/FileGenerator.js +222 -0
  137. package/src/cli/scaffolding/MigrationGenerator.d.ts +35 -0
  138. package/src/cli/scaffolding/MigrationGenerator.d.ts.map +1 -0
  139. package/src/cli/scaffolding/MigrationGenerator.js +257 -0
  140. package/src/cli/scaffolding/ModelGenerator.d.ts +81 -0
  141. package/src/cli/scaffolding/ModelGenerator.d.ts.map +1 -0
  142. package/src/cli/scaffolding/ModelGenerator.js +249 -0
  143. package/src/cli/scaffolding/ProjectScaffolder.d.ts +66 -0
  144. package/src/cli/scaffolding/ProjectScaffolder.d.ts.map +1 -0
  145. package/src/cli/scaffolding/ProjectScaffolder.js +439 -0
  146. package/src/cli/scaffolding/RequestFactoryGenerator.d.ts +50 -0
  147. package/src/cli/scaffolding/RequestFactoryGenerator.d.ts.map +1 -0
  148. package/src/cli/scaffolding/RequestFactoryGenerator.js +465 -0
  149. package/src/cli/scaffolding/ResponseFactoryGenerator.d.ts +43 -0
  150. package/src/cli/scaffolding/ResponseFactoryGenerator.d.ts.map +1 -0
  151. package/src/cli/scaffolding/ResponseFactoryGenerator.js +321 -0
  152. package/src/cli/scaffolding/RouteGenerator.d.ts +66 -0
  153. package/src/cli/scaffolding/RouteGenerator.d.ts.map +1 -0
  154. package/src/cli/scaffolding/RouteGenerator.js +306 -0
  155. package/src/cli/scaffolding/SeederGenerator.d.ts +47 -0
  156. package/src/cli/scaffolding/SeederGenerator.d.ts.map +1 -0
  157. package/src/cli/scaffolding/SeederGenerator.js +286 -0
  158. package/src/cli/scaffolding/ServiceIntegrationTestGenerator.d.ts +40 -0
  159. package/src/cli/scaffolding/ServiceIntegrationTestGenerator.d.ts.map +1 -0
  160. package/src/cli/scaffolding/ServiceIntegrationTestGenerator.js +267 -0
  161. package/src/cli/scaffolding/ServiceRequestFactoryGenerator.d.ts +45 -0
  162. package/src/cli/scaffolding/ServiceRequestFactoryGenerator.d.ts.map +1 -0
  163. package/src/cli/scaffolding/ServiceRequestFactoryGenerator.js +397 -0
  164. package/src/cli/scaffolding/ServiceScaffolder.d.ts +45 -0
  165. package/src/cli/scaffolding/ServiceScaffolder.d.ts.map +1 -0
  166. package/src/cli/scaffolding/ServiceScaffolder.js +367 -0
  167. package/src/cli/scaffolding/TemplateEngine.d.ts +35 -0
  168. package/src/cli/scaffolding/TemplateEngine.d.ts.map +1 -0
  169. package/src/cli/scaffolding/TemplateEngine.js +379 -0
  170. package/src/cli/scaffolding/WorkflowGenerator.d.ts +31 -0
  171. package/src/cli/scaffolding/WorkflowGenerator.d.ts.map +1 -0
  172. package/src/cli/scaffolding/WorkflowGenerator.js +193 -0
  173. package/src/cli/scaffolding/index.d.ts +34 -0
  174. package/src/cli/scaffolding/index.d.ts.map +1 -0
  175. package/src/cli/scaffolding/index.js +18 -0
  176. package/src/cli/utils/DistPackager.d.ts +8 -0
  177. package/src/cli/utils/DistPackager.d.ts.map +1 -0
  178. package/src/cli/utils/DistPackager.js +94 -0
  179. package/src/cli/utils/EnvFileLoader.d.ts +21 -0
  180. package/src/cli/utils/EnvFileLoader.d.ts.map +1 -0
  181. package/src/cli/utils/EnvFileLoader.js +166 -0
  182. package/src/cli/utils/spawn.d.ts +11 -0
  183. package/src/cli/utils/spawn.d.ts.map +1 -0
  184. package/src/cli/utils/spawn.js +81 -0
  185. package/src/common/index.d.ts +87 -0
  186. package/src/common/index.d.ts.map +1 -0
  187. package/src/common/index.js +207 -0
  188. package/src/config/SecretsManager.d.ts +122 -0
  189. package/src/config/SecretsManager.d.ts.map +1 -0
  190. package/src/config/SecretsManager.js +328 -0
  191. package/src/config/app.d.ts +56 -0
  192. package/src/config/app.d.ts.map +1 -0
  193. package/src/config/app.js +77 -0
  194. package/src/config/cache.d.ts +76 -0
  195. package/src/config/cache.d.ts.map +1 -0
  196. package/src/config/cache.js +62 -0
  197. package/src/config/constants.d.ts +108 -0
  198. package/src/config/constants.d.ts.map +1 -0
  199. package/src/config/constants.js +64 -0
  200. package/src/config/database.d.ts +122 -0
  201. package/src/config/database.d.ts.map +1 -0
  202. package/src/config/database.js +89 -0
  203. package/src/config/env.d.ts +56 -0
  204. package/src/config/env.d.ts.map +1 -0
  205. package/src/config/env.js +133 -0
  206. package/src/config/features.d.ts +27 -0
  207. package/src/config/features.d.ts.map +1 -0
  208. package/src/config/features.js +49 -0
  209. package/src/config/index.d.ts +554 -0
  210. package/src/config/index.d.ts.map +1 -0
  211. package/src/config/index.js +31 -0
  212. package/src/config/logger.d.ts +17 -0
  213. package/src/config/logger.d.ts.map +1 -0
  214. package/src/config/logger.js +77 -0
  215. package/src/config/microservices.d.ts +88 -0
  216. package/src/config/microservices.d.ts.map +1 -0
  217. package/src/config/microservices.js +90 -0
  218. package/src/config/queue.d.ts +107 -0
  219. package/src/config/queue.d.ts.map +1 -0
  220. package/src/config/queue.js +74 -0
  221. package/src/config/security.d.ts +108 -0
  222. package/src/config/security.d.ts.map +1 -0
  223. package/src/config/security.js +134 -0
  224. package/src/config/storage.d.ts +105 -0
  225. package/src/config/storage.d.ts.map +1 -0
  226. package/src/config/storage.js +79 -0
  227. package/src/container/ServiceContainer.d.ts +25 -0
  228. package/src/container/ServiceContainer.d.ts.map +1 -0
  229. package/src/container/ServiceContainer.js +75 -0
  230. package/src/database/migrations/index.d.ts +2 -0
  231. package/src/database/migrations/index.d.ts.map +1 -0
  232. package/src/database/migrations/index.js +1 -0
  233. package/src/exceptions/ZintrustError.d.ts +88 -0
  234. package/src/exceptions/ZintrustError.d.ts.map +1 -0
  235. package/src/exceptions/ZintrustError.js +110 -0
  236. package/src/features/Auth.d.ts +20 -0
  237. package/src/features/Auth.d.ts.map +1 -0
  238. package/src/features/Auth.js +32 -0
  239. package/src/features/Queue.d.ts +21 -0
  240. package/src/features/Queue.d.ts.map +1 -0
  241. package/src/features/Queue.js +59 -0
  242. package/src/functions/cloudflare.d.ts +5 -0
  243. package/src/functions/cloudflare.d.ts.map +1 -0
  244. package/src/functions/cloudflare.js +34 -0
  245. package/src/functions/deno.d.ts +3 -0
  246. package/src/functions/deno.d.ts.map +1 -0
  247. package/src/functions/deno.js +31 -0
  248. package/src/functions/lambda.d.ts +2 -0
  249. package/src/functions/lambda.d.ts.map +1 -0
  250. package/src/functions/lambda.js +32 -0
  251. package/src/http/Controller.d.ts +20 -0
  252. package/src/http/Controller.d.ts.map +1 -0
  253. package/src/http/Controller.js +46 -0
  254. package/src/http/Kernel.d.ts +24 -0
  255. package/src/http/Kernel.d.ts.map +1 -0
  256. package/src/http/Kernel.js +72 -0
  257. package/src/http/Request.d.ts +36 -0
  258. package/src/http/Request.d.ts.map +1 -0
  259. package/src/http/Request.js +142 -0
  260. package/src/http/Response.d.ts +32 -0
  261. package/src/http/Response.d.ts.map +1 -0
  262. package/src/http/Response.js +70 -0
  263. package/src/index.d.ts +43 -0
  264. package/src/index.d.ts.map +1 -0
  265. package/src/index.js +37 -0
  266. package/src/microservices/MicroserviceBootstrap.d.ts +75 -0
  267. package/src/microservices/MicroserviceBootstrap.d.ts.map +1 -0
  268. package/src/microservices/MicroserviceBootstrap.js +285 -0
  269. package/src/microservices/MicroserviceGenerator.d.ts +27 -0
  270. package/src/microservices/MicroserviceGenerator.d.ts.map +1 -0
  271. package/src/microservices/MicroserviceGenerator.js +436 -0
  272. package/src/microservices/MicroserviceManager.d.ts +68 -0
  273. package/src/microservices/MicroserviceManager.d.ts.map +1 -0
  274. package/src/microservices/MicroserviceManager.js +266 -0
  275. package/src/microservices/PostgresAdapter.d.ts +90 -0
  276. package/src/microservices/PostgresAdapter.d.ts.map +1 -0
  277. package/src/microservices/PostgresAdapter.js +286 -0
  278. package/src/microservices/RequestTracingMiddleware.d.ts +41 -0
  279. package/src/microservices/RequestTracingMiddleware.d.ts.map +1 -0
  280. package/src/microservices/RequestTracingMiddleware.js +122 -0
  281. package/src/microservices/ServiceAuthMiddleware.d.ts +58 -0
  282. package/src/microservices/ServiceAuthMiddleware.d.ts.map +1 -0
  283. package/src/microservices/ServiceAuthMiddleware.js +240 -0
  284. package/src/microservices/ServiceBundler.d.ts +45 -0
  285. package/src/microservices/ServiceBundler.d.ts.map +1 -0
  286. package/src/microservices/ServiceBundler.js +297 -0
  287. package/src/microservices/ServiceHealthMonitor.d.ts +96 -0
  288. package/src/microservices/ServiceHealthMonitor.d.ts.map +1 -0
  289. package/src/microservices/ServiceHealthMonitor.js +379 -0
  290. package/src/middleware/CsrfMiddleware.d.ts +19 -0
  291. package/src/middleware/CsrfMiddleware.d.ts.map +1 -0
  292. package/src/middleware/CsrfMiddleware.js +121 -0
  293. package/src/middleware/MiddlewareStack.d.ts +27 -0
  294. package/src/middleware/MiddlewareStack.d.ts.map +1 -0
  295. package/src/middleware/MiddlewareStack.js +43 -0
  296. package/src/middleware/RateLimiter.d.ts +22 -0
  297. package/src/middleware/RateLimiter.d.ts.map +1 -0
  298. package/src/middleware/RateLimiter.js +72 -0
  299. package/src/middleware/SecurityMiddleware.d.ts +33 -0
  300. package/src/middleware/SecurityMiddleware.d.ts.map +1 -0
  301. package/src/middleware/SecurityMiddleware.js +106 -0
  302. package/src/middleware/index.d.ts +9 -0
  303. package/src/middleware/index.d.ts.map +1 -0
  304. package/src/middleware/index.js +8 -0
  305. package/src/node-singletons/child-process.d.ts +7 -0
  306. package/src/node-singletons/child-process.d.ts.map +1 -0
  307. package/src/node-singletons/child-process.js +6 -0
  308. package/src/node-singletons/crypto.d.ts +7 -0
  309. package/src/node-singletons/crypto.d.ts.map +1 -0
  310. package/src/node-singletons/crypto.js +6 -0
  311. package/src/node-singletons/events.d.ts +7 -0
  312. package/src/node-singletons/events.d.ts.map +1 -0
  313. package/src/node-singletons/events.js +6 -0
  314. package/src/node-singletons/fs.d.ts +12 -0
  315. package/src/node-singletons/fs.d.ts.map +1 -0
  316. package/src/node-singletons/fs.js +14 -0
  317. package/src/node-singletons/http.d.ts +8 -0
  318. package/src/node-singletons/http.d.ts.map +1 -0
  319. package/src/node-singletons/http.js +6 -0
  320. package/src/node-singletons/index.d.ts +30 -0
  321. package/src/node-singletons/index.d.ts.map +1 -0
  322. package/src/node-singletons/index.js +31 -0
  323. package/src/node-singletons/os.d.ts +9 -0
  324. package/src/node-singletons/os.d.ts.map +1 -0
  325. package/src/node-singletons/os.js +9 -0
  326. package/src/node-singletons/path.d.ts +7 -0
  327. package/src/node-singletons/path.d.ts.map +1 -0
  328. package/src/node-singletons/path.js +6 -0
  329. package/src/node-singletons/perf-hooks.d.ts +7 -0
  330. package/src/node-singletons/perf-hooks.d.ts.map +1 -0
  331. package/src/node-singletons/perf-hooks.js +6 -0
  332. package/src/node-singletons/readline.d.ts +10 -0
  333. package/src/node-singletons/readline.d.ts.map +1 -0
  334. package/src/node-singletons/readline.js +9 -0
  335. package/src/node-singletons/url.d.ts +7 -0
  336. package/src/node-singletons/url.d.ts.map +1 -0
  337. package/src/node-singletons/url.js +6 -0
  338. package/src/orm/ConnectionManager.d.ts +118 -0
  339. package/src/orm/ConnectionManager.d.ts.map +1 -0
  340. package/src/orm/ConnectionManager.js +401 -0
  341. package/src/orm/Database.d.ts +31 -0
  342. package/src/orm/Database.d.ts.map +1 -0
  343. package/src/orm/Database.js +163 -0
  344. package/src/orm/DatabaseAdapter.d.ts +96 -0
  345. package/src/orm/DatabaseAdapter.d.ts.map +1 -0
  346. package/src/orm/DatabaseAdapter.js +40 -0
  347. package/src/orm/Model.d.ts +91 -0
  348. package/src/orm/Model.d.ts.map +1 -0
  349. package/src/orm/Model.js +206 -0
  350. package/src/orm/QueryBuilder.d.ts +52 -0
  351. package/src/orm/QueryBuilder.d.ts.map +1 -0
  352. package/src/orm/QueryBuilder.js +134 -0
  353. package/src/orm/Relationships.d.ts +53 -0
  354. package/src/orm/Relationships.d.ts.map +1 -0
  355. package/src/orm/Relationships.js +98 -0
  356. package/src/orm/Schema.d.ts +123 -0
  357. package/src/orm/Schema.d.ts.map +1 -0
  358. package/src/orm/Schema.js +169 -0
  359. package/src/orm/adapters/D1Adapter.d.ts +15 -0
  360. package/src/orm/adapters/D1Adapter.d.ts.map +1 -0
  361. package/src/orm/adapters/D1Adapter.js +125 -0
  362. package/src/orm/adapters/MySQLAdapter.d.ts +16 -0
  363. package/src/orm/adapters/MySQLAdapter.d.ts.map +1 -0
  364. package/src/orm/adapters/MySQLAdapter.js +87 -0
  365. package/src/orm/adapters/PostgreSQLAdapter.d.ts +16 -0
  366. package/src/orm/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  367. package/src/orm/adapters/PostgreSQLAdapter.js +87 -0
  368. package/src/orm/adapters/SQLServerAdapter.d.ts +16 -0
  369. package/src/orm/adapters/SQLServerAdapter.d.ts.map +1 -0
  370. package/src/orm/adapters/SQLServerAdapter.js +81 -0
  371. package/src/orm/adapters/SQLiteAdapter.d.ts +11 -0
  372. package/src/orm/adapters/SQLiteAdapter.d.ts.map +1 -0
  373. package/src/orm/adapters/SQLiteAdapter.js +131 -0
  374. package/src/performance/Benchmark.d.ts +87 -0
  375. package/src/performance/Benchmark.d.ts.map +1 -0
  376. package/src/performance/Benchmark.js +304 -0
  377. package/src/performance/CodeGenerationBenchmark.d.ts +23 -0
  378. package/src/performance/CodeGenerationBenchmark.d.ts.map +1 -0
  379. package/src/performance/CodeGenerationBenchmark.js +249 -0
  380. package/src/performance/Optimizer.d.ts +99 -0
  381. package/src/performance/Optimizer.d.ts.map +1 -0
  382. package/src/performance/Optimizer.js +396 -0
  383. package/src/performance/establish-baseline.d.ts +9 -0
  384. package/src/performance/establish-baseline.d.ts.map +1 -0
  385. package/src/performance/establish-baseline.js +55 -0
  386. package/src/profiling/MemoryProfiler.d.ts +32 -0
  387. package/src/profiling/MemoryProfiler.d.ts.map +1 -0
  388. package/src/profiling/MemoryProfiler.js +84 -0
  389. package/src/profiling/N1Detector.d.ts +16 -0
  390. package/src/profiling/N1Detector.d.ts.map +1 -0
  391. package/src/profiling/N1Detector.js +120 -0
  392. package/src/profiling/QueryLogger.d.ts +107 -0
  393. package/src/profiling/QueryLogger.d.ts.map +1 -0
  394. package/src/profiling/QueryLogger.js +148 -0
  395. package/src/profiling/RequestProfiler.d.ts +30 -0
  396. package/src/profiling/RequestProfiler.d.ts.map +1 -0
  397. package/src/profiling/RequestProfiler.js +94 -0
  398. package/src/profiling/types.d.ts +77 -0
  399. package/src/profiling/types.d.ts.map +1 -0
  400. package/src/profiling/types.js +5 -0
  401. package/src/routing/Router.d.ts +52 -0
  402. package/src/routing/Router.d.ts.map +1 -0
  403. package/src/routing/Router.js +191 -0
  404. package/src/runtime/PluginManager.d.ts +30 -0
  405. package/src/runtime/PluginManager.d.ts.map +1 -0
  406. package/src/runtime/PluginManager.js +197 -0
  407. package/src/runtime/PluginRegistry.d.ts +22 -0
  408. package/src/runtime/PluginRegistry.d.ts.map +1 -0
  409. package/src/runtime/PluginRegistry.js +93 -0
  410. package/src/runtime/RuntimeAdapter.d.ts +126 -0
  411. package/src/runtime/RuntimeAdapter.d.ts.map +1 -0
  412. package/src/runtime/RuntimeAdapter.js +127 -0
  413. package/src/runtime/RuntimeDetector.d.ts +15 -0
  414. package/src/runtime/RuntimeDetector.d.ts.map +1 -0
  415. package/src/runtime/RuntimeDetector.js +219 -0
  416. package/src/runtime/adapters/CloudflareAdapter.d.ts +43 -0
  417. package/src/runtime/adapters/CloudflareAdapter.d.ts.map +1 -0
  418. package/src/runtime/adapters/CloudflareAdapter.js +175 -0
  419. package/src/runtime/adapters/DenoAdapter.d.ts +30 -0
  420. package/src/runtime/adapters/DenoAdapter.d.ts.map +1 -0
  421. package/src/runtime/adapters/DenoAdapter.js +191 -0
  422. package/src/runtime/adapters/FargateAdapter.d.ts +40 -0
  423. package/src/runtime/adapters/FargateAdapter.d.ts.map +1 -0
  424. package/src/runtime/adapters/FargateAdapter.js +156 -0
  425. package/src/runtime/adapters/LambdaAdapter.d.ts +13 -0
  426. package/src/runtime/adapters/LambdaAdapter.d.ts.map +1 -0
  427. package/src/runtime/adapters/LambdaAdapter.js +302 -0
  428. package/src/runtime/adapters/NodeServerAdapter.d.ts +16 -0
  429. package/src/runtime/adapters/NodeServerAdapter.d.ts.map +1 -0
  430. package/src/runtime/adapters/NodeServerAdapter.js +199 -0
  431. package/src/scripts/TemplateSync.d.ts +7 -0
  432. package/src/scripts/TemplateSync.d.ts.map +1 -0
  433. package/src/scripts/TemplateSync.js +234 -0
  434. package/src/security/CsrfTokenManager.d.ts +28 -0
  435. package/src/security/CsrfTokenManager.d.ts.map +1 -0
  436. package/src/security/CsrfTokenManager.js +78 -0
  437. package/src/security/Encryptor.d.ts +15 -0
  438. package/src/security/Encryptor.d.ts.map +1 -0
  439. package/src/security/Encryptor.js +142 -0
  440. package/src/security/JwtManager.d.ts +41 -0
  441. package/src/security/JwtManager.d.ts.map +1 -0
  442. package/src/security/JwtManager.js +229 -0
  443. package/src/security/UrlValidator.d.ts +21 -0
  444. package/src/security/UrlValidator.d.ts.map +1 -0
  445. package/src/security/UrlValidator.js +42 -0
  446. package/src/security/XssProtection.d.ts +24 -0
  447. package/src/security/XssProtection.d.ts.map +1 -0
  448. package/src/security/XssProtection.js +133 -0
  449. package/src/templates/TemplateRegistry.d.ts +40 -0
  450. package/src/templates/TemplateRegistry.d.ts.map +1 -0
  451. package/src/templates/TemplateRegistry.js +78 -0
  452. package/src/templates/TemplateRegistry.ts +91 -0
  453. package/src/templates/adapters/MySQLAdapter.ts.tpl +97 -0
  454. package/src/templates/adapters/PostgreSQLAdapter.ts.tpl +101 -0
  455. package/src/templates/adapters/SQLServerAdapter.ts.tpl +95 -0
  456. package/src/templates/adapters/SQLiteAdapter.ts.tpl +189 -0
  457. package/src/templates/features/Auth.ts.tpl +40 -0
  458. package/src/templates/features/Queue.ts.tpl +75 -0
  459. package/src/templates/project/basic/.env.example.tpl +26 -0
  460. package/src/templates/project/basic/.env.tpl +164 -0
  461. package/src/templates/project/basic/README.md.tpl +13 -0
  462. package/src/templates/project/basic/app/Controllers/UserController.ts.tpl +155 -0
  463. package/src/templates/project/basic/app/Middleware/ProfilerMiddleware.ts.tpl +55 -0
  464. package/src/templates/project/basic/app/Middleware/index.ts.tpl +304 -0
  465. package/src/templates/project/basic/app/Models/Post.ts.tpl +30 -0
  466. package/src/templates/project/basic/app/Models/User.ts.tpl +53 -0
  467. package/src/templates/project/basic/config/SecretsManager.ts.tpl +453 -0
  468. package/src/templates/project/basic/config/app.ts.tpl +97 -0
  469. package/src/templates/project/basic/config/cache.ts.tpl +117 -0
  470. package/src/templates/project/basic/config/constants.ts.tpl +70 -0
  471. package/src/templates/project/basic/config/database.ts.tpl +152 -0
  472. package/src/templates/project/basic/config/env.ts.tpl +148 -0
  473. package/src/templates/project/basic/config/features.ts.tpl +57 -0
  474. package/src/templates/project/basic/config/index.ts.tpl +36 -0
  475. package/src/templates/project/basic/config/logger.ts.tpl +95 -0
  476. package/src/templates/project/basic/config/microservices.ts.tpl +104 -0
  477. package/src/templates/project/basic/config/queue.ts.tpl +134 -0
  478. package/src/templates/project/basic/config/security.ts.tpl +149 -0
  479. package/src/templates/project/basic/config/storage.ts.tpl +136 -0
  480. package/src/templates/project/basic/database/factories/.gitkeep.tpl +0 -0
  481. package/src/templates/project/basic/database/migrations/.gitkeep.tpl +0 -0
  482. package/src/templates/project/basic/database/migrations/index.ts.tpl +2 -0
  483. package/src/templates/project/basic/database/seeders/.gitkeep.tpl +0 -0
  484. package/src/templates/project/basic/package.json.tpl +22 -0
  485. package/src/templates/project/basic/routes/api.ts.tpl +135 -0
  486. package/src/templates/project/basic/src/index.ts.tpl +49 -0
  487. package/src/templates/project/basic/template.json +17 -0
  488. package/src/templates/project/basic/tsconfig.json.tpl +20 -0
  489. package/src/validation/ValidationError.d.ts +42 -0
  490. package/src/validation/ValidationError.d.ts.map +1 -0
  491. package/src/validation/ValidationError.js +53 -0
  492. package/src/validation/Validator.d.ts +60 -0
  493. package/src/validation/Validator.d.ts.map +1 -0
  494. package/src/validation/Validator.js +190 -0
@@ -0,0 +1,234 @@
1
+ /**
2
+ * Template Sync Script
3
+ * Synchronizes base framework files to .tpl templates when checksums change
4
+ * Runs during npm run build
5
+ */
6
+ import { TemplateRegistry } from '../templates/TemplateRegistry.js';
7
+ import { Logger } from '../config/logger';
8
+ import { ErrorFactory } from '../exceptions/ZintrustError';
9
+ import * as crypto from '../node-singletons/crypto';
10
+ import fs from '../node-singletons/fs';
11
+ import { fileURLToPath } from '../node-singletons/url';
12
+ import * as path from 'node:path';
13
+ const __filename = fileURLToPath(import.meta.url);
14
+ const __dirname = path.dirname(__filename);
15
+ const ROOT_DIR = path.resolve(__dirname, '../../');
16
+ /**
17
+ * Calculate SHA1 hash of file content
18
+ */
19
+ function hashFile(filePath) {
20
+ try {
21
+ const content = fs.readFileSync(filePath, 'utf8');
22
+ return crypto.createHash('sha1').update(content).digest('hex'); // NOSONAR;
23
+ }
24
+ catch (error) {
25
+ Logger.error(`Error reading file ${filePath}`, error);
26
+ throw ErrorFactory.createTryCatchError(`Failed to read file: ${filePath}`, error);
27
+ }
28
+ }
29
+ /**
30
+ * Extract content between TEMPLATE_START and TEMPLATE_END markers
31
+ */
32
+ function extractTemplateContent(filePath) {
33
+ try {
34
+ const content = fs.readFileSync(filePath, 'utf8');
35
+ const startMarker = '// TEMPLATE_START';
36
+ const endMarker = '// TEMPLATE_END';
37
+ const startIdx = content.indexOf(startMarker);
38
+ const endIdx = content.indexOf(endMarker);
39
+ if (startIdx === -1 || endIdx === -1) {
40
+ Logger.warn(`Template markers not found in ${filePath}`);
41
+ return content;
42
+ }
43
+ // Extract from after START marker to before END marker (inclusive of END comment)
44
+ return content.substring(startIdx, endIdx + endMarker.length);
45
+ }
46
+ catch (error) {
47
+ Logger.error(`Error extracting template from ${filePath}`, error);
48
+ throw ErrorFactory.createTryCatchError(`Failed to extract template from: ${filePath}`, error);
49
+ }
50
+ }
51
+ /**
52
+ * Ensure directory exists, create if needed
53
+ */
54
+ function ensureDir(dirPath) {
55
+ if (!fs.existsSync(dirPath)) {
56
+ fs.mkdirSync(dirPath, { recursive: true });
57
+ }
58
+ }
59
+ const shouldSkipEntry = (name) => {
60
+ return (name === 'node_modules' ||
61
+ name === 'dist' ||
62
+ name === 'coverage' ||
63
+ name === '.git' ||
64
+ name === '.DS_Store');
65
+ };
66
+ const listFilesRecursive = (baseDirAbs) => {
67
+ const out = [];
68
+ const walk = (dirAbs) => {
69
+ const entries = fs.readdirSync(dirAbs, { withFileTypes: true });
70
+ for (const entry of entries) {
71
+ if (shouldSkipEntry(entry.name))
72
+ continue;
73
+ const abs = path.join(dirAbs, entry.name);
74
+ if (entry.isDirectory()) {
75
+ walk(abs);
76
+ continue;
77
+ }
78
+ if (!entry.isFile())
79
+ continue;
80
+ out.push({ absPath: abs, relPath: path.relative(baseDirAbs, abs) });
81
+ }
82
+ };
83
+ walk(baseDirAbs);
84
+ return out;
85
+ };
86
+ const syncProjectTemplateDir = (params) => {
87
+ const baseDirAbs = path.join(ROOT_DIR, params.baseDirRel);
88
+ const templateDirAbs = path.join(ROOT_DIR, params.templateDirRel);
89
+ if (!fs.existsSync(baseDirAbs)) {
90
+ Logger.warn(`⚠️ Base directory not found: ${params.baseDirRel}`);
91
+ return { updated: 0, skipped: 0, total: 0 };
92
+ }
93
+ const files = listFilesRecursive(baseDirAbs);
94
+ let updated = 0;
95
+ let skipped = 0;
96
+ for (const file of files) {
97
+ const baseKey = `${params.baseDirRel}/${file.relPath}`;
98
+ const currentHash = hashFile(file.absPath);
99
+ const storedHash = params.checksums[baseKey];
100
+ const outRel = `${file.relPath}.tpl`;
101
+ const outAbs = path.join(templateDirAbs, outRel);
102
+ if (currentHash === storedHash && fs.existsSync(outAbs)) {
103
+ skipped++;
104
+ continue;
105
+ }
106
+ const raw = fs.readFileSync(file.absPath, 'utf8');
107
+ const transformed = typeof params.transformContent === 'function'
108
+ ? params.transformContent(file.relPath, raw)
109
+ : raw;
110
+ ensureDir(path.dirname(outAbs));
111
+ fs.writeFileSync(outAbs, transformed, 'utf8');
112
+ params.checksums[baseKey] = currentHash;
113
+ updated++;
114
+ }
115
+ if (files.length > 0) {
116
+ Logger.info(`✓ ${params.description} (updated: ${updated}, skipped: ${skipped}, total: ${files.length})`);
117
+ }
118
+ return { updated, skipped, total: files.length };
119
+ };
120
+ /**
121
+ * Load existing checksums from JSON file
122
+ */
123
+ function loadChecksums() {
124
+ const checksumPath = path.join(ROOT_DIR, '.template-checksums.json');
125
+ if (fs.existsSync(checksumPath)) {
126
+ try {
127
+ const content = fs.readFileSync(checksumPath, 'utf8');
128
+ return JSON.parse(content);
129
+ }
130
+ catch (error) {
131
+ Logger.error('Could not parse .template-checksums.json, starting fresh', error);
132
+ return {};
133
+ }
134
+ }
135
+ return {};
136
+ }
137
+ /**
138
+ * Save checksums to JSON file
139
+ */
140
+ function saveChecksums(checksums) {
141
+ const checksumPath = path.join(ROOT_DIR, '.template-checksums.json');
142
+ fs.writeFileSync(checksumPath, JSON.stringify(checksums, null, 2));
143
+ }
144
+ /**
145
+ * Main sync function
146
+ */
147
+ // eslint-disable-next-line @typescript-eslint/require-await
148
+ async function syncTemplates() {
149
+ Logger.info('🔄 Syncing templates...\n');
150
+ const checksums = loadChecksums();
151
+ const mappings = TemplateRegistry.getMappings();
152
+ let updated = 0;
153
+ let skipped = 0;
154
+ for (const mapping of mappings) {
155
+ const basePath = path.join(ROOT_DIR, mapping.basePath);
156
+ const templatePath = path.join(ROOT_DIR, mapping.templatePath);
157
+ // Check if base file exists
158
+ if (!fs.existsSync(basePath)) {
159
+ Logger.warn(`⚠️ Base file not found: ${mapping.basePath}`);
160
+ continue;
161
+ }
162
+ // Calculate current hash
163
+ const currentHash = hashFile(basePath);
164
+ const storedHash = checksums[mapping.basePath];
165
+ // Check if update is needed
166
+ if (currentHash === storedHash && fs.existsSync(templatePath)) {
167
+ Logger.info(`✓ ${mapping.description} (in sync)`);
168
+ skipped++;
169
+ continue;
170
+ }
171
+ // Extract and write template
172
+ try {
173
+ const templateContent = extractTemplateContent(basePath);
174
+ ensureDir(path.dirname(templatePath));
175
+ fs.writeFileSync(templatePath, templateContent, 'utf8');
176
+ // Update checksum
177
+ checksums[mapping.basePath] = currentHash;
178
+ Logger.info(`✓ Updated: ${mapping.description}`);
179
+ updated++;
180
+ }
181
+ catch (error) {
182
+ Logger.error(`❌ Failed to sync ${mapping.basePath}:`, error);
183
+ process.exit(1);
184
+ }
185
+ }
186
+ // Sync starter project templates (basic) from base framework folders.
187
+ // Spec: app/* -> app/*, src/config/* -> config/*, src/database/* -> database/*, routes/* -> routes/*
188
+ // plus .env (generated from .env.example with sensitive values blanked).
189
+ Logger.info('');
190
+ Logger.info('🔄 Syncing starter project templates (basic)...');
191
+ const projectRoot = 'src/templates/project/basic';
192
+ const s1 = syncProjectTemplateDir({
193
+ checksums,
194
+ baseDirRel: 'app',
195
+ templateDirRel: `${projectRoot}/app`,
196
+ description: 'Starter project app/*',
197
+ });
198
+ const s2 = syncProjectTemplateDir({
199
+ checksums,
200
+ baseDirRel: 'src/config',
201
+ templateDirRel: `${projectRoot}/config`,
202
+ description: 'Starter project config/* (from src/config/*)',
203
+ });
204
+ const s3 = syncProjectTemplateDir({
205
+ checksums,
206
+ baseDirRel: 'src/database',
207
+ templateDirRel: `${projectRoot}/database`,
208
+ description: 'Starter project database/* (from src/database/*)',
209
+ });
210
+ const s4 = syncProjectTemplateDir({
211
+ checksums,
212
+ baseDirRel: 'routes',
213
+ templateDirRel: `${projectRoot}/routes`,
214
+ description: 'Starter project routes/*',
215
+ });
216
+ const s5 = { updated: 0, skipped: 0 };
217
+ updated += s1.updated + s2.updated + s3.updated + s4.updated + s5.updated;
218
+ skipped += s1.skipped + s2.skipped + s3.skipped + s4.skipped + s5.skipped;
219
+ // Save updated checksums
220
+ saveChecksums(checksums);
221
+ // Summary
222
+ Logger.info(`\n📦 Template sync complete`);
223
+ Logger.info(` Updated: ${updated}`);
224
+ Logger.info(` Skipped: ${skipped}`);
225
+ Logger.info(` Total: ${mappings.length + s1.total + s2.total + s3.total + s4.total}\n`);
226
+ }
227
+ // Run sync
228
+ try {
229
+ await syncTemplates();
230
+ }
231
+ catch (error) {
232
+ Logger.error('Template sync failed', error);
233
+ process.exit(1);
234
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * CSRF Token Manager
3
+ * Generate, validate, and bind CSRF tokens to sessions
4
+ */
5
+ export interface CsrfTokenData {
6
+ token: string;
7
+ sessionId: string;
8
+ createdAt: Date;
9
+ expiresAt: Date;
10
+ }
11
+ export interface ICsrfTokenManager {
12
+ generateToken(sessionId: string): string;
13
+ validateToken(sessionId: string, token: string): boolean;
14
+ invalidateToken(sessionId: string): void;
15
+ getTokenData(sessionId: string): CsrfTokenData | null;
16
+ refreshToken(sessionId: string): string | null;
17
+ cleanup(): number;
18
+ clear(): void;
19
+ getTokenCount(): number;
20
+ }
21
+ export interface CsrfTokenManagerType {
22
+ create(): ICsrfTokenManager;
23
+ }
24
+ /**
25
+ * CsrfTokenManager namespace - sealed for immutability
26
+ */
27
+ export declare const CsrfTokenManager: CsrfTokenManagerType;
28
+ //# sourceMappingURL=CsrfTokenManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CsrfTokenManager.d.ts","sourceRoot":"","sources":["../../../src/security/CsrfTokenManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IACzC,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACzD,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAAC;IACtD,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC/C,OAAO,IAAI,MAAM,CAAC;IAClB,KAAK,IAAI,IAAI,CAAC;IACd,aAAa,IAAI,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,IAAI,iBAAiB,CAAC;CAC7B;AAoED;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,oBAE7B,CAAC"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * CSRF Token Manager
3
+ * Generate, validate, and bind CSRF tokens to sessions
4
+ */
5
+ import { Env } from '../config/env';
6
+ import { randomBytes } from 'node:crypto';
7
+ /**
8
+ * Create a new CSRF token manager instance
9
+ */
10
+ const create = () => {
11
+ const tokens = new Map();
12
+ const tokenLength = Env.TOKEN_LENGTH; // 256 bits
13
+ const tokenTtl = Env.TOKEN_TTL; // 1 hour in milliseconds
14
+ return {
15
+ generateToken(sessionId) {
16
+ tokens.delete(sessionId);
17
+ const token = randomBytes(tokenLength).toString('hex');
18
+ const now = new Date();
19
+ const expiresAt = new Date(now.getTime() + tokenTtl);
20
+ const tokenData = { token, sessionId, createdAt: now, expiresAt };
21
+ tokens.set(sessionId, tokenData);
22
+ return token;
23
+ },
24
+ validateToken(sessionId, token) {
25
+ const tokenData = tokens.get(sessionId);
26
+ if (!tokenData)
27
+ return false;
28
+ const isValid = tokenData.token === token;
29
+ const isExpired = new Date() > tokenData.expiresAt;
30
+ if (isExpired) {
31
+ tokens.delete(sessionId);
32
+ return false;
33
+ }
34
+ return isValid;
35
+ },
36
+ invalidateToken(sessionId) {
37
+ tokens.delete(sessionId);
38
+ },
39
+ getTokenData(sessionId) {
40
+ return tokens.get(sessionId) ?? null;
41
+ },
42
+ refreshToken(sessionId) {
43
+ const tokenData = tokens.get(sessionId);
44
+ if (!tokenData)
45
+ return null;
46
+ const isExpired = new Date() > tokenData.expiresAt;
47
+ if (isExpired) {
48
+ tokens.delete(sessionId);
49
+ return null;
50
+ }
51
+ tokenData.expiresAt = new Date(Date.now() + tokenTtl);
52
+ return tokenData.token;
53
+ },
54
+ cleanup() {
55
+ let removed = 0;
56
+ const now = new Date();
57
+ for (const [sessionId, tokenData] of tokens.entries()) {
58
+ if (now > tokenData.expiresAt) {
59
+ tokens.delete(sessionId);
60
+ removed++;
61
+ }
62
+ }
63
+ return removed;
64
+ },
65
+ clear() {
66
+ tokens.clear();
67
+ },
68
+ getTokenCount() {
69
+ return tokens.size;
70
+ },
71
+ };
72
+ };
73
+ /**
74
+ * CsrfTokenManager namespace - sealed for immutability
75
+ */
76
+ export const CsrfTokenManager = Object.freeze({
77
+ create,
78
+ });
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Encryptor
3
+ * Password hashing with dual support: PBKDF2 (default) and optional bcrypt
4
+ */
5
+ /**
6
+ * Hash algorithm selector
7
+ */
8
+ export type HashAlgorithm = 'pbkdf2' | 'bcrypt';
9
+ export interface IEncryptor {
10
+ hash(password: string): Promise<string>;
11
+ verify(password: string, hash: string): Promise<boolean>;
12
+ getAlgorithm(): HashAlgorithm;
13
+ }
14
+ export declare const Encryptor: IEncryptor;
15
+ //# sourceMappingURL=Encryptor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Encryptor.d.ts","sourceRoot":"","sources":["../../../src/security/Encryptor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,CAAC;AA2HhD,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzD,YAAY,IAAI,aAAa,CAAC;CAC/B;AAuCD,eAAO,MAAM,SAAS,EAAE,UAItB,CAAC"}
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Encryptor
3
+ * Password hashing with dual support: PBKDF2 (default) and optional bcrypt
4
+ */
5
+ import { Logger } from '../config/logger';
6
+ import { ErrorFactory } from '../exceptions/ZintrustError';
7
+ import { pbkdf2Sync, randomBytes } from 'node:crypto';
8
+ function isBcryptModule(value) {
9
+ if (typeof value !== 'object' || value === null)
10
+ return false;
11
+ const record = value;
12
+ return typeof record['hash'] === 'function' && typeof record['compare'] === 'function';
13
+ }
14
+ let algorithm = 'pbkdf2';
15
+ let bcrypt;
16
+ let loadingPromise;
17
+ async function loadBcrypt() {
18
+ try {
19
+ const imported = await import('bcrypt');
20
+ const module = imported;
21
+ const candidate = module.default ?? module;
22
+ if (!isBcryptModule(candidate)) {
23
+ throw ErrorFactory.createConfigError('Invalid bcrypt module shape');
24
+ }
25
+ bcrypt = candidate;
26
+ algorithm = 'bcrypt';
27
+ }
28
+ catch (error) {
29
+ Logger.error('bcrypt not installed, falling back to PBKDF2', error);
30
+ ErrorFactory.createSecurityError('bcrypt not installed, falling back to PBKDF2', error);
31
+ // bcrypt not installed, will use PBKDF2
32
+ algorithm = 'pbkdf2';
33
+ }
34
+ }
35
+ async function ensureLoaded() {
36
+ if (bcrypt !== undefined)
37
+ return;
38
+ if (loadingPromise !== undefined)
39
+ return loadingPromise;
40
+ loadingPromise = loadBcrypt();
41
+ return loadingPromise;
42
+ }
43
+ /**
44
+ * Timing-safe string comparison
45
+ */
46
+ function timingSafeEquals(a, b) {
47
+ if (a.length !== b.length) {
48
+ return false;
49
+ }
50
+ let result = 0;
51
+ for (let i = 0; i < a.length; i++) {
52
+ result |= (a.codePointAt(i) ?? 0) ^ (b.codePointAt(i) ?? 0);
53
+ }
54
+ return result === 0;
55
+ }
56
+ /**
57
+ * Hash with PBKDF2 (default)
58
+ */
59
+ function hashPbkdf2(password) {
60
+ const iterations = 600000; // OWASP recommended for SHA-256
61
+ const salt = randomBytes(32).toString('hex');
62
+ const keyLength = 64;
63
+ const digest = 'sha256';
64
+ const hash = pbkdf2Sync(password, salt, iterations, keyLength, digest).toString('hex');
65
+ // Format: algorithm$iterations$salt$hash
66
+ return `pbkdf2$${iterations}$${salt}$${hash}`;
67
+ }
68
+ /**
69
+ * Verify PBKDF2 hash
70
+ */
71
+ function verifyPbkdf2(password, passwordHash) {
72
+ const parts = passwordHash.split('$');
73
+ const iterationsStr = parts[1];
74
+ const salt = parts[2];
75
+ const storedHash = parts[3];
76
+ if (iterationsStr === undefined || salt === undefined || storedHash === undefined) {
77
+ return false;
78
+ }
79
+ try {
80
+ const iterations = Number.parseInt(iterationsStr, 10);
81
+ const keyLength = 64;
82
+ const digest = 'sha256';
83
+ const computed = pbkdf2Sync(password, salt, iterations, keyLength, digest).toString('hex');
84
+ return timingSafeEquals(computed, storedHash);
85
+ }
86
+ catch (error) {
87
+ Logger.error('PBKDF2 verification failed', error);
88
+ ErrorFactory.createSecurityError('PBKDF2 verification failed', error);
89
+ return false;
90
+ }
91
+ }
92
+ /**
93
+ * Hash with bcrypt
94
+ */
95
+ async function hashBcrypt(bcryptModule, password) {
96
+ const rounds = 12;
97
+ return bcryptModule.hash(password, rounds);
98
+ }
99
+ /**
100
+ * Verify bcrypt hash
101
+ */
102
+ async function verifyBcrypt(bcryptModule, password, passwordHash) {
103
+ return bcryptModule.compare(password, passwordHash);
104
+ }
105
+ /**
106
+ * Encryptor handles password hashing and verification
107
+ * Refactored to Functional Object pattern
108
+ */
109
+ const hash = async (password) => {
110
+ await ensureLoaded();
111
+ if (algorithm === 'bcrypt' && bcrypt !== undefined) {
112
+ return hashBcrypt(bcrypt, password);
113
+ }
114
+ return hashPbkdf2(password);
115
+ };
116
+ /**
117
+ * Verify password against hash
118
+ */
119
+ const verify = async (password, passwordHash) => {
120
+ await ensureLoaded();
121
+ // Detect hash format
122
+ if (passwordHash.startsWith('$2')) {
123
+ // bcrypt hash format
124
+ if (bcrypt !== undefined) {
125
+ return verifyBcrypt(bcrypt, password, passwordHash);
126
+ }
127
+ throw ErrorFactory.createConfigError('bcrypt not available to verify hash');
128
+ }
129
+ // PBKDF2 hash format (algorithm$iterations$salt$hash)
130
+ return verifyPbkdf2(password, passwordHash);
131
+ };
132
+ /**
133
+ * Get current algorithm
134
+ */
135
+ const getAlgorithm = () => {
136
+ return algorithm;
137
+ };
138
+ export const Encryptor = Object.freeze({
139
+ hash,
140
+ verify,
141
+ getAlgorithm,
142
+ });
@@ -0,0 +1,41 @@
1
+ /**
2
+ * JWT Manager
3
+ * JSON Web Token generation, verification, and claims management
4
+ * Uses native Node.js crypto module (zero external dependencies)
5
+ */
6
+ export type JwtAlgorithm = 'HS256' | 'HS512' | 'RS256';
7
+ export interface JwtPayload {
8
+ sub?: string;
9
+ iss?: string;
10
+ aud?: string;
11
+ exp?: number;
12
+ iat?: number;
13
+ nbf?: number;
14
+ jti?: string;
15
+ [key: string]: unknown;
16
+ }
17
+ export interface JwtOptions {
18
+ algorithm?: JwtAlgorithm;
19
+ expiresIn?: number;
20
+ issuer?: string;
21
+ audience?: string;
22
+ subject?: string;
23
+ jwtId?: string;
24
+ }
25
+ export interface IJwtManager {
26
+ setHmacSecret(secret: string): void;
27
+ setRsaKeys(privateKey: string, publicKey: string): void;
28
+ sign(payload: JwtPayload, options?: JwtOptions): string;
29
+ verify(token: string, algorithm?: JwtAlgorithm): JwtPayload;
30
+ decode(token: string): JwtPayload;
31
+ signRsa(message: string): string;
32
+ generateJwtId(): string;
33
+ }
34
+ export interface JwtManagerType {
35
+ create(): IJwtManager;
36
+ }
37
+ /**
38
+ * JwtManager namespace - sealed for immutability
39
+ */
40
+ export declare const JwtManager: JwtManagerType;
41
+ //# sourceMappingURL=JwtManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JwtManager.d.ts","sourceRoot":"","sources":["../../../src/security/JwtManager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAEvD,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACxD,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;IACxD,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IAC5D,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAAC;IAClC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC,aAAa,IAAI,MAAM,CAAC;CACzB;AAQD,MAAM,WAAW,cAAc;IAC7B,MAAM,IAAI,WAAW,CAAC;CACvB;AAsCD;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,cAEvB,CAAC"}