arkos 0.7.0-beta.1 → 0.9.0-beta.1

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 (106) hide show
  1. package/dist/cjs/modules/auth/__tests__/auth.controller.test.js +2 -0
  2. package/dist/cjs/modules/auth/__tests__/auth.controller.test.js.map +1 -0
  3. package/dist/cjs/modules/auth/auth.service.js +1 -1
  4. package/dist/cjs/modules/auth/auth.service.js.map +1 -1
  5. package/dist/cjs/modules/auth/utils/helpers/__tests__/auth.helpers.test.js +2 -0
  6. package/dist/cjs/modules/auth/utils/helpers/__tests__/auth.helpers.test.js.map +1 -0
  7. package/dist/cjs/modules/base/utils/helpers/__tests__/base.helpers.test.js +2 -0
  8. package/dist/cjs/modules/base/utils/helpers/__tests__/base.helpers.test.js.map +1 -0
  9. package/dist/cjs/utils/helpers/models.helpers.js +51 -18
  10. package/dist/cjs/utils/helpers/models.helpers.js.map +1 -1
  11. package/dist/cjs/utils/helpers/pluralize.helpers.js +0 -1
  12. package/dist/cjs/utils/helpers/prisma.helpers.js +34 -1
  13. package/dist/cjs/utils/helpers/prisma.helpers.js.map +1 -1
  14. package/dist/es2020/app.js +1 -1
  15. package/dist/es2020/app.js.map +1 -1
  16. package/dist/es2020/exports/auth/index.js +2 -5
  17. package/dist/es2020/exports/auth/index.js.map +1 -1
  18. package/dist/es2020/exports/error-handler/index.js +3 -10
  19. package/dist/es2020/exports/error-handler/index.js.map +1 -1
  20. package/dist/es2020/exports/index.js +3 -5
  21. package/dist/es2020/exports/index.js.map +1 -1
  22. package/dist/es2020/exports/prisma/index.js +1 -2
  23. package/dist/es2020/exports/services/index.js +8 -52
  24. package/dist/es2020/exports/services/index.js.map +1 -1
  25. package/dist/es2020/exports/utils/change-case.js +1 -17
  26. package/dist/es2020/exports/utils/change-case.js.map +1 -1
  27. package/dist/es2020/exports/utils/index.js +2 -5
  28. package/dist/es2020/exports/utils/index.js.map +1 -1
  29. package/dist/es2020/exports/validation/index.js +2 -8
  30. package/dist/es2020/exports/validation/index.js.map +1 -1
  31. package/dist/es2020/modules/auth/auth.controller.js +73 -71
  32. package/dist/es2020/modules/auth/auth.controller.js.map +1 -1
  33. package/dist/es2020/modules/auth/auth.router.js +64 -57
  34. package/dist/es2020/modules/auth/auth.router.js.map +1 -1
  35. package/dist/es2020/modules/auth/auth.service.js +93 -80
  36. package/dist/es2020/modules/auth/auth.service.js.map +1 -1
  37. package/dist/es2020/modules/auth/utils/helpers/auth.helpers.js +6 -10
  38. package/dist/es2020/modules/auth/utils/helpers/auth.helpers.js.map +1 -1
  39. package/dist/es2020/modules/base/base.controller.js +125 -118
  40. package/dist/es2020/modules/base/base.controller.js.map +1 -1
  41. package/dist/es2020/modules/base/base.middlewares.js +6 -16
  42. package/dist/es2020/modules/base/base.middlewares.js.map +1 -1
  43. package/dist/es2020/modules/base/base.router.js +59 -54
  44. package/dist/es2020/modules/base/base.router.js.map +1 -1
  45. package/dist/es2020/modules/base/base.service.js +138 -143
  46. package/dist/es2020/modules/base/base.service.js.map +1 -1
  47. package/dist/es2020/modules/base/utils/helpers/base.helpers.js +44 -41
  48. package/dist/es2020/modules/base/utils/helpers/base.helpers.js.map +1 -1
  49. package/dist/es2020/modules/email/email.service.js +24 -23
  50. package/dist/es2020/modules/email/email.service.js.map +1 -1
  51. package/dist/es2020/modules/error-handler/error-handler.controller.js +7 -42
  52. package/dist/es2020/modules/error-handler/error-handler.controller.js.map +1 -1
  53. package/dist/es2020/modules/error-handler/utils/app-error.js +1 -3
  54. package/dist/es2020/modules/error-handler/utils/app-error.js.map +1 -1
  55. package/dist/es2020/modules/error-handler/utils/catch-async.js +13 -6
  56. package/dist/es2020/modules/error-handler/utils/catch-async.js.map +1 -1
  57. package/dist/es2020/modules/error-handler/utils/error-handler.helpers.js +105 -131
  58. package/dist/es2020/modules/error-handler/utils/error-handler.helpers.js.map +1 -1
  59. package/dist/es2020/modules/file-uploader/file-uploader.controller.js +60 -56
  60. package/dist/es2020/modules/file-uploader/file-uploader.controller.js.map +1 -1
  61. package/dist/es2020/modules/file-uploader/file-uploader.router.js +19 -16
  62. package/dist/es2020/modules/file-uploader/file-uploader.router.js.map +1 -1
  63. package/dist/es2020/modules/file-uploader/file-uploader.service.js +35 -36
  64. package/dist/es2020/modules/file-uploader/file-uploader.service.js.map +1 -1
  65. package/dist/es2020/paths.js +1 -1
  66. package/dist/es2020/paths.js.map +1 -1
  67. package/dist/es2020/scripts/create-test.js +12 -17
  68. package/dist/es2020/scripts/create-test.js.map +1 -1
  69. package/dist/es2020/server.js +1 -1
  70. package/dist/es2020/server.js.map +1 -1
  71. package/dist/es2020/utils/arkos-env.js +1 -3
  72. package/dist/es2020/utils/arkos-env.js.map +1 -1
  73. package/dist/es2020/utils/features/api.features.js +60 -72
  74. package/dist/es2020/utils/features/api.features.js.map +1 -1
  75. package/dist/es2020/utils/features/change-case.features.js +12 -48
  76. package/dist/es2020/utils/features/change-case.features.js.map +1 -1
  77. package/dist/es2020/utils/helpers/api.features.helpers.js +3 -5
  78. package/dist/es2020/utils/helpers/api.features.helpers.js.map +1 -1
  79. package/dist/es2020/utils/helpers/base.controller.helpers.js +30 -24
  80. package/dist/es2020/utils/helpers/base.controller.helpers.js.map +1 -1
  81. package/dist/es2020/utils/helpers/change-case.helpers.js +48 -56
  82. package/dist/es2020/utils/helpers/change-case.helpers.js.map +1 -1
  83. package/dist/es2020/utils/helpers/deepmerge.helper.js +9 -7
  84. package/dist/es2020/utils/helpers/deepmerge.helper.js.map +1 -1
  85. package/dist/es2020/utils/helpers/fs.helpers.js +5 -7
  86. package/dist/es2020/utils/helpers/fs.helpers.js.map +1 -1
  87. package/dist/es2020/utils/helpers/models.helpers.js +151 -152
  88. package/dist/es2020/utils/helpers/models.helpers.js.map +1 -1
  89. package/dist/es2020/utils/helpers/pluralize.helpers.js +0 -1
  90. package/dist/es2020/utils/helpers/prisma.helpers.js +24 -23
  91. package/dist/es2020/utils/helpers/prisma.helpers.js.map +1 -1
  92. package/dist/es2020/utils/helpers/query-parser.helpers.js +5 -10
  93. package/dist/es2020/utils/helpers/query-parser.helpers.js.map +1 -1
  94. package/dist/es2020/utils/helpers/text.helpers.js +1 -4
  95. package/dist/es2020/utils/helpers/text.helpers.js.map +1 -1
  96. package/dist/es2020/utils/scripts/export-prisma-types.js +2 -37
  97. package/dist/es2020/utils/scripts/export-prisma-types.js.map +1 -1
  98. package/dist/es2020/utils/scripts/generate-zod-schemas.js +108 -100
  99. package/dist/es2020/utils/scripts/generate-zod-schemas.js.map +1 -1
  100. package/dist/es2020/utils/scripts/prisma-db-push.js +8 -13
  101. package/dist/es2020/utils/scripts/prisma-db-push.js.map +1 -1
  102. package/dist/es2020/utils/validate-dto.js +19 -14
  103. package/dist/es2020/utils/validate-dto.js.map +1 -1
  104. package/dist/es2020/utils/validate-schema.js +17 -12
  105. package/dist/es2020/utils/validate-schema.js.map +1 -1
  106. package/package.json +4 -5
