@yolo-croket-dev/core 1.7.46-beta.5 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,7 +7,6 @@ import { ErrAction } from '../interfaces/exception';
7
7
  */
8
8
  export declare class UnAuthorized extends HttpException {
9
9
  subMessage: string | null;
10
- errType: string | null;
11
10
  errMessage: string | null;
12
11
  errAction: ErrAction | null;
13
12
  constructor(errMessage?: string, errAction?: ErrAction);
@@ -13,12 +13,10 @@ class UnAuthorized extends common_1.HttpException {
13
13
  // legacy
14
14
  this.subMessage = null;
15
15
  // new
16
- this.errType = null;
17
16
  this.errMessage = null;
18
17
  this.errAction = null;
19
18
  this.subMessage = errMessage || null;
20
19
  // new
21
- this.errType = 'USER_AUTHENTICATION_FAIL';
22
20
  this.errMessage = errMessage || null;
23
21
  this.errAction = errAction || null;
24
22
  }
@@ -0,0 +1,17 @@
1
+ declare global {
2
+ var Promise: PromiseConstructor;
3
+ }
4
+ export declare class EnhancedPromisePatch {
5
+ private static isPatched;
6
+ private static originalPromise;
7
+ private static originalSetTimeout;
8
+ static patch(): void;
9
+ private static patchPromise;
10
+ private static patchSetTimeout;
11
+ static unpatch(): void;
12
+ /**
13
+ * 현재 패치 상태 확인
14
+ * @returns 패치 여부
15
+ */
16
+ static getPatchStatus(): boolean;
17
+ }
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EnhancedPromisePatch = void 0;
4
+ const abort_1 = require("./abort");
5
+ class EnhancedPromisePatch {
6
+ static patch() {
7
+ if (this.isPatched) {
8
+ return;
9
+ }
10
+ this.patchPromise();
11
+ this.patchSetTimeout();
12
+ this.isPatched = true;
13
+ }
14
+ static patchPromise() {
15
+ this.originalPromise = global.Promise;
16
+ // Promise 생성자 패치
17
+ global.Promise = new Proxy(global.Promise, {
18
+ construct(target, args) {
19
+ const abortSignal = (0, abort_1.getCurrentAbortSignal)();
20
+ if (abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.aborted) {
21
+ return Promise.reject(new Error('REQUEST_ABORTED: Promise가 중단되었습니다'));
22
+ }
23
+ // target은 Promise 생성자이므로, new 연산자와 함께 사용해야 하며, args는 [executor] 형태의 튜플임을 명시합니다.
24
+ const promise = Reflect.construct(target, args);
25
+ if (!abortSignal) {
26
+ return promise;
27
+ }
28
+ // Promise 체인에 중단 확인 추가
29
+ return promise.then((result) => {
30
+ if (abortSignal.aborted) {
31
+ throw new Error('REQUEST_ABORTED: Promise 실행 중 중단되었습니다');
32
+ }
33
+ return result;
34
+ }, (error) => {
35
+ if (abortSignal.aborted) {
36
+ throw new Error('REQUEST_ABORTED: Promise 실행 중 중단되었습니다');
37
+ }
38
+ throw error;
39
+ });
40
+ },
41
+ });
42
+ // Promise.resolve 패치
43
+ const originalResolve = global.Promise.resolve;
44
+ global.Promise.resolve = (value) => {
45
+ const abortSignal = (0, abort_1.getCurrentAbortSignal)();
46
+ if (abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.aborted) {
47
+ return Promise.reject(new Error('REQUEST_ABORTED: Promise.resolve가 중단되었습니다'));
48
+ }
49
+ const promise = originalResolve.call(global.Promise, value);
50
+ if (!abortSignal) {
51
+ return promise;
52
+ }
53
+ return promise.then((result) => {
54
+ if (abortSignal.aborted) {
55
+ throw new Error('REQUEST_ABORTED: Promise.resolve 실행 중 중단되었습니다');
56
+ }
57
+ return result;
58
+ }, (error) => {
59
+ if (abortSignal.aborted) {
60
+ throw new Error('REQUEST_ABORTED: Promise.resolve 실행 중 중단되었습니다');
61
+ }
62
+ throw error;
63
+ });
64
+ };
65
+ // Promise.reject 패치
66
+ const originalReject = global.Promise.reject;
67
+ global.Promise.reject = (reason) => {
68
+ const abortSignal = (0, abort_1.getCurrentAbortSignal)();
69
+ if (abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.aborted) {
70
+ return Promise.reject(new Error('REQUEST_ABORTED: Promise.reject가 중단되었습니다'));
71
+ }
72
+ return originalReject.call(global.Promise, reason);
73
+ };
74
+ }
75
+ static patchSetTimeout() {
76
+ this.originalSetTimeout = global.setTimeout;
77
+ // eslint-disable-next-line @typescript-eslint/ban-types
78
+ global.setTimeout = (callback, delay, ...args) => {
79
+ const abortSignal = (0, abort_1.getCurrentAbortSignal)();
80
+ if (abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.aborted) {
81
+ throw new Error('REQUEST_ABORTED: setTimeout이 중단되었습니다');
82
+ }
83
+ const timerId = this.originalSetTimeout(() => {
84
+ if (abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.aborted) {
85
+ throw new Error('REQUEST_ABORTED: setTimeout 콜백이 중단되었습니다');
86
+ }
87
+ callback(...args);
88
+ }, delay);
89
+ if (abortSignal) {
90
+ const abortHandler = () => {
91
+ clearTimeout(timerId);
92
+ };
93
+ abortSignal.addEventListener('abort', abortHandler, { once: true });
94
+ }
95
+ return timerId;
96
+ };
97
+ }
98
+ static unpatch() {
99
+ if (!this.isPatched) {
100
+ return;
101
+ }
102
+ global.Promise = this.originalPromise;
103
+ global.setTimeout = this.originalSetTimeout;
104
+ this.isPatched = false;
105
+ }
106
+ /**
107
+ * 현재 패치 상태 확인
108
+ * @returns 패치 여부
109
+ */
110
+ static getPatchStatus() {
111
+ return this.isPatched;
112
+ }
113
+ }
114
+ exports.EnhancedPromisePatch = EnhancedPromisePatch;
115
+ EnhancedPromisePatch.isPatched = false;
@@ -58,7 +58,7 @@ class AmqpManagement {
58
58
  return result.data;
59
59
  }
60
60
  catch (err) {
61
- msaLogger.warn(`ThrowWrapppingCall[${funcName}] error: traceId=${param.traceId}`, { traceId: param.traceId }, { param });
61
+ msaLogger.error(`ThrowWrapppingCall[${funcName}] error: traceId=${param.traceId}`, { traceId: param.traceId }, { param });
62
62
  if (options && options.isErrorThrowing) {
63
63
  throw err;
64
64
  }
@@ -62,7 +62,7 @@ async function AmqpHandler(client, messagePattern, payload) {
62
62
  });
63
63
  }
