@xfilecom/core-sdk 1.4.2 → 1.4.3
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.
- package/dist/core.module.d.ts +1 -0
- package/dist/core.module.js +8 -1
- package/dist/core.module.js.map +1 -1
- package/dist/filters/rpc-response-exception.filter.d.ts +6 -0
- package/dist/filters/rpc-response-exception.filter.js +24 -0
- package/dist/filters/rpc-response-exception.filter.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +7 -2
- package/dist/index.js.map +1 -1
- package/dist/utils/rpc-exception.utils.d.ts +7 -0
- package/dist/utils/rpc-exception.utils.js +53 -0
- package/dist/utils/rpc-exception.utils.js.map +1 -0
- package/docs/IMPROVEMENTS_PROPOSAL.md +29 -2
- package/package.json +9 -2
package/dist/core.module.d.ts
CHANGED
package/dist/core.module.js
CHANGED
|
@@ -16,6 +16,7 @@ const error_handling_interceptor_1 = require("./interceptors/error-handling.inte
|
|
|
16
16
|
const response_transform_interceptor_1 = require("./interceptors/response-transform.interceptor");
|
|
17
17
|
const database_check_interceptor_1 = require("./interceptors/database-check.interceptor");
|
|
18
18
|
const exception_filter_1 = require("./filters/exception.filter");
|
|
19
|
+
const rpc_response_exception_filter_1 = require("./filters/rpc-response-exception.filter");
|
|
19
20
|
const jwt_auth_guard_1 = require("./guards/jwt-auth.guard");
|
|
20
21
|
const roles_guard_1 = require("./guards/roles.guard");
|
|
21
22
|
const controller_helpers_1 = require("./utils/controller.helpers");
|
|
@@ -91,6 +92,12 @@ let CoreModule = CoreModule_1 = class CoreModule {
|
|
|
91
92
|
useValue: new exception_filter_1.AllExceptionsFilter(filterOptions),
|
|
92
93
|
});
|
|
93
94
|
}
|
|
95
|
+
if (options.filters?.rpcException === true) {
|
|
96
|
+
providers.push({
|
|
97
|
+
provide: core_1.APP_FILTER,
|
|
98
|
+
useClass: rpc_response_exception_filter_1.RpcResponseExceptionFilter,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
94
101
|
if (options.guards?.jwt === true) {
|
|
95
102
|
try {
|
|
96
103
|
const { ConfigValidator } = require('./utils/config.validator');
|
|
@@ -140,7 +147,7 @@ let CoreModule = CoreModule_1 = class CoreModule {
|
|
|
140
147
|
},
|
|
141
148
|
response: { commonResponse: false, ...options.response },
|
|
142
149
|
guards: { jwt: false, ...options.guards },
|
|
143
|
-
filters: { exception: true, ...options.filters },
|
|
150
|
+
filters: { exception: false, rpcException: true, ...options.filters },
|
|
144
151
|
database: options.database,
|
|
145
152
|
jwt: options.jwt,
|
|
146
153
|
});
|
package/dist/core.module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.module.js","sourceRoot":"","sources":["../src/core.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAA+D;AAC/D,uCAAiF;AACjF,gEAA4E;AAG5E,4EAAmG;AACnG,0FAAqF;AACrF,kGAA6F;AAC7F,0FAAqF;AAGrF,iEAAyF;
|
|
1
|
+
{"version":3,"file":"core.module.js","sourceRoot":"","sources":["../src/core.module.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ArgumentsHost } from '@nestjs/common';
|
|
2
|
+
import { BaseRpcExceptionFilter } from '@nestjs/microservices';
|
|
3
|
+
import { Observable } from 'rxjs';
|
|
4
|
+
export declare class RpcResponseExceptionFilter extends BaseRpcExceptionFilter {
|
|
5
|
+
catch(exception: unknown, host: ArgumentsHost): Observable<unknown>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.RpcResponseExceptionFilter = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const microservices_1 = require("@nestjs/microservices");
|
|
12
|
+
const rxjs_1 = require("rxjs");
|
|
13
|
+
const rpc_exception_utils_1 = require("../utils/rpc-exception.utils");
|
|
14
|
+
let RpcResponseExceptionFilter = class RpcResponseExceptionFilter extends microservices_1.BaseRpcExceptionFilter {
|
|
15
|
+
catch(exception, host) {
|
|
16
|
+
const payload = (0, rpc_exception_utils_1.toRpcPayload)(exception);
|
|
17
|
+
return (0, rxjs_1.throwError)(() => new microservices_1.RpcException(payload));
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
exports.RpcResponseExceptionFilter = RpcResponseExceptionFilter;
|
|
21
|
+
exports.RpcResponseExceptionFilter = RpcResponseExceptionFilter = __decorate([
|
|
22
|
+
(0, common_1.Catch)()
|
|
23
|
+
], RpcResponseExceptionFilter);
|
|
24
|
+
//# sourceMappingURL=rpc-response-exception.filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc-response-exception.filter.js","sourceRoot":"","sources":["../../src/filters/rpc-response-exception.filter.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAsD;AACtD,yDAA6E;AAC7E,+BAA8C;AAC9C,sEAA4D;AAWrD,IAAM,0BAA0B,GAAhC,MAAM,0BAA2B,SAAQ,sCAAsB;IACpE,KAAK,CAAC,SAAkB,EAAE,IAAmB;QAC3C,MAAM,OAAO,GAAG,IAAA,kCAAY,EAAC,SAAS,CAAC,CAAC;QACxC,OAAO,IAAA,iBAAU,EAAC,GAAG,EAAE,CAAC,IAAI,4BAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IACrD,CAAC;CACF,CAAA;AALY,gEAA0B;qCAA1B,0BAA0B;IADtC,IAAA,cAAK,GAAE;GACK,0BAA0B,CAKtC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ export * from './utils/controller.helpers';
|
|
|
6
6
|
export { CommonResponseDto, CommonErrorDto, PaginationMeta, ResponseMeta } from './utils/controller.helpers';
|
|
7
7
|
export * from './utils/service.helpers';
|
|
8
8
|
export * from './utils/error.utils';
|
|
9
|
+
export { toRpcPayload, exceptionToResponse, type RpcResponsePayload, } from './utils/rpc-exception.utils';
|
|
9
10
|
export * from './utils/auth.helpers';
|
|
10
11
|
export * from './utils/logger.helpers';
|
|
11
12
|
export { ILogWriter, ConsoleLogWriter, FileLogWriter, FileLogWriterOptions, LogLevelName, LOG_LEVEL_ORDER, isLevelEnabled, } from './utils/logger.helpers';
|
|
@@ -19,6 +20,7 @@ export * from './guards/roles.guard';
|
|
|
19
20
|
export { AllExceptionsFilter, ExceptionFilterOptions } from './filters/exception.filter';
|
|
20
21
|
export { I18nExceptionFilter, type I18nMessageShape, } from './filters/i18n-exception.filter';
|
|
21
22
|
export { MicroserviceGatewayExceptionFilter } from './filters/microservice-gateway-exception.filter';
|
|
23
|
+
export { RpcResponseExceptionFilter } from './filters/rpc-response-exception.filter';
|
|
22
24
|
export * from './decorators/public.decorator';
|
|
23
25
|
export { User, JwtUser } from './decorators/user.decorator';
|
|
24
26
|
export { Roles, ROLES_KEY } from './decorators/roles.decorator';
|
package/dist/index.js
CHANGED
|
@@ -14,8 +14,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.
|
|
18
|
-
exports.authenticateWithHashLookup = void 0;
|
|
17
|
+
exports.compareLookupHash = exports.lookupHash = exports.compareByKey = exports.hashByKey = exports.getProfileConfig = exports.BUILT_IN_NORMALIZERS = exports.digitsNormalizer = exports.emailNormalizer = exports.compareEmail = exports.hashEmail = exports.compareValue = exports.hashValue = exports.PBKDF2_SALT_BYTES = exports.PBKDF2_DEFAULT_DIGEST = exports.PBKDF2_DEFAULT_KEYLEN = exports.PBKDF2_DEFAULT_ITERATIONS = exports.deriveKeySha256 = exports.pbkdf2VerifyPassword = exports.pbkdf2HashPassword = exports.DEFAULT_CONFIG_ROOT_CANDIDATES = exports.createConfigLoader = exports.resolveConfigRootDir = exports.CONFIG_SOURCE_ENV_KEY = exports.ENV_CONFIG_FILENAME_PATTERN = exports.DEFAULT_CONFIG_FILENAMES = exports.loadApplicationYamlSync = exports.loadApplicationYaml = exports.getLoggingConfigFromEnv = exports.isProd = exports.isDev = exports.currentAppEnv = exports.isStaging = exports.isProduction = exports.isDevelopment = exports.getAppEnv = exports.ROLES_KEY = exports.Roles = exports.User = exports.RpcResponseExceptionFilter = exports.MicroserviceGatewayExceptionFilter = exports.I18nExceptionFilter = exports.AllExceptionsFilter = exports.isLevelEnabled = exports.LOG_LEVEL_ORDER = exports.FileLogWriter = exports.ConsoleLogWriter = exports.exceptionToResponse = exports.toRpcPayload = exports.CommonErrorDto = exports.CommonResponseDto = void 0;
|
|
18
|
+
exports.authenticateWithHashLookup = exports.findUserByLookupHash = exports.getEncryptionKey = exports.getOptionalSecret = void 0;
|
|
19
19
|
__exportStar(require("./core.module"), exports);
|
|
20
20
|
__exportStar(require("./database/database.module"), exports);
|
|
21
21
|
__exportStar(require("./database/database.service"), exports);
|
|
@@ -26,6 +26,9 @@ Object.defineProperty(exports, "CommonResponseDto", { enumerable: true, get: fun
|
|
|
26
26
|
Object.defineProperty(exports, "CommonErrorDto", { enumerable: true, get: function () { return controller_helpers_1.CommonErrorDto; } });
|
|
27
27
|
__exportStar(require("./utils/service.helpers"), exports);
|
|
28
28
|
__exportStar(require("./utils/error.utils"), exports);
|
|
29
|
+
var rpc_exception_utils_1 = require("./utils/rpc-exception.utils");
|
|
30
|
+
Object.defineProperty(exports, "toRpcPayload", { enumerable: true, get: function () { return rpc_exception_utils_1.toRpcPayload; } });
|
|
31
|
+
Object.defineProperty(exports, "exceptionToResponse", { enumerable: true, get: function () { return rpc_exception_utils_1.exceptionToResponse; } });
|
|
29
32
|
__exportStar(require("./utils/auth.helpers"), exports);
|
|
30
33
|
__exportStar(require("./utils/logger.helpers"), exports);
|
|
31
34
|
var logger_helpers_1 = require("./utils/logger.helpers");
|
|
@@ -45,6 +48,8 @@ var i18n_exception_filter_1 = require("./filters/i18n-exception.filter");
|
|
|
45
48
|
Object.defineProperty(exports, "I18nExceptionFilter", { enumerable: true, get: function () { return i18n_exception_filter_1.I18nExceptionFilter; } });
|
|
46
49
|
var microservice_gateway_exception_filter_1 = require("./filters/microservice-gateway-exception.filter");
|
|
47
50
|
Object.defineProperty(exports, "MicroserviceGatewayExceptionFilter", { enumerable: true, get: function () { return microservice_gateway_exception_filter_1.MicroserviceGatewayExceptionFilter; } });
|
|
51
|
+
var rpc_response_exception_filter_1 = require("./filters/rpc-response-exception.filter");
|
|
52
|
+
Object.defineProperty(exports, "RpcResponseExceptionFilter", { enumerable: true, get: function () { return rpc_response_exception_filter_1.RpcResponseExceptionFilter; } });
|
|
48
53
|
__exportStar(require("./decorators/public.decorator"), exports);
|
|
49
54
|
var user_decorator_1 = require("./decorators/user.decorator");
|
|
50
55
|
Object.defineProperty(exports, "User", { enumerable: true, get: function () { return user_decorator_1.User; } });
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AACA,gDAA8B;AAG9B,6DAA2C;AAC3C,8DAA4C;AAC5C,4DAA0C;AAG1C,6DAA2C;AAC3C,iEAKoC;AAJlC,uHAAA,iBAAiB,OAAA;AACjB,oHAAA,cAAc,OAAA;AAIhB,0DAAwC;AACxC,sDAAoC;AACpC,uDAAqC;AACrC,yDAAuC;AACvC,yDAQgC;AAN9B,kHAAA,gBAAgB,OAAA;AAChB,+GAAA,aAAa,OAAA;AAGb,iHAAA,eAAe,OAAA;AACf,gHAAA,cAAc,OAAA;AAIhB,qEAAmD;AAEnD,4EAA0D;AAC1D,gFAA8D;AAC9D,4EAA0D;AAG1D,0DAAwC;AACxC,uDAAqC;AAGrC,+DAAyF;AAAhF,uHAAA,mBAAmB,OAAA;AAC5B,yEAGyC;AAFvC,4HAAA,mBAAmB,OAAA;AAGrB,yGAAqG;AAA5F,2JAAA,kCAAkC,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AACA,gDAA8B;AAG9B,6DAA2C;AAC3C,8DAA4C;AAC5C,4DAA0C;AAG1C,6DAA2C;AAC3C,iEAKoC;AAJlC,uHAAA,iBAAiB,OAAA;AACjB,oHAAA,cAAc,OAAA;AAIhB,0DAAwC;AACxC,sDAAoC;AACpC,mEAIqC;AAHnC,mHAAA,YAAY,OAAA;AACZ,0HAAA,mBAAmB,OAAA;AAGrB,uDAAqC;AACrC,yDAAuC;AACvC,yDAQgC;AAN9B,kHAAA,gBAAgB,OAAA;AAChB,+GAAA,aAAa,OAAA;AAGb,iHAAA,eAAe,OAAA;AACf,gHAAA,cAAc,OAAA;AAIhB,qEAAmD;AAEnD,4EAA0D;AAC1D,gFAA8D;AAC9D,4EAA0D;AAG1D,0DAAwC;AACxC,uDAAqC;AAGrC,+DAAyF;AAAhF,uHAAA,mBAAmB,OAAA;AAC5B,yEAGyC;AAFvC,4HAAA,mBAAmB,OAAA;AAGrB,yGAAqG;AAA5F,2JAAA,kCAAkC,OAAA;AAC3C,yFAAqF;AAA5E,2IAAA,0BAA0B,OAAA;AAGnC,gEAA8C;AAC9C,8DAA4D;AAAnD,sGAAA,IAAI,OAAA;AACb,gEAAgE;AAAvD,wGAAA,KAAK,OAAA;AAAE,4GAAA,SAAS,OAAA;AAGzB,2DAAyC;AAGzC,+CAS2B;AARzB,sGAAA,SAAS,OAAA;AACT,0GAAA,aAAa,OAAA;AACb,yGAAA,YAAY,OAAA;AACZ,sGAAA,SAAS,OAAA;AACT,0GAAA,aAAa,OAAA;AACb,kGAAA,KAAK,OAAA;AACL,mGAAA,MAAM,OAAA;AAKR,yDAAiE;AAAxD,yHAAA,uBAAuB,OAAA;AAGhC,iEAQoC;AAPlC,yHAAA,mBAAmB,OAAA;AACnB,6HAAA,uBAAuB,OAAA;AAEvB,8HAAA,wBAAwB,OAAA;AACxB,iIAAA,2BAA2B,OAAA;AAC3B,2HAAA,qBAAqB,OAAA;AAKvB,mEAOqC;AANnC,2HAAA,oBAAoB,OAAA;AACpB,yHAAA,kBAAkB,OAAA;AAClB,qIAAA,8BAA8B,OAAA;AAOhC,qDAS8B;AAR5B,kHAAA,kBAAkB,OAAA;AAClB,oHAAA,oBAAoB,OAAA;AACpB,+GAAA,eAAe,OAAA;AACf,yHAAA,yBAAyB,OAAA;AACzB,qHAAA,qBAAqB,OAAA;AACrB,qHAAA,qBAAqB,OAAA;AACrB,iHAAA,iBAAiB,OAAA;AAKnB,2EAgByC;AAfvC,oHAAA,SAAS,OAAA;AACT,uHAAA,YAAY,OAAA;AACZ,oHAAA,SAAS,OAAA;AACT,uHAAA,YAAY,OAAA;AACZ,0HAAA,eAAe,OAAA;AACf,2HAAA,gBAAgB,OAAA;AAChB,+HAAA,oBAAoB,OAAA;AACpB,2HAAA,gBAAgB,OAAA;AAChB,oHAAA,SAAS,OAAA;AACT,uHAAA,YAAY,OAAA;AACZ,qHAAA,UAAU,OAAA;AACV,4HAAA,iBAAiB,OAAA;AAOnB,mEAKqC;AAJnC,wHAAA,iBAAiB,OAAA;AACjB,uHAAA,gBAAgB,OAAA;AAMlB,+DAMmC;AALjC,yHAAA,oBAAoB,OAAA;AACpB,+HAAA,0BAA0B,OAAA"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toRpcPayload = toRpcPayload;
|
|
4
|
+
exports.exceptionToResponse = exceptionToResponse;
|
|
5
|
+
function normalizeMessage(message) {
|
|
6
|
+
if (typeof message === 'string')
|
|
7
|
+
return message;
|
|
8
|
+
if (message != null && typeof message === 'object' && 'message' in message) {
|
|
9
|
+
const m = message.message;
|
|
10
|
+
if (typeof m === 'string')
|
|
11
|
+
return m;
|
|
12
|
+
if (Array.isArray(m) && m.length > 0 && typeof m[0] === 'string')
|
|
13
|
+
return m[0];
|
|
14
|
+
}
|
|
15
|
+
return message != null && typeof message === 'object'
|
|
16
|
+
? JSON.stringify(message)
|
|
17
|
+
: String(message ?? 'Internal server error');
|
|
18
|
+
}
|
|
19
|
+
function toRpcPayload(exception) {
|
|
20
|
+
if (exception != null &&
|
|
21
|
+
typeof exception === 'object' &&
|
|
22
|
+
'code' in exception &&
|
|
23
|
+
'error' in exception &&
|
|
24
|
+
typeof exception.code === 'number') {
|
|
25
|
+
const code = exception.code;
|
|
26
|
+
const err = exception.error;
|
|
27
|
+
return {
|
|
28
|
+
code,
|
|
29
|
+
data: null,
|
|
30
|
+
error: typeof err === 'string' ? err : normalizeMessage(err),
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
if (exception != null &&
|
|
34
|
+
typeof exception === 'object' &&
|
|
35
|
+
'getStatus' in exception &&
|
|
36
|
+
'getResponse' in exception) {
|
|
37
|
+
const httpEx = exception;
|
|
38
|
+
const status = httpEx.getStatus();
|
|
39
|
+
const response = httpEx.getResponse();
|
|
40
|
+
const message = typeof response === 'string' ? response : normalizeMessage(response?.message ?? 'Internal server error');
|
|
41
|
+
return { code: status, data: null, error: message };
|
|
42
|
+
}
|
|
43
|
+
if (exception instanceof Error) {
|
|
44
|
+
const code = exception.status ?? 500;
|
|
45
|
+
const message = exception.message || 'Internal server error';
|
|
46
|
+
return { code, data: null, error: message };
|
|
47
|
+
}
|
|
48
|
+
return { code: 500, data: null, error: 'Internal server error' };
|
|
49
|
+
}
|
|
50
|
+
function exceptionToResponse(exception) {
|
|
51
|
+
return toRpcPayload(exception);
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=rpc-exception.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc-exception.utils.js","sourceRoot":"","sources":["../../src/utils/rpc-exception.utils.ts"],"names":[],"mappings":";;AA8BA,oCAyCC;AASD,kDAEC;AAvED,SAAS,gBAAgB,CAAC,OAAgB;IACxC,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,EAAE,CAAC;QAC3E,MAAM,CAAC,GAAI,OAA2C,CAAC,OAAO,CAAC;QAC/D,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,OAAO,CAAC,CAAC;QACpC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ;YAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,OAAO,IAAI,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ;QACnD,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;QACzB,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,uBAAuB,CAAC,CAAC;AACjD,CAAC;AASD,SAAgB,YAAY,CAAC,SAAkB;IAE7C,IACE,SAAS,IAAI,IAAI;QACjB,OAAO,SAAS,KAAK,QAAQ;QAC7B,MAAM,IAAI,SAAS;QACnB,OAAO,IAAI,SAAS;QACpB,OAAQ,SAA+B,CAAC,IAAI,KAAK,QAAQ,EACzD,CAAC;QACD,MAAM,IAAI,GAAI,SAA8B,CAAC,IAAI,CAAC;QAClD,MAAM,GAAG,GAAI,SAAgC,CAAC,KAAK,CAAC;QACpD,OAAO;YACL,IAAI;YACJ,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC;SAC7D,CAAC;IACJ,CAAC;IAGD,IACE,SAAS,IAAI,IAAI;QACjB,OAAO,SAAS,KAAK,QAAQ;QAC7B,WAAW,IAAI,SAAS;QACxB,aAAa,IAAI,SAAS,EAC1B,CAAC;QACD,MAAM,MAAM,GAAG,SAAoE,CAAC;QACpF,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QACtC,MAAM,OAAO,GACX,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAE,QAAgB,EAAE,OAAO,IAAI,uBAAuB,CAAC,CAAC;QACpH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IACtD,CAAC;IAGD,IAAI,SAAS,YAAY,KAAK,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAI,SAAiB,CAAC,MAAM,IAAI,GAAG,CAAC;QAC9C,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,IAAI,uBAAuB,CAAC;QAC7D,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAC9C,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;AACnE,CAAC;AASD,SAAgB,mBAAmB,CAAC,SAAkB;IACpD,OAAO,YAAY,CAAC,SAAS,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -41,7 +41,31 @@ token-services의 auth-service 정리하면서 **core-sdk로 옮기면 재사용
|
|
|
41
41
|
|
|
42
42
|
---
|
|
43
43
|
|
|
44
|
-
## 5.
|
|
44
|
+
## 5. RPC 전용 예외 처리 (TCP 마이크로서비스) (반영 완료)
|
|
45
|
+
|
|
46
|
+
### 배경
|
|
47
|
+
auth-service는 **TCP 전용** 마이크로서비스입니다. `AllExceptionsFilter`는 HTTP 전용이라 TCP 컨텍스트에서는 사용할 수 없습니다.
|
|
48
|
+
core-sdk에 **RPC(TCP) 전용** 예외 처리용을 추가하면, auth-service(및 다른 TCP 마이크로서비스)에서 로컬 필터/헬퍼를 제거하고 core-sdk만 사용할 수 있습니다.
|
|
49
|
+
|
|
50
|
+
### 반영 내용
|
|
51
|
+
1. **RpcResponseExceptionFilter**
|
|
52
|
+
- `BaseRpcExceptionFilter` 확장, `@Catch()` 로 모든 예외 캐치.
|
|
53
|
+
- `catch(exception, host)`에서 예외를 `{ code, data: null, error: string }` 형태로 변환 후 `throwError(() => new RpcException(payload))` 반환.
|
|
54
|
+
- HttpException → getStatus(), getResponse()에서 메시지 추출; 그 외 → 500 + message.
|
|
55
|
+
|
|
56
|
+
2. **exceptionToResponse(exception)** (유틸)
|
|
57
|
+
- 동일 형태 `{ code, data: null, error: string }`를 **반환**. 컨트롤러에서 throw 대신 `return exceptionToResponse(e)` 할 때 사용.
|
|
58
|
+
- export: `exceptionToResponse`, `toRpcPayload`, `RpcResponsePayload` 타입.
|
|
59
|
+
|
|
60
|
+
3. **CoreModule.forMicroservice 옵션**
|
|
61
|
+
- `filters: { rpcException: true }` 기본값. TCP 마이크로서비스에서 전역에 `RpcResponseExceptionFilter` 등록.
|
|
62
|
+
- `filters.exception`은 forMicroservice에서 기본 `false` (HTTP 필터 미등록).
|
|
63
|
+
|
|
64
|
+
**사용처**: token-services auth-service. core-sdk 반영 후 auth-service의 `filters/rpc-response-exception.filter.ts`, `interceptors/rpc-logging.interceptor.ts` 제거하고 core-sdk 로깅 + RPC 예외 필터/헬퍼만 사용 예정. (로깅은 이미 core-sdk LoggingInterceptor가 RPC 지원.)
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## 6. 정리
|
|
45
69
|
|
|
46
70
|
| 항목 | 우선순위 | 요약 |
|
|
47
71
|
|------|----------|------|
|
|
@@ -49,6 +73,9 @@ token-services의 auth-service 정리하면서 **core-sdk로 옮기면 재사용
|
|
|
49
73
|
| **findUserByLookupHash / authenticateWithHashLookup** | 중간 | DB 기반 인증 로직 재사용, auth-service 단순화 (반영 완료) |
|
|
50
74
|
| **resolveConfigRootDir preset/확장** | 낮음 | token-services는 shared/config로 대응 가능 (주석 반영) |
|
|
51
75
|
| **I18nExceptionFilter** | 선택 | error.message를 { ko, en } 객체로 내리기, APP_FILTER로만 사용 (반영 완료) |
|
|
76
|
+
| **RpcResponseExceptionFilter + exceptionToResponse** | 중간 | TCP 마이크로서비스용 예외 처리. core-sdk 반영 후 auth-service 로컬 RPC 필터·인터셉터 제거 예정 (반영 완료) |
|
|
52
77
|
|
|
53
|
-
token-services 쪽에서는 위 1·2·4번이 core-sdk에 반영되면 auth-service를 그에 맞춰 리팩터링할 예정입니다.
|
|
78
|
+
token-services 쪽에서는 위 1·2·4·5번이 core-sdk에 반영되면 auth-service를 그에 맞춰 리팩터링할 예정입니다.
|
|
79
|
+
**I18nExceptionFilter**: core-sdk export 사용 시 auth-service 로컬 `i18n-exception.filter.ts` 제거 후 `APP_FILTER`로 core-sdk `I18nExceptionFilter`만 등록.
|
|
80
|
+
**RPC 예외 처리**: core-sdk `RpcResponseExceptionFilter`와 `exceptionToResponse` 사용 시 auth-service의 `filters/rpc-response-exception.filter.ts`, `interceptors/rpc-logging.interceptor.ts` 제거 후 core-sdk 것만 사용. (로깅은 LoggingInterceptor RPC 지원으로 `interceptors: { logging: true }`만 켜면 됨.)
|
|
54
81
|
문의나 스펙 조정이 필요하면 알려 주세요.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xfilecom/core-sdk",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.3",
|
|
4
4
|
"description": "Core SDK for NestJS microservices - 통합 개발 키트",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -29,9 +29,16 @@
|
|
|
29
29
|
},
|
|
30
30
|
"peerDependencies": {
|
|
31
31
|
"@nestjs/common": "^10.0.0",
|
|
32
|
-
"@nestjs/core": "^10.0.0"
|
|
32
|
+
"@nestjs/core": "^10.0.0",
|
|
33
|
+
"@nestjs/microservices": "^10.0.0"
|
|
34
|
+
},
|
|
35
|
+
"peerDependenciesMeta": {
|
|
36
|
+
"@nestjs/microservices": {
|
|
37
|
+
"optional": true
|
|
38
|
+
}
|
|
33
39
|
},
|
|
34
40
|
"devDependencies": {
|
|
41
|
+
"@nestjs/microservices": "^10.0.0",
|
|
35
42
|
"@types/bcrypt": "^5.0.2",
|
|
36
43
|
"@types/express": "^4.17.21",
|
|
37
44
|
"@types/jsonwebtoken": "^9.0.5",
|