vr-commons 1.0.176 → 1.0.178

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 (101) hide show
  1. package/dist/constants/regex.constants.d.ts +19 -0
  2. package/dist/constants/regex.constants.js +24 -0
  3. package/dist/index.d.ts +0 -1
  4. package/dist/index.js +0 -3
  5. package/dist/middlewares/admin/admin.auth.middleware.js +60 -0
  6. package/dist/middlewares/index.d.ts +4 -5
  7. package/dist/middlewares/index.js +11 -14
  8. package/dist/middlewares/shared/auth.admin.middlewares.d.ts +3 -0
  9. package/dist/middlewares/{auth.admin.middlewares.js → shared/auth.admin.middlewares.js} +7 -7
  10. package/dist/middlewares/{account.shared.middlewares.js → shared/shared.account.middleware.js} +8 -8
  11. package/dist/middlewares/{errorHandler.middleware.js → shared/shared.errorHandler.middleware.js} +0 -1
  12. package/dist/middlewares/{auth.users.middlewares.js → users/users.auth.middleware.js} +10 -10
  13. package/dist/utils/{admin.devicePayment.utils.d.ts → admin/admin.devicePayments.utils.d.ts} +2 -1
  14. package/dist/utils/{admin.devicePayment.utils.js → admin/admin.devicePayments.utils.js} +13 -10
  15. package/dist/utils/{admin.device.utils.d.ts → admin/admin.devices.utils.d.ts} +1 -1
  16. package/dist/utils/{admin.device.utils.js → admin/admin.devices.utils.js} +11 -12
  17. package/dist/utils/{eventlogs.admin.utils.js → admin/admin.eventLogs.utils.js} +0 -1
  18. package/dist/utils/{hierarchy.utils.js → admin/admin.hierarchy.utils.js} +0 -2
  19. package/dist/utils/{product.utils.d.ts → admin/admin.products.utils.d.ts} +1 -1
  20. package/dist/utils/{systemLog.utils.js → admin/admin.systemLogs.utils.js} +0 -1
  21. package/dist/utils/index.d.ts +16 -18
  22. package/dist/utils/index.js +88 -99
  23. package/dist/utils/{account.utils.js → shared/shared.accounts.utils.js} +0 -1
  24. package/dist/utils/{profiles.utils.d.ts → shared/shared.profiles.utils.d.ts} +2 -1
  25. package/dist/utils/{profiles.utils.js → shared/shared.profiles.utils.js} +3 -2
  26. package/dist/utils/{verification.utils.d.ts → users/users.verification.utils.d.ts} +1 -1
  27. package/dist/utils/{verification.utils.js → users/users.verification.utils.js} +5 -4
  28. package/dist/validations/{admin.devicePayment.validations.d.ts → admin/admin.devicePayments.validations.d.ts} +59 -59
  29. package/dist/validations/{admin.devicePayment.validations.js → admin/admin.devicePayments.validations.js} +4 -3
  30. package/dist/validations/{admin.devices.validations.d.ts → admin/admin.devices.validations.d.ts} +22 -22
  31. package/dist/validations/{admin.devices.validations.js → admin/admin.devices.validations.js} +4 -5
  32. package/dist/validations/{eventlogs.admin.validations.d.ts → admin/admin.eventLogs.validations.d.ts} +14 -14
  33. package/dist/validations/{eventlogs.admin.validations.js → admin/admin.eventLogs.validations.js} +2 -2
  34. package/dist/validations/{admin.installment.validations.js → admin/admin.installments.validations.js} +5 -4
  35. package/dist/validations/{pricings.validations.d.ts → admin/admin.pricings.validations.d.ts} +60 -60
  36. package/dist/validations/{pricings.validations.js → admin/admin.pricings.validations.js} +5 -5
  37. package/dist/validations/{product.validations.d.ts → admin/admin.products.validations.d.ts} +32 -32
  38. package/dist/validations/{product.validations.js → admin/admin.products.validations.js} +4 -3
  39. package/dist/validations/{users.admin.validations.d.ts → admin/admin.users.validations.d.ts} +44 -44
  40. package/dist/validations/{users.admin.validations.js → admin/admin.users.validations.js} +13 -13
  41. package/dist/validations/index.d.ts +16 -15
  42. package/dist/validations/index.js +132 -125
  43. package/dist/validations/{account.validations.js → shared/shared.account.validations.js} +7 -7
  44. package/dist/validations/{appSpecs.validations.d.ts → shared/shared.appSpecs.validations.d.ts} +14 -14
  45. package/dist/validations/{appSpecs.validations.js → shared/shared.appSpecs.validations.js} +0 -1
  46. package/dist/validations/{auth.validations.js → shared/shared.auth.validations.js} +6 -6
  47. package/dist/validations/{dateRange.validations.js → shared/shared.dateRanges.validations.js} +5 -5
  48. package/dist/validations/{moderation.validations.d.ts → shared/shared.moderation.validations.d.ts} +111 -111
  49. package/dist/validations/{moderation.validations.js → shared/shared.moderation.validations.js} +24 -25
  50. package/dist/validations/{profiles.validations.d.ts → shared/shared.profiles.validations.d.ts} +36 -36
  51. package/dist/validations/{profiles.validations.js → shared/shared.profiles.validations.js} +22 -21
  52. package/dist/validations/{devicePaymentPlan.validations.d.ts → users/users.devicePaymentPlans.validations.d.ts} +16 -16
  53. package/dist/validations/{devices.validations.js → users/users.devices.validations.js} +2 -1
  54. package/package.json +1 -1
  55. package/dist/middlewares/idempotency.middlewares.d.ts +0 -3
  56. package/dist/middlewares/idempotency.middlewares.js +0 -74
  57. package/dist/utils/deviceUtils.d.ts +0 -2
  58. package/dist/utils/deviceUtils.js +0 -21
  59. package/dist/utils/session.utils.d.ts +0 -6
  60. package/dist/utils/session.utils.js +0 -25
  61. package/dist/validations/appeals.validations.d.ts +0 -61
  62. package/dist/validations/appeals.validations.js +0 -31
  63. package/dist/validations/payinstallment.validations.d.ts +0 -56
  64. package/dist/validations/payinstallment.validations.js +0 -23
  65. package/dist/validations/pricing.validations.d.ts +0 -313
  66. package/dist/validations/pricing.validations.js +0 -376
  67. package/dist/middlewares/{auth.admin.middlewares.d.ts → admin/admin.auth.middleware.d.ts} +0 -0
  68. package/dist/middlewares/{account.shared.middlewares.d.ts → shared/shared.account.middleware.d.ts} +0 -0
  69. package/dist/middlewares/{errorHandler.middleware.d.ts → shared/shared.errorHandler.middleware.d.ts} +0 -0
  70. package/dist/middlewares/{auth.users.middlewares.d.ts → users/users.auth.middleware.d.ts} +0 -0
  71. package/dist/utils/{bans.utils.d.ts → admin/admin.bans.utils.d.ts} +0 -0
  72. package/dist/utils/{bans.utils.js → admin/admin.bans.utils.js} +0 -0
  73. package/dist/utils/{eventlogs.admin.utils.d.ts → admin/admin.eventLogs.utils.d.ts} +0 -0
  74. package/dist/utils/{hierarchy.utils.d.ts → admin/admin.hierarchy.utils.d.ts} +0 -0
  75. package/dist/utils/{moderation.utils.d.ts → admin/admin.moderation.utils.d.ts} +0 -0
  76. package/dist/utils/{moderation.utils.js → admin/admin.moderation.utils.js} +0 -0
  77. package/dist/utils/{product.utils.js → admin/admin.products.utils.js} +0 -0
  78. package/dist/utils/{suspension.utils.d.ts → admin/admin.suspensions.utils.d.ts} +0 -0
  79. package/dist/utils/{suspension.utils.js → admin/admin.suspensions.utils.js} +0 -0
  80. package/dist/utils/{systemLog.utils.d.ts → admin/admin.systemLogs.utils.d.ts} +0 -0
  81. package/dist/utils/{account.utils.d.ts → shared/shared.accounts.utils.d.ts} +0 -0
  82. package/dist/utils/{authTokens.utils.d.ts → shared/shared.authTokens.utils.d.ts} +0 -0
  83. package/dist/utils/{authTokens.utils.js → shared/shared.authTokens.utils.js} +0 -0
  84. package/dist/utils/{eventLog.utils.d.ts → shared/shared.eventLogs.utils.d.ts} +0 -0
  85. package/dist/utils/{eventLog.utils.js → shared/shared.eventLogs.utils.js} +0 -0
  86. package/dist/utils/{response.utils.d.ts → shared/shared.responses.utils.d.ts} +0 -0
  87. package/dist/utils/{response.utils.js → shared/shared.responses.utils.js} +0 -0
  88. package/dist/utils/{types.d.ts → shared/shared.types.d.ts} +0 -0
  89. package/dist/utils/{types.js → shared/shared.types.js} +0 -0
  90. package/dist/validations/{bans.validations.d.ts → admin/admin.bans.validations.d.ts} +8 -8
  91. package/dist/validations/{bans.validations.js → admin/admin.bans.validations.js} +0 -0
  92. package/dist/validations/{admin.installment.validations.d.ts → admin/admin.installments.validations.d.ts} +16 -16
  93. package/dist/validations/{suspensions.validations.d.ts → admin/admin.suspensions.validations.d.ts} +8 -8
  94. /package/dist/validations/{suspensions.validations.js → admin/admin.suspensions.validations.js} +0 -0
  95. /package/dist/validations/{account.validations.d.ts → shared/shared.account.validations.d.ts} +0 -0
  96. /package/dist/validations/{auth.validations.d.ts → shared/shared.auth.validations.d.ts} +0 -0
  97. /package/dist/validations/{dateRange.validations.d.ts → shared/shared.dateRanges.validations.d.ts} +0 -0
  98. /package/dist/validations/{validate.validations.d.ts → shared/shared.validate.validations.d.ts} +0 -0
  99. /package/dist/validations/{validate.validations.js → shared/shared.validate.validations.js} +0 -0
  100. /package/dist/validations/{devicePaymentPlan.validations.js → users/users.devicePaymentPlans.validations.js} +0 -0
  101. /package/dist/validations/{devices.validations.d.ts → users/users.devices.validations.d.ts} +0 -0