64
64
  else {
65
- msaLogger.warn('AMQP_HANDLER_ERROR', { traceId: ((_d = payload === null || payload === void 0 ? void 0 : payload.param) === null || _d === void 0 ? void 0 : _d.traceId) || '-' }, { err });
65
+ msaLogger.error('AMQP_HANDLER_ERROR', { traceId: ((_d = payload === null || payload === void 0 ? void 0 : payload.param) === null || _d === void 0 ? void 0 : _d.traceId) || '-' }, { err });
66
66
  throw err;
67
67
  }
68
68
  }
@@ -105,11 +105,14 @@ let LoggingServiceInterceptor = class LoggingServiceInterceptor {
105
105
  from: pastFrom,
106
106
  froms: pastFroms,
107
107
  },
108
+ startedAt: Date.now(),
108
109
  });
109
110
  const currentSpan = dd_trace_1.default.scope().active();
110
111
  let loggingSpan = null;
111
112
  if (currentSpan) {
112
- loggingSpan = dd_trace_1.default.startSpan(`logging-service-interceptor-${content.pattern}`, { childOf: currentSpan.context() });
113
+ loggingSpan = dd_trace_1.default.startSpan(`logging-service-interceptor-${content.pattern}`, {
114
+ childOf: currentSpan.context(),
115
+ });
113
116
  }
114
117
  if (loggingSpan) {
115
118
  loggingSpan.setTag('traceId', traceId);
@@ -278,7 +278,7 @@ let RPCInterceptor = class RPCInterceptor {
278
278
  if (!isAck) {
279
279
  const currentContext = functions_1.AbortContext.getCurrentContext();
280
280
  // 에러 전달
281
- msaLogger.warn('에러 응답 전송 처리', { traceId: execInterceptor.traceId }, {
281
+ msaLogger.error('에러 응답 전송 처리', { traceId: execInterceptor.traceId }, {
282
282
  error: {
283
283
  message: err.message,
284
284
  stack: err.stack,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yolo-croket-dev/core",
3
- "version": "1.7.46-beta.5",
3
+ "version": "1.8.0",
4
4
  "author": "Yolo Co., Ltd.",
5
5
  "description": "Yolo commonization module",
6
6
  "main": "index.js",
@@ -13,11 +13,13 @@
13
13
  "postpublish": "npm run clean"
14
14
  },
15
15
  "license": "UNLICENSED",
16
+ "peerDependencies": {
17
+ "@nestjs/common": "^11.0.0",
18
+ "@nestjs/swagger": "^11.0.0"
19
+ },
16
20
  "dependencies": {
17
- "@nestjs/common": "^8.2.3",
18
- "@nestjs/swagger": "5",
19
21
  "@yolo-croket-dev/logger": "^1.0.15",
20
- "@yolo-croket-dev/msa-logger": "3.0.1",
22
+ "@yolo-croket-dev/msa-logger": "^3.1.1",
21
23
  "@yolo-croket-dev/redis": "^1.0.25",
22
24
  "axios": "^1.1.3",
23
25
  "dd-trace": "^5.46.0",
@@ -26,6 +28,8 @@
26
28
  "uuid": "^8.3.2"
27
29
  },
28
30
  "devDependencies": {
31
+ "@nestjs/common": "^11.1.8",
32
+ "@nestjs/swagger": "^11.2.1",
29
33
  "@types/node": "^24.9.1",
30
34
  "@types/randomstring": "^1.1.8",
31
35
  "@types/uuid": "^8.3.4"
@@ -1,9 +0,0 @@
1
- {
2
- "permissions": {
3
- "allow": [
4
- "Bash(npm run lint)"
5
- ],
6
- "deny": [],
7
- "ask": []
8
- }
9
- }