equipped 4.4.6 → 5.0.0-beta-2

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.
Files changed (72) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/lib/db/_instance.d.ts +3 -6
  3. package/lib/db/mongoose/changes.d.ts +2 -1
  4. package/lib/db/mongoose/index.d.ts +2 -1
  5. package/lib/db/mongoose/index.js +3 -1
  6. package/lib/db/mongoose/query.d.ts +1 -0
  7. package/lib/db/query.d.ts +12 -11
  8. package/lib/errors/customError.d.ts +0 -1
  9. package/lib/errors/customError.js +0 -1
  10. package/lib/errors/index.d.ts +0 -2
  11. package/lib/errors/index.js +0 -2
  12. package/lib/errors/types/refreshTokenMisusedError.d.ts +1 -1
  13. package/lib/errors/types/refreshTokenMisusedError.js +1 -1
  14. package/lib/index.d.ts +2 -0
  15. package/lib/index.js +2 -0
  16. package/lib/instance/index.d.ts +5 -4
  17. package/lib/instance/index.js +17 -4
  18. package/lib/instance/settings.d.ts +8 -0
  19. package/lib/instance/settings.js +7 -1
  20. package/lib/listeners/emitter.d.ts +3 -3
  21. package/lib/scripts/index.d.ts +1 -0
  22. package/lib/scripts/index.js +17 -0
  23. package/lib/scripts/json-schema.d.ts +2 -0
  24. package/lib/scripts/json-schema.js +75 -0
  25. package/lib/server/impls/base.d.ts +37 -0
  26. package/lib/server/impls/base.js +120 -0
  27. package/lib/server/impls/express.d.ts +16 -0
  28. package/lib/server/impls/express.js +183 -0
  29. package/lib/server/impls/fastify.d.ts +23 -0
  30. package/lib/server/impls/fastify.js +182 -0
  31. package/lib/server/index.d.ts +7 -6
  32. package/lib/server/index.js +10 -8
  33. package/lib/server/middlewares/errorHandler.d.ts +4 -1
  34. package/lib/server/middlewares/errorHandler.js +10 -11
  35. package/lib/server/middlewares/index.d.ts +1 -0
  36. package/lib/server/middlewares/index.js +1 -0
  37. package/lib/server/middlewares/notFoundHandler.d.ts +4 -1
  38. package/lib/server/middlewares/notFoundHandler.js +3 -3
  39. package/lib/server/middlewares/parseAuthUser.d.ts +4 -1
  40. package/lib/server/middlewares/parseAuthUser.js +2 -2
  41. package/lib/server/middlewares/requireAuthUser.d.ts +4 -2
  42. package/lib/server/middlewares/requireAuthUser.js +8 -3
  43. package/lib/server/middlewares/requireRefreshUser.d.ts +4 -2
  44. package/lib/server/middlewares/requireRefreshUser.js +7 -4
  45. package/lib/server/requests.d.ts +50 -0
  46. package/lib/server/requests.js +60 -0
  47. package/lib/server/routes.d.ts +6 -23
  48. package/lib/server/routes.js +39 -49
  49. package/lib/server/types.d.ts +85 -0
  50. package/lib/server/types.js +33 -0
  51. package/lib/structure/baseEntity.d.ts +4 -5
  52. package/lib/structure/baseEntity.js +20 -12
  53. package/lib/types/index.d.ts +20 -0
  54. package/lib/types/index.js +2 -0
  55. package/lib/validations/index.d.ts +1 -1
  56. package/package.json +36 -22
  57. package/lib/errors/types/accountNotVerifiedError.d.ts +0 -5
  58. package/lib/errors/types/accountNotVerifiedError.js +0 -12
  59. package/lib/errors/types/invalidToken.d.ts +0 -5
  60. package/lib/errors/types/invalidToken.js +0 -12
  61. package/lib/logger/index.d.ts +0 -13
  62. package/lib/logger/index.js +0 -41
  63. package/lib/server/app.d.ts +0 -12
  64. package/lib/server/app.js +0 -121
  65. package/lib/server/controllers/index.d.ts +0 -10
  66. package/lib/server/controllers/index.js +0 -46
  67. package/lib/server/controllers/request.d.ts +0 -40
  68. package/lib/server/controllers/request.js +0 -85
  69. package/lib/server/controllers/response.d.ts +0 -14
  70. package/lib/server/controllers/response.js +0 -16
  71. package/lib/server/statusCodes.d.ts +0 -16
  72. package/lib/server/statusCodes.js +0 -17
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "equipped",
3
- "version": "4.4.6",
3
+ "version": "5.0.0-beta-2",
4
4
  "private": false,