@@ -1 +1 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(r,e,a,t){t===void 0&&(t=a);var s=Object.getOwnPropertyDescriptor(e,a);(!s||("get"in s?!e.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return e[a]}}),Object.defineProperty(r,t,s)}:function(r,e,a,t){t===void 0&&(t=a),r[t]=e[a]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(r,e){Object.defineProperty(r,"default",{enumerable:!0,value:e})}:function(r,e){r.default=e}),__importStar=this&&this.__importStar||function(){var r=function(e){return r=Object.getOwnPropertyNames||function(a){var t=[];for(var s in a)Object.prototype.hasOwnProperty.call(a,s)&&(t[t.length]=s);return t},r(e)};return function(e){if(e&&e.__esModule)return e;var a={};if(e!=null)for(var t=r(e),s=0;s<t.length;s++)t[s]!=="default"&&__createBinding(a,e,t[s]);return __setModuleDefault(a,e),a}}(),__importDefault=this&&this.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(exports,"__esModule",{value:!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=__importDefault(require("./modules/auth/auth.router")),base_router_1=__importDefault(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"),path_1=__importDefault(require("path")),dotenv=__importStar(require("dotenv")),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"),ENV=process.env.NODE_ENV;let envPath=".env";ENV==="production"?envPath=path_1.default.resolve(process.cwd(),".env.production"):ENV==="staging"?envPath=path_1.default.resolve(process.cwd(),".env.staging"):ENV==="development"?envPath=path_1.default.resolve(process.cwd(),".env.development"):ENV==="local"?envPath=path_1.default.resolve(process.cwd(),".env.local"):ENV==="test"?envPath=path_1.default.resolve(process.cwd(),".env.test"):ENV==="qa"&&(envPath=path_1.default.resolve(process.cwd(),".env.qa")),dotenv.config({path:envPath});let initConfigs,prisma;(async()=>prisma=await(0,prisma_helpers_1.loadPrismaModule)())();async function bootstrap(r){const e=(0,express_1.default)();prisma=await(0,prisma_helpers_1.loadPrismaModule)(),initConfigs=r,e.use((0,compression_1.default)());const a=(0,express_rate_limit_1.rateLimit)({windowMs:60*1e3,limit:1e3,standardHeaders:"draft-7",legacyHeaders:!1});return e.use(a),e.set("trust proxy",1),e.use("/api/uploads",express_1.default.static(path_1.default.join("uploads"),{maxAge:"1y",etag:!0,lastModified:!0,dotfiles:"ignore",fallthrough:!0,index:!1,cacheControl:!0})),e.use((0,cors_1.default)({origin:(t,s)=>{s(null,!0)},methods:["GET","POST","PUT","DELETE","PATCH","OPTION"],allowedHeaders:["Content-Type","Authorization","Connection"],credentials:!0})),e.use(express_1.default.json()),e.use((0,cookie_parser_1.default)()),e.use((0,query_parser_helpers_1.queryParser)({parseNull:!0,parseUndefined:!0,parseBoolean:!0})),e.use(prisma_helpers_1.checkDatabaseConnection),e.use(base_middlewares_1.handleRequestLogs),r.authentication&&e.use("/api",auth_router_1.default),e.use("/api",base_router_1.default),e.use("/api",file_uploader_router_1.fileUploaderRouter),e.use(error_handler_controller_1.default),e}
1
+ "use strict";var m=function(u,e,i,n){function p(a){return a instanceof i?a:new i(function(l){l(a)})}return new(i||(i=Promise))(function(a,l){function w(o){try{c(n.next(o))}catch(d){l(d)}}function g(o){try{c(n.throw(o))}catch(d){l(d)}}function c(o){o.done?a(o.value):p(o.value).then(w,g)}c((n=n.apply(u,e||[])).next())})};import f from"express";import y from"cors";import x from"cookie-parser";import E from"./modules/auth/auth.router";import T from"./modules/base/base.router";import C from"./modules/error-handler/error-handler.controller";import{rateLimit as P}from"express-rate-limit";import t from"path";import*as H from"dotenv";import N from"compression";import{handleRequestLogs as _}from"./modules/base/base.middlewares";import{checkDatabaseConnection as q,loadPrismaModule as v}from"./utils/helpers/prisma.helpers";import{fileUploaderRouter as O}from"./modules/file-uploader/file-uploader.router";import{queryParser as R}from"./utils/helpers/query-parser.helpers";const s=process.env.NODE_ENV;let r=".env";s==="production"?r=t.resolve(process.cwd(),".env.production"):s==="staging"?r=t.resolve(process.cwd(),".env.staging"):s==="development"?r=t.resolve(process.cwd(),".env.development"):s==="local"?r=t.resolve(process.cwd(),".env.local"):s==="test"?r=t.resolve(process.cwd(),".env.test"):s==="qa"&&(r=t.resolve(process.cwd(),".env.qa")),H.config({path:r});let b,h;m(void 0,void 0,void 0,function*(){h=yield v()});export function bootstrap(u){return m(this,void 0,void 0,function*(){const e=f();h=yield v(),b=u,e.use(N());const i=P({windowMs:60*1e3,limit:1e3,standardHeaders:"draft-7",legacyHeaders:!1});return e.use(i),e.set("trust proxy",1),e.use("/api/uploads",f.static(t.join("uploads"),{maxAge:"1y",etag:!0,lastModified:!0,dotfiles:"ignore",fallthrough:!0,index:!1,cacheControl:!0})),e.use(y({origin:(n,p)=>{p(null,!0)},methods:["GET","POST","PUT","DELETE","PATCH","OPTION"],allowedHeaders:["Content-Type","Authorization","Connection"],credentials:!0})),e.use(f.json()),e.use(x()),e.use(R({parseNull:!0,parseUndefined:!0,parseBoolean:!0})),e.use(q),e.use(_),u.authentication&&e.use("/api",E),e.use("/api",T),e.use("/api",O),e.use(C),e})}
@@ -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 authRouter from \"./modules/auth/auth.router\";\nimport baseRouter from \"./modules/base/base.router\";\nimport errorHandler from \"./modules/error-handler/error-handler.controller\";\nimport { rateLimit } from \"express-rate-limit\";\nimport path from \"path\";\nimport * as dotenv from \"dotenv\";\nimport compression from \"compression\";\nimport { handleRequestLogs } from \"./modules/base/base.middlewares\";\nimport {\n checkDatabaseConnection,\n loadPrismaModule,\n} from \"./utils/helpers/prisma.helpers\";\nimport { fileUploaderRouter } from \"./modules/file-uploader/file-uploader.router\";\nimport { InitConfigs } from \"./types/app\";\nimport { queryParser } from \"./utils/helpers/query-parser.helpers\";\n\nconst ENV = process.env.NODE_ENV;\nlet envPath = \".env\";\n\n// Default to `.env.local` if available in any environment\nif (ENV === \"production\") {\n envPath = path.resolve(process.cwd(), \".env.production\");\n} else if (ENV === \"staging\") {\n envPath = path.resolve(process.cwd(), \".env.staging\");\n} else if (ENV === \"development\") {\n envPath = path.resolve(process.cwd(), \".env.development\");\n} else if (ENV === \"local\") {\n // For local development, .env.local can be used\n envPath = path.resolve(process.cwd(), \".env.local\");\n}\n\n// Optionally, add support for `.env.test`, `.env.qa`, or other environments if required\nelse if (ENV === \"test\") {\n envPath = path.resolve(process.cwd(), \".env.test\");\n} else if (ENV === \"qa\") {\n envPath = path.resolve(process.cwd(), \".env.qa\");\n}\n\ndotenv.config({ path: envPath });\n\nlet initConfigs: InitConfigs;\nlet prisma: any;\n\n(async () => {\n prisma = await loadPrismaModule();\n})();\n\nexport async function bootstrap(\n configs: InitConfigs\n): Promise<express.Express> {\n const app = express();\n\n prisma = await loadPrismaModule();\n\n initConfigs = configs;\n\n app.use(compression());\n\n const limiter = rateLimit({\n windowMs: 60 * 1000,\n limit: 1000,\n standardHeaders: \"draft-7\",\n legacyHeaders: false,\n });\n\n app.use(limiter);\n\n app.set(\"trust proxy\", 1);\n\n app.use(\n \"/api/uploads\",\n express.static(path.join(\"uploads\"), {\n maxAge: \"1y\",\n etag: true,\n lastModified: true,\n dotfiles: \"ignore\",\n fallthrough: true,\n index: false,\n cacheControl: true,\n })\n );\n\n app.use(\n cors({\n origin: (origin, callback) => {\n callback(null, true);\n },\n methods: [\"GET\", \"POST\", \"PUT\", \"DELETE\", \"PATCH\", \"OPTION\"],\n allowedHeaders: [\"Content-Type\", \"Authorization\", \"Connection\"],\n credentials: true,\n })\n );\n\n app.use(express.json());\n app.use(cookieParser());\n app.use(\n queryParser({\n parseNull: true,\n parseUndefined: true,\n parseBoolean: true,\n })\n );\n\n app.use(checkDatabaseConnection);\n\n app.use(handleRequestLogs);\n\n if (configs.authentication) app.use(\"/api\", authRouter);\n app.use(\"/api\", baseRouter);\n app.use(\"/api\", fileUploaderRouter);\n app.use(errorHandler);\n\n return app;\n}\n"]}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/app.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,YAAY,MAAM,eAAe,CAAC;AACzC,OAAO,UAAU,MAAM,4BAA4B,CAAC;AACpD,OAAO,UAAU,MAAM,4BAA4B,CAAC;AACpD,OAAO,YAAY,MAAM,kDAAkD,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,WAAW,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EACL,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,8CAA8C,CAAC;AAElF,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAEnE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;AACjC,IAAI,OAAO,GAAG,MAAM,CAAC;AAGrB,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;IACzB,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,iBAAiB,CAAC,CAAC;AAC3D,CAAC;KAAM,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;IAC7B,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;AACxD,CAAC;KAAM,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;IACjC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,kBAAkB,CAAC,CAAC;AAC5D,CAAC;KAAM,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;IAE3B,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC;AACtD,CAAC;KAGI,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;IACxB,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;AACrD,CAAC;KAAM,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;IACxB,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAEjC,IAAI,WAAwB,CAAC;AAC7B,IAAI,MAAW,CAAC;AAEhB,CAAC,GAAS,EAAE;IACV,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;AACpC,CAAC,CAAA,CAAC,EAAE,CAAC;AAEL,MAAM,UAAgB,SAAS,CAC7B,OAAoB;;QAEpB,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;QAEtB,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;QAElC,WAAW,GAAG,OAAO,CAAC;QAEtB,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QAEvB,MAAM,OAAO,GAAG,SAAS,CAAC;YACxB,QAAQ,EAAE,EAAE,GAAG,IAAI;YACnB,KAAK,EAAE,IAAI;YACX,eAAe,EAAE,SAAS;YAC1B,aAAa,EAAE,KAAK;SACrB,CAAC,CAAC;QAEH,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAEjB,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QAE1B,GAAG,CAAC,GAAG,CACL,cAAc,EACd,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;YACnC,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,IAAI;YACV,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,QAAQ;YAClB,WAAW,EAAE,IAAI;YACjB,KAAK,EAAE,KAAK;YACZ,YAAY,EAAE,IAAI;SACnB,CAAC,CACH,CAAC;QAEF,GAAG,CAAC,GAAG,CACL,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;gBAC3B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACvB,CAAC;YACD,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC;YAC5D,cAAc,EAAE,CAAC,cAAc,EAAE,eAAe,EAAE,YAAY,CAAC;YAC/D,WAAW,EAAE,IAAI;SAClB,CAAC,CACH,CAAC;QAEF,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACxB,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;QACxB,GAAG,CAAC,GAAG,CACL,WAAW,CAAC;YACV,SAAS,EAAE,IAAI;YACf,cAAc,EAAE,IAAI;YACpB,YAAY,EAAE,IAAI;SACnB,CAAC,CACH,CAAC;QAEF,GAAG,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QAEjC,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAE3B,IAAI,OAAO,CAAC,cAAc;YAAE,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACxD,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC5B,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;QACpC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAEtB,OAAO,GAAG,CAAC;IACb,CAAC;CAAA","sourcesContent":["import express from \"express\";\nimport cors from \"cors\";\nimport cookieParser from \"cookie-parser\";\nimport authRouter from \"./modules/auth/auth.router\";\nimport baseRouter from \"./modules/base/base.router\";\nimport errorHandler from \"./modules/error-handler/error-handler.controller\";\nimport { rateLimit } from \"express-rate-limit\";\nimport path from \"path\";\nimport * as dotenv from \"dotenv\";\nimport compression from \"compression\";\nimport { handleRequestLogs } from \"./modules/base/base.middlewares\";\nimport {\n checkDatabaseConnection,\n loadPrismaModule,\n} from \"./utils/helpers/prisma.helpers\";\nimport { fileUploaderRouter } from \"./modules/file-uploader/file-uploader.router\";\nimport { InitConfigs } from \"./types/app\";\nimport { queryParser } from \"./utils/helpers/query-parser.helpers\";\n\nconst ENV = process.env.NODE_ENV;\nlet envPath = \".env\";\n\n// Default to `.env.local` if available in any environment\nif (ENV === \"production\") {\n envPath = path.resolve(process.cwd(), \".env.production\");\n} else if (ENV === \"staging\") {\n envPath = path.resolve(process.cwd(), \".env.staging\");\n} else if (ENV === \"development\") {\n envPath = path.resolve(process.cwd(), \".env.development\");\n} else if (ENV === \"local\") {\n // For local development, .env.local can be used\n envPath = path.resolve(process.cwd(), \".env.local\");\n}\n\n// Optionally, add support for `.env.test`, `.env.qa`, or other environments if required\nelse if (ENV === \"test\") {\n envPath = path.resolve(process.cwd(), \".env.test\");\n} else if (ENV === \"qa\") {\n envPath = path.resolve(process.cwd(), \".env.qa\");\n}\n\ndotenv.config({ path: envPath });\n\nlet initConfigs: InitConfigs;\nlet prisma: any;\n\n(async () => {\n prisma = await loadPrismaModule();\n})();\n\nexport async function bootstrap(\n configs: InitConfigs\n): Promise<express.Express> {\n const app = express();\n\n prisma = await loadPrismaModule();\n\n initConfigs = configs;\n\n app.use(compression());\n\n const limiter = rateLimit({\n windowMs: 60 * 1000,\n limit: 1000,\n standardHeaders: \"draft-7\",\n legacyHeaders: false,\n });\n\n app.use(limiter);\n\n app.set(\"trust proxy\", 1);\n\n app.use(\n \"/api/uploads\",\n express.static(path.join(\"uploads\"), {\n maxAge: \"1y\",\n etag: true,\n lastModified: true,\n dotfiles: \"ignore\",\n fallthrough: true,\n index: false,\n cacheControl: true,\n })\n );\n\n app.use(\n cors({\n origin: (origin, callback) => {\n callback(null, true);\n },\n methods: [\"GET\", \"POST\", \"PUT\", \"DELETE\", \"PATCH\", \"OPTION\"],\n allowedHeaders: [\"Content-Type\", \"Authorization\", \"Connection\"],\n credentials: true,\n })\n );\n\n app.use(express.json());\n app.use(cookieParser());\n app.use(\n queryParser({\n parseNull: true,\n parseUndefined: true,\n parseBoolean: true,\n })\n );\n\n app.use(checkDatabaseConnection);\n\n app.use(handleRequestLogs);\n\n if (configs.authentication) app.use(\"/api\", authRouter);\n app.use(\"/api\", baseRouter);\n app.use(\"/api\", fileUploaderRouter);\n app.use(errorHandler);\n\n return app;\n}\n"]}
@@ -1,6 +1,3 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.defaultExcludedUserFields = void 0;
4
- const auth_controller_1 = require("./../../modules/auth/auth.controller");
5
- Object.defineProperty(exports, "defaultExcludedUserFields", { enumerable: true, get: function () { return auth_controller_1.defaultExcludedUserFields; } });
1
+ import { defaultExcludedUserFields } from "./../../modules/auth/auth.controller";
2
+ export { defaultExcludedUserFields };
6
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/exports/auth/index.ts"],"names":[],"mappings":";;;AAAA,0EAAiF;AAGxE,0GAHA,2CAAyB,OAGA","sourcesContent":["import { defaultExcludedUserFields } from \"./../../modules/auth/auth.controller\";\nimport { AuthConfigs, AuthJwtPayload } from \"../../types/auth\";\n\nexport { defaultExcludedUserFields, AuthConfigs, AuthJwtPayload };\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/exports/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AAGjF,OAAO,EAAE,yBAAyB,EAA+B,CAAC","sourcesContent":["import { defaultExcludedUserFields } from \"./../../modules/auth/auth.controller\";\nimport { AuthConfigs, AuthJwtPayload } from \"../../types/auth\";\n\nexport { defaultExcludedUserFields, AuthConfigs, AuthJwtPayload };\n"]}
@@ -1,11 +1,4 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.AppError = exports.catchAsync = void 0;
7
- const catch_async_1 = __importDefault(require("../../modules/error-handler/utils/catch-async"));
8
- exports.catchAsync = catch_async_1.default;
9
- const app_error_1 = __importDefault(require("../../modules/error-handler/utils/app-error"));
10
- exports.AppError = app_error_1.default;
1
+ import catchAsync from "../../modules/error-handler/utils/catch-async";
2
+ import AppError from "../../modules/error-handler/utils/app-error";
3
+ export { catchAsync, AppError };
11
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/exports/error-handler/index.ts"],"names":[],"mappings":";;;;;;AAAA,gGAAuE;AAG9D,qBAHF,qBAAU,CAGE;AAFnB,4FAAmE;AAE9C,mBAFd,mBAAQ,CAEc","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,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,8 +1,6 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const server_1 = require("../server");
1
+ import { initApp } from "../server";
4
2
  const arkos = {
5
- init: server_1.initApp,
3
+ init: initApp,
6
4
  };
