arkos 1.1.12-test → 1.1.14-test

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 (136) hide show
  1. package/dist/cjs/app.js +1 -1
  2. package/dist/cjs/app.js.map +1 -1
  3. package/dist/cjs/modules/auth/auth.controller.js +53 -64
  4. package/dist/cjs/modules/auth/auth.controller.js.map +1 -1
  5. package/dist/cjs/modules/auth/auth.router.js +46 -58
  6. package/dist/cjs/modules/auth/auth.router.js.map +1 -1
  7. package/dist/cjs/modules/auth/auth.service.js +75 -97
  8. package/dist/cjs/modules/auth/auth.service.js.map +1 -1
  9. package/dist/cjs/modules/auth/utils/helpers/auth.controller.helpers.js +6 -7
  10. package/dist/cjs/modules/auth/utils/helpers/auth.controller.helpers.js.map +1 -1
  11. package/dist/cjs/modules/base/base.controller.js +30 -46
  12. package/dist/cjs/modules/base/base.controller.js.map +1 -1
  13. package/dist/cjs/modules/base/base.middlewares.js +17 -21
  14. package/dist/cjs/modules/base/base.middlewares.js.map +1 -1
  15. package/dist/cjs/modules/base/base.router.js +6 -17
  16. package/dist/cjs/modules/base/base.router.js.map +1 -1
  17. package/dist/cjs/modules/base/base.service.js +128 -116
  18. package/dist/cjs/modules/base/base.service.js.map +1 -1
  19. package/dist/cjs/modules/base/utils/helpers/base.controller.helpers.js +3 -5
  20. package/dist/cjs/modules/base/utils/helpers/base.controller.helpers.js.map +1 -1
  21. package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js +36 -47
  22. package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js.map +1 -1
  23. package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js +30 -40
  24. package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js.map +1 -1
  25. package/dist/cjs/modules/email/email.service.js +28 -39
  26. package/dist/cjs/modules/email/email.service.js.map +1 -1
  27. package/dist/cjs/modules/error-handler/error-handler.controller.js +6 -3
  28. package/dist/cjs/modules/error-handler/error-handler.controller.js.map +1 -1
  29. package/dist/cjs/modules/error-handler/utils/catch-async.js +3 -12
  30. package/dist/cjs/modules/error-handler/utils/catch-async.js.map +1 -1
  31. package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js +17 -31
  32. package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js.map +1 -1
  33. package/dist/cjs/modules/file-uploader/file-uploader.controller.js +18 -27
  34. package/dist/cjs/modules/file-uploader/file-uploader.controller.js.map +1 -1
  35. package/dist/cjs/modules/file-uploader/file-uploader.router.js +23 -34
  36. package/dist/cjs/modules/file-uploader/file-uploader.router.js.map +1 -1
  37. package/dist/cjs/modules/file-uploader/file-uploader.service.js +117 -131
  38. package/dist/cjs/modules/file-uploader/file-uploader.service.js.map +1 -1
  39. package/dist/cjs/modules/file-uploader/utils/helpers/file-uploader.helpers.js +15 -26
  40. package/dist/cjs/modules/file-uploader/utils/helpers/file-uploader.helpers.js.map +1 -1
  41. package/dist/cjs/proxy.js +1 -0
  42. package/dist/cjs/proxy.js.map +1 -0
  43. package/dist/cjs/server.js +1 -1
  44. package/dist/cjs/server.js.map +1 -1
  45. package/dist/cjs/utils/cli/build.js +9 -2
  46. package/dist/cjs/utils/cli/build.js.map +1 -1
  47. package/dist/cjs/utils/cli/dev.js +108 -48
  48. package/dist/cjs/utils/cli/dev.js.map +1 -1
  49. package/dist/cjs/utils/cli/start.js +35 -38
  50. package/dist/cjs/utils/cli/start.js.map +1 -1
  51. package/dist/cjs/utils/features/api.features.js +26 -33
  52. package/dist/cjs/utils/features/api.features.js.map +1 -1
  53. package/dist/cjs/utils/helpers/api.features.helpers.js +4 -6
  54. package/dist/cjs/utils/helpers/api.features.helpers.js.map +1 -1
  55. package/dist/cjs/utils/helpers/change-case.helpers.js +28 -36
  56. package/dist/cjs/utils/helpers/change-case.helpers.js.map +1 -1
  57. package/dist/cjs/utils/helpers/deepmerge.helper.js +4 -8
  58. package/dist/cjs/utils/helpers/deepmerge.helper.js.map +1 -1
  59. package/dist/cjs/utils/helpers/global.helpers.js +2 -13
  60. package/dist/cjs/utils/helpers/global.helpers.js.map +1 -1
  61. package/dist/cjs/utils/helpers/models.helpers.js +65 -80
  62. package/dist/cjs/utils/helpers/models.helpers.js.map +1 -1
  63. package/dist/cjs/utils/helpers/prisma.helpers.js +23 -34
  64. package/dist/cjs/utils/helpers/prisma.helpers.js.map +1 -1
  65. package/dist/cjs/utils/validate-dto.js +6 -17
  66. package/dist/cjs/utils/validate-dto.js.map +1 -1
  67. package/dist/cjs/utils/validate-schema.js +6 -17
  68. package/dist/cjs/utils/validate-schema.js.map +1 -1
  69. package/dist/es2020/app.js +1 -1
  70. package/dist/es2020/app.js.map +1 -1
  71. package/dist/es2020/modules/auth/auth.controller.js +53 -64
  72. package/dist/es2020/modules/auth/auth.controller.js.map +1 -1
  73. package/dist/es2020/modules/auth/auth.router.js +46 -58
  74. package/dist/es2020/modules/auth/auth.router.js.map +1 -1
  75. package/dist/es2020/modules/auth/auth.service.js +75 -97
  76. package/dist/es2020/modules/auth/auth.service.js.map +1 -1
  77. package/dist/es2020/modules/auth/utils/helpers/auth.controller.helpers.js +6 -7
  78. package/dist/es2020/modules/auth/utils/helpers/auth.controller.helpers.js.map +1 -1
  79. package/dist/es2020/modules/base/base.controller.js +30 -46
  80. package/dist/es2020/modules/base/base.controller.js.map +1 -1
  81. package/dist/es2020/modules/base/base.middlewares.js +17 -21
  82. package/dist/es2020/modules/base/base.middlewares.js.map +1 -1
  83. package/dist/es2020/modules/base/base.router.js +6 -17
  84. package/dist/es2020/modules/base/base.router.js.map +1 -1
  85. package/dist/es2020/modules/base/base.service.js +128 -116
  86. package/dist/es2020/modules/base/base.service.js.map +1 -1
  87. package/dist/es2020/modules/base/utils/helpers/base.controller.helpers.js +3 -5
  88. package/dist/es2020/modules/base/utils/helpers/base.controller.helpers.js.map +1 -1
  89. package/dist/es2020/modules/base/utils/helpers/base.router.helpers.js +36 -47
  90. package/dist/es2020/modules/base/utils/helpers/base.router.helpers.js.map +1 -1
  91. package/dist/es2020/modules/base/utils/helpers/base.service.helpers.js +30 -40
  92. package/dist/es2020/modules/base/utils/helpers/base.service.helpers.js.map +1 -1
  93. package/dist/es2020/modules/email/email.service.js +28 -39
  94. package/dist/es2020/modules/email/email.service.js.map +1 -1
  95. package/dist/es2020/modules/error-handler/error-handler.controller.js +6 -3
  96. package/dist/es2020/modules/error-handler/error-handler.controller.js.map +1 -1
  97. package/dist/es2020/modules/error-handler/utils/catch-async.js +3 -12
  98. package/dist/es2020/modules/error-handler/utils/catch-async.js.map +1 -1
  99. package/dist/es2020/modules/error-handler/utils/error-handler.helpers.js +17 -31
  100. package/dist/es2020/modules/error-handler/utils/error-handler.helpers.js.map +1 -1
  101. package/dist/es2020/modules/file-uploader/file-uploader.controller.js +18 -27
  102. package/dist/es2020/modules/file-uploader/file-uploader.controller.js.map +1 -1
  103. package/dist/es2020/modules/file-uploader/file-uploader.router.js +23 -34
  104. package/dist/es2020/modules/file-uploader/file-uploader.router.js.map +1 -1
  105. package/dist/es2020/modules/file-uploader/file-uploader.service.js +117 -131
  106. package/dist/es2020/modules/file-uploader/file-uploader.service.js.map +1 -1
  107. package/dist/es2020/modules/file-uploader/utils/helpers/file-uploader.helpers.js +15 -26
  108. package/dist/es2020/modules/file-uploader/utils/helpers/file-uploader.helpers.js.map +1 -1
  109. package/dist/es2020/server.js +1 -1
  110. package/dist/es2020/server.js.map +1 -1
  111. package/dist/es2020/utils/cli/build.js +9 -2
  112. package/dist/es2020/utils/cli/build.js.map +1 -1
  113. package/dist/es2020/utils/cli/dev.js +75 -48
  114. package/dist/es2020/utils/cli/dev.js.map +1 -1
  115. package/dist/es2020/utils/cli/start.js +35 -38
  116. package/dist/es2020/utils/cli/start.js.map +1 -1
  117. package/dist/es2020/utils/features/api.features.js +26 -33
  118. package/dist/es2020/utils/features/api.features.js.map +1 -1
  119. package/dist/es2020/utils/helpers/api.features.helpers.js +4 -6
  120. package/dist/es2020/utils/helpers/api.features.helpers.js.map +1 -1
  121. package/dist/es2020/utils/helpers/change-case.helpers.js +28 -36
  122. package/dist/es2020/utils/helpers/change-case.helpers.js.map +1 -1
  123. package/dist/es2020/utils/helpers/deepmerge.helper.js +4 -8
  124. package/dist/es2020/utils/helpers/deepmerge.helper.js.map +1 -1
  125. package/dist/es2020/utils/helpers/global.helpers.js +2 -13
  126. package/dist/es2020/utils/helpers/global.helpers.js.map +1 -1
  127. package/dist/es2020/utils/helpers/models.helpers.js +65 -80
  128. package/dist/es2020/utils/helpers/models.helpers.js.map +1 -1
  129. package/dist/es2020/utils/helpers/prisma.helpers.js +23 -34
  130. package/dist/es2020/utils/helpers/prisma.helpers.js.map +1 -1
  131. package/dist/es2020/utils/validate-dto.js +6 -17
  132. package/dist/es2020/utils/validate-dto.js.map +1 -1
  133. package/dist/es2020/utils/validate-schema.js +6 -17
  134. package/dist/es2020/utils/validate-schema.js.map +1 -1
  135. package/dist/types/server.d.ts +3 -1
  136. package/package.json +1 -1
