arkos 2.0.0-next.2 → 2.0.0-next.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 (613) hide show
  1. package/README.md +146 -145
  2. package/cli.js +11 -13
  3. package/dist/esm/app.js +17 -16
  4. package/dist/esm/app.js.map +1 -1
  5. package/dist/esm/components/arkos-gateway/arkos-gateway.js +338 -0
  6. package/dist/esm/components/arkos-gateway/arkos-gateway.js.map +1 -0
  7. package/dist/esm/components/arkos-gateway/socket-extensions.js +168 -0
  8. package/dist/esm/components/arkos-gateway/socket-extensions.js.map +1 -0
  9. package/dist/esm/components/arkos-gateway/types.js +3 -0
  10. package/dist/esm/components/arkos-gateway/types.js.map +1 -0
  11. package/dist/esm/components/arkos-gateway/utils/helpers.js +105 -0
  12. package/dist/esm/components/arkos-gateway/utils/helpers.js.map +1 -0
  13. package/dist/esm/components/arkos-gateway/utils/memory-gateway-store.js +45 -0
  14. package/dist/esm/components/arkos-gateway/utils/memory-gateway-store.js.map +1 -0
  15. package/dist/esm/components/arkos-gateway/utils/multi-tier-arkos-gateway-store.js +40 -0
  16. package/dist/esm/components/arkos-gateway/utils/multi-tier-arkos-gateway-store.js.map +1 -0
  17. package/dist/esm/components/arkos-gateway/utils/rate-limiter.js +13 -0
  18. package/dist/esm/components/arkos-gateway/utils/rate-limiter.js.map +1 -0
  19. package/dist/esm/components/arkos-loadable-registry/index.js +1 -3
  20. package/dist/esm/components/arkos-loadable-registry/index.js.map +1 -1
  21. package/dist/esm/components/arkos-policy/index.js +3 -1
  22. package/dist/esm/components/arkos-policy/index.js.map +1 -1
  23. package/dist/esm/components/arkos-route-hook/index.js +2 -1
  24. package/dist/esm/components/arkos-route-hook/index.js.map +1 -1
  25. package/dist/esm/components/arkos-route-hook/reader.js.map +1 -1
  26. package/dist/esm/components/arkos-route-hook/types.js.map +1 -1
  27. package/dist/esm/exports/error-handler/index.js +1 -0
  28. package/dist/esm/exports/error-handler/index.js.map +1 -1
  29. package/dist/esm/exports/index.js +3 -3
  30. package/dist/esm/exports/index.js.map +1 -1
  31. package/dist/esm/exports/middlewares/index.js +1 -1
  32. package/dist/esm/exports/middlewares/index.js.map +1 -1
  33. package/dist/esm/exports/services/index.js +2 -2
  34. package/dist/esm/exports/services/index.js.map +1 -1
  35. package/dist/esm/exports/websockets.js +5 -0
  36. package/dist/esm/exports/websockets.js.map +1 -0
  37. package/dist/esm/generated.js.map +1 -1
  38. package/dist/esm/modules/auth/auth.controller.js +214 -222
  39. package/dist/esm/modules/auth/auth.controller.js.map +1 -1
  40. package/dist/esm/modules/auth/auth.router.js +26 -9
  41. package/dist/esm/modules/auth/auth.router.js.map +1 -1
  42. package/dist/esm/modules/auth/auth.service.js +90 -102
  43. package/dist/esm/modules/auth/auth.service.js.map +1 -1
  44. package/dist/esm/modules/auth/utils/auth-error-objects.js +2 -2
  45. package/dist/esm/modules/auth/utils/auth-error-objects.js.map +1 -1
  46. package/dist/esm/modules/auth/utils/auth-hooks-manager.js +148 -0
  47. package/dist/esm/modules/auth/utils/auth-hooks-manager.js.map +1 -0
  48. package/dist/esm/modules/auth/utils/auth-openapi-generator.js +367 -0
  49. package/dist/esm/modules/auth/utils/auth-openapi-generator.js.map +1 -0
  50. package/dist/esm/modules/auth/utils/auth-prisma-json-schema-generator.js +97 -0
  51. package/dist/esm/modules/auth/utils/auth-prisma-json-schema-generator.js.map +1 -0
  52. package/dist/esm/modules/auth/utils/docs-links.js +6 -0
  53. package/dist/esm/modules/auth/utils/docs-links.js.map +1 -0
  54. package/dist/esm/modules/auth/utils/services/auth-action.service.js +20 -16
  55. package/dist/esm/modules/auth/utils/services/auth-action.service.js.map +1 -1
  56. package/dist/esm/modules/base/base.controller.js +182 -162
  57. package/dist/esm/modules/base/base.controller.js.map +1 -1
  58. package/dist/esm/modules/base/base.middlewares.js +31 -48
  59. package/dist/esm/modules/base/base.middlewares.js.map +1 -1
  60. package/dist/esm/modules/base/base.router.js +23 -9
  61. package/dist/esm/modules/base/base.router.js.map +1 -1
  62. package/dist/esm/modules/base/base.service.js +33 -138
  63. package/dist/esm/modules/base/base.service.js.map +1 -1
  64. package/dist/esm/modules/base/types/base.service.types.js.map +1 -1
  65. package/dist/esm/modules/base/utils/error-prettifier.js +26 -30
  66. package/dist/esm/modules/base/utils/error-prettifier.js.map +1 -1
  67. package/dist/esm/modules/base/utils/helpers/base.service.helpers.js +26 -5
  68. package/dist/esm/modules/base/utils/helpers/base.service.helpers.js.map +1 -1
  69. package/dist/esm/modules/base/utils/model-openapi-generator.js +438 -0
  70. package/dist/esm/modules/base/utils/model-openapi-generator.js.map +1 -0
  71. package/dist/esm/modules/email/email.service.js +17 -10
  72. package/dist/esm/modules/email/email.service.js.map +1 -1
  73. package/dist/esm/modules/error-handler/error-handler.controller.js +24 -113
  74. package/dist/esm/modules/error-handler/error-handler.controller.js.map +1 -1
  75. package/dist/esm/modules/error-handler/utils/app-error.js +5 -2
  76. package/dist/esm/modules/error-handler/utils/app-error.js.map +1 -1
  77. package/dist/esm/modules/error-handler/utils/catch-async.js.map +1 -1
  78. package/dist/esm/modules/error-handler/utils/error-handler.helpers.js +9 -103
  79. package/dist/esm/modules/error-handler/utils/error-handler.helpers.js.map +1 -1
  80. package/dist/esm/modules/error-handler/utils/errors.js +127 -0
  81. package/dist/esm/modules/error-handler/utils/errors.js.map +1 -0
  82. package/dist/esm/modules/error-handler/utils/get-handled-error.js +68 -0
  83. package/dist/esm/modules/error-handler/utils/get-handled-error.js.map +1 -0
  84. package/dist/esm/modules/error-handler/utils/multer-error-handler.js +34 -0
  85. package/dist/esm/modules/error-handler/utils/multer-error-handler.js.map +1 -0
  86. package/dist/esm/modules/file-upload/file-upload.controller.js +208 -214
  87. package/dist/esm/modules/file-upload/file-upload.controller.js.map +1 -1
  88. package/dist/esm/modules/file-upload/file-upload.router.js +35 -12
  89. package/dist/esm/modules/file-upload/file-upload.router.js.map +1 -1
  90. package/dist/esm/modules/file-upload/file-upload.service.js +13 -8
  91. package/dist/esm/modules/file-upload/file-upload.service.js.map +1 -1
  92. package/dist/esm/modules/file-upload/utils/file-upload-json-schema-generator.js +346 -0
  93. package/dist/esm/modules/file-upload/utils/file-upload-json-schema-generator.js.map +1 -0
  94. package/dist/esm/modules/swagger/swagger.router.js +39 -22
  95. package/dist/esm/modules/swagger/swagger.router.js.map +1 -1
  96. package/dist/esm/modules/swagger/utils/get-open-api-login-html.js +305 -0
  97. package/dist/esm/modules/swagger/utils/get-open-api-login-html.js.map +1 -0
  98. package/dist/esm/modules/swagger/utils/helpers/class-validator-to-json-schema.js.map +1 -1
  99. package/dist/esm/modules/swagger/utils/helpers/get-swagger-default-configs.js +6 -7
  100. package/dist/esm/modules/swagger/utils/helpers/get-swagger-default-configs.js.map +1 -1
  101. package/dist/esm/modules/swagger/utils/helpers/openapi-schema-converter.js +6 -3
  102. package/dist/esm/modules/swagger/utils/helpers/openapi-schema-converter.js.map +1 -1
  103. package/dist/esm/server.js +1 -1
  104. package/dist/esm/server.js.map +1 -1
  105. package/dist/esm/types/arkos-config/utils.js +2 -0
  106. package/dist/esm/types/arkos-config/utils.js.map +1 -0
  107. package/dist/esm/types/arkos-prisma-input.js.map +1 -1
  108. package/dist/esm/types/arkos.js.map +1 -1
  109. package/dist/esm/types/auth.js.map +1 -1
  110. package/dist/esm/types/index.js.map +1 -1
  111. package/dist/esm/types/new-arkos-config.js.map +1 -1
  112. package/dist/esm/types/router-config.js.map +1 -1
  113. package/dist/esm/types/upload.js +2 -0
  114. package/dist/esm/types/upload.js.map +1 -0
  115. package/dist/esm/types/validation/validation-manager.js +49 -0
  116. package/dist/esm/types/validation/validation-manager.js.map +1 -0
  117. package/dist/esm/types/validation/validator.js +2 -0
  118. package/dist/esm/types/validation/validator.js.map +1 -0
  119. package/dist/esm/utils/arkos-router/arkos-router-openapi-manager.js +68 -34
  120. package/dist/esm/utils/arkos-router/arkos-router-openapi-manager.js.map +1 -1
  121. package/dist/esm/utils/arkos-router/index.js +37 -130
  122. package/dist/esm/utils/arkos-router/index.js.map +1 -1
  123. package/dist/esm/utils/arkos-router/route-config-registry.js +2 -3
  124. package/dist/esm/utils/arkos-router/route-config-registry.js.map +1 -1
  125. package/dist/esm/utils/arkos-router/types/index.js.map +1 -1
  126. package/dist/esm/utils/arkos-router/types/openapi-config.js.map +1 -1
  127. package/dist/esm/utils/arkos-router/types/upload-config.js.map +1 -1
  128. package/dist/esm/utils/arkos-router/utils/helpers/apply-arkos-router-proxy.js +188 -0
  129. package/dist/esm/utils/arkos-router/utils/helpers/apply-arkos-router-proxy.js.map +1 -0
  130. package/dist/esm/utils/arkos-router/utils/helpers/index.js +88 -29
  131. package/dist/esm/utils/arkos-router/utils/helpers/index.js.map +1 -1
  132. package/dist/esm/utils/arkos-router/utils/helpers/upload-manager.js +364 -89
  133. package/dist/esm/utils/arkos-router/utils/helpers/upload-manager.js.map +1 -1
  134. package/dist/esm/utils/bundler.js +6 -6
  135. package/dist/esm/utils/bundler.js.map +1 -1
  136. package/dist/esm/utils/cli/build.js +16 -7
  137. package/dist/esm/utils/cli/build.js.map +1 -1
  138. package/dist/esm/utils/cli/dev.js +18 -28
  139. package/dist/esm/utils/cli/dev.js.map +1 -1
  140. package/dist/esm/utils/cli/export-auth-action.js +5 -4
  141. package/dist/esm/utils/cli/export-auth-action.js.map +1 -1
  142. package/dist/esm/utils/cli/generate.js +70 -56
  143. package/dist/esm/utils/cli/generate.js.map +1 -1
  144. package/dist/esm/utils/cli/index.js +54 -50
  145. package/dist/esm/utils/cli/index.js.map +1 -1
  146. package/dist/esm/utils/cli/prisma-generate.js +8 -37
  147. package/dist/esm/utils/cli/prisma-generate.js.map +1 -1
  148. package/dist/esm/utils/cli/start.js +25 -14
  149. package/dist/esm/utils/cli/start.js.map +1 -1
  150. package/dist/esm/utils/cli/utils/cli.helpers.js +1 -1
  151. package/dist/esm/utils/cli/utils/runtime-cli-commander.js +7 -4
  152. package/dist/esm/utils/cli/utils/runtime-cli-commander.js.map +1 -1
  153. package/dist/esm/utils/cli/utils/smart-fs-watcher.js +3 -0
  154. package/dist/esm/utils/cli/utils/smart-fs-watcher.js.map +1 -1
  155. package/dist/esm/utils/cli/utils/template-generator/templates/class-validator-dto-generator.js +307 -11
  156. package/dist/esm/utils/cli/utils/template-generator/templates/class-validator-dto-generator.js.map +1 -1
  157. package/dist/esm/utils/cli/utils/template-generator/templates/generate-controller-template.js +16 -7
  158. package/dist/esm/utils/cli/utils/template-generator/templates/generate-controller-template.js.map +1 -1
  159. package/dist/esm/utils/cli/utils/template-generator/templates/generate-multiple-components.js +117 -65
  160. package/dist/esm/utils/cli/utils/template-generator/templates/generate-multiple-components.js.map +1 -1
  161. package/dist/esm/utils/cli/utils/template-generator/templates/policy-template.js +6 -8
  162. package/dist/esm/utils/cli/utils/template-generator/templates/policy-template.js.map +1 -1
  163. package/dist/esm/utils/cli/utils/template-generator/templates/router-template.js +13 -2
  164. package/dist/esm/utils/cli/utils/template-generator/templates/router-template.js.map +1 -1
  165. package/dist/esm/utils/cli/utils/template-generator/templates/service-template.js +2 -2
  166. package/dist/esm/utils/cli/utils/template-generator/templates/service-template.js.map +1 -1
  167. package/dist/esm/utils/cli/utils/template-generator/templates/zod-schema-generator.js +213 -19
  168. package/dist/esm/utils/cli/utils/template-generator/templates/zod-schema-generator.js.map +1 -1
  169. package/dist/esm/utils/cli/utils/template-generators.js +31 -18
  170. package/dist/esm/utils/cli/utils/template-generators.js.map +1 -1
  171. package/dist/esm/utils/define-config.js +14 -0
  172. package/dist/esm/utils/define-config.js.map +1 -1
  173. package/dist/esm/utils/docs-links.js +2 -0
  174. package/dist/esm/utils/docs-links.js.map +1 -0
  175. package/dist/esm/utils/dotenv.helpers.js +0 -6
  176. package/dist/esm/utils/dotenv.helpers.js.map +1 -1
  177. package/dist/esm/utils/dynamic-loader.js +2 -1
  178. package/dist/esm/utils/dynamic-loader.js.map +1 -1
  179. package/dist/esm/utils/features/api.features.js +46 -27
  180. package/dist/esm/utils/features/api.features.js.map +1 -1
  181. package/dist/esm/utils/features/port-and-host-allocator.js +4 -3
  182. package/dist/esm/utils/features/port-and-host-allocator.js.map +1 -1
  183. package/dist/esm/utils/helpers/api.features.helpers.js +20 -0
  184. package/dist/esm/utils/helpers/api.features.helpers.js.map +1 -1
  185. package/dist/esm/utils/helpers/arkos-config.helpers.js +20 -2
  186. package/dist/esm/utils/helpers/arkos-config.helpers.js.map +1 -1
  187. package/dist/esm/utils/helpers/exit-error.js +1 -0
  188. package/dist/esm/utils/helpers/exit-error.js.map +1 -1
  189. package/dist/esm/utils/helpers/fs.helpers.js +26 -33
  190. package/dist/esm/utils/helpers/fs.helpers.js.map +1 -1
  191. package/dist/esm/utils/helpers/global.helpers.js +1 -1
  192. package/dist/esm/utils/helpers/global.helpers.js.map +1 -1
  193. package/dist/esm/utils/helpers/prisma.helpers.js +10 -7
  194. package/dist/esm/utils/helpers/prisma.helpers.js.map +1 -1
  195. package/dist/esm/utils/helpers/query-parser.helpers.js +7 -22
  196. package/dist/esm/utils/helpers/query-parser.helpers.js.map +1 -1
  197. package/dist/esm/utils/helpers/routers.helpers.js +2 -2
  198. package/dist/esm/utils/helpers/routers.helpers.js.map +1 -1
  199. package/dist/esm/utils/helpers/url-helpers.js +11 -0
  200. package/dist/esm/utils/helpers/url-helpers.js.map +1 -0
  201. package/dist/esm/utils/initialize-app.js +41 -17
  202. package/dist/esm/utils/initialize-app.js.map +1 -1
  203. package/dist/esm/utils/prisma/prisma-json-schema-generator.js +154 -226
  204. package/dist/esm/utils/prisma/prisma-json-schema-generator.js.map +1 -1
  205. package/dist/esm/utils/prisma/prisma-schema-parser.js +37 -11
  206. package/dist/esm/utils/prisma/prisma-schema-parser.js.map +1 -1
  207. package/dist/esm/utils/prisma/types.js.map +1 -1
  208. package/dist/esm/utils/remove-dir.js +1 -1
  209. package/dist/esm/utils/remove-dir.js.map +1 -1
  210. package/dist/esm/utils/setup-app.js +59 -42
  211. package/dist/esm/utils/setup-app.js.map +1 -1
  212. package/dist/esm/utils/validate-schema.js +23 -21
  213. package/dist/esm/utils/validate-schema.js.map +1 -1
  214. package/dist/types/app.d.ts +10 -7
  215. package/dist/types/components/arkos-gateway/arkos-gateway.d.ts +121 -0
  216. package/dist/types/components/arkos-gateway/socket-extensions.d.ts +79 -0
  217. package/dist/types/components/arkos-gateway/types.d.ts +364 -0
  218. package/dist/types/components/arkos-gateway/utils/helpers.d.ts +9 -0
  219. package/dist/types/components/arkos-gateway/utils/memory-gateway-store.d.ts +14 -0
  220. package/dist/types/components/arkos-gateway/utils/multi-tier-arkos-gateway-store.d.ts +20 -0
  221. package/dist/types/components/arkos-gateway/utils/rate-limiter.d.ts +11 -0
  222. package/dist/types/components/arkos-route-hook/index.d.ts +11 -5
  223. package/dist/types/components/arkos-route-hook/reader.d.ts +4 -7
  224. package/dist/types/components/arkos-route-hook/types.d.ts +9 -5
  225. package/dist/types/exports/error-handler/index.d.ts +1 -0
  226. package/dist/types/exports/index.d.ts +5 -5
  227. package/dist/types/exports/middlewares/index.d.ts +1 -1
  228. package/dist/types/exports/services/index.d.ts +3 -3
  229. package/dist/types/exports/websockets.d.ts +5 -0
  230. package/dist/types/modules/auth/auth.service.d.ts +80 -51
  231. package/dist/types/modules/auth/utils/auth-hooks-manager.d.ts +63 -0
  232. package/dist/types/modules/auth/utils/auth-openapi-generator.d.ts +9 -0
  233. package/dist/types/modules/auth/utils/auth-prisma-json-schema-generator.d.ts +13 -0
  234. package/dist/types/modules/auth/utils/docs-links.d.ts +3 -0
  235. package/dist/types/modules/auth/utils/services/auth-action.service.d.ts +2 -2
  236. package/dist/types/modules/base/base.controller.d.ts +4 -4
  237. package/dist/types/modules/base/base.middlewares.d.ts +1 -7
  238. package/dist/types/modules/base/base.service.d.ts +8 -17
  239. package/dist/types/modules/base/types/base.service.types.d.ts +11 -0
  240. package/dist/types/modules/base/utils/helpers/base.service.helpers.d.ts +1 -1
  241. package/dist/types/modules/base/utils/model-openapi-generator.d.ts +12 -0
  242. package/dist/types/modules/email/email.service.d.ts +1 -1
  243. package/dist/types/modules/error-handler/utils/app-error.d.ts +0 -2
  244. package/dist/types/modules/error-handler/utils/catch-async.d.ts +2 -2
  245. package/dist/types/modules/error-handler/utils/error-handler.helpers.d.ts +1 -27
  246. package/dist/types/modules/error-handler/utils/errors.d.ts +176 -0
  247. package/dist/types/modules/error-handler/utils/get-handled-error.d.ts +1 -0
  248. package/dist/types/modules/error-handler/utils/multer-error-handler.d.ts +7 -0
  249. package/dist/types/modules/file-upload/file-upload.controller.d.ts +7 -2
  250. package/dist/types/modules/file-upload/utils/file-upload-json-schema-generator.d.ts +12 -0
  251. package/dist/types/modules/swagger/swagger.router.d.ts +1 -2
  252. package/dist/types/modules/swagger/utils/get-open-api-login-html.d.ts +1 -0
  253. package/dist/types/modules/swagger/utils/helpers/get-swagger-default-configs.d.ts +48 -3
  254. package/dist/types/modules/swagger/utils/helpers/openapi-schema-converter.d.ts +6 -1
  255. package/dist/types/types/arkos-config/utils.d.ts +68 -0
  256. package/dist/types/types/arkos-prisma-input.d.ts +4 -3
  257. package/dist/types/types/arkos.d.ts +5 -15
  258. package/dist/types/types/auth.d.ts +4 -4
  259. package/dist/types/types/index.d.ts +10 -58
  260. package/dist/types/types/new-arkos-config.d.ts +326 -36
  261. package/dist/types/types/router-config.d.ts +0 -63
  262. package/dist/types/types/upload.d.ts +10 -0
  263. package/dist/types/types/validation/validation-manager.d.ts +27 -0
  264. package/dist/types/types/validation/validator.d.ts +2 -0
  265. package/dist/types/utils/arkos-router/arkos-router-openapi-manager.d.ts +14 -1
  266. package/dist/types/utils/arkos-router/index.d.ts +83 -8
  267. package/dist/types/utils/arkos-router/types/index.d.ts +74 -23
  268. package/dist/types/utils/arkos-router/types/openapi-config.d.ts +3 -2
  269. package/dist/types/utils/arkos-router/types/upload-config.d.ts +65 -8
  270. package/dist/types/utils/arkos-router/utils/helpers/apply-arkos-router-proxy.d.ts +6 -0
  271. package/dist/types/utils/arkos-router/utils/helpers/index.d.ts +4 -6
  272. package/dist/types/utils/arkos-router/utils/helpers/upload-manager.d.ts +1 -36
  273. package/dist/types/utils/bundler.d.ts +1 -1
  274. package/dist/types/utils/cli/build.d.ts +1 -1
  275. package/dist/types/utils/cli/generate.d.ts +15 -6
  276. package/dist/types/utils/cli/start.d.ts +3 -1
  277. package/dist/types/utils/cli/utils/template-generator/templates/class-validator-dto-generator.d.ts +11 -0
  278. package/dist/types/utils/cli/utils/template-generator/templates/zod-schema-generator.d.ts +4 -0
  279. package/dist/types/utils/define-config.d.ts +1 -1
  280. package/dist/types/utils/docs-links.d.ts +1 -0
  281. package/dist/types/utils/dynamic-loader.d.ts +2 -2
  282. package/dist/types/utils/features/api.features.d.ts +1 -2
  283. package/dist/types/utils/helpers/arkos-config.helpers.d.ts +7 -0
  284. package/dist/types/utils/helpers/fs.helpers.d.ts +1 -16
  285. package/dist/types/utils/helpers/global.helpers.d.ts +1 -0
  286. package/dist/types/utils/helpers/prisma.helpers.d.ts +1 -1
  287. package/dist/types/utils/helpers/query-parser.helpers.d.ts +1 -1
  288. package/dist/types/utils/helpers/url-helpers.d.ts +1 -0
  289. package/dist/types/utils/initialize-app.d.ts +1 -0
  290. package/dist/types/utils/prisma/prisma-json-schema-generator.d.ts +12 -30
  291. package/dist/types/utils/prisma/prisma-schema-parser.d.ts +4 -0
  292. package/dist/types/utils/prisma/types.d.ts +3 -2
  293. package/package.json +117 -84
  294. package/dist/cjs/app.js +0 -79
  295. package/dist/cjs/app.js.map +0 -1
  296. package/dist/cjs/components/arkos-loadable-registry/index.js +0 -28
  297. package/dist/cjs/components/arkos-loadable-registry/index.js.map +0 -1
  298. package/dist/cjs/components/arkos-loadable-translator/index.js +0 -144
  299. package/dist/cjs/components/arkos-loadable-translator/index.js.map +0 -1
  300. package/dist/cjs/components/arkos-policy/index.js +0 -36
  301. package/dist/cjs/components/arkos-policy/index.js.map +0 -1
  302. package/dist/cjs/components/arkos-policy/types.js +0 -3
  303. package/dist/cjs/components/arkos-policy/types.js.map +0 -1
  304. package/dist/cjs/components/arkos-route-hook/index.js +0 -50
  305. package/dist/cjs/components/arkos-route-hook/index.js.map +0 -1
  306. package/dist/cjs/components/arkos-route-hook/reader.js +0 -47
  307. package/dist/cjs/components/arkos-route-hook/reader.js.map +0 -1
  308. package/dist/cjs/components/arkos-route-hook/types.js +0 -3
  309. package/dist/cjs/components/arkos-route-hook/types.js.map +0 -1
  310. package/dist/cjs/components/arkos-service-hook/index.js +0 -35
  311. package/dist/cjs/components/arkos-service-hook/index.js.map +0 -1
  312. package/dist/cjs/components/arkos-service-hook/reader.js +0 -30
  313. package/dist/cjs/components/arkos-service-hook/reader.js.map +0 -1
  314. package/dist/cjs/components/arkos-service-hook/types.js +0 -3
  315. package/dist/cjs/components/arkos-service-hook/types.js.map +0 -1
  316. package/dist/cjs/exports/auth/index.js +0 -6
  317. package/dist/cjs/exports/auth/index.js.map +0 -1
  318. package/dist/cjs/exports/config.js +0 -6
  319. package/dist/cjs/exports/config.js.map +0 -1
  320. package/dist/cjs/exports/controllers/index.js +0 -42
  321. package/dist/cjs/exports/controllers/index.js.map +0 -1
  322. package/dist/cjs/exports/error-handler/index.js +0 -11
  323. package/dist/cjs/exports/error-handler/index.js.map +0 -1
  324. package/dist/cjs/exports/index.js +0 -23
  325. package/dist/cjs/exports/index.js.map +0 -1
  326. package/dist/cjs/exports/middlewares/index.js +0 -7
  327. package/dist/cjs/exports/middlewares/index.js.map +0 -1
  328. package/dist/cjs/exports/prisma/index.js +0 -13
  329. package/dist/cjs/exports/prisma/index.js.map +0 -1
  330. package/dist/cjs/exports/services/index.js +0 -53
  331. package/dist/cjs/exports/services/index.js.map +0 -1
  332. package/dist/cjs/exports/utils/index.js +0 -26
  333. package/dist/cjs/exports/utils/index.js.map +0 -1
  334. package/dist/cjs/exports/validation/index.js +0 -11
  335. package/dist/cjs/exports/validation/index.js.map +0 -1
  336. package/dist/cjs/generated.js +0 -7
  337. package/dist/cjs/generated.js.map +0 -1
  338. package/dist/cjs/modules/auth/auth.controller.js +0 -254
  339. package/dist/cjs/modules/auth/auth.controller.js.map +0 -1
  340. package/dist/cjs/modules/auth/auth.router.js +0 -113
  341. package/dist/cjs/modules/auth/auth.router.js.map +0 -1
  342. package/dist/cjs/modules/auth/auth.service.js +0 -277
  343. package/dist/cjs/modules/auth/auth.service.js.map +0 -1
  344. package/dist/cjs/modules/auth/utils/auth-error-objects.js +0 -10
  345. package/dist/cjs/modules/auth/utils/auth-error-objects.js.map +0 -1
  346. package/dist/cjs/modules/auth/utils/helpers/auth.controller.helpers.js +0 -83
  347. package/dist/cjs/modules/auth/utils/helpers/auth.controller.helpers.js.map +0 -1
  348. package/dist/cjs/modules/auth/utils/services/auth-action.service.js +0 -150
  349. package/dist/cjs/modules/auth/utils/services/auth-action.service.js.map +0 -1
  350. package/dist/cjs/modules/base/base.controller.js +0 -275
  351. package/dist/cjs/modules/base/base.controller.js.map +0 -1
  352. package/dist/cjs/modules/base/base.middlewares.js +0 -231
  353. package/dist/cjs/modules/base/base.middlewares.js.map +0 -1
  354. package/dist/cjs/modules/base/base.router.js +0 -112
  355. package/dist/cjs/modules/base/base.router.js.map +0 -1
  356. package/dist/cjs/modules/base/base.service.js +0 -432
  357. package/dist/cjs/modules/base/base.service.js.map +0 -1
  358. package/dist/cjs/modules/base/types/base.service.types.js +0 -3
  359. package/dist/cjs/modules/base/types/base.service.types.js.map +0 -1
  360. package/dist/cjs/modules/base/utils/error-prettifier.js +0 -188
  361. package/dist/cjs/modules/base/utils/error-prettifier.js.map +0 -1
  362. package/dist/cjs/modules/base/utils/helpers/base.middlewares.helpers.js +0 -49
  363. package/dist/cjs/modules/base/utils/helpers/base.middlewares.helpers.js.map +0 -1
  364. package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js +0 -13
  365. package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js.map +0 -1
  366. package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js +0 -222
  367. package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js.map +0 -1
  368. package/dist/cjs/modules/base/utils/router-validator.js +0 -13
  369. package/dist/cjs/modules/base/utils/router-validator.js.map +0 -1
  370. package/dist/cjs/modules/base/utils/service-hooks-manager.js +0 -19
  371. package/dist/cjs/modules/base/utils/service-hooks-manager.js.map +0 -1
  372. package/dist/cjs/modules/debugger/debugger.service.js +0 -59
  373. package/dist/cjs/modules/debugger/debugger.service.js.map +0 -1
  374. package/dist/cjs/modules/email/email.service.js +0 -106
  375. package/dist/cjs/modules/email/email.service.js.map +0 -1
  376. package/dist/cjs/modules/error-handler/error-handler.controller.js +0 -192
  377. package/dist/cjs/modules/error-handler/error-handler.controller.js.map +0 -1
  378. package/dist/cjs/modules/error-handler/utils/app-error.js +0 -28
  379. package/dist/cjs/modules/error-handler/utils/app-error.js.map +0 -1
  380. package/dist/cjs/modules/error-handler/utils/catch-async.js +0 -21
  381. package/dist/cjs/modules/error-handler/utils/catch-async.js.map +0 -1
  382. package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js +0 -218
  383. package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js.map +0 -1
  384. package/dist/cjs/modules/file-upload/file-upload.controller.js +0 -256
  385. package/dist/cjs/modules/file-upload/file-upload.controller.js.map +0 -1
  386. package/dist/cjs/modules/file-upload/file-upload.router.js +0 -80
  387. package/dist/cjs/modules/file-upload/file-upload.router.js.map +0 -1
  388. package/dist/cjs/modules/file-upload/file-upload.service.js +0 -343
  389. package/dist/cjs/modules/file-upload/file-upload.service.js.map +0 -1
  390. package/dist/cjs/modules/file-upload/utils/helpers/file-extensions.js +0 -134
  391. package/dist/cjs/modules/file-upload/utils/helpers/file-extensions.js.map +0 -1
  392. package/dist/cjs/modules/file-upload/utils/helpers/file-upload.helpers.js +0 -100
  393. package/dist/cjs/modules/file-upload/utils/helpers/file-upload.helpers.js.map +0 -1
  394. package/dist/cjs/modules/swagger/swagger.router.js +0 -65
  395. package/dist/cjs/modules/swagger/swagger.router.js.map +0 -1
  396. package/dist/cjs/modules/swagger/utils/built-in-route-path-object-manager.js +0 -7
  397. package/dist/cjs/modules/swagger/utils/built-in-route-path-object-manager.js.map +0 -1
  398. package/dist/cjs/modules/swagger/utils/helpers/class-validator-to-json-schema.js +0 -53
  399. package/dist/cjs/modules/swagger/utils/helpers/class-validator-to-json-schema.js.map +0 -1
  400. package/dist/cjs/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +0 -473
  401. package/dist/cjs/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js.map +0 -1
  402. package/dist/cjs/modules/swagger/utils/helpers/get-file-upload-json-schema-paths.js +0 -491
  403. package/dist/cjs/modules/swagger/utils/helpers/get-file-upload-json-schema-paths.js.map +0 -1
  404. package/dist/cjs/modules/swagger/utils/helpers/get-swagger-default-configs.js +0 -73
  405. package/dist/cjs/modules/swagger/utils/helpers/get-swagger-default-configs.js.map +0 -1
  406. package/dist/cjs/modules/swagger/utils/helpers/get-system-json-schema-paths.js +0 -37
  407. package/dist/cjs/modules/swagger/utils/helpers/get-system-json-schema-paths.js.map +0 -1
  408. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +0 -61
  409. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js.map +0 -1
  410. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +0 -31
  411. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js.map +0 -1
  412. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-system-json-schemas.js +0 -49
  413. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-system-json-schemas.js.map +0 -1
  414. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js +0 -39
  415. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js.map +0 -1
  416. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js +0 -468
  417. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js.map +0 -1
  418. package/dist/cjs/modules/swagger/utils/helpers/missing-json-schemas-generator.js +0 -260
  419. package/dist/cjs/modules/swagger/utils/helpers/missing-json-schemas-generator.js.map +0 -1
  420. package/dist/cjs/modules/swagger/utils/helpers/openapi-schema-converter.js +0 -331
  421. package/dist/cjs/modules/swagger/utils/helpers/openapi-schema-converter.js.map +0 -1
  422. package/dist/cjs/modules/swagger/utils/helpers/swagger.router.helpers.js +0 -109
  423. package/dist/cjs/modules/swagger/utils/helpers/swagger.router.helpers.js.map +0 -1
  424. package/dist/cjs/package.json +0 -3
  425. package/dist/cjs/server.js +0 -60
  426. package/dist/cjs/server.js.map +0 -1
  427. package/dist/cjs/types/arkos-prisma-input.js +0 -3
  428. package/dist/cjs/types/arkos-prisma-input.js.map +0 -1
  429. package/dist/cjs/types/arkos.js +0 -3
  430. package/dist/cjs/types/arkos.js.map +0 -1
  431. package/dist/cjs/types/auth.js +0 -3
  432. package/dist/cjs/types/auth.js.map +0 -1
  433. package/dist/cjs/types/index.js +0 -3
  434. package/dist/cjs/types/index.js.map +0 -1
  435. package/dist/cjs/types/new-arkos-config.js +0 -3
  436. package/dist/cjs/types/new-arkos-config.js.map +0 -1
  437. package/dist/cjs/types/router-config.js +0 -3
  438. package/dist/cjs/types/router-config.js.map +0 -1
  439. package/dist/cjs/utils/arkos-env.js +0 -9
  440. package/dist/cjs/utils/arkos-env.js.map +0 -1
  441. package/dist/cjs/utils/arkos-router/arkos-router-openapi-manager.js +0 -126
  442. package/dist/cjs/utils/arkos-router/arkos-router-openapi-manager.js.map +0 -1
  443. package/dist/cjs/utils/arkos-router/index.js +0 -253
  444. package/dist/cjs/utils/arkos-router/index.js.map +0 -1
  445. package/dist/cjs/utils/arkos-router/route-config-registry.js +0 -16
  446. package/dist/cjs/utils/arkos-router/route-config-registry.js.map +0 -1
  447. package/dist/cjs/utils/arkos-router/route-config-validator.js +0 -56
  448. package/dist/cjs/utils/arkos-router/route-config-validator.js.map +0 -1
  449. package/dist/cjs/utils/arkos-router/types/body-parser-config.js +0 -3
  450. package/dist/cjs/utils/arkos-router/types/body-parser-config.js.map +0 -1
  451. package/dist/cjs/utils/arkos-router/types/index.js +0 -3
  452. package/dist/cjs/utils/arkos-router/types/index.js.map +0 -1
  453. package/dist/cjs/utils/arkos-router/types/openapi-config.js +0 -3
  454. package/dist/cjs/utils/arkos-router/types/openapi-config.js.map +0 -1
  455. package/dist/cjs/utils/arkos-router/types/upload-config.js +0 -3
  456. package/dist/cjs/utils/arkos-router/types/upload-config.js.map +0 -1
  457. package/dist/cjs/utils/arkos-router/utils/helpers/index.js +0 -163
  458. package/dist/cjs/utils/arkos-router/utils/helpers/index.js.map +0 -1
  459. package/dist/cjs/utils/arkos-router/utils/helpers/upload-manager.js +0 -283
  460. package/dist/cjs/utils/arkos-router/utils/helpers/upload-manager.js.map +0 -1
  461. package/dist/cjs/utils/bundler.js +0 -163
  462. package/dist/cjs/utils/bundler.js.map +0 -1
  463. package/dist/cjs/utils/cli/build.js +0 -199
  464. package/dist/cjs/utils/cli/build.js.map +0 -1
  465. package/dist/cjs/utils/cli/dev.js +0 -128
  466. package/dist/cjs/utils/cli/dev.js.map +0 -1
  467. package/dist/cjs/utils/cli/export-auth-action.js +0 -79
  468. package/dist/cjs/utils/cli/export-auth-action.js.map +0 -1
  469. package/dist/cjs/utils/cli/generate.js +0 -229
  470. package/dist/cjs/utils/cli/generate.js.map +0 -1
  471. package/dist/cjs/utils/cli/index.js +0 -191
  472. package/dist/cjs/utils/cli/index.js.map +0 -1
  473. package/dist/cjs/utils/cli/prisma-generate.js +0 -112
  474. package/dist/cjs/utils/cli/prisma-generate.js.map +0 -1
  475. package/dist/cjs/utils/cli/start.js +0 -72
  476. package/dist/cjs/utils/cli/start.js.map +0 -1
  477. package/dist/cjs/utils/cli/utils/cli.helpers.js +0 -24
  478. package/dist/cjs/utils/cli/utils/cli.helpers.js.map +0 -1
  479. package/dist/cjs/utils/cli/utils/runtime-cli-commander.js +0 -115
  480. package/dist/cjs/utils/cli/utils/runtime-cli-commander.js.map +0 -1
  481. package/dist/cjs/utils/cli/utils/smart-fs-watcher.js +0 -73
  482. package/dist/cjs/utils/cli/utils/smart-fs-watcher.js.map +0 -1
  483. package/dist/cjs/utils/cli/utils/template-generator/templates/class-validator-dto-generator.js +0 -550
  484. package/dist/cjs/utils/cli/utils/template-generator/templates/class-validator-dto-generator.js.map +0 -1
  485. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-controller-template.js +0 -52
  486. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-controller-template.js.map +0 -1
  487. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-multiple-components.js +0 -139
  488. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-multiple-components.js.map +0 -1
  489. package/dist/cjs/utils/cli/utils/template-generator/templates/policy-template.js +0 -53
  490. package/dist/cjs/utils/cli/utils/template-generator/templates/policy-template.js.map +0 -1
  491. package/dist/cjs/utils/cli/utils/template-generator/templates/route-hook.template.js +0 -39
  492. package/dist/cjs/utils/cli/utils/template-generator/templates/route-hook.template.js.map +0 -1
  493. package/dist/cjs/utils/cli/utils/template-generator/templates/router-template.js +0 -19
  494. package/dist/cjs/utils/cli/utils/template-generator/templates/router-template.js.map +0 -1
  495. package/dist/cjs/utils/cli/utils/template-generator/templates/service-hook.template.js +0 -32
  496. package/dist/cjs/utils/cli/utils/template-generator/templates/service-hook.template.js.map +0 -1
  497. package/dist/cjs/utils/cli/utils/template-generator/templates/service-template.js +0 -50
  498. package/dist/cjs/utils/cli/utils/template-generator/templates/service-template.js.map +0 -1
  499. package/dist/cjs/utils/cli/utils/template-generator/templates/zod-schema-generator.js +0 -351
  500. package/dist/cjs/utils/cli/utils/template-generator/templates/zod-schema-generator.js.map +0 -1
  501. package/dist/cjs/utils/cli/utils/template-generators.js +0 -52
  502. package/dist/cjs/utils/cli/utils/template-generators.js.map +0 -1
  503. package/dist/cjs/utils/cli/utils/watermark-stamper.js +0 -26
  504. package/dist/cjs/utils/cli/utils/watermark-stamper.js.map +0 -1
  505. package/dist/cjs/utils/define-config.js +0 -46
  506. package/dist/cjs/utils/define-config.js.map +0 -1
  507. package/dist/cjs/utils/dotenv.helpers.js +0 -52
  508. package/dist/cjs/utils/dotenv.helpers.js.map +0 -1
  509. package/dist/cjs/utils/dynamic-loader.js +0 -22
  510. package/dist/cjs/utils/dynamic-loader.js.map +0 -1
  511. package/dist/cjs/utils/expand-env.js +0 -72
  512. package/dist/cjs/utils/expand-env.js.map +0 -1
  513. package/dist/cjs/utils/features/api.features.js +0 -201
  514. package/dist/cjs/utils/features/api.features.js.map +0 -1
  515. package/dist/cjs/utils/features/port-and-host-allocator.js +0 -129
  516. package/dist/cjs/utils/features/port-and-host-allocator.js.map +0 -1
  517. package/dist/cjs/utils/helpers/api.features.helpers.js +0 -327
  518. package/dist/cjs/utils/helpers/api.features.helpers.js.map +0 -1
  519. package/dist/cjs/utils/helpers/arkos-config.helpers.js +0 -86
  520. package/dist/cjs/utils/helpers/arkos-config.helpers.js.map +0 -1
  521. package/dist/cjs/utils/helpers/change-case.helpers.js +0 -177
  522. package/dist/cjs/utils/helpers/change-case.helpers.js.map +0 -1
  523. package/dist/cjs/utils/helpers/deepmerge.helper.js +0 -115
  524. package/dist/cjs/utils/helpers/deepmerge.helper.js.map +0 -1
  525. package/dist/cjs/utils/helpers/exit-error.js +0 -12
  526. package/dist/cjs/utils/helpers/exit-error.js.map +0 -1
  527. package/dist/cjs/utils/helpers/fs.helpers.js +0 -60
  528. package/dist/cjs/utils/helpers/fs.helpers.js.map +0 -1
  529. package/dist/cjs/utils/helpers/global.helpers.js +0 -105
  530. package/dist/cjs/utils/helpers/global.helpers.js.map +0 -1
  531. package/dist/cjs/utils/helpers/prisma.helpers.js +0 -53
  532. package/dist/cjs/utils/helpers/prisma.helpers.js.map +0 -1
  533. package/dist/cjs/utils/helpers/query-parser.helpers.js +0 -69
  534. package/dist/cjs/utils/helpers/query-parser.helpers.js.map +0 -1
  535. package/dist/cjs/utils/helpers/routers.helpers.js +0 -36
  536. package/dist/cjs/utils/helpers/routers.helpers.js.map +0 -1
  537. package/dist/cjs/utils/helpers/text.helpers.js +0 -28
  538. package/dist/cjs/utils/helpers/text.helpers.js.map +0 -1
  539. package/dist/cjs/utils/initialize-app.js +0 -55
  540. package/dist/cjs/utils/initialize-app.js.map +0 -1
  541. package/dist/cjs/utils/prisma/prisma-json-schema-generator.js +0 -437
  542. package/dist/cjs/utils/prisma/prisma-json-schema-generator.js.map +0 -1
  543. package/dist/cjs/utils/prisma/prisma-schema-parser.js +0 -360
  544. package/dist/cjs/utils/prisma/prisma-schema-parser.js.map +0 -1
  545. package/dist/cjs/utils/prisma/types.js +0 -3
  546. package/dist/cjs/utils/prisma/types.js.map +0 -1
  547. package/dist/cjs/utils/remove-dir.js +0 -14
  548. package/dist/cjs/utils/remove-dir.js.map +0 -1
  549. package/dist/cjs/utils/setup-app.js +0 -119
  550. package/dist/cjs/utils/setup-app.js.map +0 -1
  551. package/dist/cjs/utils/sheu.js +0 -131
  552. package/dist/cjs/utils/sheu.js.map +0 -1
  553. package/dist/cjs/utils/validate-dto.js +0 -19
  554. package/dist/cjs/utils/validate-dto.js.map +0 -1
  555. package/dist/cjs/utils/validate-schema.js +0 -75
  556. package/dist/cjs/utils/validate-schema.js.map +0 -1
  557. package/dist/esm/components/arkos-loadable-translator/index.js +0 -138
  558. package/dist/esm/components/arkos-loadable-translator/index.js.map +0 -1
  559. package/dist/esm/components/arkos-service-hook/index.js +0 -32
  560. package/dist/esm/components/arkos-service-hook/index.js.map +0 -1
  561. package/dist/esm/components/arkos-service-hook/reader.js +0 -24
  562. package/dist/esm/components/arkos-service-hook/reader.js.map +0 -1
  563. package/dist/esm/components/arkos-service-hook/types.js +0 -2
  564. package/dist/esm/components/arkos-service-hook/types.js.map +0 -1
  565. package/dist/esm/modules/base/utils/helpers/base.router.helpers.js +0 -10
  566. package/dist/esm/modules/base/utils/helpers/base.router.helpers.js.map +0 -1
  567. package/dist/esm/modules/base/utils/service-hooks-manager.js +0 -17
  568. package/dist/esm/modules/base/utils/service-hooks-manager.js.map +0 -1
  569. package/dist/esm/modules/swagger/utils/built-in-route-path-object-manager.js +0 -5
  570. package/dist/esm/modules/swagger/utils/built-in-route-path-object-manager.js.map +0 -1
  571. package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +0 -469
  572. package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js.map +0 -1
  573. package/dist/esm/modules/swagger/utils/helpers/get-file-upload-json-schema-paths.js +0 -485
  574. package/dist/esm/modules/swagger/utils/helpers/get-file-upload-json-schema-paths.js.map +0 -1
  575. package/dist/esm/modules/swagger/utils/helpers/get-system-json-schema-paths.js +0 -34
  576. package/dist/esm/modules/swagger/utils/helpers/get-system-json-schema-paths.js.map +0 -1
  577. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +0 -55
  578. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js.map +0 -1
  579. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +0 -25
  580. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js.map +0 -1
  581. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-system-json-schemas.js +0 -46
  582. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-system-json-schemas.js.map +0 -1
  583. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js +0 -33
  584. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js.map +0 -1
  585. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js +0 -462
  586. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js.map +0 -1
  587. package/dist/esm/modules/swagger/utils/helpers/missing-json-schemas-generator.js +0 -255
  588. package/dist/esm/modules/swagger/utils/helpers/missing-json-schemas-generator.js.map +0 -1
  589. package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js +0 -98
  590. package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js.map +0 -1
  591. package/dist/esm/utils/cli/utils/template-generator/templates/route-hook.template.js +0 -36
  592. package/dist/esm/utils/cli/utils/template-generator/templates/route-hook.template.js.map +0 -1
  593. package/dist/esm/utils/cli/utils/template-generator/templates/service-hook.template.js +0 -29
  594. package/dist/esm/utils/cli/utils/template-generator/templates/service-hook.template.js.map +0 -1
  595. package/dist/types/components/arkos-loadable-translator/index.d.ts +0 -53
  596. package/dist/types/components/arkos-service-hook/index.d.ts +0 -41
  597. package/dist/types/components/arkos-service-hook/reader.d.ts +0 -35
  598. package/dist/types/components/arkos-service-hook/types.d.ts +0 -240
  599. package/dist/types/modules/base/utils/helpers/base.router.helpers.d.ts +0 -3
  600. package/dist/types/modules/base/utils/service-hooks-manager.d.ts +0 -10
  601. package/dist/types/modules/swagger/utils/built-in-route-path-object-manager.d.ts +0 -4
  602. package/dist/types/modules/swagger/utils/helpers/get-authentication-json-schema-paths.d.ts +0 -5
  603. package/dist/types/modules/swagger/utils/helpers/get-file-upload-json-schema-paths.d.ts +0 -3
  604. package/dist/types/modules/swagger/utils/helpers/get-system-json-schema-paths.d.ts +0 -2
  605. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.d.ts +0 -1
  606. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.d.ts +0 -1
  607. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-system-json-schemas.d.ts +0 -4
  608. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.d.ts +0 -1
  609. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.d.ts +0 -2
  610. package/dist/types/modules/swagger/utils/helpers/missing-json-schemas-generator.d.ts +0 -76
  611. package/dist/types/modules/swagger/utils/helpers/swagger.router.helpers.d.ts +0 -19
  612. package/dist/types/utils/cli/utils/template-generator/templates/route-hook.template.d.ts +0 -2
  613. package/dist/types/utils/cli/utils/template-generator/templates/service-hook.template.d.ts +0 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/components/arkos-gateway/types.ts"],"names":[],"mappings":"AA8dA,MAAM,OAAO,sBAAsB;CAAG","sourcesContent":["import { BroadcastOperator, Socket } from \"socket.io\";\nimport { User } from \"../../types\";\nimport { DefaultEventsMap } from \"socket.io\";\nimport { Validator } from \"../../types/validation/validator\";\nimport { Options as RateLimitOptions } from \"express-rate-limit\";\nimport { DetailedAccessControlRule } from \"../../types/auth\";\n///@ts-ignore\nimport {\n AllButLast,\n DecorateAcknowledgements,\n DecorateAcknowledgementsWithMultipleResponses,\n EventNames,\n EventNamesWithAck,\n EventNamesWithError,\n EventParams,\n FirstNonErrorArg,\n Last,\n ///@ts-ignore\n} from \"socket.io/dist/typed-events\";\n\nexport interface EventsMap {\n [event: string]: any;\n}\n\nexport interface ArkosSocket<\n ListenEvents extends EventsMap = DefaultEventsMap,\n EmitEvents extends EventsMap = ListenEvents,\n ServerSideEvents extends EventsMap = DefaultEventsMap,\n SocketData extends Validator = any,\n SocketLocals extends Record<string, any> = Record<string, any>,\n> extends Socket<ListenEvents, EmitEvents, ServerSideEvents, SocketData> {\n /**\n * Populated by Arkos after successful authentication on connection.\n * Available in all event handlers when `authentication: true` on the gateway.\n */\n currentUser?: User;\n\n /**\n * Populated by Arkos after successful validation.\n * Typed to the event's validation schema when using TypeScript.\n */\n data: SocketData;\n\n /** User access token. */\n accessToken?: string;\n\n /**\n * Metadata from the incoming message, extracted from `_meta` by Arkos.\n *\n * - `mid`: Unique message ID used for deduplication.\n * - `timestamp`: When the message was sent by the client.\n */\n meta?: {\n mid?: string;\n timestamp?: string | number | Date;\n };\n\n /**\n * Per-event local storage, scoped to the current event pipeline.\n * Use to pass data between pipes and the event handler — like Express's `res.locals`.\n * Reset automatically on each event.\n *\n * @example\n * chatGateway.pipe((socket, data) => {\n * socket.locals.enriched = enrichUser(socket.currentUser)\n * })\n *\n * chatGateway.on({ event: \"send_message\" }, (socket, data) => {\n * console.log(socket.locals.enriched)\n * })\n */\n locals?: SocketLocals;\n\n /**\n * Internal Arkos context injected by the gateway at connection time.\n *\n * @internal\n */\n _arkos: {\n store: ArkosGatewayStore;\n gatewayConfig: ArkosGatewayConfig;\n };\n\n /**\n * Targets all active socket connections of a user by their user ID.\n * Uses the internal `arkos::user:{userId}` room convention.\n *\n * Supports emit, management, and exclusion operations across all of the\n * user's active connections.\n *\n * @example\n * socket.user(userId).emit(\"notification\", data)\n * socket.user(userId).except({ user: otherUserId }).emit(\"sync\", data)\n * const sockets = await socket.user(userId).fetchSockets()\n * const online = await socket.user(userId).isOnline()\n *\n * @since 1.7.0-canary.29\n */\n user(userId: string): ArkosUserTarget;\n\n /**\n * Wraps the next `emit` or `emitWithAck` with exponential backoff retry logic.\n * Chain `.timeout(ms)` before `.emitWithAck()` as usual.\n *\n * @example\n * socket.retry(3).emit(\"event\", data)\n * socket.retry(3).timeout(5000).emitWithAck(\"event\", data)\n *\n * @since 1.7.0-canary.29\n */\n retry(\n times: number,\n initialDelay?: number,\n multiplier?: number\n ): ArkosRetryTarget;\n\n /**\n * Emits an event to this client.\n * Arkos automatically injects `_meta` (`mid` + `timestamp`) into every outgoing payload\n * for client-side deduplication and freshness checks.\n *\n * @example\n * socket.emit(\"message\", { text: \"hello\" })\n * socket.emit(\"notification\", { title: \"New order\" })\n */\n emit<Ev extends EventNames<EmitEvents>>(\n ev: Ev,\n ...args: EventParams<EmitEvents, Ev>\n ): true;\n\n /**\n * Emits an event and waits for an acknowledgement from the client.\n * Arkos injects `_meta` automatically. Use `.timeout(ms)` to avoid hanging indefinitely.\n *\n * @example\n * const response = await socket.timeout(5000).emitWithAck(\"confirm\", data)\n */\n emitWithAck<Ev extends EventNamesWithAck<EmitEvents>>(\n ev: Ev,\n ...args: AllButLast<EventParams<EmitEvents, Ev>>\n ): Promise<FirstNonErrorArg<Last<EventParams<EmitEvents, Ev>>>>;\n\n /**\n * Targets a room when broadcasting — excludes the sender.\n * Returns an {@link ArkosBroadcastOperator} with enhanced `.except({ user })` support\n * and automatic `_meta` injection on every `.emit()`.\n *\n * @example\n * socket.to(\"room-101\").emit(\"message\", data)\n * socket.to(\"room-101\").except({ user: userId }).emit(\"message\", data)\n * socket.to(\"room-101\").volatile.emit(\"typing\", data)\n * await socket.to(\"room-101\").timeout(3000).emitWithAck(\"confirm\", data)\n *\n * @since 1.7.0-canary.29\n */\n to(\n room: string | string[]\n ): ArkosBroadcastOperator<\n DecorateAcknowledgementsWithMultipleResponses<EmitEvents>,\n SocketData\n > &\n BroadcastOperator<EmitEvents, SocketData>;\n /**\n * Broadcasts to all connected clients except the sender.\n * Returns an {@link ArkosBroadcastOperator} with enhanced `.except({ user })` support\n * and automatic `_meta` injection on every `.emit()`.\n *\n * @example\n * socket.broadcast.emit(\"announcement\", data)\n * socket.broadcast.except({ user: userId }).emit(\"announcement\", data)\n * socket.broadcast.volatile.emit(\"ping\", data)\n *\n * @since 1.7.0-canary.29\n */\n get broadcast(): ArkosBroadcastOperator<\n DecorateAcknowledgementsWithMultipleResponses<EmitEvents>,\n SocketData\n > &\n BroadcastOperator<EmitEvents, SocketData>;\n}\n\n/**\n * Enhanced broadcast/room target returned by `socket.to()` and `socket.broadcast`.\n * Extends the native `BroadcastOperator` with `{ user }` exclusion support\n * and automatic `_meta` injection on emit.\n *\n * @since 1.7.0-canary.29\n */\nexport interface ArkosBroadcastOperator<\n EmitEvents extends EventsMap = DefaultEventsMap,\n SocketData extends Validator = any,\n> extends BroadcastOperator<EmitEvents, SocketData> {\n /**\n * Exclude sockets from the broadcast.\n * Accepts a room name, socket ID, or `{ user: string | string[] }` to exclude\n * all sockets belonging to one or more users.\n *\n * @example\n * socket.to(\"room-101\").except(\"room-102\").emit(\"foo\", data)\n * socket.broadcast.except({ user: userId }).emit(\"foo\", data)\n * socket.broadcast.except({ user: [userId1, userId2] }).emit(\"foo\", data)\n */\n except(\n room: string | string[] | { user: string | string[] }\n ): ArkosBroadcastOperator<EmitEvents, SocketData>;\n\n /**\n * Emits to all clients,`_meta` is injected automatically.\n *\n * @example\n * // the “foo” event will be broadcast to all connected clients\n * io.emit(\"foo\", \"bar\");\n *\n * // the “foo” event will be broadcast to all connected clients in the “room-101” room\n * io.to(\"room-101\").emit(\"foo\", \"bar\");\n *\n * // with an acknowledgement expected from all connected clients\n * io.timeout(1000).emit(\"some-event\", (err, responses) => {\n * if (err) {\n * // some clients did not acknowledge the event in the given delay\n * } else {\n * console.log(responses); // one response per client\n * }\n * });\n *\n * @return Always true\n */\n emit<Ev extends EventNames<EmitEvents>>(\n ev: Ev,\n ...args: EventParams<EmitEvents, Ev>\n ): true;\n\n /** Chain volatile flag — event may be lost if client is not ready. */\n get volatile(): ArkosBroadcastOperator<EmitEvents, SocketData>;\n\n /** Chain compress flag. */\n compress(value: boolean): ArkosBroadcastOperator<EmitEvents, SocketData>;\n\n /** Chain timeout for `emitWithAck`. */\n timeout(\n ms: number\n ): ArkosBroadcastOperator<DecorateAcknowledgements<EmitEvents>, SocketData>;\n\n /**\n * Emits an event and waits for an acknowledgement from all clients.\n * `_meta` is injected automatically\n * @example\n * try {\n * const responses = await io.timeout(1000).emitWithAck(\"some-event\");\n * console.log(responses); // one response per client\n * } catch (e) {\n * // some clients did not acknowledge the event in the given delay\n * }\n *\n * @return a Promise that will be fulfilled when all clients have acknowledged the event\n */\n emitWithAck<Ev extends EventNamesWithError<EmitEvents>>(\n ev: Ev,\n ...args: AllButLast<EventParams<EmitEvents, Ev>>\n ): Promise<FirstNonErrorArg<Last<EventParams<EmitEvents, Ev>>>>;\n /**\n * Returns all unique user IDs currently in the target room(s).\n *\n * @example\n * const users = await socket.to(\"room-123\").users()\n */\n users(): Promise<string[]>;\n}\n\n/**\n * Returned by `socket.retry(n)`. Wraps `emit` and `emitWithAck`\n * with exponential backoff. Chain `.timeout(ms)` before `.emitWithAck()` as usual.\n *\n * @since 1.7.0-canary.29\n */\nexport interface ArkosRetryTarget {\n /** Emit with ack and retry. `_meta` is injected automatically. */\n emitWithAck(event: string, data: any, ...rest: any[]): Promise<any>;\n\n /**\n * Chain a timeout before `emitWithAck`.\n *\n * @example\n * socket.retry(3).timeout(5000).emitWithAck(\"event\", data)\n */\n timeout(ms: number): ArkosRetryTarget;\n}\n\n/**\n * Returned by `socket.user(userId)`.\n * Targets all active socket connections of a user.\n *\n * @since 1.7.0-canary.29\n */\nexport interface ArkosUserTarget extends ArkosBroadcastOperator {\n /**\n * Returns all active rooms for this user.\n *\n * @example\n * const rooms = await socket.user(userId).activeRooms()\n * console.log(rooms.length) // number of active tabs/connections\n */\n activeRooms(): Promise<string[]>;\n}\n\nexport type ArkosGatewayPipe = (\n socket: ArkosSocket,\n data: any\n) => void | Promise<void>;\n\nexport type ArkosGatewayEventConfig<TSchema extends Validator = any> = {\n /** The Socket.io event name to listen for. */\n event: string;\n\n /** Zod schema or class-validator DTO to validate the incoming event payload. */\n validation?: TSchema;\n\n /** Per-event rate limiting. Overrides gateway-level `rateLimit` for this event. */\n rateLimit?: Partial<RateLimitOptions> | false;\n\n /**\n * Authorization configuration.\n *\n * @remarks Gateway `authentication` must NOT be `false` or this throws at registration time.\n */\n authorization?: {\n resource: string;\n action: string;\n rule?: DetailedAccessControlRule | string[] | \"*\";\n };\n\n /**\n * When `true`, Arkos automatically calls `ack({ success: true })` after the handler\n * finishes, unless the handler already called ack manually.\n */\n ack?: boolean;\n\n /** Disables this event handler without removing it. */\n disabled?: boolean;\n\n /**\n * Maximum age in milliseconds for incoming messages.\n * Requires `data._meta.timestamp`. Events older than this are rejected.\n */\n maxAge?: number;\n\n /** Per-event deduplication. Overrides gateway-level `dedup`. */\n dedup?:\n | {\n /** @default true */\n enabled?: boolean;\n /** Time-to-live in seconds for the dedup key. @default 3600 */\n ttl?: number;\n }\n | false;\n};\n\nexport type ArkosGatewayAckFn = (response: any) => void;\n\nexport type ArkosGatewayHandler<TData = any> = (\n socket: ArkosSocket,\n data: TData,\n ack?: ArkosGatewayAckFn\n) => void | Promise<void>;\n\nexport type ArkosGatewayEventEntry = {\n config: ArkosGatewayEventConfig;\n handler: ArkosGatewayHandler;\n pipes: ArkosGatewayPipe[];\n};\n\nexport type ArkosGatewayConnectionHandler = (\n socket: ArkosSocket\n) => void | Promise<void>;\n\nexport type ArkosGatewayHookHandler =\n | ArkosGatewayConnectionHandler\n | ArkosGatewayErrorHandler;\n\nexport type ArkosGatewayErrorHandler = (\n error: any,\n socket: ArkosSocket\n) => void | Promise<void>;\n\nexport type ArkosGatewayHookType = \"connection\" | \"disconnect\" | \"error\";\n\nexport type ArkosGatewayConfig = {\n /**\n * Socket.io namespace for this gateway.\n *\n * @example\n * name: \"/chat\"\n */\n name: string;\n\n /**\n * When `true`, Arkos runs auth middleware on connection and populates `socket.currentUser`.\n * Unauthenticated sockets are rejected.\n *\n * @default false\n */\n authentication?: boolean;\n\n /** Gateway-level rate limiting, applied per socket. Can be overridden per event. */\n rateLimit?: Partial<RateLimitOptions>;\n\n /**\n * Gateway-level deduplication. Drills down to child gateways and can be overridden\n * per child or per event listener.\n */\n dedup?:\n | {\n /** @default true */\n enabled?: boolean;\n /** @default 3600 */\n ttl?: number;\n }\n | false;\n\n /**\n * Maximum age in milliseconds for incoming messages.\n * Can be overridden per event via `maxAge` in `gateway.on()`.\n */\n maxAge?: number;\n};\n\n/**\n * Options for `gateway.register()`.\n * Passed once at the root — applies to all child gateways.\n */\nexport type ArkosGatewayRegisterOptions = {\n /**\n * Unified store for rate limiting and deduplication.\n * Defaults to an in-memory store — zero config for single-instance deployments.\n * For distributed deployments plug in a Redis-backed store.\n *\n * @example\n * store: new RedisArkosStore(redis)\n */\n store?: ArkosGatewayStore;\n};\n\n/**\n * Unified store interface for rate limiting and deduplication.\n * Implement this to plug in Redis, Valkey, or any distributed store.\n *\n * @example\n * class RedisArkosStore implements ArkosGatewayStore {\n * async increment(key, windowMs) { ... }\n * async clear(prefix) { ... }\n * async has(key) { ... }\n * async set(key, ttl) { ... }\n * async setIfNotExists(key, ttl) { ... }\n * }\n */\nexport interface ArkosGatewayStore {\n /** Increment a rate limit counter. Key format: `arkos::rl:{socketId}:{event}` */\n increment(\n key: string,\n windowMs: number\n ): Promise<{ count: number; resetAt: number }>;\n\n /** Clear all rate limit entries matching a prefix. Key format: `arkos::rl:{socketId}` */\n clear(prefix: string): Promise<void>;\n\n /** Check if a dedup key exists. */\n has(key: string): Promise<boolean>;\n\n /** Store a dedup key with TTL in seconds. */\n set(key: string, ttl: number): Promise<void>;\n\n /**\n * Atomically store a dedup key only if it does not already exist.\n * Returns `true` if created (process the message), `false` if duplicate (skip).\n */\n setIfNotExists(key: string, ttl: number): Promise<boolean>;\n}\n\nexport class ArkosGatewayController {}\n"]}