7
- exports.default = arkos;
5
+ export default arkos;
8
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/exports/index.ts"],"names":[],"mappings":";;AAAA,sCAAoC;AAcpC,MAAM,KAAK,GAAG;IACZ,IAAI,EAAE,gBAAO;CACd,CAAC;AASF,kBAAe,KAAK,CAAC","sourcesContent":["import { initApp } from \"../server\";\nimport {\n ArkosRequest,\n ArkosResponse,\n ArkosNextFunction,\n ArkosRequestHandler,\n} from \"../types\";\n\n/**\n * Initializes the Arkos application.\n *\n * @module arkos\n * @property {Function} init - Function to initialize the app.\n */\nconst arkos = {\n init: initApp,\n};\n\nexport { ArkosRequest, ArkosResponse, ArkosNextFunction, ArkosRequestHandler };\n\n/**\n * Main entry point for the Arkos module.\n *\n * @module arkos\n */\nexport default arkos;\n\n// export * from \"./services\";\n// export * from \"./utils\";\n// export * from \"./validation\";\n// export * from \"./error-handler\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/exports/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,MAAM,KAAK,GAAG;IACZ,IAAI,EAAE,OAAO;CACd,CAAC;AASF,eAAe,KAAK,CAAC","sourcesContent":["import { initApp } from \"../server\";\nimport {\n ArkosRequest,\n ArkosResponse,\n ArkosNextFunction,\n ArkosRequestHandler,\n} from \"../types\";\n\n/**\n * Initializes the Arkos application.\n *\n * @module arkos\n * @property {Function} init - Function to initialize the app.\n */\nconst arkos = {\n init: initApp,\n};\n\nexport { ArkosRequest, ArkosResponse, ArkosNextFunction, ArkosRequestHandler };\n\n/**\n * Main entry point for the Arkos module.\n *\n * @module arkos\n */\nexport default arkos;\n\n// export * from \"./services\";\n// export * from \"./utils\";\n// export * from \"./validation\";\n// export * from \"./error-handler\";\n"]}
@@ -1,3 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ export {};
3
2
  //# sourceMappingURL=index.js.map