package/dist/cjs/app.js CHANGED
@@ -1 +1 @@
1
- "use strict";var __awaiter=this&&this.__awaiter||function(e,x,s,a){function q(t){return t instanceof s?t:new s(function(p){p(t)})}return new(s||(s=Promise))(function(t,p){function y(o){try{c(a.next(o))}catch(v){p(v)}}function b(o){try{c(a.throw(o))}catch(v){p(v)}}function c(o){o.done?t(o.value):q(o.value).then(y,b)}c((a=a.apply(e,x||[])).next())})},__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.app=void 0,exports.bootstrap=bootstrap;const express_1=__importDefault(require("express")),cors_1=__importDefault(require("cors")),cookie_parser_1=__importDefault(require("cookie-parser")),auth_router_1=require("./modules/auth/auth.router"),base_router_1=require("./modules/base/base.router"),error_handler_controller_1=__importDefault(require("./modules/error-handler/error-handler.controller")),express_rate_limit_1=require("express-rate-limit"),compression_1=__importDefault(require("compression")),base_middlewares_1=require("./modules/base/base.middlewares"),prisma_helpers_1=require("./utils/helpers/prisma.helpers"),file_uploader_router_1=require("./modules/file-uploader/file-uploader.router"),query_parser_helpers_1=require("./utils/helpers/query-parser.helpers"),deepmerge_helper_1=__importDefault(require("./utils/helpers/deepmerge.helper"));exports.app=(0,express_1.default)();function bootstrap(e){return __awaiter(this,void 0,void 0,function*(){var x,s,a,q,t,p,y,b,c,o,v,w,R,f,P,M;yield(0,prisma_helpers_1.loadPrismaModule)(),e?.configureApp&&(yield e.configureApp(exports.app));const m=e?.middlewares,l=m?.disable||[],u=m?.replace||{};!((x=l?.includes)===null||x===void 0)&&x.call(l,"compression")||exports.app.use(u.compression||(0,compression_1.default)(e?.compressionOptions)),!((s=l?.includes)===null||s===void 0)&&s.call(l,"global-rate-limit")||exports.app.use(u.globalRateLimit||(0,express_rate_limit_1.rateLimit)((0,deepmerge_helper_1.default)({windowMs:60*1e3,limit:1e3,standardHeaders:"draft-7",legacyHeaders:!1},e?.globalRequestRateLimitOptions||{}))),!((a=l?.includes)===null||a===void 0)&&a.call(l,"cors")||exports.app.use(u.cors||(0,cors_1.default)(!((q=e?.cors)===null||q===void 0)&&q.customHandler?e.cors.customHandler:(0,deepmerge_helper_1.default)({origin:(d,h)=>{var A,O;const n=(A=e?.cors)===null||A===void 0?void 0:A.allowedOrigins;n==="*"?h(null,!0):Array.isArray(n)?h(null,!d||((O=n?.includes)===null||O===void 0?void 0:O.call(n,d))):typeof n=="string"?h(null,!d||n===d):h(null,!1)},methods:["GET","POST","PUT","DELETE","PATCH","OPTIONS"],allowedHeaders:["Content-Type","Authorization","Connection"],credentials:!0},((t=e?.cors)===null||t===void 0?void 0:t.options)||{}))),!((p=l?.includes)===null||p===void 0)&&p.call(l,"express-json")||exports.app.use(u.expressJson||express_1.default.json(e?.jsonBodyParserOptions)),!((y=l?.includes)===null||y===void 0)&&y.call(l,"cookie-parser")||exports.app.use(u.cookieParser||(0,cookie_parser_1.default)(...e?.cookieParserParameters||[])),!((b=l?.includes)===null||b===void 0)&&b.call(l,"query-parser")||exports.app.use(u.queryParser||(0,query_parser_helpers_1.queryParser)((0,deepmerge_helper_1.default)({parseNull:!0,parseUndefined:!0,parseBoolean:!0},e?.queryParserOptions||{}))),!((c=l?.includes)===null||c===void 0)&&c.call(l,"database-connection")||exports.app.use(u.databaseConnection||prisma_helpers_1.checkDatabaseConnection),!((o=l?.includes)===null||o===void 0)&&o.call(l,"request-logger")||exports.app.use(u.requestLogger||base_middlewares_1.handleRequestLogs),!((v=e?.middlewares)===null||v===void 0)&&v.additional&&e.middlewares.additional.forEach(d=>{exports.app.use(d)});const r=e?.routers,i=r?.disable||[],_=r?.replace||{};if(!((w=i?.includes)===null||w===void 0)&&w.call(i,"welcome-endpoint")||exports.app.get("/api",_.welcomeEndpoint||((d,h)=>{h.status(200).json({message:e.welcomeMessage})})),!(!((R=i?.includes)===null||R===void 0)&&R.call(i,"file-uploader"))){const d=_.fileUploader?yield _.fileUploader(e):yield(0,file_uploader_router_1.getFileUploaderRouter)(e);exports.app.use(d)}if(!(!((f=i?.includes)===null||f===void 0)&&f.call(i,"auth-router"))&&e.authentication){const d=_.authRouter?yield _.authRouter(e):yield(0,auth_router_1.getAuthRouter)(e);exports.app.use("/api",d)}if(!(!((P=i?.includes)===null||P===void 0)&&P.call(i,"prisma-models-router"))){const d=_.prismaModelsRouter?yield _.prismaModelsRouter(e):yield(0,base_router_1.getPrismaModelsRouter)(e);exports.app.use("/api",d)}return exports.app.use("/api",(0,base_router_1.getAvailableResourcesAndRoutesRouter)()),r?.additional&&r.additional.forEach(d=>{exports.app.use(d)}),!((M=l?.includes)===null||M===void 0)&&M.call(l,"global-error-handler")||exports.app.use(u.globalErrorHandler||error_handler_controller_1.default),exports.app})}
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.app=void 0,exports.bootstrap=bootstrap;const express_1=__importDefault(require("express")),cors_1=__importDefault(require("cors")),cookie_parser_1=__importDefault(require("cookie-parser")),auth_router_1=require("./modules/auth/auth.router"),base_router_1=require("./modules/base/base.router"),error_handler_controller_1=__importDefault(require("./modules/error-handler/error-handler.controller")),express_rate_limit_1=require("express-rate-limit"),compression_1=__importDefault(require("compression")),base_middlewares_1=require("./modules/base/base.middlewares"),prisma_helpers_1=require("./utils/helpers/prisma.helpers"),file_uploader_router_1=require("./modules/file-uploader/file-uploader.router"),query_parser_helpers_1=require("./utils/helpers/query-parser.helpers"),deepmerge_helper_1=__importDefault(require("./utils/helpers/deepmerge.helper"));exports.app=(0,express_1.default)();async function bootstrap(e){await(0,prisma_helpers_1.loadPrismaModule)(),e?.configureApp&&await e.configureApp(exports.app);const i=e?.middlewares,s=i?.disable||[],t=i?.replace||{};s?.includes?.("compression")||exports.app.use(t.compression||(0,compression_1.default)(e?.compressionOptions)),s?.includes?.("global-rate-limit")||exports.app.use(t.globalRateLimit||(0,express_rate_limit_1.rateLimit)((0,deepmerge_helper_1.default)({windowMs:60*1e3,limit:1e3,standardHeaders:"draft-7",legacyHeaders:!1},e?.globalRequestRateLimitOptions||{}))),s?.includes?.("cors")||exports.app.use(t.cors||(0,cors_1.default)(e?.cors?.customHandler?e.cors.customHandler:(0,deepmerge_helper_1.default)({origin:(r,o)=>{const l=e?.cors?.allowedOrigins;l==="*"?o(null,!0):Array.isArray(l)?o(null,!r||l?.includes?.(r)):typeof l=="string"?o(null,!r||l===r):o(null,!1)},methods:["GET","POST","PUT","DELETE","PATCH","OPTIONS"],allowedHeaders:["Content-Type","Authorization","Connection"],credentials:!0},e?.cors?.options||{}))),s?.includes?.("express-json")||exports.app.use(t.expressJson||express_1.default.json(e?.jsonBodyParserOptions)),s?.includes?.("cookie-parser")||exports.app.use(t.cookieParser||(0,cookie_parser_1.default)(...e?.cookieParserParameters||[])),s?.includes?.("query-parser")||exports.app.use(t.queryParser||(0,query_parser_helpers_1.queryParser)((0,deepmerge_helper_1.default)({parseNull:!0,parseUndefined:!0,parseBoolean:!0},e?.queryParserOptions||{}))),s?.includes?.("database-connection")||exports.app.use(t.databaseConnection||prisma_helpers_1.checkDatabaseConnection),s?.includes?.("request-logger")||exports.app.use(t.requestLogger||base_middlewares_1.handleRequestLogs),e?.middlewares?.additional&&e.middlewares.additional.forEach(r=>{exports.app.use(r)});const u=e?.routers,p=u?.disable||[],a=u?.replace||{};if(p?.includes?.("welcome-endpoint")||exports.app.get("/api",a.welcomeEndpoint||((r,o)=>{o.status(200).json({message:e.welcomeMessage})})),!p?.includes?.("file-uploader")){const r=a.fileUploader?await a.fileUploader(e):await(0,file_uploader_router_1.getFileUploaderRouter)(e);exports.app.use(r)}if(!p?.includes?.("auth-router")&&e.authentication){const r=a.authRouter?await a.authRouter(e):await(0,auth_router_1.getAuthRouter)(e);exports.app.use("/api",r)}if(!p?.includes?.("prisma-models-router")){const r=a.prismaModelsRouter?await a.prismaModelsRouter(e):await(0,base_router_1.getPrismaModelsRouter)(e);exports.app.use("/api",r)}return exports.app.use("/api",(0,base_router_1.getAvailableResourcesAndRoutesRouter)()),u?.additional&&u.additional.forEach(r=>{exports.app.use(r)}),s?.includes?.("global-error-handler")||exports.app.use(t.globalErrorHandler||error_handler_controller_1.default),exports.app}
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/app.ts"],"names":[],"mappings":"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","sourcesContent":["import express from \"express\";\nimport cors from \"cors\";\nimport cookieParser from \"cookie-parser\";\nimport { getAuthRouter } from \"./modules/auth/auth.router\";\nimport {\n getPrismaModelsRouter,\n getAvailableResourcesAndRoutesRouter,\n} from \"./modules/base/base.router\";\nimport errorHandler from \"./modules/error-handler/error-handler.controller\";\nimport { rateLimit } from \"express-rate-limit\";\nimport compression from \"compression\";\nimport { handleRequestLogs } from \"./modules/base/base.middlewares\";\nimport {\n checkDatabaseConnection,\n loadPrismaModule,\n} from \"./utils/helpers/prisma.helpers\";\nimport { getFileUploaderRouter } from \"./modules/file-uploader/file-uploader.router\";\nimport { ArkosConfig } from \"./types/arkos-config\";\nimport { queryParser } from \"./utils/helpers/query-parser.helpers\";\nimport deepmerge from \"./utils/helpers/deepmerge.helper\";\n\nexport const app: express.Express = express();\n\nexport async function bootstrap(\n arkosConfig: ArkosConfig\n): Promise<express.Express> {\n await loadPrismaModule();\n\n if (arkosConfig?.configureApp) await arkosConfig.configureApp(app);\n\n const middlewaresConfig = arkosConfig?.middlewares;\n const disabledMiddlewares = middlewaresConfig?.disable || [];\n const replacedMiddlewares = middlewaresConfig?.replace || {};\n\n // Compression middleware\n if (!disabledMiddlewares?.includes?.(\"compression\"))\n app.use(\n replacedMiddlewares.compression ||\n compression(arkosConfig?.compressionOptions)\n );\n\n // Global rate limit middleware\n if (!disabledMiddlewares?.includes?.(\"global-rate-limit\"))\n app.use(\n replacedMiddlewares.globalRateLimit ||\n rateLimit(\n deepmerge(\n {\n windowMs: 60 * 1000,\n limit: 1000,\n standardHeaders: \"draft-7\",\n legacyHeaders: false,\n },\n arkosConfig?.globalRequestRateLimitOptions || {}\n )\n )\n );\n\n // CORS middleware\n if (!disabledMiddlewares?.includes?.(\"cors\"))\n app.use(\n replacedMiddlewares.cors ||\n cors(\n arkosConfig?.cors?.customHandler\n ? arkosConfig.cors.customHandler\n : deepmerge(\n {\n origin: (\n origin: string,\n cb: (err: Error | null, allow?: boolean) => void\n ) => {\n const allowed = arkosConfig?.cors?.allowedOrigins;\n\n if (allowed === \"*\") {\n cb(null, true);\n } else if (Array.isArray(allowed)) {\n cb(null, !origin || allowed?.includes?.(origin));\n } else if (typeof allowed === \"string\") {\n cb(null, !origin || allowed === origin);\n } else {\n cb(null, false);\n }\n },\n methods: [\"GET\", \"POST\", \"PUT\", \"DELETE\", \"PATCH\", \"OPTIONS\"],\n allowedHeaders: [\n \"Content-Type\",\n \"Authorization\",\n \"Connection\",\n ],\n credentials: true,\n },\n arkosConfig?.cors?.options || {}\n )\n )\n );\n\n // JSON body parser middleware\n if (!disabledMiddlewares?.includes?.(\"express-json\"))\n app.use(\n replacedMiddlewares.expressJson ||\n express.json(arkosConfig?.jsonBodyParserOptions)\n );\n\n // Cookie parser middleware\n if (!disabledMiddlewares?.includes?.(\"cookie-parser\"))\n app.use(\n replacedMiddlewares.cookieParser ||\n cookieParser(...[...(arkosConfig?.cookieParserParameters || [])])\n );\n\n // Query parser middleware\n if (!disabledMiddlewares?.includes?.(\"query-parser\"))\n app.use(\n replacedMiddlewares.queryParser ||\n queryParser(\n deepmerge(\n {\n parseNull: true,\n parseUndefined: true,\n parseBoolean: true,\n },\n arkosConfig?.queryParserOptions || {}\n )\n )\n );\n\n // Database connection check middleware\n if (!disabledMiddlewares?.includes?.(\"database-connection\"))\n app.use(replacedMiddlewares.databaseConnection || checkDatabaseConnection);\n\n // Request logger middleware\n if (!disabledMiddlewares?.includes?.(\"request-logger\"))\n app.use(replacedMiddlewares.requestLogger || handleRequestLogs);\n\n // Additional custom middlewares\n if (arkosConfig?.middlewares?.additional)\n arkosConfig.middlewares.additional.forEach((middleware) => {\n app.use(middleware);\n });\n\n // Configure routers\n const routersConfig = arkosConfig?.routers;\n const disabledRouters = routersConfig?.disable || [];\n const replacedRouters = routersConfig?.replace || {};\n\n // Welcome endpoint\n if (!disabledRouters?.includes?.(\"welcome-endpoint\"))\n app.get(\n \"/api\",\n replacedRouters.welcomeEndpoint ||\n ((req, res) => {\n res.status(200).json({ message: arkosConfig.welcomeMessage });\n })\n );\n\n // File uploader router\n if (!disabledRouters?.includes?.(\"file-uploader\")) {\n const fileUploaderRouter = replacedRouters.fileUploader\n ? await replacedRouters.fileUploader(arkosConfig)\n : await getFileUploaderRouter(arkosConfig);\n app.use(fileUploaderRouter);\n }\n\n // Auth router\n if (\n !disabledRouters?.includes?.(\"auth-router\") &&\n arkosConfig.authentication\n ) {\n const authRouter = replacedRouters.authRouter\n ? await replacedRouters.authRouter(arkosConfig)\n : await getAuthRouter(arkosConfig);\n app.use(\"/api\", authRouter);\n }\n\n // Prisma models router\n if (!disabledRouters?.includes?.(\"prisma-models-router\")) {\n const modelsRouter = replacedRouters.prismaModelsRouter\n ? await replacedRouters.prismaModelsRouter(arkosConfig)\n : await getPrismaModelsRouter(arkosConfig);\n app.use(\"/api\", modelsRouter);\n }\n\n app.use(\"/api\", getAvailableResourcesAndRoutesRouter());\n\n // Additional custom routers\n if (routersConfig?.additional) {\n routersConfig.additional.forEach((router) => {\n app.use(router);\n });\n }\n\n // Global error handler middleware (must be last)\n if (!disabledMiddlewares?.includes?.(\"global-error-handler\"))\n app.use(replacedMiddlewares.globalErrorHandler || errorHandler);\n\n return app;\n}\n"]}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/app.ts"],"names":[],"mappings":"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","sourcesContent":["import express from \"express\";\nimport cors from \"cors\";\nimport cookieParser from \"cookie-parser\";\nimport { getAuthRouter } from \"./modules/auth/auth.router\";\nimport {\n getPrismaModelsRouter,\n getAvailableResourcesAndRoutesRouter,\n} from \"./modules/base/base.router\";\nimport errorHandler from \"./modules/error-handler/error-handler.controller\";\nimport { rateLimit } from \"express-rate-limit\";\nimport compression from \"compression\";\nimport { handleRequestLogs } from \"./modules/base/base.middlewares\";\nimport {\n checkDatabaseConnection,\n loadPrismaModule,\n} from \"./utils/helpers/prisma.helpers\";\nimport { getFileUploaderRouter } from \"./modules/file-uploader/file-uploader.router\";\nimport { ArkosConfig } from \"./types/arkos-config\";\nimport { queryParser } from \"./utils/helpers/query-parser.helpers\";\nimport deepmerge from \"./utils/helpers/deepmerge.helper\";\n\nexport const app: express.Express = express();\n\nexport async function bootstrap(\n arkosConfig: ArkosConfig\n): Promise<express.Express> {\n await loadPrismaModule();\n\n if (arkosConfig?.configureApp) await arkosConfig.configureApp(app);\n\n const middlewaresConfig = arkosConfig?.middlewares;\n const disabledMiddlewares = middlewaresConfig?.disable || [];\n const replacedMiddlewares = middlewaresConfig?.replace || {};\n\n // Compression middleware\n if (!disabledMiddlewares?.includes?.(\"compression\"))\n app.use(\n replacedMiddlewares.compression ||\n compression(arkosConfig?.compressionOptions)\n );\n\n // Global rate limit middleware\n if (!disabledMiddlewares?.includes?.(\"global-rate-limit\"))\n app.use(\n replacedMiddlewares.globalRateLimit ||\n rateLimit(\n deepmerge(\n {\n windowMs: 60 * 1000,\n limit: 1000,\n standardHeaders: \"draft-7\",\n legacyHeaders: false,\n },\n arkosConfig?.globalRequestRateLimitOptions || {}\n )\n )\n );\n\n // CORS middleware\n if (!disabledMiddlewares?.includes?.(\"cors\"))\n app.use(\n replacedMiddlewares.cors ||\n cors(\n arkosConfig?.cors?.customHandler\n ? arkosConfig.cors.customHandler\n : deepmerge(\n {\n origin: (\n origin: string,\n cb: (err: Error | null, allow?: boolean) => void\n ) => {\n const allowed = arkosConfig?.cors?.allowedOrigins;\n\n if (allowed === \"*\") {\n cb(null, true);\n } else if (Array.isArray(allowed)) {\n cb(null, !origin || allowed?.includes?.(origin));\n } else if (typeof allowed === \"string\") {\n cb(null, !origin || allowed === origin);\n } else {\n cb(null, false);\n }\n },\n methods: [\"GET\", \"POST\", \"PUT\", \"DELETE\", \"PATCH\", \"OPTIONS\"],\n allowedHeaders: [\n \"Content-Type\",\n \"Authorization\",\n \"Connection\",\n ],\n credentials: true,\n },\n arkosConfig?.cors?.options || {}\n )\n )\n );\n\n // JSON body parser middleware\n if (!disabledMiddlewares?.includes?.(\"express-json\"))\n app.use(\n replacedMiddlewares.expressJson ||\n express.json(arkosConfig?.jsonBodyParserOptions)\n );\n\n // Cookie parser middleware\n if (!disabledMiddlewares?.includes?.(\"cookie-parser\"))\n app.use(\n replacedMiddlewares.cookieParser ||\n cookieParser(...[...(arkosConfig?.cookieParserParameters || [])])\n );\n\n // Query parser middleware\n if (!disabledMiddlewares?.includes?.(\"query-parser\"))\n app.use(\n replacedMiddlewares.queryParser ||\n queryParser(\n deepmerge(\n {\n parseNull: true,\n parseUndefined: true,\n parseBoolean: true,\n },\n arkosConfig?.queryParserOptions || {}\n )\n )\n );\n\n // Database connection check middleware\n if (!disabledMiddlewares?.includes?.(\"database-connection\"))\n app.use(replacedMiddlewares.databaseConnection || checkDatabaseConnection);\n\n // Request logger middleware\n if (!disabledMiddlewares?.includes?.(\"request-logger\"))\n app.use(replacedMiddlewares.requestLogger || handleRequestLogs);\n\n // Additional custom middlewares\n if (arkosConfig?.middlewares?.additional)\n arkosConfig.middlewares.additional.forEach((middleware) => {\n app.use(middleware);\n });\n\n // Configure routers\n const routersConfig = arkosConfig?.routers;\n const disabledRouters = routersConfig?.disable || [];\n const replacedRouters = routersConfig?.replace || {};\n\n // Welcome endpoint\n if (!disabledRouters?.includes?.(\"welcome-endpoint\"))\n app.get(\n \"/api\",\n replacedRouters.welcomeEndpoint ||\n ((req, res) => {\n res.status(200).json({ message: arkosConfig.welcomeMessage });\n })\n );\n\n // File uploader router\n if (!disabledRouters?.includes?.(\"file-uploader\")) {\n const fileUploaderRouter = replacedRouters.fileUploader\n ? await replacedRouters.fileUploader(arkosConfig)\n : await getFileUploaderRouter(arkosConfig);\n app.use(fileUploaderRouter);\n }\n\n // Auth router\n if (\n !disabledRouters?.includes?.(\"auth-router\") &&\n arkosConfig.authentication\n ) {\n const authRouter = replacedRouters.authRouter\n ? await replacedRouters.authRouter(arkosConfig)\n : await getAuthRouter(arkosConfig);\n app.use(\"/api\", authRouter);\n }\n\n // Prisma models router\n if (!disabledRouters?.includes?.(\"prisma-models-router\")) {\n const modelsRouter = replacedRouters.prismaModelsRouter\n ? await replacedRouters.prismaModelsRouter(arkosConfig)\n : await getPrismaModelsRouter(arkosConfig);\n app.use(\"/api\", modelsRouter);\n }\n\n app.use(\"/api\", getAvailableResourcesAndRoutesRouter());\n\n // Additional custom routers\n if (routersConfig?.additional) {\n routersConfig.additional.forEach((router) => {\n app.use(router);\n });\n }\n\n // Global error handler middleware (must be last)\n if (!disabledMiddlewares?.includes?.(\"global-error-handler\"))\n app.use(replacedMiddlewares.globalErrorHandler || errorHandler);\n\n return app;\n}\n"]}
@@ -1,13 +1,4 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
12
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
4
  };
