pangea-server 1.0.1

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 (150) hide show
  1. package/README.md +1 -0
  2. package/dist/authentication/access-token.class.d.ts +13 -0
  3. package/dist/authentication/access-token.class.js +28 -0
  4. package/dist/authentication/authentication.helpers.d.ts +17 -0
  5. package/dist/authentication/authentication.helpers.js +77 -0
  6. package/dist/authentication/authentication.types.d.ts +11 -0
  7. package/dist/authentication/authentication.types.js +2 -0
  8. package/dist/authentication/base-auth.class.d.ts +9 -0
  9. package/dist/authentication/base-auth.class.js +29 -0
  10. package/dist/authentication/index.d.ts +4 -0
  11. package/dist/authentication/index.js +20 -0
  12. package/dist/database/base-service.class.d.ts +15 -0
  13. package/dist/database/base-service.class.js +28 -0
  14. package/dist/database/database.helpers.d.ts +4 -0
  15. package/dist/database/database.helpers.js +19 -0
  16. package/dist/database/database.types.d.ts +59 -0
  17. package/dist/database/database.types.js +2 -0
  18. package/dist/database/db-client.d.ts +11 -0
  19. package/dist/database/db-client.js +69 -0
  20. package/dist/database/db.class.d.ts +64 -0
  21. package/dist/database/db.class.js +270 -0
  22. package/dist/database/decorators/columns/column.d.ts +10 -0
  23. package/dist/database/decorators/columns/column.js +47 -0
  24. package/dist/database/decorators/columns/date.columns.d.ts +4 -0
  25. package/dist/database/decorators/columns/date.columns.js +16 -0
  26. package/dist/database/decorators/columns/general.columns.d.ts +4 -0
  27. package/dist/database/decorators/columns/general.columns.js +54 -0
  28. package/dist/database/decorators/columns/json.columns.d.ts +3 -0
  29. package/dist/database/decorators/columns/json.columns.js +22 -0
  30. package/dist/database/decorators/columns/number.columns.d.ts +10 -0
  31. package/dist/database/decorators/columns/number.columns.js +33 -0
  32. package/dist/database/decorators/columns/string.columns.d.ts +10 -0
  33. package/dist/database/decorators/columns/string.columns.js +55 -0
  34. package/dist/database/decorators/index.d.ts +23 -0
  35. package/dist/database/decorators/index.js +50 -0
  36. package/dist/database/decorators/relations.d.ts +12 -0
  37. package/dist/database/decorators/relations.js +42 -0
  38. package/dist/database/decorators/table.d.ts +6 -0
  39. package/dist/database/decorators/table.js +57 -0
  40. package/dist/database/index.d.ts +8 -0
  41. package/dist/database/index.js +26 -0
  42. package/dist/database/init-database.d.ts +11 -0
  43. package/dist/database/init-database.js +69 -0
  44. package/dist/database/model-decorators/column.d.ts +11 -0
  45. package/dist/database/model-decorators/column.js +51 -0
  46. package/dist/database/model-decorators/date-columns.d.ts +6 -0
  47. package/dist/database/model-decorators/date-columns.js +41 -0
  48. package/dist/database/model-decorators/decorators.types.d.ts +20 -0
  49. package/dist/database/model-decorators/decorators.types.js +2 -0
  50. package/dist/database/model-decorators/general-columns.d.ts +4 -0
  51. package/dist/database/model-decorators/general-columns.js +54 -0
  52. package/dist/database/model-decorators/index.d.ts +23 -0
  53. package/dist/database/model-decorators/index.js +50 -0
  54. package/dist/database/model-decorators/json-columns.d.ts +3 -0
  55. package/dist/database/model-decorators/json-columns.js +46 -0
  56. package/dist/database/model-decorators/number-columns.d.ts +10 -0
  57. package/dist/database/model-decorators/number-columns.js +58 -0
  58. package/dist/database/model-decorators/relations.d.ts +12 -0
  59. package/dist/database/model-decorators/relations.js +42 -0
  60. package/dist/database/model-decorators/string-columns.d.ts +9 -0
  61. package/dist/database/model-decorators/string-columns.js +51 -0
  62. package/dist/database/model-decorators/table.d.ts +6 -0
  63. package/dist/database/model-decorators/table.js +57 -0
  64. package/dist/database/models/base-model.class.d.ts +33 -0
  65. package/dist/database/models/base-model.class.js +76 -0
  66. package/dist/database/models/index.d.ts +2 -0
  67. package/dist/database/models/index.js +18 -0
  68. package/dist/database/models/user.model.d.ts +5 -0
  69. package/dist/database/models/user.model.js +25 -0
  70. package/dist/database/seed.helpers.d.ts +4 -0
  71. package/dist/database/seed.helpers.js +44 -0
  72. package/dist/helpers/console.helpers.d.ts +8 -0
  73. package/dist/helpers/console.helpers.js +29 -0
  74. package/dist/helpers/controllers.helpers.d.ts +2 -0
  75. package/dist/helpers/controllers.helpers.js +6 -0
  76. package/dist/helpers/env.helpers.d.ts +4 -0
  77. package/dist/helpers/env.helpers.js +32 -0
  78. package/dist/helpers/error.helpers.d.ts +20 -0
  79. package/dist/helpers/error.helpers.js +29 -0
  80. package/dist/helpers/file.helpers.d.ts +4 -0
  81. package/dist/helpers/file.helpers.js +78 -0
  82. package/dist/helpers/hashing.helpers.d.ts +2 -0
  83. package/dist/helpers/hashing.helpers.js +16 -0
  84. package/dist/helpers/html-sanitize.helpers.d.ts +4 -0
  85. package/dist/helpers/html-sanitize.helpers.js +30 -0
  86. package/dist/helpers/index.d.ts +11 -0
  87. package/dist/helpers/index.js +27 -0
  88. package/dist/helpers/job.helpers.d.ts +8 -0
  89. package/dist/helpers/job.helpers.js +20 -0
  90. package/dist/helpers/mailer.helpers.d.ts +33 -0
  91. package/dist/helpers/mailer.helpers.js +34 -0
  92. package/dist/helpers/multer.helpers.d.ts +2 -0
  93. package/dist/helpers/multer.helpers.js +52 -0
  94. package/dist/helpers/print.helpers.d.ts +8 -0
  95. package/dist/helpers/print.helpers.js +29 -0
  96. package/dist/helpers/random.helpers.d.ts +4 -0
  97. package/dist/helpers/random.helpers.js +27 -0
  98. package/dist/index.d.ts +8 -0
  99. package/dist/index.js +26 -0
  100. package/dist/main.d.ts +13 -0
  101. package/dist/main.js +65 -0
  102. package/dist/middlewares/delay-request.middleware.d.ts +1 -0
  103. package/dist/middlewares/delay-request.middleware.js +16 -0
  104. package/dist/middlewares/handle-error.middleware.d.ts +1 -0
  105. package/dist/middlewares/handle-error.middleware.js +13 -0
  106. package/dist/resources/color.resources.d.ts +18 -0
  107. package/dist/resources/color.resources.js +20 -0
  108. package/dist/resources/index.d.ts +2 -0
  109. package/dist/resources/index.js +18 -0
  110. package/dist/resources/refs.d.ts +32 -0
  111. package/dist/resources/refs.js +35 -0
  112. package/dist/resources/string.resources.d.ts +15 -0
  113. package/dist/resources/string.resources.js +16 -0
  114. package/dist/router/app-router.class.d.ts +18 -0
  115. package/dist/router/app-router.class.js +34 -0
  116. package/dist/router/call-controller.d.ts +5 -0
  117. package/dist/router/call-controller.js +47 -0
  118. package/dist/router/index.d.ts +1 -0
  119. package/dist/router/index.js +17 -0
  120. package/dist/router/router.types.d.ts +15 -0
  121. package/dist/router/router.types.js +2 -0
  122. package/dist/types/error.types.d.ts +4 -0
  123. package/dist/types/error.types.js +2 -0
  124. package/dist/types/global.types.d.ts +22 -0
  125. package/dist/types/global.types.js +2 -0
  126. package/dist/types/index.d.ts +2 -0
  127. package/dist/types/index.js +4 -0
  128. package/dist/validations/general-schemas.d.ts +20 -0
  129. package/dist/validations/general-schemas.js +15 -0
  130. package/dist/validations/index.d.ts +3 -0
  131. package/dist/validations/index.js +19 -0
  132. package/dist/validations/validate-request.middleware.d.ts +2 -0
  133. package/dist/validations/validate-request.middleware.js +33 -0
  134. package/dist/validations/validation-locations.d.ts +1 -0
  135. package/dist/validations/validation-locations.js +4 -0
  136. package/dist/validations/validations.types.d.ts +23 -0
  137. package/dist/validations/validations.types.js +21 -0
  138. package/dist/validator/general-schemas.d.ts +1 -0
  139. package/dist/validator/general-schemas.js +25 -0
  140. package/dist/validator/index.d.ts +1 -0
  141. package/dist/validator/index.js +17 -0
  142. package/dist/validator/tags.d.ts +1 -0
  143. package/dist/validator/tags.js +5 -0
  144. package/dist/validator/validate-request.d.ts +2 -0
  145. package/dist/validator/validate-request.js +71 -0
  146. package/dist/validator/validator.types.d.ts +6 -0
  147. package/dist/validator/validator.types.js +2 -0
  148. package/dist/validator/validators.helpers.d.ts +38 -0
  149. package/dist/validator/validators.helpers.js +8 -0
  150. package/package.json +78 -0
