@nmxjs/api 1.3.2 → 1.3.4
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/ApiRouterCore/utils/RpcExceptionInterceptor.js +2 -1
- package/dist/ApiRouterCore/utils/RpcExceptionInterceptor.js.map +1 -1
- package/dist/ApiService/utils/parseRpcError.js +4 -1
- package/dist/ApiService/utils/parseRpcError.js.map +1 -1
- package/package.json +1 -1
- package/tests/ApiService/utils/parseRpcError.spec.ts +16 -5
|
@@ -36,6 +36,7 @@ let RpcExceptionInterceptor = class RpcExceptionInterceptor {
|
|
|
36
36
|
})}`);
|
|
37
37
|
}
|
|
38
38
|
}), (0, rxjs_1.catchError)(e => {
|
|
39
|
+
var _a;
|
|
39
40
|
const message = typeof (e === null || e === void 0 ? void 0 : e.message) === 'string' ? e.message : String(e);
|
|
40
41
|
const splitResult = message.split(constants_1.endErrorText);
|
|
41
42
|
const isProcessed = splitResult.length > 1;
|
|
@@ -55,7 +56,7 @@ let RpcExceptionInterceptor = class RpcExceptionInterceptor {
|
|
|
55
56
|
serviceName: this.serviceName,
|
|
56
57
|
path,
|
|
57
58
|
code: (e === null || e === void 0 ? void 0 : e.code) || 'UNKNOWN RPC',
|
|
58
|
-
params: context.getArgByIndex(0),
|
|
59
|
+
params: ((_a = context.getArgByIndex(0)) === null || _a === void 0 ? void 0 : _a.res) === context.getArgByIndex(1) ? undefined : context.getArgByIndex(0),
|
|
59
60
|
});
|
|
60
61
|
}
|
|
61
62
|
const errorPayload = JSON.stringify({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RpcExceptionInterceptor.js","sourceRoot":"","sources":["../../../src/ApiRouterCore/utils/RpcExceptionInterceptor.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+BAAuC;AACvC,yDAAqD;AACrD,wCAAkD;AAClD,2CAAoG;AACpG,4CAA4C;AAIrC,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAClC,YACqB,WAAmB,EACnB,QAAiB,KAAK,EACtB,QAAoB;QAFpB,gBAAW,GAAX,WAAW,CAAQ;QACnB,UAAK,GAAL,KAAK,CAAiB;QACtB,aAAQ,GAAR,QAAQ,CAAY;IACtC,CAAC;IAEG,SAAS,CAAC,OAAyB,EAAE,IAAiB;;QAC3D,MAAM,SAAS,GAAG,IAAA,YAAI,GAAE,CAAC;QACzB,MAAM,IAAI,GAAG,CAAA,MAAA,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,0CAAE,IAAI,MAAI,MAAA,MAAA,MAAA,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,0CAAE,IAAI,0CAAE,OAAO,0CAAE,IAAI,CAAA,CAAC;QAE7F,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CACV,gBAAgB,IAAA,oBAAY,kBAC1B,SAAS,EACT,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,IAC3B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAClE,EAAE,CACL,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CACvB,IAAA,UAAG,EAAC,IAAI,CAAC,EAAE;YACT,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,eAAM,CAAC,KAAK,CACV,iBAAiB,IAAA,oBAAY,EAAC;oBAC5B,SAAS;oBACT,IAAI;iBACL,CAAC,EAAE,CACL,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,EACF,IAAA,iBAAU,EAAC,CAAC,CAAC,EAAE
|
|
1
|
+
{"version":3,"file":"RpcExceptionInterceptor.js","sourceRoot":"","sources":["../../../src/ApiRouterCore/utils/RpcExceptionInterceptor.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+BAAuC;AACvC,yDAAqD;AACrD,wCAAkD;AAClD,2CAAoG;AACpG,4CAA4C;AAIrC,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAClC,YACqB,WAAmB,EACnB,QAAiB,KAAK,EACtB,QAAoB;QAFpB,gBAAW,GAAX,WAAW,CAAQ;QACnB,UAAK,GAAL,KAAK,CAAiB;QACtB,aAAQ,GAAR,QAAQ,CAAY;IACtC,CAAC;IAEG,SAAS,CAAC,OAAyB,EAAE,IAAiB;;QAC3D,MAAM,SAAS,GAAG,IAAA,YAAI,GAAE,CAAC;QACzB,MAAM,IAAI,GAAG,CAAA,MAAA,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,0CAAE,IAAI,MAAI,MAAA,MAAA,MAAA,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,0CAAE,IAAI,0CAAE,OAAO,0CAAE,IAAI,CAAA,CAAC;QAE7F,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CACV,gBAAgB,IAAA,oBAAY,kBAC1B,SAAS,EACT,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,IAC3B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAClE,EAAE,CACL,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CACvB,IAAA,UAAG,EAAC,IAAI,CAAC,EAAE;YACT,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,eAAM,CAAC,KAAK,CACV,iBAAiB,IAAA,oBAAY,EAAC;oBAC5B,SAAS;oBACT,IAAI;iBACL,CAAC,EAAE,CACL,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,EACF,IAAA,iBAAU,EAAC,CAAC,CAAC,EAAE;;YACb,MAAM,OAAO,GAAG,OAAO,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,OAAO,CAAA,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACvE,MAAM,WAAW,GAAa,OAAO,CAAC,KAAK,CAAC,wBAAY,CAAC,CAAC;YAC1D,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;YAC3C,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAE5D,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,eAAM,CAAC,KAAK,CACV,iBAAiB,IAAA,oBAAY,EAAC;oBAC5B,SAAS;oBACT,KAAK,EAAE;wBACL,OAAO,EAAE,YAAY;qBACtB;iBACF,CAAC,EAAE,CACL,CAAC;YACJ,CAAC;YACD,eAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,KAAK,KAAI,YAAY,CAAC,CAAC;YACpE,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,MAAM,CAAA,EAAE,CAAC;gBAChC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;oBACtB,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;oBAC1C,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,IAAI;oBACJ,IAAI,EAAE,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,IAAI,KAAI,aAAa;oBAC9B,MAAM,EAAE,CAAA,MAAA,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,0CAAE,GAAG,MAAK,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;iBAC1G,CAAC,CAAC;YACL,CAAC;YAED,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC;gBAClC,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBAC1C,IAAI,EAAE,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,IAAI;gBACb,UAAU,EAAE,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,UAAU;aAC1B,CAAC,CAAC;YAEH,MAAM,IAAI,4BAAY,CAAC,GAAG,YAAY,GAAG,wBAAY,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;CACF,CAAA;AApEY,0DAAuB;kCAAvB,uBAAuB;IADnC,IAAA,mBAAU,GAAE;;GACA,uBAAuB,CAoEnC"}
|
|
@@ -5,6 +5,9 @@ const constants_1 = require("../../ApiRouterCore/constants");
|
|
|
5
5
|
function parseRpcError(e) {
|
|
6
6
|
var _a, _b;
|
|
7
7
|
const raw = (_b = (_a = e.details) !== null && _a !== void 0 ? _a : e.message) !== null && _b !== void 0 ? _b : '';
|
|
8
|
+
if (!raw.includes(constants_1.endErrorText)) {
|
|
9
|
+
return e;
|
|
10
|
+
}
|
|
8
11
|
const cleanDetails = raw.split(constants_1.endErrorText)[0];
|
|
9
12
|
try {
|
|
10
13
|
const parsed = JSON.parse(cleanDetails);
|
|
@@ -17,7 +20,7 @@ function parseRpcError(e) {
|
|
|
17
20
|
}
|
|
18
21
|
catch (parseError) {
|
|
19
22
|
if (parseError instanceof SyntaxError) {
|
|
20
|
-
return
|
|
23
|
+
return e;
|
|
21
24
|
}
|
|
22
25
|
throw parseError;
|
|
23
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseRpcError.js","sourceRoot":"","sources":["../../../src/ApiService/utils/parseRpcError.ts"],"names":[],"mappings":";;;AAAA,6DAA6D;AAE7D,SAAgB,aAAa,CAAC,CAAM;;IAClC,MAAM,GAAG,GAAW,MAAA,MAAA,CAAC,CAAC,OAAO,mCAAI,CAAC,CAAC,OAAO,mCAAI,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"parseRpcError.js","sourceRoot":"","sources":["../../../src/ApiService/utils/parseRpcError.ts"],"names":[],"mappings":";;;AAAA,6DAA6D;AAE7D,SAAgB,aAAa,CAAC,CAAM;;IAClC,MAAM,GAAG,GAAW,MAAA,MAAA,CAAC,CAAC,OAAO,mCAAI,CAAC,CAAC,OAAO,mCAAI,EAAE,CAAC;IAEjD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,wBAAY,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,wBAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAEhD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACxC,MAAM,KAAK,GAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,YAAY,CAAC,CAAC;QAC7D,IAAI,MAAM,CAAC,IAAI;YAAE,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QAC1C,IAAI,MAAM,CAAC,UAAU;YAAE,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAC5D,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,OAAO,UAAU,EAAE,CAAC;QACpB,IAAI,UAAU,YAAY,WAAW,EAAE,CAAC;YACtC,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,UAAU,CAAC;IACnB,CAAC;AACH,CAAC;AArBD,sCAqBC"}
|
package/package.json
CHANGED
|
@@ -24,7 +24,7 @@ describe('parseRpcError', () => {
|
|
|
24
24
|
const grpcError = { details: `Plain error text${endErrorText}` };
|
|
25
25
|
const result = parseRpcError(grpcError);
|
|
26
26
|
|
|
27
|
-
expect(result
|
|
27
|
+
expect(result).toBe(grpcError);
|
|
28
28
|
});
|
|
29
29
|
|
|
30
30
|
it('should handle details without endErrorText marker', () => {
|
|
@@ -32,8 +32,7 @@ describe('parseRpcError', () => {
|
|
|
32
32
|
const grpcError = { details: payload };
|
|
33
33
|
const result: any = parseRpcError(grpcError);
|
|
34
34
|
|
|
35
|
-
expect(result
|
|
36
|
-
expect(result.code).toBe('ERR');
|
|
35
|
+
expect(result).toBe(grpcError);
|
|
37
36
|
});
|
|
38
37
|
|
|
39
38
|
it('should fallback to details as message when JSON has no message field', () => {
|
|
@@ -70,12 +69,12 @@ describe('parseRpcError', () => {
|
|
|
70
69
|
expect(result.code).toBe('CASCADE');
|
|
71
70
|
});
|
|
72
71
|
|
|
73
|
-
it('should return
|
|
72
|
+
it('should return original error when no endErrorText marker', () => {
|
|
74
73
|
const payload = JSON.stringify({ message: 'test' });
|
|
75
74
|
const grpcError = { details: payload };
|
|
76
75
|
const result = parseRpcError(grpcError);
|
|
77
76
|
|
|
78
|
-
expect(result).
|
|
77
|
+
expect(result).toBe(grpcError);
|
|
79
78
|
});
|
|
80
79
|
|
|
81
80
|
it('should parse error.message when details is absent (NATS/TCP)', () => {
|
|
@@ -106,4 +105,16 @@ describe('parseRpcError', () => {
|
|
|
106
105
|
expect(result.message).toBe('From details');
|
|
107
106
|
expect(result.code).toBe('DETAILS');
|
|
108
107
|
});
|
|
108
|
+
|
|
109
|
+
it('should preserve code and statusCode for non-RPC errors', () => {
|
|
110
|
+
const error: any = new Error('Invalid credentials!');
|
|
111
|
+
error.code = 'INVALID_CREDENTIALS_ERROR';
|
|
112
|
+
error.statusCode = 401;
|
|
113
|
+
const result: any = parseRpcError(error);
|
|
114
|
+
|
|
115
|
+
expect(result).toBe(error);
|
|
116
|
+
expect(result.message).toBe('Invalid credentials!');
|
|
117
|
+
expect(result.code).toBe('INVALID_CREDENTIALS_ERROR');
|
|
118
|
+
expect(result.statusCode).toBe(401);
|
|
119
|
+
});
|
|
109
120
|
});
|