@@ -0,0 +1,105 @@
1
+ import { isProduction } from "../../../utils/helpers/arkos-config.helpers.js";
2
+ import { getHandledError } from "../../../modules/error-handler/utils/get-handled-error.js";
3
+ export async function handleArkosGatewayErrors(err, socket, errorHandlers = [], loggerMeta, ack) {
4
+ let emitCalled = false;
5
+ const originalEmit = socket.emit.bind(socket);
6
+ socket.emit = (...args) => {
7
+ emitCalled = true;
8
+ return originalEmit(...args);
9
+ };
10
+ if (errorHandlers.length) {
11
+ try {
12
+ for (const handler of errorHandlers)
13
+ await handler(err, socket);
14
+ }
15
+ catch (catchedErr) {
16
+ err = catchedErr;
17
+ emitCalled = false;
18
+ }
19
+ }
20
+ socket.emit = originalEmit;
21
+ if (!emitCalled) {
22
+ console.error("[\x1b[31mError\x1b[0m]:", err);
23
+ err = getHandledError(err);
24
+ const payload = {
25
+ message: err?.message ?? "Internal server error",
26
+ ...(err.isOperational
27
+ ? err
28
+ : { code: "InternalServerError", statusCode: 500 }),
29
+ };
30
+ if (isProduction())
31
+ sendProductionError(err, socket);
32
+ else
33
+ sendDevelopmentError(payload, socket);
34
+ ack?.({ error: payload.message, ...(payload.meta || {}) });
35
+ handleGatewayEventLog(loggerMeta.namespace, loggerMeta.event, payload.statusCode, loggerMeta.startTime);
36
+ }
37
+ }
38
+ function sendDevelopmentError(err, socket) {
39
+ socket.emit("error", {
40
+ ...err,
41
+ message: err.message?.split?.("\n")[err.message?.split?.("\n").length - 1],
42
+ stack: err?.originalError?.stack?.split?.("\n"),
43
+ });
44
+ }
45
+ function sendProductionError(err, socket) {
46
+ if (err.isOperational)
47
+ socket.emit("event", {
48
+ status: err.status,
49
+ message: err.message,
50
+ meta: err.meta || {},
51
+ code: err.code || "Unknown",
52
+ statusCode: err.statusCode || 500,
53
+ });
54
+ else
55
+ socket.emit("error", {
56
+ status: "error",
57
+ message: "Internal server error, please try again later.",
58
+ code: "InternalServerError",
59
+ meta: {},
60
+ statusCode: 500,
61
+ });
62
+ }
63
+ export async function runArkosGatewayPipes(pipes, socket, data) {
64
+ for (const pipe of pipes) {
65
+ await pipe(socket, data);
66
+ }
67
+ }
68
+ export function handleGatewayEventLog(namespace, event, statusCode, startTime) {
69
+ const getStatusColor = (statusCode) => {
70
+ if (statusCode >= 100 && statusCode < 200)
71
+ return "\x1b[36m";
72
+ if (statusCode >= 200 && statusCode < 300)
73
+ return "\x1b[32m";
74
+ if (statusCode >= 300 && statusCode < 400)
75
+ return "\x1b[33m";
76
+ if (statusCode >= 400 && statusCode < 500)
77
+ return "\x1b[33m";
78
+ if (statusCode >= 500)
79
+ return "\x1b[31m";
80
+ return "\x1b[0m";
81
+ };
82
+ const duration = Date.now() - startTime;
83
+ const now = new Date();
84
+ const date = now.toISOString().split("T")[0];
85
+ const time = now.toTimeString().split(" ")[0];
86
+ const timestamp = isProduction() ? `${date} ${time}` : time;
87
+ const statusColor = getStatusColor(statusCode);
88
+ console.info(`[\x1b[36mInfo\x1b[0m] \x1b[90m${timestamp}\x1b[0m \x1b[35mWS\x1b[0m ${namespace} ${event} ${statusColor}${statusCode}\x1b[0m \x1b[35m${duration}ms\x1b[0m`);
89
+ }
90
+ export function handleGatewayLifecycleLog(namespace, event, socketId, errorType) {
91
+ const isProduction = process.env.ARKOS_BUILD == "true";
92
+ const now = new Date();
93
+ const date = now.toISOString().split("T")[0];
94
+ const time = now.toTimeString().split(" ")[0];
95
+ const timestamp = isProduction ? `${date} ${time}` : time;
96
+ const eventColors = {
97
+ connected: "\x1b[32m",
98
+ disconnected: "\x1b[33m",
99
+ error: "\x1b[31m",
100
+ };
101
+ const eventColor = eventColors[event];
102
+ const extra = errorType ? ` ${errorType}` : "";
103
+ console.info(`[\x1b[36mInfo\x1b[0m] \x1b[90m${timestamp}\x1b[0m \x1b[35mWS\x1b[0m ${namespace} ${eventColor}${event}\x1b[0m ${socketId}${extra}`);
104
+ }
105
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../../src/components/arkos-gateway/utils/helpers.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,6CAA6C,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,wDAAwD,CAAC;AAEzF,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,GAAQ,EACR,MAAmB,EACnB,gBAA4C,EAAE,EAC9C,UAIC,EACD,GAA6B;IAE7B,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,MAAM,YAAY,GAAQ,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEnD,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,IAAW,EAAE,EAAE;QAC/B,UAAU,GAAG,IAAI,CAAC;QAClB,OAAO,YAAY,CAAC,GAAG,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC;IAEF,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,KAAK,MAAM,OAAO,IAAI,aAAa;gBAAE,MAAM,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAClE,CAAC;QAAC,OAAO,UAAe,EAAE,CAAC;YACzB,GAAG,GAAG,UAAU,CAAC;YACjB,UAAU,GAAG,KAAK,CAAC;QACrB,CAAC;IACH,CAAC;IAED,MAAM,CAAC,IAAI,GAAG,YAAY,CAAC;IAE3B,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAC;QAC9C,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAE3B,MAAM,OAAO,GAAG;YACd,OAAO,EAAE,GAAG,EAAE,OAAO,IAAI,uBAAuB;YAChD,GAAG,CAAC,GAAG,CAAC,aAAa;gBACnB,CAAC,CAAC,GAAG;gBACL,CAAC,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;SACtD,CAAC;QAEF,IAAI,YAAY,EAAE;YAAE,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;;YAChD,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAE3C,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QAE3D,qBAAqB,CACnB,UAAU,CAAC,SAAS,EACpB,UAAU,CAAC,KAAK,EAChB,OAAO,CAAC,UAAU,EAClB,UAAU,CAAC,SAAS,CACrB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,GAAQ,EAAE,MAAmB;IACzD,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE;QACnB,GAAG,GAAG;QACN,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAC1E,KAAK,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC;KAChD,CAAC,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAQ,EAAE,MAAmB;IACxD,IAAI,GAAG,CAAC,aAAa;QACnB,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE;YACnB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE;YACpB,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,SAAS;YAC3B,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,GAAG;SAClC,CAAC,CAAC;;QAEH,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE;YACnB,MAAM,EAAE,OAAO;YACf,OAAO,EAAE,gDAAgD;YACzD,IAAI,EAAE,qBAAqB;YAC3B,IAAI,EAAE,EAAE;YACR,UAAU,EAAE,GAAG;SAChB,CAAC,CAAC;AACP,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,KAAyB,EACzB,MAAmB,EACnB,IAAS;IAET,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,SAAiB,EACjB,KAAa,EACb,UAAkB,EAClB,SAAiB;IAEjB,MAAM,cAAc,GAAG,CAAC,UAAkB,EAAE,EAAE;QAC5C,IAAI,UAAU,IAAI,GAAG,IAAI,UAAU,GAAG,GAAG;YAAE,OAAO,UAAU,CAAC;QAC7D,IAAI,UAAU,IAAI,GAAG,IAAI,UAAU,GAAG,GAAG;YAAE,OAAO,UAAU,CAAC;QAC7D,IAAI,UAAU,IAAI,GAAG,IAAI,UAAU,GAAG,GAAG;YAAE,OAAO,UAAU,CAAC;QAC7D,IAAI,UAAU,IAAI,GAAG,IAAI,UAAU,GAAG,GAAG;YAAE,OAAO,UAAU,CAAC;QAC7D,IAAI,UAAU,IAAI,GAAG;YAAE,OAAO,UAAU,CAAC;QACzC,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5D,MAAM,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IAE/C,OAAO,CAAC,IAAI,CACV,iCAAiC,SAAS,6BAA6B,SAAS,IAAI,KAAK,IAAI,WAAW,GAAG,UAAU,mBAAmB,QAAQ,WAAW,CAC5J,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,SAAiB,EACjB,KAA6C,EAC7C,QAAgB,EAChB,SAAkB;IAElB,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,MAAM,CAAC;IACvD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAE1D,MAAM,WAAW,GAAG;QAClB,SAAS,EAAE,UAAU;QACrB,YAAY,EAAE,UAAU;QACxB,KAAK,EAAE,UAAU;KAClB,CAAC;IAEF,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAE/C,OAAO,CAAC,IAAI,CACV,iCAAiC,SAAS,6BAA6B,SAAS,IAAI,UAAU,GAAG,KAAK,WAAW,QAAQ,GAAG,KAAK,EAAE,CACpI,CAAC;AACJ,CAAC","sourcesContent":["import {\n ArkosGatewayErrorHandler,\n ArkosGatewayPipe,\n ArkosSocket,\n} from \"../types\";\nimport { isProduction } from \"../../../utils/helpers/arkos-config.helpers\";\nimport { getHandledError } from \"../../../modules/error-handler/utils/get-handled-error\";\n\nexport async function handleArkosGatewayErrors(\n err: any,\n socket: ArkosSocket,\n errorHandlers: ArkosGatewayErrorHandler[] = [],\n loggerMeta: {\n namespace: string;\n event: string;\n startTime: number;\n },\n ack?: (response: any) => void\n) {\n let emitCalled = false;\n const originalEmit: any = socket.emit.bind(socket);\n\n socket.emit = (...args: any[]) => {\n emitCalled = true;\n return originalEmit(...args);\n };\n\n if (errorHandlers.length) {\n try {\n for (const handler of errorHandlers) await handler(err, socket);\n } catch (catchedErr: any) {\n err = catchedErr;\n emitCalled = false;\n }\n }\n\n socket.emit = originalEmit;\n\n if (!emitCalled) {\n console.error(\"[\\x1b[31mError\\x1b[0m]:\", err);\n err = getHandledError(err);\n\n const payload = {\n message: err?.message ?? \"Internal server error\",\n ...(err.isOperational\n ? err\n : { code: \"InternalServerError\", statusCode: 500 }),\n };\n\n if (isProduction()) sendProductionError(err, socket);\n else sendDevelopmentError(payload, socket);\n\n ack?.({ error: payload.message, ...(payload.meta || {}) });\n\n handleGatewayEventLog(\n loggerMeta.namespace,\n loggerMeta.event,\n payload.statusCode,\n loggerMeta.startTime\n );\n }\n}\n\nfunction sendDevelopmentError(err: any, socket: ArkosSocket): void {\n socket.emit(\"error\", {\n ...err,\n message: err.message?.split?.(\"\\n\")[err.message?.split?.(\"\\n\").length - 1],\n stack: err?.originalError?.stack?.split?.(\"\\n\"),\n });\n}\n\nfunction sendProductionError(err: any, socket: ArkosSocket): void {\n if (err.isOperational)\n socket.emit(\"event\", {\n status: err.status,\n message: err.message,\n meta: err.meta || {},\n code: err.code || \"Unknown\",\n statusCode: err.statusCode || 500,\n });\n else\n socket.emit(\"error\", {\n status: \"error\",\n message: \"Internal server error, please try again later.\",\n code: \"InternalServerError\",\n meta: {},\n statusCode: 500,\n });\n}\n\nexport async function runArkosGatewayPipes(\n pipes: ArkosGatewayPipe[],\n socket: ArkosSocket,\n data: any\n) {\n for (const pipe of pipes) {\n await pipe(socket, data);\n }\n}\n\nexport function handleGatewayEventLog(\n namespace: string,\n event: string,\n statusCode: number,\n startTime: number\n) {\n const getStatusColor = (statusCode: number) => {\n if (statusCode >= 100 && statusCode < 200) return \"\\x1b[36m\";\n if (statusCode >= 200 && statusCode < 300) return \"\\x1b[32m\";\n if (statusCode >= 300 && statusCode < 400) return \"\\x1b[33m\";\n if (statusCode >= 400 && statusCode < 500) return \"\\x1b[33m\";\n if (statusCode >= 500) return \"\\x1b[31m\";\n return \"\\x1b[0m\";\n };\n\n const duration = Date.now() - startTime;\n const now = new Date();\n const date = now.toISOString().split(\"T\")[0];\n const time = now.toTimeString().split(\" \")[0];\n const timestamp = isProduction() ? `${date} ${time}` : time;\n const statusColor = getStatusColor(statusCode);\n\n console.info(\n `[\\x1b[36mInfo\\x1b[0m] \\x1b[90m${timestamp}\\x1b[0m \\x1b[35mWS\\x1b[0m ${namespace} ${event} ${statusColor}${statusCode}\\x1b[0m \\x1b[35m${duration}ms\\x1b[0m`\n );\n}\n\nexport function handleGatewayLifecycleLog(\n namespace: string,\n event: \"connected\" | \"disconnected\" | \"error\",\n socketId: string,\n errorType?: string\n) {\n const isProduction = process.env.ARKOS_BUILD == \"true\";\n const now = new Date();\n const date = now.toISOString().split(\"T\")[0];\n const time = now.toTimeString().split(\" \")[0];\n const timestamp = isProduction ? `${date} ${time}` : time;\n\n const eventColors = {\n connected: \"\\x1b[32m\",\n disconnected: \"\\x1b[33m\",\n error: \"\\x1b[31m\",\n };\n\n const eventColor = eventColors[event];\n const extra = errorType ? ` ${errorType}` : \"\";\n\n console.info(\n `[\\x1b[36mInfo\\x1b[0m] \\x1b[90m${timestamp}\\x1b[0m \\x1b[35mWS\\x1b[0m ${namespace} ${eventColor}${event}\\x1b[0m ${socketId}${extra}`\n );\n}\n"]}
@@ -0,0 +1,45 @@
1
+ export class MemoryGatewayStore {
2
+ rl = new Map();
3
+ dedup = new Map();
4
+ async increment(key, windowMs) {
5
+ const now = Date.now();
6
+ const entry = this.rl.get(key);
7
+ if (!entry || entry.resetAt <= now) {
8
+ const next = { count: 1, resetAt: now + windowMs };
9
+ this.rl.set(key, next);
10
+ return next;
11
+ }
12
+ entry.count++;
13
+ return entry;
14
+ }
15
+ async clear(prefix) {
16
+ for (const key of this.rl.keys())
17
+ if (key.startsWith(prefix))
18
+ this.rl.delete(key);
19
+ for (const [key, timer] of this.dedup)
20
+ if (key.startsWith(prefix)) {
21
+ clearTimeout(timer);
22
+ this.dedup.delete(key);
23
+ }
24
+ }
25
+ async has(key) {
26
+ return this.dedup.has(key);
27
+ }
28
+ async set(key, ttl) {
29
+ if (this.dedup.has(key))
30
+ clearTimeout(this.dedup.get(key));
31
+ const timer = setTimeout(() => this.dedup.delete(key), ttl * 1000);
32
+ timer.unref();
33
+ this.dedup.set(key, timer);
34
+ }
35
+ async setIfNotExists(key, ttl) {
36
+ if (this.dedup.has(key))
37
+ return false;
38
+ const timer = setTimeout(() => this.dedup.delete(key), ttl * 1000);
39
+ timer.unref();
40
+ this.dedup.set(key, timer);
41
+ return true;
42
+ }
43
+ }
44
+ export const defaultGatewayStore = new MemoryGatewayStore();
45
+ //# sourceMappingURL=memory-gateway-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-gateway-store.js","sourceRoot":"","sources":["../../../../../src/components/arkos-gateway/utils/memory-gateway-store.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,kBAAkB;IACrB,EAAE,GAAG,IAAI,GAAG,EAA8C,CAAC;IAC3D,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;IAElD,KAAK,CAAC,SAAS,CAAC,GAAW,EAAE,QAAgB;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,IAAI,GAAG,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,GAAG,QAAQ,EAAE,CAAC;YACnD,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,MAAc;QACxB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE;YAC9B,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;gBAAE,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAClD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK;YACnC,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACzB,CAAC;IACL,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,GAAW;QAChC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC;QACnE,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,GAAW,EAAE,GAAW;QAC3C,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAEtC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC;QACnE,KAAK,CAAC,KAAK,EAAE,CAAC;QAEd,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAE3B,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,kBAAkB,EAAE,CAAC","sourcesContent":["import { ArkosGatewayStore } from \"../types\";\n\nexport class MemoryGatewayStore implements ArkosGatewayStore {\n private rl = new Map<string, { count: number; resetAt: number }>();\n private dedup = new Map<string, NodeJS.Timeout>();\n\n async increment(key: string, windowMs: number) {\n const now = Date.now();\n const entry = this.rl.get(key);\n if (!entry || entry.resetAt <= now) {\n const next = { count: 1, resetAt: now + windowMs };\n this.rl.set(key, next);\n return next;\n }\n entry.count++;\n return entry;\n }\n\n async clear(prefix: string) {\n for (const key of this.rl.keys())\n if (key.startsWith(prefix)) this.rl.delete(key);\n for (const [key, timer] of this.dedup)\n if (key.startsWith(prefix)) {\n clearTimeout(timer);\n this.dedup.delete(key);\n }\n }\n\n async has(key: string) {\n return this.dedup.has(key);\n }\n\n async set(key: string, ttl: number) {\n if (this.dedup.has(key)) clearTimeout(this.dedup.get(key)!);\n const timer = setTimeout(() => this.dedup.delete(key), ttl * 1000);\n timer.unref();\n this.dedup.set(key, timer);\n }\n\n async setIfNotExists(key: string, ttl: number): Promise<boolean> {\n if (this.dedup.has(key)) return false;\n\n const timer = setTimeout(() => this.dedup.delete(key), ttl * 1000);\n timer.unref();\n\n this.dedup.set(key, timer);\n\n return true;\n }\n}\n\nexport const defaultGatewayStore = new MemoryGatewayStore();\n"]}
@@ -0,0 +1,40 @@
1
+ export class MultiTierArkosGatewayStore {
2
+ tiers;
3
+ constructor(tiers) {
4
+ this.tiers = tiers;
5
+ }
6
+ async increment(key, windowMs) {
7
+ const l1 = await this.tiers[0].increment(key, windowMs);
8
+ for (const tier of this.tiers.slice(1))
9
+ tier.increment(key, windowMs);
10
+ return l1;
11
+ }
12
+ async clear(prefix) {
13
+ await Promise.all(this.tiers.map((t) => t.clear(prefix)));
14
+ }
15
+ async has(key) {
16
+ for (const tier of this.tiers) {
17
+ if (await tier.has(key))
18
+ return true;
19
+ }
20
+ return false;
21
+ }
22
+ async set(key, ttl) {
23
+ await Promise.all(this.tiers.map((t) => t.set(key, ttl)));
24
+ }
25
+ async setIfNotExists(key, ttl) {
26
+ for (const tier of this.tiers) {
27
+ const acquired = await tier.setIfNotExists(key, ttl);
28
+ if (acquired) {
29
+ for (const t of this.tiers) {
30
+ if (t !== tier) {
31
+ t.set(key, ttl).catch(() => { });
32
+ }
33
+ }
34
+ return true;
35
+ }
36
+ }
37
+ return false;
38
+ }
39
+ }
40
+ //# sourceMappingURL=multi-tier-arkos-gateway-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-tier-arkos-gateway-store.js","sourceRoot":"","sources":["../../../../../src/components/arkos-gateway/utils/multi-tier-arkos-gateway-store.ts"],"names":[],"mappings":"AASA,MAAM,OAAO,0BAA0B;IACjB;IAApB,YAAoB,KAA0B;QAA1B,UAAK,GAAL,KAAK,CAAqB;IAAG,CAAC;IAElD,KAAK,CAAC,SAAS,CAAC,GAAW,EAAE,QAAgB;QAE3C,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACxD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;YAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACtE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,MAAc;QACxB,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC;QACvC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,GAAW;QAChC,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,GAAW,EAAE,GAAW;QAC3C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAErD,IAAI,QAAQ,EAAE,CAAC;gBACb,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBAC3B,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;wBACf,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;oBAClC,CAAC;gBACH,CAAC;gBAED,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;CACF","sourcesContent":["import { ArkosGatewayStore } from \"../types\";\n\n/**\n * Multi-tier store that chains multiple stores together.\n * Writes go to all tiers. Reads check tiers in order, promoting hits to faster tiers.\n *\n * @example\n * new MultiTierArkosStore([new MemoryArkosStore(), new RedisArkosStore(redis)])\n */\nexport class MultiTierArkosGatewayStore implements ArkosGatewayStore {\n constructor(private tiers: ArkosGatewayStore[]) {}\n\n async increment(key: string, windowMs: number) {\n // L1 first — if valid, sync to slower tiers and return\n const l1 = await this.tiers[0].increment(key, windowMs);\n for (const tier of this.tiers.slice(1)) tier.increment(key, windowMs);\n return l1;\n }\n\n async clear(prefix: string) {\n await Promise.all(this.tiers.map((t) => t.clear(prefix)));\n }\n\n async has(key: string) {\n for (const tier of this.tiers) {\n if (await tier.has(key)) return true;\n }\n return false;\n }\n\n async set(key: string, ttl: number) {\n await Promise.all(this.tiers.map((t) => t.set(key, ttl)));\n }\n\n async setIfNotExists(key: string, ttl: number): Promise<boolean> {\n for (const tier of this.tiers) {\n const acquired = await tier.setIfNotExists(key, ttl);\n\n if (acquired) {\n for (const t of this.tiers) {\n if (t !== tier) {\n t.set(key, ttl).catch(() => {});\n }\n }\n\n return true;\n }\n }\n\n return false;\n }\n}\n"]}
@@ -0,0 +1,13 @@
1
+ export async function checkRateLimit(socketId, event, options, store) {
2
+ const windowMs = options.windowMs ?? 60_000;
3
+ const max = options.max ?? 100;
4
+ const key = `arkos::rl:${socketId}:${event}`;
5
+ const { count, resetAt } = await store.increment(key, windowMs);
6
+ if (count > max)
7
+ return { allowed: false, retryAfter: resetAt - Date.now() };
8
+ return { allowed: true };
9
+ }
10
+ export async function clearRateLimitForSocket(socketId, store) {
11
+ await store.clear(`arkos::rl:${socketId}`);
12
+ }
13
+ //# sourceMappingURL=rate-limiter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../../../../src/components/arkos-gateway/utils/rate-limiter.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,QAAgB,EAChB,KAAa,EACb,OAAkC,EAClC,KAAwB;IAExB,MAAM,QAAQ,GAAI,OAAO,CAAC,QAAmB,IAAI,MAAM,CAAC;IACxD,MAAM,GAAG,GAAI,OAAO,CAAC,GAAc,IAAI,GAAG,CAAC;IAC3C,MAAM,GAAG,GAAG,aAAa,QAAQ,IAAI,KAAK,EAAE,CAAC;IAE7C,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAEhE,IAAI,KAAK,GAAG,GAAG;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IAE7E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,QAAgB,EAChB,KAAwB;IAExB,MAAM,KAAK,CAAC,KAAK,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC;AAC7C,CAAC","sourcesContent":["import { Options as RateLimitOptions } from \"express-rate-limit\";\nimport { ArkosGatewayStore } from \"../types\";\n\n/**\n * Checks whether a socket has exceeded the rate limit for a given event.\n * Returns true if the request is allowed, false if rate limited.\n */\nexport async function checkRateLimit(\n socketId: string,\n event: string,\n options: Partial<RateLimitOptions>,\n store: ArkosGatewayStore\n): Promise<{ allowed: boolean; retryAfter?: number }> {\n const windowMs = (options.windowMs as number) ?? 60_000;\n const max = (options.max as number) ?? 100;\n const key = `arkos::rl:${socketId}:${event}`;\n\n const { count, resetAt } = await store.increment(key, windowMs);\n\n if (count > max) return { allowed: false, retryAfter: resetAt - Date.now() };\n\n return { allowed: true };\n}\n\nexport async function clearRateLimitForSocket(\n socketId: string,\n store: ArkosGatewayStore\n) {\n await store.clear(`arkos::rl:${socketId}`);\n}\n"]}
@@ -1,8 +1,6 @@
1
1
  const LOADABLES = ["ArkosRouteHook", "ArkosServiceHook"];
