arkos 0.0.12 → 0.0.13

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 (113) hide show
  1. package/dist/src/app.d.ts +11 -0
  2. package/dist/src/app.d.ts.map +1 -0
  3. package/dist/src/app.js +124 -0
  4. package/dist/src/app.js.map +1 -0
  5. package/dist/src/modules/auth/auth.controller.d.ts +23 -0
  6. package/dist/src/modules/auth/auth.controller.d.ts.map +1 -0
  7. package/dist/src/modules/auth/auth.controller.js +310 -0
  8. package/dist/src/modules/auth/auth.controller.js.map +1 -0
  9. package/dist/src/modules/auth/auth.router.d.ts +4 -0
  10. package/dist/src/modules/auth/auth.router.d.ts.map +1 -0
  11. package/dist/src/modules/auth/auth.router.js +64 -0
  12. package/dist/src/modules/auth/auth.router.js.map +1 -0
  13. package/dist/src/modules/auth/auth.service.d.ts +16 -0
  14. package/dist/src/modules/auth/auth.service.d.ts.map +1 -0
  15. package/dist/src/modules/auth/auth.service.js +120 -0
  16. package/dist/src/modules/auth/auth.service.js.map +1 -0
  17. package/dist/src/modules/base/base.controller.d.ts +17 -0
  18. package/dist/src/modules/base/base.controller.d.ts.map +1 -0
  19. package/dist/src/modules/base/base.controller.js +296 -0
  20. package/dist/src/modules/base/base.controller.js.map +1 -0
  21. package/dist/src/modules/base/base.middlewares.d.ts +20 -0
  22. package/dist/src/modules/base/base.middlewares.d.ts.map +1 -0
  23. package/dist/src/modules/base/base.middlewares.js +86 -0
  24. package/dist/src/modules/base/base.middlewares.js.map +1 -0
  25. package/dist/src/modules/base/base.router.d.ts +4 -0
  26. package/dist/src/modules/base/base.router.d.ts.map +1 -0
  27. package/dist/src/modules/base/base.router.js +75 -0
  28. package/dist/src/modules/base/base.router.js.map +1 -0
  29. package/dist/src/modules/base/base.service.d.ts +32 -0
  30. package/dist/src/modules/base/base.service.d.ts.map +1 -0
  31. package/dist/src/modules/base/base.service.js +149 -0
  32. package/dist/src/modules/base/base.service.js.map +1 -0
  33. package/dist/src/modules/base/utils/base.helpers.d.ts +29 -0
  34. package/dist/src/modules/base/utils/base.helpers.d.ts.map +1 -0
  35. package/dist/src/modules/base/utils/base.helpers.js +106 -0
  36. package/dist/src/modules/base/utils/base.helpers.js.map +1 -0
  37. package/dist/src/modules/email/email.service.d.ts +22 -0
  38. package/dist/src/modules/email/email.service.d.ts.map +1 -0
  39. package/dist/src/modules/email/email.service.js +45 -0
  40. package/dist/src/modules/email/email.service.js.map +1 -0
  41. package/dist/src/modules/email/utils/helpers/email.helpers.d.ts +9 -0
  42. package/dist/src/modules/email/utils/helpers/email.helpers.d.ts.map +1 -0
  43. package/dist/src/modules/email/utils/helpers/email.helpers.js +25 -0
  44. package/dist/src/modules/email/utils/helpers/email.helpers.js.map +1 -0
  45. package/dist/src/modules/error-handler/error-handler.controller.d.ts +4 -0
  46. package/dist/src/modules/error-handler/error-handler.controller.d.ts.map +1 -0
  47. package/dist/src/modules/error-handler/error-handler.controller.js +182 -0
  48. package/dist/src/modules/error-handler/error-handler.controller.js.map +1 -0
  49. package/dist/src/modules/error-handler/utils/app-error.d.ts +11 -0
  50. package/dist/src/modules/error-handler/utils/app-error.d.ts.map +1 -0
  51. package/dist/src/modules/error-handler/utils/app-error.js +23 -0
  52. package/dist/src/modules/error-handler/utils/app-error.js.map +1 -0
  53. package/dist/src/modules/error-handler/utils/catch-async.d.ts +4 -0
  54. package/dist/src/modules/error-handler/utils/catch-async.d.ts.map +1 -0
  55. package/dist/src/modules/error-handler/utils/catch-async.js +9 -0
  56. package/dist/src/modules/error-handler/utils/catch-async.js.map +1 -0
  57. package/dist/src/modules/error-handler/utils/error-handler.helpers.d.ts +43 -0
  58. package/dist/src/modules/error-handler/utils/error-handler.helpers.d.ts.map +1 -0
  59. package/dist/src/modules/error-handler/utils/error-handler.helpers.js +209 -0
  60. package/dist/src/modules/error-handler/utils/error-handler.helpers.js.map +1 -0
  61. package/dist/src/modules/file-uploader/file-uploader.service.d.ts +20 -0
  62. package/dist/src/modules/file-uploader/file-uploader.service.d.ts.map +1 -0
  63. package/dist/src/modules/file-uploader/file-uploader.service.js +114 -0
  64. package/dist/src/modules/file-uploader/file-uploader.service.js.map +1 -0
  65. package/dist/src/paths.d.ts +2 -0
  66. package/dist/src/paths.d.ts.map +1 -0
  67. package/dist/src/paths.js +9 -0
  68. package/dist/src/paths.js.map +1 -0
  69. package/dist/src/server.d.ts +21 -0
  70. package/dist/src/server.d.ts.map +1 -0
  71. package/dist/src/server.js +50 -0
  72. package/dist/src/server.js.map +1 -0
  73. package/dist/src/utils/features/api.features.d.ts +20 -0
  74. package/dist/src/utils/features/api.features.d.ts.map +1 -0
  75. package/dist/src/utils/features/api.features.js +175 -0
  76. package/dist/src/utils/features/api.features.js.map +1 -0
  77. package/dist/src/utils/features/prisma.helpers.d.ts +4 -0
  78. package/dist/src/utils/features/prisma.helpers.d.ts.map +1 -0
  79. package/dist/src/utils/features/prisma.helpers.js +68 -0
  80. package/dist/src/utils/features/prisma.helpers.js.map +1 -0
  81. package/dist/src/utils/helpers/api.features.helpers.d.ts +41 -0
  82. package/dist/src/utils/helpers/api.features.helpers.d.ts.map +1 -0
  83. package/dist/src/utils/helpers/api.features.helpers.js +161 -0
  84. package/dist/src/utils/helpers/api.features.helpers.js.map +1 -0
  85. package/dist/src/utils/helpers/models.helpers.d.ts +21 -0
  86. package/dist/src/utils/helpers/models.helpers.d.ts.map +1 -0
  87. package/dist/src/utils/helpers/models.helpers.js +192 -0
  88. package/dist/src/utils/helpers/models.helpers.js.map +1 -0
  89. package/dist/src/utils/helpers/text.helpers.d.ts +2 -0
  90. package/dist/src/utils/helpers/text.helpers.d.ts.map +1 -0
  91. package/dist/src/utils/helpers/text.helpers.js +12 -0
  92. package/dist/src/utils/helpers/text.helpers.js.map +1 -0
  93. package/dist/src/utils/permissions/index.d.ts +3 -0
  94. package/dist/src/utils/permissions/index.d.ts.map +1 -0
  95. package/dist/src/utils/permissions/index.js +17 -0
  96. package/dist/src/utils/permissions/index.js.map +1 -0
  97. package/dist/src/utils/scripts/export-prisma-types.d.ts +2 -0
  98. package/dist/src/utils/scripts/export-prisma-types.d.ts.map +1 -0
  99. package/dist/src/utils/scripts/export-prisma-types.js +152 -0
  100. package/dist/src/utils/scripts/export-prisma-types.js.map +1 -0
  101. package/dist/src/utils/scripts/generate-zod-schemas.d.ts +2 -0
  102. package/dist/src/utils/scripts/generate-zod-schemas.d.ts.map +1 -0
  103. package/dist/src/utils/scripts/generate-zod-schemas.js +121 -0
  104. package/dist/src/utils/scripts/generate-zod-schemas.js.map +1 -0
  105. package/dist/src/utils/scripts/prisma-db-push.d.ts +2 -0
  106. package/dist/src/utils/scripts/prisma-db-push.d.ts.map +1 -0
  107. package/dist/src/utils/scripts/prisma-db-push.js +24 -0
  108. package/dist/src/utils/scripts/prisma-db-push.js.map +1 -0
  109. package/dist/src/utils/validate-dto.d.ts +3 -0
  110. package/dist/src/utils/validate-dto.d.ts.map +1 -0
  111. package/dist/src/utils/validate-dto.js +17 -0
  112. package/dist/src/utils/validate-dto.js.map +1 -0
  113. package/package.json +1 -1
