vr-commons 1.0.19 → 1.0.20

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vr-commons",
3
- "version": "1.0.19",
3
+ "version": "1.0.20",
4
4
  "description": "Shared functions package",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -16,7 +16,7 @@
16
16
  },
17
17
  "scripts": {
18
18
  "clean": "rimraf dist",
19
- "build": "tsc",
19
+ "build": "npm run clean && tsc",
20
20
  "pub:prepare": "npm run build && git add . && git commit -m \"Release preparation\" || true",
21
21
  "pub": "npm run pub:prepare && npm version patch && npm publish && git push --follow-tags"
22
22
  },
package/dist/index.d.ts DELETED
@@ -1,4 +0,0 @@
1
- export * from "./middlewares";
2
- export * from "./validations";
3
- export * from "./utils";
4
- export { validate } from "./validations/validate.validations";
package/dist/index.js DELETED
@@ -1,23 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.validate = void 0;
18
- // Core Functionality
19
- __exportStar(require("./middlewares"), exports);
20
- __exportStar(require("./validations"), exports);
21
- __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; } });
@@ -1,3 +0,0 @@
1
- import { Request, Response, NextFunction } from "express";
2
- import { UserRole } from "vr-models";
3
- export declare const checkUserAuthentication: (allowedRoles: UserRole[]) => (req: Request, res: Response, next: NextFunction) => Promise<Response<any, Record<string, any>> | undefined>;
@@ -1,57 +0,0 @@
1
- "use strict";
2
- // src/middlewares/auth/checkUserAuthentication.middleware.ts
3
- var __importDefault = (this && this.__importDefault) || function (mod) {
4
- return (mod && mod.__esModule) ? mod : { "default": mod };
5
- };
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.checkUserAuthentication = void 0;
8
- const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
9
- const vr_models_1 = require("vr-models");
10
- const checkUserAuthentication = (allowedRoles) => async (req, res, next) => {
11
- try {
12
- const authHeader = req.headers.authorization;
13
- if (!authHeader || !authHeader.startsWith("Bearer ")) {
14
- return res.status(401).json({ message: "Missing or invalid token" });
15
- }
16
- const token = authHeader.split(" ")[1];
17
- let payload;
18
- try {
19
- payload = jsonwebtoken_1.default.verify(token, process.env.JWT_SECRET);
20
- }
21
- catch {
22
- return res.status(401).json({ message: "Token expired or invalid" });
23
- }
24
- const user = await vr_models_1.User.findOne({
25
- where: { id: payload.userId },
26
- include: [
27
- {
28
- model: vr_models_1.SecurityClearance,
29
- as: "securityClearance"
30
- }
31
- ]
32
- });
33
- if (!user || !user.securityClearance) {
34
- return res.status(401).json({ message: "User not found" });
35
- }
36
- // 🔐 Token versioning (logout all devices)
37
- if (user.tokenVersion !== payload.tokenVersion) {
38
- return res.status(401).json({ message: "Session expired" });
39
- }
40
- // 🧱 Role enforcement
41
- if (!allowedRoles.includes(user.securityClearance.role)) {
42
- return res.status(403).json({ message: "Access denied" });
43
- }
44
- // ✅ Extend req
45
- req.userId = user.id;
46
- req.firstName = user.firstName;
47
- req.lastName = user.lastName;
48
- req.scRole = user.securityClearance.role;
49
- req.scLevel = user.securityClearance.level;
50
- req.tokenVersion = user.tokenVersion;
51
- next();
52
- }
53
- catch (error) {
54
- next(error);
55
- }
56
- };
57
- exports.checkUserAuthentication = checkUserAuthentication;
@@ -1 +0,0 @@
1
- export { checkUserAuthentication } from "./auth.middlewares";
@@ -1,5 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.checkUserAuthentication = void 0;
4
- var auth_middlewares_1 = require("./auth.middlewares");
5
- Object.defineProperty(exports, "checkUserAuthentication", { enumerable: true, get: function () { return auth_middlewares_1.checkUserAuthentication; } });
@@ -1,9 +0,0 @@
1
- import { Transaction } from "sequelize";
2
- export declare const checkAccountDependencies: (userId: string, transaction?: any) => Promise<{
3
- hasDependencies: boolean;
4
- activeDevicePlans: number;
5
- pendingPayments: number;
6
- activeSubscriptions: number;
7
- messages: string[];
8
- }>;
9
- export declare const hasActiveDependencies: (userId: string, transaction?: Transaction) => Promise<boolean>;
@@ -1,46 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.hasActiveDependencies = exports.checkAccountDependencies = void 0;
4
- const vr_models_1 = require("vr-models");
5
- // Import other models as needed
6
- const checkAccountDependencies = async (userId, transaction) => {
7
- const messages = [];
8
- // 1. Check for active device payment plans
9
- const activeDevicePlans = await vr_models_1.DevicePaymentPlan.count({
10
- where: {
11
- userId,
12
- status: "ACTIVE", // Adjust based on your status enum
13
- },
14
- transaction,
15
- });
16
- if (activeDevicePlans > 0) {
17
- messages.push(`You have ${activeDevicePlans} active device payment plan(s)`);
18
- }
19
- // 2. Check for pending payments
20
- const pendingPayments = await vr_models_1.Transaction.count({
21
- where: {
22
- userId,
23
- status: "PENDING", // Adjust based on your status enum
24
- },
25
- transaction,
26
- });
27
- if (pendingPayments > 0) {
28
- messages.push(`You have ${pendingPayments} pending payment(s)`);
29
- }
30
- // 3. Add more checks as needed (subscriptions, etc.)
31
- const hasDependencies = activeDevicePlans > 0 || pendingPayments > 0;
32
- return {
33
- hasDependencies,
34
- activeDevicePlans,
35
- pendingPayments,
36
- activeSubscriptions: 0, // Implement if needed
37
- messages,
38
- };
39
- };
40
- exports.checkAccountDependencies = checkAccountDependencies;
41
- // Then update the hasActiveDependencies function in passengerUser.utils.ts:
42
- const hasActiveDependencies = async (userId, transaction) => {
43
- const result = await (0, exports.checkAccountDependencies)(userId, transaction);
44
- return result.hasDependencies;
45
- };
46
- exports.hasActiveDependencies = hasActiveDependencies;
@@ -1,11 +0,0 @@
1
- import { UserRole } from "vr-models";
2
- export interface JWTPayload {
3
- userId: string;
4
- role: UserRole;
5
- level: number;
6
- tokenVersion: number;
7
- }
8
- export declare const generateAdminToken: (userId: string, role: UserRole, level: number, tokenVersion: number, expiresIn: number) => string;
9
- export declare const generatePassengerToken: (userId: string, role: UserRole, level: number, tokenVersion: number, expiresIn: number) => string;
10
- export declare const generateRiderToken: (userId: string, role: UserRole, level: number, tokenVersion: number, expiresIn: number) => string;
11
- export declare const verifyToken: (token: string) => Promise<JWTPayload>;
@@ -1,32 +0,0 @@
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.verifyToken = exports.generateRiderToken = exports.generatePassengerToken = exports.generateAdminToken = void 0;
7
- const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
8
- const generateAdminToken = (userId, role, level, tokenVersion, expiresIn) => {
9
- const payload = { userId, role, level, tokenVersion };
10
- return jsonwebtoken_1.default.sign(payload, process.env.JWT_SECRET, {
11
- expiresIn: expiresIn || Number(process.env.ADMIN_TOKEN_LIFE_SPAN)
12
- });
13
- };
14
- exports.generateAdminToken = generateAdminToken;
15
- const generatePassengerToken = (userId, role, level, tokenVersion, expiresIn) => {
16
- const payload = { userId, role, level, tokenVersion };
17
- return jsonwebtoken_1.default.sign(payload, process.env.JWT_SECRET, {
18
- expiresIn: expiresIn || Number(process.env.PASSENGER_TOKEN_LIFE_SPAN)
19
- });
20
- };
21
- exports.generatePassengerToken = generatePassengerToken;
22
- const generateRiderToken = (userId, role, level, tokenVersion, expiresIn) => {
23
- const payload = { userId, role, level, tokenVersion };
24
- return jsonwebtoken_1.default.sign(payload, process.env.JWT_SECRET, {
25
- expiresIn: expiresIn || Number(process.env.RIDER_TOKEN_LIFE_SPAN)
26
- });
27
- };
28
- exports.generateRiderToken = generateRiderToken;
29
- const verifyToken = async (token) => {
30
- return jsonwebtoken_1.default.verify(token, process.env.JWT_SECRET);
31
- };
32
- exports.verifyToken = verifyToken;
@@ -1,13 +0,0 @@
1
- import { EventAction, EventActorType } from "vr-models";
2
- interface LogEventInput {
3
- actorId?: string | null;
4
- actorType?: EventActorType;
5
- action: EventAction;
6
- entity: string;
7
- entityId?: string | null;
8
- metadata?: Record<string, any>;
9
- ipAddress?: string | null;
10
- userAgent?: string | null;
11
- }
12
- export declare const logEvent: ({ actorId, actorType, action, entity, entityId, metadata, ipAddress, userAgent }: LogEventInput) => Promise<void>;
13
- export {};
@@ -1,22 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.logEvent = void 0;
4
- const vr_models_1 = require("vr-models");
5
- const logEvent = async ({ actorId = null, actorType = "SYSTEM", action, entity, entityId = null, metadata = {}, ipAddress = null, userAgent = null }) => {
6
- try {
7
- await vr_models_1.EventLog.create({
8
- actorId,
9
- actorType,
10
- action,
11
- entity,
12
- entityId,
13
- metadata,
14
- ipAddress,
15
- userAgent
16
- });
17
- }
18
- catch (err) {
19
- console.log("Error Logging event ::::::", err);
20
- }
21
- };
22
- exports.logEvent = logEvent;
@@ -1,4 +0,0 @@
1
- export { checkAccountDependencies, hasActiveDependencies, } from "./account.utils";
2
- export { generateAdminToken, generatePassengerToken, generateRiderToken, verifyToken, } from "./authTokens.utils";
3
- export { logEvent } from "./eventLog.utils";
4
- export { sendSuccessResponse, sendErrorResponse } from "./response.utils";
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.sendErrorResponse = exports.sendSuccessResponse = exports.logEvent = exports.verifyToken = exports.generateRiderToken = exports.generatePassengerToken = exports.generateAdminToken = exports.hasActiveDependencies = exports.checkAccountDependencies = void 0;
4
- var account_utils_1 = require("./account.utils");
5
- Object.defineProperty(exports, "checkAccountDependencies", { enumerable: true, get: function () { return account_utils_1.checkAccountDependencies; } });
6
- Object.defineProperty(exports, "hasActiveDependencies", { enumerable: true, get: function () { return account_utils_1.hasActiveDependencies; } });
7
- var authTokens_utils_1 = require("./authTokens.utils");
8
- Object.defineProperty(exports, "generateAdminToken", { enumerable: true, get: function () { return authTokens_utils_1.generateAdminToken; } });
9
- Object.defineProperty(exports, "generatePassengerToken", { enumerable: true, get: function () { return authTokens_utils_1.generatePassengerToken; } });
10
- Object.defineProperty(exports, "generateRiderToken", { enumerable: true, get: function () { return authTokens_utils_1.generateRiderToken; } });
11
- Object.defineProperty(exports, "verifyToken", { enumerable: true, get: function () { return authTokens_utils_1.verifyToken; } });
12
- var eventLog_utils_1 = require("./eventLog.utils");
13
- Object.defineProperty(exports, "logEvent", { enumerable: true, get: function () { return eventLog_utils_1.logEvent; } });
14
- var response_utils_1 = require("./response.utils");
15
- Object.defineProperty(exports, "sendSuccessResponse", { enumerable: true, get: function () { return response_utils_1.sendSuccessResponse; } });
16
- Object.defineProperty(exports, "sendErrorResponse", { enumerable: true, get: function () { return response_utils_1.sendErrorResponse; } });
@@ -1,3 +0,0 @@
1
- import { Response } from "express";
2
- export declare const sendSuccessResponse: (res: Response, message: string, data?: any, statusCode?: number) => void;
3
- export declare const sendErrorResponse: (res: Response, message: string, statusCode?: number, error?: any) => void;
@@ -1,22 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.sendErrorResponse = exports.sendSuccessResponse = void 0;
4
- // Success response
5
- const sendSuccessResponse = (res, message, data = null, statusCode = 200) => {
6
- res.status(statusCode).json({
7
- success: true,
8
- message,
9
- data
10
- });
11
- };
12
- exports.sendSuccessResponse = sendSuccessResponse;
13
- // Error response
14
- const sendErrorResponse = (res, message, statusCode = 400, error = null) => {
15
- console.error("Error sent to client::::::", error);
16
- res.status(statusCode).json({
17
- success: false,
18
- message,
19
- error: error?.message || error
20
- });
21
- };
22
- exports.sendErrorResponse = sendErrorResponse;
@@ -1,32 +0,0 @@
1
- import { z } from "zod";
2
- export declare const userLoginSchema: z.ZodObject<{
3
- body: z.ZodObject<{
4
- phoneNumber: z.ZodString;
5
- nationalId: z.ZodString;
6
- }, "strip", z.ZodTypeAny, {
7
- phoneNumber: string;
8
- nationalId: string;
9
- }, {
10
- phoneNumber: string;
11
- nationalId: string;
12
- }>;
13
- query: z.ZodOptional<z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>>;
14
- params: z.ZodOptional<z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>>;
15
- headers: z.ZodOptional<z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>>;
16
- }, "strip", z.ZodTypeAny, {
17
- body: {
18
- phoneNumber: string;
19
- nationalId: string;
20
- };
21
- query?: {} | undefined;
22
- params?: {} | undefined;
23
- headers?: {} | undefined;
24
- }, {
25
- body: {
26
- phoneNumber: string;
27
- nationalId: string;
28
- };
29
- query?: {} | undefined;
30
- params?: {} | undefined;
31
- headers?: {} | undefined;
32
- }>;
@@ -1,17 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.userLoginSchema = void 0;
4
- const zod_1 = require("zod");
5
- exports.userLoginSchema = zod_1.z.object({
6
- body: zod_1.z.object({
7
- phoneNumber: zod_1.z
8
- .string()
9
- .trim()
10
- .min(10, "Phone number must be at least 10 digits")
11
- .max(15, "Phone number must be at most 15 digits"),
12
- nationalId: zod_1.z.string().min(16, "National ID must be atleast 16 digits")
13
- }),
14
- query: zod_1.z.object({}).optional(),
15
- params: zod_1.z.object({}).optional(),
16
- headers: zod_1.z.object({}).optional()
17
- });
@@ -1,2 +0,0 @@
1
- export { validate } from "./validate.validations";
2
- export { userLoginSchema } from "./auth.validations";
@@ -1,7 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.userLoginSchema = exports.validate = void 0;
4
- var validate_validations_1 = require("./validate.validations");
5
- Object.defineProperty(exports, "validate", { enumerable: true, get: function () { return validate_validations_1.validate; } });
6
- var auth_validations_1 = require("./auth.validations");
7
- Object.defineProperty(exports, "userLoginSchema", { enumerable: true, get: function () { return auth_validations_1.userLoginSchema; } });
@@ -1,13 +0,0 @@
1
- import { Request, Response, NextFunction } from "express";
2
- import { AnyZodObject } from "zod";
3
- declare global {
4
- namespace Express {
5
- interface Request {
6
- validatedQuery?: any;
7
- validatedParams?: any;
8
- validatedBody?: any;
9
- validatedHeaders?: any;
10
- }
11
- }
12
- }
13
- export declare const validate: (schema: AnyZodObject) => (req: Request, res: Response, next: NextFunction) => Promise<void>;
@@ -1,38 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.validate = void 0;
4
- const zod_1 = require("zod");
5
- const validate = (schema) => async (req, res, next) => {
6
- try {
7
- // Validate all parts of the request against the schema
8
- const result = await schema.parseAsync({
9
- body: req.body,
10
- query: req.query,
11
- params: req.params,
12
- headers: req.headers // Add headers to validation
13
- });
14
- // Store validated values in custom properties
15
- req.validatedBody = result.body;
16
- req.validatedQuery = result.query;
17
- req.validatedParams = result.params;
18
- req.validatedHeaders = result.headers;
19
- // Only replace body (other parts should remain read-only)
20
- req.body = result.body || req.body;
21
- return next();
22
- }
23
- catch (error) {
24
- console.error(" validate middleware function Error::::::", error);
25
- if (error instanceof zod_1.ZodError) {
26
- res.status(400).json({
27
- status: "fail",
28
- errors: error.errors.map((err) => ({
29
- path: err.path.join("."),
30
- message: err.message
31
- }))
32
- });
33
- return;
34
- }
35
- next(error);
36
- }
37
- };
38
- exports.validate = validate;