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.
@@ -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";
@@ -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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vr-commons",
3
- "version": "1.0.49",
3
+ "version": "1.0.50",
4
4
  "description": "Shared functions package",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",