vr-commons 1.0.44 → 1.0.45

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.
@@ -0,0 +1,4 @@
1
+ import { Request, Response, NextFunction } from "express";
2
+ export declare function checkIsUserBanned(req: Request, res: Response, next: NextFunction): Promise<void>;
3
+ export declare function checkIsUserSuspended(req: Request, res: Response, next: NextFunction): Promise<void>;
4
+ export declare function checkUserAccountStatus(req: Request, res: Response, next: NextFunction): Promise<void>;
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.checkIsUserBanned = checkIsUserBanned;
4
+ exports.checkIsUserSuspended = checkIsUserSuspended;
5
+ exports.checkUserAccountStatus = checkUserAccountStatus;
6
+ const account_utils_1 = require("../utils/account.utils");
7
+ const response_utils_1 = require("../utils/response.utils");
8
+ // Check if user is banned
9
+ async function checkIsUserBanned(req, res, next) {
10
+ try {
11
+ const userId = req.userId;
12
+ if (!userId) {
13
+ return next();
14
+ }
15
+ const { isBanned, banDetails } = await (0, account_utils_1.checkBanStatus)(userId);
16
+ if (isBanned && banDetails && !banDetails.revokedAt) {
17
+ const message = banDetails.isPermanent
18
+ ? "Your account has been permanently banned"
19
+ : `Your account was banned at: ${banDetails.bannedAt.toISOString()}`;
20
+ return (0, response_utils_1.sendErrorResponse)(res, message, 403, banDetails);
21
+ }
22
+ next();
23
+ }
24
+ catch (error) {
25
+ next(error);
26
+ }
27
+ }
28
+ // Check if user is suspended
29
+ async function checkIsUserSuspended(req, res, next) {
30
+ try {
31
+ const userId = req.userId;
32
+ if (!userId) {
33
+ return next();
34
+ }
35
+ const { isSuspended, suspensionDetails } = await (0, account_utils_1.checkSuspensionStatus)(userId);
36
+ if (isSuspended && suspensionDetails) {
37
+ const daysRemaining = Math.ceil((new Date(suspensionDetails.endsAt).getTime() - new Date().getTime()) /
38
+ (1000 * 60 * 60 * 24));
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);
41
+ }
42
+ next();
43
+ }
44
+ catch (error) {
45
+ next(error);
46
+ }
47
+ }
48
+ // Combined check for both ban and suspension
49
+ async function checkUserAccountStatus(req, res, next) {
50
+ try {
51
+ const userId = req.userId;
52
+ if (!userId) {
53
+ return next();
54
+ }
55
+ const result = await (0, account_utils_1.checkIsUserBannedOrSuspended)(userId);
56
+ if (result.isRestricted) {
57
+ return (0, response_utils_1.sendErrorResponse)(res, result.message, 403, result.details);
58
+ }
59
+ next();
60
+ }
61
+ catch (error) {
62
+ next(error);
63
+ }
64
+ }
@@ -1,4 +1,21 @@
1
1
  import { Transaction } from "sequelize";