@@ -0,0 +1,120 @@
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
+ const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
7
+ const bcryptjs_1 = __importDefault(require("bcryptjs"));
8
+ const catch_async_1 = __importDefault(require("../error-handler/utils/catch-async"));
9
+ const app_error_1 = __importDefault(require("../error-handler/utils/app-error"));
10
+ const base_middlewares_1 = require("../base/base.middlewares");
11
+ const app_1 = require("../../app");
12
+ class AuthService {
13
+ signJwtToken(id, expiresIn = process.env.JWT_EXPIRES_IN || "1h", secret = process.env.JWT_SECRET || "your_default_secret") {
14
+ return jsonwebtoken_1.default.sign({ id }, secret, {
15
+ expiresIn: expiresIn,
16
+ });
17
+ }
18
+ async isCorrectPassword(candidatePassword, userPassword) {
19
+ return await bcryptjs_1.default.compare(candidatePassword, userPassword);
20
+ }
21
+ async hashPassword(password) {
22
+ return await bcryptjs_1.default.hash(password, 12);
23
+ }
24
+ isPasswordStrong(password) {
25
+ const hasUppercase = /[A-Z]/.test(password);
26
+ const hasLowercase = /[a-z]/.test(password);
27
+ const hasNumber = /\d/.test(password);
28
+ return hasUppercase && hasLowercase && hasNumber;
29
+ }
30
+ userChangedPasswordAfter(user, JWTTimestamp) {
31
+ if (user.passwordChangedAt) {
32
+ const convertedTimestamp = parseInt(String(user.passwordChangedAt.getTime() / 1000), 10);
33
+ return JWTTimestamp < convertedTimestamp;
34
+ }
35
+ return false;
36
+ }
37
+ async verifyJwtToken(token, secret = process.env.JWT_SECRET) {
38
+ return new Promise((resolve, reject) => {
39
+ jsonwebtoken_1.default.verify(token, secret, (err, decoded) => {
40
+ if (err)
41
+ reject(err);
42
+ else
43
+ resolve(decoded);
44
+ });
45
+ });
46
+ }
47
+ handleActionAccessControl(authConfigs, action, modelName) {
48
+ return (0, catch_async_1.default)(async (req, res, next) => {
49
+ if (req.user) {
50
+ const user = req.user;
51
+ const permissions = await app_1.prisma.authPermission.count({
52
+ where: {
53
+ resource: modelName,
54
+ action,
55
+ roleId: { in: user.roles.map((role) => role.roleId) },
56
+ },
57
+ });
58
+ if (!permissions) {
59
+ return next(new app_error_1.default("You do not have permission to perfom this action", 403));
60
+ }
61
+ }
62
+ next();
63
+ });
64
+ }
65
+ authenticate = (0, catch_async_1.default)(async (req, res, next) => {
66
+ let token;
67
+ if (req?.headers?.authorization &&
68
+ req?.headers?.authorization.startsWith("Bearer")) {
69
+ token = req?.headers?.authorization.split(" ")[1];
70
+ }
71
+ else if (req?.cookies?.jwt !== "no-token" && req.cookies) {
72
+ token = req?.cookies?.jwt;
73
+ }
74
+ if (!token)
75
+ return next(new app_error_1.default("You are not logged in! please log in to get access", 401));
76
+ let decoded;
77
+ try {
78
+ decoded = await this.verifyJwtToken(token);
79
+ }
80
+ catch (err) {
81
+ return next(new app_error_1.default("Your auth token is invalid, please login again.", 401));
82
+ }
83
+ if (!decoded?.id)
84
+ return next(new app_error_1.default("Your auth token is invalid, please login again.", 401));
85
+ const user = await app_1.prisma.user.findUnique({
86
+ where: { id: String(decoded.id) },
87
+ include: {
88
+ roles: true,
89
+ },
90
+ });
91
+ if (!user)
92
+ return next(new app_error_1.default("The user belonging to this token does no longer exists", 401));
93
+ if (this.userChangedPasswordAfter(user, decoded.iat) &&
94
+ !req.path.includes("logout"))
95
+ return next(new app_error_1.default("User recently changed password! Please log in again.", 401));
96
+ if (!user.isVerified && !req.path.includes("logout"))
97
+ return next(new app_error_1.default("You must verifiy your email in order to proceed!", 423, {
98
+ error: "email_verification_required",
99
+ }));
100
+ req.user = user;
101
+ next();
102
+ });
103
+ handleAuthenticationControl(authConfigs, action, modelName) {
104
+ const authenticationControl = authConfigs?.authenticationControl;
105
+ if (app_1.initConfigs?.authentication === false)
106
+ return base_middlewares_1.callNext;
107
+ if (authenticationControl && typeof authenticationControl === "object") {
108
+ if (authenticationControl[action] === false)
109
+ return base_middlewares_1.callNext;
110
+ else if (authenticationControl[action] === true)
111
+ return this.authenticate;
112
+ }
113
+ else
114
+ return this.authenticate;
115
+ return this.authenticate;
116
+ }
117
+ }
118
+ const authService = new AuthService();
119
+ exports.default = authService;
120
+ //# sourceMappingURL=auth.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.service.js","sourceRoot":"","sources":["../../../../src/modules/auth/auth.service.ts"],"names":[],"mappings":";;;;;AAAA,gEAA+B;AAC/B,wDAA8B;AAQ9B,qFAA4D;AAE5D,iFAAwD;AACxD,+DAAoD;AACpD,mCAAgD;AAEhD,MAAM,WAAW;IACf,YAAY,CACV,EAAmB,EACnB,YAA6B,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI,EAC/D,SAAiB,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,qBAAqB;QAEhE,OAAO,sBAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE;YAC9B,SAAS,EAAE,SAAgB;SAC5B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,iBAAyB,EAAE,YAAoB;QACrE,OAAO,MAAM,kBAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,QAAgB;QACjC,OAAO,MAAM,kBAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,gBAAgB,CAAC,QAAgB;QAC/B,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEtC,OAAO,YAAY,IAAI,YAAY,IAAI,SAAS,CAAC;IACnD,CAAC;IAED,wBAAwB,CAAC,IAAU,EAAE,YAAoB;QACvD,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,MAAM,kBAAkB,GAAG,QAAQ,CACjC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,EAC/C,EAAE,CACH,CAAC;YAEF,OAAO,YAAY,GAAG,kBAAkB,CAAC;QAC3C,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,KAAa,EACb,SAAiB,OAAO,CAAC,GAAG,CAAC,UAAW;QAExC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,sBAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;gBACzC,IAAI,GAAG;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;oBAChB,OAAO,CAAC,OAAyB,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,yBAAyB,CACvB,WAAwB,EACxB,MAAyB,EACzB,SAAiB;QAEjB,OAAO,IAAA,qBAAU,EACf,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;YACxD,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;gBACb,MAAM,IAAI,GAAG,GAAG,CAAC,IAAW,CAAC;gBAE7B,MAAM,WAAW,GAAG,MAAO,YAAc,CAAC,cAAc,CAAC,KAAK,CAAC;oBAC7D,KAAK,EAAE;wBACL,QAAQ,EAAE,SAAS;wBACnB,MAAM;wBACN,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAc,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;qBAChE;iBACF,CAAC,CAAC;gBAEH,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,OAAO,IAAI,CACT,IAAI,mBAAQ,CACV,kDAAkD,EAClD,GAAG,CACJ,CACF,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,IAAI,EAAE,CAAC;QACT,CAAC,CACF,CAAC;IACJ,CAAC;IAED,YAAY,GAAG,IAAA,qBAAU,EACvB,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QACxD,IAAI,KAAyB,CAAC;QAE9B,IACE,GAAG,EAAE,OAAO,EAAE,aAAa;YAC3B,GAAG,EAAE,OAAO,EAAE,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC,EAChD,CAAC;YACD,KAAK,GAAG,GAAG,EAAE,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC;aAAM,IAAI,GAAG,EAAE,OAAO,EAAE,GAAG,KAAK,UAAU,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAC3D,KAAK,GAAG,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC;QAC5B,CAAC;QAED,IAAI,CAAC,KAAK;YACR,OAAO,IAAI,CACT,IAAI,mBAAQ,CACV,oDAAoD,EACpD,GAAG,CACJ,CACF,CAAC;QAEJ,IAAI,OAAmC,CAAC;QACxC,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,IAAI,CACT,IAAI,mBAAQ,CAAC,iDAAiD,EAAE,GAAG,CAAC,CACrE,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,EAAE;YACd,OAAO,IAAI,CACT,IAAI,mBAAQ,CAAC,iDAAiD,EAAE,GAAG,CAAC,CACrE,CAAC;QAEJ,MAAM,IAAI,GAAe,MAAO,YAAc,CAAC,IAAI,CAAC,UAAU,CAAC;YAC7D,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;YACjC,OAAO,EAAE;gBACP,KAAK,EAAE,IAAI;aACZ;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI;YACP,OAAO,IAAI,CACT,IAAI,mBAAQ,CACV,wDAAwD,EACxD,GAAG,CACJ,CACF,CAAC;QAEJ,IACE,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,OAAO,CAAC,GAAI,CAAC;YACjD,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAE5B,OAAO,IAAI,CACT,IAAI,mBAAQ,CACV,sDAAsD,EACtD,GAAG,CACJ,CACF,CAAC;QAEJ,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAClD,OAAO,IAAI,CACT,IAAI,mBAAQ,CACV,kDAAkD,EAClD,GAAG,EACH;gBACE,KAAK,EAAE,6BAA6B;aACrC,CACF,CACF,CAAC;QAEJ,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;QAChB,IAAI,EAAE,CAAC;IACT,CAAC,CACF,CAAC;IAEF,2BAA2B,CACzB,WAAoC,EACpC,MAAyB,EACzB,SAAiB;QAEjB,MAAM,qBAAqB,GAAG,WAAW,EAAE,qBAAqB,CAAC;QAEjE,IAAI,iBAAW,EAAE,cAAc,KAAK,KAAK;YAAE,OAAO,2BAAQ,CAAC;QAE3D,IAAI,qBAAqB,IAAI,OAAO,qBAAqB,KAAK,QAAQ,EAAE,CAAC;YACvE,IAAI,qBAAqB,CAAC,MAAM,CAAC,KAAK,KAAK;gBAAE,OAAO,2BAAQ,CAAC;iBACxD,IAAI,qBAAqB,CAAC,MAAM,CAAC,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC,YAAY,CAAC;QAC5E,CAAC;;YAAM,OAAO,IAAI,CAAC,YAAY,CAAC;QAEhC,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AAEtC,kBAAe,WAAW,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { NextFunction, Request, Response } from "express";
2
+ export declare function handlerFactory(modelName: string, middlewares: any): Promise<{
3
+ createOne: (req: Request, res: Response, next: NextFunction) => void;
4
+ createMany: (req: Request, res: Response, next: NextFunction) => void;
5
+ findMany: (req: Request, res: Response, next: NextFunction) => void;
6
+ findOne: (req: Request, res: Response, next: NextFunction) => void;
7
+ updateOne: (req: Request, res: Response, next: NextFunction) => void;
8
+ updateMany: (req: Request, res: Response, next: NextFunction) => void;
9
+ deleteOne: (req: Request, res: Response, next: NextFunction) => void;
10
+ deleteMany: (req: Request, res: Response, next: NextFunction) => void;
11
+ }>;
12
+ export declare function getAvalibleRoutes(req: Request, res: Response, next: NextFunction): void;
13
+ export declare const uploadFile: (req: Request, res: Response, next: NextFunction) => void;
14
+ export declare const deleteFile: (req: Request, res: Response, next: NextFunction) => void;
15
+ export declare const streamFile: (req: Request, res: Response, next: NextFunction) => void;
16
+ export declare const getDatabaseModels: (req: Request, res: Response, next: NextFunction) => void;
17
+ //# sourceMappingURL=base.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.controller.d.ts","sourceRoot":"","sources":["../../../../src/modules/base/base.controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAyB1D,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG;;;;;;;;;GA2KvE;AAED,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,QAgCnB;AAED,eAAO,MAAM,UAAU,2DA2GtB,CAAC;AAEF,eAAO,MAAM,UAAU,2DAgBtB,CAAC;AAEF,eAAO,MAAM,UAAU,2DA2CtB,CAAC;AAEF,eAAO,MAAM,iBAAiB,2DAE5B,CAAC"}
@@ -0,0 +1,296 @@
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.getDatabaseModels = exports.streamFile = exports.deleteFile = exports.uploadFile = void 0;
7
+ exports.handlerFactory = handlerFactory;
8
+ exports.getAvalibleRoutes = getAvalibleRoutes;
9
+ const catch_async_1 = __importDefault(require("../error-handler/utils/catch-async"));
10
+ const api_features_1 = __importDefault(require("../../utils/features/api.features"));
11
+ const base_service_1 = __importDefault(require("./base.service"));
12
+ const app_error_1 = __importDefault(require("../error-handler/utils/app-error"));
13
+ const file_uploader_service_1 = require("../file-uploader/file-uploader.service");
14
+ const paths_1 = require("../../paths");
15
+ const path_1 = __importDefault(require("path"));
16
+ const fs_1 = __importDefault(require("fs"));
17
+ const util_1 = require("util");
18
+ const sharp_1 = __importDefault(require("sharp"));
19
+ const server_1 = require("../../server");
20
+ const models_helpers_1 = require("../../utils/helpers/models.helpers");
21
+ const change_case_all_1 = require("change-case-all");
22
+ const stat = (0, util_1.promisify)(fs_1.default.stat);
23
+ const unlink = (0, util_1.promisify)(fs_1.default.unlink);
24
+ const access = (0, util_1.promisify)(fs_1.default.access);
25
+ async function handlerFactory(modelName, middlewares) {
26
+ const baseService = base_service_1.default[modelName];
27
+ return {
28
+ createOne: (0, catch_async_1.default)(async (req, res, next) => {
29
+ const data = await baseService.createOne(req.body, req.query?.prismaQueryOptions);
30
+ if (middlewares?.afterCreateOne) {
31
+ req.responseData = { data };
32
+ req.responseStatus = 201;
33
+ return next();
34
+ }
35
+ res.status(201).json({ data });
36
+ }),
37
+ createMany: (0, catch_async_1.default)(async (req, res, next) => {
38
+ const { data, total } = await baseService.createMany(req.body);
39
+ if (middlewares?.afterCreateMany) {
40
+ req.responseData = { total, results: data.length, data };
41
+ req.responseStatus = 201;
42
+ return next();
43
+ }
44
+ res.status(201).json({ total, results: data.length, data });
45
+ }),
46
+ findMany: (0, catch_async_1.default)(async (req, res, next) => {
47
+ const features = new api_features_1.default(req, modelName, baseService.relationFields.singular.reduce((acc, curr) => {
48
+ acc[curr.name] = true;
49
+ return acc;
50
+ }, {}))
51
+ .filter()
52
+ .sort()
53
+ .limitFields()
54
+ .paginate();
55
+ const { data, total } = await baseService.findMany(features.filters);
56
+ if (middlewares?.afterFindMany) {
57
+ req.responseData = { total, results: data.length, data };
58
+ req.responseStatus = 200;
59
+ return next();
60
+ }
61
+ res.status(200).json({ total, results: data.length, data });
62
+ }),
63
+ findOne: (0, catch_async_1.default)(async (req, res, next) => {
64
+ const data = await baseService.findOne(req.params, req.query?.prismaQueryOptions);
65
+ if (middlewares?.afterFindOne) {
66
+ req.responseData = { data };
67
+ req.responseStatus = 200;
68
+ return next();
69
+ }
70
+ res.status(200).json({ data });
71
+ }),
72
+ updateOne: (0, catch_async_1.default)(async (req, res, next) => {
73
+ const data = await baseService.updateOne(req.params, req.body, req.query?.prismaQueryOptions);
74
+ if (middlewares?.afterUpdateOne) {
75
+ req.responseData = { data };
76
+ req.responseStatus = 200;
77
+ return next();
78
+ }
79
+ res.status(200).json({ data });
80
+ }),
81
+ updateMany: (0, catch_async_1.default)(async (req, res, next) => {
82
+ if (!Object.keys(req.query).some((value) => value !== "prismaQueryOptions")) {
83
+ return next(new app_error_1.default("Filter criteria not provided for bulk update.", 400));
84
+ }
85
+ const features = new api_features_1.default(req, modelName).filter().sort();
86
+ delete features.filters.include;
87
+ const { data, total } = await baseService.updateMany(features.filters, req.body);
88
+ if (middlewares?.afterUpdateMany) {
89
+ req.responseData = { total, results: data.length, data };
90
+ req.responseStatus = 200;
91
+ return next();
92
+ }
93
+ res.status(200).json({ total, results: data.length, data });
94
+ }),
95
+ deleteOne: (0, catch_async_1.default)(async (req, res, next) => {
96
+ await baseService.deleteOne(req.params);
97
+ if (middlewares?.afterDeleteOne) {
98
+ req.responseData = { id: String(req.params.id) };
99
+ req.responseStatus = 204;
100
+ return next();
101
+ }
102
+ res.status(204).send();
103
+ }),
104
+ deleteMany: (0, catch_async_1.default)(async (req, res, next) => {
105
+ if (!Object.keys(req.query).some((value) => value !== "prismaQueryOptions")) {
106
+ return next(new app_error_1.default("Filter criteria not provided for bulk deletion.", 400));
107
+ }
108
+ const features = new api_features_1.default(req, modelName).filter().sort();
109
+ delete features.filters.include;
110
+ const { data, total } = await baseService.deleteMany(features.filters);
111
+ if (middlewares?.afterDeleteMany) {
112
+ req.responseData = { total, results: data.length, data };
113
+ req.responseStatus = 200;
114
+ return next();
115
+ }
116
+ res.status(200).json({ total, results: data.length, data });
117
+ }),
118
+ };
119
+ }
120
+ function getAvalibleRoutes(req, res, next) {
121
+ const routes = [];
122
+ req.params;
123
+ server_1.app._router.stack.forEach((middleware) => {
124
+ if (middleware.route) {
125
+ Object.keys(middleware.route.methods).forEach((method) => {
126
+ routes.push({
127
+ method: method.toUpperCase(),
128
+ path: middleware.route.path,
129
+ });
130
+ });
131
+ }
132
+ else if (middleware.handle && middleware.handle.stack) {
133
+ middleware.handle.stack.forEach((routerMiddleware) => {
134
+ if (routerMiddleware.route) {
135
+ Object.keys(routerMiddleware.route.methods).forEach((method) => {
136
+ const fullPath = (middleware.regexp
137
+ ? middleware.regexp.toString().replace("/", "")
138
+ : "") + routerMiddleware.route.path;
139
+ routes.push({
140
+ method: method.toUpperCase(),
141
+ path: routerMiddleware.route.path,
142
+ });
143
+ });
144
+ }
145
+ });
146
+ }
147
+ });
148
+ res.json(routes);
149
+ }
150
+ exports.uploadFile = (0, catch_async_1.default)(async (req, res, next) => {
151
+ const { fileType } = req.params;
152
+ const { format, width, height, resizeTo } = req.query;
153
+ let uploader;
154
+ switch (fileType) {
155
+ case "images":
156
+ uploader = file_uploader_service_1.imageUploaderService;
157
+ break;
158
+ case "videos":
159
+ uploader = file_uploader_service_1.videoUploaderService;
160
+ break;
161
+ case "documents":
162
+ uploader = file_uploader_service_1.documentUploaderService;
163
+ break;
164
+ case "file":
165
+ uploader = file_uploader_service_1.fileUploaderService;
166
+ break;
167
+ default:
168
+ return next(new app_error_1.default("Invalid file type", 400));
169
+ }
170
+ uploader.handleMultipleUpload(fileType, 30)(req, res, async (err) => {
171
+ if (err)
172
+ return next(err);
173
+ const protocol = req.get("host")?.includes("localhost")
174
+ ? "http"
175
+ : "https";
176
+ const baseURL = `${protocol}://${req.get("host")}`;
177
+ const processImage = async (filePath) => {
178
+ const ext = path_1.default.extname(filePath).toLowerCase();
179
+ const originalFormat = ext.replace(".", "");
180
+ const outputFormat = format
181
+ ? format.toString().toLowerCase()
182
+ : originalFormat;
183
+ if (!/jpeg|jpg|png|gif|webp|svg|bmp|tiff|heif/i.test(originalFormat)) {
184
+ return `${baseURL}/api/${filePath
185
+ .replace(`${paths_1.ROOT_DIR}/`, "")
186
+ .replace(/\\/g, "/")}`;
187
+ }
188
+ // Create a temp filename with original name + random string
189
+ const tempName = `${path_1.default.basename(filePath, ext)}_${Date.now()}${ext}`;
190
+ const tempPath = path_1.default.join(path_1.default.dirname(filePath), tempName);
191
+ try {
192
+ let transformer = (0, sharp_1.default)(filePath);
193
+ const metadata = await transformer.metadata();
194
+ if (resizeTo) {
195
+ const targetSize = parseInt(resizeTo.toString());
196
+ const scaleFactor = targetSize / Math.min(metadata.width, metadata.height);
197
+ const newWidth = Math.round(metadata.width * scaleFactor);
198
+ const newHeight = Math.round(metadata.height * scaleFactor);
199
+ transformer = transformer.resize(newWidth, newHeight);
200
+ }
201
+ else if (width || height) {
202
+ transformer = transformer.resize(parseInt(width) || null, parseInt(height) || null, { fit: "inside" });
203
+ }
204
+ if (outputFormat === "webp") {
205
+ transformer = transformer.toFormat("webp");
206
+ }
207
+ else if (outputFormat === "jpeg" || outputFormat === "jpg") {
208
+ transformer = transformer.toFormat("jpeg");
209
+ }
210
+ // Save to temp file first
211
+ await transformer.toFile(tempPath);
212
+ // Remove original file
213
+ // await fs.promises.unlink(filePath)
214
+ // Rename temp file to original filename
215
+ await fs_1.default.promises.rename(tempPath, filePath);
216
+ return `${baseURL}/api/${filePath
217
+ .replace(`${paths_1.ROOT_DIR}/`, "")
218
+ .replace(/\\/g, "/")}`;
219
+ }
220
+ catch (error) {
221
+ // Clean up temp file if it exists
222
+ if (await fs_1.default.promises.stat(tempPath)) {
223
+ await fs_1.default.promises.unlink(tempPath);
224
+ }
225
+ next(error);
226
+ }
227
+ };
228
+ let data;
229
+ if (req.files && Array.isArray(req.files)) {
230
+ data = await Promise.all(req.files.map((file) => processImage(file.path)));
231
+ }
232
+ else if (req.file) {
233
+ data = await processImage(req.file.path);
234
+ }
235
+ else {
236
+ return next(new app_error_1.default("No file uploaded", 400));
237
+ }
238
+ res.json({ data });
239
+ });
240
+ });
241
+ exports.deleteFile = (0, catch_async_1.default)(async (req, res, next) => {
242
+ const { fileType, fileName } = req.params;
243
+ if (!fileName)
244
+ return next(new app_error_1.default("File name is required", 400));
245
+ const actualFilePath = path_1.default.join(paths_1.ROOT_DIR, "uploads", fileType, fileName);
246
+ try {
247
+ await access(actualFilePath);
248
+ }
249
+ catch {
250
+ return next(new app_error_1.default("File not found", 404));
251
+ }
252
+ await unlink(actualFilePath);
253
+ res.json({ message: "File deleted successfully" });
254
+ });
255
+ exports.streamFile = (0, catch_async_1.default)(async (req, res, next) => {
256
+ const { fileName, fileType } = req.params;
257
+ const filePath = path_1.default.join(".", "uploads", fileType, fileName);
258
+ try {
259
+ await access(filePath);
260
+ }
261
+ catch {
262
+ return next(new app_error_1.default("File not found", 404));
263
+ }
264
+ const fileStat = await stat(filePath);
265
+ const fileSize = fileStat.size;
266
+ const range = req.headers.range;
267
+ if (range) {
268
+ const [partialStart, partialEnd] = range.replace(/bytes=/, "").split("-");
269
+ const start = parseInt(partialStart, 10) || 0;
270
+ const end = partialEnd ? parseInt(partialEnd, 10) : fileSize - 1;
271
+ if (start >= fileSize || end >= fileSize) {
272
+ res.status(416).json({ error: "Range Not Satisfiable" });
273
+ return;
274
+ }
275
+ res.writeHead(206, {
276
+ "Content-Range": `bytes ${start}-${end}/${fileSize}`,
277
+ "Accept-Ranges": "bytes",
278
+ "Content-Length": end - start + 1,
279
+ "Content-Type": "application/octet-stream",
280
+ "Content-Disposition": `inline; filename="${fileName}"`,
281
+ });
282
+ fs_1.default.createReadStream(filePath, { start, end }).pipe(res);
283
+ }
284
+ else {
285
+ res.writeHead(200, {
286
+ "Content-Length": fileSize,
287
+ "Content-Type": "application/octet-stream",
288
+ "Content-Disposition": `inline; filename="${fileName}"`,
289
+ });
290
+ fs_1.default.createReadStream(filePath).pipe(res);
291
+ }
292
+ });
293
+ exports.getDatabaseModels = (0, catch_async_1.default)(async (req, res, next) => {
294
+ res.status(200).json({ data: models_helpers_1.models.map((model) => (0, change_case_all_1.kebabCase)(model)) });
295
+ });
296
+ //# sourceMappingURL=base.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.controller.js","sourceRoot":"","sources":["../../../../src/modules/base/base.controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { NextFunction, Request, Response } from 'express';
2
+ import { PrismaQueryOptions } from '../../types';
3
+ export declare function callNext(req: Request, res: Response, next: NextFunction): void;
4
+ export declare function sendResponse(req: Request, res: Response, next: NextFunction): void;
5
+ export declare function addRouteMiddlwaresAndConfigs(): void;
6
+ /**
7
+ * Middleware to add Prisma query options to the request's query parameters.
8
+ *
9
+ * @template T - The type of the Prisma model.
10
+ * @param {PrismaQueryOptions<T>} prismaQueryOptions - The Prisma query options to attach.
11
+ * @param {ControllerActions} action - The controller action to apply.
12
+ * @returns A middleware function that attaches the query options to the request.
13
+ */
14
+ export declare function addPrismaQueryOptionsToRequestQuery<T>(prismaQueryOptions: PrismaQueryOptions<T>, action: keyof PrismaQueryOptions<T>): (req: Request, res: Response, next: NextFunction) => void;
15
+ /**
16
+ * Logs request events with colored text such as errors, requests responses.
17
+ *
18
+ */
19
+ export declare function handleRequestLogs(req: Request, res: Response, next: NextFunction): void;
20
+ //# sourceMappingURL=base.middlewares.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.middlewares.d.ts","sourceRoot":"","sources":["../../../../src/modules/base/base.middlewares.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAEhD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,QAEvE;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,QAS3E;AAED,wBAAgB,4BAA4B,SAAK;AAEjD;;;;;;;GAOG;AACH,wBAAgB,mCAAmC,CAAC,CAAC,EACnD,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,CAAC,EACzC,MAAM,EAAE,MAAM,kBAAkB,CAAC,CAAC,CAAC,IAE3B,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,UAOxD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,QAqDnB"}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.callNext = callNext;
4
+ exports.sendResponse = sendResponse;
5
+ exports.addRouteMiddlwaresAndConfigs = addRouteMiddlwaresAndConfigs;
6
+ exports.addPrismaQueryOptionsToRequestQuery = addPrismaQueryOptionsToRequestQuery;
7
+ exports.handleRequestLogs = handleRequestLogs;
8
+ function callNext(req, res, next) {
9
+ next();
10
+ }
11
+ function sendResponse(req, res, next) {
12
+ if (req.responseData && req.responseStatus)
13
+ res.status(req.responseStatus).json(req.responseData);
14
+ else if (req.responseStatus && !req.responseData)
15
+ res.status(req.responseStatus).send();
16
+ else
17
+ res
18
+ .status(500)
19
+ .json({ message: 'No status or data attached to the response' });
20
+ }
21
+ function addRouteMiddlwaresAndConfigs() { }
22
+ /**
23
+ * Middleware to add Prisma query options to the request's query parameters.
24
+ *
25
+ * @template T - The type of the Prisma model.
26
+ * @param {PrismaQueryOptions<T>} prismaQueryOptions - The Prisma query options to attach.
27
+ * @param {ControllerActions} action - The controller action to apply.
28
+ * @returns A middleware function that attaches the query options to the request.
29
+ */
30
+ function addPrismaQueryOptionsToRequestQuery(prismaQueryOptions, action) {
31
+ return (req, res, next) => {
32
+ req.query.prismaQueryOptions = JSON.stringify({
33
+ ...prismaQueryOptions?.queryOptions,
34
+ ...(prismaQueryOptions ? prismaQueryOptions[action] : {}),
35
+ });
36
+ next();
37
+ };
38
+ }
39
+ /**
40
+ * Logs request events with colored text such as errors, requests responses.
41
+ *
42
+ */
43
+ function handleRequestLogs(req, res, next) {
44
+ // if (process.env.NODE_ENV === 'production') return next()
45
+ const startTime = Date.now(); // Capture the start time
46
+ // Define colors for each HTTP method
47
+ const methodColors = {
48
+ GET: '\x1b[36m', // Cyan
49
+ POST: '\x1b[32m', // Green
50
+ PUT: '\x1b[33m', // Orange/Yellow
51
+ PATCH: '\x1b[33m', // Orange/Yellow
52
+ DELETE: '\x1b[31m', // Red
53
+ HEAD: '\x1b[34m', // Blue
54
+ OPTIONS: '\x1b[34m', // Blue
55
+ };
56
+ // Function to determine status code color
57
+ const getStatusColor = (statusCode) => {
58
+ if (statusCode >= 200 && statusCode < 300)
59
+ return '\x1b[32m'; // Green
60
+ if (statusCode >= 300 && statusCode < 400)
61
+ return '\x1b[33m'; // Orange/Yellow
62
+ if (statusCode >= 400 && statusCode < 500)
63
+ return '\x1b[33m'; // Red
64
+ if (statusCode >= 500)
65
+ return '\x1b[31m'; // White on Red background
66
+ return '\x1b[0m'; // Default (no color)
67
+ };
68
+ res.on('finish', () => {
69
+ const duration = Date.now() - startTime; // Calculate the time taken to process the request
70
+ // Get the current date and time
71
+ const now = new Date();
72
+ const dayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
73
+ const dayName = dayNames[now.getDay()];
74
+ const dayOfMonth = now.getDate();
75
+ const time = now.toTimeString().split(' ')[0]; // Format as HH:MM:SS
76
+ const methodColor = methodColors[req.method] || '\x1b[0m'; // Default to no color
77
+ const statusColor = getStatusColor(res.statusCode); // Get the color for the status code
78
+ console.info(`[\x1b[36mINFO\x1b[0m] \x1b[90m${time}\x1b[0m ${methodColor}${req.method}\x1b[0m ${decodeURIComponent(req.originalUrl)} ${statusColor}${res.statusCode}\x1b[0m \x1b[35m${duration}ms\x1b[0m`);
79
+ // Keep the commented-out example as it is
80
+ // console.log(
81
+ // `[\x1b[36mINFO\x1b[0m] ${dayName} ${dayOfMonth} ${time} ${methodColor}${req.method}\x1b[0m ${req.originalUrl} \x1b[32m${res.statusCode}\x1b[0m \x1b[35m${duration}ms\x1b[0m`
82
+ // );
83
+ });
84
+ next(); // Pass control to the next middleware or route handler
85
+ }
86
+ //# sourceMappingURL=base.middlewares.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.middlewares.js","sourceRoot":"","sources":["../../../../src/modules/base/base.middlewares.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Router } from "express";
2
+ declare const router: Router;
3
+ export default router;
4
+ //# sourceMappingURL=base.router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.router.d.ts","sourceRoot":"","sources":["../../../../src/modules/base/base.router.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAqBjC,QAAA,MAAM,MAAM,EAAE,MAAiB,CAAC;AAiQhC,eAAe,MAAM,CAAC"}