@shadimakhoul/ggcoach 1.0.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/config/config.ts +7 -0
- package/config/index.ts +2 -0
- package/config/initExpress.ts +27 -0
- package/config/redis.ts +38 -0
- package/config/swagger-ui.ts +84 -0
- package/config/swagger.ts +4417 -0
- package/dist/config/config.d.ts +8 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +11 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +19 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/initExpress.d.ts +2 -0
- package/dist/config/initExpress.d.ts.map +1 -0
- package/dist/config/initExpress.js +29 -0
- package/dist/config/initExpress.js.map +1 -0
- package/dist/config/redis.d.ts +6 -0
- package/dist/config/redis.d.ts.map +1 -0
- package/dist/config/redis.js +34 -0
- package/dist/config/redis.js.map +1 -0
- package/dist/config/swagger-ui.d.ts +6 -0
- package/dist/config/swagger-ui.d.ts.map +1 -0
- package/dist/config/swagger-ui.js +88 -0
- package/dist/config/swagger-ui.js.map +1 -0
- package/dist/config/swagger.d.ts +9 -0
- package/dist/config/swagger.d.ts.map +1 -0
- package/dist/config/swagger.js +4406 -0
- package/dist/config/swagger.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/admin-auth.d.ts +4 -0
- package/dist/middleware/admin-auth.d.ts.map +1 -0
- package/dist/middleware/admin-auth.js +55 -0
- package/dist/middleware/admin-auth.js.map +1 -0
- package/dist/middleware/auth.d.ts +4 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +86 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware/cors.d.ts +16 -0
- package/dist/middleware/cors.d.ts.map +1 -0
- package/dist/middleware/cors.js +45 -0
- package/dist/middleware/cors.js.map +1 -0
- package/dist/middleware/errorHandler.d.ts +3 -0
- package/dist/middleware/errorHandler.d.ts.map +1 -0
- package/dist/middleware/errorHandler.js +58 -0
- package/dist/middleware/errorHandler.js.map +1 -0
- package/dist/middleware/index.d.ts +9 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +25 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/internalAuth.d.ts +4 -0
- package/dist/middleware/internalAuth.d.ts.map +1 -0
- package/dist/middleware/internalAuth.js +23 -0
- package/dist/middleware/internalAuth.js.map +1 -0
- package/dist/middleware/rateLimiter.d.ts +4 -0
- package/dist/middleware/rateLimiter.d.ts.map +1 -0
- package/dist/middleware/rateLimiter.js +24 -0
- package/dist/middleware/rateLimiter.js.map +1 -0
- package/dist/middleware/swagger.d.ts +16 -0
- package/dist/middleware/swagger.d.ts.map +1 -0
- package/dist/middleware/swagger.js +49 -0
- package/dist/middleware/swagger.js.map +1 -0
- package/dist/middleware/validation.d.ts +4 -0
- package/dist/middleware/validation.d.ts.map +1 -0
- package/dist/middleware/validation.js +24 -0
- package/dist/middleware/validation.js.map +1 -0
- package/dist/types/admin-auth.d.ts +44 -0
- package/dist/types/admin-auth.d.ts.map +1 -0
- package/dist/types/admin-auth.js +3 -0
- package/dist/types/admin-auth.js.map +1 -0
- package/dist/types/auth.d.ts +53 -0
- package/dist/types/auth.d.ts.map +1 -0
- package/dist/types/auth.js +3 -0
- package/dist/types/auth.js.map +1 -0
- package/dist/types/enums/auth.d.ts +7 -0
- package/dist/types/enums/auth.d.ts.map +1 -0
- package/dist/types/enums/auth.js +11 -0
- package/dist/types/enums/auth.js.map +1 -0
- package/dist/types/enums/index.d.ts +2 -0
- package/dist/types/enums/index.d.ts.map +1 -0
- package/dist/types/enums/index.js +18 -0
- package/dist/types/enums/index.js.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +20 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +20 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/jwt.d.ts +5 -0
- package/dist/utils/jwt.d.ts.map +1 -0
- package/dist/utils/jwt.js +67 -0
- package/dist/utils/jwt.js.map +1 -0
- package/dist/utils/logger.d.ts +6 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +69 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/openapi.d.ts +9 -0
- package/dist/utils/openapi.d.ts.map +1 -0
- package/dist/utils/openapi.js +90 -0
- package/dist/utils/openapi.js.map +1 -0
- package/dist/utils/validation.d.ts +12 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +108 -0
- package/dist/utils/validation.js.map +1 -0
- package/index.ts +4 -0
- package/logs/combined.log +85182 -0
- package/logs/error.log +48814 -0
- package/middleware/admin-auth.ts +93 -0
- package/middleware/auth.ts +100 -0
- package/middleware/cors.ts +48 -0
- package/middleware/errorHandler.ts +62 -0
- package/middleware/index.ts +8 -0
- package/middleware/internalAuth.ts +25 -0
- package/middleware/rateLimiter.ts +18 -0
- package/middleware/swagger.ts +69 -0
- package/middleware/validation.ts +24 -0
- package/package.json +43 -0
- package/public/swagger.css +114 -0
- package/tsconfig.json +10 -0
- package/types/admin-auth.ts +47 -0
- package/types/auth.ts +66 -0
- package/types/enums/auth.ts +6 -0
- package/types/enums/index.ts +1 -0
- package/types/index.ts +3 -0
- package/utils/index.ts +3 -0
- package/utils/jwt.ts +66 -0
- package/utils/logger.ts +90 -0
- package/utils/openapi.ts +125 -0
|
@@ -0,0 +1,90 @@
|
|
|
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.buildOpenApiSpecFromExpress = void 0;
|
|
7
|
+
const express_list_endpoints_1 = __importDefault(require("express-list-endpoints"));
|
|
8
|
+
const AUTH_MIDDLEWARES = new Set([
|
|
9
|
+
'authenticateToken',
|
|
10
|
+
'requireAdmin',
|
|
11
|
+
'requireSuperAdmin',
|
|
12
|
+
]);
|
|
13
|
+
const getRecord = (value) => {
|
|
14
|
+
if (value && typeof value === 'object' && !Array.isArray(value)) {
|
|
15
|
+
return value;
|
|
16
|
+
}
|
|
17
|
+
return {};
|
|
18
|
+
};
|
|
19
|
+
const shouldSkipPath = (path) => {
|
|
20
|
+
if (!path) {
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
if (path === '*' || path === '/*') {
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
return path.startsWith('/api-docs');
|
|
27
|
+
};
|
|
28
|
+
const normalizePath = (path) => {
|
|
29
|
+
const trimmed = path.endsWith('/') && path.length > 1 ? path.slice(0, -1) : path;
|
|
30
|
+
return trimmed || '/';
|
|
31
|
+
};
|
|
32
|
+
const buildPathsFromEndpoints = (endpoints, tagResolver) => {
|
|
33
|
+
const paths = {};
|
|
34
|
+
const allowedMethods = new Set(['GET', 'POST', 'PUT', 'DELETE', 'PATCH']);
|
|
35
|
+
endpoints.forEach((endpoint) => {
|
|
36
|
+
const path = normalizePath(endpoint.path);
|
|
37
|
+
if (shouldSkipPath(path)) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
endpoint.methods
|
|
41
|
+
.map((method) => method.toUpperCase())
|
|
42
|
+
.filter((method) => allowedMethods.has(method))
|
|
43
|
+
.forEach((method) => {
|
|
44
|
+
const methodKey = method.toLowerCase();
|
|
45
|
+
if (!paths[path]) {
|
|
46
|
+
paths[path] = {};
|
|
47
|
+
}
|
|
48
|
+
if (paths[path][methodKey]) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const tags = tagResolver ? tagResolver(path, methodKey) : undefined;
|
|
52
|
+
const requiresAuth = endpoint.middlewares.some((m) => AUTH_MIDDLEWARES.has(m));
|
|
53
|
+
paths[path][methodKey] = {
|
|
54
|
+
summary: `${method} ${path}`,
|
|
55
|
+
...(tags && tags.length > 0 ? { tags } : {}),
|
|
56
|
+
...(requiresAuth ? { security: [{ bearerAuth: [] }] } : {}),
|
|
57
|
+
responses: {
|
|
58
|
+
'200': {
|
|
59
|
+
description: 'Success',
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
return paths;
|
|
66
|
+
};
|
|
67
|
+
const mergePaths = (basePaths, generatedPaths) => {
|
|
68
|
+
const merged = { ...generatedPaths };
|
|
69
|
+
Object.entries(basePaths).forEach(([path, methods]) => {
|
|
70
|
+
const generatedMethods = merged[path] ?? {};
|
|
71
|
+
merged[path] = {
|
|
72
|
+
...generatedMethods,
|
|
73
|
+
...methods,
|
|
74
|
+
};
|
|
75
|
+
});
|
|
76
|
+
return merged;
|
|
77
|
+
};
|
|
78
|
+
const buildOpenApiSpecFromExpress = (app, baseSpec, options = {}) => {
|
|
79
|
+
const endpoints = (0, express_list_endpoints_1.default)(app);
|
|
80
|
+
const basePaths = getRecord(baseSpec.paths);
|
|
81
|
+
const generatedPaths = buildPathsFromEndpoints(endpoints, options.tagResolver);
|
|
82
|
+
return {
|
|
83
|
+
...baseSpec,
|
|
84
|
+
paths: {
|
|
85
|
+
...mergePaths(basePaths, generatedPaths),
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
};
|
|
89
|
+
exports.buildOpenApiSpecFromExpress = buildOpenApiSpecFromExpress;
|
|
90
|
+
//# sourceMappingURL=openapi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openapi.js","sourceRoot":"","sources":["../../utils/openapi.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import Joi from 'joi';
|
|
2
|
+
export declare const signupSchema: Joi.ObjectSchema<any>;
|
|
3
|
+
export declare const signinSchema: Joi.ObjectSchema<any>;
|
|
4
|
+
export declare const refreshTokenSchema: Joi.ObjectSchema<any>;
|
|
5
|
+
export declare const confirmEmailSchema: Joi.ObjectSchema<any>;
|
|
6
|
+
export declare const resendEmailSchema: Joi.ObjectSchema<any>;
|
|
7
|
+
export declare const forgotPasswordSchema: Joi.ObjectSchema<any>;
|
|
8
|
+
export declare const resetPasswordSchema: Joi.ObjectSchema<any>;
|
|
9
|
+
export declare const phoneVerificationRequestSchema: Joi.ObjectSchema<any>;
|
|
10
|
+
export declare const phoneVerificationConfirmSchema: Joi.ObjectSchema<any>;
|
|
11
|
+
export declare const userProfileSchema: Joi.ObjectSchema<any>;
|
|
12
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../utils/validation.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,eAAO,MAAM,YAAY,uBAyBvB,CAAC;AAEH,eAAO,MAAM,YAAY,uBAOvB,CAAC;AAEH,eAAO,MAAM,kBAAkB,uBAI7B,CAAC;AAEH,eAAO,MAAM,kBAAkB,uBAI7B,CAAC;AAEH,eAAO,MAAM,iBAAiB,uBAK5B,CAAC;AAEH,eAAO,MAAM,oBAAoB,uBAK/B,CAAC;AAEH,eAAO,MAAM,mBAAmB,uBAS9B,CAAC;AAEH,eAAO,MAAM,8BAA8B,uBAKzC,CAAC;AAEH,eAAO,MAAM,8BAA8B,uBASzC,CAAC;AAGH,eAAO,MAAM,iBAAiB,uBAmB5B,CAAC"}
|
|
@@ -0,0 +1,108 @@
|
|
|
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.userProfileSchema = exports.phoneVerificationConfirmSchema = exports.phoneVerificationRequestSchema = exports.resetPasswordSchema = exports.forgotPasswordSchema = exports.resendEmailSchema = exports.confirmEmailSchema = exports.refreshTokenSchema = exports.signinSchema = exports.signupSchema = void 0;
|
|
7
|
+
const joi_1 = __importDefault(require("joi"));
|
|
8
|
+
exports.signupSchema = joi_1.default.object({
|
|
9
|
+
firstName: joi_1.default.string().min(2).max(100).required().messages({
|
|
10
|
+
'string.min': 'First name must be at least 2 characters long',
|
|
11
|
+
'string.max': 'First name must not exceed 100 characters',
|
|
12
|
+
'any.required': 'First name is required'
|
|
13
|
+
}),
|
|
14
|
+
lastName: joi_1.default.string().min(2).max(100).required().messages({
|
|
15
|
+
'string.min': 'Last name must be at least 2 characters long',
|
|
16
|
+
'string.max': 'Last name must not exceed 100 characters',
|
|
17
|
+
'any.required': 'Last name is required'
|
|
18
|
+
}),
|
|
19
|
+
email: joi_1.default.string().email().required().messages({
|
|
20
|
+
'string.email': 'Please provide a valid email address',
|
|
21
|
+
'any.required': 'Email is required'
|
|
22
|
+
}),
|
|
23
|
+
phoneNumber: joi_1.default.string().optional().pattern(/^[\+]?[1-9][\d]{0,15}$/),
|
|
24
|
+
password: joi_1.default.string().min(6).max(255).required().messages({
|
|
25
|
+
'string.min': 'Password must be at least 6 characters long',
|
|
26
|
+
'string.max': 'Password must not exceed 255 characters',
|
|
27
|
+
'any.required': 'Password is required'
|
|
28
|
+
}),
|
|
29
|
+
accountType: joi_1.default.string().valid('Client', 'Provider', 'Admin', 'SuperAdmin').required().messages({
|
|
30
|
+
'any.only': 'Account type must be either Client, Provider, Admin, or SuperAdmin',
|
|
31
|
+
'any.required': 'Account type is required'
|
|
32
|
+
})
|
|
33
|
+
});
|
|
34
|
+
exports.signinSchema = joi_1.default.object({
|
|
35
|
+
identifier: joi_1.default.string().required().messages({
|
|
36
|
+
'any.required': 'Email or phone number is required'
|
|
37
|
+
}),
|
|
38
|
+
password: joi_1.default.string().required().messages({
|
|
39
|
+
'any.required': 'Password is required'
|
|
40
|
+
})
|
|
41
|
+
});
|
|
42
|
+
exports.refreshTokenSchema = joi_1.default.object({
|
|
43
|
+
refresh_token: joi_1.default.string().required().messages({
|
|
44
|
+
'any.required': 'Refresh token is required'
|
|
45
|
+
})
|
|
46
|
+
});
|
|
47
|
+
exports.confirmEmailSchema = joi_1.default.object({
|
|
48
|
+
token: joi_1.default.string().required().messages({
|
|
49
|
+
'any.required': 'Verification token is required'
|
|
50
|
+
})
|
|
51
|
+
});
|
|
52
|
+
exports.resendEmailSchema = joi_1.default.object({
|
|
53
|
+
email: joi_1.default.string().email().required().messages({
|
|
54
|
+
'string.email': 'Please provide a valid email address',
|
|
55
|
+
'any.required': 'Email is required'
|
|
56
|
+
})
|
|
57
|
+
});
|
|
58
|
+
exports.forgotPasswordSchema = joi_1.default.object({
|
|
59
|
+
email: joi_1.default.string().email().required().messages({
|
|
60
|
+
'string.email': 'Please provide a valid email address',
|
|
61
|
+
'any.required': 'Email is required'
|
|
62
|
+
})
|
|
63
|
+
});
|
|
64
|
+
exports.resetPasswordSchema = joi_1.default.object({
|
|
65
|
+
token: joi_1.default.string().required().messages({
|
|
66
|
+
'any.required': 'Reset token is required'
|
|
67
|
+
}),
|
|
68
|
+
new_password: joi_1.default.string().min(6).max(255).required().messages({
|
|
69
|
+
'string.min': 'Password must be at least 6 characters long',
|
|
70
|
+
'string.max': 'Password must not exceed 255 characters',
|
|
71
|
+
'any.required': 'New password is required'
|
|
72
|
+
})
|
|
73
|
+
});
|
|
74
|
+
exports.phoneVerificationRequestSchema = joi_1.default.object({
|
|
75
|
+
phoneNumber: joi_1.default.string().pattern(/^[\+]?[1-9][\d]{0,15}$/).required().messages({
|
|
76
|
+
'string.pattern.base': 'phoneNumber must be a valid E.164 phone number',
|
|
77
|
+
'any.required': 'phoneNumber is required'
|
|
78
|
+
})
|
|
79
|
+
});
|
|
80
|
+
exports.phoneVerificationConfirmSchema = joi_1.default.object({
|
|
81
|
+
phoneNumber: joi_1.default.string().pattern(/^[\+]?[1-9][\d]{0,15}$/).required().messages({
|
|
82
|
+
'string.pattern.base': 'phoneNumber must be a valid E.164 phone number',
|
|
83
|
+
'any.required': 'phoneNumber is required'
|
|
84
|
+
}),
|
|
85
|
+
code: joi_1.default.string().pattern(/^\d{4,10}$/).required().messages({
|
|
86
|
+
'string.pattern.base': 'Verification code must be numeric',
|
|
87
|
+
'any.required': 'Verification code is required'
|
|
88
|
+
})
|
|
89
|
+
});
|
|
90
|
+
exports.userProfileSchema = joi_1.default.object({
|
|
91
|
+
birthday: joi_1.default.string()
|
|
92
|
+
.pattern(/^\d{4}-\d{2}-\d{2}$/)
|
|
93
|
+
.optional()
|
|
94
|
+
.messages({
|
|
95
|
+
'string.pattern.base': 'Birthday must be in YYYY-MM-DD format (e.g. 2025-11-20)'
|
|
96
|
+
}),
|
|
97
|
+
gender: joi_1.default.string().valid('male', 'female', 'other').optional(),
|
|
98
|
+
height: joi_1.default.number().min(0).optional().messages({ 'number.base': 'Height must be a number' }),
|
|
99
|
+
weight: joi_1.default.number().min(0).optional().messages({ 'number.base': 'Weight must be a number' }),
|
|
100
|
+
avatar: joi_1.default.string()
|
|
101
|
+
.pattern(/^gg\.staging\.brainexy\.com\/uploads\/avatar\/.+\.(jpg|jpeg|png|webp)$/)
|
|
102
|
+
.required()
|
|
103
|
+
.messages({
|
|
104
|
+
'string.pattern.base': 'Avatar must be a valid link like gg.staging.brainexy.com/uploads/avatar/image.jpg',
|
|
105
|
+
'any.required': 'Avatar link is required',
|
|
106
|
+
})
|
|
107
|
+
});
|
|
108
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../utils/validation.ts"],"names":[],"mappings":"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"}
|
package/index.ts
ADDED