5
5
  "description": "",
6
6
  "main": "lib/index.js",
@@ -16,9 +16,9 @@
16
16
  "author": "",
17
17
  "license": "ISC",
18
18
  "devDependencies": {
19
- "@commitlint/cli": "^19.2.1",
20
- "@commitlint/config-conventional": "^19.1.0",
21
- "@stylistic/eslint-plugin": "^1.7.0",
19
+ "@commitlint/cli": "^19.3.0",
20
+ "@commitlint/config-conventional": "^19.2.2",
21
+ "@stylistic/eslint-plugin": "^2.1.0",
22
22
  "@types/amqplib": "^0.10.5",
23
23
  "@types/bcryptjs": "^2.4.6",
24
24
  "@types/bull": "^3.15.9",
@@ -26,48 +26,62 @@
26
26
  "@types/express": "^4.17.21",
27
27
  "@types/express-fileupload": "^1.5.0",
28
28
  "@types/jsonwebtoken": "^9.0.6",
29
- "@types/morgan": "^1.9.9",
30
- "@types/node": "^20.12.5",
29
+ "@types/node": "^20.12.12",
31
30
  "@types/pug": "^2.0.10",
32
31
  "@types/supertest": "^6.0.2",
33
- "@typescript-eslint/eslint-plugin": "^7.5.0",
34
- "@typescript-eslint/parser": "^7.5.0",
35
- "eslint": "^9.0.0",
32
+ "@typescript-eslint/eslint-plugin": "^7.10.0",
33
+ "@typescript-eslint/parser": "^7.10.0",
34
+ "eslint": "^9.3.0",
36
35
  "eslint-plugin-promise": "^6.1.1",
37
36
  "husky": "^9.0.11",
38
37
  "standard-version": "^9.5.0",
39
- "typescript": "^5.4.4"
38
+ "typescript": "^5.4.5"
40
39
  },
41
40
  "dependencies": {
41
+ "@fastify/cookie": "^9.3.1",
42
+ "@fastify/cors": "^9.0.1",
43
+ "@fastify/formbody": "^7.4.0",
44
+ "@fastify/helmet": "^11.1.1",
45
+ "@fastify/multipart": "^8.2.0",
46
+ "@fastify/rate-limit": "^9.1.0",
47
+ "@fastify/static": "^7.0.4",
48
+ "@fastify/swagger": "^8.14.0",
49
+ "@fastify/swagger-ui": "^3.0.0",
50
+ "@wesleytodd/openapi": "^1.0.0",
42
51
  "amqp-connection-manager": "^4.1.14",
43
- "amqplib": "^0.10.3",
44
- "axios": "^1.6.8",
52
+ "amqplib": "^0.10.4",
53
+ "axios": "^1.7.2",
45
54
  "bcryptjs": "^2.4.3",
46
- "bull": "^4.12.2",
47
- "chalk": "^4.1.2",
48
- "compression": "^1.7.4",
55
+ "bull": "^4.12.9",
49
56
  "cookie-parser": "^1.4.6",
50
57
  "cors": "^2.8.5",
51
58
  "dotenv": "^16.4.5",
52
59
  "express": "^4.19.2",
53
60
  "express-fileupload": "^1.5.0",
54
61
  "express-rate-limit": "^7.2.0",
55
- "express-slow-down": "^2.0.1",
62
+ "express-slow-down": "^2.0.3",
63
+ "fastify": "^4.27.0",
64
+ "fastify-slow-down": "^1.2.2",
56
65
  "helmet": "^7.1.0",
66
+ "json-schema-resolver": "^2.0.0",
57
67
  "jsonwebtoken": "^9.0.2",
58
68
  "jwks-rsa": "^3.1.0",
59
69
  "kafkajs": "^2.2.4",
60
- "mongoose": "^8.3.0",
70
+ "mongoose": "^8.4.0",
61
71
  "mongoose-lean-defaults": "^2.2.1",
62
- "mongoose-lean-getters": "^2.0.1",
72
+ "mongoose-lean-getters": "^2.1.0",
63
73
  "mongoose-lean-virtuals": "^0.9.1",
64
- "morgan": "^1.10.0",
65
74
  "music-metadata": "^7.14.0",
75
+ "openapi-types": "^12.1.3",
66
76
  "path-to-regexp": "^6.2.2",
67
- "pug": "^3.0.2",
68
- "redis": "^4.6.13",
77
+ "pino": "^9.1.0",
78
+ "pino-http": "^10.1.0",
79
+ "pug": "^3.0.3",
80
+ "qs": "^6.12.1",
81
+ "redis": "^4.6.14",
69
82
  "socket.io": "4.7.5",
70
- "supertest": "^6.3.4",
83
+ "supertest": "^7.0.0",
84
+ "ts-oas": "^0.4.1",
71
85
  "valleyed": "4.2.11"
72
86
  },