@@ -0,0 +1,19 @@
1
+ /** Shared regular expressions used across validation and utility modules. */
2
+ export declare const PHONE_NUMBER_REGEX: RegExp;
3
+ export declare const LOCAL_RWANDA_PHONE_NUMBER_REGEX: RegExp;
4
+ export declare const EMAIL_ADDRESS_REGEX: RegExp;
5
+ export declare const PASSWORD_REGEX: RegExp;
6
+ export declare const STRONG_PASSWORD_REGEX: RegExp;
7
+ export declare const RIDER_PIN_REGEX: RegExp;
8
+ export declare const FOUR_DIGIT_PIN_REGEX: RegExp;
9
+ export declare const JACKET_ID_REGEX: RegExp;
10
+ export declare const PLATE_NUMBER_REGEX: RegExp;
11
+ export declare const RWANDA_PLATE_NUMBER_REGEX: RegExp;
12
+ export declare const DEVICE_SERIAL_NUMBER_REGEX: RegExp;
13
+ export declare const DEVICE_PAIR_ID_REGEX: RegExp;
14
+ export declare const ISO_DATE_REGEX: RegExp;
15
+ export declare const DAY_MONTH_YEAR_REGEX: RegExp;
16
+ export declare const DAY_MONTH_YEAR_SLASH_REGEX: RegExp;
17
+ export declare const ISO_DATE_SLASH_REGEX: RegExp;
18
+ export declare const NUMERIC_STRING_REGEX: RegExp;
19
+ export declare const BEARER_TOKEN_PREFIX_REGEX: RegExp;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BEARER_TOKEN_PREFIX_REGEX = exports.NUMERIC_STRING_REGEX = exports.ISO_DATE_SLASH_REGEX = exports.DAY_MONTH_YEAR_SLASH_REGEX = exports.DAY_MONTH_YEAR_REGEX = exports.ISO_DATE_REGEX = exports.DEVICE_PAIR_ID_REGEX = exports.DEVICE_SERIAL_NUMBER_REGEX = exports.RWANDA_PLATE_NUMBER_REGEX = exports.PLATE_NUMBER_REGEX = exports.JACKET_ID_REGEX = exports.FOUR_DIGIT_PIN_REGEX = exports.RIDER_PIN_REGEX = exports.STRONG_PASSWORD_REGEX = exports.PASSWORD_REGEX = exports.EMAIL_ADDRESS_REGEX = exports.LOCAL_RWANDA_PHONE_NUMBER_REGEX = exports.PHONE_NUMBER_REGEX = void 0;
4
+ /** Shared regular expressions used across validation and utility modules. */
5
+ exports.PHONE_NUMBER_REGEX = /^\+250(78|79|73|72)[0-9]{7}$/;
6
+ exports.LOCAL_RWANDA_PHONE_NUMBER_REGEX = /^(078|079|072|073)\d{7}$/;
7
+ exports.EMAIL_ADDRESS_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
8
+ exports.PASSWORD_REGEX = /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{6,}$/;
9
+ exports.STRONG_PASSWORD_REGEX = /^(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&#^()_\-+=])[A-Za-z\d@$!%*?&#^()_\-+=]{8,}$/;
10
+ exports.RIDER_PIN_REGEX = /^(?!(\d)\1{3})\d{4}$/;
11
+ exports.FOUR_DIGIT_PIN_REGEX = /^\d{4}$/;
12
+ exports.JACKET_ID_REGEX = /^JKT-\d{9}$/;
13
+ // These two existing rules express different accepted formats. Keep both
14
+ // centralized until the product requirements choose one canonical plate format.
15
+ exports.PLATE_NUMBER_REGEX = /^[A-Z0-9]{3,10}$/i;
16
+ exports.RWANDA_PLATE_NUMBER_REGEX = /^R[ABCDEFGHIJKLMNPQRSTUVWXYZ]\s?\d{3}\s?[ABCDEFGHIJKLMNPQRSTUVWXYZ]$/;
17
+ exports.DEVICE_SERIAL_NUMBER_REGEX = /^(VBRD|VIBERIDE)-(PASSENGER|RIDER)-([A-Z]{2}\d{3}[A-Z])$/;
18
+ exports.DEVICE_PAIR_ID_REGEX = /^[A-NP-Z]{2}[0-9]{3}[A-NP-Z]{1}$/;
19
+ exports.ISO_DATE_REGEX = /^\d{4}-\d{2}-\d{2}$/;
20
+ exports.DAY_MONTH_YEAR_REGEX = /^\d{2}-\d{2}-\d{4}$/;
21
+ exports.DAY_MONTH_YEAR_SLASH_REGEX = /^\d{2}\/\d{2}\/\d{4}$/;
22
+ exports.ISO_DATE_SLASH_REGEX = /^\d{4}\/\d{2}\/\d{2}$/;
23
+ exports.NUMERIC_STRING_REGEX = /^\d+$/;
24
+ exports.BEARER_TOKEN_PREFIX_REGEX = /^Bearer /;
package/dist/index.d.ts CHANGED
@@ -1,4 +1,3 @@
1
1
  export * from "./middlewares";
2
2
  export * from "./validations";
3
3
  export * from "./utils";
4
- export { validate } from "./validations/validate.validations";
package/dist/index.js CHANGED
@@ -14,10 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.validate = void 0;
18
17
  // Core Functionality
19
18
  __exportStar(require("./middlewares"), exports);
20
19
  __exportStar(require("./validations"), exports);
21
20
  __exportStar(require("./utils"), exports);
22
- var validate_validations_1 = require("./validations/validate.validations");
23
- Object.defineProperty(exports, "validate", { enumerable: true, get: function () { return validate_validations_1.validate; } });
@@ -0,0 +1,60 @@
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.checkAdminAuthentication = void 0;
7
+ const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
8
+ const vr_models_1 = require("vr-models");
9
+ const shared_responses_utils_1 = require("../../utils/shared/shared.responses.utils");
10
+ const checkAdminAuthentication = (allowedRoles) => async (req, res, next) => {
11
+ try {
12
+ const token = req.cookies?.access_token;
13
+ if (!token) {
14
+ return (0, shared_responses_utils_1.sendErrorResponse)(res, "Authentication required", 401);
15
+ }
16
+ let payload;
17
+ try {
18
+ payload = jsonwebtoken_1.default.verify(token, process.env.JWT_SECRET);
19
+ }
20
+ catch (error) {
21
+ if (error instanceof jsonwebtoken_1.default.TokenExpiredError) {
22
+ return (0, shared_responses_utils_1.sendErrorResponse)(res, "Session expired. Please login again.", 401);
23
+ }
24
+ return (0, shared_responses_utils_1.sendErrorResponse)(res, "Invalid session", 401);
25
+ }
26
+ const user = await vr_models_1.User.findOne({
27
+ where: { id: payload.userId },
28
+ include: [
29
+ {
30
+ model: vr_models_1.SecurityClearance,
31
+ as: "securityClearance",
32
+ },
33
+ ],
34
+ });
35
+ if (!user || !user.securityClearance) {
36
+ return (0, shared_responses_utils_1.sendErrorResponse)(res, "User not found", 400);
37
+ }
38
+ // 🔐 Token versioning
39
+ if (user.tokenVersion !== payload.tokenVersion) {
40
+ return (0, shared_responses_utils_1.sendErrorResponse)(res, "Session expired", 401);
41
+ }
42
+ // 🧱 Role enforcement
43
+ if (!allowedRoles.includes(user.securityClearance.role)) {
44
+ return (0, shared_responses_utils_1.sendErrorResponse)(res, "Access denied", 403);
45
+ }
46
+ // Attach user to request (same as before)
47
+ req.userId = user.id;
48
+ req.firstName = user.firstName;
49
+ req.lastName = user.lastName;
50
+ req.scRole = user.securityClearance.role;
51
+ req.scLevel = user.securityClearance.level;
52
+ req.tokenVersion = user.tokenVersion;
53
+ next();
54
+ }
55
+ catch (error) {
56
+ console.error("Authentication error:", error);
57
+ next(error);
58
+ }
59
+ };
60
+ exports.checkAdminAuthentication = checkAdminAuthentication;
@@ -1,5 +1,4 @@
1
- export { checkAdminAuthentication } from "./auth.admin.middlewares";
2
- export { checkUserAuthentication } from "./auth.users.middlewares";
3
- export { checkIsUserBanned, checkIsUserSuspended, checkUserAccountStatus, } from "./account.shared.middlewares";
4
- export { idempotencyMiddleware, storeIdempotencyResponse, } from "./idempotency.middlewares";
5
- export { errorHandler } from "./errorHandler.middleware";
1
+ export { checkAdminAuthentication } from "./admin/admin.auth.middleware";
2
+ export { checkUserAuthentication } from "./users/users.auth.middleware";
3
+ export { checkIsUserBanned, checkIsUserSuspended, checkUserAccountStatus, } from "./shared/shared.account.middleware";
4
+ export { errorHandler } from "./shared/shared.errorHandler.middleware";
@@ -1,16 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.errorHandler = exports.storeIdempotencyResponse = exports.idempotencyMiddleware = exports.checkUserAccountStatus = exports.checkIsUserSuspended = exports.checkIsUserBanned = exports.checkUserAuthentication = exports.checkAdminAuthentication = void 0;
4
- var auth_admin_middlewares_1 = require("./auth.admin.middlewares");
5
- Object.defineProperty(exports, "checkAdminAuthentication", { enumerable: true, get: function () { return auth_admin_middlewares_1.checkAdminAuthentication; } });
6
- var auth_users_middlewares_1 = require("./auth.users.middlewares");
7
- Object.defineProperty(exports, "checkUserAuthentication", { enumerable: true, get: function () { return auth_users_middlewares_1.checkUserAuthentication; } });
8
- var account_shared_middlewares_1 = require("./account.shared.middlewares");
9
- Object.defineProperty(exports, "checkIsUserBanned", { enumerable: true, get: function () { return account_shared_middlewares_1.checkIsUserBanned; } });
10
- Object.defineProperty(exports, "checkIsUserSuspended", { enumerable: true, get: function () { return account_shared_middlewares_1.checkIsUserSuspended; } });
11
- Object.defineProperty(exports, "checkUserAccountStatus", { enumerable: true, get: function () { return account_shared_middlewares_1.checkUserAccountStatus; } });
12
- var idempotency_middlewares_1 = require("./idempotency.middlewares");
13
- Object.defineProperty(exports, "idempotencyMiddleware", { enumerable: true, get: function () { return idempotency_middlewares_1.idempotencyMiddleware; } });
14
- Object.defineProperty(exports, "storeIdempotencyResponse", { enumerable: true, get: function () { return idempotency_middlewares_1.storeIdempotencyResponse; } });
15
- var errorHandler_middleware_1 = require("./errorHandler.middleware");
16
- Object.defineProperty(exports, "errorHandler", { enumerable: true, get: function () { return errorHandler_middleware_1.errorHandler; } });
3
+ exports.errorHandler = exports.checkUserAccountStatus = exports.checkIsUserSuspended = exports.checkIsUserBanned = exports.checkUserAuthentication = exports.checkAdminAuthentication = void 0;
4
+ var admin_auth_middleware_1 = require("./admin/admin.auth.middleware");
5
+ Object.defineProperty(exports, "checkAdminAuthentication", { enumerable: true, get: function () { return admin_auth_middleware_1.checkAdminAuthentication; } });
6
+ var users_auth_middleware_1 = require("./users/users.auth.middleware");
7
+ Object.defineProperty(exports, "checkUserAuthentication", { enumerable: true, get: function () { return users_auth_middleware_1.checkUserAuthentication; } });
8
+ var shared_account_middleware_1 = require("./shared/shared.account.middleware");
9
+ Object.defineProperty(exports, "checkIsUserBanned", { enumerable: true, get: function () { return shared_account_middleware_1.checkIsUserBanned; } });
10
+ Object.defineProperty(exports, "checkIsUserSuspended", { enumerable: true, get: function () { return shared_account_middleware_1.checkIsUserSuspended; } });
11
+ Object.defineProperty(exports, "checkUserAccountStatus", { enumerable: true, get: function () { return shared_account_middleware_1.checkUserAccountStatus; } });
12
+ var shared_errorHandler_middleware_1 = require("./shared/shared.errorHandler.middleware");
13
+ Object.defineProperty(exports, "errorHandler", { enumerable: true, get: function () { return shared_errorHandler_middleware_1.errorHandler; } });
@@ -0,0 +1,3 @@
1
+ import { Request, Response, NextFunction } from "express";
2
+ import { UserRole } from "vr-models";
3
+ export declare const checkAdminAuthentication: (allowedRoles: UserRole[]) => (req: Request, res: Response, next: NextFunction) => Promise<void>;
@@ -6,12 +6,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.checkAdminAuthentication = void 0;
7
7
  const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
8
8
  const vr_models_1 = require("vr-models");
9
- const response_utils_1 = require("../utils/response.utils");
9
+ const shared_responses_utils_1 = require("../../utils/shared/shared.responses.utils");
10
10
  const checkAdminAuthentication = (allowedRoles) => async (req, res, next) => {
11
11
  try {
12
12
  const token = req.cookies?.access_token;
13
13
  if (!token) {
14
- return (0, response_utils_1.sendErrorResponse)(res, "Authentication required", 401);
14
+ return (0, shared_responses_utils_1.sendErrorResponse)(res, "Authentication required", 401);
15
15
  }
16
16
  let payload;
17
17
  try {
@@ -19,9 +19,9 @@ const checkAdminAuthentication = (allowedRoles) => async (req, res, next) => {
19
19
  }
20
20
  catch (error) {
21
21
  if (error instanceof jsonwebtoken_1.default.TokenExpiredError) {
22
- return (0, response_utils_1.sendErrorResponse)(res, "Session expired. Please login again.", 401);
22
+ return (0, shared_responses_utils_1.sendErrorResponse)(res, "Session expired. Please login again.", 401);
23
23
  }
24
- return (0, response_utils_1.sendErrorResponse)(res, "Invalid session", 401);
24
+ return (0, shared_responses_utils_1.sendErrorResponse)(res, "Invalid session", 401);
25
25
  }
26
26
  const user = await vr_models_1.User.findOne({
27
27
  where: { id: payload.userId },
@@ -33,15 +33,15 @@ const checkAdminAuthentication = (allowedRoles) => async (req, res, next) => {
33
33
  ],
34
34
  });
35
35
  if (!user || !user.securityClearance) {
36
- return (0, response_utils_1.sendErrorResponse)(res, "User not found", 400);
36
+ return (0, shared_responses_utils_1.sendErrorResponse)(res, "User not found", 400);
37
37
  }
38
38
  // 🔐 Token versioning
39
39
  if (user.tokenVersion !== payload.tokenVersion) {
40
- return (0, response_utils_1.sendErrorResponse)(res, "Session expired", 401);
40
+ return (0, shared_responses_utils_1.sendErrorResponse)(res, "Session expired", 401);
41
41
  }
42
42
  // 🧱 Role enforcement
43
43
  if (!allowedRoles.includes(user.securityClearance.role)) {
44
- return (0, response_utils_1.sendErrorResponse)(res, "Access denied", 403);
44
+ return (0, shared_responses_utils_1.sendErrorResponse)(res, "Access denied", 403);
45
45
  }
46
46
  // Attach user to request (same as before)
47
47
  req.userId = user.id;
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.checkIsUserBanned = checkIsUserBanned;
4
4
  exports.checkIsUserSuspended = checkIsUserSuspended;
5
5
  exports.checkUserAccountStatus = checkUserAccountStatus;
6
- const account_utils_1 = require("../utils/account.utils");
7
- const response_utils_1 = require("../utils/response.utils");
6
+ const shared_accounts_utils_1 = require("../../utils/shared/shared.accounts.utils");
7
+ const shared_responses_utils_1 = require("../../utils/shared/shared.responses.utils");
8
8
  // Check if user is banned
9
9
  async function checkIsUserBanned(req, res, next) {
10
10
  try {
@@ -12,12 +12,12 @@ async function checkIsUserBanned(req, res, next) {
12
12
  if (!userId) {
13
13
  return next();
14
14
  }
15
- const { isBanned, banDetails } = await (0, account_utils_1.checkBanStatus)(userId);
15
+ const { isBanned, banDetails } = await (0, shared_accounts_utils_1.checkBanStatus)(userId);
16
16
  if (isBanned && banDetails && !banDetails.revokedAt) {
17
17
  const message = banDetails.isPermanent
18
18
  ? "Your account has been permanently banned"
19
19
  : `Your account was banned at: ${banDetails.bannedAt.toISOString()}`;
20
- return (0, response_utils_1.sendErrorResponse)(res, message, 403, banDetails);
20
+ return (0, shared_responses_utils_1.sendErrorResponse)(res, message, 403, banDetails);
21
21
  }
22
22
  next();
23
23
  }
@@ -32,12 +32,12 @@ async function checkIsUserSuspended(req, res, next) {
32
32
  if (!userId) {
33
33
  return next();
34
34
  }
35
- const { isSuspended, suspensionDetails } = await (0, account_utils_1.checkSuspensionStatus)(userId);
35
+ const { isSuspended, suspensionDetails } = await (0, shared_accounts_utils_1.checkSuspensionStatus)(userId);
36
36
  if (isSuspended && suspensionDetails) {
37
37
  const daysRemaining = Math.ceil((new Date(suspensionDetails.endsAt).getTime() - new Date().getTime()) /
38
38
  (1000 * 60 * 60 * 24));
39
39
  const message = `Your account is suspended for ${daysRemaining} more day(s) until ${suspensionDetails.endsAt.toISOString()}`;
40
- return (0, response_utils_1.sendErrorResponse)(res, message, 403, suspensionDetails);
40
+ return (0, shared_responses_utils_1.sendErrorResponse)(res, message, 403, suspensionDetails);
41
41
  }
42
42
  next();
43
43
  }
@@ -52,9 +52,9 @@ async function checkUserAccountStatus(req, res, next) {
52
52
  if (!userId) {
53
53
  return next();
54
54
  }
55
- const result = await (0, account_utils_1.checkIsUserBannedOrSuspended)(userId);
55
+ const result = await (0, shared_accounts_utils_1.checkIsUserBannedOrSuspended)(userId);
56
56
  if (result.isRestricted) {
57
- return (0, response_utils_1.sendErrorResponse)(res, result.message, 403, result.details);
57
+ return (0, shared_responses_utils_1.sendErrorResponse)(res, result.message, 403, result.details);
58
58
  }
59
59
  next();
60
60
  }
@@ -1,5 +1,4 @@
1
1
  "use strict";
2
- // src/middleware/errorHandler.ts
3
2
  Object.defineProperty(exports, "__esModule", { value: true });
4
3
  exports.errorHandler = errorHandler;
5
4
  /**
@@ -6,13 +6,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.checkUserAuthentication = void 0;
7
7
  const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
8
8
  const vr_models_1 = require("vr-models");
9
- const response_utils_1 = require("../utils/response.utils");
10
- const authTokens_utils_1 = require("../utils/authTokens.utils");
9
+ const shared_responses_utils_1 = require("../../utils/shared/shared.responses.utils");
10
+ const shared_authTokens_utils_1 = require("../../utils/shared/shared.authTokens.utils");
11
11
  const checkUserAuthentication = (allowedRoles) => async (req, res, next) => {
12
12
  try {
13
13
  const authHeader = req.headers.authorization;
14
14
  if (!authHeader || !authHeader.startsWith("Bearer ")) {
15
- return (0, response_utils_1.sendErrorResponse)(res, "Missing or invalid token", 401);
15
+ return (0, shared_responses_utils_1.sendErrorResponse)(res, "Missing or invalid token", 401);
16
16
  }
17
17
  const token = authHeader.split(" ")[1];
18
18
  let payload;
@@ -21,9 +21,9 @@ const checkUserAuthentication = (allowedRoles) => async (req, res, next) => {
21
21
  }
22
22
  catch (error) {
23
23
  if (error instanceof jsonwebtoken_1.default.TokenExpiredError) {
24
- return (0, response_utils_1.sendErrorResponse)(res, "Token expired. Please re-verify your Email/Phone", 401);
24
+ return (0, shared_responses_utils_1.sendErrorResponse)(res, "Token expired. Please re-verify your Email/Phone", 401);
25
25
  }
26
- return (0, response_utils_1.sendErrorResponse)(res, "Token invalid", 401);
26
+ return (0, shared_responses_utils_1.sendErrorResponse)(res, "Token invalid", 401);
27
27
  }
28
28
  const user = await vr_models_1.User.findOne({
29
29
  where: { id: payload.userId },
@@ -36,15 +36,15 @@ const checkUserAuthentication = (allowedRoles) => async (req, res, next) => {
36
36
  });
37
37
  // Check if user exists
38
38
  if (!user || !user.securityClearance) {
39
- return (0, response_utils_1.sendErrorResponse)(res, "User not found", 400);
39
+ return (0, shared_responses_utils_1.sendErrorResponse)(res, "User not found", 400);
40
40
  }
41
41
  // 🔐 Token versioning (logout all devices)
42
42
  if (user.tokenVersion !== payload.tokenVersion) {
43
- return (0, response_utils_1.sendErrorResponse)(res, "Session expired. Please re-verify your Email/Phone", 401);
43
+ return (0, shared_responses_utils_1.sendErrorResponse)(res, "Session expired. Please re-verify your Email/Phone", 401);
44
44
  }
45
45
  // 🧱 Role enforcement
46
46
  if (!allowedRoles.includes(user.securityClearance.role)) {
47
- return (0, response_utils_1.sendErrorResponse)(res, "Access denied", 403);
47
+ return (0, shared_responses_utils_1.sendErrorResponse)(res, "Access denied", 403);
48
48
  }
49
49
  // ✅ Extend req with user info
50
50
  req.userId = user.id;
@@ -58,8 +58,8 @@ const checkUserAuthentication = (allowedRoles) => async (req, res, next) => {
58
58
  req.sessionId = payload.sessionId;
59
59
  }
60
60
  // 🔄 Auto-refresh token if it's about to expire (within 5 days)
61
- if ((0, authTokens_utils_1.shouldRefreshToken)(token)) {
62
- const newToken = (0, authTokens_utils_1.generateToken)(user.id, user.securityClearance.role, user.securityClearance.level, user.tokenVersion, payload.sessionId, // Preserve sessionId if exists
61
+ if ((0, shared_authTokens_utils_1.shouldRefreshToken)(token)) {
62
+ const newToken = (0, shared_authTokens_utils_1.generateToken)(user.id, user.securityClearance.role, user.securityClearance.level, user.tokenVersion, payload.sessionId, // Preserve sessionId if exists
63
63
  user.securityClearance.role === "ADMIN"
64
64
  ? "ADMIN"
65
65
  : user.securityClearance.role === "RIDER"
@@ -7,7 +7,8 @@ export interface DeleteCheckResult {
7
7
  export declare const DPP_OperationsUtil: {
8
8
  /**
9
9
  * Check if a payment plan can be deleted
10
- * Rule: Can only delete if NO payments have been made
10
+ * Financial records are permanent: delete only plans with no payments and
11
+ * no installments of any status.
11
12
  */
12
13
  canDeletePlan(planId: string, transaction?: Transaction): Promise<DeleteCheckResult>;
13
14
  /**
@@ -1,12 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DPP_OperationsUtil = void 0;
4
- // src/utils/admin.devicePayment.utils.ts
5
4
  const vr_models_1 = require("vr-models");
6
5
  exports.DPP_OperationsUtil = {
7
6
  /**
8
7
  * Check if a payment plan can be deleted
9
- * Rule: Can only delete if NO payments have been made
8
+ * Financial records are permanent: delete only plans with no payments and
9
+ * no installments of any status.
10
10
  */
11
11
  async canDeletePlan(planId, transaction) {
12
12
  // Check if any payments exist for this plan
@@ -20,18 +20,14 @@ exports.DPP_OperationsUtil = {
20
20
  reason: `Cannot delete plan with ${paymentCount} payment(s) already recorded`,
21
21
  };
22
22
  }
23
- // Also check if any installments are paid
24
- const paidInstallments = await vr_models_1.Installment.count({
25
- where: {
26
- devicePaymentPlanId: planId,
27
- status: "PAID",
28
- },
23
+ const installmentCount = await vr_models_1.Installment.count({
24
+ where: { devicePaymentPlanId: planId },
29
25
  transaction,
30
26
  });
31
- if (paidInstallments > 0) {
27
+ if (installmentCount > 0) {
32
28
  return {
33
29
  canDelete: false,
34
- reason: "Cannot delete plan with paid installments",
30
+ reason: `Cannot delete plan with ${installmentCount} installment(s) recorded`,
35
31
  };
36
32
  }
37
33
  return { canDelete: true };
@@ -158,6 +154,7 @@ exports.DPP_OperationsUtil = {
158
154
  const planData = {
159
155
  id: plan.id,
160
156
  userId: plan.userId,
157
+ productId: plan.productId,
161
158
  pricingSnapshot: plan.pricingSnapshot,
162
159
  totalAmount: plan.totalAmount, // ✅ Added
163
160
  paidAmount: plan.paidAmount,
@@ -178,6 +175,7 @@ exports.DPP_OperationsUtil = {
178
175
  return {
179
176
  id: planData.id,
180
177
  userId: planData.userId,
178
+ productId: planData.productId,
181
179
  pricingSnapshot: {
182
180
  id: planData.pricingSnapshot?.id || null,
183
181
  name: planData.pricingSnapshot?.name || null,
@@ -191,7 +189,12 @@ exports.DPP_OperationsUtil = {
191
189
  autoLockOnMiss: planData.pricingSnapshot?.autoLockOnMiss ?? true,
192
190
  minOrderQuantity: planData.pricingSnapshot?.minOrderQuantity || 1,
193
191
  maxOrderQuantity: planData.pricingSnapshot?.maxOrderQuantity || 1,
192
+ productId: planData.pricingSnapshot?.productId || planData.productId,
193
+ productName: planData.pricingSnapshot?.productName || null,
194
+ pairId: planData.pricingSnapshot?.pairId || null,
195
+ deviceIds: planData.pricingSnapshot?.deviceIds || [],
194
196
  },
197
+ historicalDeviceIds: planData.pricingSnapshot?.deviceIds || [],
195
198
  totalAmount: totalAmount, // ✅ Added
196
199
  paidAmount: planData.paidAmount || 0,
197
200
  outstandingAmount: planData.outstandingAmount || 0,
@@ -1,6 +1,6 @@
1
1
  import { Device, UserRole } from "vr-models";
2
2
  import { Transaction } from "sequelize";
3
- import { DeviceResetOptions, DeviceResetResult, StockChangeResult } from "./types";
3
+ import { DeviceResetOptions, DeviceResetResult, StockChangeResult } from "../shared/shared.types";
4
4
  export declare const stockUtil: {
5
5
  /**
6
6
  * Increment stock when devices are added/created
@@ -1,12 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.stockUtil = void 0;
4
- // src/utils/stock.util.ts
5
4
  const vr_models_1 = require("vr-models");
6
5
  const sequelize_1 = require("sequelize");
7
- const eventLog_utils_1 = require("./eventLog.utils");
8
- const admin_devices_validations_1 = require("../validations/admin.devices.validations");
9
- const systemLog_utils_1 = require("./systemLog.utils");
6
+ const shared_eventLogs_utils_1 = require("../shared/shared.eventLogs.utils");
7
+ const admin_devices_validations_1 = require("../../validations/admin/admin.devices.validations");
8
+ const admin_systemLogs_utils_1 = require("./admin.systemLogs.utils");
10
9
  const isValidUUID = (str) => {
11
10
  const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
12
11
  return uuidRegex.test(str);
@@ -192,7 +191,7 @@ exports.stockUtil = {
192
191
  }
193
192
  // Log stock change
194
193
  if (options?.actorId) {
195
- await (0, eventLog_utils_1.logEvent)({
194
+ await (0, shared_eventLogs_utils_1.logEvent)({
196
195
  actorId: options.actorId,
197
196
  actorType: options.actorType,
198
197
  action: "PRODUCT_STOCK_INCREMENTED",
@@ -241,7 +240,7 @@ exports.stockUtil = {
241
240
  }
242
241
  // Log stock change
243
242
  if (options?.actorId) {
244
- await (0, eventLog_utils_1.logEvent)({
243
+ await (0, shared_eventLogs_utils_1.logEvent)({
245
244
  actorId: options.actorId,
246
245
  actorType: options.actorType,
247
246
  action: "PRODUCT_STOCK_DECREMENTED",
@@ -283,7 +282,7 @@ exports.stockUtil = {
283
282
  await product.save({ transaction: options?.transaction });
284
283
  // Log stock change
285
284
  if (options?.actorId) {
286
- await (0, eventLog_utils_1.logEvent)({
285
+ await (0, shared_eventLogs_utils_1.logEvent)({
287
286
  actorId: options.actorId,
288
287
  actorType: options.actorType,
289
288
  action: "PRODUCT_STOCK_SET_MANUALLY",
@@ -627,7 +626,7 @@ exports.stockUtil = {
627
626
  console.log(`📋 WHERE: ${whereClause}`);
628
627
  console.log(`📝 SET: ${setClause}`);
629
628
  // Log start - SystemLog only
630
- await (0, systemLog_utils_1.logInfo)(`Reset device pairs job started`, {
629
+ await (0, admin_systemLogs_utils_1.logInfo)(`Reset device pairs job started`, {
631
630
  category: isSystem ? "CRONJOB" : "DEVICE",
632
631
  source: isSystem ? "device-reset.cronjob" : "device-reset.manual",
633
632
  details: { triggeredBy, batchSize, maxRetries, condition, update },
@@ -735,7 +734,7 @@ exports.stockUtil = {
735
734
  };
736
735
  console.log(`✅ Reset device pairs completed:`, result);
737
736
  // Log completion - SystemLog only
738
- await (0, systemLog_utils_1.logInfo)(`Reset device pairs job completed`, {
737
+ await (0, admin_systemLogs_utils_1.logInfo)(`Reset device pairs job completed`, {
739
738
  category: isSystem ? "CRONJOB" : "DEVICE",
740
739
  source: isSystem ? "device-reset.cronjob" : "device-reset.manual",
741
740
  details: {
@@ -747,7 +746,7 @@ exports.stockUtil = {
747
746
  },
748
747
  });
749
748
  if (result.errors.length > 0) {
750
- await (0, systemLog_utils_1.logError)(`Reset device pairs had ${result.errors.length} failures`, {
749
+ await (0, admin_systemLogs_utils_1.logError)(`Reset device pairs had ${result.errors.length} failures`, {
751
750
  category: isSystem ? "CRONJOB" : "DEVICE",
752
751
  source: isSystem ? "device-reset.cronjob" : "device-reset.manual",
753
752
  details: {
@@ -758,7 +757,7 @@ exports.stockUtil = {
758
757
  }
759
758
  // Log EventLog ONLY for user-triggered actions
760
759
  if (!isSystem && actorId && isValidUUID(actorId)) {
761
- await (0, eventLog_utils_1.logEvent)({
760
+ await (0, shared_eventLogs_utils_1.logEvent)({
762
761
  actorId: actorId,
763
762
  actorType: actorRole,
764
763
  action: "DEVICES_UPDATED",
@@ -804,7 +803,7 @@ exports.stockUtil = {
804
803
  pairsProcessed: 0,
805
804
  message: `Reset device pairs job failed: ${errorMessage}`,
806
805
  };
807
- await (0, systemLog_utils_1.logError)(`Reset device pairs job failed`, {
806
+ await (0, admin_systemLogs_utils_1.logError)(`Reset device pairs job failed`, {
808
807
  category: isSystem ? "CRONJOB" : "DEVICE",
809
808
  source: isSystem ? "device-reset.cronjob" : "device-reset.manual",
810
809
  details: { error: errorMessage },
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.buildUserSearchConditions = exports.buildSearchConditions = exports.buildEventLogWhereClause = exports.formatEventLogs = exports.formatEventLog = exports.formatDeviceSession = void 0;
4
- // src/modules/event-logs/utils/eventLogs.utils.ts
5
4
  const sequelize_1 = require("sequelize");
6
5
  /**
7
6
  * Format device session for response
@@ -8,7 +8,6 @@ exports.isRankEqual = isRankEqual;
8
8
  exports.isSubordinateOrEqual = isSubordinateOrEqual;
9
9
  exports.isSuperiorOrEqual = isSuperiorOrEqual;
10
10
  exports.validateHierarchy = validateHierarchy;
11
- // src/utils/hierarchy.utils.ts
12
11
  const vr_models_1 = require("vr-models");
13
12
  /**
14
13
  * Get user's security clearance level
@@ -93,7 +92,6 @@ function validateHierarchy(adminLevel, targetLevel, action, allowEqual = false)
93
92
  }
94
93
  return { allowed: false, message: `Cannot ${action} this user` };
95
94
  }
96
- // src/utils/hierarchical.util.ts
97
95
  /**
98
96
  * Filter users based on hierarchical permissions using security clearance levels
99
97
  * Pure function - no database calls
@@ -1,5 +1,5 @@
1
1
  import { Request } from "express";
2
- import { UploadResult } from "./types";
2
+ import { UploadResult } from "../shared/shared.types";
3
3
  export declare const cloudinaryUtil: {
4
4
  /**
5
5
  * Upload file buffer to Cloudinary
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.logDebug = exports.logInfo = exports.logWarning = exports.logError = exports.logSystem = void 0;
4
- // src/utils/systemLog.utils.ts
5
4
  const vr_models_1 = require("vr-models");
6
5
  const logSystem = async ({ level = "INFO", category = "SYSTEM", message, details = null, source = null, ipAddress = null, userAgent = null, timestamp, transaction, }) => {
7
6
  try {
@@ -1,18 +1,16 @@
1
- export { checkAccountDependencies, hasActiveDependencies, checkBanStatus, checkIsUserBannedOrSuspended, checkSuspensionStatus, } from "./account.utils";
2
- export { generateAdminToken, generatePassengerToken, generateRiderToken, verifyToken, JWTPayload, shouldRefreshToken, generateToken, getTokenTimeRemaining, formatTimeRemaining, } from "./authTokens.utils";
3
- export { logEvent } from "./eventLog.utils";
4
- export { sendSuccessResponse, sendErrorResponse } from "./response.utils";
5
- export { formatUserProfile, formatUserListResponse, hasRole, hasPermission, hasAnyPermission, hasAllPermissions, canModifyAccount, isAccountAccessible, getUserById, getUsersByRole, findSecurityClearanceByRole, generateUserSearchConditions, generateEventSearchConditions, getSortOrder, generateJacketId, validateUniqueFields, validatePassword, hashPassword, softDeleteUser, } from "./profiles.utils";
6
- export { canModerate, canModerateUser, getModeratableRoles, hasHigherAuthority, } from "./moderation.utils";
7
- export { banUtil } from "./bans.utils";
8
- export { suspensionUtil } from "./suspension.utils";
9
- export { createDeviceSession } from "./session.utils";
10
- export { generateOTP, getOTPExpiry, getVerificationMethod, sendEmail, sendSMS, sendVerificationCode, detectContactType, validateContactValue, } from "./verification.utils";
11
- export { getUserLevel, isRankEqual, isSubordinate, isSubordinateOrEqual, isSuperior, isSuperiorOrEqual, validateHierarchy, hierarchicalView, } from "./hierarchy.utils";
12
- export { stockUtil } from "./admin.device.utils";
13
- export { cloudinaryUtil } from "./product.utils";
14
- export { DPP_OperationsUtil } from "./admin.devicePayment.utils";
15
- export { PendingRegistration, VerificationMethod, ConfirmResponse, UploadResult, StockChangeResult, } from "./types";
16
- export { formatDeviceSession, formatEventLog, formatEventLogs, buildEventLogWhereClause, buildSearchConditions, buildUserSearchConditions, } from "./eventlogs.admin.utils";
17
- export { extractDedicatedUserFromSerial } from "./deviceUtils";
18
- export { logDebug, logError, logInfo, logSystem, logWarning, } from "./systemLog.utils";
1
+ export { checkAccountDependencies, hasActiveDependencies, checkBanStatus, checkIsUserBannedOrSuspended, checkSuspensionStatus, } from "./shared/shared.accounts.utils";
2
+ export { generateAdminToken, generatePassengerToken, generateRiderToken, verifyToken, JWTPayload, shouldRefreshToken, generateToken, getTokenTimeRemaining, formatTimeRemaining, } from "./shared/shared.authTokens.utils";
3
+ export { logEvent } from "./shared/shared.eventLogs.utils";
4
+ export { sendSuccessResponse, sendErrorResponse } from "./shared/shared.responses.utils";
5
+ export { formatUserProfile, formatUserListResponse, hasRole, hasPermission, hasAnyPermission, hasAllPermissions, canModifyAccount, isAccountAccessible, getUserById, getUsersByRole, findSecurityClearanceByRole, generateUserSearchConditions, generateEventSearchConditions, getSortOrder, generateJacketId, validateUniqueFields, validatePassword, hashPassword, softDeleteUser, } from "./shared/shared.profiles.utils";
6
+ export { canModerate, canModerateUser, getModeratableRoles, hasHigherAuthority, } from "./admin/admin.moderation.utils";
7
+ export { banUtil } from "./admin/admin.bans.utils";
8
+ export { suspensionUtil } from "./admin/admin.suspensions.utils";
9
+ export { getUserLevel, isRankEqual, isSubordinate, isSubordinateOrEqual, isSuperior, isSuperiorOrEqual, validateHierarchy, hierarchicalView, } from "./admin/admin.hierarchy.utils";
10
+ export { stockUtil } from "./admin/admin.devices.utils";
11
+ export { cloudinaryUtil } from "./admin/admin.products.utils";
12
+ export { DPP_OperationsUtil } from "./admin/admin.devicePayments.utils";
13
+ export { formatDeviceSession, formatEventLog, formatEventLogs, buildEventLogWhereClause, buildSearchConditions, buildUserSearchConditions, } from "./admin/admin.eventLogs.utils";
14
+ export { logDebug, logError, logInfo, logSystem, logWarning, } from "./admin/admin.systemLogs.utils";
15
+ export { generateOTP, getOTPExpiry, getVerificationMethod, sendEmail, sendSMS, sendVerificationCode, detectContactType, validateContactValue, } from "./users/users.verification.utils";
16
+ export { PendingRegistration, VerificationMethod, ConfirmResponse, UploadResult, StockChangeResult, DeviceResetResult, DeviceResetOptions, } from "./shared/shared.types";