2
2
  export class ArkosLoadableRegistry {
3
- constructor() {
4
- this.items = new Map();
5
- }
3
+ items = new Map();
6
4
  register(item) {
7
5
  const type = item.__type;
8
6
  const moduleName = item.moduleName;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/arkos-loadable-registry/index.ts"],"names":[],"mappings":"AAGA,MAAM,SAAS,GAAG,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;AAMzD,MAAM,OAAO,qBAAqB;IAAlC;QACmB,UAAK,GAA4C,IAAI,GAAG,EAAE,CAAC;IAuC9E,CAAC;IAjCC,QAAQ,CAAC,IAAmB;QAC1B,MAAM,IAAI,GAAI,IAAY,CAAC,MAAM,CAAC;QAClC,MAAM,UAAU,GAAI,IAAY,CAAC,UAAU,CAAC;QAE5C,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC3B,MAAM,KAAK,CACT,8CAA8C,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,GAAG,CAC5F,CAAC;QAEJ,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QAE3D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;IAKD,OAAO,CACL,YAAmD,EACnD,UAA2B;QAE3B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;IAC/D,CAAC;IAKD,OAAO,CACL,YAAmD,EACnD,UAAkB;QAElB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC;IAChE,CAAC;CACF;AAED,MAAM,gBAAgB,GAAG,IAAI,qBAAqB,EAAE,CAAC;AAErD,eAAe,gBAAgB,CAAC","sourcesContent":["import { ArkosLoadable } from \"../../types/arkos\";\nimport { ArkosModuleType } from \"../arkos-route-hook/types\";\n\nconst LOADABLES = [\"ArkosRouteHook\", \"ArkosServiceHook\"];\n\n/**\n * Registry for all items loaded via `app.load()`.\n * Instantiated once at app start and passed through the entire Arkos chain.\n */\nexport class ArkosLoadableRegistry {\n private readonly items: Map<string, Map<string, ArkosLoadable>> = new Map();\n\n /**\n * Registers a loadable item into the registry.\n * Called internally by `app.load()`.\n */\n register(item: ArkosLoadable): void {\n const type = (item as any).__type;\n const moduleName = (item as any).moduleName;\n\n if (!LOADABLES.includes(type))\n throw Error(\n `Invalid loadable component, expected on of ${LOADABLES.join(\", \")} but received \"${item}\"`\n );\n\n if (!this.items.has(type)) this.items.set(type, new Map());\n\n this.items.get(type)!.set(moduleName, item);\n }\n\n /**\n * Returns the interceptor for the given module name, or `null` if not registered.\n */\n getItem(\n loadableType: \"ArkosRouteHook\" | \"ArkosServiceHook\",\n moduleName: ArkosModuleType\n ): ArkosLoadable | null {\n return this.items.get(loadableType)?.get(moduleName) ?? null;\n }\n\n /**\n * Returns true if an interceptor is registered for the given module name.\n */\n hasItem(\n loadableType: \"ArkosRouteHook\" | \"ArkosServiceHook\",\n moduleName: string\n ): boolean {\n return this.items.get(loadableType)?.has(moduleName) ?? false;\n }\n}\n\nconst loadableRegistry = new ArkosLoadableRegistry();\n\nexport default loadableRegistry;\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/arkos-loadable-registry/index.ts"],"names":[],"mappings":"AAGA,MAAM,SAAS,GAAG,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;AAMzD,MAAM,OAAO,qBAAqB;IACf,KAAK,GAA4C,IAAI,GAAG,EAAE,CAAC;IAM5E,QAAQ,CAAC,IAAmB;QAC1B,MAAM,IAAI,GAAI,IAAY,CAAC,MAAM,CAAC;QAClC,MAAM,UAAU,GAAI,IAAY,CAAC,UAAU,CAAC;QAE5C,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC3B,MAAM,KAAK,CACT,8CAA8C,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,GAAG,CAC5F,CAAC;QAEJ,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QAE3D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;IAKD,OAAO,CACL,YAAmD,EACnD,UAA2B;QAE3B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;IAC/D,CAAC;IAKD,OAAO,CACL,YAAmD,EACnD,UAAkB;QAElB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC;IAChE,CAAC;CACF;AAED,MAAM,gBAAgB,GAAG,IAAI,qBAAqB,EAAE,CAAC;AAErD,eAAe,gBAAgB,CAAC","sourcesContent":["import { ArkosLoadable } from \"../../types/arkos\";\nimport { ArkosModuleType } from \"../arkos-route-hook/types\";\n\nconst LOADABLES = [\"ArkosRouteHook\", \"ArkosServiceHook\"];\n\n/**\n * Registry for all items loaded via `app.load()`.\n * Instantiated once at app start and passed through the entire Arkos chain.\n */\nexport class ArkosLoadableRegistry {\n private readonly items: Map<string, Map<string, ArkosLoadable>> = new Map();\n\n /**\n * Registers a loadable item into the registry.\n * Called internally by `app.load()`.\n */\n register(item: ArkosLoadable): void {\n const type = (item as any).__type;\n const moduleName = (item as any).moduleName;\n\n if (!LOADABLES.includes(type))\n throw Error(\n `Invalid loadable component, expected on of ${LOADABLES.join(\", \")} but received \"${item}\"`\n );\n\n if (!this.items.has(type)) this.items.set(type, new Map());\n\n this.items.get(type)!.set(moduleName, item);\n }\n\n /**\n * Returns the interceptor for the given module name, or `null` if not registered.\n */\n getItem(\n loadableType: \"ArkosRouteHook\" | \"ArkosServiceHook\",\n moduleName: ArkosModuleType\n ): ArkosLoadable | null {\n return this.items.get(loadableType)?.get(moduleName) ?? null;\n }\n\n /**\n * Returns true if an interceptor is registered for the given module name.\n */\n hasItem(\n loadableType: \"ArkosRouteHook\" | \"ArkosServiceHook\",\n moduleName: string\n ): boolean {\n return this.items.get(loadableType)?.has(moduleName) ?? false;\n }\n}\n\nconst loadableRegistry = new ArkosLoadableRegistry();\n\nexport default loadableRegistry;\n"]}
