@codenokami/node-api-master 1.4.2 → 1.5.0
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/AppError-ByGDb4IL.d.mts +20 -0
- package/dist/AppError-ByGDb4IL.d.ts +20 -0
- package/dist/chunk-B3SAPWGT.mjs +1 -0
- package/dist/chunk-ZJQTZFDU.js +1 -0
- package/dist/index.d.mts +5 -179
- package/dist/index.d.ts +5 -179
- package/dist/index.js +1 -411
- package/dist/index.mjs +1 -368
- package/dist/socket.d.mts +55 -0
- package/dist/socket.d.ts +55 -0
- package/dist/socket.js +1 -0
- package/dist/socket.mjs +1 -0
- package/dist/validation.d.mts +101 -0
- package/dist/validation.d.ts +101 -0
- package/dist/validation.js +1 -0
- package/dist/validation.mjs +1 -0
- package/package.json +15 -15
package/dist/index.js
CHANGED
|
@@ -1,411 +1 @@
|
|
|
1
|
-
var
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
-
var __export = (target, all) => {
|
|
8
|
-
for (var name in all)
|
|
9
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
-
};
|
|
11
|
-
var __copyProps = (to, from, except, desc) => {
|
|
12
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
-
for (let key of __getOwnPropNames(from))
|
|
14
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
-
}
|
|
17
|
-
return to;
|
|
18
|
-
};
|
|
19
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
-
mod
|
|
26
|
-
));
|
|
27
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
-
|
|
29
|
-
// src/index.js
|
|
30
|
-
var index_exports = {};
|
|
31
|
-
__export(index_exports, {
|
|
32
|
-
AppError: () => AppError_default,
|
|
33
|
-
Joi: () => import_joi3.default,
|
|
34
|
-
STATUS_CODES: () => constants_default,
|
|
35
|
-
admin: () => admin,
|
|
36
|
-
apiResponse: () => response_default,
|
|
37
|
-
auth: () => auth,
|
|
38
|
-
catchAsync: () => catchAsync_default,
|
|
39
|
-
comparePassword: () => comparePassword,
|
|
40
|
-
connectDB: () => connection_default,
|
|
41
|
-
errorMiddleware: () => errorMiddleware_default,
|
|
42
|
-
generateToken: () => generateToken,
|
|
43
|
-
generateUUID: () => uuid_default,
|
|
44
|
-
hashPassword: () => hashPassword,
|
|
45
|
-
schemas: () => validations_default,
|
|
46
|
-
socket: () => socket_exports,
|
|
47
|
-
validate: () => validate_default
|
|
48
|
-
});
|
|
49
|
-
module.exports = __toCommonJS(index_exports);
|
|
50
|
-
var import_joi3 = __toESM(require("joi"));
|
|
51
|
-
|
|
52
|
-
// src/db/connection.js
|
|
53
|
-
var import_mongoose = __toESM(require("mongoose"));
|
|
54
|
-
var connectDB = async (url) => {
|
|
55
|
-
if (!url) {
|
|
56
|
-
console.error(
|
|
57
|
-
"\u274C Error: MongoDB URL is required to connect to the database."
|
|
58
|
-
);
|
|
59
|
-
process.exit(1);
|
|
60
|
-
}
|
|
61
|
-
try {
|
|
62
|
-
const conn = await import_mongoose.default.connect(url);
|
|
63
|
-
console.log(`\u2705 MongoDB Connected: ${conn.connection.host}`);
|
|
64
|
-
} catch (error) {
|
|
65
|
-
console.error(`\u274C Error: ${error.message}`);
|
|
66
|
-
process.exit(1);
|
|
67
|
-
}
|
|
68
|
-
};
|
|
69
|
-
var connection_default = connectDB;
|
|
70
|
-
|
|
71
|
-
// src/middleware/auth.js
|
|
72
|
-
var import_jsonwebtoken = __toESM(require("jsonwebtoken"));
|
|
73
|
-
|
|
74
|
-
// src/utils/AppError.js
|
|
75
|
-
var AppError = class extends Error {
|
|
76
|
-
constructor(message, statusCode) {
|
|
77
|
-
super(message);
|
|
78
|
-
this.statusCode = statusCode;
|
|
79
|
-
this.status = `${statusCode}`.startsWith("4") ? "fail" : "error";
|
|
80
|
-
this.isOperational = true;
|
|
81
|
-
Error.captureStackTrace(this, this.constructor);
|
|
82
|
-
}
|
|
83
|
-
};
|
|
84
|
-
var AppError_default = AppError;
|
|
85
|
-
|
|
86
|
-
// src/utils/catchAsync.js
|
|
87
|
-
var catchAsync = (fn) => {
|
|
88
|
-
return (req, res, next) => {
|
|
89
|
-
fn(req, res, next).catch(next);
|
|
90
|
-
};
|
|
91
|
-
};
|
|
92
|
-
var catchAsync_default = catchAsync;
|
|
93
|
-
|
|
94
|
-
// src/middleware/auth.js
|
|
95
|
-
var auth = (secret = process.env.JWT_SECRET) => catchAsync_default(async (req, res, next) => {
|
|
96
|
-
let token;
|
|
97
|
-
if (req.headers.authorization && req.headers.authorization.startsWith("Bearer")) {
|
|
98
|
-
token = req.headers.authorization.split(" ")[1];
|
|
99
|
-
} else if (req.cookies && req.cookies.jwt) {
|
|
100
|
-
token = req.cookies.jwt;
|
|
101
|
-
}
|
|
102
|
-
if (!secret) {
|
|
103
|
-
return next(
|
|
104
|
-
new AppError_default("JWT Secret is not defined in environment variables", 500)
|
|
105
|
-
);
|
|
106
|
-
}
|
|
107
|
-
if (!token) {
|
|
108
|
-
return next(
|
|
109
|
-
new AppError_default(
|
|
110
|
-
"You are not logged in! Please log in to get access.",
|
|
111
|
-
401
|
|
112
|
-
)
|
|
113
|
-
);
|
|
114
|
-
}
|
|
115
|
-
try {
|
|
116
|
-
const decoded = import_jsonwebtoken.default.verify(token, secret);
|
|
117
|
-
req.user = decoded;
|
|
118
|
-
next();
|
|
119
|
-
} catch (error) {
|
|
120
|
-
return next(
|
|
121
|
-
new AppError_default("Invalid token or expired. Please log in again.", 401)
|
|
122
|
-
);
|
|
123
|
-
}
|
|
124
|
-
});
|
|
125
|
-
var admin = (req, res, next) => {
|
|
126
|
-
if (req.user && req.user.role === "admin") {
|
|
127
|
-
next();
|
|
128
|
-
} else {
|
|
129
|
-
return next(
|
|
130
|
-
new AppError_default("You do not have permission to perform this action", 403)
|
|
131
|
-
);
|
|
132
|
-
}
|
|
133
|
-
};
|
|
134
|
-
|
|
135
|
-
// src/middleware/validate.js
|
|
136
|
-
var validate = (schema) => (req, res, next) => {
|
|
137
|
-
const { error, value } = schema.validate(req.body, {
|
|
138
|
-
abortEarly: false,
|
|
139
|
-
// Error အားလုံးကို တစ်ခါတည်း ပြရန်
|
|
140
|
-
allowUnknown: true,
|
|
141
|
-
// Schema ထဲမပါတဲ့ field တွေပါလာရင် လက်ခံရန်
|
|
142
|
-
stripUnknown: true
|
|
143
|
-
// Schema ထဲမပါတဲ့ field တွေကို ဖယ်ထုတ်ပစ်ရန်
|
|
144
|
-
});
|
|
145
|
-
if (error) {
|
|
146
|
-
const errorMessage = error.details.map((detail) => detail.message.replace(/"/g, "")).join(", ");
|
|
147
|
-
return next(new AppError_default(errorMessage, 400));
|
|
148
|
-
}
|
|
149
|
-
req.body = value;
|
|
150
|
-
next();
|
|
151
|
-
};
|
|
152
|
-
var validate_default = validate;
|
|
153
|
-
|
|
154
|
-
// src/utils/constants.js
|
|
155
|
-
var PORT = process.env.PORT || 5e3;
|
|
156
|
-
var STATUS_CODES = {
|
|
157
|
-
// --- 2xx Success ---
|
|
158
|
-
OK: 200,
|
|
159
|
-
// Request အောင်မြင်သည်
|
|
160
|
-
CREATED: 201,
|
|
161
|
-
// Data အသစ် တည်ဆောက်မှု အောင်မြင်သည်
|
|
162
|
-
ACCEPTED: 202,
|
|
163
|
-
// လက်ခံရရှိသည် (နောက်မှ အလုပ်လုပ်မည်)
|
|
164
|
-
NO_CONTENT: 204,
|
|
165
|
-
// အောင်မြင်သည်၊ သို့သော် ပြစရာ Data မရှိ (ဥပမာ- Delete လုပ်ပြီးချိန်)
|
|
166
|
-
// --- 3xx Redirection ---
|
|
167
|
-
MOVED_PERMANENTLY: 301,
|
|
168
|
-
FOUND: 302,
|
|
169
|
-
// --- 4xx Client Errors ---
|
|
170
|
-
BAD_REQUEST: 400,
|
|
171
|
-
// ပေးပို့လိုက်သော Data Format မှားနေသည် (Validation error)
|
|
172
|
-
UNAUTHORIZED: 401,
|
|
173
|
-
// Login ဝင်ရန် လိုအပ်သည် (သို့မဟုတ် Token မှားသည်)
|
|
174
|
-
FORBIDDEN: 403,
|
|
175
|
-
// လုပ်ပိုင်ခွင့်မရှိ (ဥပမာ- Admin မဟုတ်ဘဲ Admin panel ဝင်ခြင်း)
|
|
176
|
-
NOT_FOUND: 404,
|
|
177
|
-
// ရှာဖွေနေသော Resource မရှိပါ
|
|
178
|
-
METHOD_NOT_ALLOWED: 405,
|
|
179
|
-
// API Method (GET, POST, etc.) မှားနေသည်
|
|
180
|
-
CONFLICT: 409,
|
|
181
|
-
// Data ထပ်နေသည် (ဥပမာ- ရှိပြီးသား Email နဲ့ Register လုပ်ခြင်း)
|
|
182
|
-
UNPROCESSABLE_ENTITY: 422,
|
|
183
|
-
// Validation Error များအတွက် အသုံးများသည်
|
|
184
|
-
TOO_MANY_REQUESTS: 429,
|
|
185
|
-
// API ကို ခဏခဏ ဆက်တိုက်ခေါ်ခြင်း (Rate limiting)
|
|
186
|
-
// --- 5xx Server Errors ---
|
|
187
|
-
INTERNAL_SERVER_ERROR: 500,
|
|
188
|
-
// Server ထဲတွင် Code မှားယွင်းခြင်း
|
|
189
|
-
NOT_IMPLEMENTED: 501,
|
|
190
|
-
BAD_GATEWAY: 502,
|
|
191
|
-
SERVICE_UNAVAILABLE: 503,
|
|
192
|
-
// Server ခေတ္တပိတ်ထားသည်
|
|
193
|
-
GATEWAY_TIMEOUT: 504,
|
|
194
|
-
PORT
|
|
195
|
-
};
|
|
196
|
-
var constants_default = STATUS_CODES;
|
|
197
|
-
|
|
198
|
-
// src/middleware/errorMiddleware.js
|
|
199
|
-
var errorMiddleware = (err, req, res, next) => {
|
|
200
|
-
err.statusCode = err.statusCode || constants_default.INTERNAL_SERVER_ERROR;
|
|
201
|
-
err.status = err.status || "error";
|
|
202
|
-
if (process.env.NODE_ENV === "development") {
|
|
203
|
-
res.status(err.statusCode).json({
|
|
204
|
-
status: err.status,
|
|
205
|
-
error: err,
|
|
206
|
-
message: err.message,
|
|
207
|
-
stack: err.stack
|
|
208
|
-
});
|
|
209
|
-
} else {
|
|
210
|
-
if (err.isOperational) {
|
|
211
|
-
res.status(err.statusCode).json({
|
|
212
|
-
status: err.status,
|
|
213
|
-
message: err.message
|
|
214
|
-
});
|
|
215
|
-
} else {
|
|
216
|
-
console.error("ERROR \u{1F4A5}", err);
|
|
217
|
-
res.status(constants_default.INTERNAL_SERVER_ERROR).json({
|
|
218
|
-
status: "error",
|
|
219
|
-
message: "Something went very wrong!"
|
|
220
|
-
});
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
};
|
|
224
|
-
var errorMiddleware_default = errorMiddleware;
|
|
225
|
-
|
|
226
|
-
// src/utils/response.js
|
|
227
|
-
var apiResponse = {
|
|
228
|
-
// အောင်မြင်တဲ့ response ပေးပို့ရန်
|
|
229
|
-
success: (res, data, message = "Success", statusCode = constants_default.OK) => {
|
|
230
|
-
return res.status(statusCode).json({
|
|
231
|
-
status: "success",
|
|
232
|
-
message,
|
|
233
|
-
data
|
|
234
|
-
});
|
|
235
|
-
},
|
|
236
|
-
// Error response ပေးပို့ရန် (Operational error များအတွက်)
|
|
237
|
-
error: (res, message = "Internal Server Error", statusCode = constants_default.INTERNAL_SERVER_ERROR) => {
|
|
238
|
-
return res.status(statusCode).json({
|
|
239
|
-
status: "error",
|
|
240
|
-
message
|
|
241
|
-
});
|
|
242
|
-
}
|
|
243
|
-
};
|
|
244
|
-
var response_default = apiResponse;
|
|
245
|
-
|
|
246
|
-
// src/utils/authHelper.js
|
|
247
|
-
var import_bcryptjs = __toESM(require("bcryptjs"));
|
|
248
|
-
var import_jsonwebtoken2 = __toESM(require("jsonwebtoken"));
|
|
249
|
-
var hashPassword = async (password) => {
|
|
250
|
-
const salt = await import_bcryptjs.default.genSalt(10);
|
|
251
|
-
return await import_bcryptjs.default.hash(password, salt);
|
|
252
|
-
};
|
|
253
|
-
var comparePassword = async (password, hashedPassword) => {
|
|
254
|
-
return await import_bcryptjs.default.compare(password, hashedPassword);
|
|
255
|
-
};
|
|
256
|
-
var generateToken = (payload, res, options = {}) => {
|
|
257
|
-
const secret = options.secret || process.env.JWT_SECRET;
|
|
258
|
-
const expiresIn = options.expiresIn || "30d";
|
|
259
|
-
const cookieName = options.cookieName || "jwt";
|
|
260
|
-
const token = import_jsonwebtoken2.default.sign(payload, secret, {
|
|
261
|
-
expiresIn
|
|
262
|
-
});
|
|
263
|
-
const cookieOptions = {
|
|
264
|
-
maxAge: options.maxAge || 30 * 24 * 60 * 60 * 1e3,
|
|
265
|
-
// Default 30 days
|
|
266
|
-
httpOnly: true,
|
|
267
|
-
// JavaScript မှ ဖတ်မရအောင် (Prevent XSS)
|
|
268
|
-
sameSite: process.env.NODE_ENV === "production" ? "none" : "lax",
|
|
269
|
-
// CSRF Protection
|
|
270
|
-
secure: process.env.NODE_ENV === "production",
|
|
271
|
-
// Production တွင် HTTPS သုံးမှသာ အလုပ်လုပ်မည်
|
|
272
|
-
...options.extraCookieOptions
|
|
273
|
-
// တခြား အပို options များရှိလျှင် ထည့်ရန်
|
|
274
|
-
};
|
|
275
|
-
res.cookie(cookieName, token, cookieOptions);
|
|
276
|
-
return token;
|
|
277
|
-
};
|
|
278
|
-
|
|
279
|
-
// src/utils/uuid.js
|
|
280
|
-
var import_crypto = __toESM(require("crypto"));
|
|
281
|
-
var generateUUID = () => {
|
|
282
|
-
if (typeof import_crypto.default.randomUUID === "function") {
|
|
283
|
-
return import_crypto.default.randomUUID();
|
|
284
|
-
}
|
|
285
|
-
return ("10000000-1000-4000-8000" + -1e11).replace(
|
|
286
|
-
/[018]/g,
|
|
287
|
-
(c) => (c ^ import_crypto.default.randomBytes(1).readUInt8() & 15 >> c / 4).toString(16)
|
|
288
|
-
);
|
|
289
|
-
};
|
|
290
|
-
var uuid_default = generateUUID;
|
|
291
|
-
|
|
292
|
-
// src/validations/user.schema.js
|
|
293
|
-
var import_joi = __toESM(require("joi"));
|
|
294
|
-
var userSchema = {
|
|
295
|
-
// Standard Register Schema
|
|
296
|
-
register: import_joi.default.object({
|
|
297
|
-
username: import_joi.default.string().alphanum().min(3).max(30).required().messages({
|
|
298
|
-
"string.min": "Username must be at least 3 characters long",
|
|
299
|
-
"any.required": "Username is a required field"
|
|
300
|
-
}),
|
|
301
|
-
email: import_joi.default.string().email({ minDomainSegments: 2, tlds: { allow: ["com", "net", "org"] } }).required().messages({
|
|
302
|
-
"string.email": "Please provide a valid email address"
|
|
303
|
-
}),
|
|
304
|
-
password: import_joi.default.string().min(8).required().messages({
|
|
305
|
-
"string.min": "Password must be at least 8 characters long"
|
|
306
|
-
}),
|
|
307
|
-
confirmPassword: import_joi.default.any().equal(import_joi.default.ref("password")).required().messages({ "any.only": "Passwords do not match" }),
|
|
308
|
-
role: import_joi.default.string().valid("user", "admin").default("user")
|
|
309
|
-
}),
|
|
310
|
-
// Login Schema
|
|
311
|
-
login: import_joi.default.object({
|
|
312
|
-
email: import_joi.default.string().email().required(),
|
|
313
|
-
password: import_joi.default.string().required()
|
|
314
|
-
}),
|
|
315
|
-
// Password Update Schema
|
|
316
|
-
updatePassword: import_joi.default.object({
|
|
317
|
-
currentPassword: import_joi.default.string().required(),
|
|
318
|
-
newPassword: import_joi.default.string().min(8).required()
|
|
319
|
-
}),
|
|
320
|
-
/**
|
|
321
|
-
* စိတ်ကြိုက် schema အသစ်ဆောက်ချင်ရင် သုံးရန် (Dynamic Flexibility)
|
|
322
|
-
* @param {Object} schemaDefinition - Joi object definition
|
|
323
|
-
*/
|
|
324
|
-
custom: (schemaDefinition) => import_joi.default.object(schemaDefinition)
|
|
325
|
-
};
|
|
326
|
-
var user_schema_default = userSchema;
|
|
327
|
-
|
|
328
|
-
// src/validations/common.schema.js
|
|
329
|
-
var import_joi2 = __toESM(require("joi"));
|
|
330
|
-
var commonSchema = {
|
|
331
|
-
// MongoDB ObjectId စစ်ဆေးရန် (24 hex characters)
|
|
332
|
-
objectId: import_joi2.default.string().regex(/^[0-9a-fA-F]{24}$/).messages({
|
|
333
|
-
"string.pattern.base": "Invalid ID format. Must be a valid ObjectId."
|
|
334
|
-
}),
|
|
335
|
-
// Pagination အတွက် (Query strings)
|
|
336
|
-
pagination: import_joi2.default.object({
|
|
337
|
-
page: import_joi2.default.number().integer().min(1).default(1),
|
|
338
|
-
limit: import_joi2.default.number().integer().min(1).max(100).default(10),
|
|
339
|
-
sort: import_joi2.default.string().optional(),
|
|
340
|
-
fields: import_joi2.default.string().optional()
|
|
341
|
-
})
|
|
342
|
-
};
|
|
343
|
-
var common_schema_default = commonSchema;
|
|
344
|
-
|
|
345
|
-
// src/validations/index.js
|
|
346
|
-
var schemas = {
|
|
347
|
-
user: user_schema_default,
|
|
348
|
-
common: common_schema_default
|
|
349
|
-
};
|
|
350
|
-
var validations_default = schemas;
|
|
351
|
-
|
|
352
|
-
// src/socket/index.js
|
|
353
|
-
var socket_exports = {};
|
|
354
|
-
__export(socket_exports, {
|
|
355
|
-
getIO: () => getIO,
|
|
356
|
-
initSocket: () => initSocket
|
|
357
|
-
});
|
|
358
|
-
var import_socket = require("socket.io");
|
|
359
|
-
var import_jsonwebtoken3 = __toESM(require("jsonwebtoken"));
|
|
360
|
-
var io;
|
|
361
|
-
var socketAuth = (secret) => {
|
|
362
|
-
return (socket, next) => {
|
|
363
|
-
var _a, _b;
|
|
364
|
-
const token = ((_a = socket.handshake.auth) == null ? void 0 : _a.token) || ((_b = socket.handshake.headers) == null ? void 0 : _b.token);
|
|
365
|
-
if (!token) {
|
|
366
|
-
return next(new Error("Authentication error: Token missing"));
|
|
367
|
-
}
|
|
368
|
-
try {
|
|
369
|
-
const decoded = import_jsonwebtoken3.default.verify(token, secret || process.env.JWT_SECRET);
|
|
370
|
-
socket.user = decoded;
|
|
371
|
-
next();
|
|
372
|
-
} catch (err) {
|
|
373
|
-
next(new Error("Authentication error: Invalid token"));
|
|
374
|
-
}
|
|
375
|
-
};
|
|
376
|
-
};
|
|
377
|
-
var initSocket = (server, options = {}) => {
|
|
378
|
-
io = new import_socket.Server(server, {
|
|
379
|
-
cors: {
|
|
380
|
-
origin: options.origin || "*"
|
|
381
|
-
},
|
|
382
|
-
...options
|
|
383
|
-
});
|
|
384
|
-
if (options.authRequired) {
|
|
385
|
-
io.use(socketAuth(options.jwtSecret));
|
|
386
|
-
}
|
|
387
|
-
return io;
|
|
388
|
-
};
|
|
389
|
-
var getIO = () => {
|
|
390
|
-
if (!io) throw new Error("Socket.io not initialized!");
|
|
391
|
-
return io;
|
|
392
|
-
};
|
|
393
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
394
|
-
0 && (module.exports = {
|
|
395
|
-
AppError,
|
|
396
|
-
Joi,
|
|
397
|
-
STATUS_CODES,
|
|
398
|
-
admin,
|
|
399
|
-
apiResponse,
|
|
400
|
-
auth,
|
|
401
|
-
catchAsync,
|
|
402
|
-
comparePassword,
|
|
403
|
-
connectDB,
|
|
404
|
-
errorMiddleware,
|
|
405
|
-
generateToken,
|
|
406
|
-
generateUUID,
|
|
407
|
-
hashPassword,
|
|
408
|
-
schemas,
|
|
409
|
-
socket,
|
|
410
|
-
validate
|
|
411
|
-
});
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var _chunkZJQTZFDUjs = require('./chunk-ZJQTZFDU.js');var _mongoose = require('mongoose'); var _mongoose2 = _interopRequireDefault(_mongoose);var R=async e=>{e||(console.error("\u274C Error: MongoDB URL is required to connect to the database."),process.exit(1));try{let t=await _mongoose2.default.connect(e);console.log(`\u2705 MongoDB Connected: ${t.connection.host}`)}catch(t){console.error(`\u274C Error: ${t.message}`),process.exit(1)}},T= exports.connectDB =R;var _jsonwebtoken = require('jsonwebtoken'); var _jsonwebtoken2 = _interopRequireDefault(_jsonwebtoken);var f=e=>(t,o,r)=>{e(t,o,r).catch(r)},m= exports.catchAsync =f;var N=(e=process.env.JWT_SECRET,t={})=>m(async(o,r,n)=>{let a;if(o.headers.authorization&&o.headers.authorization.startsWith("Bearer")?a=o.headers.authorization.split(" ")[1]:o.cookies&&o.cookies[t.cookieName||"jwt"]&&(a=o.cookies[t.cookieName||"jwt"]),!e)return n(new (0, _chunkZJQTZFDUjs.a)("JWT Secret is not defined in environment variables",500));if(!a)return n(new (0, _chunkZJQTZFDUjs.a)("You are not logged in! Please log in to get access.",401));try{let i=_jsonwebtoken2.default.verify(a,e);o.user=i,n()}catch (e2){return n(new (0, _chunkZJQTZFDUjs.a)("Invalid token or expired. Please log in again.",401))}}),l= exports.admin =(e,t,o)=>{if(e.user&&e.user.role==="admin")o();else return o(new (0, _chunkZJQTZFDUjs.a)("You do not have permission to perform this action",403))};var A=process.env.PORT||5e3,S={OK:200,CREATED:201,ACCEPTED:202,NO_CONTENT:204,MOVED_PERMANENTLY:301,FOUND:302,BAD_REQUEST:400,UNAUTHORIZED:401,FORBIDDEN:403,NOT_FOUND:404,METHOD_NOT_ALLOWED:405,CONFLICT:409,UNPROCESSABLE_ENTITY:422,TOO_MANY_REQUESTS:429,INTERNAL_SERVER_ERROR:500,NOT_IMPLEMENTED:501,BAD_GATEWAY:502,SERVICE_UNAVAILABLE:503,GATEWAY_TIMEOUT:504,PORT:A},s= exports.STATUS_CODES =S;var _=(e,t,o,r)=>{e.statusCode=e.statusCode||s.INTERNAL_SERVER_ERROR,e.status=e.status||"error",process.env.NODE_ENV==="development"?o.status(e.statusCode).json({status:e.status,error:e,message:e.message,stack:e.stack}):e.isOperational?o.status(e.statusCode).json({status:e.status,message:e.message}):(console.error("ERROR \u{1F4A5}",e),o.status(s.INTERNAL_SERVER_ERROR).json({status:"error",message:"Something went very wrong!"}))},g= exports.errorMiddleware =_;var D={success:(e,t,o="Success",r=s.OK)=>e.status(r).json({status:"success",message:o,data:t}),error:(e,t="Internal Server Error",o=s.INTERNAL_SERVER_ERROR)=>e.status(o).json({status:"error",message:t})},h= exports.apiResponse =D;var _bcryptjs = require('bcryptjs'); var _bcryptjs2 = _interopRequireDefault(_bcryptjs);var I=async e=>{let t=await _bcryptjs2.default.genSalt(10);return await _bcryptjs2.default.hash(e,t)},w= exports.comparePassword =async(e,t)=>await _bcryptjs2.default.compare(e,t),C= exports.generateToken =(e,t,o={})=>{let r=o.secret||process.env.JWT_SECRET,n=o.expiresIn||"30d",a=o.cookieName||"jwt",i=_jsonwebtoken2.default.sign(e,r,{expiresIn:n}),u={maxAge:o.maxAge||720*60*60*1e3,httpOnly:!0,sameSite:process.env.NODE_ENV==="production"?"none":"lax",secure:process.env.NODE_ENV==="production",...o.extraCookieOptions};return t.cookie(a,i,u),i};var _crypto = require('crypto'); var _crypto2 = _interopRequireDefault(_crypto);var x=()=>typeof _crypto2.default.randomUUID=="function"?_crypto2.default.randomUUID():("10000000-1000-4000-8000"+-1e11).replace(/[018]/g,e=>(e^_crypto2.default.randomBytes(1).readUInt8()&15>>e/4).toString(16)),k= exports.generateUUID =x;exports.AppError = _chunkZJQTZFDUjs.a; exports.STATUS_CODES = s; exports.admin = l; exports.apiResponse = h; exports.auth = N; exports.catchAsync = m; exports.comparePassword = w; exports.connectDB = T; exports.errorMiddleware = g; exports.generateToken = C; exports.generateUUID = k; exports.hashPassword = I;
|