2
+ import { Ban, Suspension } from "vr-models";
3
+ export interface BanStatus {
4
+ isBanned: boolean;
5
+ banDetails?: Ban | null;
6
+ }
7
+ export interface SuspensionStatus {
8
+ isSuspended: boolean;
9
+ suspensionDetails?: Suspension | null;
10
+ }
11
+ export declare function checkBanStatus(userId: string): Promise<BanStatus>;
12
+ export declare function checkSuspensionStatus(userId: string): Promise<SuspensionStatus>;
13
+ export declare const checkIsUserBannedOrSuspended: (userId: string) => Promise<{
14
+ isRestricted: boolean;
15
+ status?: "banned" | "suspended";
16
+ message?: string;
17
+ details?: Ban | Suspension;
18
+ }>;
2
19
  export declare const checkAccountDependencies: (userId: string, transaction?: any) => Promise<{
3
20
  hasDependencies: boolean;
4
21
  activeDevicePlans: number;
@@ -1,8 +1,80 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.hasActiveDependencies = exports.checkAccountDependencies = void 0;
3
+ exports.hasActiveDependencies = exports.checkAccountDependencies = exports.checkIsUserBannedOrSuspended = void 0;
4
+ exports.checkBanStatus = checkBanStatus;
5
+ exports.checkSuspensionStatus = checkSuspensionStatus;
4
6
  const vr_models_1 = require("vr-models");
5
7
  // Import other models as needed
8
+ const sequelize_1 = require("sequelize");
9
+ const vr_models_2 = require("vr-models");
10
+ // Check if user is banned
11
+ async function checkBanStatus(userId) {
12
+ const where = {
13
+ userId,
14
+ revokedAt: { [sequelize_1.Op.is]: null },
15
+ };
16
+ const activeBan = await vr_models_2.Ban.findOne({
17
+ where,
18
+ order: [["bannedAt", "DESC"]],
19
+ });
20
+ return {
21
+ isBanned: !!activeBan,
22
+ banDetails: activeBan,
23
+ };
24
+ }
25
+ // Check if user is suspended
26
+ async function checkSuspensionStatus(userId) {
27
+ const where = {
28
+ userId,
29
+ isActive: true,
30
+ endsAt: { [sequelize_1.Op.gt]: new Date() },
31
+ revokedAt: { [sequelize_1.Op.is]: null },
32
+ };
33
+ const activeSuspension = await vr_models_2.Suspension.findOne({
34
+ where,
35
+ order: [["startedAt", "DESC"]],
36
+ });
37
+ return {
38
+ isSuspended: !!activeSuspension,
39
+ suspensionDetails: activeSuspension,
40
+ };
41
+ }
42
+ // Main function to check if user is banned/suspended
43
+ const checkIsUserBannedOrSuspended = async (userId) => {
44
+ try {
45
+ const [banStatus, suspensionStatus] = await Promise.all([
46
+ checkBanStatus(userId),
47
+ checkSuspensionStatus(userId),
48
+ ]);
49
+ if (banStatus.isBanned && banStatus.banDetails) {
50
+ return {
51
+ isRestricted: true,
52
+ status: "banned",
53
+ message: banStatus.banDetails.isPermanent
54
+ ? "Your account has been permanently banned"
55
+ : `Your account was banned at: ${banStatus.banDetails.bannedAt.toISOString()}`,
56
+ details: banStatus.banDetails,
57
+ };
58
+ }
59
+ if (suspensionStatus.isSuspended && suspensionStatus.suspensionDetails) {
60
+ const daysRemaining = Math.ceil((new Date(suspensionStatus.suspensionDetails.endsAt).getTime() -
61
+ new Date().getTime()) /
62
+ (1000 * 60 * 60 * 24));
63
+ return {
64
+ isRestricted: true,
65
+ status: "suspended",
66
+ message: `Your account is suspended for ${daysRemaining} more day(s) until ${suspensionStatus.suspensionDetails.endsAt.toISOString()}`,
67
+ details: suspensionStatus.suspensionDetails,
68
+ };
69
+ }
70
+ return { isRestricted: false };
71
+ }
72
+ catch (err) {
73
+ console.error("Error checking user status:", err);
74
+ throw err;
75
+ }
76
+ };
77
+ exports.checkIsUserBannedOrSuspended = checkIsUserBannedOrSuspended;
6
78
  const checkAccountDependencies = async (userId, transaction) => {
7
79
  const messages = [];
8
80
  // 1. Check for active device payment plans
@@ -1,4 +1,4 @@
1
- export { checkAccountDependencies, hasActiveDependencies, } from "./account.utils";
1
+ export { checkAccountDependencies, hasActiveDependencies, checkBanStatus, checkIsUserBannedOrSuspended, checkSuspensionStatus, } from "./account.utils";
2
2
  export { generateAdminToken, generatePassengerToken, generateRiderToken, verifyToken, } from "./authTokens.utils";
3
3
  export { logEvent } from "./eventLog.utils";
4
4
  export { sendSuccessResponse, sendErrorResponse } from "./response.utils";
@@ -1,9 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.softDeleteUser = exports.hashPassword = exports.validatePassword = exports.validateUniqueFields = exports.generateJacketId = exports.getSortOrder = exports.generateEventSearchConditions = exports.generateUserSearchConditions = exports.findSecurityClearanceByRole = exports.getUsersByRole = exports.getUserById = exports.isAccountAccessible = exports.canModifyAccount = exports.hasAllPermissions = exports.hasAnyPermission = exports.hasPermission = exports.hasRole = exports.formatUserListResponse = exports.formatUserProfile = exports.sendErrorResponse = exports.sendSuccessResponse = exports.logEvent = exports.verifyToken = exports.generateRiderToken = exports.generatePassengerToken = exports.generateAdminToken = exports.hasActiveDependencies = exports.checkAccountDependencies = void 0;
3
+ exports.softDeleteUser = exports.hashPassword = exports.validatePassword = exports.validateUniqueFields = exports.generateJacketId = exports.getSortOrder = exports.generateEventSearchConditions = exports.generateUserSearchConditions = exports.findSecurityClearanceByRole = exports.getUsersByRole = exports.getUserById = exports.isAccountAccessible = exports.canModifyAccount = exports.hasAllPermissions = exports.hasAnyPermission = exports.hasPermission = exports.hasRole = exports.formatUserListResponse = exports.formatUserProfile = exports.sendErrorResponse = exports.sendSuccessResponse = exports.logEvent = exports.verifyToken = exports.generateRiderToken = exports.generatePassengerToken = exports.generateAdminToken = exports.checkSuspensionStatus = exports.checkIsUserBannedOrSuspended = exports.checkBanStatus = exports.hasActiveDependencies = exports.checkAccountDependencies = void 0;
4
4
  var account_utils_1 = require("./account.utils");
5
5
  Object.defineProperty(exports, "checkAccountDependencies", { enumerable: true, get: function () { return account_utils_1.checkAccountDependencies; } });
6
6
  Object.defineProperty(exports, "hasActiveDependencies", { enumerable: true, get: function () { return account_utils_1.hasActiveDependencies; } });
7
+ Object.defineProperty(exports, "checkBanStatus", { enumerable: true, get: function () { return account_utils_1.checkBanStatus; } });
8
+ Object.defineProperty(exports, "checkIsUserBannedOrSuspended", { enumerable: true, get: function () { return account_utils_1.checkIsUserBannedOrSuspended; } });
9
+ Object.defineProperty(exports, "checkSuspensionStatus", { enumerable: true, get: function () { return account_utils_1.checkSuspensionStatus; } });
7
10
  var authTokens_utils_1 = require("./authTokens.utils");
8
11
  Object.defineProperty(exports, "generateAdminToken", { enumerable: true, get: function () { return authTokens_utils_1.generateAdminToken; } });
9
12
  Object.defineProperty(exports, "generatePassengerToken", { enumerable: true, get: function () { return authTokens_utils_1.generatePassengerToken; } });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vr-commons",
3
- "version": "1.0.44",
3
+ "version": "1.0.45",
4
4
  "description": "Shared functions package",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",