@@ -13,7 +13,9 @@ function buildPolicy(resource, store) {
13
13
  action,
14
14
  rule: config,
15
15
  };
16
- const checker = (user) => authService.permission(action, resource, { [action]: config || {} })(user);
16
+ const checker = authService.permission(action, resource, {
17
+ [action]: config || {},
18
+ });
17
19
  const canKey = `can${action.charAt(0).toUpperCase()}${action.slice(1)}`;
18
20
  return [
19
21
  [action, authEntry],
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/arkos-policy/index.ts"],"names":[],"mappings":"AAQA,OAAO,WAAW,MAAM,iCAAiC,CAAC;AA+B1D,MAAM,UAAU,WAAW,CACzB,QAAmB;IAEnB,OAAO,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,WAAW,CAClB,QAAmB,EACnB,KAAsC;IAEtC,MAAM,IAAI,GAAG,CACX,MAAe,EACf,MAAuB,EAC2B,EAAE;QACpD,MAAM,QAAQ,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAChD,OAAO,WAAW,CAAgC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACxE,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,MAAM,CAAC,WAAW,CACtC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE;QACjD,MAAM,SAAS,GAA8C;YAC3D,QAAQ;YACR,MAAM;YACN,IAAI,EAAE,MAAM;SACb,CAAC;QAEF,MAAM,OAAO,GAAkB,CAAC,IAAW,EAAoB,EAAE,CAC/D,WAAW,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,EAAE,EAAE,CAAC,CAClE,IAAI,CACL,CAAC;QAEJ,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAExE,OAAO;YACL,CAAC,MAAM,EAAE,SAAS,CAAC;YACnB,CAAC,MAAM,EAAE,OAAO,CAAC;SAClB,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;IAEF,OAAO;QACL,MAAM,EAAE,aAAsB;QAC9B,QAAQ;QACR,IAAI;QACJ,GAAG,aAAa;KACoC,CAAC;AACzD,CAAC","sourcesContent":["import { User } from \"../../types\";\nimport {\n ArkosPolicyRule,\n IArkosPolicy,\n PolicyAuthEntry,\n PolicyChecker,\n PolicyWithActions,\n} from \"./types\";\nimport authService from \"../../modules/auth/auth.service\";\n\n/**\n * Creates a typed policy for a Prisma model resource.\n *\n * Each `.rule()` call registers an action and returns the policy\n * with a typed `can{Action}` permission checker and a typed `{Action}`\n * entry — both passable to the `authentication` field on `ArkosRouteHook`\n * and `ArkosRouter`, and callable for fine-grained permission checks.\n *\n * @param resource - The resource name in kebab-case (e.g. `\"user\"`, `\"blog-post\"`)\n *\n * @example\n * ```ts\n * const userPolicy = ArkosPolicy(\"user\")\n * .rule(\"Create\", [\"Admin\", \"Editor\"])\n * .rule(\"View\", \"*\")\n * .rule(\"Delete\", [\"Admin\"]);\n *\n * // Pass to authentication field\n * userRouter.post({ path: \"/users\", authentication: userPolicy.Create });\n * userRouteHook.deleteOne({ authentication: userPolicy.Delete });\n *\n * // Fine-grained check\n * if (userPolicy.canCreate(req.user)) { ... }\n *\n * export default userPolicy;\n * ```\n *\n * @see {@link https://www.arkosjs.com/docs/api-referency/arkos-policy}\n */\nexport function ArkosPolicy<TResource extends string>(\n resource: TResource\n): IArkosPolicy<TResource, never> {\n return buildPolicy(resource, {});\n}\n\nfunction buildPolicy<TResource extends string, TActions extends string>(\n resource: TResource,\n store: Record<string, ArkosPolicyRule>\n): PolicyWithActions<TResource, TActions> {\n const rule = <TAction extends string>(\n action: TAction,\n config: ArkosPolicyRule\n ): PolicyWithActions<TResource, TActions | TAction> => {\n const newStore = { ...store, [action]: config };\n return buildPolicy<TResource, TActions | TAction>(resource, newStore);\n };\n\n const actionEntries = Object.fromEntries(\n Object.entries(store).flatMap(([action, config]) => {\n const authEntry: PolicyAuthEntry<TResource, typeof action> = {\n resource,\n action,\n rule: config,\n };\n\n const checker: PolicyChecker = (user?: User): Promise<boolean> =>\n authService.permission(action, resource, { [action]: config || {} })(\n user\n );\n\n const canKey = `can${action.charAt(0).toUpperCase()}${action.slice(1)}`;\n\n return [\n [action, authEntry],\n [canKey, checker],\n ];\n })\n );\n\n return {\n __type: \"ArkosPolicy\" as const,\n resource,\n rule,\n ...actionEntries,\n } as unknown as PolicyWithActions<TResource, TActions>;\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/arkos-policy/index.ts"],"names":[],"mappings":"AAOA,OAAO,WAAW,MAAM,iCAAiC,CAAC;AA+B1D,MAAM,UAAU,WAAW,CACzB,QAAmB;IAEnB,OAAO,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,WAAW,CAClB,QAAmB,EACnB,KAAsC;IAEtC,MAAM,IAAI,GAAG,CACX,MAAe,EACf,MAAuB,EAC2B,EAAE;QACpD,MAAM,QAAQ,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAChD,OAAO,WAAW,CAAgC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACxE,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,MAAM,CAAC,WAAW,CACtC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE;QACjD,MAAM,SAAS,GAA8C;YAC3D,QAAQ;YACR,MAAM;YACN,IAAI,EAAE,MAAM;SACb,CAAC;QAEF,MAAM,OAAO,GAAkB,WAAW,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE;YACtE,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,EAAE;SACvB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAExE,OAAO;YACL,CAAC,MAAM,EAAE,SAAS,CAAC;YACnB,CAAC,MAAM,EAAE,OAAO,CAAC;SAClB,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;IAEF,OAAO;QACL,MAAM,EAAE,aAAsB;QAC9B,QAAQ;QACR,IAAI;QACJ,GAAG,aAAa;KACoC,CAAC;AACzD,CAAC","sourcesContent":["import {\n ArkosPolicyRule,\n IArkosPolicy,\n PolicyAuthEntry,\n PolicyChecker,\n PolicyWithActions,\n} from \"./types\";\nimport authService from \"../../modules/auth/auth.service\";\n\n/**\n * Creates a typed policy for a Prisma model resource.\n *\n * Each `.rule()` call registers an action and returns the policy\n * with a typed `can{Action}` permission checker and a typed `{Action}`\n * entry — both passable to the `authentication` field on `ArkosRouteHook`\n * and `ArkosRouter`, and callable for fine-grained permission checks.\n *\n * @param resource - The resource name in kebab-case (e.g. `\"user\"`, `\"blog-post\"`)\n *\n * @example\n * ```ts\n * const userPolicy = ArkosPolicy(\"user\")\n * .rule(\"Create\", [\"Admin\", \"Editor\"])\n * .rule(\"View\", \"*\")\n * .rule(\"Delete\", [\"Admin\"]);\n *\n * // Pass to authentication field\n * userRouter.post({ path: \"/users\", authentication: userPolicy.Create });\n * userRouteHook.deleteOne({ authentication: userPolicy.Delete });\n *\n * // Fine-grained check\n * if (userPolicy.canCreate(req.user)) { ... }\n *\n * export default userPolicy;\n * ```\n *\n * @see {@link https://www.arkosjs.com/docs/api-referency/arkos-policy}\n */\nexport function ArkosPolicy<TResource extends string>(\n resource: TResource\n): IArkosPolicy<TResource, never> {\n return buildPolicy(resource, {});\n}\n\nfunction buildPolicy<TResource extends string, TActions extends string>(\n resource: TResource,\n store: Record<string, ArkosPolicyRule>\n): PolicyWithActions<TResource, TActions> {\n const rule = <TAction extends string>(\n action: TAction,\n config: ArkosPolicyRule\n ): PolicyWithActions<TResource, TActions | TAction> => {\n const newStore = { ...store, [action]: config };\n return buildPolicy<TResource, TActions | TAction>(resource, newStore);\n };\n\n const actionEntries = Object.fromEntries(\n Object.entries(store).flatMap(([action, config]) => {\n const authEntry: PolicyAuthEntry<TResource, typeof action> = {\n resource,\n action,\n rule: config,\n };\n\n const checker: PolicyChecker = authService.permission(action, resource, {\n [action]: config || {},\n });\n\n const canKey = `can${action.charAt(0).toUpperCase()}${action.slice(1)}`;\n\n return [\n [action, authEntry],\n [canKey, checker],\n ];\n })\n );\n\n return {\n __type: \"ArkosPolicy\" as const,\n resource,\n rule,\n ...actionEntries,\n } as unknown as PolicyWithActions<TResource, TActions>;\n}\n"]}
@@ -1,4 +1,4 @@
1
- export function ArkosRouteHook(moduleName) {
1
+ export function ArkosRouteHook(moduleName, configs) {
2
2
  const store = {};
3
3
  const makeMethod = (name) => (config) => {
4
4
  store[name] = config;
@@ -8,6 +8,7 @@ export function ArkosRouteHook(moduleName) {
8
8
  __type: "ArkosRouteHook",
9
9
  moduleName,
10
10
  _store: store,
11
+ _configs: configs || {},
11
12
  };
12
13
  const methods = {};
13
14
  if (moduleName === "auth") {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/arkos-route-hook/index.ts"],"names":[],"mappings":"AAiCA,MAAM,UAAU,cAAc,CAC5B,UAAa;IAEb,MAAM,KAAK,GAAqB,EAAE,CAAC;IAEnC,MAAM,UAAU,GACd,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,MAAkC,EAAE,EAAE;QACvD,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEJ,MAAM,IAAI,GAAG;QACX,MAAM,EAAE,gBAAyB;QACjC,UAAU;QACV,MAAM,EAAE,KAAK;KACd,CAAC;IAEF,MAAM,OAAO,GAGT,EAAE,CAAC;IAEP,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;QAC1B,KAAK,MAAM,IAAI,IAAI;YACjB,OAAO;YACP,OAAO;YACP,QAAQ;YACR,QAAQ;YACR,UAAU;YACV,gBAAgB;SACjB,EAAE,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;SAAM,IAAI,UAAU,KAAK,aAAa,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;QACvE,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,IAAI,IAAI;YACjB,WAAW;YACX,SAAS;YACT,UAAU;YACV,WAAW;YACX,WAAW;YACX,YAAY;YACZ,YAAY;YACZ,YAAY;SACb,EAAE,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAE3C,OAAO,KAA2C,CAAC;AACrD,CAAC","sourcesContent":["import {\n ArkosModuleType,\n ArkosRouteHookReturn,\n ArkosRouteHookMethodConfig,\n} from \"./types\";\n\ninterface InterceptorStore {\n [methodName: string]: ArkosRouteHookMethodConfig;\n}\n\n/**\n * Creates an interceptor for a built-in Arkos module or a generated model route.\n *\n * The returned instance exposes only the methods relevant to that module,\n * and is registered into the app via `app.load()`.\n *\n * @param moduleName - The module to intercept. Use `\"auth\"` or `\"file-upload\"`\n * for built-in modules, or any prisma model name string for generated CRUD routes.\n *\n * @example\n * ```ts\n * const userInterceptor = ArkosRouteHook(\"user\");\n *\n * userInterceptor.createOne({\n * validation: { body: CreateUserSchema },\n * before: [sanitize],\n * after: [notify]\n * });\n *\n * app.load(userInterceptor);\n * ```\n * @see {@link https://www.arkosjs.com/docs/core-concepts/components/interceptors}\n */\nexport function ArkosRouteHook<T extends ArkosModuleType>(\n moduleName: T\n): ArkosRouteHookReturn<T> {\n const store: InterceptorStore = {};\n\n const makeMethod =\n (name: string) => (config: ArkosRouteHookMethodConfig) => {\n store[name] = config;\n return proxy;\n };\n\n const base = {\n __type: \"ArkosRouteHook\" as const,\n moduleName,\n _store: store,\n };\n\n const methods: Record<\n string,\n (config: ArkosRouteHookMethodConfig) => unknown\n > = {};\n\n if (moduleName === \"auth\") {\n for (const name of [\n \"getMe\",\n \"login\",\n \"logout\",\n \"signup\",\n \"updateMe\",\n \"updatePassword\",\n ]) {\n methods[name] = makeMethod(name);\n }\n } else if (moduleName === \"file-upload\" || moduleName === \"fileUpload\") {\n for (const name of [\"findFile\", \"uploadFile\", \"updateFile\", \"deleteFile\"]) {\n methods[name] = makeMethod(name);\n }\n } else {\n for (const name of [\n \"createOne\",\n \"findOne\",\n \"findMany\",\n \"updateOne\",\n \"deleteOne\",\n \"createMany\",\n \"updateMany\",\n \"deleteMany\",\n ]) {\n methods[name] = makeMethod(name);\n }\n }\n\n const proxy = Object.assign(base, methods);\n\n return proxy as unknown as ArkosRouteHookReturn<T>;\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/arkos-route-hook/index.ts"],"names":[],"mappings":"AAkCA,MAAM,UAAU,cAAc,CAC5B,UAAa,EAAE,OAKd;IAED,MAAM,KAAK,GAAqB,EAAE,CAAC;IAEnC,MAAM,UAAU,GACd,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,MAAkC,EAAE,EAAE;QACvD,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEJ,MAAM,IAAI,GAAG;QACX,MAAM,EAAE,gBAAyB;QACjC,UAAU;QACV,MAAM,EAAE,KAAK;QACb,QAAQ,EAAE,OAAO,IAAI,EAAE;KACxB,CAAC;IAEF,MAAM,OAAO,GAGT,EAAE,CAAC;IAEP,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;QAC1B,KAAK,MAAM,IAAI,IAAI;YACjB,OAAO;YACP,OAAO;YACP,QAAQ;YACR,QAAQ;YACR,UAAU;YACV,gBAAgB;SACjB,EAAE,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;SAAM,IAAI,UAAU,KAAK,aAAa,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;QACvE,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,IAAI,IAAI;YACjB,WAAW;YACX,SAAS;YACT,UAAU;YACV,WAAW;YACX,WAAW;YACX,YAAY;YACZ,YAAY;YACZ,YAAY;SACb,EAAE,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAE3C,OAAO,KAA2C,CAAC;AACrD,CAAC","sourcesContent":["import { ArkosPrismaService } from \"../../exports/services\";\nimport {\n ArkosModuleType,\n ArkosRouteHookReturn,\n ArkosRouteHookMethodConfig,\n} from \"./types\";\n\ninterface InterceptorStore {\n [methodName: string]: ArkosRouteHookMethodConfig;\n}\n\n/**\n * Creates an interceptor for a built-in Arkos module or a generated model route.\n *\n * The returned instance exposes only the methods relevant to that module,\n * and is registered into the app via `app.load()`.\n *\n * @param moduleName - The module to intercept. Use `\"auth\"` or `\"file-upload\"`\n * for built-in modules, or any prisma model name string for generated CRUD routes.\n *\n * @example\n * ```ts\n * const userRouteHook = ArkosRouteHook(\"user\");\n *\n * userRouteHook.createOne({\n * validation: { body: CreateUserSchema },\n * before: [sanitize],\n * after: [notify]\n * });\n *\n * app.load(userRouteHook);\n * ```\n * @see {@link https://www.arkosjs.com/docs/core-concepts/components/route-hooks}\n */\nexport function ArkosRouteHook<T extends ArkosModuleType>(\n moduleName: T, configs?: {\n /**\n * ArkosPrismaService instace for such model\n */\n service?: ArkosPrismaService<T>\n }\n): ArkosRouteHookReturn<T> {\n const store: InterceptorStore = {};\n\n const makeMethod =\n (name: string) => (config: ArkosRouteHookMethodConfig) => {\n store[name] = config;\n return proxy;\n };\n\n const base = {\n __type: \"ArkosRouteHook\" as const,\n moduleName,\n _store: store,\n _configs: configs || {},\n };\n\n const methods: Record<\n string,\n (config: ArkosRouteHookMethodConfig) => unknown\n > = {};\n\n if (moduleName === \"auth\") {\n for (const name of [\n \"getMe\",\n \"login\",\n \"logout\",\n \"signup\",\n \"updateMe\",\n \"updatePassword\",\n ]) {\n methods[name] = makeMethod(name);\n }\n } else if (moduleName === \"file-upload\" || moduleName === \"fileUpload\") {\n for (const name of [\"findFile\", \"uploadFile\", \"updateFile\", \"deleteFile\"]) {\n methods[name] = makeMethod(name);\n }\n } else {\n for (const name of [\n \"createOne\",\n \"findOne\",\n \"findMany\",\n \"updateOne\",\n \"deleteOne\",\n \"createMany\",\n \"updateMany\",\n \"deleteMany\",\n ]) {\n methods[name] = makeMethod(name);\n }\n }\n\n const proxy = Object.assign(base, methods);\n\n return proxy as unknown as ArkosRouteHookReturn<T>;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"reader.js","sourceRoot":"","sources":["../../../../src/components/arkos-route-hook/reader.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,MAAM,0CAA0C,CAAC;AAUxE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AA4BhD,MAAM,oBAAoB;IAChB,YAAY,CAAC,UAA2B;QAC9C,OAAO,gBAAgB,CAAC,OAAO,CAAC,gBAAgB,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3E,CAAC;IAEO,QAAQ,CACd,UAA2B;QAE3B,OAAQ,IAAI,CAAC,YAAY,CAAC,UAAU,CAAS,EAAE,MAAM,IAAI,EAAE,CAAC;IAC9D,CAAC;IAKD,YAAY,CACV,UAAmB,EACnB,SAAqC;QAErC,OAAO,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC;IAKD,aAAa,CACX,UAAmB,EACnB,SAAqC;QAErC,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,SAAmB,CAAC,IAAI,IAAI,CAAC;IAChE,CAAC;IAKD,QAAQ,CACN,UAAmB,EACnB,SAAqC;QAErC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,SAAmB,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QACvB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;QAC1C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IACpC,CAAC;IAMD,cAAc,CACZ,UAAmB,EACnB,SAAqC;QAErC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,SAAmB,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,GAAG,MAAM,CAAC;QACtE,OAAO,WAAW,CAAC;IACrB,CAAC;IAKD,aAAa,CACX,UAAmB,EACnB,SAAqC;QAErC,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,SAAmB,CAAC,EAAE,UAAU,CAAC;IACpE,CAAC;IAKD,YAAY,CACV,UAAmB,EACnB,SAAqC;QAQrC,MAAM,EACJ,MAAM,GAAG,EAAE,EACX,KAAK,GAAG,EAAE,EACV,OAAO,GAAG,EAAE,GACb,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC;QAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC;QACrE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;IAC7D,CAAC;CACF;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,oBAAoB,EAAE,CAAC","sourcesContent":["import loadableRegistry from \"../../components/arkos-loadable-registry\";\nimport {\n ArkosModuleType,\n ArkosRouteHookHooks,\n ArkosRouteHookMethodConfig,\n ArkosRouteHookInstance,\n ArkosAuthRouteHookInstance,\n ArkosFileUploadRouteHookInstance,\n} from \"./types\";\nimport { ArkosRequestHandler, ArkosRouteConfig } from \"../../exports\";\nimport { kebabCase } from \"../../exports/utils\";\n\ntype PrismaOperations = keyof Omit<\n ArkosRouteHookInstance<any>,\n \"__type\" | \"moduleName\"\n>;\n\nexport type OperationByModule<TModule extends ArkosModuleType> =\n TModule extends \"file-upload\"\n ? keyof Omit<ArkosFileUploadRouteHookInstance, \"__type\" | \"moduleName\">\n : TModule extends \"auth\"\n ? keyof Omit<ArkosAuthRouteHookInstance, \"__type\" | \"moduleName\">\n : PrismaOperations;\n\n/**\n * Reader for `ArkosRouteHook` instances.\n * Reads config from the global loadable registry by module name.\n *\n * @example\n * ```ts\n * routeHookReader.getHooks(\"user\", \"findMany\") // { before, after, onError }\n * routeHookReader.getRouteConfig(\"user\", \"findMany\") // ArkosRouteConfig minus path and hooks\n * routeHookReader.getPrismaArgs(\"user\", \"findMany\") // prismaArgs for that operation\n * routeHookReader.getFullConfig(\"user\", \"findMany\") // full raw config object\n * routeHookReader.hasOperation(\"user\", \"findMany\") // true | false\n * routeHookReader.forOperation(\"user\", \"findMany\") // { before, after, onError, prismaArgs, routeConfig }\n * ```\n */\nclass ArkosRouteHookReader {\n private getRouteHook(moduleName: ArkosModuleType) {\n return loadableRegistry.getItem(\"ArkosRouteHook\", kebabCase(moduleName));\n }\n\n private getStore(\n moduleName: ArkosModuleType\n ): Record<string, ArkosRouteHookMethodConfig> {\n return (this.getRouteHook(moduleName) as any)?._store ?? {};\n }\n\n /**\n * Returns true if the routeHook has a config registered for the given operation.\n */\n hasOperation<TModule extends ArkosModuleType>(\n moduleName: TModule,\n operation: OperationByModule<TModule>\n ): boolean {\n return operation in this.getStore(moduleName);\n }\n\n /**\n * Returns the full raw config for the given operation, or `null` if not registered.\n */\n getFullConfig<TModule extends ArkosModuleType>(\n moduleName: TModule,\n operation: OperationByModule<TModule>\n ): ArkosRouteHookMethodConfig | null {\n return this.getStore(moduleName)[operation as string] ?? null;\n }\n\n /**\n * Returns only the lifecycle hooks (`before`, `after`, `onError`) for the given operation.\n */\n getHooks<TModule extends ArkosModuleType>(\n moduleName: TModule,\n operation: OperationByModule<TModule>\n ): ArkosRouteHookHooks | undefined {\n const config = this.getStore(moduleName)[operation as string];\n if (!config) return {};\n const { before, after, onError } = config;\n return { before, after, onError };\n }\n\n /**\n * Returns the `ArkosRouteConfig` portion of the config (excludes `path`, hooks, and `prismaArgs`)\n * for the given operation.\n */\n getRouteConfig<TModule extends ArkosModuleType>(\n moduleName: TModule,\n operation: OperationByModule<TModule>\n ): Omit<ArkosRouteConfig, \"path\"> | null {\n const config = this.getStore(moduleName)[operation as string];\n if (!config) return null;\n const { before, after, onError, prismaArgs, ...routeConfig } = config;\n return routeConfig;\n }\n\n /**\n * Returns the `prismaArgs` for the given operation, or `undefined` if not set.\n */\n getPrismaArgs<TModule extends ArkosModuleType>(\n moduleName: TModule,\n operation: OperationByModule<TModule>\n ): Record<string, any> | undefined {\n return this.getStore(moduleName)[operation as string]?.prismaArgs;\n }\n\n /**\n * Returns all extracted slices for a given operation in one call.\n */\n forOperation<TModule extends ArkosModuleType>(\n moduleName: TModule,\n operation: OperationByModule<TModule>\n ): {\n before: ArkosRequestHandler[];\n after: ArkosRequestHandler[];\n onError: ArkosRequestHandler[];\n prismaArgs?: Record<string, any>;\n routeConfig: Omit<ArkosRouteConfig, \"path\">;\n } {\n const {\n before = [],\n after = [],\n onError = [],\n } = this.getHooks(moduleName, operation) || {};\n const prismaArgs = this.getPrismaArgs(moduleName, operation);\n const routeConfig = this.getRouteConfig(moduleName, operation) ?? {};\n return { before, after, onError, prismaArgs, routeConfig };\n }\n}\n\nexport const routeHookReader = new ArkosRouteHookReader();\n"]}
1
+ {"version":3,"file":"reader.js","sourceRoot":"","sources":["../../../../src/components/arkos-route-hook/reader.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,MAAM,0CAA0C,CAAC;AAUxE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AA4BhD,MAAM,oBAAoB;IAChB,YAAY,CAAC,UAA2B;QAC9C,OAAO,gBAAgB,CAAC,OAAO,CAAC,gBAAgB,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3E,CAAC;IAEO,QAAQ,CACd,UAA2B;QAE3B,OAAQ,IAAI,CAAC,YAAY,CAAC,UAAU,CAAS,EAAE,MAAM,IAAI,EAAE,CAAC;IAC9D,CAAC;IAKD,YAAY,CACV,UAAmB,EACnB,SAAqC;QAErC,OAAO,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC;IAKD,aAAa,CACX,UAAmB,EACnB,SAAqC;QAErC,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,SAAmB,CAAC,IAAI,IAAI,CAAC;IAChE,CAAC;IAKD,QAAQ,CACN,UAAmB,EACnB,SAAqC;QAErC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,SAAmB,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QACvB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;QAC1C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IACpC,CAAC;IAMD,cAAc,CACZ,UAAmB,EACnB,SAAqC;QAErC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,SAAmB,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,GAAG,MAAM,CAAC;QACtE,OAAO,WAAW,CAAC;IACrB,CAAC;IAKD,aAAa,CACX,UAAmB,EACnB,SAAqC;QAErC,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,SAAmB,CAAC,EAAE,UAAU,CAAC;IACpE,CAAC;IAKD,YAAY,CACV,UAAmB,EACnB,SAAqC;QAKrC,MAAM,EACJ,MAAM,GAAG,EAAE,EACX,KAAK,GAAG,EAAE,EACV,OAAO,GAAG,EAAE,GACb,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC;QAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC;QACrE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;IAC7D,CAAC;CACF;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,oBAAoB,EAAE,CAAC","sourcesContent":["import loadableRegistry from \"../../components/arkos-loadable-registry\";\nimport {\n ArkosModuleType,\n ArkosRouteHookHooks,\n ArkosRouteHookMethodConfig,\n ArkosRouteHookInstance,\n ArkosAuthRouteHookInstance,\n ArkosFileUploadRouteHookInstance,\n} from \"./types\";\nimport { ArkosRouteConfig } from \"../../exports\";\nimport { kebabCase } from \"../../exports/utils\";\n\ntype PrismaOperations = keyof Omit<\n ArkosRouteHookInstance<any>,\n \"__type\" | \"moduleName\" | \"_configs\"\n>;\n\nexport type OperationByModule<TModule extends ArkosModuleType> =\n TModule extends \"file-upload\"\n ? keyof Omit<ArkosFileUploadRouteHookInstance, \"__type\" | \"moduleName\" | \"service\">\n : TModule extends \"auth\"\n ? keyof Omit<ArkosAuthRouteHookInstance, \"__type\" | \"moduleName\" | \"service\">\n : PrismaOperations;\n\n/**\n * Reader for `ArkosRouteHook` instances.\n * Reads config from the global loadable registry by module name.\n *\n * @example\n * ```ts\n * routeHookReader.getHooks(\"user\", \"findMany\") // { before, after, onError }\n * routeHookReader.getRouteConfig(\"user\", \"findMany\") // ArkosRouteConfig minus path and hooks\n * routeHookReader.getPrismaArgs(\"user\", \"findMany\") // prismaArgs for that operation\n * routeHookReader.getFullConfig(\"user\", \"findMany\") // full raw config object\n * routeHookReader.hasOperation(\"user\", \"findMany\") // true | false\n * routeHookReader.forOperation(\"user\", \"findMany\") // { before, after, onError, prismaArgs, routeConfig }\n * ```\n */\nclass ArkosRouteHookReader {\n private getRouteHook(moduleName: ArkosModuleType) {\n return loadableRegistry.getItem(\"ArkosRouteHook\", kebabCase(moduleName));\n }\n\n private getStore(\n moduleName: ArkosModuleType\n ): Record<string, ArkosRouteHookMethodConfig> {\n return (this.getRouteHook(moduleName) as any)?._store ?? {};\n }\n\n /**\n * Returns true if the routeHook has a config registered for the given operation.\n */\n hasOperation<TModule extends ArkosModuleType>(\n moduleName: TModule,\n operation: OperationByModule<TModule>\n ): boolean {\n return operation in this.getStore(moduleName);\n }\n\n /**\n * Returns the full raw config for the given operation, or `null` if not registered.\n */\n getFullConfig<TModule extends ArkosModuleType>(\n moduleName: TModule,\n operation: OperationByModule<TModule>\n ): ArkosRouteHookMethodConfig | null {\n return this.getStore(moduleName)[operation as string] ?? null;\n }\n\n /**\n * Returns only the lifecycle hooks (`before`, `after`, `onError`) for the given operation.\n */\n getHooks<TModule extends ArkosModuleType>(\n moduleName: TModule,\n operation: OperationByModule<TModule>\n ): ArkosRouteHookHooks | undefined {\n const config = this.getStore(moduleName)[operation as string];\n if (!config) return {};\n const { before, after, onError } = config;\n return { before, after, onError };\n }\n\n /**\n * Returns the `ArkosRouteConfig` portion of the config (excludes `path`, hooks, and `prismaArgs`)\n * for the given operation.\n */\n getRouteConfig<TModule extends ArkosModuleType>(\n moduleName: TModule,\n operation: OperationByModule<TModule>\n ): Omit<ArkosRouteConfig, \"path\"> | null {\n const config = this.getStore(moduleName)[operation as string];\n if (!config) return null;\n const { before, after, onError, prismaArgs, ...routeConfig } = config;\n return routeConfig;\n }\n\n /**\n * Returns the `prismaArgs` for the given operation, or `undefined` if not set.\n */\n getPrismaArgs<TModule extends ArkosModuleType>(\n moduleName: TModule,\n operation: OperationByModule<TModule>\n ): Record<string, any> | undefined {\n return this.getStore(moduleName)[operation as string]?.prismaArgs;\n }\n\n /**\n * Returns all extracted slices for a given operation in one call.\n */\n forOperation<TModule extends ArkosModuleType>(\n moduleName: TModule,\n operation: OperationByModule<TModule>\n ): ArkosRouteHookHooks & {\n prismaArgs?: Record<string, any>;\n routeConfig: Omit<ArkosRouteConfig, \"path\">;\n } {\n const {\n before = [],\n after = [],\n onError = [],\n } = this.getHooks(moduleName, operation) || {};\n const prismaArgs = this.getPrismaArgs(moduleName, operation);\n const routeConfig = this.getRouteConfig(moduleName, operation) ?? {};\n return { before, after, onError, prismaArgs, routeConfig };\n }\n}\n\nexport const routeHookReader = new ArkosRouteHookReader();\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/components/arkos-route-hook/types.ts"],"names":[],"mappings":"","sourcesContent":["import { ArkosRouteConfig } from \"../../exports\";\nimport { PrismaModels } from \"../../generated\";\nimport { ArkosRequestHandler } from \"../../types\";\n\nexport type Models = keyof PrismaModels<any>;\n\nexport interface ArkosRouteHookHooks {\n before?: ArkosRequestHandler[];\n after?: ArkosRequestHandler[];\n onError?: ArkosRequestHandler[];\n}\n\n/**\n * Extracts the correct Prisma args type for a given model and operation.\n * Falls back to `Record<string, any>` if the model or operation is not found.\n */\ntype PrismaQueryFor<\n TModel extends string,\n TOp extends string,\n> = TModel extends keyof PrismaModels<any>\n ? TOp extends keyof PrismaModels<any>[TModel]\n ? Partial<PrismaModels<any>[TModel][TOp]>\n : Record<string, any>\n : Record<string, any>;\n\n/**\n * Full config for an interceptor method — inherits all ArkosRouteConfig options\n * (validation, auth, rate limiting, etc.) minus `path`, plus lifecycle hooks,\n * plus `prismaQuery` typed to the specific model and operation's Prisma args.\n */\nexport type ArkosRouteHookMethodConfig<\n TModel extends string = string,\n TOp extends string = string,\n> = Omit<ArkosRouteConfig, \"path\"> &\n ArkosRouteHookHooks & {\n /**\n * Prisma options merged into this operation's query.\n * Typed against the model's actual Prisma args for this operation.\n */\n prismaArgs?: PrismaQueryFor<TModel, TOp>;\n };\n\n/**\n * Union of all valid module name types for ArkosRouteHook.\n * `string & {}` preserves autocomplete for \"auth\" and \"file-upload\"\n * while still accepting arbitrary model names.\n */\nexport type ArkosModuleType = \"auth\" | \"file-upload\" | Models;\n\n/**\n * Route hook instance for standard CRUD model routes.\n * Each method's `prismaQuery` is typed against the model's actual Prisma args.\n */\nexport interface ArkosRouteHookInstance<TModel extends Models> {\n readonly __type: \"ArkosRouteHook\";\n readonly moduleName: TModel;\n\n createOne(config: ArkosRouteHookMethodConfig<TModel, \"CreateArgs\">): this;\n findOne(config: ArkosRouteHookMethodConfig<TModel, \"FindFirstArgs\">): this;\n findMany(config: ArkosRouteHookMethodConfig<TModel, \"FindManyArgs\">): this;\n updateOne(config: ArkosRouteHookMethodConfig<TModel, \"UpdateArgs\">): this;\n deleteOne(config: ArkosRouteHookMethodConfig<TModel, \"DeleteArgs\">): this;\n createMany(\n config: ArkosRouteHookMethodConfig<TModel, \"CreateManyArgs\">\n ): this;\n updateMany(\n config: ArkosRouteHookMethodConfig<TModel, \"UpdateManyArgs\">\n ): this;\n deleteMany(\n config: ArkosRouteHookMethodConfig<TModel, \"DeleteManyArgs\">\n ): this;\n}\n\n/**\n * Route hook instance for the built-in auth module.\n * Only exposes methods relevant to auth routes.\n */\nexport interface ArkosAuthRouteHookInstance {\n readonly __type: \"ArkosRouteHook\";\n readonly moduleName: \"auth\";\n\n getMe(config: ArkosRouteHookMethodConfig): this;\n login(config: ArkosRouteHookMethodConfig): this;\n logout(config: ArkosRouteHookMethodConfig): this;\n signup(config: ArkosRouteHookMethodConfig): this;\n updateMe(config: ArkosRouteHookMethodConfig): this;\n deleteMe(config: ArkosRouteHookMethodConfig): this;\n updatePassword(config: ArkosRouteHookMethodConfig): this;\n findOneAuthAction(config: ArkosRouteHookMethodConfig): this;\n findManyAuthAction(config: ArkosRouteHookMethodConfig): this;\n}\n\n/**\n * Route hook instance for the built-in file-upload module.\n * Only exposes methods relevant to file routes.\n */\nexport interface ArkosFileUploadRouteHookInstance {\n readonly __type: \"ArkosRouteHook\";\n readonly moduleName: \"file-upload\";\n\n findFile(config: Omit<ArkosRouteHookMethodConfig, \"after\">): this;\n uploadFile(config: ArkosRouteHookMethodConfig): this;\n updateFile(config: ArkosRouteHookMethodConfig): this;\n deleteFile(config: ArkosRouteHookMethodConfig): this;\n}\n\n/**\n * Maps the module type string to its corresponding interceptor instance type.\n * Enables ArkosRouteHook() to return a narrowed type based on the argument.\n */\nexport type ArkosRouteHookReturn<T extends ArkosModuleType> = T extends \"auth\"\n ? ArkosAuthRouteHookInstance\n : T extends \"file-upload\"\n ? ArkosFileUploadRouteHookInstance\n : ArkosRouteHookInstance<T>;\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/components/arkos-route-hook/types.ts"],"names":[],"mappings":"","sourcesContent":["import { ArkosRouteConfig } from \"../../exports\";\nimport { ArkosPrismaService } from \"../../exports/services\";\nimport { PrismaModels } from \"../../generated\";\nimport { ArkosErrorRequestHandler, ArkosRequestHandler } from \"../../types\";\n\nexport type Models = keyof PrismaModels<any>;\n\nexport interface ArkosRouteHookHooks {\n before?: ArkosRequestHandler[] | ArkosRequestHandler;\n after?: ArkosRequestHandler[] | ArkosRequestHandler;\n onError?: ArkosErrorRequestHandler[] | ArkosErrorRequestHandler;\n}\n\n/**\n * Extracts the correct Prisma args type for a given model and operation.\n * Falls back to `Record<string, any>` if the model or operation is not found.\n */\ntype PrismaQueryFor<\n TModel extends string,\n TOp extends string,\n> = TModel extends keyof PrismaModels<any>\n ? TOp extends keyof PrismaModels<any>[TModel]\n ? Partial<PrismaModels<any>[TModel][TOp]>\n : Record<string, any>\n : Record<string, any>;\n\n/**\n * Full config for an interceptor method — inherits all ArkosRouteConfig options\n * (validation, auth, rate limiting, etc.) minus `path`, plus lifecycle hooks,\n * plus `prismaArgs` typed to the specific model and operation's Prisma args.\n */\nexport type ArkosRouteHookMethodConfig<\n TModel extends string = string,\n TOp extends string = string,\n> = Omit<ArkosRouteConfig, \"path\"> &\n ArkosRouteHookHooks & {\n /**\n * Prisma options merged into this operation's query.\n * Typed against the model's actual Prisma args for this operation.\n */\n prismaArgs?: PrismaQueryFor<TModel, TOp>;\n };\n\n/**\n * Union of all valid module name types for ArkosRouteHook.\n * `string & {}` preserves autocomplete for \"auth\" and \"file-upload\"\n * while still accepting arbitrary model names.\n */\nexport type ArkosModuleType = \"auth\" | \"file-upload\" | Models;\n\n/**\n * Route hook instance for standard CRUD model routes.\n * Each method's `prismaQuery` is typed against the model's actual Prisma args.\n */\nexport interface ArkosRouteHookInstance<TModel extends Models> {\n readonly __type: \"ArkosRouteHook\";\n readonly moduleName: TModel;\n readonly _configs: {\n readonly service?: ArkosPrismaService;\n }\n\n createOne(config: ArkosRouteHookMethodConfig<TModel, \"CreateArgs\">): this;\n findOne(config: ArkosRouteHookMethodConfig<TModel, \"FindFirstArgs\">): this;\n findMany(config: ArkosRouteHookMethodConfig<TModel, \"FindManyArgs\">): this;\n updateOne(config: ArkosRouteHookMethodConfig<TModel, \"UpdateArgs\">): this;\n deleteOne(config: ArkosRouteHookMethodConfig<TModel, \"DeleteArgs\">): this;\n createMany(\n config: ArkosRouteHookMethodConfig<TModel, \"CreateManyArgs\">\n ): this;\n updateMany(\n config: ArkosRouteHookMethodConfig<TModel, \"UpdateManyArgs\">\n ): this;\n deleteMany(\n config: ArkosRouteHookMethodConfig<TModel, \"DeleteManyArgs\">\n ): this;\n}\n\n/**\n * Route hook instance for the built-in auth module.\n * Only exposes methods relevant to auth routes.\n */\nexport interface ArkosAuthRouteHookInstance {\n readonly __type: \"ArkosRouteHook\";\n readonly moduleName: \"auth\";\n\n getMe(config: ArkosRouteHookMethodConfig): this;\n login(config: ArkosRouteHookMethodConfig): this;\n logout(config: ArkosRouteHookMethodConfig): this;\n signup(config: ArkosRouteHookMethodConfig): this;\n updateMe(config: ArkosRouteHookMethodConfig): this;\n deleteMe(config: ArkosRouteHookMethodConfig): this;\n updatePassword(config: ArkosRouteHookMethodConfig): this;\n findOneAuthAction(config: ArkosRouteHookMethodConfig): this;\n findManyAuthAction(config: ArkosRouteHookMethodConfig): this;\n}\n\n/**\n * Route hook instance for the built-in file-upload module.\n * Only exposes methods relevant to file routes.\n */\nexport interface ArkosFileUploadRouteHookInstance {\n readonly __type: \"ArkosRouteHook\";\n readonly moduleName: \"file-upload\";\n\n findFile(config: Omit<ArkosRouteHookMethodConfig, \"after\">): this;\n uploadFile(config: ArkosRouteHookMethodConfig): this;\n updateFile(config: ArkosRouteHookMethodConfig): this;\n deleteFile(config: ArkosRouteHookMethodConfig): this;\n}\n\n/**\n * Maps the module type string to its corresponding interceptor instance type.\n * Enables ArkosRouteHook() to return a narrowed type based on the argument.\n */\nexport type ArkosRouteHookReturn<T extends ArkosModuleType> = T extends \"auth\"\n ? ArkosAuthRouteHookInstance\n : T extends \"file-upload\"\n ? ArkosFileUploadRouteHookInstance\n : ArkosRouteHookInstance<T>;\n"]}
@@ -1,4 +1,5 @@
1
1
  import catchAsync from "../../modules/error-handler/utils/catch-async.js";
2
2
  import AppError from "../../modules/error-handler/utils/app-error.js";
3
+ export * from "../../modules/error-handler/utils/errors.js";
3
4
  export { catchAsync, AppError };
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/exports/error-handler/index.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,+CAA+C,CAAC;AACvE,OAAO,QAAQ,MAAM,6CAA6C,CAAC;AAEnE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC","sourcesContent":["import catchAsync from \"../../modules/error-handler/utils/catch-async\";\nimport AppError from \"../../modules/error-handler/utils/app-error\";\n\nexport { catchAsync, AppError };\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/exports/error-handler/index.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,+CAA+C,CAAC;AACvE,OAAO,QAAQ,MAAM,6CAA6C,CAAC;AAEnE,cAAc,0CAA0C,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC","sourcesContent":["import catchAsync from \"../../modules/error-handler/utils/catch-async\";\nimport AppError from \"../../modules/error-handler/utils/app-error\";\n\nexport * from \"../../modules/error-handler/utils/errors\";\nexport { catchAsync, AppError };\n"]}
@@ -2,10 +2,10 @@ import { BaseController } from "./../modules/base/base.controller.js";
2
2
  import { getArkosConfig } from "../server.js";
3
3
  import ArkosRouter from "../utils/arkos-router/index.js";
4
4
  import { loadEnvironmentVariables } from "../utils/dotenv.helpers.js";
5
- import { arkos } from "../app.js";
5
+ import arkos from "../app.js";
6
6
  import { ArkosRouteHook } from "../components/arkos-route-hook/index.js";
7
- import { ArkosServiceHook } from "../components/arkos-service-hook/index.js";
8
7
  import { ArkosPolicy } from "../components/arkos-policy/index.js";
9
- export { BaseController, loadEnvironmentVariables, getArkosConfig, ArkosRouteHook, ArkosServiceHook, ArkosRouter, ArkosPolicy, };
8
+ import { isProduction } from "../utils/helpers/arkos-config.helpers.js";
9
+ export { BaseController, loadEnvironmentVariables, getArkosConfig, ArkosRouteHook, ArkosRouter, ArkosPolicy, isProduction, };
10
10
  export default arkos;
11
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/exports/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,WAAW,MAAM,uBAAuB,CAAC;AAUhD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAIzD,OAAO,EAOL,cAAc,EAGd,wBAAwB,EACxB,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,WAAW,EAGX,WAAW,GAEZ,CAAC;AAEF,eAAe,KAAK,CAAC","sourcesContent":["import { RouterConfig } from \"../types/router-config\";\nimport { BaseController } from \"./../modules/base/base.controller\";\nimport { getArkosConfig } from \"../server\";\nimport ArkosRouter from \"../utils/arkos-router\";\nimport { IArkosRouter } from \"../utils/arkos-router/types\";\nimport { ArkosRouteConfig } from \"../utils/arkos-router/types\";\nimport {\n ArkosRequest,\n ArkosResponse,\n ArkosNextFunction,\n ArkosRequestHandler,\n} from \"../types\";\nimport { ArkosConfig } from \"../types/new-arkos-config\";\nimport { loadEnvironmentVariables } from \"../utils/dotenv.helpers\";\nimport { arkos } from \"../app\";\nimport { ArkosRouteHook } from \"../components/arkos-route-hook\";\nimport { ArkosServiceHook } from \"../components/arkos-service-hook\";\nimport { ArkosRouteHookInstance } from \"../components/arkos-route-hook/types\";\nimport { ArkosPolicy } from \"../components/arkos-policy\";\nimport { IArkosPolicy } from \"../components/arkos-policy/types\";\nimport type { ArkosLoadable } from \"../types/arkos\";\n\nexport {\n ArkosLoadable,\n ArkosRequest,\n ArkosResponse,\n ArkosNextFunction,\n ArkosRequestHandler,\n IArkosRouter,\n BaseController,\n ArkosConfig,\n RouterConfig,\n loadEnvironmentVariables,\n getArkosConfig,\n ArkosRouteHook,\n ArkosServiceHook,\n ArkosRouter,\n ArkosRouteConfig,\n ArkosRouteHookInstance,\n ArkosPolicy,\n IArkosPolicy,\n};\n\nexport default arkos;\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/exports/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,WAAW,MAAM,uBAAuB,CAAC;AAUhD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEhE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAIzD,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAErE,OAAO,EAOL,cAAc,EAEd,wBAAwB,EACxB,cAAc,EACd,cAAc,EACd,WAAW,EAGX,WAAW,EAGX,YAAY,GACb,CAAC;AAEF,eAAe,KAAK,CAAC","sourcesContent":["import { BaseController } from \"./../modules/base/base.controller\";\nimport { getArkosConfig } from \"../server\";\nimport ArkosRouter from \"../utils/arkos-router\";\nimport { IArkosRouter } from \"../utils/arkos-router/types\";\nimport { ArkosRouteConfig } from \"../utils/arkos-router/types\";\nimport {\n ArkosRequest,\n ArkosResponse,\n ArkosNextFunction,\n ArkosRequestHandler,\n} from \"../types\";\nimport { ArkosConfig } from \"../types/new-arkos-config\";\nimport { loadEnvironmentVariables } from \"../utils/dotenv.helpers\";\nimport arkos from \"../app\";\nimport { ArkosRouteHook } from \"../components/arkos-route-hook\";\nimport { ArkosRouteHookInstance } from \"../components/arkos-route-hook/types\";\nimport { ArkosPolicy } from \"../components/arkos-policy\";\nimport { IArkosPolicy } from \"../components/arkos-policy/types\";\nimport type { ArkosLoadable } from \"../types/arkos\";\nimport { ArkosFile } from \"../types/upload\";\nimport { isProduction } from \"../utils/helpers/arkos-config.helpers\";\n\nexport {\n ArkosLoadable,\n ArkosRequest,\n ArkosResponse,\n ArkosNextFunction,\n ArkosRequestHandler,\n IArkosRouter,\n BaseController,\n ArkosConfig,\n loadEnvironmentVariables,\n getArkosConfig,\n ArkosRouteHook,\n ArkosRouter,\n ArkosRouteConfig,\n ArkosRouteHookInstance,\n ArkosPolicy,\n IArkosPolicy,\n ArkosFile,\n isProduction,\n};\n\nexport default arkos;\n"]}
@@ -1,2 +1,2 @@
1
- export { addPrismaQueryOptionsToRequest, handleRequestBodyValidationAndTransformation, } from "../../modules/base/base.middlewares.js";
1
+ export { addPrismaQueryOptionsToRequest, } from "../../modules/base/base.middlewares.js";
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/exports/middlewares/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,8BAA8B,EAC9B,4CAA4C,GAC7C,MAAM,qCAAqC,CAAC","sourcesContent":["export {\n addPrismaQueryOptionsToRequest,\n handleRequestBodyValidationAndTransformation,\n} from \"../../modules/base/base.middlewares\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/exports/middlewares/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,8BAA8B,GAC/B,MAAM,qCAAqC,CAAC","sourcesContent":["export {\n addPrismaQueryOptionsToRequest,\n} from \"../../modules/base/base.middlewares\";\n"]}
@@ -1,10 +1,10 @@
1
1
  import { getFileUploadServices, FileUploadService, } from "../../modules/file-upload/file-upload.service.js";