@@ -0,0 +1,30 @@
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.getHtmlSanitized = exports.removeHtmlTags = exports.sanitizeHtml = void 0;
7
+ const jsdom_1 = require("jsdom");
8
+ const dompurify_1 = __importDefault(require("dompurify"));
9
+ // resources
10
+ const resources_1 = require("../resources");
11
+ // helpers
12
+ const error_helpers_1 = require("./error.helpers");
13
+ const { window } = new jsdom_1.JSDOM();
14
+ const domPurify = (0, dompurify_1.default)(window);
15
+ function sanitizeHtml(html) {
16
+ return domPurify.sanitize(html);
17
+ }
18
+ exports.sanitizeHtml = sanitizeHtml;
19
+ function removeHtmlTags(html) {
20
+ return domPurify.sanitize(html, { ALLOWED_TAGS: [] });
21
+ }
22
+ exports.removeHtmlTags = removeHtmlTags;
23
+ function getHtmlSanitized(html, maxLength = 'extraLong') {
24
+ const htmlLength = html ? removeHtmlTags(html).length : 0;
25
+ const finalMaxLength = typeof maxLength === 'number' ? maxLength : resources_1.STRING_LENGTHS[maxLength];
26
+ if (htmlLength > finalMaxLength)
27
+ error_helpers_1.AppError.Throw({ statusCodeName: 'BAD_REQUEST', errorCode: 'INVALID_INPUT_DATA' });
28
+ return html ? sanitizeHtml(html) : null;
29
+ }
30
+ exports.getHtmlSanitized = getHtmlSanitized;
@@ -0,0 +1,11 @@
1
+ export * from './controllers.helpers';
2
+ export * from './env.helpers';
3
+ export * from './error.helpers';
4
+ export * from './file.helpers';
5
+ export * from './hashing.helpers';
6
+ export * from './html-sanitize.helpers';
7
+ export * from './job.helpers';
8
+ export * from './mailer.helpers';
9
+ export * from './multer.helpers';
10
+ export * from './print.helpers';
11
+ export * from './random.helpers';
@@ -0,0 +1,27 @@
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
+ __exportStar(require("./controllers.helpers"), exports);
18
+ __exportStar(require("./env.helpers"), exports);
19
+ __exportStar(require("./error.helpers"), exports);
20
+ __exportStar(require("./file.helpers"), exports);
21
+ __exportStar(require("./hashing.helpers"), exports);
22
+ __exportStar(require("./html-sanitize.helpers"), exports);
23
+ __exportStar(require("./job.helpers"), exports);
24
+ __exportStar(require("./mailer.helpers"), exports);
25
+ __exportStar(require("./multer.helpers"), exports);
26
+ __exportStar(require("./print.helpers"), exports);
27
+ __exportStar(require("./random.helpers"), exports);
@@ -0,0 +1,8 @@
1
+ type RunFn = (tx: Tx) => Promise<void>;
2
+ export declare abstract class Job {
3
+ static Run(runFn: RunFn): () => Promise<void>;
4
+ }
5
+ export interface JobCtor {
6
+ Init(): void;
7
+ }
8
+ export {};
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Job = void 0;
4
+ const database_1 = require("../database");
5
+ class Job {
6
+ static Run(runFn) {
7
+ return async () => {
8
+ const tx = await (0, database_1.getDbClient)().transaction();
9
+ try {
10
+ await runFn(tx);
11
+ await tx.commit();
12
+ }
13
+ catch (err) {
14
+ await tx.rollback();
15
+ throw err;
16
+ }
17
+ };
18
+ }
19
+ }
20
+ exports.Job = Job;
@@ -0,0 +1,33 @@
1
+ /// <reference types="node" />
2
+ type MailerConfig = {
3
+ smtpProvider: string;
4
+ port: number;
5
+ auth: {
6
+ user: string;
7
+ pass: string;
8
+ };
9
+ };
10
+ type SendMailOptions = {
11
+ from?: string;
12
+ to: string | string[];
13
+ subject: string;
14
+ text?: string;
15
+ html?: string;
16
+ cc?: string | string[];
17
+ bcc?: string | string[];
18
+ attachments?: {
19
+ filename?: string;
20
+ content?: string | Buffer;
21
+ path?: string;
22
+ }[];
23
+ };
24
+ type SendMailConfig = {
25
+ throwError?: boolean;
26
+ };
27
+ export declare class Mailer {
28
+ private __transporter;
29
+ private __user;
30
+ constructor(config: MailerConfig);
31
+ sendMail(options: SendMailOptions, config?: SendMailConfig): Promise<any>;
32
+ }
33
+ export {};
@@ -0,0 +1,34 @@
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.Mailer = void 0;
7
+ const nodemailer_1 = __importDefault(require("nodemailer"));
8
+ class Mailer {
9
+ constructor(config) {
10
+ this.__transporter = nodemailer_1.default.createTransport({
11
+ host: `smtp.${config.smtpProvider}.com`,
12
+ port: config.port,
13
+ secure: config.port === 465,
14
+ auth: config.auth,
15
+ });
16
+ this.__user = config.auth.user;
17
+ }
18
+ async sendMail(options, config) {
19
+ try {
20
+ const mailOptions = {
21
+ ...options,
22
+ from: options.from || this.__user,
23
+ };
24
+ const res = await this.__transporter.sendMail(mailOptions);
25
+ return res;
26
+ }
27
+ catch (err) {
28
+ console.log('Error sending mail');
29
+ if (config?.throwError)
30
+ throw err;
31
+ }
32
+ }
33
+ }
34
+ exports.Mailer = Mailer;
@@ -0,0 +1,2 @@
1
+ export declare const uploadSingleImage: (req: Req, res: Res, next: Next) => void;
2
+ export declare const uploadMultipleImages: (req: Req, res: Res, next: Next) => void;
@@ -0,0 +1,52 @@
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.uploadMultipleImages = exports.uploadSingleImage = void 0;
7
+ const multer_1 = __importDefault(require("multer"));
8
+ // helpers
9
+ const helpers_1 = require("../helpers");
10
+ const storage = multer_1.default.memoryStorage();
11
+ const invalidInputDataError = new helpers_1.AppError({ statusCodeName: 'BAD_REQUEST', errorCode: 'INVALID_INPUT_DATA' });
12
+ exports.uploadSingleImage = createUploadImage('single');
13
+ exports.uploadMultipleImages = createUploadImage('multiple');
14
+ // internal functions
15
+ function createUploadImage(type) {
16
+ const map = {
17
+ single: {
18
+ method: 'single',
19
+ field: 'image',
20
+ check: (req) => req.file,
21
+ },
22
+ multiple: {
23
+ method: 'array',
24
+ field: 'images',
25
+ check: (req) => req.files,
26
+ },
27
+ };
28
+ const config = map[type];
29
+ return (req, res, next) => {
30
+ const upload = (0, multer_1.default)({ storage, fileFilter: getFileFilter('image') })[config.method](config.field);
31
+ upload(req, res, (err) => {
32
+ if (err) {
33
+ next(err);
34
+ return;
35
+ }
36
+ if (!config.check(req)) {
37
+ next(invalidInputDataError);
38
+ return;
39
+ }
40
+ next();
41
+ });
42
+ };
43
+ }
44
+ function getFileFilter(fileType) {
45
+ return function fileFilter(_req, file, next) {
46
+ if (!file.mimetype.startsWith(`${fileType}/`)) {
47
+ next(invalidInputDataError);
48
+ return;
49
+ }
50
+ next(null, true);
51
+ };
52
+ }
@@ -0,0 +1,8 @@
1
+ export declare function printInfo(label: string | undefined, msg: string): void;
2
+ export declare function printSuccess(label: string | undefined, msg: string): void;
3
+ export declare function printWarning(label: string | undefined, warning: string | Error): void;
4
+ type PrintDangerConfig = {
5
+ printError?: boolean;
6
+ };
7
+ export declare function printDanger(label: string | undefined, danger: string | Error, config?: PrintDangerConfig): void;
8
+ export {};
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.printDanger = exports.printWarning = exports.printSuccess = exports.printInfo = void 0;
4
+ function printInfo(label, msg) {
5
+ const finalLabel = label || 'info';
6
+ console.log(`\x1b[34m[${finalLabel}]\x1b[0m`, msg);
7
+ }
8
+ exports.printInfo = printInfo;
9
+ function printSuccess(label, msg) {
10
+ const finalLabel = label || 'success';
11
+ console.log(`\x1b[32m[${finalLabel}]\x1b[0m`, msg);
12
+ }
13
+ exports.printSuccess = printSuccess;
14
+ function printWarning(label, warning) {
15
+ const finalLabel = label || 'warning';
16
+ const msg = warning instanceof Error ? `${warning.name}: ${warning.message}` : warning;
17
+ console.warn(`\x1b[33m[${finalLabel}]\x1b[0m`, msg);
18
+ }
19
+ exports.printWarning = printWarning;
20
+ function printDanger(label, danger, config) {
21
+ const { printError } = config || {};
22
+ const finalLabel = label || 'danger';
23
+ const isError = danger instanceof Error;
24
+ const msg = isError ? `${danger.name}: ${danger.message}` : danger;
25
+ console.error(`\x1b[31m[${finalLabel}]\x1b[0m`, msg);
26
+ if (isError && printError)
27
+ console.error(danger);
28
+ }
29
+ exports.printDanger = printDanger;
@@ -0,0 +1,4 @@
1
+ import { type RandomStringLength } from '../resources';
2
+ export declare function getRandomString(length?: RandomStringLength | number): string;
3
+ export declare function getRandomNumber(length?: RandomStringLength | number): string;
4
+ export declare function generateBarcode(): string;
@@ -0,0 +1,27 @@
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.generateBarcode = exports.getRandomNumber = exports.getRandomString = void 0;
7
+ const crypto_1 = __importDefault(require("crypto"));
8
+ // resources
9
+ const resources_1 = require("../resources");
10
+ function getRandomString(length) {
11
+ const buffer = crypto_1.default.randomBytes(getSize(length));
12
+ return buffer.toString('hex');
13
+ }
14
+ exports.getRandomString = getRandomString;
15
+ function getRandomNumber(length) {
16
+ const buffer = crypto_1.default.randomBytes(getSize(length));
17
+ return [...buffer].map((b) => b % 10).join('');
18
+ }
19
+ exports.getRandomNumber = getRandomNumber;
20
+ function generateBarcode() {
21
+ return getRandomNumber(12);
22
+ }
23
+ exports.generateBarcode = generateBarcode;
24
+ // internal functions
25
+ function getSize(length = 'short') {
26
+ return typeof length === 'number' ? length : resources_1.RANDOM_STRING_LENGTHS[length];
27
+ }
@@ -0,0 +1,8 @@
1
+ export { startServer } from './main';
2
+ export * from './authentication';
3
+ export * from './database';
4
+ export * from './helpers';
5
+ export * from './resources';
6
+ export * from './router';
7
+ export * from './types';
8
+ export * from './validator';
package/dist/index.js ADDED
@@ -0,0 +1,26 @@
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.startServer = void 0;
18
+ var main_1 = require("./main");
19
+ Object.defineProperty(exports, "startServer", { enumerable: true, get: function () { return main_1.startServer; } });
20
+ __exportStar(require("./authentication"), exports);
21
+ __exportStar(require("./database"), exports);
22
+ __exportStar(require("./helpers"), exports);
23
+ __exportStar(require("./resources"), exports);
24
+ __exportStar(require("./router"), exports);
25
+ __exportStar(require("./types"), exports);
26
+ __exportStar(require("./validator"), exports);
package/dist/main.d.ts ADDED
@@ -0,0 +1,13 @@
1
+ import 'express-async-errors';
2
+ import type { SetRoutes } from './router/router.types';
3
+ import type { ConnectDatabase, DisconnectDatabase } from './database';
4
+ import type { JobCtor } from './helpers';
5
+ type StartServerConfig = {
6
+ setRoutes: SetRoutes;
7
+ connectDatabase: ConnectDatabase;
8
+ disconnectDatabase: DisconnectDatabase;
9
+ jobs?: JobCtor[];
10
+ afterDatabaseConnected?: () => void;
11
+ };
12
+ export declare function startServer(config: StartServerConfig): Promise<void>;
13
+ export {};
package/dist/main.js ADDED
@@ -0,0 +1,65 @@
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.startServer = void 0;
7
+ const express_1 = __importDefault(require("express"));
8
+ require("express-async-errors");
9
+ // middlewares
10
+ const morgan_1 = __importDefault(require("morgan"));
11
+ const cors_1 = __importDefault(require("cors"));
12
+ const helmet_1 = __importDefault(require("helmet"));
13
+ const express_rate_limit_1 = __importDefault(require("express-rate-limit"));
14
+ const compression_1 = __importDefault(require("compression"));
15
+ const delay_request_middleware_1 = require("./middlewares/delay-request.middleware");
16
+ const handle_error_middleware_1 = require("./middlewares/handle-error.middleware");
17
+ // helpers
18
+ const helpers_1 = require("./helpers");
19
+ async function startServer(config) {
20
+ const { setRoutes, connectDatabase, disconnectDatabase, jobs = [], afterDatabaseConnected } = config;
21
+ // app
22
+ const app = createApp(setRoutes);
23
+ // start the server
24
+ const PORT = (0, helpers_1.getEnvInt)('PORT', false) || 4000;
25
+ const server = app.listen(PORT, () => (0, helpers_1.printSuccess)('server', `server listening on port ${PORT}`));
26
+ // on stopping the server
27
+ process.on('SIGINT', handleSigint(server, disconnectDatabase));
28
+ // database
29
+ await connectDatabase();
30
+ afterDatabaseConnected?.();
31
+ jobs.forEach((job) => job.Init());
32
+ }
33
+ exports.startServer = startServer;
34
+ // internal functions
35
+ function createApp(setRoutes) {
36
+ // app
37
+ const app = (0, express_1.default)();
38
+ // middlewares
39
+ app.use((0, morgan_1.default)('dev'));
40
+ app.use((0, cors_1.default)());
41
+ app.use((0, helmet_1.default)());
42
+ app.use((0, express_rate_limit_1.default)({ windowMs: 10 * 1000, limit: 50 })); // 10 seg.
43
+ app.use((0, compression_1.default)());
44
+ app.use(express_1.default.json({ limit: '5mb' }));
45
+ app.use((0, delay_request_middleware_1.delayRequest)());
46
+ // routes
47
+ app.get('/', (_req, res) => res.send('App running...'));
48
+ setRoutes(app);
49
+ // handle error
50
+ app.use(handle_error_middleware_1.handleError);
51
+ // return
52
+ return app;
53
+ }
54
+ function handleSigint(server, disconnectDatabase) {
55
+ return async function () {
56
+ await disconnectDatabase();
57
+ try {
58
+ server.close();
59
+ }
60
+ catch (err) {
61
+ (0, helpers_1.printDanger)('server', err);
62
+ }
63
+ process.exit();
64
+ };
65
+ }
@@ -0,0 +1 @@
1
+ export declare function delayRequest(delayInSeconds?: number): (_req: Req, _res: Res, next: Next) => void;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.delayRequest = void 0;
4
+ // helpers
5
+ const helpers_1 = require("../helpers");
6
+ function delayRequest(delayInSeconds = 1) {
7
+ return function (_req, _res, next) {
8
+ if ((0, helpers_1.getEnvStr)('ENVIRONMENT') === 'development') {
9
+ const delay = 1000 * delayInSeconds;
10
+ setTimeout(next, delay);
11
+ return;
12
+ }
13
+ next();
14
+ };
15
+ }
16
+ exports.delayRequest = delayRequest;
@@ -0,0 +1 @@
1
+ export declare function handleError(err: Error, _req: Req, res: Res, next: Next): void;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleError = void 0;
4
+ const http_status_codes_1 = require("http-status-codes");
5
+ // helpers
6
+ const helpers_1 = require("../helpers");
7
+ function handleError(err, _req, res, next) {
8
+ (0, helpers_1.printDanger)(undefined, err, { printError: true });
9
+ const statusCode = err instanceof helpers_1.AppError ? err.statusCode : http_status_codes_1.StatusCodes.INTERNAL_SERVER_ERROR;
10
+ res.status(statusCode).json({ error: err });
11
+ next();
12
+ }
13
+ exports.handleError = handleError;
@@ -0,0 +1,18 @@
1
+ export declare const COLORS: {
2
+ readonly coralPink: "#FF6B6B";
3
+ readonly warmOrange: "#FF8855";
4
+ readonly mandarinOrange: "#FFB76A";
5
+ readonly cornYellow: "#FFD54D";
6
+ readonly oliveGreen: "#7A7F42";
7
+ readonly pistachioGreen: "#A6C566";
8
+ readonly aquaMarine: "#5FD4BB";
9
+ readonly polarMint: "#80C9B4";
10
+ readonly arcticBlue: "#7FAFDD";
11
+ readonly ceruleanBlue: "#007BA2";
12
+ readonly cobaltBlue: "#005493";
13
+ readonly smokyGray: "#5F6D6E";
14
+ readonly ashGray: "#A1B1B5";
15
+ readonly softMauve: "#B495C8";
16
+ readonly orchidPurple: "#C66CC6";
17
+ };
18
+ export type Colors = keyof typeof COLORS;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.COLORS = void 0;
4
+ exports.COLORS = {
5
+ coralPink: '#FF6B6B',
6
+ warmOrange: '#FF8855',
7
+ mandarinOrange: '#FFB76A',
8
+ cornYellow: '#FFD54D',
9
+ oliveGreen: '#7A7F42',
10
+ pistachioGreen: '#A6C566',
11
+ aquaMarine: '#5FD4BB',
12
+ polarMint: '#80C9B4',
13
+ arcticBlue: '#7FAFDD',
14
+ ceruleanBlue: '#007BA2',
15
+ cobaltBlue: '#005493',
16
+ smokyGray: '#5F6D6E',
17
+ ashGray: '#A1B1B5',
18
+ softMauve: '#B495C8',
19
+ orchidPurple: '#C66CC6',
20
+ };
@@ -0,0 +1,2 @@
1
+ export * from './color.resources';
2
+ export * from './string.resources';
@@ -0,0 +1,18 @@
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
+ __exportStar(require("./color.resources"), exports);
18
+ __exportStar(require("./string.resources"), exports);
@@ -0,0 +1,32 @@
1
+ export declare const refs: {
2
+ readonly stringLengths: {
3
+ readonly extraShort: 50;
4
+ readonly short: 100;
5
+ readonly medium: 250;
6
+ readonly long: 500;
7
+ readonly extraLong: 1000;
8
+ readonly ultraLong: 1500;
9
+ readonly hyperLong: 2000;
10
+ };
11
+ readonly randomStringLengths: {
12
+ readonly short: 32;
13
+ readonly long: 64;
14
+ };
15
+ readonly colors: {
16
+ readonly coralPink: "#FF6B6B";
17
+ readonly warmOrange: "#FF8855";
18
+ readonly mandarinOrange: "#FFB76A";
19
+ readonly cornYellow: "#FFD54D";
20
+ readonly oliveGreen: "#7A7F42";
21
+ readonly pistachioGreen: "#A6C566";
22
+ readonly aquaMarine: "#5FD4BB";
23
+ readonly polarMint: "#80C9B4";
24
+ readonly arcticBlue: "#7FAFDD";
25
+ readonly ceruleanBlue: "#007BA2";
26
+ readonly cobaltBlue: "#005493";
27
+ readonly smokyGray: "#5F6D6E";
28
+ readonly ashGray: "#A1B1B5";
29
+ readonly softMauve: "#B495C8";
30
+ readonly orchidPurple: "#C66CC6";
31
+ };
32
+ };
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.refs = void 0;
4
+ exports.refs = {
5
+ stringLengths: {
6
+ extraShort: 50,
7
+ short: 100,
8
+ medium: 250,
9
+ long: 500,
10
+ extraLong: 1000,
11
+ ultraLong: 1500,
12
+ hyperLong: 2000,
13
+ },
14
+ randomStringLengths: {
15
+ short: 32,
16
+ long: 64,
17
+ },
18
+ colors: {
19
+ coralPink: '#FF6B6B',
20
+ warmOrange: '#FF8855',
21
+ mandarinOrange: '#FFB76A',
22
+ cornYellow: '#FFD54D',
23
+ oliveGreen: '#7A7F42',
24
+ pistachioGreen: '#A6C566',
25
+ aquaMarine: '#5FD4BB',
26
+ polarMint: '#80C9B4',
27
+ arcticBlue: '#7FAFDD',
28
+ ceruleanBlue: '#007BA2',
29
+ cobaltBlue: '#005493',
30
+ smokyGray: '#5F6D6E',
31
+ ashGray: '#A1B1B5',
32
+ softMauve: '#B495C8',
33
+ orchidPurple: '#C66CC6',
34
+ },
35
+ };
@@ -0,0 +1,15 @@
1
+ export declare const STRING_LENGTHS: {
2
+ readonly extraShort: 50;
3
+ readonly short: 100;
4
+ readonly medium: 250;
5
+ readonly long: 500;
6
+ readonly extraLong: 1000;
7
+ readonly ultraLong: 1500;
8
+ readonly hyperLong: 2000;
9
+ };
10
+ export type StringLength = keyof typeof STRING_LENGTHS;
11
+ export declare const RANDOM_STRING_LENGTHS: {
12
+ readonly short: 32;
13
+ readonly long: 64;
14
+ };
15
+ export type RandomStringLength = keyof typeof RANDOM_STRING_LENGTHS;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RANDOM_STRING_LENGTHS = exports.STRING_LENGTHS = void 0;
4
+ exports.STRING_LENGTHS = {
5
+ extraShort: 50,
6
+ short: 100,
7
+ medium: 250,
8
+ long: 500,
9
+ extraLong: 1000,
10
+ ultraLong: 1500,
11
+ hyperLong: 2000,
12
+ };
13
+ exports.RANDOM_STRING_LENGTHS = {
14
+ short: 32,
15
+ long: 64,
16
+ };
@@ -0,0 +1,18 @@
1
+ import { Router } from 'express';
2
+ import { BaseAuth } from '../authentication';
3
+ import type { AuthMap, AuthUsers } from '../authentication/authentication.types';
4
+ import type { RouteValidator as Validator, RouteValidate as Validate } from '../validator/validator.types';
5
+ import type { SetRouteArgs, AuthConfig } from './router.types';
6
+ type ApiMethod = 'get' | 'post' | 'put' | 'patch' | 'delete';
7
+ export declare function getAppRouter<AM extends AuthMap, AU extends AuthUsers<AM>, BA extends BaseAuth<AM>>(authConfig: AuthConfig<AM, AU, BA>): {
8
+ new (app: App, basePath: string): {
9
+ router: Router;
10
+ setRoute<V extends Validator>(method: ApiMethod, path: string, validate: Validate<V>, ...args: SetRouteArgs<V, AM, BA>): void;
11
+ get<V_1 extends Validator>(path: string, validate: Validate<V_1>, ...args: SetRouteArgs<V_1, AM, BA>): void;
12
+ post<V_2 extends Validator>(path: string, validate: Validate<V_2>, ...args: SetRouteArgs<V_2, AM, BA>): void;
13
+ put<V_3 extends Validator>(path: string, validate: Validate<V_3>, ...args: SetRouteArgs<V_3, AM, BA>): void;
14
+ patch<V_4 extends Validator>(path: string, validate: Validate<V_4>, ...args: SetRouteArgs<V_4, AM, BA>): void;
15
+ delete<V_5 extends Validator>(path: string, validate: Validate<V_5>, ...args: SetRouteArgs<V_5, AM, BA>): void;
16
+ };
17
+ };
18
+ export {};