plac-micro-common 1.0.9 → 1.0.11

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.
@@ -0,0 +1,5 @@
1
+ import { ArgumentsHost, ExceptionFilter } from "@nestjs/common";
2
+ export declare class AllExceptionsFilter implements ExceptionFilter {
3
+ private readonly logger;
4
+ catch(exception: unknown, host: ArgumentsHost): void;
5
+ }
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
3
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
4
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
5
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
6
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
7
+ var _, done = false;
8
+ for (var i = decorators.length - 1; i >= 0; i--) {
9
+ var context = {};
10
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
11
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
12
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
13
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
14
+ if (kind === "accessor") {
15
+ if (result === void 0) continue;
16
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
17
+ if (_ = accept(result.get)) descriptor.get = _;
18
+ if (_ = accept(result.set)) descriptor.set = _;
19
+ if (_ = accept(result.init)) initializers.unshift(_);
20
+ }
21
+ else if (_ = accept(result)) {
22
+ if (kind === "field") initializers.unshift(_);
23
+ else descriptor[key] = _;
24
+ }
25
+ }
26
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
27
+ done = true;
28
+ };
29
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
30
+ var useValue = arguments.length > 2;
31
+ for (var i = 0; i < initializers.length; i++) {
32
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
33
+ }
34
+ return useValue ? value : void 0;
35
+ };
36
+ var __setFunctionName = (this && this.__setFunctionName) || function (f, name, prefix) {
37
+ if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";
38
+ return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
39
+ };
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.AllExceptionsFilter = void 0;
42
+ const common_1 = require("@nestjs/common");
43
+ const utils_1 = require("../utils");
44
+ let AllExceptionsFilter = (() => {
45
+ let _classDecorators = [(0, common_1.Catch)()];
46
+ let _classDescriptor;
47
+ let _classExtraInitializers = [];
48
+ let _classThis;
49
+ var AllExceptionsFilter = _classThis = class {
50
+ constructor() {
51
+ this.logger = new common_1.Logger(AllExceptionsFilter.name);
52
+ }
53
+ catch(exception, host) {
54
+ const ctx = host.switchToHttp();
55
+ const res = ctx.getResponse();
56
+ const req = ctx.getRequest();
57
+ const traceId = (0, utils_1.getOrCreateTraceId)(req);
58
+ res.setHeader(utils_1.TRACE_HEADER, traceId);
59
+ let status = common_1.HttpStatus.INTERNAL_SERVER_ERROR;
60
+ let code = "INTERNAL_SERVER_ERROR";
61
+ let message = "Internal server error";
62
+ let details = null;
63
+ if (exception instanceof common_1.HttpException) {
64
+ status = exception.getStatus();
65
+ const response = exception.getResponse();
66
+ if (typeof response === "string") {
67
+ message = response;
68
+ }
69
+ else if (response && typeof response === "object") {
70
+ const r = response;
71
+ message = r.message ?? message;
72
+ code = r.code ?? code;
73
+ details = r.details ?? null;
74
+ }
75
+ }
76
+ else if (exception instanceof Error) {
77
+ message = exception.message || message;
78
+ details = { name: exception.name };
79
+ }
80
+ // Log to Nest logger (your Axiom logger can consume this)
81
+ this.logger.error({
82
+ msg: message,
83
+ code,
84
+ status,
85
+ trace_id: traceId,
86
+ path: req.originalUrl || req.url,
87
+ method: req.method,
88
+ }, exception?.stack);
89
+ const body = {
90
+ success: false,
91
+ statusCode: status,
92
+ error: {
93
+ code,
94
+ message,
95
+ details,
96
+ },
97
+ trace_id: traceId,
98
+ timestamp: new Date().toISOString(),
99
+ path: req.originalUrl || req.url,
100
+ };
101
+ res.status(status).json(body);
102
+ }
103
+ };
104
+ __setFunctionName(_classThis, "AllExceptionsFilter");
105
+ (() => {
106
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
107
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
108
+ AllExceptionsFilter = _classThis = _classDescriptor.value;
109
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
110
+ __runInitializers(_classThis, _classExtraInitializers);
111
+ })();
112
+ return AllExceptionsFilter = _classThis;
113
+ })();
114
+ exports.AllExceptionsFilter = AllExceptionsFilter;
@@ -0,0 +1,2 @@
1
+ export * from "./exceptions.filter";
2
+ export * from "./response.interceptor";
@@ -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("./exceptions.filter"), exports);
18
+ __exportStar(require("./response.interceptor"), exports);
@@ -0,0 +1,5 @@
1
+ import { CallHandler, ExecutionContext, NestInterceptor } from "@nestjs/common";
2
+ import { Observable } from "rxjs";
3
+ export declare class ResponseTransformInterceptor implements NestInterceptor {
4
+ intercept(context: ExecutionContext, next: CallHandler): Observable<any>;
5
+ }
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
3
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
4
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
5
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
6
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
7
+ var _, done = false;
8
+ for (var i = decorators.length - 1; i >= 0; i--) {
9
+ var context = {};
10
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
11
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
12
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
13
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
14
+ if (kind === "accessor") {
15
+ if (result === void 0) continue;
16
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
17
+ if (_ = accept(result.get)) descriptor.get = _;
18
+ if (_ = accept(result.set)) descriptor.set = _;
19
+ if (_ = accept(result.init)) initializers.unshift(_);
20
+ }
21
+ else if (_ = accept(result)) {
22
+ if (kind === "field") initializers.unshift(_);
23
+ else descriptor[key] = _;
24
+ }
25
+ }
26
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
27
+ done = true;
28
+ };
29
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
30
+ var useValue = arguments.length > 2;
31
+ for (var i = 0; i < initializers.length; i++) {
32
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
33
+ }
34
+ return useValue ? value : void 0;
35
+ };
36
+ var __setFunctionName = (this && this.__setFunctionName) || function (f, name, prefix) {
37
+ if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";
38
+ return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
39
+ };
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.ResponseTransformInterceptor = void 0;
42
+ const common_1 = require("@nestjs/common");
43
+ const operators_1 = require("rxjs/operators");
44
+ const utils_1 = require("../utils");
45
+ let ResponseTransformInterceptor = (() => {
46
+ let _classDecorators = [(0, common_1.Injectable)()];
47
+ let _classDescriptor;
48
+ let _classExtraInitializers = [];
49
+ let _classThis;
50
+ var ResponseTransformInterceptor = _classThis = class {
51
+ intercept(context, next) {
52
+ const httpCtx = context.switchToHttp();
53
+ const req = httpCtx.getRequest();
54
+ const res = httpCtx.getResponse();
55
+ const traceId = (0, utils_1.getOrCreateTraceId)(req);
56
+ res.setHeader(utils_1.TRACE_HEADER, traceId);
57
+ return next.handle().pipe((0, operators_1.map)((data) => {
58
+ if (data && data.success !== undefined) {
59
+ if (!data.trace_id)
60
+ data.trace_id = traceId;
61
+ return data;
62
+ }
63
+ const statusCode = res.statusCode ?? 200;
64
+ const response = {
65
+ success: true,
66
+ statusCode,
67
+ data,
68
+ meta: null,
69
+ trace_id: traceId,
70
+ timestamp: new Date().toISOString(),
71
+ path: req.originalUrl || req.url,
72
+ };
73
+ return response;
74
+ }));
75
+ }
76
+ };
77
+ __setFunctionName(_classThis, "ResponseTransformInterceptor");
78
+ (() => {
79
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
80
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
81
+ ResponseTransformInterceptor = _classThis = _classDescriptor.value;
82
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
83
+ __runInitializers(_classThis, _classExtraInitializers);
84
+ })();
85
+ return ResponseTransformInterceptor = _classThis;
86
+ })();
87
+ exports.ResponseTransformInterceptor = ResponseTransformInterceptor;
package/dist/index.d.ts CHANGED
@@ -1 +1,4 @@
1
1
  export * from "./enums";