@@ -1,53 +1,9 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.fileUploaderService = exports.videoUploaderService = exports.documentUploaderService = exports.imageUploaderService = exports.EmailService = exports.emailService = exports.getBaseServices = exports.BaseService = exports.authService = void 0;
40
- const auth_service_1 = __importDefault(require("../../modules/auth/auth.service"));
41
- exports.authService = auth_service_1.default;
42
- const email_service_1 = __importStar(require("../../modules/email/email.service"));
43
- exports.emailService = email_service_1.default;
44
- Object.defineProperty(exports, "EmailService", { enumerable: true, get: function () { return email_service_1.EmailService; } });
45
- const file_uploader_service_1 = require("../../modules/file-uploader/file-uploader.service");
46
- Object.defineProperty(exports, "imageUploaderService", { enumerable: true, get: function () { return file_uploader_service_1.imageUploaderService; } });
47
- Object.defineProperty(exports, "documentUploaderService", { enumerable: true, get: function () { return file_uploader_service_1.documentUploaderService; } });
48
- Object.defineProperty(exports, "videoUploaderService", { enumerable: true, get: function () { return file_uploader_service_1.videoUploaderService; } });
49
- Object.defineProperty(exports, "fileUploaderService", { enumerable: true, get: function () { return file_uploader_service_1.fileUploaderService; } });
50
- const base_service_1 = require("../../modules/base/base.service");
51
- Object.defineProperty(exports, "BaseService", { enumerable: true, get: function () { return base_service_1.BaseService; } });
52
- Object.defineProperty(exports, "getBaseServices", { enumerable: true, get: function () { return base_service_1.getBaseServices; } });
1
+ import authService from "../../modules/auth/auth.service";
2
+ import emailService, { EmailService } from "../../modules/email/email.service";
3
+ import { imageUploaderService, documentUploaderService, videoUploaderService, fileUploaderService, } from "../../modules/file-uploader/file-uploader.service";
4
+ import { BaseService, getBaseServices } from "../../modules/base/base.service";
5
+ export { authService };
6
+ export { BaseService, getBaseServices };
7
+ export { emailService, EmailService };
8
+ export { imageUploaderService, documentUploaderService, videoUploaderService, fileUploaderService, };
53
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/exports/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,mFAA0D;AAajD,sBAbF,sBAAW,CAaE;AAZpB,mFAA+E;AAsBtE,uBAtBF,uBAAY,CAsBE;AAAE,6FAtBA,4BAAY,OAsBA;AArBnC,6FAK2D;AAsBzD,qGA1BA,4CAAoB,OA0BA;AACpB,wGA1BA,+CAAuB,OA0BA;AACvB,qGA1BA,4CAAoB,OA0BA;AACpB,oGA1BA,2CAAmB,OA0BA;AAxBrB,kEAA+E;AAUtE,4FAVA,0BAAW,OAUA;AAAE,gGAVA,8BAAe,OAUA","sourcesContent":["import { EmailOptions } from \"../../modules/email/email.service\";\nimport authService from \"../../modules/auth/auth.service\";\nimport emailService, { EmailService } from \"../../modules/email/email.service\";\nimport {\n imageUploaderService,\n documentUploaderService,\n videoUploaderService,\n fileUploaderService,\n} from \"../../modules/file-uploader/file-uploader.service\";\nimport { BaseService, getBaseServices } from \"../../modules/base/base.service\";\n\n/**\n * Authentication service.\n */\nexport { authService };\n\n/**\n * Base service.\n */\nexport { BaseService, getBaseServices };\n\n/**\n * Email service.\n */\nexport { emailService, EmailService, EmailOptions };\n\n/**\n * File upload services.\n */\nexport {\n imageUploaderService,\n documentUploaderService,\n videoUploaderService,\n fileUploaderService,\n};\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/exports/services/index.ts"],"names":[],"mappings":"AACA,OAAO,WAAW,MAAM,iCAAiC,CAAC;AAC1D,OAAO,YAAY,EAAE,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,mDAAmD,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAK/E,OAAO,EAAE,WAAW,EAAE,CAAC;AAKvB,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC;AAKxC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAgB,CAAC;AAKpD,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,GACpB,CAAC","sourcesContent":["import { EmailOptions } from \"../../modules/email/email.service\";\nimport authService from \"../../modules/auth/auth.service\";\nimport emailService, { EmailService } from \"../../modules/email/email.service\";\nimport {\n imageUploaderService,\n documentUploaderService,\n videoUploaderService,\n fileUploaderService,\n} from \"../../modules/file-uploader/file-uploader.service\";\nimport { BaseService, getBaseServices } from \"../../modules/base/base.service\";\n\n/**\n * Authentication service.\n */\nexport { authService };\n\n/**\n * Base service.\n */\nexport { BaseService, getBaseServices };\n\n/**\n * Email service.\n */\nexport { emailService, EmailService, EmailOptions };\n\n/**\n * File upload services.\n */\nexport {\n imageUploaderService,\n documentUploaderService,\n videoUploaderService,\n fileUploaderService,\n};\n"]}
@@ -1,18 +1,2 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("../../utils/features/change-case.features"), exports);
1
+ export * from "../../utils/features/change-case.features";
18
2
  //# sourceMappingURL=change-case.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"change-case.js","sourceRoot":"","sources":["../../../../src/exports/utils/change-case.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4EAA0D","sourcesContent":["export * from \"../../utils/features/change-case.features\";\n"]}
