cqrs-boilerplate-code 1.0.0 → 1.0.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 (97) hide show
  1. package/dist/common-infra/common-infra.module.d.ts +4 -0
  2. package/dist/common-infra/common-infra.module.js +30 -0
  3. package/dist/common-infra/common-infra.module.js.map +1 -0
  4. package/dist/common-infra/database/database.module.d.ts +4 -0
  5. package/dist/common-infra/database/database.module.js +34 -0
  6. package/dist/common-infra/database/database.module.js.map +1 -0
  7. package/dist/common-infra/database/typeorm.config.d.ts +3 -0
  8. package/dist/common-infra/database/typeorm.config.js +18 -0
  9. package/dist/common-infra/database/typeorm.config.js.map +1 -0
  10. package/dist/common-infra/index.d.ts +2 -0
  11. package/dist/common-infra/index.js +19 -0
  12. package/dist/common-infra/index.js.map +1 -0
  13. package/dist/core-common/constant/app.constant.d.ts +2 -0
  14. package/dist/core-common/constant/app.constant.js +6 -0
  15. package/dist/core-common/constant/app.constant.js.map +1 -0
  16. package/dist/core-common/core-common.module.d.ts +4 -0
  17. package/dist/core-common/core-common.module.js +31 -0
  18. package/dist/core-common/core-common.module.js.map +1 -0
  19. package/dist/core-common/error/custom-error/already-exists.error.d.ts +4 -0
  20. package/dist/core-common/error/custom-error/already-exists.error.js +12 -0
  21. package/dist/core-common/error/custom-error/already-exists.error.js.map +1 -0
  22. package/dist/core-common/error/custom-error/bad-request.error.d.ts +4 -0
  23. package/dist/core-common/error/custom-error/bad-request.error.js +12 -0
  24. package/dist/core-common/error/custom-error/bad-request.error.js.map +1 -0
  25. package/dist/core-common/error/custom-error/conflict.error.d.ts +4 -0
  26. package/dist/core-common/error/custom-error/conflict.error.js +12 -0
  27. package/dist/core-common/error/custom-error/conflict.error.js.map +1 -0
  28. package/dist/core-common/error/custom-error/custom-validation-error.d.ts +5 -0
  29. package/dist/core-common/error/custom-error/custom-validation-error.js +13 -0
  30. package/dist/core-common/error/custom-error/custom-validation-error.js.map +1 -0
  31. package/dist/core-common/error/custom-error/forbidden.error.d.ts +4 -0
  32. package/dist/core-common/error/custom-error/forbidden.error.js +12 -0
  33. package/dist/core-common/error/custom-error/forbidden.error.js.map +1 -0
  34. package/dist/core-common/error/custom-error/internal-server.error.d.ts +4 -0
  35. package/dist/core-common/error/custom-error/internal-server.error.js +12 -0
  36. package/dist/core-common/error/custom-error/internal-server.error.js.map +1 -0
  37. package/dist/core-common/error/custom-error/not-found.error.d.ts +4 -0
  38. package/dist/core-common/error/custom-error/not-found.error.js +12 -0
  39. package/dist/core-common/error/custom-error/not-found.error.js.map +1 -0
  40. package/dist/core-common/error/custom-error/service-unavailable.error.d.ts +4 -0
  41. package/dist/core-common/error/custom-error/service-unavailable.error.js +12 -0
  42. package/dist/core-common/error/custom-error/service-unavailable.error.js.map +1 -0
  43. package/dist/core-common/error/custom-error/unauthorized.error.d.ts +4 -0
  44. package/dist/core-common/error/custom-error/unauthorized.error.js +12 -0
  45. package/dist/core-common/error/custom-error/unauthorized.error.js.map +1 -0
  46. package/dist/core-common/error/custom-error/unprocess-entity.error.d.ts +4 -0
  47. package/dist/core-common/error/custom-error/unprocess-entity.error.js +12 -0
  48. package/dist/core-common/error/custom-error/unprocess-entity.error.js.map +1 -0
  49. package/dist/core-common/error/custom-error/validation.error.d.ts +4 -0
  50. package/dist/core-common/error/custom-error/validation.error.js +12 -0
  51. package/dist/core-common/error/custom-error/validation.error.js.map +1 -0
  52. package/dist/core-common/error/generic.error.d.ts +7 -0
  53. package/dist/core-common/error/generic.error.js +38 -0
  54. package/dist/core-common/error/generic.error.js.map +1 -0
  55. package/dist/core-common/error/index.d.ts +10 -0
  56. package/dist/core-common/error/index.js +27 -0
  57. package/dist/core-common/error/index.js.map +1 -0
  58. package/dist/core-common/index.d.ts +12 -0
  59. package/dist/core-common/index.js +29 -0
  60. package/dist/core-common/index.js.map +1 -0
  61. package/dist/core-common/logger/logger.interface.d.ts +7 -0
  62. package/dist/core-common/logger/logger.interface.js +3 -0
  63. package/dist/core-common/logger/logger.interface.js.map +1 -0
  64. package/dist/core-common/logger/logger.module.d.ts +6 -0
  65. package/dist/core-common/logger/logger.module.js +33 -0
  66. package/dist/core-common/logger/logger.module.js.map +1 -0
  67. package/dist/core-common/logger/logger.service.d.ts +29 -0
  68. package/dist/core-common/logger/logger.service.js +125 -0
  69. package/dist/core-common/logger/logger.service.js.map +1 -0
  70. package/dist/core-common/response-model/generic-error-response.model.d.ts +15 -0
  71. package/dist/core-common/response-model/generic-error-response.model.js +33 -0
  72. package/dist/core-common/response-model/generic-error-response.model.js.map +1 -0
  73. package/dist/core-common/response-model/generic-success-response.model.d.ts +8 -0
  74. package/dist/core-common/response-model/generic-success-response.model.js +17 -0
  75. package/dist/core-common/response-model/generic-success-response.model.js.map +1 -0
  76. package/dist/core-common/result-model/result.d.ts +10 -0
  77. package/dist/core-common/result-model/result.js +38 -0
  78. package/dist/core-common/result-model/result.js.map +1 -0
  79. package/dist/tsconfig.build.tsbuildinfo +1 -0
  80. package/package.json +1 -1
  81. package/src/common-infra/common-infra.module.ts +15 -7
  82. package/src/common-infra/database/database.module.ts +20 -12
  83. package/src/common-infra/index.ts +2 -0
  84. package/src/core-common/core-common.module.ts +18 -8
  85. package/src/core-common/index.ts +13 -0
  86. package/src/core-common/logger/logger.interface.ts +8 -0
  87. package/src/core-common/logger/logger.module.ts +22 -7
  88. package/.prettierrc +0 -0
  89. package/nest-cli.json +0 -8
  90. package/src/core-common/logger/logger.provider.ts +0 -7
  91. package/src/middleware/async-storage.middleware.ts +0 -29
  92. package/src/middleware/filter/global-exeception.filter.ts +0 -117
  93. package/src/middleware/index.ts +0 -2
  94. package/src/middleware/interceptor/response-handler.ts +0 -69
  95. package/src/middleware/platform-auth.middleware.ts +0 -13
  96. package/src/middleware/utils/http-response.formatter.ts +0 -126
  97. /package/src/core-common/logger/{index.ts → logger.service.ts} +0 -0
