vr-commons 1.0.49 → 1.0.50
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.
package/dist/utils/index.d.ts
CHANGED
|
@@ -6,3 +6,4 @@ export { formatUserProfile, formatUserListResponse, hasRole, hasPermission, hasA
|
|
|
6
6
|
export { canModerate, canModerateUser, getModeratableRoles, hasHigherAuthority, } from "./moderation.utils";
|
|
7
7
|
export { banUtil } from "./bans.utils";
|
|
8
8
|
export { suspensionUtil } from "./suspension.utils";
|
|
9
|
+
export { createSession, getTokenTimeRemaining, shouldRefreshToken, } from "./session.utils";
|
package/dist/utils/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.suspensionUtil = exports.banUtil = exports.hasHigherAuthority = exports.getModeratableRoles = exports.canModerateUser = exports.canModerate = 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;
|
|
3
|
+
exports.shouldRefreshToken = exports.getTokenTimeRemaining = exports.createSession = exports.suspensionUtil = exports.banUtil = exports.hasHigherAuthority = exports.getModeratableRoles = exports.canModerateUser = exports.canModerate = 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; } });
|
|
@@ -53,3 +53,7 @@ var bans_utils_1 = require("./bans.utils");
|
|
|
53
53
|
Object.defineProperty(exports, "banUtil", { enumerable: true, get: function () { return bans_utils_1.banUtil; } });
|
|
54
54
|
var suspension_utils_1 = require("./suspension.utils");
|
|
55
55
|
Object.defineProperty(exports, "suspensionUtil", { enumerable: true, get: function () { return suspension_utils_1.suspensionUtil; } });
|
|
56
|
+
var session_utils_1 = require("./session.utils");
|
|
57
|
+
Object.defineProperty(exports, "createSession", { enumerable: true, get: function () { return session_utils_1.createSession; } });
|
|
58
|
+
Object.defineProperty(exports, "getTokenTimeRemaining", { enumerable: true, get: function () { return session_utils_1.getTokenTimeRemaining; } });
|
|
59
|
+
Object.defineProperty(exports, "shouldRefreshToken", { enumerable: true, get: function () { return session_utils_1.shouldRefreshToken; } });
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { SessionPayload } from "vr-models";
|
|
2
|
+
/**
|
|
3
|
+
* Create a new session
|
|
4
|
+
*/
|
|
5
|
+
export declare const createSession: (userId: string, tokenVersion: number) => SessionPayload;
|
|
6
|
+
/**
|
|
7
|
+
* Check if token needs refresh (within 5 minutes of expiry)
|
|
8
|
+
*/
|
|
9
|
+
export declare const shouldRefreshToken: (token: string) => boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Get time remaining on token in seconds
|
|
12
|
+
*/
|
|
13
|
+
export declare const getTokenTimeRemaining: (token: string) => number | null;
|
|
14
|
+
/**
|
|
15
|
+
* Format time remaining in a human-readable format
|
|
16
|
+
*/
|
|
17
|
+
export declare const formatTimeRemaining: (seconds: number) => string;
|
|
@@ -0,0 +1,68 @@
|
|
|
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.formatTimeRemaining = exports.getTokenTimeRemaining = exports.shouldRefreshToken = exports.createSession = void 0;
|
|
7
|
+
const uuid_1 = require("uuid");
|
|
8
|
+
const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
|
|
9
|
+
const SESSION_DURATION = parseInt(process.env.SESSION_DURATION || "15") * 60 * 1000; // Convert minutes to milliseconds
|
|
10
|
+
/**
|
|
11
|
+
* Create a new session
|
|
12
|
+
*/
|
|
13
|
+
const createSession = (userId, tokenVersion) => {
|
|
14
|
+
const now = Date.now();
|
|
15
|
+
return {
|
|
16
|
+
sessionId: (0, uuid_1.v4)(),
|
|
17
|
+
startedAt: now,
|
|
18
|
+
expiresAt: now + SESSION_DURATION,
|
|
19
|
+
userId,
|
|
20
|
+
tokenVersion,
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
exports.createSession = createSession;
|
|
24
|
+
/**
|
|
25
|
+
* Check if token needs refresh (within 5 minutes of expiry)
|
|
26
|
+
*/
|
|
27
|
+
const shouldRefreshToken = (token) => {
|
|
28
|
+
try {
|
|
29
|
+
const decoded = jsonwebtoken_1.default.decode(token);
|
|
30
|
+
if (!decoded || !decoded.exp)
|
|
31
|
+
return false;
|
|
32
|
+
const now = Math.floor(Date.now() / 1000);
|
|
33
|
+
const timeUntilExpiry = decoded.exp - now;
|
|
34
|
+
const refreshThreshold = 300; // 5 minutes in seconds
|
|
35
|
+
return timeUntilExpiry < refreshThreshold && timeUntilExpiry > 0;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
exports.shouldRefreshToken = shouldRefreshToken;
|
|
42
|
+
/**
|
|
43
|
+
* Get time remaining on token in seconds
|
|
44
|
+
*/
|
|
45
|
+
const getTokenTimeRemaining = (token) => {
|
|
46
|
+
try {
|
|
47
|
+
const decoded = jsonwebtoken_1.default.decode(token);
|
|
48
|
+
if (!decoded || !decoded.exp)
|
|
49
|
+
return null;
|
|
50
|
+
const now = Math.floor(Date.now() / 1000);
|
|
51
|
+
return Math.max(0, decoded.exp - now);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
exports.getTokenTimeRemaining = getTokenTimeRemaining;
|
|
58
|
+
/**
|
|
59
|
+
* Format time remaining in a human-readable format
|
|
60
|
+
*/
|
|
61
|
+
const formatTimeRemaining = (seconds) => {
|
|
62
|
+
if (seconds < 60)
|
|
63
|
+
return `${seconds} seconds`;
|
|
64
|
+
if (seconds < 3600)
|
|
65
|
+
return `${Math.floor(seconds / 60)} minutes ${seconds % 60} seconds`;
|
|
66
|
+
return `${Math.floor(seconds / 3600)} hours ${Math.floor((seconds % 3600) / 60)} minutes`;
|
|
67
|
+
};
|
|
68
|
+
exports.formatTimeRemaining = formatTimeRemaining;
|