1
+ {"version":3,"file":"change-case.js","sourceRoot":"","sources":["../../../../src/exports/utils/change-case.ts"],"names":[],"mappings":"AAAA,cAAc,2CAA2C,CAAC","sourcesContent":["export * from \"../../utils/features/change-case.features\";\n"]}
@@ -1,6 +1,3 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getPrismaModels = void 0;
4
- const models_helpers_1 = require("../../utils/helpers/models.helpers");
5
- Object.defineProperty(exports, "getPrismaModels", { enumerable: true, get: function () { return models_helpers_1.getModels; } });
1
+ import { getModels } from "../../utils/helpers/models.helpers";
2
+ export { getModels as getPrismaModels };
6
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/exports/utils/index.ts"],"names":[],"mappings":";;;AAAA,uEAA+D;AAEzC,gGAFb,0BAAS,OAEmB","sourcesContent":["import { getModels } from \"../../utils/helpers/models.helpers\";\n\nexport { getModels as getPrismaModels };\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/exports/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AAE/D,OAAO,EAAE,SAAS,IAAI,eAAe,EAAE,CAAC","sourcesContent":["import { getModels } from \"../../utils/helpers/models.helpers\";\n\nexport { getModels as getPrismaModels };\n"]}
@@ -1,9 +1,3 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.validateDto = void 0;
7
- const validate_dto_1 = __importDefault(require("../../utils/validate-dto"));
8
- exports.validateDto = validate_dto_1.default;
1
+ import validateDto from "../../utils/validate-dto";
2
+ export { validateDto };
9
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/exports/validation/index.ts"],"names":[],"mappings":";;;;;;AAAA,4EAAmD;AAE1C,sBAFF,sBAAW,CAEE","sourcesContent":["import validateDto from \"../../utils/validate-dto\";\n\nexport { validateDto };\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/exports/validation/index.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,0BAA0B,CAAC;AAEnD,OAAO,EAAE,WAAW,EAAE,CAAC","sourcesContent":["import validateDto from \"../../utils/validate-dto\";\n\nexport { validateDto };\n"]}
@@ -1,20 +1,23 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
4
9
  };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.authControllerFactory = exports.defaultExcludedUserFields = void 0;