@@ -0,0 +1,29 @@
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("./constant/app.constant"), exports);
18
+ __exportStar(require("./error/custom-error/already-exists.error"), exports);
19
+ __exportStar(require("./error/custom-error/not-found.error"), exports);
20
+ __exportStar(require("./error/custom-error/validation.error"), exports);
21
+ __exportStar(require("./error/custom-error/internal-server.error"), exports);
22
+ __exportStar(require("./error/custom-error/unauthorized.error"), exports);
23
+ __exportStar(require("./error/custom-error/service-unavailable.error"), exports);
24
+ __exportStar(require("./error/generic.error"), exports);
25
+ __exportStar(require("./result-model/result"), exports);
26
+ __exportStar(require("./response-model/generic-error-response.model"), exports);
27
+ __exportStar(require("./response-model/generic-success-response.model"), exports);
28
+ __exportStar(require("./core-common.module"), exports);
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core-common/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0DAAuC;AACvC,4EAAyD;AACzD,uEAAoD;AACpD,wEAAqD;AACrD,6EAA0D;AAC1D,0EAAuD;AACvD,iFAA8D;AAC9D,wDAAqC;AACrC,wDAAqC;AACrC,gFAA6D;AAC7D,kFAA+D;AAE/D,uDAAoC","sourcesContent":["export * from './constant/app.constant'\nexport * from './error/custom-error/already-exists.error'\nexport * from './error/custom-error/not-found.error'\nexport * from './error/custom-error/validation.error'\nexport * from './error/custom-error/internal-server.error'\nexport * from './error/custom-error/unauthorized.error'\nexport * from './error/custom-error/service-unavailable.error'\nexport * from './error/generic.error'\nexport * from './result-model/result'\nexport * from './response-model/generic-error-response.model'\nexport * from './response-model/generic-success-response.model'\n\nexport * from './core-common.module'"]}
@@ -0,0 +1,7 @@
1
+ export interface LoggerModuleOptions {
2
+ level?: string;
3
+ deploymentEnv?: string;
4
+ serviceVersion?: string;
5
+ otelAgentHost?: string;
6
+ overrideConsole?: boolean;
7
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=logger.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.interface.js","sourceRoot":"","sources":["../../../src/core-common/logger/logger.interface.ts"],"names":[],"mappings":"","sourcesContent":["// src/logger/logger.options.ts\nexport interface LoggerModuleOptions {\n level?: string;\n deploymentEnv?: string;\n serviceVersion?: string;\n otelAgentHost?: string;\n overrideConsole?: boolean;\n}"]}
@@ -0,0 +1,6 @@
1
+ import { DynamicModule } from "@nestjs/common";
2
+ import { LoggerModuleOptions } from "./logger.interface";
3
+ export declare const LOGGER_OPTIONS: unique symbol;
4
+ export declare class LoggerModule {
5
+ static forRoot(options?: LoggerModuleOptions): DynamicModule;
6
+ }
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var LoggerModule_1;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.LoggerModule = exports.LOGGER_OPTIONS = void 0;
11
+ const common_1 = require("@nestjs/common");
12
+ const logger_service_1 = require("./logger.service");
13
+ exports.LOGGER_OPTIONS = Symbol("LOGGER_OPTIONS");
14
+ let LoggerModule = LoggerModule_1 = class LoggerModule {
15
+ static forRoot(options = {}) {
16
+ return {
17
+ module: LoggerModule_1,
18
+ providers: [
19
+ logger_service_1.LoggerService,
20
+ {
21
+ provide: exports.LOGGER_OPTIONS,
22
+ useValue: options,
23
+ },
24
+ ],
25
+ exports: [logger_service_1.LoggerService],
26
+ };
27
+ }
28
+ };
29
+ exports.LoggerModule = LoggerModule;
30
+ exports.LoggerModule = LoggerModule = LoggerModule_1 = __decorate([
31
+ (0, common_1.Module)({})
32
+ ], LoggerModule);
33
+ //# sourceMappingURL=logger.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.module.js","sourceRoot":"","sources":["../../../src/core-common/logger/logger.module.ts"],"names":[],"mappings":";;;;;;;;;;AACA,2CAAuD;AACvD,qDAAiD;AAGpC,QAAA,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAGhD,IAAM,YAAY,oBAAlB,MAAM,YAAY;IACvB,MAAM,CAAC,OAAO,CAAC,UAA+B,EAAE;QAC9C,OAAO;YACL,MAAM,EAAE,cAAY;YACpB,SAAS,EAAE;gBACT,8BAAa;gBACb;oBACE,OAAO,EAAE,sBAAc;oBACvB,QAAQ,EAAE,OAAO;iBAClB;aACF;YACD,OAAO,EAAE,CAAC,8BAAa,CAAC;SACzB,CAAC;IACJ,CAAC;CACF,CAAA;AAdY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,YAAY,CAcxB","sourcesContent":["// src/logger/logger.module.ts\nimport { DynamicModule, Module } from \"@nestjs/common\";\nimport { LoggerService } from \"./logger.service\";\nimport { LoggerModuleOptions } from \"./logger.interface\";\n\nexport const LOGGER_OPTIONS = Symbol(\"LOGGER_OPTIONS\");\n\n@Module({})\nexport class LoggerModule {\n static forRoot(options: LoggerModuleOptions = {}): DynamicModule {\n return {\n module: LoggerModule,\n providers: [\n LoggerService,\n {\n provide: LOGGER_OPTIONS,\n useValue: options,\n },\n ],\n exports: [LoggerService],\n };\n }\n}\n"]}
@@ -0,0 +1,29 @@
1
+ type LogMetadata = {
2
+ ClassName?: string;
3
+ MethodName?: string;
4
+ };
5
+ export type OrgContext = {
6
+ orgId?: string;
7
+ orgFid?: string;
8
+ userId?: string;
9
+ };
10
+ export declare class LoggerService {
11
+ private readonly logger;
12
+ private readonly deploymentEnv;
13
+ private readonly hostImageVersion;
14
+ private readonly otelAgentHost;
15
+ constructor(logLevel?: string);
16
+ log(message: string, metadata?: LogMetadata): void;
17
+ debug(message: string, metadata?: LogMetadata): void;
18
+ warn(message: string, metadata?: LogMetadata): void;
19
+ error(message: string, metadata?: LogMetadata, error?: Error): void;
20
+ private write;
21
+ private createLogger;
22
+ private buildAttributes;
23
+ private cleanMeta;
24
+ private safeStringify;
25
+ private circularReplacer;
26
+ private redactSecrets;
27
+ private overrideConsole;
28
+ }
29
+ export {};
@@ -0,0 +1,125 @@
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.LoggerService = void 0;
7
+ const winston_1 = __importDefault(require("winston"));
8
+ var SeverityText;
9
+ (function (SeverityText) {
10
+ SeverityText["INFO"] = "Information";
11
+ SeverityText["DEBUG"] = "Debug";
12
+ SeverityText["WARNING"] = "Warning";
13
+ SeverityText["ERROR"] = "Error";
14
+ })(SeverityText || (SeverityText = {}));
15
+ class LoggerService {
16
+ logger;
17
+ deploymentEnv;
18
+ hostImageVersion;
19
+ otelAgentHost;
20
+ constructor(logLevel = "debug") {
21
+ this.deploymentEnv = "rls-dev";
22
+ this.hostImageVersion = process.env.SERVICE_VERSION ?? "202501.1";
23
+ this.otelAgentHost = process.env.OTEL_AGENT_HOST ?? "10.0.0.1";
24
+ this.logger = this.createLogger(logLevel);
25
+ this.overrideConsole();
26
+ }
27
+ log(message, metadata) {
28
+ this.write("info", SeverityText.INFO, message, metadata);
29
+ }
30
+ debug(message, metadata) {
31
+ this.write("debug", SeverityText.DEBUG, message, metadata);
32
+ }
33
+ warn(message, metadata) {
34
+ this.write("warn", SeverityText.WARNING, message, metadata);
35
+ }
36
+ error(message, metadata, error) {
37
+ this.write("error", SeverityText.ERROR, message, metadata, error);
38
+ }
39
+ write(level, severity, message, metadata = {}, error) {
40
+ const body = {
41
+ SeverityText: severity,
42
+ ...metadata,
43
+ ...(error && {
44
+ ErrorMessage: error.message,
45
+ StackTrace: error.stack,
46
+ }),
47
+ };
48
+ this.logger[level](this.redactSecrets(message), body);
49
+ }
50
+ createLogger(level) {
51
+ return winston_1.default.createLogger({
52
+ level,
53
+ levels: winston_1.default.config.npm.levels,
54
+ format: winston_1.default.format.combine(winston_1.default.format.timestamp({ format: "YYYY-MM-DD HH:mm:ss" }), winston_1.default.format.printf(({ level, message, timestamp, ...meta }) => JSON.stringify({
55
+ message: this.safeStringify(message),
56
+ attributes: this.buildAttributes(level),
57
+ timestamp: timestamp,
58
+ ...this.cleanMeta(meta),
59
+ }))),
60
+ transports: [new winston_1.default.transports.Console()],
61
+ });
62
+ }
63
+ buildAttributes(level) {
64
+ return {
65
+ "service.image.version": this.hostImageVersion,
66
+ "deployment.environment": this.deploymentEnv,
67
+ "otel.agent.host": this.otelAgentHost,
68
+ "service.log.level": level,
69
+ };
70
+ }
71
+ cleanMeta(meta) {
72
+ return Object.fromEntries(Object.entries(meta).filter(([_, value]) => value !== undefined && value !== "None"));
73
+ }
74
+ safeStringify(input) {
75
+ try {
76
+ return typeof input === "string"
77
+ ? input
78
+ : JSON.stringify(input, this.circularReplacer());
79
+ }
80
+ catch {
81
+ return "[Unserializable Object]";
82
+ }
83
+ }
84
+ circularReplacer() {
85
+ const seen = new WeakSet();
86
+ return (_, value) => {
87
+ if (typeof value === "object" && value !== null) {
88
+ if (seen.has(value))
89
+ return "[Circular]";
90
+ seen.add(value);
91
+ }
92
+ return value;
93
+ };
94
+ }
95
+ redactSecrets(message) {
96
+ const patterns = [
97
+ {
98
+ name: "JWT",
99
+ regex: /eyJ[a-zA-Z0-9-_]+\.[a-zA-Z0-9-_]+\.[a-zA-Z0-9-_]+/g,
100
+ visible: 10,
101
+ },
102
+ {
103
+ name: "BEARER",
104
+ regex: /Bearer\s+eyJ[A-Za-z0-9\-._~+/]+=*/gi,
105
+ visible: 15,
106
+ },
107
+ { name: "API_KEY", regex: /\b[A-Za-z0-9]{32,}\b/g, visible: 8 },
108
+ { name: "AWS_SECRET", regex: /AKIA[0-9A-Z]{16}/g, visible: 8 },
109
+ ];
110
+ return patterns.reduce((msg, { regex, visible, name }) => {
111
+ return msg.replace(regex, (m) => `${m.slice(0, visible)}...[REDACTED_${name}]`);
112
+ }, message);
113
+ }
114
+ overrideConsole() {
115
+ const blocked = ["NodeSDK", "AuthToken"];
116
+ console.log = (...args) => {
117
+ const msg = args.map(String).join(" ");
118
+ if (blocked.some((k) => msg.includes(k)))
119
+ return;
120
+ this.log(msg);
121
+ };
122
+ }
123
+ }
124
+ exports.LoggerService = LoggerService;
125
+ //# sourceMappingURL=logger.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.service.js","sourceRoot":"","sources":["../../../src/core-common/logger/logger.service.ts"],"names":[],"mappings":"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","sourcesContent":["import winston, { Logger } from \"winston\";\n\n/* ---------------------------------- Types --------------------------------- */\n\nenum SeverityText {\n INFO = \"Information\",\n DEBUG = \"Debug\",\n WARNING = \"Warning\",\n ERROR = \"Error\",\n}\n\ntype LogMetadata = {\n ClassName?: string;\n MethodName?: string;\n};\n\nexport type OrgContext = {\n orgId?: string;\n orgFid?: string;\n userId?: string;\n};\n\n/* --------------------------------- Service -------------------------------- */\n\nexport class LoggerService {\n private readonly logger: Logger;\n private readonly deploymentEnv: string;\n private readonly hostImageVersion: string;\n private readonly otelAgentHost: string;\n\n constructor(logLevel: string = \"debug\") {\n this.deploymentEnv = \"rls-dev\";\n this.hostImageVersion = process.env.SERVICE_VERSION ?? \"202501.1\";\n this.otelAgentHost = process.env.OTEL_AGENT_HOST ?? \"10.0.0.1\";\n this.logger = this.createLogger(logLevel);\n this.overrideConsole();\n }\n\n /* ------------------------------- Public API ------------------------------- */\n\n log(message: string, metadata?: LogMetadata) {\n this.write(\"info\", SeverityText.INFO, message, metadata);\n }\n\n debug(message: string, metadata?: LogMetadata) {\n this.write(\"debug\", SeverityText.DEBUG, message, metadata);\n }\n\n warn(message: string, metadata?: LogMetadata) {\n this.write(\"warn\", SeverityText.WARNING, message, metadata);\n }\n\n error(message: string, metadata?: LogMetadata, error?: Error) {\n this.write(\"error\", SeverityText.ERROR, message, metadata, error);\n }\n\n /* ------------------------------ Logger Core ------------------------------ */\n\n private write(\n level: keyof Logger,\n severity: SeverityText,\n message: string,\n metadata: LogMetadata = {},\n error?: Error,\n ) {\n const body = {\n SeverityText: severity,\n ...metadata,\n ...(error && {\n ErrorMessage: error.message,\n StackTrace: error.stack,\n }),\n };\n\n this.logger[level](this.redactSecrets(message), body);\n }\n\n private createLogger(level: string): Logger {\n return winston.createLogger({\n level,\n levels: winston.config.npm.levels,\n format: winston.format.combine(\n winston.format.timestamp({ format: \"YYYY-MM-DD HH:mm:ss\" }),\n winston.format.printf(({ level, message, timestamp, ...meta }) =>\n JSON.stringify({\n message: this.safeStringify(message),\n attributes: this.buildAttributes(level),\n timestamp: timestamp,\n ...this.cleanMeta(meta),\n }),\n ),\n ),\n transports: [new winston.transports.Console()],\n });\n }\n\n /* ------------------------------- Context -------------------------------- */\n\n private buildAttributes(level: string) {\n return {\n \"service.image.version\": this.hostImageVersion,\n \"deployment.environment\": this.deploymentEnv,\n \"otel.agent.host\": this.otelAgentHost,\n \"service.log.level\": level,\n };\n }\n\n /* ------------------------------- Helpers -------------------------------- */\n\n private cleanMeta(meta: Record<string, unknown>) {\n return Object.fromEntries(\n Object.entries(meta).filter(\n ([_, value]) => value !== undefined && value !== \"None\",\n ),\n );\n }\n\n private safeStringify(input: unknown): string {\n try {\n return typeof input === \"string\"\n ? input\n : JSON.stringify(input, this.circularReplacer());\n } catch {\n return \"[Unserializable Object]\";\n }\n }\n\n private circularReplacer() {\n const seen = new WeakSet();\n return (_: string, value: any) => {\n if (typeof value === \"object\" && value !== null) {\n if (seen.has(value)) return \"[Circular]\";\n seen.add(value);\n }\n return value;\n };\n }\n\n /* ----------------------------- Redaction -------------------------------- */\n\n private redactSecrets(message: string): string {\n const patterns = [\n {\n name: \"JWT\",\n regex: /eyJ[a-zA-Z0-9-_]+\\.[a-zA-Z0-9-_]+\\.[a-zA-Z0-9-_]+/g,\n visible: 10,\n },\n {\n name: \"BEARER\",\n regex: /Bearer\\s+eyJ[A-Za-z0-9\\-._~+/]+=*/gi,\n visible: 15,\n },\n { name: \"API_KEY\", regex: /\\b[A-Za-z0-9]{32,}\\b/g, visible: 8 },\n { name: \"AWS_SECRET\", regex: /AKIA[0-9A-Z]{16}/g, visible: 8 },\n ];\n\n return patterns.reduce((msg, { regex, visible, name }) => {\n return msg.replace(\n regex,\n (m) => `${m.slice(0, visible)}...[REDACTED_${name}]`,\n );\n }, message);\n }\n\n /* --------------------------- Console Override ---------------------------- */\n\n private overrideConsole() {\n const blocked = [\"NodeSDK\", \"AuthToken\"];\n console.log = (...args: unknown[]) => {\n const msg = args.map(String).join(\" \");\n if (blocked.some((k) => msg.includes(k))) return;\n this.log(msg);\n };\n }\n}\n"]}
@@ -0,0 +1,15 @@
1
+ import { Result } from "../result-model/result";
2
+ export declare class ErrorDisplay {
3
+ code: string;
4
+ message: string;
5
+ validationError?: any;
6
+ }
7
+ export declare class GenericErrorResponse {
8
+ statusCode: number;
9
+ success: boolean;
10
+ error: ErrorDisplay;
11
+ timestamp: string;
12
+ data: any;
13
+ constructor();
14
+ initialize(result: Result<any>, statusCode: number): void;
15
+ }
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GenericErrorResponse = exports.ErrorDisplay = void 0;
4
+ class ErrorDisplay {
5
+ code;
6
+ message;
7
+ validationError;
8
+ }
9
+ exports.ErrorDisplay = ErrorDisplay;
10
+ class GenericErrorResponse {
11
+ statusCode;
12
+ success = false;
13
+ error;
14
+ timestamp;
15
+ data;
16
+ constructor() {
17
+ this.statusCode = 500;
18
+ this.success = false;
19
+ this.timestamp = new Date().toISOString();
20
+ }
21
+ initialize(result, statusCode) {
22
+ this.statusCode = statusCode;
23
+ this.error = {
24
+ code: result.error?.code || "ERROR",
25
+ message: result.error?.message || "An error occurred.",
26
+ };
27
+ this.data = result.data;
28
+ this.success = result.success || false;
29
+ this.timestamp = result.timestamp || new Date().toISOString();
30
+ }
31
+ }
32
+ exports.GenericErrorResponse = GenericErrorResponse;
33
+ //# sourceMappingURL=generic-error-response.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic-error-response.model.js","sourceRoot":"","sources":["../../../src/core-common/response-model/generic-error-response.model.ts"],"names":[],"mappings":";;;AAQA,MAAa,YAAY;IACvB,IAAI,CAAS;IACb,OAAO,CAAS;IAChB,eAAe,CAAO;CACvB;AAJD,oCAIC;AACD,MAAa,oBAAoB;IAC/B,UAAU,CAAS;IACnB,OAAO,GAAY,KAAK,CAAC;IACzB,KAAK,CAAe;IACpB,SAAS,CAAS;IAClB,IAAI,CAAM;IAEV;QACE,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC5C,CAAC;IAMD,UAAU,CACR,MAAmB,EACnB,UAAkB;QAElB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG;YACX,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,IAAI,OAAO;YACnC,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,oBAAoB;SACvD,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;QACvB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC;QACvC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAChE,CAAC;CACF;AA9BD,oDA8BC","sourcesContent":["import { Result } from \"../result-model/result\";\n\n/**\n * Standard error response to be returned to the caller of the API.\n * This class represents the structure of an error response returned by the API\n * in case of failures.\n */\n\nexport class ErrorDisplay {\n code: string;\n message: string;\n validationError?: any;\n}\nexport class GenericErrorResponse {\n statusCode: number;\n success: boolean = false;\n error: ErrorDisplay;\n timestamp: string;\n data: any;\n\n constructor() {\n this.statusCode = 500; // Default value\n this.success = false;\n this.timestamp = new Date().toISOString(); // Default value\n }\n /**\n * Sets the properties from the Result object.\n * @param result - Result object instance returned from the controller method.\n * @param statusCode - HTTP status code.\n */\n initialize(\n result: Result<any>,\n statusCode: number,\n ) {\n this.statusCode = statusCode;\n this.error = {\n code: result.error?.code || \"ERROR\",\n message: result.error?.message || \"An error occurred.\",\n };\n this.data = result.data\n this.success = result.success || false;\n this.timestamp = result.timestamp || new Date().toISOString();\n }\n}\n"]}
@@ -0,0 +1,8 @@
1
+ import { Result } from "../result-model/result";
2
+ export declare class GenericSuccessResponse<T> {
3
+ statusCode: number;
4
+ success: boolean;
5
+ data: T;
6
+ timestamp: string;
7
+ initialize(result: Result<T>, statusCode: number): void;
8
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GenericSuccessResponse = void 0;
4
+ class GenericSuccessResponse {
5
+ statusCode;
6
+ success;
7
+ data;
8
+ timestamp;
9
+ initialize(result, statusCode) {
10
+ this.statusCode = statusCode;
11
+ this.success = result.success;
12
+ this.data = result.data;
13
+ this.timestamp = new Date().toISOString();
14
+ }
15
+ }
16
+ exports.GenericSuccessResponse = GenericSuccessResponse;
17
+ //# sourceMappingURL=generic-success-response.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic-success-response.model.js","sourceRoot":"","sources":["../../../src/core-common/response-model/generic-success-response.model.ts"],"names":[],"mappings":";;;AAOA,MAAa,sBAAsB;IACjC,UAAU,CAAS;IACnB,OAAO,CAAU;IACjB,IAAI,CAAI;IACR,SAAS,CAAS;IAOlB,UAAU,CAAC,MAAiB,EAAE,UAAkB;QAC9C,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC5C,CAAC;CACF;AAjBD,wDAiBC","sourcesContent":["import { Result } from \"../result-model/result\";\n\n/**\n * Standard response object to be returned to the caller of the API.\n * This class represents the structure of a success response returned by the API.\n * @typeparam T - The type of data included in the response.\n */\nexport class GenericSuccessResponse<T> {\n statusCode: number;\n success: boolean;\n data: T;\n timestamp: string;\n\n /**\n * Sets the properties from the Result object.\n * @param result - Result object instance returned from the controller method.\n * @param statusCode - HTTP status code.\n */\n initialize(result: Result<T>, statusCode: number) {\n this.statusCode = statusCode;\n this.success = result.success;\n this.data = result.data;\n this.timestamp = new Date().toISOString();\n }\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import { GenericError } from "../error/generic.error";
2
+ export declare class Result<T> {
3
+ success: boolean;
4
+ data: T;
5
+ error: GenericError;
6
+ timestamp: string;
7
+ static success<T>(data: T): Result<T>;
8
+ static failed<T>(error: GenericError, data?: T): Result<T>;
9
+ static throwError<T>(error: GenericError, data?: T): Result<T>;
10
+ }
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Result = void 0;
4
+ class Result {
5
+ success;
6
+ data;
7
+ error;
8
+ timestamp;
9
+ static success(data) {
10
+ const result = new Result();
11
+ result.success = true;
12
+ result.data = data;
13
+ result.timestamp = new Date().toISOString();
14
+ return result;
15
+ }
16
+ static failed(error, data) {
17
+ const result = new Result();
18
+ result.success = false;
19
+ result.timestamp = new Date().toISOString();
20
+ result.error = error;
21
+ if (data) {
22
+ result.data = data;
23
+ }
24
+ return result;
25
+ }
26
+ static throwError(error, data) {
27
+ const result = new Result();
28
+ result.success = false;
29
+ result.timestamp = new Date().toISOString();
30
+ result.error = error;
31
+ if (data) {
32
+ result.data = data;
33
+ }
34
+ throw result;
35
+ }
36
+ }
37
+ exports.Result = Result;
38
+ //# sourceMappingURL=result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["../../../src/core-common/result-model/result.ts"],"names":[],"mappings":";;;AAEA,MAAa,MAAM;IACjB,OAAO,CAAU;IACjB,IAAI,CAAI;IACR,KAAK,CAAe;IACpB,SAAS,CAAS;IAEX,MAAM,CAAC,OAAO,CAAI,IAAO;QAC9B,MAAM,MAAM,GAAG,IAAI,MAAM,EAAK,CAAC;QAC/B,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;QACnB,MAAM,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC5C,OAAO,MAAM,CAAC;IAChB,CAAC;IAEM,MAAM,CAAC,MAAM,CAAI,KAAmB,EAAE,IAAQ;QACnD,MAAM,MAAM,GAAG,IAAI,MAAM,EAAK,CAAC;QAC/B,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;QACvB,MAAM,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC5C,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;QACrB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEM,MAAM,CAAC,UAAU,CAAI,KAAmB,EAAE,IAAQ;QACvD,MAAM,MAAM,GAAG,IAAI,MAAM,EAAK,CAAC;QAC/B,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;QACvB,MAAM,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC5C,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;QACrB,CAAC;QACD,MAAM,MAAM,CAAC;IACf,CAAC;CACF;AAnCD,wBAmCC","sourcesContent":["import { GenericError } from \"../error/generic.error\";\n\nexport class Result<T> {\n success: boolean;\n data: T;\n error: GenericError;\n timestamp: string;\n\n public static success<T>(data: T): Result<T> {\n const result = new Result<T>();\n result.success = true;\n result.data = data;\n result.timestamp = new Date().toISOString();\n return result;\n }\n\n public static failed<T>(error: GenericError, data?: T): Result<T> {\n const result = new Result<T>();\n result.success = false;\n result.timestamp = new Date().toISOString();\n result.error = error;\n if (data) {\n result.data = data;\n }\n return result;\n }\n\n public static throwError<T>(error: GenericError, data?: T): Result<T> {\n const result = new Result<T>();\n result.success = false;\n result.timestamp = new Date().toISOString();\n result.error = error;\n if (data) {\n result.data = data;\n }\n throw result;\n }\n}\n"]}