73
87
  "repository": {
@@ -1,5 +0,0 @@
1
- import { CustomError } from '../customError';
2
- export declare class AccountNotVerifiedError extends CustomError {
3
- statusCode: 460;
4
- constructor(message?: string);
5
- }
@@ -1,12 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AccountNotVerifiedError = void 0;
4
- const server_1 = require("../../server");
5
- const customError_1 = require("../customError");
6
- class AccountNotVerifiedError extends customError_1.CustomError {
7
- constructor(message = 'Account not verified') {
8
- super(message, [{ message }]);
9
- this.statusCode = server_1.StatusCodes.AccountNotVerified;
10
- }
11
- }
12
- exports.AccountNotVerifiedError = AccountNotVerifiedError;
@@ -1,5 +0,0 @@
1
- import { CustomError } from '../customError';
2
- export declare class InvalidToken extends CustomError {
3
- statusCode: 461;
4
- constructor(message?: string);
5
- }
@@ -1,12 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.InvalidToken = void 0;
4
- const server_1 = require("../../server");
5
- const customError_1 = require("../customError");
6
- class InvalidToken extends customError_1.CustomError {
7
- constructor(message = 'Token is either expired or invalid') {
8
- super(message, [{ message }]);
9
- this.statusCode = server_1.StatusCodes.AccessTokenExpired;
10
- }
11
- }
12
- exports.InvalidToken = InvalidToken;
@@ -1,13 +0,0 @@
1
- export declare abstract class Logger {
2
- abstract success(...args: any[]): Promise<void>;
3
- abstract info(...args: any[]): Promise<void>;
4
- abstract warn(...args: any[]): Promise<void>;
5
- abstract error(...args: any[]): Promise<void>;
6
- }
7
- export declare class ConsoleLogger extends Logger {
8
- #private;
9
- error(...args: any[]): Promise<void>;
10
- success(...args: any[]): Promise<void>;
11
- info(...args: any[]): Promise<void>;
12
- warn(...args: any[]): Promise<void>;
13
- }
@@ -1,41 +0,0 @@
1
- "use strict";
2
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
3
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
4
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
5
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
6
- };
7
- var __importDefault = (this && this.__importDefault) || function (mod) {
8
- return (mod && mod.__esModule) ? mod : { "default": mod };
9
- };
10
- var _ConsoleLogger_instances, _ConsoleLogger_log, _ConsoleLogger_getTime;
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.ConsoleLogger = exports.Logger = void 0;
13
- const chalk_1 = __importDefault(require("chalk"));
14
- class Logger {
15
- }
16
- exports.Logger = Logger;
17
- class ConsoleLogger extends Logger {
18
- constructor() {
19
- super(...arguments);
20
- _ConsoleLogger_instances.add(this);
21
- _ConsoleLogger_log.set(this, console.log);
22
- }
23
- async error(...args) {
24
- __classPrivateFieldGet(this, _ConsoleLogger_log, "f").call(this, chalk_1.default.red(`[ERROR] ${__classPrivateFieldGet(this, _ConsoleLogger_instances, "m", _ConsoleLogger_getTime).call(this)}`, ...args));
25
- }
26
- async success(...args) {
27
- __classPrivateFieldGet(this, _ConsoleLogger_log, "f").call(this, chalk_1.default.greenBright(`[SUCCESS] ${__classPrivateFieldGet(this, _ConsoleLogger_instances, "m", _ConsoleLogger_getTime).call(this)}`, ...args));
28
- }
29
- async info(...args) {
30
- __classPrivateFieldGet(this, _ConsoleLogger_log, "f").call(this, chalk_1.default.blueBright(`[INFO] ${__classPrivateFieldGet(this, _ConsoleLogger_instances, "m", _ConsoleLogger_getTime).call(this)}`, ...args));
31
- }
32
- async warn(...args) {
33
- __classPrivateFieldGet(this, _ConsoleLogger_log, "f").call(this, chalk_1.default.yellow(`[WARNING] ${__classPrivateFieldGet(this, _ConsoleLogger_instances, "m", _ConsoleLogger_getTime).call(this)}`, ...args));
34
- }
35
- }
36
- exports.ConsoleLogger = ConsoleLogger;
37
- _ConsoleLogger_log = new WeakMap(), _ConsoleLogger_instances = new WeakSet(), _ConsoleLogger_getTime = function _ConsoleLogger_getTime() {
38
- const date = new Date().toJSON();
39
- const split = date.split('T');
40
- return [split[0], split[1].slice(0, 8)].join('T');
41
- };
@@ -1,12 +0,0 @@
1
- import supertest from 'supertest';
2
- import { Listener } from '../listeners';
3
- import { Route, Router } from './routes';
4
- export declare class Server {
5
- #private;
6
- constructor();
7
- get listener(): Listener;
8
- set routes(routes: Route[]);
9
- register(router: Router): void;
10
- test(): import("supertest/lib/agent")<supertest.SuperTestStatic.Test>;
11
- start(port: number): Promise<boolean>;
12
- }
package/lib/server/app.js DELETED
@@ -1,121 +0,0 @@
1
- "use strict";
2
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
- if (kind === "m") throw new TypeError("Private method is not writable");
4
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
6
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
- };
8
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
- };
13
- var __importDefault = (this && this.__importDefault) || function (mod) {
14
- return (mod && mod.__esModule) ? mod : { "default": mod };
15
- };
16
- var _Server_expressApp, _Server_httpServer, _Server_listener;
17
- Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.Server = void 0;
19
- const cookie_parser_1 = __importDefault(require("cookie-parser"));
20
- const cors_1 = __importDefault(require("cors"));
21
- const express_1 = __importDefault(require("express"));
22
- const express_fileupload_1 = __importDefault(require("express-fileupload"));
23
- const express_rate_limit_1 = __importDefault(require("express-rate-limit"));
24
- const express_slow_down_1 = __importDefault(require("express-slow-down"));
25
- const helmet_1 = __importDefault(require("helmet"));
26
- const http_1 = __importDefault(require("http"));
27
- const morgan_1 = __importDefault(require("morgan"));
28
- const path_1 = __importDefault(require("path"));
29
- const socket_io_1 = __importDefault(require("socket.io"));
30
- const supertest_1 = __importDefault(require("supertest"));
31
- const exit_1 = require("../exit");
32
- const instance_1 = require("../instance");
33
- const listeners_1 = require("../listeners");
34
- const middlewares_1 = require("./middlewares");
35
- const parseAuthUser_1 = require("./middlewares/parseAuthUser");
36
- const routes_1 = require("./routes");
37
- const statusCodes_1 = require("./statusCodes");
38
- class Server {
39
- constructor() {
40
- _Server_expressApp.set(this, void 0);
41
- _Server_httpServer.set(this, void 0);
42
- _Server_listener.set(this, void 0);
43
- const settings = instance_1.Instance.get().settings;
44
- __classPrivateFieldSet(this, _Server_expressApp, (0, express_1.default)(), "f");
45
- __classPrivateFieldGet(this, _Server_expressApp, "f").disable('x-powered-by');
46
- __classPrivateFieldSet(this, _Server_httpServer, http_1.default.createServer(__classPrivateFieldGet(this, _Server_expressApp, "f")), "f");
47
- __classPrivateFieldGet(this, _Server_expressApp, "f").use((0, morgan_1.default)((tokens, req, res) => `${tokens.method(req, res)}(${tokens.status(req, res)}) ${tokens.url(req, res)} ${tokens.res(req, res, 'content-length')}b - ${tokens['response-time'](req, res)}ms`));
48
- __classPrivateFieldGet(this, _Server_expressApp, "f").use(express_1.default.json());
49
- __classPrivateFieldGet(this, _Server_expressApp, "f").use((0, cookie_parser_1.default)());
50
- __classPrivateFieldGet(this, _Server_expressApp, "f").use(helmet_1.default.crossOriginResourcePolicy({ policy: 'cross-origin' }));
51
- __classPrivateFieldGet(this, _Server_expressApp, "f").use((0, cors_1.default)({ origin: '*' }));
52
- __classPrivateFieldGet(this, _Server_expressApp, "f").use(express_1.default.urlencoded({ extended: false }));
53
- __classPrivateFieldGet(this, _Server_expressApp, "f").use(express_1.default.static(path_1.default.join(process.cwd(), 'public')));
54
- if (settings.useRateLimit)
55
- __classPrivateFieldGet(this, _Server_expressApp, "f").use((0, express_rate_limit_1.default)({
56
- windowMs: settings.rateLimitPeriodInMs,
57
- limit: settings.rateLimit,
58
- handler: (_, res) => res.status(statusCodes_1.StatusCodes.TooManyRequests).json([{ message: 'Too Many Requests' }])
59
- }));
60
- if (settings.useSlowDown)
61
- __classPrivateFieldGet(this, _Server_expressApp, "f").use((0, express_slow_down_1.default)({
62
- windowMs: settings.slowDownPeriodInMs,
63
- delayAfter: settings.slowDownAfter,
64
- delayMs: settings.slowDownDelayInMs
65
- }));
66
- __classPrivateFieldGet(this, _Server_expressApp, "f").use((0, express_fileupload_1.default)({
67
- limits: { fileSize: settings.maxFileUploadSizeInMb * 1024 * 1024 },
68
- useTempFiles: false
69
- }));
70
- const socket = new socket_io_1.default.Server(__classPrivateFieldGet(this, _Server_httpServer, "f"), { cors: { origin: '*' } });
71
- __classPrivateFieldSet(this, _Server_listener, new listeners_1.Listener(socket, {
72
- onConnect: async () => { },
73
- onDisconnect: async () => { }
74
- }), "f");
75
- }
76
- get listener() {
77
- return __classPrivateFieldGet(this, _Server_listener, "f");
78
- }
79
- set routes(routes) {
80
- routes.forEach(({ method, path, global, controllers }) => {
81
- controllers = [parseAuthUser_1.parseAuthUser, ...controllers];
82
- if (!global)
83
- __classPrivateFieldGet(this, _Server_expressApp, "f")[method]?.((0, routes_1.formatPath)(path), ...controllers);
84
- else
85
- __classPrivateFieldGet(this, _Server_expressApp, "f").use(...controllers);
86
- });
87
- }
88
- register(router) {
89
- router.routes.forEach(({ method, path, global, controllers }) => {
90
- controllers = [parseAuthUser_1.parseAuthUser, ...controllers];
91
- if (!global)
92
- __classPrivateFieldGet(this, _Server_expressApp, "f")[method]?.(path, ...controllers);
93
- else
94
- __classPrivateFieldGet(this, _Server_expressApp, "f").use(...controllers);
95
- });
96
- }
97
- test() {
98
- return (0, supertest_1.default)(__classPrivateFieldGet(this, _Server_httpServer, "f"));
99
- }
100
- async start(port) {
101
- const postRoutesRouter = new routes_1.Router();
102
- postRoutesRouter.get({ path: '__health' })(async () => `${instance_1.Instance.get().settings.appId} service running`);
103
- postRoutesRouter.all({ global: true, middlewares: [middlewares_1.notFoundHandler] })();
104
- postRoutesRouter.all({ global: true, middlewares: [middlewares_1.errorHandler] })();
105
- this.register(postRoutesRouter);
106
- return await new Promise((resolve, reject) => {
107
- try {
108
- const app = __classPrivateFieldGet(this, _Server_httpServer, "f").listen(port, async () => {
109
- await instance_1.Instance.get().logger.success(`${instance_1.Instance.get().settings.appId} service listening on port`, port);
110
- resolve(true);
111
- });
112
- (0, exit_1.addWaitBeforeExit)(app.close);
113
- }
114
- catch (err) {
115
- reject(err);
116
- }
117
- });
118
- }
119
- }
120
- exports.Server = Server;
121
- _Server_expressApp = new WeakMap(), _Server_httpServer = new WeakMap(), _Server_listener = new WeakMap();
@@ -1,10 +0,0 @@
1
- import { ErrorRequestHandler, Handler } from 'express';
2
- import { Request as CustomRequest } from './request';
3
- import { Response } from './response';
4
- type CustomResponse<T> = Response<T> | T;
5
- export type Controller = Handler | ErrorRequestHandler;
6
- export type RouteHandler<T> = (req: CustomRequest) => Promise<CustomResponse<T>>;
7
- export declare const makeController: <T>(cb: RouteHandler<T>) => Controller;
8
- export declare const makeMiddleware: <T>(cb: RouteHandler<T>) => Controller;
9
- export declare const makeErrorMiddleware: <T>(cb: (_: CustomRequest, __: Error) => Promise<CustomResponse<T>>) => Controller;
10
- export {};
@@ -1,46 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.makeErrorMiddleware = exports.makeMiddleware = exports.makeController = void 0;
4
- const statusCodes_1 = require("../statusCodes");
5
- const request_1 = require("./request");
6
- const response_1 = require("./response");
7
- const makeController = (cb) => {
8
- return async (req, res, next) => {
9
- try {
10
- const rawResponse = await cb(await request_1.Request.make(req, res));
11
- const response = rawResponse instanceof response_1.Response ? rawResponse : new response_1.Response({ body: rawResponse });
12
- if (!response.piped) {
13
- Object.entries(response.headers).forEach(([key, value]) => res.header(key, value));
14
- const type = response.shouldJSONify ? 'json' : 'send';
15
- res.status(response.status)[type](response.body).end();
16
- }
17
- }
18
- catch (e) {
19
- next(e);
20
- }
21
- };
22
- };
23
- exports.makeController = makeController;
24
- const makeMiddleware = (cb) => {
25
- return async (req, res, next) => {
26
- try {
27
- await cb(await request_1.Request.make(req, res));
28
- return next();
29
- }
30
- catch (e) {
31
- return next(e);
32
- }
33
- };
34
- };
35
- exports.makeMiddleware = makeMiddleware;
36
- const makeErrorMiddleware = (cb) => {
37
- return async (err, req, res, _) => {
38
- const rawResponse = await cb(await request_1.Request.make(req, res), err);
39
- const response = rawResponse instanceof response_1.Response ? rawResponse : new response_1.Response({ body: rawResponse, status: statusCodes_1.StatusCodes.BadRequest });
40
- if (!response.piped) {
41
- Object.entries(response.headers).forEach(([key, value]) => res.header(key, value));
42
- res.status(response.status).send(response.body).end();
43
- }
44
- };
45
- };
46
- exports.makeErrorMiddleware = makeErrorMiddleware;
@@ -1,40 +0,0 @@
1
- /// <reference types="node" />
2
- import { Request as ExpressRequest, Response as ExpressResponse } from 'express';
3
- import { Writable } from 'stream';
4
- import { CustomError } from '../../errors';
5
- import { StorageFile } from '../../storage';
6
- import { AuthUser, RefreshUser } from '../../utils/authUser';
7
- import { Response } from './response';
8
- type HeaderKeys = 'AccessToken' | 'RefreshToken' | 'Referer' | 'ContentType' | 'UserAgent';
9
- export declare class Request {
10
- #private;
11
- private readonly rawRes;
12
- readonly ip: string | undefined;
13
- readonly method: string;
14
- readonly path: string;
15
- readonly body: Record<string, any>;
16
- readonly cookies: Record<string, any>;
17
- readonly rawBody: Record<string, any>;
18
- readonly params: Record<string, string>;
19
- readonly query: Record<string, any>;
20
- readonly headers: Record<HeaderKeys | string, string | null>;
21
- readonly files: Record<string, StorageFile[]>;
22
- authUser: null | AuthUser;
23
- refreshUser: null | RefreshUser;
24
- pendingError: null | CustomError;
25
- constructor({ ip, body, cookies, params, query, method, path, headers, files, data }: {
26
- ip: string | undefined;
27
- body: Record<string, any>;
28
- cookies: Record<string, any>;
29
- params: Record<string, any>;
30
- query: Record<string, any>;
31
- headers: Record<HeaderKeys | string, string | null>;
32
- files: Record<string, StorageFile[]>;
33
- method: string;
34
- path: string;
35
- data: Record<string, any>;
36
- }, rawRes: ExpressResponse);
37
- static make(req: ExpressRequest, res: ExpressResponse): Promise<Request>;
38
- pipe(cb: (stream: Writable) => void): Response<ExpressResponse<any, Record<string, any>>>;
39
- }
40
- export {};
@@ -1,85 +0,0 @@
1
- "use strict";
2
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
3
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
4
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
5
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
6
- };
7
- var _Request_instances, _Request_parseQueryStrings;
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.Request = void 0;
10
- const json_1 = require("../../utils/json");
11
- const media_1 = require("../../utils/media");
12
- const statusCodes_1 = require("../statusCodes");
13
- const response_1 = require("./response");
14
- class Request {
15
- constructor({ ip, body, cookies, params, query, method, path, headers, files, data }, rawRes) {
16
- _Request_instances.add(this);
17
- this.rawRes = rawRes;
18
- this.authUser = null;
19
- this.refreshUser = null;
20
- this.pendingError = null;
21
- this.ip = ip;
22
- this.method = method;
23
- this.path = path;
24
- this.rawBody = body;
25
- this.body = Object.fromEntries(Object.entries(body)
26
- .map(([key, value]) => [key, (0, json_1.parseJSONValue)(value)]));
27
- this.cookies = cookies;
28
- this.params = params;
29
- this.query = Object.fromEntries(Object.entries(query ?? {})
30
- .map(([key, val]) => [key, __classPrivateFieldGet(this, _Request_instances, "m", _Request_parseQueryStrings).call(this, val)]));
31
- if (this.query['auth'])
32
- delete this.query['auth'];
33
- if (this.query['authType'])
34
- delete this.query['authType'];
35
- this.headers = headers;
36
- this.files = files;
37
- this.authUser = data.authUser ?? null;
38
- this.refreshUser = data.refreshUser ?? null;
39
- }
40
- static async make(req, res) {
41
- const allHeaders = Object.fromEntries(Object.entries(req.headers).map(([key, val]) => [key, val ?? null]));
42
- const headers = {
43
- ...allHeaders,
44
- AccessToken: req.get('Access-Token') ?? null,
45
- RefreshToken: req.get('Refresh-Token') ?? null,
46
- ContentType: req.get('Content-Type') ?? null,
47
- Referer: req.get('referer') ?? null,
48
- UserAgent: req.get('User-Agent') ?? null
49
- };
50
- const files = Object.fromEntries(await Promise.all(Object.entries(req.files ?? {}).map(async ([key, file]) => {
51
- const fileArray = [];
52
- if (file)
53
- await Promise.all((Array.isArray(file) ? file : [file]).map(async (f) => fileArray.push({
54
- name: f.name,
55
- type: f.mimetype,
56
- size: f.size,
57
- isTruncated: f.truncated,
58
- data: f.data,
59
- duration: await (0, media_1.getMediaDuration)(f.data)
60
- })));
61
- return [key, fileArray];
62
- })));
63
- return req.savedReq || (req.savedReq = new Request({
64
- ip: req.ip,
65
- body: req.body ?? {},
66
- cookies: req.cookies ?? {},
67
- params: req.params ?? {},
68
- query: req.query ?? {},
69
- method: req.method,
70
- path: req.path,
71
- headers, files,
72
- data: {}
73
- }, res));
74
- }
75
- pipe(cb) {
76
- cb(this.rawRes);
77
- return new response_1.Response({ piped: true, status: statusCodes_1.StatusCodes.Ok, body: this.rawRes });
78
- }
79
- }
80
- exports.Request = Request;
81
- _Request_instances = new WeakSet(), _Request_parseQueryStrings = function _Request_parseQueryStrings(value) {
82
- if (Array.isArray(value))
83
- return value.map(__classPrivateFieldGet(this, _Request_instances, "m", _Request_parseQueryStrings));
84
- return (0, json_1.parseJSONValue)(value);
85
- };
@@ -1,14 +0,0 @@
1
- import { SupportedStatusCodes } from '../statusCodes';
2
- export declare class Response<T> {
3
- readonly body: T | undefined;
4
- readonly status: SupportedStatusCodes;
5
- readonly headers: Record<string, any>;
6
- readonly piped: boolean;
7
- constructor({ body, status, headers, piped }: {
8
- body?: T;
9
- status?: SupportedStatusCodes;
10
- headers?: Record<string, any>;
11
- piped?: boolean;
12
- });
13
- get shouldJSONify(): boolean;
14
- }
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Response = void 0;
4
- const statusCodes_1 = require("../statusCodes");
5
- class Response {
6
- constructor({ body, status = statusCodes_1.StatusCodes.Ok, headers = { 'Content-Type': 'application/json' }, piped = false }) {
7
- this.body = body;
8
- this.status = status;
9
- this.headers = headers;
10
- this.piped = piped;
11
- }
12
- get shouldJSONify() {
13
- return this.body === null || this.body === undefined;
14
- }
15
- }
16
- exports.Response = Response;
@@ -1,16 +0,0 @@
1
- import { Enum } from '../enums/types';
2
- export declare const StatusCodes: {
3
- readonly Ok: 200;
4
- readonly BadRequest: 400;
5
- readonly NotAuthenticated: 401;
6
- readonly NotAuthorized: 403;
7
- readonly NotFound: 404;
8
- readonly ValidationError: 422;
9
- readonly TooManyRequests: 429;
10
- readonly ServerError: 500;
11
- readonly AccountNotVerified: 460;
12
- readonly AccessTokenExpired: 461;
13
- readonly RefreshTokenMisused: 462;
14
- readonly InvalidToken: 463;
15
- };
16
- export type SupportedStatusCodes = Enum<typeof StatusCodes>;
@@ -1,17 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.StatusCodes = void 0;
4
- exports.StatusCodes = {
5
- Ok: 200,
6
- BadRequest: 400,
7
- NotAuthenticated: 401,
8
- NotAuthorized: 403,
9
- NotFound: 404,
10
- ValidationError: 422,
11
- TooManyRequests: 429,
12
- ServerError: 500,
13
- AccountNotVerified: 460,
14
- AccessTokenExpired: 461,
15
- RefreshTokenMisused: 462,
16
- InvalidToken: 463
17
- };