7
- const catch_async_1 = __importDefault(require("../error-handler/utils/catch-async"));
8
- const app_error_1 = __importDefault(require("../error-handler/utils/app-error"));
9
- const auth_service_1 = __importDefault(require("./auth.service"));
10
- const base_service_1 = require("../base/base.service");
11
- const prisma_helpers_1 = require("../../utils/helpers/prisma.helpers");
12
- const models_helpers_1 = require("../../utils/helpers/models.helpers");
13
- const deepmerge_helper_1 = __importDefault(require("../../utils/helpers/deepmerge.helper"));
14
- const arkos_env_1 = __importDefault(require("../../utils/arkos-env"));
15
- const server_1 = require("../../server");
16
- const auth_helpers_1 = require("./utils/helpers/auth.helpers");
17
- exports.defaultExcludedUserFields = {
10
+ import catchAsync from "../error-handler/utils/catch-async";
11
+ import AppError from "../error-handler/utils/app-error";
12
+ import authService from "./auth.service";
13
+ import { getBaseServices } from "../base/base.service";
14
+ import { getPrismaInstance } from "../../utils/helpers/prisma.helpers";
15
+ import { importPrismaModelModules } from "../../utils/helpers/models.helpers";
16
+ import deepmerge from "../../utils/helpers/deepmerge.helper";
17
+ import arkosEnv from "../../utils/arkos-env";
18
+ import { getInitConfigs } from "../../server";
19
+ import { determineUsernameField } from "./utils/helpers/auth.helpers";
20
+ export const defaultExcludedUserFields = {
18
21
  password: false,
19
22
  passwordChangedAt: false,
20
23
  passwordResetToken: false,
@@ -25,76 +28,76 @@ exports.defaultExcludedUserFields = {
25
28
  deletedSelfAccount: false,
26
29
  active: false,
27
30
  };
28
- const authControllerFactory = async (middlewares = {}) => {
29
- const baseServices = (0, base_service_1.getBaseServices)();
31
+ export const authControllerFactory = (...args_1) => __awaiter(void 0, [...args_1], void 0, function* (middlewares = {}) {
32
+ const baseServices = getBaseServices();
30
33
  let prismaQueryOptions = {};
31
- const userModules = await (0, models_helpers_1.importPrismaModelModules)("user");
34
+ const userModules = yield importPrismaModelModules("user");
32
35
  if (userModules)
33
- prismaQueryOptions = userModules?.prismaQueryOptions || {};
34
- const stringifiedQueryOptions = JSON.stringify((0, deepmerge_helper_1.default)(prismaQueryOptions?.queryOptions || {}, prismaQueryOptions?.findOne || {}) || {});
36
+ prismaQueryOptions = (userModules === null || userModules === void 0 ? void 0 : userModules.prismaQueryOptions) || {};
37
+ const stringifiedQueryOptions = JSON.stringify(deepmerge((prismaQueryOptions === null || prismaQueryOptions === void 0 ? void 0 : prismaQueryOptions.queryOptions) || {}, (prismaQueryOptions === null || prismaQueryOptions === void 0 ? void 0 : prismaQueryOptions.findOne) || {}) || {});
35
38
  return {
36
- getMe: (0, catch_async_1.default)(async (req, res, next) => {
37
- const user = await baseServices["user"].findOne({ id: req.user.id }, stringifiedQueryOptions);
38
- Object.keys(exports.defaultExcludedUserFields).forEach((key) => {
39
+ getMe: catchAsync((req, res, next) => __awaiter(void 0, void 0, void 0, function* () {
40
+ const user = yield baseServices["user"].findOne({ id: req.user.id }, stringifiedQueryOptions);
41
+ Object.keys(defaultExcludedUserFields).forEach((key) => {
39
42
  if (req.user)
40
43
  delete req.user[key];
41
44
  });
42
- if (middlewares?.afterGetMe) {
45
+ if (middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterGetMe) {
43
46
  req.responseData = user;
44
47
  req.responseStatus = 200;
45
48
  return next();
46
49
  }
47
50
  res.status(200).json({ data: req.user });
48
- }),
49
- updateMe: (0, catch_async_1.default)(async (req, res, next) => {
50
- const user = await baseServices["user"].updateOne({ id: req.user.id }, req.body, stringifiedQueryOptions);
51
- Object.keys(exports.defaultExcludedUserFields).forEach((key) => {
51
+ })),
52
+ updateMe: catchAsync((req, res, next) => __awaiter(void 0, void 0, void 0, function* () {
53
+ const user = yield baseServices["user"].updateOne({ id: req.user.id }, req.body, stringifiedQueryOptions);
54
+ Object.keys(defaultExcludedUserFields).forEach((key) => {
52
55
  if (req.user)
53
56
  delete req.user[key];
54
57
  });
55
- if (middlewares?.afterGetMe) {
58
+ if (middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterGetMe) {
56
59
  req.responseData = user;
57
60
  req.responseStatus = 200;
58
61
  return next();
59
62
  }
60
63
  res.status(200).json({ data: req.user });
61
- }),
62
- logout: (0, catch_async_1.default)(async (req, res, next) => {
64
+ })),
65
+ logout: catchAsync((req, res, next) => __awaiter(void 0, void 0, void 0, function* () {
63
66
  res.cookie("arkos_access_token", "no-token", {
64
67
  expires: new Date(Date.now() + 10 * 1000),
65
68
  httpOnly: true,
66
69
  });
67
- if (middlewares?.afterLogout) {
70
+ if (middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterLogout) {
68
71
  req.responseData = null;
69
72
  req.responseStatus = 204;
70
73
  return next();
71
74
  }
72
75
  res.status(204).json();
73
- }),
74
- login: (0, catch_async_1.default)(async (req, res, next) => {
75
- const initAuthConfigs = (0, server_1.getInitConfigs)()
76
- ?.authentication;
77
- const usernameField = (0, auth_helpers_1.determineUsernameField)(req);
76
+ })),
77
+ login: catchAsync((req, res, next) => __awaiter(void 0, void 0, void 0, function* () {
78
+ var _a, _b, _c;
79
+ const initAuthConfigs = (_a = getInitConfigs()) === null || _a === void 0 ? void 0 : _a.authentication;
80
+ const usernameField = determineUsernameField(req);
78
81
  const usernameValue = req.body[usernameField];
79
82
  const { password } = req.body;
80
83
  if (!usernameValue || !password) {
81
- return next(new app_error_1.default(`Please provide ${usernameField} and password`, 400));
84
+ return next(new AppError(`Please provide ${usernameField} and password`, 400));
82
85
  }
83
- const prisma = (0, prisma_helpers_1.getPrismaInstance)();
86
+ const prisma = getPrismaInstance();
84
87
  const whereClause = {};
85
88
  whereClause[usernameField] = usernameValue;
86
- const user = await prisma.user.findUnique({
89
+ const user = yield prisma.user.findUnique({
87
90
  where: whereClause,
88
91
  });
89
92
  if (!user ||
90
- !(await auth_service_1.default.isCorrectPassword(password, user.password))) {
91
- return next(new app_error_1.default(`Incorrect ${usernameField} or password`, 401));
93
+ !(yield authService.isCorrectPassword(password, user.password))) {
94
+ return next(new AppError(`Incorrect ${usernameField} or password`, 401));
92
95
  }
93
- const token = auth_service_1.default.signJwtToken(user.id);
96
+ const token = authService.signJwtToken(user.id);
94
97
  const cookieOptions = {
95
98
  expires: new Date(Date.now() +
96
99
  Number(process.env.JWT_COOKIE_EXPIRES_IN ||
97
- arkos_env_1.default.JWT_COOKIE_EXPIRES_IN) *
100
+ arkosEnv.JWT_COOKIE_EXPIRES_IN) *
98
101
  24 *
99
102
  60 *
100
103
  60 *
@@ -106,15 +109,15 @@ const authControllerFactory = async (middlewares = {}) => {
106
109
  if (process.env.NODE_ENV === "production" &&
107
110
  process.env.JWT_SECURE !== "false")
108
111
  cookieOptions.secure = true;
109
- if (middlewares?.afterLogin) {
112
+ if (middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterLogin) {
110
113
  req.responseData = { accessToken: token };
111
114
  req.responseStatus = 200;
112
115
  return next();
113
116
  }
114
- if (initAuthConfigs?.login?.sendAccessTokenThrough === "response-only") {
117
+ if (((_b = initAuthConfigs === null || initAuthConfigs === void 0 ? void 0 : initAuthConfigs.login) === null || _b === void 0 ? void 0 : _b.sendAccessTokenThrough) === "response-only") {
115
118
  res.status(200).json({ accessToken: token });
116
119
  }
117
- else if (initAuthConfigs?.login?.sendAccessTokenThrough === "cookie-only") {
120
+ else if (((_c = initAuthConfigs === null || initAuthConfigs === void 0 ? void 0 : initAuthConfigs.login) === null || _c === void 0 ? void 0 : _c.sendAccessTokenThrough) === "cookie-only") {
118
121
  res.cookie("arkos_access_token", token, cookieOptions);
119
122
  res.status(200).send();
120
123
  }
@@ -122,47 +125,47 @@ const authControllerFactory = async (middlewares = {}) => {
122
125
  res.cookie("arkos_access_token", token, cookieOptions);
123
126
  res.status(200).json({ accessToken: token });
124
127
  }
125
- }),
126
- signup: (0, catch_async_1.default)(async (req, res, next) => {
128
+ })),
129
+ signup: catchAsync((req, res, next) => __awaiter(void 0, void 0, void 0, function* () {
127
130
  const userService = baseServices["user"];
128
- const user = await userService.createOne(req.body, stringifiedQueryOptions);
129
- if (middlewares?.afterSignup) {
131
+ const user = yield userService.createOne(req.body, stringifiedQueryOptions);
132
+ if (middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterSignup) {
130
133
  req.responseData = { data: user };
131
134
  req.responseStatus = 201;
132
135
  return next();
133
136
  }
134
- Object.keys(exports.defaultExcludedUserFields).forEach((key) => {
137
+ Object.keys(defaultExcludedUserFields).forEach((key) => {
135
138
  delete user[key];
136
139
  });
137
140
  res.status(201).json({ data: user });
138
- }),
139
- updatePassword: (0, catch_async_1.default)(async (req, res, next) => {
141
+ })),
142
+ updatePassword: catchAsync((req, res, next) => __awaiter(void 0, void 0, void 0, function* () {
140
143
  const { currentPassword, newPassword } = req.body;
141
144
  if (!currentPassword || !newPassword)
142
- return next(new app_error_1.default("currentPassword and newPassword are required", 400));
145
+ return next(new AppError("currentPassword and newPassword are required", 400));
143
146
  const user = req.user;
144
147
  if (!user ||
145
- user?.active === false ||
146
- user?.deletedSelfAccount === true)
147
- return next(new app_error_1.default("User not found!", 404));
148
+ (user === null || user === void 0 ? void 0 : user.active) === false ||
149
+ (user === null || user === void 0 ? void 0 : user.deletedSelfAccount) === true)
150
+ return next(new AppError("User not found!", 404));
148
151
  if (!user.isVerified)
149
- return next(new app_error_1.default("You need to verify your account to proceed", 423, {
152
+ return next(new AppError("You need to verify your account to proceed", 423, {
150
153
  error: "email_verification_required",
151
154
  }));
152
- const isPasswordCorrect = await auth_service_1.default.isCorrectPassword(String(currentPassword), String(user.password));
155
+ const isPasswordCorrect = yield authService.isCorrectPassword(String(currentPassword), String(user.password));
153
156
  if (!isPasswordCorrect)
154
- return next(new app_error_1.default("Current password is incorrect.", 400));
155
- if (!auth_service_1.default.isPasswordStrong(String(newPassword)))
156
- return next(new app_error_1.default("Password must contain at least one uppercase letter, one lowercase letter, and one number", 400));
157
- const prisma = (0, prisma_helpers_1.getPrismaInstance)();
158
- await prisma.user.update({
157
+ return next(new AppError("Current password is incorrect.", 400));
158
+ if (!authService.isPasswordStrong(String(newPassword)))
159
+ return next(new AppError("Password must contain at least one uppercase letter, one lowercase letter, and one number", 400));
160
+ const prisma = getPrismaInstance();
161
+ yield prisma.user.update({
159
162
  where: { id: user.id },
160
163
  data: {
161
- password: await auth_service_1.default.hashPassword(newPassword),
164
+ password: yield authService.hashPassword(newPassword),
162
165
  passwordChangedAt: new Date(),
163
166
  },
164
167
  });
165
- if (middlewares?.afterUpdatePassword) {
168
+ if (middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterUpdatePassword) {
166
169
  req.additionalData = {
167
170
  user,
168
171
  };
@@ -177,8 +180,7 @@ const authControllerFactory = async (middlewares = {}) => {
177
180
  status: "success",
178
181
  message: "Password updated successfully!",
179
182
  });
180
- }),
183
+ })),
181
184
  };
182
- };
183
- exports.authControllerFactory = authControllerFactory;
185
+ });
184
186
  //# 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 { importPrismaModelModules } from \"../../utils/helpers/models.helpers\";\nimport deepmerge from \"../../utils/helpers/deepmerge.helper\";\nimport arkosEnv from \"../../utils/arkos-env\";\nimport { getInitConfigs } from \"../../server\";\nimport { determineUsernameField } from \"./utils/helpers/auth.helpers\";\nimport { InitConfigsAuthenticationOptions } from \"../../types/app\";\n\n/**\n * Default fields to exclude from user object when returning to client\n */\nexport const defaultExcludedUserFields = {\n password: false,\n passwordChangedAt: false,\n passwordResetToken: false,\n passwordResetTokenExpiresAt: false,\n verificationToken: false,\n verificationTokenExpiresAt: false,\n isVerified: false,\n deletedSelfAccount: false,\n active: 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 stringifiedQueryOptions\n );\n\n Object.keys(defaultExcludedUserFields).forEach((key) => {\n if (req.user) delete req.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: req.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 const user = await baseServices[\"user\"].updateOne(\n { id: req.user!.id },\n req.body,\n stringifiedQueryOptions\n );\n\n Object.keys(defaultExcludedUserFields).forEach((key) => {\n if (req.user) delete req.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: req.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 */\n login: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n const initAuthConfigs = getInitConfigs()\n ?.authentication as InitConfigsAuthenticationOptions;\n const usernameField = determineUsernameField(req);\n\n const usernameValue = req.body[usernameField];\n const { password } = req.body;\n\n if (!usernameValue || !password) {\n return next(\n new AppError(`Please provide ${usernameField} and password`, 400)\n );\n }\n\n const prisma = getPrismaInstance();\n\n // Create dynamic where clause based on username field\n const whereClause: any = {};\n whereClause[usernameField] = usernameValue;\n\n const user = await (prisma as any).user.findUnique({\n where: whereClause,\n });\n\n if (\n !user ||\n !(await authService.isCorrectPassword(password, user.password))\n ) {\n return next(\n new AppError(`Incorrect ${usernameField} or password`, 401)\n );\n }\n\n const token = authService.signJwtToken(user.id!);\n\n const cookieOptions: CookieOptions = {\n expires: new Date(\n Date.now() +\n Number(\n process.env.JWT_COOKIE_EXPIRES_IN ||\n arkosEnv.JWT_COOKIE_EXPIRES_IN\n ) *\n 24 *\n 60 *\n 60 *\n 1000\n ),\n httpOnly: true,\n secure: req.secure || req.headers[\"x-forwarded-proto\"] === \"https\",\n sameSite: process.env.JWT_SECURE !== \"false\" ? \"lax\" : \"none\",\n };\n\n if (\n process.env.NODE_ENV === \"production\" &&\n process.env.JWT_SECURE !== \"false\"\n )\n cookieOptions.secure = true;\n\n if (middlewares?.afterLogin) {\n req.responseData = { accessToken: token };\n req.responseStatus = 200;\n return next();\n }\n\n if (\n initAuthConfigs?.login?.sendAccessTokenThrough === \"response-only\"\n ) {\n res.status(200).json({ accessToken: token });\n } else if (\n initAuthConfigs?.login?.sendAccessTokenThrough === \"cookie-only\"\n ) {\n res.cookie(\"arkos_access_token\", token, cookieOptions);\n res.status(200).send();\n } else {\n res.cookie(\"arkos_access_token\", token, cookieOptions);\n res.status(200).json({ accessToken: token });\n }\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 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 (\n !user ||\n user?.active === false ||\n user?.deletedSelfAccount === true\n )\n return next(new AppError(\"User not found!\", 404));\n\n if (!user.isVerified)\n return next(\n new AppError(\"You need to verify your account to proceed\", 423, {\n error: \"email_verification_required\",\n })\n );\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 if (!isPasswordCorrect)\n return next(new AppError(\"Current password is incorrect.\", 400));\n\n // Check password strength (optional but recommended)\n if (!authService.isPasswordStrong(String(newPassword)))\n return next(\n new AppError(\n \"Password must contain at least one uppercase letter, one lowercase letter, and one number\",\n 400\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(),\n },\n });\n\n if (middlewares?.afterUpdatePassword) {\n (req as any).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 { importPrismaModelModules } from \"../../utils/helpers/models.helpers\";\nimport deepmerge from \"../../utils/helpers/deepmerge.helper\";\nimport arkosEnv from \"../../utils/arkos-env\";\nimport { getInitConfigs } from \"../../server\";\nimport { determineUsernameField } from \"./utils/helpers/auth.helpers\";\nimport { InitConfigsAuthenticationOptions } from \"../../types/app\";\n\n/**\n * Default fields to exclude from user object when returning to client\n */\nexport const defaultExcludedUserFields = {\n password: false,\n passwordChangedAt: false,\n passwordResetToken: false,\n passwordResetTokenExpiresAt: false,\n verificationToken: false,\n verificationTokenExpiresAt: false,\n isVerified: false,\n deletedSelfAccount: false,\n active: 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 stringifiedQueryOptions\n );\n\n Object.keys(defaultExcludedUserFields).forEach((key) => {\n if (req.user) delete req.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: req.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 const user = await baseServices[\"user\"].updateOne(\n { id: req.user!.id },\n req.body,\n stringifiedQueryOptions\n );\n\n Object.keys(defaultExcludedUserFields).forEach((key) => {\n if (req.user) delete req.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: req.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 */\n login: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n const initAuthConfigs = getInitConfigs()\n ?.authentication as InitConfigsAuthenticationOptions;\n const usernameField = determineUsernameField(req);\n\n const usernameValue = req.body[usernameField];\n const { password } = req.body;\n\n if (!usernameValue || !password) {\n return next(\n new AppError(`Please provide ${usernameField} and password`, 400)\n );\n }\n\n const prisma = getPrismaInstance();\n\n // Create dynamic where clause based on username field\n const whereClause: any = {};\n whereClause[usernameField] = usernameValue;\n\n const user = await (prisma as any).user.findUnique({\n where: whereClause,\n });\n\n if (\n !user ||\n !(await authService.isCorrectPassword(password, user.password))\n ) {\n return next(\n new AppError(`Incorrect ${usernameField} or password`, 401)\n );\n }\n\n const token = authService.signJwtToken(user.id!);\n\n const cookieOptions: CookieOptions = {\n expires: new Date(\n Date.now() +\n Number(\n process.env.JWT_COOKIE_EXPIRES_IN ||\n arkosEnv.JWT_COOKIE_EXPIRES_IN\n ) *\n 24 *\n 60 *\n 60 *\n 1000\n ),\n httpOnly: true,\n secure: req.secure || req.headers[\"x-forwarded-proto\"] === \"https\",\n sameSite: process.env.JWT_SECURE !== \"false\" ? \"lax\" : \"none\",\n };\n\n if (\n process.env.NODE_ENV === \"production\" &&\n process.env.JWT_SECURE !== \"false\"\n )\n cookieOptions.secure = true;\n\n if (middlewares?.afterLogin) {\n req.responseData = { accessToken: token };\n req.responseStatus = 200;\n return next();\n }\n\n if (\n initAuthConfigs?.login?.sendAccessTokenThrough === \"response-only\"\n ) {\n res.status(200).json({ accessToken: token });\n } else if (\n initAuthConfigs?.login?.sendAccessTokenThrough === \"cookie-only\"\n ) {\n res.cookie(\"arkos_access_token\", token, cookieOptions);\n res.status(200).send();\n } else {\n res.cookie(\"arkos_access_token\", token, cookieOptions);\n res.status(200).json({ accessToken: token });\n }\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 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 (\n !user ||\n user?.active === false ||\n user?.deletedSelfAccount === true\n )\n return next(new AppError(\"User not found!\", 404));\n\n if (!user.isVerified)\n return next(\n new AppError(\"You need to verify your account to proceed\", 423, {\n error: \"email_verification_required\",\n })\n );\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 if (!isPasswordCorrect)\n return next(new AppError(\"Current password is incorrect.\", 400));\n\n // Check password strength (optional but recommended)\n if (!authService.isPasswordStrong(String(newPassword)))\n return next(\n new AppError(\n \"Password must contain at least one uppercase letter, one lowercase letter, and one number\",\n 400\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(),\n },\n });\n\n if (middlewares?.afterUpdatePassword) {\n (req as any).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"]}