@@ -26,57 +17,56 @@ const auth_controller_helpers_1 = require("./utils/helpers/auth.controller.helpe
26
17
  exports.defaultExcludedUserFields = {
27
18
  password: false,
28
19
  };
29
- const authControllerFactory = (...args_1) => __awaiter(void 0, [...args_1], void 0, function* (middlewares = {}) {
20
+ const authControllerFactory = async (middlewares = {}) => {
30
21
  const baseServices = (0, base_service_1.getBaseServices)();
31
22
  let prismaQueryOptions = {};
32
- const userModules = yield (0, models_helpers_1.importPrismaModelModules)("user");
23
+ const userModules = await (0, models_helpers_1.importPrismaModelModules)("user");
33
24
  if (userModules)
34
- prismaQueryOptions = (userModules === null || userModules === void 0 ? void 0 : userModules.prismaQueryOptions) || {};
35
- const stringifiedQueryOptions = JSON.stringify((0, deepmerge_helper_1.default)((prismaQueryOptions === null || prismaQueryOptions === void 0 ? void 0 : prismaQueryOptions.queryOptions) || {}, (prismaQueryOptions === null || prismaQueryOptions === void 0 ? void 0 : prismaQueryOptions.findOne) || {}) || {});
25
+ prismaQueryOptions = userModules?.prismaQueryOptions || {};
26
+ const stringifiedQueryOptions = JSON.stringify((0, deepmerge_helper_1.default)(prismaQueryOptions?.queryOptions || {}, prismaQueryOptions?.findOne || {}) || {});
36
27
  return {
37
- getMe: (0, catch_async_1.default)((req, res, next) => __awaiter(void 0, void 0, void 0, function* () {
38
- const user = yield baseServices["user"].findOne({ id: req.user.id }, stringifiedQueryOptions);
28
+ getMe: (0, catch_async_1.default)(async (req, res, next) => {
29
+ const user = await baseServices["user"].findOne({ id: req.user.id }, stringifiedQueryOptions);
39
30
  Object.keys(exports.defaultExcludedUserFields).forEach((key) => {
40
31
  if (user)
41
32
  delete user[key];
42
33
  });
43
- if (middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterGetMe) {
34
+ if (middlewares?.afterGetMe) {
44
35
  req.responseData = { data: user };
45
36
  req.responseStatus = 200;
46
37
  return next();
47
38
  }
48
39
  res.status(200).json({ data: user });
49
- })),
50
- updateMe: (0, catch_async_1.default)((req, res, next) => __awaiter(void 0, void 0, void 0, function* () {
40
+ }),
41
+ updateMe: (0, catch_async_1.default)(async (req, res, next) => {
51
42
  if ("password" in req.body)
52
43
  throw new app_error_1.default("In order to update password use the update-password endpoint.", 400);
53
- const user = yield baseServices["user"].updateOne({ id: req.user.id }, req.body, stringifiedQueryOptions);
44
+ const user = await baseServices["user"].updateOne({ id: req.user.id }, req.body, stringifiedQueryOptions);
54
45
  Object.keys(exports.defaultExcludedUserFields).forEach((key) => {
55
46
  if (user)
56
47
  delete user[key];
57
48
  });
58
- if (middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterGetMe) {
49
+ if (middlewares?.afterGetMe) {
59
50
  req.responseData = user;
60
51
  req.responseStatus = 200;
61
52
  return next();
62
53
  }
63
54
  res.status(200).json({ data: user });
64
- })),
65
- logout: (0, catch_async_1.default)((req, res, next) => __awaiter(void 0, void 0, void 0, function* () {
55
+ }),
56
+ logout: (0, catch_async_1.default)(async (req, res, next) => {
66
57
  res.cookie("arkos_access_token", "no-token", {
67
58
  expires: new Date(Date.now() + 10 * 1000),
68
59
  httpOnly: true,
69
60
  });
70
- if (middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterLogout) {
61
+ if (middlewares?.afterLogout) {
71
62
  req.responseData = null;
72
63
  req.responseStatus = 204;
73
64
  return next();
74
65
  }
75
66
  res.status(204).json();
76
- })),
77
- login: (0, catch_async_1.default)((req, res, next) => __awaiter(void 0, void 0, void 0, function* () {
78
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w;
79
- const authConfigs = (_a = (0, server_1.getArkosConfig)()) === null || _a === void 0 ? void 0 : _a.authentication;
67
+ }),
68
+ login: (0, catch_async_1.default)(async (req, res, next) => {
69
+ const authConfigs = (0, server_1.getArkosConfig)()?.authentication;
80
70
  const usernameField = (0, auth_controller_helpers_1.determineUsernameField)(req);
81
71
  const lastField = usernameField.split(".")[usernameField.split(".").length - 1];
82
72
  const usernameValue = req.body[lastField];
@@ -85,7 +75,7 @@ const authControllerFactory = (...args_1) => __awaiter(void 0, [...args_1], void
85
75
  return next(new app_error_1.default(`Please provide both ${lastField} and password`, 400));
86
76
  const prisma = (0, prisma_helpers_1.getPrismaInstance)();
87
77
  let whereClause;
88
- if ((_b = usernameField === null || usernameField === void 0 ? void 0 : usernameField.includes) === null || _b === void 0 ? void 0 : _b.call(usernameField, ".")) {
78
+ if (usernameField?.includes?.(".")) {
89
79
  const valueToFind = (0, auth_controller_helpers_1.getNestedValue)(req.body, usernameField);
90
80
  if (valueToFind === undefined) {
91
81
  return next(new app_error_1.default(`Invalid ${usernameField} provided`, 400));
@@ -95,60 +85,60 @@ const authControllerFactory = (...args_1) => __awaiter(void 0, [...args_1], void
95
85
  else {
96
86
  whereClause = { [usernameField]: usernameValue };
97
87
  }
98
- const user = yield prisma.user.findFirst({
88
+ const user = await prisma.user.findFirst({
99
89
  where: whereClause,
100
90
  });
101
91
  if (!user ||
102
- !(yield auth_service_1.default.isCorrectPassword(password, user.password))) {
92
+ !(await auth_service_1.default.isCorrectPassword(password, user.password))) {
103
93
  return next(new app_error_1.default(`Incorrect ${lastField} or password`, 401));
104
94
  }
105
95
  const token = auth_service_1.default.signJwtToken(user.id);
106
96
  const cookieOptions = {
107
97
  expires: new Date(Date.now() +
108
- Number((0, auth_controller_helpers_1.toMs)(((_c = authConfigs === null || authConfigs === void 0 ? void 0 : authConfigs.jwt) === null || _c === void 0 ? void 0 : _c.expiresIn) ||
98
+ Number((0, auth_controller_helpers_1.toMs)(authConfigs?.jwt?.expiresIn ||
109
99
  process.env.JWT_EXPIRES_IN ||
110
100
  arkos_env_1.default.JWT_EXPIRES_IN))),
111
- httpOnly: ((_e = (_d = authConfigs === null || authConfigs === void 0 ? void 0 : authConfigs.jwt) === null || _d === void 0 ? void 0 : _d.cookie) === null || _e === void 0 ? void 0 : _e.httpOnly) ||
101
+ httpOnly: authConfigs?.jwt?.cookie?.httpOnly ||
112
102
  process.env.JWT_COOKIE_HTTP_ONLY === "true" ||
113
103
  true,
114
- secure: ((_g = (_f = authConfigs === null || authConfigs === void 0 ? void 0 : authConfigs.jwt) === null || _f === void 0 ? void 0 : _f.cookie) === null || _g === void 0 ? void 0 : _g.secure) ||
104
+ secure: authConfigs?.jwt?.cookie?.secure ||
115
105
  process.env.JWT_COOKIE_SECURE === "true" ||
116
106
  req.secure ||
117
107
  req.headers["x-forwarded-proto"] === "https",
118
- sameSite: ((_j = (_h = authConfigs === null || authConfigs === void 0 ? void 0 : authConfigs.jwt) === null || _h === void 0 ? void 0 : _h.cookie) === null || _j === void 0 ? void 0 : _j.sameSite) ||
108
+ sameSite: authConfigs?.jwt?.cookie?.sameSite ||
119
109
  process.env.JWT_COOKIE_SAME_SITE ||
120
110
  process.env.NODE_ENV === "production"
121
111
  ? "none"
122
112
  : "lax",
123
113
  };
124
- if (((_k = authConfigs === null || authConfigs === void 0 ? void 0 : authConfigs.login) === null || _k === void 0 ? void 0 : _k.sendAccessTokenThrough) === "response-only" ||
125
- ((_l = authConfigs === null || authConfigs === void 0 ? void 0 : authConfigs.login) === null || _l === void 0 ? void 0 : _l.sendAccessTokenThrough) === "both" ||
126
- !((_m = authConfigs === null || authConfigs === void 0 ? void 0 : authConfigs.login) === null || _m === void 0 ? void 0 : _m.sendAccessTokenThrough)) {
114
+ if (authConfigs?.login?.sendAccessTokenThrough === "response-only" ||
115
+ authConfigs?.login?.sendAccessTokenThrough === "both" ||
116
+ !authConfigs?.login?.sendAccessTokenThrough) {
127
117
  req.responseData = { accessToken: token };
128
118
  }
129
- if (((_o = authConfigs === null || authConfigs === void 0 ? void 0 : authConfigs.login) === null || _o === void 0 ? void 0 : _o.sendAccessTokenThrough) === "cookie-only" ||
130
- ((_p = authConfigs === null || authConfigs === void 0 ? void 0 : authConfigs.login) === null || _p === void 0 ? void 0 : _p.sendAccessTokenThrough) === "both" ||
131
- !((_q = authConfigs === null || authConfigs === void 0 ? void 0 : authConfigs.login) === null || _q === void 0 ? void 0 : _q.sendAccessTokenThrough))
119
+ if (authConfigs?.login?.sendAccessTokenThrough === "cookie-only" ||
120
+ authConfigs?.login?.sendAccessTokenThrough === "both" ||
121
+ !authConfigs?.login?.sendAccessTokenThrough)
132
122
  res.cookie("arkos_access_token", token, cookieOptions);
133
- if (middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterLogin) {
123
+ if (middlewares?.afterLogin) {
134
124
  req.additionalData = { user };
135
125
  req.responseStatus = 200;
136
126
  return next();
137
127
  }
138
- if (((_r = authConfigs === null || authConfigs === void 0 ? void 0 : authConfigs.login) === null || _r === void 0 ? void 0 : _r.sendAccessTokenThrough) === "response-only" ||
139
- ((_s = authConfigs === null || authConfigs === void 0 ? void 0 : authConfigs.login) === null || _s === void 0 ? void 0 : _s.sendAccessTokenThrough) === "both" ||
140
- !((_t = authConfigs === null || authConfigs === void 0 ? void 0 : authConfigs.login) === null || _t === void 0 ? void 0 : _t.sendAccessTokenThrough)) {
128
+ if (authConfigs?.login?.sendAccessTokenThrough === "response-only" ||
129
+ authConfigs?.login?.sendAccessTokenThrough === "both" ||
130
+ !authConfigs?.login?.sendAccessTokenThrough) {
141
131
  res.status(200).json(req.responseData);
142
132
  }
143
- else if (((_u = authConfigs === null || authConfigs === void 0 ? void 0 : authConfigs.login) === null || _u === void 0 ? void 0 : _u.sendAccessTokenThrough) === "cookie-only" ||
144
- ((_v = authConfigs === null || authConfigs === void 0 ? void 0 : authConfigs.login) === null || _v === void 0 ? void 0 : _v.sendAccessTokenThrough) === "both" ||
145
- !((_w = authConfigs === null || authConfigs === void 0 ? void 0 : authConfigs.login) === null || _w === void 0 ? void 0 : _w.sendAccessTokenThrough))
133
+ else if (authConfigs?.login?.sendAccessTokenThrough === "cookie-only" ||
134
+ authConfigs?.login?.sendAccessTokenThrough === "both" ||
135
+ !authConfigs?.login?.sendAccessTokenThrough)
146
136
  res.status(200).send();
147
- })),
148
- signup: (0, catch_async_1.default)((req, res, next) => __awaiter(void 0, void 0, void 0, function* () {
137
+ }),
138
+ signup: (0, catch_async_1.default)(async (req, res, next) => {
149
139
  const userService = baseServices["user"];
150
- const user = yield userService.createOne(req.body, stringifiedQueryOptions);
151
- if (middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterSignup) {
140
+ const user = await userService.createOne(req.body, stringifiedQueryOptions);
141
+ if (middlewares?.afterSignup) {
152
142
  req.responseData = { data: user };
153
143
  req.responseStatus = 201;
154
144
  return next();
@@ -157,34 +147,33 @@ const authControllerFactory = (...args_1) => __awaiter(void 0, [...args_1], void
157
147
  delete user[key];
158
148
  });
159
149
  res.status(201).json({ data: user });
160
- })),
161
- updatePassword: (0, catch_async_1.default)((req, res, next) => __awaiter(void 0, void 0, void 0, function* () {
162
- var _a;
150
+ }),
151
+ updatePassword: (0, catch_async_1.default)(async (req, res, next) => {
163
152
  const { currentPassword, newPassword } = req.body;
164
153
  if (!currentPassword || !newPassword)
165
154
  return next(new app_error_1.default("currentPassword and newPassword are required", 400));
166
155
  const user = req.user;
167
- if (!user || (user === null || user === void 0 ? void 0 : user.isActive) === false || (user === null || user === void 0 ? void 0 : user.deletedSelfAccountAt))
156
+ if (!user || user?.isActive === false || user?.deletedSelfAccountAt)
168
157
  return next(new app_error_1.default("User not found!", 404));
169
- const isPasswordCorrect = yield auth_service_1.default.isCorrectPassword(String(currentPassword), String(user.password));
158
+ const isPasswordCorrect = await auth_service_1.default.isCorrectPassword(String(currentPassword), String(user.password));
170
159
  const configs = (0, server_1.getArkosConfig)();
171
- const initAuthConfigs = configs === null || configs === void 0 ? void 0 : configs.authentication;
160
+ const initAuthConfigs = configs?.authentication;
172
161
  if (!isPasswordCorrect)
173
162
  return next(new app_error_1.default("Current password is incorrect.", 400));
174
163
  if (!auth_service_1.default.isPasswordStrong(String(newPassword)) &&
175
- !(configs === null || configs === void 0 ? void 0 : configs.validation)) {
176
- return next(new app_error_1.default(((_a = initAuthConfigs === null || initAuthConfigs === void 0 ? void 0 : initAuthConfigs.passwordValidation) === null || _a === void 0 ? void 0 : _a.message) ||
164
+ !configs?.validation) {
165
+ return next(new app_error_1.default(initAuthConfigs?.passwordValidation?.message ||
177
166
  "The new password must contain at least one uppercase letter, one lowercase letter, and one number", 400));
178
167
  }
179
168
  const prisma = (0, prisma_helpers_1.getPrismaInstance)();
180
- yield prisma.user.update({
169
+ await prisma.user.update({
181
170
  where: { id: user.id },
182
171
  data: {
183
- password: yield auth_service_1.default.hashPassword(newPassword),
172
+ password: await auth_service_1.default.hashPassword(newPassword),
184
173
  passwordChangedAt: new Date(Date.now()),
185
174
  },
186
175
  });
187
- if (middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterUpdatePassword) {
176
+ if (middlewares?.afterUpdatePassword) {
188
177
  req.additionalData = {
189
178
  user,
190
179
  };
@@ -199,8 +188,8 @@ const authControllerFactory = (...args_1) => __awaiter(void 0, [...args_1], void
199
188
  status: "success",
200
189
  message: "Password updated successfully!",
201
190
  });
202
- })),
191
+ }),
203
192
  };
204
- });
193
+ };
205
194
  exports.authControllerFactory = authControllerFactory;
206
195
  //# sourceMappingURL=auth.controller.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.controller.js","sourceRoot":"","sources":["../../../../src/modules/auth/auth.controller.ts"],"names":[],"mappings":"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","sourcesContent":["import catchAsync from \"../error-handler/utils/catch-async\";\nimport AppError from \"../error-handler/utils/app-error\";\nimport { CookieOptions } from \"express\";\nimport { ArkosRequest, ArkosResponse, ArkosNextFunction } from \"../../types\";\nimport authService from \"./auth.service\";\nimport { getBaseServices } from \"../base/base.service\";\nimport { User } from \"../../types\";\nimport { getPrismaInstance } from \"../../utils/helpers/prisma.helpers\";\nimport {\n getModelModules,\n importPrismaModelModules,\n} from \"../../utils/helpers/models.helpers\";\nimport deepmerge from \"../../utils/helpers/deepmerge.helper\";\nimport arkosEnv from \"../../utils/arkos-env\";\nimport { getArkosConfig } from \"../../server\";\nimport {\n createPrismaWhereClause,\n determineUsernameField,\n getNestedValue,\n MsDuration,\n toMs,\n} from \"./utils/helpers/auth.controller.helpers\";\n\n/**\n * Default fields to exclude from user object when returning to client\n */\nexport const defaultExcludedUserFields = {\n password: false,\n};\n\n/**\n * Factory function to create authentication controller with configurable middlewares\n *\n * @param middlewares - Optional middleware functions to execute after controller actions\n * @returns An object containing all authentication controller methods\n */\nexport const authControllerFactory = async (middlewares: any = {}) => {\n const baseServices = getBaseServices();\n let prismaQueryOptions: Record<string, any> = {};\n\n const userModules = await importPrismaModelModules(\"user\");\n if (userModules) prismaQueryOptions = userModules?.prismaQueryOptions || {};\n\n const stringifiedQueryOptions = JSON.stringify(\n deepmerge(\n prismaQueryOptions?.queryOptions || {},\n prismaQueryOptions?.findOne || {}\n ) || {}\n );\n\n return {\n /**\n * Retrieves the current authenticated user's information\n */\n getMe: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n const user = await baseServices[\"user\"].findOne(\n { id: req.user!.id },\n // JSON.stringify(\n // deepmerge(\n // JSON.parse(stringifiedQueryOptions),\n // JSON.parse(req.query.prismaQueryOptions as string)\n // )\n // )\n stringifiedQueryOptions\n );\n\n Object.keys(defaultExcludedUserFields).forEach((key) => {\n if (user) delete user[key as keyof User];\n });\n\n if (middlewares?.afterGetMe) {\n req.responseData = { data: user };\n req.responseStatus = 200;\n return next();\n }\n\n res.status(200).json({ data: user });\n }\n ),\n\n /**\n * Updates the current authenticated user's information\n */\n updateMe: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n if (\"password\" in req.body)\n throw new AppError(\n \"In order to update password use the update-password endpoint.\",\n 400\n );\n\n const user = await baseServices[\"user\"].updateOne(\n { id: req.user!.id },\n req.body,\n // JSON.stringify(\n // deepmerge(\n // JSON.parse(stringifiedQueryOptions),\n // JSON.parse(req.query.prismaQueryOptions as string)\n // )\n // )\n stringifiedQueryOptions\n );\n\n Object.keys(defaultExcludedUserFields).forEach((key) => {\n if (user) delete user[key as keyof User];\n });\n\n if (middlewares?.afterGetMe) {\n req.responseData = user;\n req.responseStatus = 200;\n return next();\n }\n\n res.status(200).json({ data: user });\n }\n ),\n\n /**\n * Logs out the current user by invalidating their access token cookie\n */\n logout: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n res.cookie(\"arkos_access_token\", \"no-token\", {\n expires: new Date(Date.now() + 10 * 1000),\n httpOnly: true,\n });\n\n if (middlewares?.afterLogout) {\n req.responseData = null;\n req.responseStatus = 204;\n return next();\n }\n\n res.status(204).json();\n }\n ),\n\n /**\n * Authenticates a user using configurable username field and password\n * Username field can be specified in query parameter or config\n * Supports nested fields and array queries (e.g., \"profile.nickname\", \"phones.some.number\")\n */\n login: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n const authConfigs = getArkosConfig()?.authentication;\n\n const usernameField = determineUsernameField(req);\n\n // For the error message, we only care about the top-level field name\n const lastField =\n usernameField.split(\".\")[usernameField.split(\".\").length - 1];\n\n const usernameValue = req.body[lastField];\n\n const { password } = req.body;\n\n if (!usernameValue || !password)\n return next(\n new AppError(`Please provide both ${lastField} and password`, 400)\n );\n\n const prisma = getPrismaInstance();\n\n // Create appropriate where clause for the query\n let whereClause: Record<string, any>;\n\n if (usernameField?.includes?.(\".\")) {\n // For nested paths, we need to extract the actual value to search for\n const valueToFind = getNestedValue(req.body, usernameField);\n if (valueToFind === undefined) {\n return next(new AppError(`Invalid ${usernameField} provided`, 400));\n }\n whereClause = createPrismaWhereClause(usernameField, valueToFind);\n } else {\n // Simple field case\n whereClause = { [usernameField]: usernameValue };\n }\n\n // Use findFirst instead of findUnique for complex queries\n const user = await (prisma as any).user.findFirst({\n where: whereClause,\n // select: {\n // id: true,\n // password: true,\n // },\n });\n\n if (\n !user ||\n !(await authService.isCorrectPassword(password, user.password))\n ) {\n return next(new AppError(`Incorrect ${lastField} or password`, 401));\n }\n\n const token = authService.signJwtToken(user.id!);\n\n const cookieOptions: CookieOptions = {\n expires: new Date(\n Date.now() +\n Number(\n toMs(\n authConfigs?.jwt?.expiresIn ||\n (process.env.JWT_EXPIRES_IN as MsDuration) ||\n (arkosEnv.JWT_EXPIRES_IN as MsDuration)\n )\n )\n ),\n httpOnly:\n authConfigs?.jwt?.cookie?.httpOnly ||\n process.env.JWT_COOKIE_HTTP_ONLY === \"true\" ||\n true,\n secure:\n authConfigs?.jwt?.cookie?.secure ||\n process.env.JWT_COOKIE_SECURE === \"true\" ||\n req.secure ||\n req.headers[\"x-forwarded-proto\"] === \"https\",\n sameSite:\n authConfigs?.jwt?.cookie?.sameSite ||\n process.env.JWT_COOKIE_SAME_SITE ||\n process.env.NODE_ENV === \"production\"\n ? \"none\"\n : \"lax\",\n };\n\n if (\n authConfigs?.login?.sendAccessTokenThrough === \"response-only\" ||\n authConfigs?.login?.sendAccessTokenThrough === \"both\" ||\n !authConfigs?.login?.sendAccessTokenThrough\n ) {\n req.responseData = { accessToken: token };\n }\n\n if (\n authConfigs?.login?.sendAccessTokenThrough === \"cookie-only\" ||\n authConfigs?.login?.sendAccessTokenThrough === \"both\" ||\n !authConfigs?.login?.sendAccessTokenThrough\n )\n res.cookie(\"arkos_access_token\", token, cookieOptions);\n\n if (middlewares?.afterLogin) {\n req.additionalData = { user };\n req.responseStatus = 200;\n return next();\n }\n\n if (\n authConfigs?.login?.sendAccessTokenThrough === \"response-only\" ||\n authConfigs?.login?.sendAccessTokenThrough === \"both\" ||\n !authConfigs?.login?.sendAccessTokenThrough\n ) {\n res.status(200).json(req.responseData);\n } else if (\n authConfigs?.login?.sendAccessTokenThrough === \"cookie-only\" ||\n authConfigs?.login?.sendAccessTokenThrough === \"both\" ||\n !authConfigs?.login?.sendAccessTokenThrough\n )\n res.status(200).send();\n }\n ),\n\n /**\n * Creates a new user account\n */\n signup: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n const userService = baseServices[\"user\"];\n\n const user = await userService.createOne(\n req.body,\n // JSON.stringify(\n // deepmerge(\n // JSON.parse(stringifiedQueryOptions),\n // JSON.parse(req.query.prismaQueryOptions as string)\n // )\n // )\n stringifiedQueryOptions\n );\n\n if (middlewares?.afterSignup) {\n req.responseData = { data: user };\n req.responseStatus = 201;\n return next();\n }\n\n Object.keys(defaultExcludedUserFields).forEach((key) => {\n delete user[key as keyof User];\n });\n\n res.status(201).json({ data: user });\n }\n ),\n\n /**\n * Updates the password of the authenticated user\n */\n updatePassword: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n const { currentPassword, newPassword } = req.body;\n\n if (!currentPassword || !newPassword)\n return next(\n new AppError(\"currentPassword and newPassword are required\", 400)\n );\n\n const user = req.user;\n\n if (!user || user?.isActive === false || user?.deletedSelfAccountAt)\n return next(new AppError(\"User not found!\", 404));\n\n // Check if the current password is correct\n const isPasswordCorrect = await authService.isCorrectPassword(\n String(currentPassword),\n String(user.password)\n );\n\n const configs = getArkosConfig();\n const initAuthConfigs = configs?.authentication;\n // const modules = getModelModules(\"auth\");\n\n if (!isPasswordCorrect)\n return next(new AppError(\"Current password is incorrect.\", 400));\n\n // Check password strength (optional but recommended)\n if (\n !authService.isPasswordStrong(String(newPassword)) &&\n !configs?.validation\n ) {\n return next(\n new AppError(\n initAuthConfigs?.passwordValidation?.message ||\n \"The new password must contain at least one uppercase letter, one lowercase letter, and one number\",\n 400\n )\n );\n }\n\n const prisma = getPrismaInstance();\n\n // Update the password\n await (prisma as any).user.update({\n where: { id: user.id },\n data: {\n password: await authService.hashPassword(newPassword),\n passwordChangedAt: new Date(Date.now()),\n },\n });\n\n if (middlewares?.afterUpdatePassword) {\n req.additionalData = {\n user,\n };\n req.responseData = {\n status: \"success\",\n message: \"Password updated successfully!\",\n };\n req.responseStatus = 200;\n return next();\n }\n\n res.status(200).json({\n status: \"success\",\n message: \"Password updated successfully!\",\n });\n }\n ),\n };\n};\n"]}
1
+ {"version":3,"file":"auth.controller.js","sourceRoot":"","sources":["../../../../src/modules/auth/auth.controller.ts"],"names":[],"mappings":"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","sourcesContent":["import catchAsync from \"../error-handler/utils/catch-async\";\nimport AppError from \"../error-handler/utils/app-error\";\nimport { CookieOptions } from \"express\";\nimport { ArkosRequest, ArkosResponse, ArkosNextFunction } from \"../../types\";\nimport authService from \"./auth.service\";\nimport { getBaseServices } from \"../base/base.service\";\nimport { User } from \"../../types\";\nimport { getPrismaInstance } from \"../../utils/helpers/prisma.helpers\";\nimport {\n getModelModules,\n importPrismaModelModules,\n} from \"../../utils/helpers/models.helpers\";\nimport deepmerge from \"../../utils/helpers/deepmerge.helper\";\nimport arkosEnv from \"../../utils/arkos-env\";\nimport { getArkosConfig } from \"../../server\";\nimport {\n createPrismaWhereClause,\n determineUsernameField,\n getNestedValue,\n MsDuration,\n toMs,\n} from \"./utils/helpers/auth.controller.helpers\";\n\n/**\n * Default fields to exclude from user object when returning to client\n */\nexport const defaultExcludedUserFields = {\n password: false,\n};\n\n/**\n * Factory function to create authentication controller with configurable middlewares\n *\n * @param middlewares - Optional middleware functions to execute after controller actions\n * @returns An object containing all authentication controller methods\n */\nexport const authControllerFactory = async (middlewares: any = {}) => {\n const baseServices = getBaseServices();\n let prismaQueryOptions: Record<string, any> = {};\n\n const userModules = await importPrismaModelModules(\"user\");\n if (userModules) prismaQueryOptions = userModules?.prismaQueryOptions || {};\n\n const stringifiedQueryOptions = JSON.stringify(\n deepmerge(\n prismaQueryOptions?.queryOptions || {},\n prismaQueryOptions?.findOne || {}\n ) || {}\n );\n\n return {\n /**\n * Retrieves the current authenticated user's information\n */\n getMe: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n const user = await baseServices[\"user\"].findOne(\n { id: req.user!.id },\n // JSON.stringify(\n // deepmerge(\n // JSON.parse(stringifiedQueryOptions),\n // JSON.parse(req.query.prismaQueryOptions as string)\n // )\n // )\n stringifiedQueryOptions\n );\n\n Object.keys(defaultExcludedUserFields).forEach((key) => {\n if (user) delete user[key as keyof User];\n });\n\n if (middlewares?.afterGetMe) {\n req.responseData = { data: user };\n req.responseStatus = 200;\n return next();\n }\n\n res.status(200).json({ data: user });\n }\n ),\n\n /**\n * Updates the current authenticated user's information\n */\n updateMe: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n if (\"password\" in req.body)\n throw new AppError(\n \"In order to update password use the update-password endpoint.\",\n 400\n );\n\n const user = await baseServices[\"user\"].updateOne(\n { id: req.user!.id },\n req.body,\n // JSON.stringify(\n // deepmerge(\n // JSON.parse(stringifiedQueryOptions),\n // JSON.parse(req.query.prismaQueryOptions as string)\n // )\n // )\n stringifiedQueryOptions\n );\n\n Object.keys(defaultExcludedUserFields).forEach((key) => {\n if (user) delete user[key as keyof User];\n });\n\n if (middlewares?.afterGetMe) {\n req.responseData = user;\n req.responseStatus = 200;\n return next();\n }\n\n res.status(200).json({ data: user });\n }\n ),\n\n /**\n * Logs out the current user by invalidating their access token cookie\n */\n logout: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n res.cookie(\"arkos_access_token\", \"no-token\", {\n expires: new Date(Date.now() + 10 * 1000),\n httpOnly: true,\n });\n\n if (middlewares?.afterLogout) {\n req.responseData = null;\n req.responseStatus = 204;\n return next();\n }\n\n res.status(204).json();\n }\n ),\n\n /**\n * Authenticates a user using configurable username field and password\n * Username field can be specified in query parameter or config\n * Supports nested fields and array queries (e.g., \"profile.nickname\", \"phones.some.number\")\n */\n login: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n const authConfigs = getArkosConfig()?.authentication;\n\n const usernameField = determineUsernameField(req);\n\n // For the error message, we only care about the top-level field name\n const lastField =\n usernameField.split(\".\")[usernameField.split(\".\").length - 1];\n\n const usernameValue = req.body[lastField];\n\n const { password } = req.body;\n\n if (!usernameValue || !password)\n return next(\n new AppError(`Please provide both ${lastField} and password`, 400)\n );\n\n const prisma = getPrismaInstance();\n\n // Create appropriate where clause for the query\n let whereClause: Record<string, any>;\n\n if (usernameField?.includes?.(\".\")) {\n // For nested paths, we need to extract the actual value to search for\n const valueToFind = getNestedValue(req.body, usernameField);\n if (valueToFind === undefined) {\n return next(new AppError(`Invalid ${usernameField} provided`, 400));\n }\n whereClause = createPrismaWhereClause(usernameField, valueToFind);\n } else {\n // Simple field case\n whereClause = { [usernameField]: usernameValue };\n }\n\n // Use findFirst instead of findUnique for complex queries\n const user = await (prisma as any).user.findFirst({\n where: whereClause,\n // select: {\n // id: true,\n // password: true,\n // },\n });\n\n if (\n !user ||\n !(await authService.isCorrectPassword(password, user.password))\n ) {\n return next(new AppError(`Incorrect ${lastField} or password`, 401));\n }\n\n const token = authService.signJwtToken(user.id!);\n\n const cookieOptions: CookieOptions = {\n expires: new Date(\n Date.now() +\n Number(\n toMs(\n authConfigs?.jwt?.expiresIn ||\n (process.env.JWT_EXPIRES_IN as MsDuration) ||\n (arkosEnv.JWT_EXPIRES_IN as MsDuration)\n )\n )\n ),\n httpOnly:\n authConfigs?.jwt?.cookie?.httpOnly ||\n process.env.JWT_COOKIE_HTTP_ONLY === \"true\" ||\n true,\n secure:\n authConfigs?.jwt?.cookie?.secure ||\n process.env.JWT_COOKIE_SECURE === \"true\" ||\n req.secure ||\n req.headers[\"x-forwarded-proto\"] === \"https\",\n sameSite:\n authConfigs?.jwt?.cookie?.sameSite ||\n process.env.JWT_COOKIE_SAME_SITE ||\n process.env.NODE_ENV === \"production\"\n ? \"none\"\n : \"lax\",\n };\n\n if (\n authConfigs?.login?.sendAccessTokenThrough === \"response-only\" ||\n authConfigs?.login?.sendAccessTokenThrough === \"both\" ||\n !authConfigs?.login?.sendAccessTokenThrough\n ) {\n req.responseData = { accessToken: token };\n }\n\n if (\n authConfigs?.login?.sendAccessTokenThrough === \"cookie-only\" ||\n authConfigs?.login?.sendAccessTokenThrough === \"both\" ||\n !authConfigs?.login?.sendAccessTokenThrough\n )\n res.cookie(\"arkos_access_token\", token, cookieOptions);\n\n if (middlewares?.afterLogin) {\n req.additionalData = { user };\n req.responseStatus = 200;\n return next();\n }\n\n if (\n authConfigs?.login?.sendAccessTokenThrough === \"response-only\" ||\n authConfigs?.login?.sendAccessTokenThrough === \"both\" ||\n !authConfigs?.login?.sendAccessTokenThrough\n ) {\n res.status(200).json(req.responseData);\n } else if (\n authConfigs?.login?.sendAccessTokenThrough === \"cookie-only\" ||\n authConfigs?.login?.sendAccessTokenThrough === \"both\" ||\n !authConfigs?.login?.sendAccessTokenThrough\n )\n res.status(200).send();\n }\n ),\n\n /**\n * Creates a new user account\n */\n signup: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n const userService = baseServices[\"user\"];\n\n const user = await userService.createOne(\n req.body,\n // JSON.stringify(\n // deepmerge(\n // JSON.parse(stringifiedQueryOptions),\n // JSON.parse(req.query.prismaQueryOptions as string)\n // )\n // )\n stringifiedQueryOptions\n );\n\n if (middlewares?.afterSignup) {\n req.responseData = { data: user };\n req.responseStatus = 201;\n return next();\n }\n\n Object.keys(defaultExcludedUserFields).forEach((key) => {\n delete user[key as keyof User];\n });\n\n res.status(201).json({ data: user });\n }\n ),\n\n /**\n * Updates the password of the authenticated user\n */\n updatePassword: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n const { currentPassword, newPassword } = req.body;\n\n if (!currentPassword || !newPassword)\n return next(\n new AppError(\"currentPassword and newPassword are required\", 400)\n );\n\n const user = req.user;\n\n if (!user || user?.isActive === false || user?.deletedSelfAccountAt)\n return next(new AppError(\"User not found!\", 404));\n\n // Check if the current password is correct\n const isPasswordCorrect = await authService.isCorrectPassword(\n String(currentPassword),\n String(user.password)\n );\n\n const configs = getArkosConfig();\n const initAuthConfigs = configs?.authentication;\n // const modules = getModelModules(\"auth\");\n\n if (!isPasswordCorrect)\n return next(new AppError(\"Current password is incorrect.\", 400));\n\n // Check password strength (optional but recommended)\n if (\n !authService.isPasswordStrong(String(newPassword)) &&\n !configs?.validation\n ) {\n return next(\n new AppError(\n initAuthConfigs?.passwordValidation?.message ||\n \"The new password must contain at least one uppercase letter, one lowercase letter, and one number\",\n 400\n )\n );\n }\n\n const prisma = getPrismaInstance();\n\n // Update the password\n await (prisma as any).user.update({\n where: { id: user.id },\n data: {\n password: await authService.hashPassword(newPassword),\n passwordChangedAt: new Date(Date.now()),\n },\n });\n\n if (middlewares?.afterUpdatePassword) {\n req.additionalData = {\n user,\n };\n req.responseData = {\n status: \"success\",\n message: \"Password updated successfully!\",\n };\n req.responseStatus = 200;\n return next();\n }\n\n res.status(200).json({\n status: \"success\",\n message: \"Password updated successfully!\",\n });\n }\n ),\n };\n};\n"]}
@@ -1,13 +1,4 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
12
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
4
  };
@@ -21,54 +12,51 @@ const models_helpers_1 = require("../../utils/helpers/models.helpers");
21
12
  const base_middlewares_1 = require("../base/base.middlewares");
22
13
  const deepmerge_helper_1 = __importDefault(require("../../utils/helpers/deepmerge.helper"));
23
14
  const router = (0, express_1.Router)();
24
- function getAuthRouter(arkosConfigs) {
25
- return __awaiter(this, void 0, void 0, function* () {
26
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
27
- const { middlewares, dtos, schemas } = yield (0, models_helpers_1.importPrismaModelModules)("auth");
28
- const authController = yield (0, auth_controller_1.authControllerFactory)(middlewares);
29
- const getValidationSchemaOrDto = (key) => {
30
- const validationConfigs = arkosConfigs === null || arkosConfigs === void 0 ? void 0 : arkosConfigs.validation;
31
- if ((validationConfigs === null || validationConfigs === void 0 ? void 0 : validationConfigs.resolver) === "class-validator") {
32
- return dtos === null || dtos === void 0 ? void 0 : dtos[key];
33
- }
34
- else if ((validationConfigs === null || validationConfigs === void 0 ? void 0 : validationConfigs.resolver) === "zod") {
35
- return schemas === null || schemas === void 0 ? void 0 : schemas[key];
36
- }
37
- return undefined;
38
- };
39
- router
40
- .get("/users/me", auth_service_1.default.authenticate, (_a = middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeGetMe) !== null && _a !== void 0 ? _a : authController.getMe, (middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeGetMe)
41
- ? authController.getMe
42
- : (_b = middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterGetMe) !== null && _b !== void 0 ? _b : base_middlewares_1.sendResponse, (middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeGetMe) && (middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterGetMe)
43
- ? middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterGetMe
44
- : base_middlewares_1.sendResponse, base_middlewares_1.sendResponse)
45
- .patch("/users/me", auth_service_1.default.authenticate, (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(getValidationSchemaOrDto("updateMe")), (_c = middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeGetMe) !== null && _c !== void 0 ? _c : authController.getMe, (middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeGetMe)
46
- ? authController.getMe
47
- : (_d = middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterGetMe) !== null && _d !== void 0 ? _d : base_middlewares_1.sendResponse, (middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeGetMe) && (middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterGetMe)
48
- ? middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterGetMe
49
- : base_middlewares_1.sendResponse, base_middlewares_1.sendResponse);
50
- router.use((0, express_rate_limit_1.default)((0, deepmerge_helper_1.default)({
51
- windowMs: 5000,
52
- limit: 10,
53
- standardHeaders: "draft-7",
54
- legacyHeaders: false,
55
- }, ((_e = arkosConfigs === null || arkosConfigs === void 0 ? void 0 : arkosConfigs.authentication) === null || _e === void 0 ? void 0 : _e.requestRateLimitOptions) || {})));
56
- router.post("/auth/login", (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(getValidationSchemaOrDto("login")), (_f = middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeLogin) !== null && _f !== void 0 ? _f : authController.login, (middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeLogin)
57
- ? authController.login
58
- : (_g = middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterLogin) !== null && _g !== void 0 ? _g : base_middlewares_1.sendResponse, (middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeLogin) && (middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterLogin)
59
- ? middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterLogin
60
- : base_middlewares_1.sendResponse, base_middlewares_1.sendResponse);
61
- router.post("/auth/signup", (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(getValidationSchemaOrDto("signup")), (_h = middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeSignup) !== null && _h !== void 0 ? _h : authController.signup, (middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeSignup)
62
- ? authController.signup
63
- : (_j = middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterSignup) !== null && _j !== void 0 ? _j : base_middlewares_1.sendResponse, (middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeSignup) && (middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterSignup)
64
- ? middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterSignup
65
- : base_middlewares_1.sendResponse, base_middlewares_1.sendResponse);
66
- router.post("/auth/update-password", auth_service_1.default.authenticate, (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(getValidationSchemaOrDto("updatePassword")), (_k = middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeUpdatePassword) !== null && _k !== void 0 ? _k : authController.updatePassword, (middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeUpdatePassword)
67
- ? authController.updatePassword
68
- : (_l = middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterUpdatePassword) !== null && _l !== void 0 ? _l : base_middlewares_1.sendResponse, (middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeUpdatePassword) && (middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterUpdatePassword)
69
- ? middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterUpdatePassword
70
- : base_middlewares_1.sendResponse, base_middlewares_1.sendResponse);
71
- return router;
72
- });
15
+ async function getAuthRouter(arkosConfigs) {
16
+ const { middlewares, dtos, schemas } = await (0, models_helpers_1.importPrismaModelModules)("auth");
17
+ const authController = await (0, auth_controller_1.authControllerFactory)(middlewares);
18
+ const getValidationSchemaOrDto = (key) => {
19
+ const validationConfigs = arkosConfigs?.validation;
20
+ if (validationConfigs?.resolver === "class-validator") {
21
+ return dtos?.[key];
22
+ }
23
+ else if (validationConfigs?.resolver === "zod") {
24
+ return schemas?.[key];
25
+ }
26
+ return undefined;
27
+ };
28
+ router
29
+ .get("/users/me", auth_service_1.default.authenticate, middlewares?.beforeGetMe ?? authController.getMe, middlewares?.beforeGetMe
30
+ ? authController.getMe
31
+ : middlewares?.afterGetMe ?? base_middlewares_1.sendResponse, middlewares?.beforeGetMe && middlewares?.afterGetMe
32
+ ? middlewares?.afterGetMe
33
+ : base_middlewares_1.sendResponse, base_middlewares_1.sendResponse)
34
+ .patch("/users/me", auth_service_1.default.authenticate, (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(getValidationSchemaOrDto("updateMe")), middlewares?.beforeGetMe ?? authController.getMe, middlewares?.beforeGetMe
35
+ ? authController.getMe
36
+ : middlewares?.afterGetMe ?? base_middlewares_1.sendResponse, middlewares?.beforeGetMe && middlewares?.afterGetMe
37
+ ? middlewares?.afterGetMe
38
+ : base_middlewares_1.sendResponse, base_middlewares_1.sendResponse);
39
+ router.use((0, express_rate_limit_1.default)((0, deepmerge_helper_1.default)({
40
+ windowMs: 5000,
41
+ limit: 10,
42
+ standardHeaders: "draft-7",
43
+ legacyHeaders: false,
44
+ }, arkosConfigs?.authentication?.requestRateLimitOptions || {})));
45
+ router.post("/auth/login", (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(getValidationSchemaOrDto("login")), middlewares?.beforeLogin ?? authController.login, middlewares?.beforeLogin
46
+ ? authController.login
47
+ : middlewares?.afterLogin ?? base_middlewares_1.sendResponse, middlewares?.beforeLogin && middlewares?.afterLogin
48
+ ? middlewares?.afterLogin
49
+ : base_middlewares_1.sendResponse, base_middlewares_1.sendResponse);
50
+ router.post("/auth/signup", (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(getValidationSchemaOrDto("signup")), middlewares?.beforeSignup ?? authController.signup, middlewares?.beforeSignup
51
+ ? authController.signup
52
+ : middlewares?.afterSignup ?? base_middlewares_1.sendResponse, middlewares?.beforeSignup && middlewares?.afterSignup
53
+ ? middlewares?.afterSignup
54
+ : base_middlewares_1.sendResponse, base_middlewares_1.sendResponse);
55
+ router.post("/auth/update-password", auth_service_1.default.authenticate, (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(getValidationSchemaOrDto("updatePassword")), middlewares?.beforeUpdatePassword ?? authController.updatePassword, middlewares?.beforeUpdatePassword
56
+ ? authController.updatePassword
57
+ : middlewares?.afterUpdatePassword ?? base_middlewares_1.sendResponse, middlewares?.beforeUpdatePassword && middlewares?.afterUpdatePassword
58
+ ? middlewares?.afterUpdatePassword
59
+ : base_middlewares_1.sendResponse, base_middlewares_1.sendResponse);
60
+ return router;
73
61
  }
74
62
  //# sourceMappingURL=auth.router.js.map