@pristine-ts/networking 0.0.174 → 0.0.178
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/lib/cjs/errors/errors.js +3 -0
- package/dist/lib/cjs/errors/errors.js.map +1 -1
- package/dist/lib/cjs/errors/request-handling.error.js +20 -0
- package/dist/lib/cjs/errors/request-handling.error.js.map +1 -0
- package/dist/lib/cjs/errors/request-interception-execution.error.js +21 -0
- package/dist/lib/cjs/errors/request-interception-execution.error.js.map +1 -0
- package/dist/lib/cjs/errors/response-interception-execution.error.js +23 -0
- package/dist/lib/cjs/errors/response-interception-execution.error.js.map +1 -0
- package/dist/lib/cjs/{enrichers/enrichers.js → handlers/handlers.js} +2 -2
- package/dist/lib/cjs/handlers/handlers.js.map +1 -0
- package/dist/lib/cjs/handlers/request.event-handler.js +71 -0
- package/dist/lib/cjs/handlers/request.event-handler.js.map +1 -0
- package/dist/lib/cjs/interceptors/interceptors.js +15 -0
- package/dist/lib/cjs/interceptors/interceptors.js.map +1 -0
- package/dist/lib/cjs/interceptors/request-body-converter.interceptor.js +89 -0
- package/dist/lib/cjs/interceptors/request-body-converter.interceptor.js.map +1 -0
- package/dist/lib/cjs/{enrichers/router-response.enricher.js → interceptors/response-headers.interceptor.js} +14 -12
- package/dist/lib/cjs/interceptors/response-headers.interceptor.js.map +1 -0
- package/dist/lib/cjs/interfaces/interfaces.js +1 -2
- package/dist/lib/cjs/interfaces/interfaces.js.map +1 -1
- package/dist/lib/cjs/interfaces/{router-request-enricher.interface.js → request-interceptor.interface.js} +1 -1
- package/dist/lib/cjs/interfaces/request-interceptor.interface.js.map +1 -0
- package/dist/lib/cjs/mappers/mappers.js +14 -0
- package/dist/lib/cjs/mappers/mappers.js.map +1 -0
- package/dist/lib/cjs/mappers/request.mapper.js +37 -0
- package/dist/lib/cjs/mappers/request.mapper.js.map +1 -0
- package/dist/lib/cjs/models/models.js +0 -2
- package/dist/lib/cjs/models/models.js.map +1 -1
- package/dist/lib/cjs/networking.module.js +14 -2
- package/dist/lib/cjs/networking.module.js.map +1 -1
- package/dist/lib/cjs/router.js +167 -49
- package/dist/lib/cjs/router.js.map +1 -1
- package/dist/lib/esm/errors/errors.js +3 -0
- package/dist/lib/esm/errors/errors.js.map +1 -1
- package/dist/lib/esm/errors/request-handling.error.js +16 -0
- package/dist/lib/esm/errors/request-handling.error.js.map +1 -0
- package/dist/lib/esm/errors/request-interception-execution.error.js +17 -0
- package/dist/lib/esm/errors/request-interception-execution.error.js.map +1 -0
- package/dist/lib/esm/errors/response-interception-execution.error.js +19 -0
- package/dist/lib/esm/errors/response-interception-execution.error.js.map +1 -0
- package/dist/lib/esm/handlers/handlers.js +2 -0
- package/dist/lib/esm/handlers/handlers.js.map +1 -0
- package/dist/lib/esm/handlers/request.event-handler.js +68 -0
- package/dist/lib/esm/handlers/request.event-handler.js.map +1 -0
- package/dist/lib/esm/interceptors/interceptors.js +3 -0
- package/dist/lib/esm/interceptors/interceptors.js.map +1 -0
- package/dist/lib/esm/interceptors/request-body-converter.interceptor.js +86 -0
- package/dist/lib/esm/interceptors/request-body-converter.interceptor.js.map +1 -0
- package/dist/lib/esm/{enrichers/router-response.enricher.js → interceptors/response-headers.interceptor.js} +13 -11
- package/dist/lib/esm/interceptors/response-headers.interceptor.js.map +1 -0
- package/dist/lib/esm/interfaces/interfaces.js +1 -2
- package/dist/lib/esm/interfaces/interfaces.js.map +1 -1
- package/dist/lib/esm/interfaces/request-interceptor.interface.js +2 -0
- package/dist/lib/esm/interfaces/request-interceptor.interface.js.map +1 -0
- package/dist/lib/esm/mappers/mappers.js +2 -0
- package/dist/lib/esm/mappers/mappers.js.map +1 -0
- package/dist/lib/esm/mappers/request.mapper.js +34 -0
- package/dist/lib/esm/mappers/request.mapper.js.map +1 -0
- package/dist/lib/esm/models/models.js +0 -2
- package/dist/lib/esm/models/models.js.map +1 -1
- package/dist/lib/esm/networking.module.js +14 -2
- package/dist/lib/esm/networking.module.js.map +1 -1
- package/dist/lib/esm/router.js +166 -48
- package/dist/lib/esm/router.js.map +1 -1
- package/dist/types/errors/errors.d.ts +3 -0
- package/dist/types/errors/request-handling.error.d.ts +7 -0
- package/dist/types/errors/request-interception-execution.error.d.ts +7 -0
- package/dist/types/errors/response-interception-execution.error.d.ts +7 -0
- package/dist/types/handlers/handlers.d.ts +1 -0
- package/dist/types/handlers/request.event-handler.d.ts +14 -0
- package/dist/types/interceptors/interceptors.d.ts +2 -0
- package/dist/types/interceptors/request-body-converter.interceptor.d.ts +9 -0
- package/dist/types/interceptors/response-headers.interceptor.d.ts +10 -0
- package/dist/types/interfaces/controller-method-parameter-decorator-resolver.interface.d.ts +1 -1
- package/dist/types/interfaces/interfaces.d.ts +1 -2
- package/dist/types/interfaces/request-interceptor.interface.d.ts +39 -0
- package/dist/types/interfaces/router.interface.d.ts +6 -3
- package/dist/types/mappers/mappers.d.ts +1 -0
- package/dist/types/mappers/request.mapper.d.ts +8 -0
- package/dist/types/models/models.d.ts +0 -2
- package/dist/types/networking.module.d.ts +3 -1
- package/dist/types/resolvers/body-parameter-decorator.resolver.d.ts +1 -1
- package/dist/types/resolvers/controller-method-parameter-decorator.resolver.d.ts +1 -1
- package/dist/types/resolvers/headers-parameter-decorator.resolver.d.ts +1 -1
- package/dist/types/resolvers/identity-parameter-decorator.resolver.d.ts +1 -1
- package/dist/types/resolvers/query-parameter-decorator.resolver.d.ts +1 -1
- package/dist/types/resolvers/query-parameters-decorator.resolver.d.ts +1 -1
- package/dist/types/resolvers/request-parameter-decorator.resolver.d.ts +1 -1
- package/dist/types/resolvers/route-parameter-decorator.resolver.d.ts +1 -1
- package/dist/types/router.d.ts +17 -7
- package/package.json +7 -5
- package/dist/lib/cjs/enrichers/enrichers.js.map +0 -1
- package/dist/lib/cjs/enrichers/router-response.enricher.js.map +0 -1
- package/dist/lib/cjs/interfaces/router-request-enricher.interface.js.map +0 -1
- package/dist/lib/cjs/interfaces/router-response-enricher.interface.js +0 -3
- package/dist/lib/cjs/interfaces/router-response-enricher.interface.js.map +0 -1
- package/dist/lib/cjs/models/request.js +0 -50
- package/dist/lib/cjs/models/request.js.map +0 -1
- package/dist/lib/cjs/models/response.js +0 -16
- package/dist/lib/cjs/models/response.js.map +0 -1
- package/dist/lib/esm/enrichers/enrichers.js +0 -2
- package/dist/lib/esm/enrichers/enrichers.js.map +0 -1
- package/dist/lib/esm/enrichers/router-response.enricher.js.map +0 -1
- package/dist/lib/esm/interfaces/router-request-enricher.interface.js +0 -2
- package/dist/lib/esm/interfaces/router-request-enricher.interface.js.map +0 -1
- package/dist/lib/esm/interfaces/router-response-enricher.interface.js +0 -2
- package/dist/lib/esm/interfaces/router-response-enricher.interface.js.map +0 -1
- package/dist/lib/esm/models/request.js +0 -46
- package/dist/lib/esm/models/request.js.map +0 -1
- package/dist/lib/esm/models/response.js +0 -12
- package/dist/lib/esm/models/response.js.map +0 -1
- package/dist/types/enrichers/enrichers.d.ts +0 -1
- package/dist/types/enrichers/router-response.enricher.d.ts +0 -11
- package/dist/types/interfaces/router-request-enricher.interface.d.ts +0 -18
- package/dist/types/interfaces/router-response-enricher.interface.d.ts +0 -20
- package/dist/types/models/request.d.ts +0 -45
- package/dist/types/models/response.d.ts +0 -24
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
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;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
11
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
|
+
};
|
|
13
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
14
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
15
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
16
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
17
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
18
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
19
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
import { injectable, inject } from "tsyringe";
|
|
23
|
+
import { moduleScoped, ServiceDefinitionTagEnum, tag } from "@pristine-ts/common";
|
|
24
|
+
import { NetworkingModuleKeyname } from "../networking.module.keyname";
|
|
25
|
+
import { InvalidBodyHttpError } from "../errors/invalid-body.http-error";
|
|
26
|
+
let RequestBodyConverterInterceptor = class RequestBodyConverterInterceptor {
|
|
27
|
+
constructor(isActive, logHandler) {
|
|
28
|
+
this.isActive = isActive;
|
|
29
|
+
this.logHandler = logHandler;
|
|
30
|
+
}
|
|
31
|
+
interceptRequest(request) {
|
|
32
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
33
|
+
if (this.isActive === false) {
|
|
34
|
+
return request;
|
|
35
|
+
}
|
|
36
|
+
let contentType;
|
|
37
|
+
for (let key in request.headers) {
|
|
38
|
+
if (request.headers.hasOwnProperty(key) === false) {
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
const requestHeader = request.headers[key];
|
|
42
|
+
if (key.toLowerCase() === "content-type") {
|
|
43
|
+
contentType = requestHeader;
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
if (contentType === undefined) {
|
|
48
|
+
return request;
|
|
49
|
+
}
|
|
50
|
+
switch (contentType.toLowerCase()) {
|
|
51
|
+
case "application/json":
|
|
52
|
+
switch (typeof request.body) {
|
|
53
|
+
case "object":
|
|
54
|
+
return request;
|
|
55
|
+
case "string":
|
|
56
|
+
try {
|
|
57
|
+
if (request.body) {
|
|
58
|
+
request.body = JSON.parse(request.body);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch (e) {
|
|
62
|
+
const errorMessage = "This request has the Content-Type header 'application/json' but the body contains invalid JSON.";
|
|
63
|
+
this.logHandler.error(errorMessage);
|
|
64
|
+
throw new InvalidBodyHttpError(errorMessage);
|
|
65
|
+
}
|
|
66
|
+
break;
|
|
67
|
+
default:
|
|
68
|
+
const errorMessage = "This request has the Content-Type header 'application/json' but the body contains invalid JSON.";
|
|
69
|
+
this.logHandler.error(errorMessage);
|
|
70
|
+
throw new InvalidBodyHttpError(errorMessage);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return request;
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
RequestBodyConverterInterceptor = __decorate([
|
|
78
|
+
tag(ServiceDefinitionTagEnum.RequestInterceptor),
|
|
79
|
+
moduleScoped(NetworkingModuleKeyname),
|
|
80
|
+
injectable(),
|
|
81
|
+
__param(0, inject("%" + NetworkingModuleKeyname + ".request_body_converter.is_active%")),
|
|
82
|
+
__param(1, inject("LogHandlerInterface")),
|
|
83
|
+
__metadata("design:paramtypes", [Boolean, Object])
|
|
84
|
+
], RequestBodyConverterInterceptor);
|
|
85
|
+
export { RequestBodyConverterInterceptor };
|
|
86
|
+
//# sourceMappingURL=request-body-converter.interceptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-body-converter.interceptor.js","sourceRoot":"","sources":["../../../../src/interceptors/request-body-converter.interceptor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAC,UAAU,EAAE,MAAM,EAAC,MAAM,UAAU,CAAC;AAE5C,OAAO,EAAC,YAAY,EAAW,wBAAwB,EAAE,GAAG,EAAC,MAAM,qBAAqB,CAAC;AACzF,OAAO,EAAC,uBAAuB,EAAC,MAAM,8BAA8B,CAAC;AAErE,OAAO,EAAC,oBAAoB,EAAC,MAAM,mCAAmC,CAAC;AAKvE,IAAa,+BAA+B,GAA5C,MAAa,+BAA+B;IACxC,YAA2G,QAAiB,EAChE,UAA+B;QADgB,aAAQ,GAAR,QAAQ,CAAS;QAChE,eAAU,GAAV,UAAU,CAAqB;IAC3F,CAAC;IAEK,gBAAgB,CAAC,OAAgB;;YACnC,IAAG,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE;gBACxB,OAAO,OAAO,CAAC;aAClB;YAED,IAAI,WAA+B,CAAC;YAEpC,KAAK,IAAI,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE;gBAC7B,IAAI,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE;oBAC/C,SAAS;iBACZ;gBAED,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAE3C,IAAG,GAAG,CAAC,WAAW,EAAE,KAAK,cAAc,EAAE;oBACrC,WAAW,GAAG,aAAa,CAAC;oBAC5B,MAAM;iBACT;aACJ;YAED,IAAG,WAAW,KAAK,SAAS,EAAE;gBAC1B,OAAO,OAAO,CAAC;aAClB;YAED,QAAQ,WAAW,CAAC,WAAW,EAAE,EAAE;gBAC/B,KAAK,kBAAkB;oBAEnB,QAAQ,OAAO,OAAO,CAAC,IAAI,EAAE;wBACzB,KAAK,QAAQ;4BACT,OAAO,OAAO,CAAC;wBAEnB,KAAK,QAAQ;4BACT,IAAI;gCACA,IAAG,OAAO,CAAC,IAAI,EAAE;oCACb,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;iCAC3C;6BACJ;4BACD,OAAO,CAAC,EAAE;gCACN,MAAM,YAAY,GAAG,iGAAiG,CAAC;gCACvH,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gCAEpC,MAAM,IAAI,oBAAoB,CAAC,YAAY,CAAC,CAAC;6BAChD;4BACD,MAAM;wBAEV;4BACI,MAAM,YAAY,GAAG,iGAAiG,CAAC;4BACvH,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;4BAEpC,MAAM,IAAI,oBAAoB,CAAC,YAAY,CAAC,CAAC;qBACpD;aAGR;YAED,OAAO,OAAO,CAAC;QACnB,CAAC;KAAA;CAEJ,CAAA;AA/DY,+BAA+B;IAH3C,GAAG,CAAC,wBAAwB,CAAC,kBAAkB,CAAC;IAChD,YAAY,CAAC,uBAAuB,CAAC;IACrC,UAAU,EAAE;IAEI,WAAA,MAAM,CAAC,GAAG,GAAG,uBAAuB,GAAG,oCAAoC,CAAC,CAAA;IAC5E,WAAA,MAAM,CAAC,qBAAqB,CAAC,CAAA;;GAFjC,+BAA+B,CA+D3C;SA/DY,+BAA+B"}
|
|
@@ -15,23 +15,25 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
15
15
|
};
|
|
16
16
|
import { moduleScoped, ServiceDefinitionTagEnum, tag } from "@pristine-ts/common";
|
|
17
17
|
import { NetworkingModuleKeyname } from "../networking.module.keyname";
|
|
18
|
+
import { injectable } from "tsyringe";
|
|
18
19
|
/**
|
|
19
|
-
* The
|
|
20
|
-
* It is tagged as
|
|
20
|
+
* The Response Interceptor intercepts the response of the router by adding the response headers specified by the response header decorator.
|
|
21
|
+
* It is tagged as a RequestInterceptor so it can be automatically injected with the all the other RequestInterceptor.
|
|
21
22
|
*/
|
|
22
|
-
let
|
|
23
|
-
|
|
23
|
+
let ResponseHeadersInterceptor = class ResponseHeadersInterceptor {
|
|
24
|
+
interceptResponse(response, request, methodNode) {
|
|
24
25
|
return __awaiter(this, void 0, void 0, function* () {
|
|
25
|
-
if (methodNode.route.context && methodNode.route.context.hasOwnProperty("responseHeaders")) {
|
|
26
|
+
if (methodNode && methodNode.route.context && methodNode.route.context.hasOwnProperty("responseHeaders")) {
|
|
26
27
|
response.headers = Object.assign(Object.assign({}, response.headers), methodNode.route.context.responseHeaders);
|
|
27
28
|
}
|
|
28
29
|
return response;
|
|
29
30
|
});
|
|
30
31
|
}
|
|
31
32
|
};
|
|
32
|
-
|
|
33
|
-
tag(ServiceDefinitionTagEnum.
|
|
34
|
-
moduleScoped(NetworkingModuleKeyname)
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
33
|
+
ResponseHeadersInterceptor = __decorate([
|
|
34
|
+
tag(ServiceDefinitionTagEnum.RequestInterceptor),
|
|
35
|
+
moduleScoped(NetworkingModuleKeyname),
|
|
36
|
+
injectable()
|
|
37
|
+
], ResponseHeadersInterceptor);
|
|
38
|
+
export { ResponseHeadersInterceptor };
|
|
39
|
+
//# sourceMappingURL=response-headers.interceptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-headers.interceptor.js","sourceRoot":"","sources":["../../../../src/interceptors/response-headers.interceptor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,OAAO,EAAC,YAAY,EAAqB,wBAAwB,EAAE,GAAG,EAAC,MAAM,qBAAqB,CAAC;AACnG,OAAO,EAAC,uBAAuB,EAAC,MAAM,8BAA8B,CAAC;AAGrE,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AACpC;;;GAGG;AAIH,IAAa,0BAA0B,GAAvC,MAAa,0BAA0B;IAC7B,iBAAiB,CAAC,QAAkB,EAAE,OAAgB,EAAE,UAA6B;;YACvF,IAAG,UAAU,IAAI,UAAU,CAAC,KAAK,CAAC,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAC;gBACpG,QAAQ,CAAC,OAAO,mCAAO,QAAQ,CAAC,OAAO,GAAK,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;aACxF;YAED,OAAO,QAAQ,CAAC;QACpB,CAAC;KAAA;CACJ,CAAA;AARY,0BAA0B;IAHtC,GAAG,CAAC,wBAAwB,CAAC,kBAAkB,CAAC;IAChD,YAAY,CAAC,uBAAuB,CAAC;IACrC,UAAU,EAAE;GACA,0BAA0B,CAQtC;SARY,0BAA0B"}
|
|
@@ -5,10 +5,9 @@ export * from "./identity-parameteter-decorator.interface";
|
|
|
5
5
|
export * from "./parameter-decorator.interface";
|
|
6
6
|
export * from "./query-parameter-decorator.interface";
|
|
7
7
|
export * from "./query-parameters-decorator.interface";
|
|
8
|
+
export * from "./request-interceptor.interface";
|
|
8
9
|
export * from "./request-parameter-decorator.interface";
|
|
9
10
|
export * from "./route-method-decorator.interface";
|
|
10
11
|
export * from "./route-parameter-decorator.interface";
|
|
11
12
|
export * from "./router.interface";
|
|
12
|
-
export * from "./router-request-enricher.interface";
|
|
13
|
-
export * from "./router-response-enricher.interface";
|
|
14
13
|
//# sourceMappingURL=interfaces.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../../src/interfaces/interfaces.ts"],"names":[],"mappings":"AAAA,cAAc,sCAAsC,CAAC;AACrD,cAAc,4DAA4D,CAAC;AAC3E,cAAc,yCAAyC,CAAC;AACxD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,iCAAiC,CAAC;AAChD,cAAc,uCAAuC,CAAC;AACtD,cAAc,wCAAwC,CAAC;AACvD,cAAc,yCAAyC,CAAC;AACxD,cAAc,oCAAoC,CAAC;AACnD,cAAc,uCAAuC,CAAC;AACtD,cAAc,oBAAoB,CAAC
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../../src/interfaces/interfaces.ts"],"names":[],"mappings":"AAAA,cAAc,sCAAsC,CAAC;AACrD,cAAc,4DAA4D,CAAC;AAC3E,cAAc,yCAAyC,CAAC;AACxD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,iCAAiC,CAAC;AAChD,cAAc,uCAAuC,CAAC;AACtD,cAAc,wCAAwC,CAAC;AACvD,cAAc,iCAAiC,CAAC;AAChD,cAAc,yCAAyC,CAAC;AACxD,cAAc,oCAAoC,CAAC;AACnD,cAAc,uCAAuC,CAAC;AACtD,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-interceptor.interface.js","sourceRoot":"","sources":["../../../../src/interfaces/request-interceptor.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mappers.js","sourceRoot":"","sources":["../../../../src/mappers/mappers.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
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;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { moduleScoped, Request, Response, ServiceDefinitionTagEnum, tag } from "@pristine-ts/common";
|
|
8
|
+
import { injectable } from "tsyringe";
|
|
9
|
+
import { NetworkingModuleKeyname } from "../networking.module.keyname";
|
|
10
|
+
import { Event } from "@pristine-ts/core";
|
|
11
|
+
let RequestMapper = class RequestMapper {
|
|
12
|
+
supportsMapping(rawEvent, executionContext) {
|
|
13
|
+
return rawEvent instanceof Request;
|
|
14
|
+
}
|
|
15
|
+
map(rawEvent, executionContext) {
|
|
16
|
+
return {
|
|
17
|
+
executionOrder: "sequential",
|
|
18
|
+
events: [new Event("Request", rawEvent)],
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
supportsReverseMapping(eventResponse, response, executionContext) {
|
|
22
|
+
return eventResponse.response instanceof Response;
|
|
23
|
+
}
|
|
24
|
+
reverseMap(eventResponse, response, executionContext) {
|
|
25
|
+
return eventResponse.response;
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
RequestMapper = __decorate([
|
|
29
|
+
moduleScoped(NetworkingModuleKeyname),
|
|
30
|
+
tag(ServiceDefinitionTagEnum.EventMapper),
|
|
31
|
+
injectable()
|
|
32
|
+
], RequestMapper);
|
|
33
|
+
export { RequestMapper };
|
|
34
|
+
//# sourceMappingURL=request.mapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.mapper.js","sourceRoot":"","sources":["../../../../src/mappers/request.mapper.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAC,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,wBAAwB,EAAE,GAAG,EAAC,MAAM,qBAAqB,CAAC;AACnG,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AACpC,OAAO,EAAC,uBAAuB,EAAC,MAAM,8BAA8B,CAAC;AACrE,OAAO,EACH,KAAK,EAKR,MAAM,mBAAmB,CAAC;AAK3B,IAAa,aAAa,GAA1B,MAAa,aAAa;IACtB,eAAe,CAAC,QAAa,EAAE,gBAAgD;QAC3E,OAAO,QAAQ,YAAY,OAAO,CAAC;IACvC,CAAC;IAED,GAAG,CAAC,QAAa,EAAE,gBAAgD;QAC/D,OAAO;YACH,cAAc,EAAE,YAAY;YAC5B,MAAM,EAAE,CAAC,IAAI,KAAK,CAAU,SAAS,EAAE,QAAQ,CAAC,CAAC;SACpD,CAAC;IACN,CAAC;IAED,sBAAsB,CAAC,aAA+C,EAAE,QAAa,EAAE,gBAAgD;QACnI,OAAO,aAAa,CAAC,QAAQ,YAAY,QAAQ,CAAC;IACtD,CAAC;IAED,UAAU,CAAC,aAA+C,EAAE,QAAa,EAAE,gBAAgD;QACvH,OAAO,aAAa,CAAC,QAAQ,CAAC;IAClC,CAAC;CAEJ,CAAA;AApBY,aAAa;IAHzB,YAAY,CAAC,uBAAuB,CAAC;IACrC,GAAG,CAAC,wBAAwB,CAAC,WAAW,CAAC;IACzC,UAAU,EAAE;GACA,aAAa,CAoBzB;SApBY,aAAa"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../../../src/models/models.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../../../src/models/models.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC"}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { NetworkingModuleKeyname } from "./networking.module.keyname";
|
|
2
2
|
import { SecurityModule } from "@pristine-ts/security";
|
|
3
3
|
import { TelemetryModule } from "@pristine-ts/telemetry";
|
|
4
|
+
import { BooleanResolver, EnvironmentVariableResolver } from "@pristine-ts/configuration";
|
|
4
5
|
export * from "./decorators/decorators";
|
|
5
|
-
export * from "./enrichers/enrichers";
|
|
6
6
|
export * from "./errors/errors";
|
|
7
|
+
export * from "./handlers/handlers";
|
|
8
|
+
export * from "./interceptors/interceptors";
|
|
7
9
|
export * from "./interfaces/interfaces";
|
|
10
|
+
export * from "./mappers/mappers";
|
|
8
11
|
export * from "./models/models";
|
|
9
12
|
export * from "./nodes/nodes";
|
|
10
13
|
export * from "./resolvers/resolvers";
|
|
@@ -16,6 +19,15 @@ export const NetworkingModule = {
|
|
|
16
19
|
SecurityModule,
|
|
17
20
|
TelemetryModule,
|
|
18
21
|
],
|
|
19
|
-
configurationDefinitions: [
|
|
22
|
+
configurationDefinitions: [
|
|
23
|
+
{
|
|
24
|
+
parameterName: NetworkingModuleKeyname + ".request_body_converter.is_active",
|
|
25
|
+
isRequired: false,
|
|
26
|
+
defaultValue: true,
|
|
27
|
+
defaultResolvers: [
|
|
28
|
+
new BooleanResolver(new EnvironmentVariableResolver("PRISTINE_NETWORKING_REQUEST_BODY_CONVERTER_IS_ACTIVE")),
|
|
29
|
+
],
|
|
30
|
+
}
|
|
31
|
+
],
|
|
20
32
|
};
|
|
21
33
|
//# sourceMappingURL=networking.module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"networking.module.js","sourceRoot":"","sources":["../../../src/networking.module.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,uBAAuB,EAAC,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAC,cAAc,EAAC,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAC,eAAe,EAAC,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"networking.module.js","sourceRoot":"","sources":["../../../src/networking.module.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,uBAAuB,EAAC,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAC,cAAc,EAAC,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAC,eAAe,EAAC,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAC,eAAe,EAAE,2BAA2B,EAAC,MAAM,4BAA4B,CAAC;AAExF,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAE9B,cAAc,UAAU,CAAC;AAEzB,MAAM,CAAC,MAAM,gBAAgB,GAAoB;IAC7C,OAAO,EAAE,uBAAuB;IAChC,aAAa,EAAE;QACX,cAAc;QACd,eAAe;KAClB;IACD,wBAAwB,EAAE;QACtB;YACI,aAAa,EAAE,uBAAuB,GAAG,mCAAmC;YAC5E,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,IAAI;YAClB,gBAAgB,EAAE;gBACd,IAAI,eAAe,CAAC,IAAI,2BAA2B,CAAC,sDAAsD,CAAC,CAAC;aAC/G;SACJ;KACJ;CACJ,CAAA"}
|
package/dist/lib/esm/router.js
CHANGED
|
@@ -20,16 +20,19 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
20
20
|
});
|
|
21
21
|
};
|
|
22
22
|
import { inject, singleton } from "tsyringe";
|
|
23
|
-
import { Response } from "./models/response";
|
|
24
23
|
import { UrlUtil } from "./utils/url.util";
|
|
25
24
|
import { NotFoundHttpError } from "./errors/not-found.http-error";
|
|
26
25
|
import { PathRouterNode } from "./nodes/path-router.node";
|
|
26
|
+
import { Route } from "./models/route";
|
|
27
27
|
import { ForbiddenHttpError } from "./errors/forbidden.http-error";
|
|
28
28
|
import { ControllerMethodParameterDecoratorResolver } from "./resolvers/controller-method-parameter-decorator.resolver";
|
|
29
29
|
import Url from 'url-parse';
|
|
30
|
-
import { ServiceDefinitionTagEnum } from "@pristine-ts/common";
|
|
30
|
+
import { tag, ServiceDefinitionTagEnum, Response } from "@pristine-ts/common";
|
|
31
31
|
import { NetworkingModuleKeyname } from "./networking.module.keyname";
|
|
32
32
|
import { SpanKeynameEnum } from "@pristine-ts/telemetry";
|
|
33
|
+
import { controllerRegistry } from "./decorators/controller.decorator";
|
|
34
|
+
import { mergeWith } from "lodash";
|
|
35
|
+
import { HttpError } from "./errors/http.error";
|
|
33
36
|
/**
|
|
34
37
|
* The router service is the service that creates the routing tree from the controllers.
|
|
35
38
|
* It also executes a request properly by routing it to the intended controller and returns the response.
|
|
@@ -49,6 +52,8 @@ let Router = class Router {
|
|
|
49
52
|
this.authorizerManager = authorizerManager;
|
|
50
53
|
this.authenticationManager = authenticationManager;
|
|
51
54
|
this.root = new PathRouterNode("/");
|
|
55
|
+
// This property is used to track whether the router has been already been properly instantiated or not.
|
|
56
|
+
this.setupCompleted = false;
|
|
52
57
|
}
|
|
53
58
|
/**
|
|
54
59
|
* This method registers a Route into the Route Tree maintained by the router.
|
|
@@ -61,6 +66,59 @@ let Router = class Router {
|
|
|
61
66
|
const splitPaths = UrlUtil.splitPath(path);
|
|
62
67
|
this.root.add(splitPaths, method, route, 0);
|
|
63
68
|
}
|
|
69
|
+
// /**
|
|
70
|
+
// * This method loops through the all the classes decorated with @controller, loops through all the methods decorated
|
|
71
|
+
// * with @route and builds the dependency tree of all the routes.
|
|
72
|
+
// *
|
|
73
|
+
// * @private
|
|
74
|
+
// */
|
|
75
|
+
setup() {
|
|
76
|
+
if (this.setupCompleted) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
// Loop over all the controllers and control the Route Tree
|
|
80
|
+
controllerRegistry.forEach(controller => {
|
|
81
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
82
|
+
if (controller.hasOwnProperty("__metadata__") === false) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
let basePath = (_b = (_a = controller.__metadata__) === null || _a === void 0 ? void 0 : _a.controller) === null || _b === void 0 ? void 0 : _b.basePath;
|
|
86
|
+
// Clean the base path by removing trailing slashes.
|
|
87
|
+
if (basePath.endsWith("/")) {
|
|
88
|
+
basePath = basePath.slice(0, basePath.length - 1);
|
|
89
|
+
}
|
|
90
|
+
for (const methodPropertyKey in (_c = controller.__metadata__) === null || _c === void 0 ? void 0 : _c.methods) {
|
|
91
|
+
if (((_e = (_d = controller.__metadata__) === null || _d === void 0 ? void 0 : _d.methods) === null || _e === void 0 ? void 0 : _e.hasOwnProperty(methodPropertyKey)) === false) {
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
const method = (_f = controller.__metadata__) === null || _f === void 0 ? void 0 : _f.methods[methodPropertyKey];
|
|
95
|
+
if (method.hasOwnProperty("route") === false) {
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
// Retrieve the "RouteMethodDecorator" object assigned by the @route decorator at .route
|
|
99
|
+
const routeMethodDecorator = method.route;
|
|
100
|
+
// Build the Route object that will be used the the router to dispatch a request to
|
|
101
|
+
// the appropriate controller method
|
|
102
|
+
const route = new Route(controller.constructor, routeMethodDecorator.methodKeyname);
|
|
103
|
+
route.methodArguments = (_g = method.arguments) !== null && _g !== void 0 ? _g : [];
|
|
104
|
+
route.context = mergeWith({}, (_j = (_h = controller.__metadata__) === null || _h === void 0 ? void 0 : _h.controller) === null || _j === void 0 ? void 0 : _j.__routeContext__, method.__routeContext__);
|
|
105
|
+
// Build the proper path
|
|
106
|
+
let path = routeMethodDecorator.path;
|
|
107
|
+
// Clean the path by removing the first and trailing slashes.
|
|
108
|
+
if (path.startsWith("/")) {
|
|
109
|
+
path = path.slice(1, path.length);
|
|
110
|
+
}
|
|
111
|
+
if (path.endsWith("/")) {
|
|
112
|
+
path = path.slice(0, path.length - 1);
|
|
113
|
+
}
|
|
114
|
+
// Build the proper path
|
|
115
|
+
const routePath = basePath + "/" + path;
|
|
116
|
+
// Register the route
|
|
117
|
+
this.register(routePath, routeMethodDecorator.httpMethod, route);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
this.setupCompleted = true;
|
|
121
|
+
}
|
|
64
122
|
/**
|
|
65
123
|
* This method receives a Request object, identifies the "path" its trying to hit, navigates the internally
|
|
66
124
|
* maintained Route Tree, identifies the method in the controller that represents this "path", and calls the
|
|
@@ -70,6 +128,8 @@ let Router = class Router {
|
|
|
70
128
|
* @param container
|
|
71
129
|
*/
|
|
72
130
|
execute(request, container) {
|
|
131
|
+
// todo: remove all the rejects and replace it with a response that contains an error.
|
|
132
|
+
// This method cannot throw.
|
|
73
133
|
const tracingManager = container.resolve("TracingManagerInterface");
|
|
74
134
|
const routerRequestExecutionSpan = tracingManager.startSpan(SpanKeynameEnum.RouterRequestExecution, SpanKeynameEnum.RequestExecution);
|
|
75
135
|
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
|
|
@@ -95,7 +155,7 @@ let Router = class Router {
|
|
|
95
155
|
url,
|
|
96
156
|
}, NetworkingModuleKeyname);
|
|
97
157
|
routerRequestExecutionSpan.end();
|
|
98
|
-
return
|
|
158
|
+
return resolve(this.executeErrorResponseInterceptors(new NotFoundHttpError("No route found for path: '" + url.pathname + "'."), request, container));
|
|
99
159
|
}
|
|
100
160
|
// Get the route parameters
|
|
101
161
|
const routeParameters = methodNode.parent.getRouteParameters(splitPath.reverse());
|
|
@@ -129,7 +189,7 @@ let Router = class Router {
|
|
|
129
189
|
error = new ForbiddenHttpError("You are not allowed to access this.");
|
|
130
190
|
}
|
|
131
191
|
routerRequestExecutionSpan.end();
|
|
132
|
-
return
|
|
192
|
+
return resolve(this.executeErrorResponseInterceptors(error, request, container, methodNode));
|
|
133
193
|
}
|
|
134
194
|
// Call the controller with the resolved Method arguments
|
|
135
195
|
try {
|
|
@@ -142,20 +202,20 @@ let Router = class Router {
|
|
|
142
202
|
identity
|
|
143
203
|
}, NetworkingModuleKeyname);
|
|
144
204
|
routerRequestExecutionSpan.end();
|
|
145
|
-
return
|
|
205
|
+
return resolve(this.executeErrorResponseInterceptors(new ForbiddenHttpError("You are not allowed to access this."), request, container, methodNode));
|
|
146
206
|
}
|
|
147
|
-
// Execute all the
|
|
148
|
-
const
|
|
149
|
-
const
|
|
150
|
-
|
|
207
|
+
// Execute all the interceptors
|
|
208
|
+
const requestInterceptorsSpan = tracingManager.startSpan(SpanKeynameEnum.RequestInterceptors, SpanKeynameEnum.RouterRequestExecution);
|
|
209
|
+
const interceptedRequest = yield this.executeRequestInterceptors(request, container, methodNode);
|
|
210
|
+
requestInterceptorsSpan.end();
|
|
151
211
|
this.loghandler.debug("This request has been enriched", {
|
|
152
212
|
request,
|
|
153
|
-
|
|
213
|
+
interceptedRequest,
|
|
154
214
|
}, NetworkingModuleKeyname);
|
|
155
215
|
// Resolve the value to inject in the method arguments that have a decorator resolver
|
|
156
216
|
const resolvedMethodArguments = [];
|
|
157
217
|
for (const methodArgument of methodNode.route.methodArguments) {
|
|
158
|
-
resolvedMethodArguments.push(yield this.controllerMethodParameterDecoratorResolver.resolve(methodArgument,
|
|
218
|
+
resolvedMethodArguments.push(yield this.controllerMethodParameterDecoratorResolver.resolve(methodArgument, interceptedRequest, routeParameters, identity));
|
|
159
219
|
}
|
|
160
220
|
this.loghandler.debug("Controller argument resolved", {
|
|
161
221
|
resolvedMethodArguments,
|
|
@@ -179,12 +239,12 @@ let Router = class Router {
|
|
|
179
239
|
returnedResponse.status = 200;
|
|
180
240
|
returnedResponse.body = response;
|
|
181
241
|
}
|
|
182
|
-
const
|
|
183
|
-
const
|
|
184
|
-
|
|
242
|
+
const responseInterceptorsSpan = tracingManager.startSpan(SpanKeynameEnum.ResponseInterceptors, SpanKeynameEnum.RouterRequestExecution);
|
|
243
|
+
const interceptedResponse = yield this.executeResponseInterceptors(returnedResponse, request, container, methodNode);
|
|
244
|
+
responseInterceptorsSpan.end();
|
|
185
245
|
this.loghandler.debug("This response has been enriched", {
|
|
186
246
|
returnedResponse,
|
|
187
|
-
enrichedResponse,
|
|
247
|
+
enrichedResponse: interceptedResponse,
|
|
188
248
|
}, NetworkingModuleKeyname);
|
|
189
249
|
routerRequestExecutionSpan.end();
|
|
190
250
|
return resolve(returnedResponse);
|
|
@@ -193,84 +253,142 @@ let Router = class Router {
|
|
|
193
253
|
this.loghandler.error("There was an error trying to execute the request in the router", {
|
|
194
254
|
error,
|
|
195
255
|
}, NetworkingModuleKeyname);
|
|
256
|
+
// Execute router interceptors for the error response;
|
|
196
257
|
routerRequestExecutionSpan.end();
|
|
197
|
-
return
|
|
258
|
+
return resolve(this.executeErrorResponseInterceptors(error, request, container, methodNode));
|
|
198
259
|
}
|
|
199
260
|
}));
|
|
200
261
|
}
|
|
201
262
|
/**
|
|
202
|
-
* This method executes all the
|
|
263
|
+
* This method executes all the Request Interceptors and returns the request updated by the interceptors.
|
|
203
264
|
*
|
|
204
|
-
* @param response
|
|
205
265
|
* @param request
|
|
206
266
|
* @param container
|
|
207
267
|
* @param methodNode
|
|
208
268
|
* @private
|
|
209
269
|
*/
|
|
210
|
-
|
|
270
|
+
executeRequestInterceptors(request, container, methodNode) {
|
|
271
|
+
var _a, _b, _c;
|
|
211
272
|
return __awaiter(this, void 0, void 0, function* () {
|
|
212
|
-
// Execute all the request
|
|
213
|
-
let
|
|
214
|
-
// Check first if there are any
|
|
215
|
-
if (container.isRegistered(ServiceDefinitionTagEnum.
|
|
216
|
-
const
|
|
217
|
-
for (const
|
|
218
|
-
// We don't have a guarantee that the Router
|
|
273
|
+
// Execute all the request interceptors
|
|
274
|
+
let interceptedRequest = request;
|
|
275
|
+
// Check first if there are any Request Interceptors
|
|
276
|
+
if (container.isRegistered(ServiceDefinitionTagEnum.RequestInterceptor, true)) {
|
|
277
|
+
const interceptors = container.resolveAll(ServiceDefinitionTagEnum.RequestInterceptor);
|
|
278
|
+
for (const interceptor of interceptors) {
|
|
279
|
+
// We don't have a guarantee that the Router Interceptors will implement the Interface, even though we specify it should.
|
|
219
280
|
// So, we have to verify that the method exists, and if it doesn't we throw
|
|
220
|
-
if (typeof
|
|
221
|
-
//
|
|
222
|
-
|
|
281
|
+
if (typeof interceptor.interceptRequest === "undefined") {
|
|
282
|
+
// Simply log a message for now that the interceptors doesn't implement the 'interceptRequest' method.
|
|
283
|
+
this.loghandler.info("The Request Interceptor doesn't implement the interceptRequest method.", { name: interceptor.constructor.name, interceptor });
|
|
284
|
+
continue;
|
|
223
285
|
}
|
|
224
286
|
try {
|
|
225
287
|
// https://stackoverflow.com/a/27760489/684101
|
|
226
|
-
|
|
288
|
+
interceptedRequest = (_c = yield ((_b = (_a = interceptor).interceptRequest) === null || _b === void 0 ? void 0 : _b.call(_a, interceptedRequest, methodNode))) !== null && _c !== void 0 ? _c : interceptedRequest;
|
|
227
289
|
}
|
|
228
290
|
catch (e) {
|
|
229
|
-
this.loghandler.error("There was an exception thrown while executing the '
|
|
291
|
+
this.loghandler.error("There was an exception thrown while executing the 'interceptedRequest' method of the RequestInterceptor named: '" + interceptor.constructor.name + "'.", { e }, NetworkingModuleKeyname);
|
|
230
292
|
throw e;
|
|
231
293
|
}
|
|
232
294
|
}
|
|
233
295
|
}
|
|
234
|
-
return
|
|
296
|
+
return interceptedRequest;
|
|
235
297
|
});
|
|
236
298
|
}
|
|
237
299
|
/**
|
|
238
|
-
* This method executes all the
|
|
300
|
+
* This method executes all the Request Interceptors and returns the response updated by the interceptors.
|
|
239
301
|
*
|
|
302
|
+
* @param response
|
|
240
303
|
* @param request
|
|
241
304
|
* @param container
|
|
242
305
|
* @param methodNode
|
|
243
306
|
* @private
|
|
244
307
|
*/
|
|
245
|
-
|
|
308
|
+
executeResponseInterceptors(response, request, container, methodNode) {
|
|
309
|
+
var _a, _b, _c;
|
|
246
310
|
return __awaiter(this, void 0, void 0, function* () {
|
|
247
|
-
// Execute all the request
|
|
248
|
-
let
|
|
249
|
-
// Check first if there are any
|
|
250
|
-
if (container.isRegistered(ServiceDefinitionTagEnum.
|
|
251
|
-
const
|
|
252
|
-
for (const
|
|
253
|
-
// We don't have a guarantee that the Router response
|
|
311
|
+
// Execute all the request interceptors
|
|
312
|
+
let interceptedResponse = response;
|
|
313
|
+
// Check first if there are any Request interceptors
|
|
314
|
+
if (container.isRegistered(ServiceDefinitionTagEnum.RequestInterceptor, true)) {
|
|
315
|
+
const interceptors = container.resolveAll(ServiceDefinitionTagEnum.RequestInterceptor);
|
|
316
|
+
for (const interceptor of interceptors) {
|
|
317
|
+
// We don't have a guarantee that the Router response interceptors will implement the Interface, even though we specify it should.
|
|
254
318
|
// So, we have to verify that the method exists, and if it doesn't we throw
|
|
255
|
-
if (typeof
|
|
256
|
-
//
|
|
257
|
-
|
|
319
|
+
if (typeof interceptor.interceptResponse === "undefined") {
|
|
320
|
+
// Simply log a message for now that the interceptors doesn't implement the 'interceptResponse' method.
|
|
321
|
+
this.loghandler.info("The Request Interceptor doesn't implement the interceptResponse method.", { name: interceptor.constructor.name, interceptor });
|
|
322
|
+
continue;
|
|
258
323
|
}
|
|
259
324
|
try {
|
|
260
|
-
|
|
261
|
-
|
|
325
|
+
interceptedResponse = (_c = yield ((_b = (_a = interceptor).interceptResponse) === null || _b === void 0 ? void 0 : _b.call(_a, interceptedResponse, request, methodNode))) !== null && _c !== void 0 ? _c : interceptedResponse;
|
|
326
|
+
}
|
|
327
|
+
catch (e) {
|
|
328
|
+
this.loghandler.error("There was an exception thrown while executing the 'interceptResponse' method of the RequestInterceptor named: '" + interceptor.constructor.name + "'.", { e }, NetworkingModuleKeyname);
|
|
329
|
+
throw e;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
return interceptedResponse;
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* This method executes all the Request Interceptors and returns the response updated by the error interceptors.
|
|
338
|
+
*
|
|
339
|
+
* @param error
|
|
340
|
+
* @param request
|
|
341
|
+
* @param container
|
|
342
|
+
* @param methodNode
|
|
343
|
+
* @private
|
|
344
|
+
*/
|
|
345
|
+
executeErrorResponseInterceptors(error, request, container, methodNode) {
|
|
346
|
+
var _a, _b, _c;
|
|
347
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
348
|
+
// Execute all the request interceptors
|
|
349
|
+
let interceptedResponse = new Response();
|
|
350
|
+
if (error instanceof HttpError) {
|
|
351
|
+
interceptedResponse.status = error.httpStatus;
|
|
352
|
+
interceptedResponse.body = {
|
|
353
|
+
name: error.name,
|
|
354
|
+
message: error.message,
|
|
355
|
+
stack: error.stack,
|
|
356
|
+
errors: error.errors,
|
|
357
|
+
extra: error.extra,
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
else {
|
|
361
|
+
interceptedResponse.status = 500;
|
|
362
|
+
interceptedResponse.body = { name: error.name, message: error.message, stack: error.stack };
|
|
363
|
+
}
|
|
364
|
+
interceptedResponse.request = request;
|
|
365
|
+
// Check first if there are any Request interceptors
|
|
366
|
+
if (container.isRegistered(ServiceDefinitionTagEnum.RequestInterceptor, true)) {
|
|
367
|
+
const interceptors = container.resolveAll(ServiceDefinitionTagEnum.RequestInterceptor);
|
|
368
|
+
for (const interceptor of interceptors) {
|
|
369
|
+
// We don't have a guarantee that the Router response interceptors will implement the Interface, even though we specify it should.
|
|
370
|
+
// So, we have to verify that the method exists, and if it doesn't we throw
|
|
371
|
+
if (typeof interceptor.interceptError === "undefined") {
|
|
372
|
+
// Simply log a message for now that the interceptors doesn't implement the 'interceptError' method.
|
|
373
|
+
this.loghandler.info("The Request Interceptor doesn't implement the interceptError method.", { name: interceptor.constructor.name, interceptor });
|
|
374
|
+
continue;
|
|
375
|
+
}
|
|
376
|
+
try {
|
|
377
|
+
interceptedResponse = (_c = yield ((_b = (_a = interceptor).interceptError) === null || _b === void 0 ? void 0 : _b.call(_a, error, interceptedResponse, request, methodNode))) !== null && _c !== void 0 ? _c : interceptedResponse;
|
|
262
378
|
}
|
|
263
379
|
catch (e) {
|
|
264
|
-
this.loghandler.error("There was an exception thrown while executing the '
|
|
380
|
+
this.loghandler.error("There was an exception thrown while executing the 'interceptError' method of the RequestInterceptor named: '" + interceptor.constructor.name + "'.", { e }, NetworkingModuleKeyname);
|
|
265
381
|
throw e;
|
|
266
382
|
}
|
|
267
383
|
}
|
|
268
384
|
}
|
|
269
|
-
|
|
385
|
+
interceptedResponse = yield this.executeResponseInterceptors(interceptedResponse, request, container, methodNode);
|
|
386
|
+
return interceptedResponse;
|
|
270
387
|
});
|
|
271
388
|
}
|
|
272
389
|
};
|
|
273
390
|
Router = __decorate([
|
|
391
|
+
tag("RouterInterface"),
|
|
274
392
|
singleton(),
|
|
275
393
|
__param(0, inject("LogHandlerInterface")),
|
|
276
394
|
__param(2, inject("AuthorizerManagerInterface")),
|