2
+ export * from "./interfaces";
3
+ export * from "./http";
4
+ export * from "./utils";
package/dist/index.js CHANGED
@@ -15,3 +15,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./enums"), exports);
18
+ __exportStar(require("./interfaces"), exports);
19
+ __exportStar(require("./http"), exports);
20
+ __exportStar(require("./utils"), exports);
@@ -0,0 +1,21 @@
1
+ export interface ApiBaseResponse {
2
+ success: boolean;
3
+ statusCode: number;
4
+ trace_id?: string;
5
+ timestamp: string;
6
+ path: string;
7
+ }
8
+ export interface ApiSuccessResponse<T = any> extends ApiBaseResponse {
9
+ success: true;
10
+ data: T;
11
+ meta?: Record<string, any> | null;
12
+ }
13
+ export interface ApiErrorObject {
14
+ code: string;
15
+ message: string;
16
+ details?: any;
17
+ }
18
+ export interface ApiErrorResponse extends ApiBaseResponse {
19
+ success: false;
20
+ error: ApiErrorObject;
21
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1 @@
1
+ export * from "./http.interface";
@@ -0,0 +1,17 @@
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("./http.interface"), exports);
@@ -0,0 +1,3 @@
1
+ import { Request } from "express";
2
+ export declare const TRACE_HEADER = "x-request-id";
3
+ export declare function getOrCreateTraceId(req: Request): string;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TRACE_HEADER = void 0;
4
+ exports.getOrCreateTraceId = getOrCreateTraceId;
5
+ const crypto_1 = require("crypto");
6
+ exports.TRACE_HEADER = "x-request-id";
7
+ function generateTraceId(length = 12) {
8
+ return (0, crypto_1.randomBytes)(length).toString("hex").slice(0, length);
9
+ }
10
+ function getOrCreateTraceId(req) {
11
+ const fromHeader = req.headers[exports.TRACE_HEADER] ||
12
+ req.headers[exports.TRACE_HEADER.toUpperCase()];
13
+ if (fromHeader)
14
+ return fromHeader;
15
+ return generateTraceId();
16
+ }
@@ -0,0 +1 @@
1
+ export * from "./http.util";
@@ -0,0 +1,17 @@
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("./http.util"), exports);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "plac-micro-common",
3
- "version": "1.0.9",
3
+ "version": "1.0.11",
4
4
  "types": "dist/index.d.ts",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -16,11 +16,15 @@
16
16
  "license": "ISC",
17
17
  "description": "",
18
18
  "devDependencies": {
19
+ "@types/express": "^5.0.6",
19
20
  "ts-node": "^10.9.2",
20
21
  "typescript": "^5.9.3"
21
22
  },
22
23
  "dependencies": {
24
+ "@nestjs/common": "^11.1.9",
23
25
  "class-transformer": "^0.5.1",
24
- "class-validator": "^0.14.2"
26
+ "class-validator": "^0.14.2",
27
+ "express": "^5.2.1",
28
+ "rxjs": "^7.8.2"
25
29
  }
26
30
  }