2
2
  import authService, { AuthService } from "../../modules/auth/auth.service.js";
3
3
  import emailService, { EmailService } from "../../modules/email/email.service.js";
4
- import { BaseService } from "../../modules/base/base.service.js";
4
+ import { ArkosPrismaService } from "../../modules/base/base.service.js";
5
5
  import authActionService from "../../modules/auth/utils/services/auth-action.service.js";
6
6
  export { authService, AuthService, authActionService };
7
- export { BaseService, };
7
+ export { ArkosPrismaService, };
8
8
  export { emailService, EmailService };
9
9
  export { getFileUploadServices, FileUploadService };
10
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/exports/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,+CAA+C,CAAC;AAEvD,OAAO,WAAW,EAAE,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,YAAY,EAAE,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,iBAAiB,MAAM,uDAAuD,CAAC;AAoCtF,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC;AAKvD,OAAO,EACL,WAAW,GA8BZ,CAAC;AAKF,OAAO,EAAE,YAAY,EAAE,YAAY,EAAgB,CAAC;AAKpD,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,CAAC","sourcesContent":["import {\n getFileUploadServices,\n FileUploadService,\n} from \"../../modules/file-upload/file-upload.service\";\nimport { EmailOptions } from \"../../modules/email/email.service\";\nimport authService, { AuthService } from \"../../modules/auth/auth.service\";\nimport emailService, { EmailService } from \"../../modules/email/email.service\";\nimport { BaseService } from \"../../modules/base/base.service\";\nimport authActionService from \"../../modules/auth/utils/services/auth-action.service\";\nimport {\n ServiceHookContext,\n BeforeCreateOneHookArgs,\n AfterCreateOneHookArgs,\n BeforeCreateManyHookArgs,\n AfterCreateManyHookArgs,\n BeforeCountHookArgs,\n AfterCountHookArgs,\n BeforeFindManyHookArgs,\n AfterFindManyHookArgs,\n BeforeFindOneHookArgs,\n AfterFindOneHookArgs,\n BeforeUpdateOneHookArgs,\n AfterUpdateOneHookArgs,\n BeforeUpdateManyHookArgs,\n AfterUpdateManyHookArgs,\n BeforeDeleteOneHookArgs,\n AfterDeleteOneHookArgs,\n BeforeDeleteManyHookArgs,\n AfterDeleteManyHookArgs,\n OnCreateOneErrorHookArgs,\n OnCreateManyErrorHookArgs,\n OnCountErrorHookArgs,\n OnFindManyErrorHookArgs,\n OnFindByIdErrorHookArgs,\n OnFindOneErrorHookArgs,\n OnUpdateOneErrorHookArgs,\n OnUpdateManyErrorHookArgs,\n OnDeleteOneErrorHookArgs,\n OnDeleteManyErrorHookArgs,\n} from \"../../components/arkos-service-hook/types\";\n\n/**\n * Authentication service.\n */\nexport { authService, AuthService, authActionService };\n\n/**\n * Base service.\n */\nexport {\n BaseService,\n ServiceHookContext,\n BeforeCreateOneHookArgs,\n AfterCreateOneHookArgs,\n BeforeCreateManyHookArgs,\n AfterCreateManyHookArgs,\n BeforeCountHookArgs,\n AfterCountHookArgs,\n BeforeFindManyHookArgs,\n AfterFindManyHookArgs,\n BeforeFindOneHookArgs,\n AfterFindOneHookArgs,\n BeforeUpdateOneHookArgs,\n AfterUpdateOneHookArgs,\n BeforeUpdateManyHookArgs,\n AfterUpdateManyHookArgs,\n BeforeDeleteOneHookArgs,\n AfterDeleteOneHookArgs,\n BeforeDeleteManyHookArgs,\n AfterDeleteManyHookArgs,\n OnCreateOneErrorHookArgs,\n OnCreateManyErrorHookArgs,\n OnCountErrorHookArgs,\n OnFindManyErrorHookArgs,\n OnFindByIdErrorHookArgs,\n OnFindOneErrorHookArgs,\n OnUpdateOneErrorHookArgs,\n OnUpdateManyErrorHookArgs,\n OnDeleteOneErrorHookArgs,\n OnDeleteManyErrorHookArgs,\n};\n\n/**\n * Email service.\n */\nexport { emailService, EmailService, EmailOptions };\n\n/**\n * File upload services.\n */\nexport { getFileUploadServices, FileUploadService };\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/exports/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,+CAA+C,CAAC;AAEvD,OAAO,WAAW,EAAE,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,YAAY,EAAE,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,iBAAiB,MAAM,uDAAuD,CAAC;AAMtF,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC;AAKvD,OAAO,EACL,kBAAkB,GAEnB,CAAC;AAKF,OAAO,EAAE,YAAY,EAAE,YAAY,EAAgB,CAAC;AAKpD,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,CAAC","sourcesContent":["import {\n getFileUploadServices,\n FileUploadService,\n} from \"../../modules/file-upload/file-upload.service\";\nimport { EmailOptions } from \"../../modules/email/email.service\";\nimport authService, { AuthService } from \"../../modules/auth/auth.service\";\nimport emailService, { EmailService } from \"../../modules/email/email.service\";\nimport { ArkosPrismaService } from \"../../modules/base/base.service\";\nimport authActionService from \"../../modules/auth/utils/services/auth-action.service\";\nimport { ServiceHookContext } from \"../../modules/base/types/base.service.types\";\n\n/**\n * Authentication service.\n */\nexport { authService, AuthService, authActionService };\n\n/**\n * Base service.\n */\nexport {\n ArkosPrismaService,\n ServiceHookContext,\n};\n\n/**\n * Email service.\n */\nexport { emailService, EmailService, EmailOptions };\n\n/**\n * File upload services.\n */\nexport { getFileUploadServices, FileUploadService };\n"]}
@@ -0,0 +1,5 @@
1
+ import ArkosGateway from "../components/arkos-gateway/arkos-gateway.js";
2
+ export { IArkosGateway } from "../components/arkos-gateway/arkos-gateway.js";
3
+ export { ArkosGatewayController } from "../components/arkos-gateway/types.js";
4
+ export { ArkosGateway };
5
+ //# sourceMappingURL=websockets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websockets.js","sourceRoot":"","sources":["../../../src/exports/websockets.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,2CAA2C,CAAC;AAErE,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAa3E,OAAO,EAAE,YAAY,EAAE,CAAC","sourcesContent":["import ArkosGateway from \"../components/arkos-gateway/arkos-gateway\";\n\nexport { IArkosGateway } from \"../components/arkos-gateway/arkos-gateway\";\nexport { ArkosGatewayController } from \"../components/arkos-gateway/types\";\nexport type {\n ArkosSocket,\n ArkosGatewayConfig,\n ArkosGatewayEventConfig,\n ArkosGatewayHandler,\n ArkosGatewayPipe,\n ArkosGatewayConnectionHandler,\n ArkosGatewayErrorHandler,\n ArkosGatewayAckFn,\n ArkosBroadcastOperator,\n} from \"../components/arkos-gateway/types\";\n\nexport { ArkosGateway };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"generated.js","sourceRoot":"","sources":["../../src/generated.ts"],"names":[],"mappings":"AAyIA,MAAM,OAAO,YAAY;CAExB","sourcesContent":["/**\n * @maintainers THIS FILE IS A STUB — DO NOT PUT REAL LOGIC HERE.\n *\n * This file exists only so the Arkos source compiles during development.\n * It is completely overwritten at build time by `scripts/generate-post-build-types.ts`,\n * which replaces it with re-exports from `@arkosjs/types` — a folder generated\n * in the user's `node_modules` by `npx arkos prisma generate`.\n *\n * This is the single gateway for all Prisma-dependent types and values.\n * DO NOT import from `@prisma/client` or any user-project-specific module\n * anywhere else in the codebase — add it here instead.\n *\n * To add a new generated type or value:\n * 1. Add a stub export here\n * 2. Add the real export to the `npx arkos prisma generate` output in\n * `src/utils/cli/commands/prisma-generate.command.ts`\n * 3. Add it to the overwrite in `scripts/generate-post-build-types.ts`\n */\n\n/**\n * A map of all Prisma models in the user's project.\n * Each key is a kebab-case model name, each value contains the full\n * Prisma delegate, payload, and args types for that model.\n *\n * Stub during Arkos development — replaced with real generated types\n * after `npx arkos prisma generate`.\n *\n * @example\n * ```ts\n * class BaseService<TModelName extends keyof PrismaModels<any>> {}\n * ```\n */\n\ninterface StubWhereArgs {\n where?: { id?: any; [key: string]: any };\n [key: string]: any;\n}\n\ninterface StubWhereUniqueArgs {\n where: { id?: any; [key: string]: any };\n [key: string]: any;\n}\n\ninterface StubDataArgs {\n data: Record<string, any>;\n [key: string]: any;\n}\n\ninterface StubWhereDataArgs {\n where: { id?: any; [key: string]: any };\n data: Record<string, any>;\n [key: string]: any;\n}\n\ninterface StubPaginationArgs extends StubWhereArgs {\n orderBy?: Record<string, any>;\n select?: Record<string, any>;\n include?: Record<string, any>;\n skip?: number;\n take?: number;\n cursor?: Record<string, any>;\n}\n\ninterface StubCountArgs extends StubWhereArgs {\n select?: Record<string, any>;\n orderBy?: Record<string, any>;\n skip?: number;\n take?: number;\n cursor?: Record<string, any>;\n}\n\n/**\n * Extracts the `where` filter type from a Prisma args type.\n * @example ExtractPrismaFilters<PrismaModels<any>['user']['FindManyArgs']>\n */\nexport type ExtractPrismaFilters<T> = T extends {\n where?: infer W;\n [key: string]: any;\n}\n ? W\n : any;\n\n/**\n * Extracts the `data` type from a Prisma args type.\n * @example ExtractPrismaData<PrismaModels<any>['user']['CreateArgs']>\n */\nexport type ExtractPrismaData<T> = T extends {\n data: infer D;\n [key: string]: any;\n}\n ? D\n : any;\n\n/**\n * Extracts query options from a Prisma args type by omitting the specified keys.\n * @example ExtractPrismaQueryOptions<PrismaModels<any>['user']['CreateArgs'], 'data'>\n */\nexport type ExtractPrismaQueryOptions<T, K extends keyof T = never> = Omit<\n T,\n K\n>;\n\n/**\n * A map of all Prisma models in the user's project.\n * Each key is a kebab-case model name, each value contains the full\n * Prisma delegate, payload, and args types for that model.\n *\n * Stub during Arkos development — replaced with real generated types\n * after `npx arkos prisma generate`.\n *\n * @example\n * ```ts\n * class BaseService<TModelName extends keyof PrismaModels<any>> {}\n * ```\n */\nexport type PrismaModels<T extends Record<string, any>> = Record<\n string,\n {\n Delegate: Record<string, (...args: any[]) => any>;\n GetPayload: Record<string, any>;\n FindManyArgs: StubPaginationArgs;\n FindFirstArgs: StubPaginationArgs;\n CreateArgs: StubDataArgs;\n CreateManyArgs: StubDataArgs;\n UpdateArgs: StubWhereDataArgs;\n UpdateManyArgs: StubWhereDataArgs;\n DeleteArgs: StubWhereUniqueArgs;\n DeleteManyArgs: StubWhereArgs;\n CountArgs: StubCountArgs;\n }\n>;\n\n/**\n * Stub PrismaClient for Arkos development.\n * Replaced with the real `PrismaClient` from `@prisma/client` after\n * `npx arkos prisma generate`.\n */\nexport class PrismaClient {\n [key: string]: any;\n}\n"]}
1
+ {"version":3,"file":"generated.js","sourceRoot":"","sources":["../../src/generated.ts"],"names":[],"mappings":"AAyIA,MAAM,OAAO,YAAY;CAExB","sourcesContent":["/**\n * @maintainers THIS FILE IS A STUB — DO NOT PUT REAL LOGIC HERE.\n *\n * This file exists only so the Arkos source compiles during development.\n * It is completely overwritten at build time by `scripts/generate-post-build-types.ts`,\n * which replaces it with re-exports from `@arkosjs/types` — a folder generated\n * in the user's `node_modules` by `npx arkos prisma generate`.\n *\n * This is the single gateway for all Prisma-dependent types and values.\n * DO NOT import from `@prisma/client` or any user-project-specific module\n * anywhere else in the codebase — add it here instead.\n *\n * To add a new generated type or value:\n * 1. Add a stub export here\n * 2. Add the real export to the `npx arkos prisma generate` output in\n * `src/utils/cli/commands/prisma-generate.command.ts`\n * 3. Add it to the overwrite in `scripts/generate-post-build-types.ts`\n */\n\n/**\n * A map of all Prisma models in the user's project.\n * Each key is a kebab-case model name, each value contains the full\n * Prisma delegate, payload, and args types for that model.\n *\n * Stub during Arkos development — replaced with real generated types\n * after `npx arkos prisma generate`.\n *\n * @example\n * ```ts\n * class ArkosPrismaService<TModelName extends keyof PrismaModels<any>> {}\n * ```\n */\n\ninterface StubWhereArgs {\n where?: { id?: any; [key: string]: any };\n [key: string]: any;\n}\n\ninterface StubWhereUniqueArgs {\n where: { id?: any; [key: string]: any };\n [key: string]: any;\n}\n\ninterface StubDataArgs {\n data: Record<string, any>;\n [key: string]: any;\n}\n\ninterface StubWhereDataArgs {\n where: { id?: any; [key: string]: any };\n data: Record<string, any>;\n [key: string]: any;\n}\n\ninterface StubPaginationArgs extends StubWhereArgs {\n orderBy?: Record<string, any>;\n select?: Record<string, any>;\n include?: Record<string, any>;\n skip?: number;\n take?: number;\n cursor?: Record<string, any>;\n}\n\ninterface StubCountArgs extends StubWhereArgs {\n select?: Record<string, any>;\n orderBy?: Record<string, any>;\n skip?: number;\n take?: number;\n cursor?: Record<string, any>;\n}\n\n/**\n * Extracts the `where` filter type from a Prisma args type.\n * @example ExtractPrismaFilters<PrismaModels<any>['user']['FindManyArgs']>\n */\nexport type ExtractPrismaFilters<T> = T extends {\n where?: infer W;\n [key: string]: any;\n}\n ? W\n : any;\n\n/**\n * Extracts the `data` type from a Prisma args type.\n * @example ExtractPrismaData<PrismaModels<any>['user']['CreateArgs']>\n */\nexport type ExtractPrismaData<T> = T extends {\n data: infer D;\n [key: string]: any;\n}\n ? D\n : any;\n\n/**\n * Extracts query options from a Prisma args type by omitting the specified keys.\n * @example ExtractPrismaQueryOptions<PrismaModels<any>['user']['CreateArgs'], 'data'>\n */\nexport type ExtractPrismaQueryOptions<T, K extends keyof T = never> = Omit<\n T,\n K\n>;\n\n/**\n * A map of all Prisma models in the user's project.\n * Each key is a kebab-case model name, each value contains the full\n * Prisma delegate, payload, and args types for that model.\n *\n * Stub during Arkos development — replaced with real generated types\n * after `npx arkos prisma generate`.\n *\n * @example\n * ```ts\n * class ArkosPrismaService<TModelName extends keyof PrismaModels<any>> {}\n * ```\n */\nexport type PrismaModels<T extends Record<string, any>> = Record<\n string,\n {\n Delegate: Record<string, (...args: any[]) => any>;\n GetPayload: Record<string, any>;\n FindManyArgs: StubPaginationArgs;\n FindFirstArgs: StubPaginationArgs;\n CreateArgs: StubDataArgs;\n CreateManyArgs: StubDataArgs;\n UpdateArgs: StubWhereDataArgs;\n UpdateManyArgs: StubWhereDataArgs;\n DeleteArgs: StubWhereUniqueArgs;\n DeleteManyArgs: StubWhereArgs;\n CountArgs: StubCountArgs;\n }\n>;\n\n/**\n * Stub PrismaClient for Arkos development.\n * Replaced with the real `PrismaClient` from `@prisma/client` after\n * `npx arkos prisma generate`.\n */\nexport class PrismaClient {\n [key: string]: any;\n}\n"]}