vr-commons 1.0.19 → 1.0.21
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 +1 -1
- package/dist/index.d.ts +0 -4
- package/dist/index.js +0 -23
- package/dist/middlewares/auth.middlewares.d.ts +0 -3
- package/dist/middlewares/auth.middlewares.js +0 -57
- package/dist/middlewares/index.d.ts +0 -1
- package/dist/middlewares/index.js +0 -5
- package/dist/utils/account.utils.d.ts +0 -9
- package/dist/utils/account.utils.js +0 -46
- package/dist/utils/authTokens.utils.d.ts +0 -11
- package/dist/utils/authTokens.utils.js +0 -32
- package/dist/utils/eventLog.utils.d.ts +0 -13
- package/dist/utils/eventLog.utils.js +0 -22
- package/dist/utils/index.d.ts +0 -4
- package/dist/utils/index.js +0 -16
- package/dist/utils/response.utils.d.ts +0 -3
- package/dist/utils/response.utils.js +0 -22
- package/dist/validations/auth.validations.d.ts +0 -32
- package/dist/validations/auth.validations.js +0 -17
- package/dist/validations/index.d.ts +0 -2
- package/dist/validations/index.js +0 -7
- package/dist/validations/validate.validations.d.ts +0 -13
- package/dist/validations/validate.validations.js +0 -38
package/package.json
CHANGED
package/dist/index.d.ts
DELETED
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;
|
package/dist/utils/index.d.ts
DELETED
|
@@ -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";
|
package/dist/utils/index.js
DELETED
|
@@ -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,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,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;
|