@rsdk/http.server 5.7.0-next.6 → 6.0.0-next.1
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/controllers/health.http-controller.d.ts +1 -2
- package/dist/controllers/health.http-controller.js +4 -2
- package/dist/controllers/health.http-controller.js.map +1 -1
- package/dist/controllers/metrics.controller.js +5 -3
- package/dist/controllers/metrics.controller.js.map +1 -1
- package/dist/http.config.d.ts +0 -1
- package/dist/http.config.js +0 -8
- package/dist/http.config.js.map +1 -1
- package/dist/http.transport.d.ts +7 -7
- package/dist/http.transport.js +7 -26
- package/dist/http.transport.js.map +1 -1
- package/package.json +6 -3
- package/src/controllers/health.http-controller.ts +5 -5
- package/src/controllers/metrics.controller.ts +4 -3
- package/src/http.config.ts +0 -6
- package/src/http.transport.ts +8 -25
- package/dist/http-logger.interceptor.d.ts +0 -10
- package/dist/http-logger.interceptor.js +0 -72
- package/dist/http-logger.interceptor.js.map +0 -1
- package/dist/service-routes.d.ts +0 -15
- package/dist/service-routes.js +0 -23
- package/dist/service-routes.js.map +0 -1
- package/src/http-logger.interceptor.ts +0 -72
- package/src/service-routes.ts +0 -23
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { HealthChecksService } from '@rsdk/core';
|
|
1
|
+
import { CheckSummary, HealthChecksService } from '@rsdk/core';
|
|
3
2
|
export declare class HealthHttpController {
|
|
4
3
|
private readonly health;
|
|
5
4
|
constructor(health: HealthChecksService);
|
|
@@ -14,8 +14,9 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.HealthHttpController = void 0;
|
|
16
16
|
const common_1 = require("@nestjs/common");
|
|
17
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
17
18
|
const core_1 = require("@rsdk/core");
|
|
18
|
-
const
|
|
19
|
+
const zones_1 = require("@rsdk/zones");
|
|
19
20
|
let HealthHttpController = class HealthHttpController {
|
|
20
21
|
health;
|
|
21
22
|
constructor(health) {
|
|
@@ -28,7 +29,6 @@ let HealthHttpController = class HealthHttpController {
|
|
|
28
29
|
exports.HealthHttpController = HealthHttpController;
|
|
29
30
|
__decorate([
|
|
30
31
|
(0, common_1.Get)('health'),
|
|
31
|
-
(0, service_routes_1.ServiceRoute)(),
|
|
32
32
|
__param(0, (0, common_1.Query)('filter')),
|
|
33
33
|
__metadata("design:type", Function),
|
|
34
34
|
__metadata("design:paramtypes", [String]),
|
|
@@ -36,6 +36,8 @@ __decorate([
|
|
|
36
36
|
], HealthHttpController.prototype, "ready", null);
|
|
37
37
|
exports.HealthHttpController = HealthHttpController = __decorate([
|
|
38
38
|
(0, common_1.Controller)(),
|
|
39
|
+
(0, swagger_1.ApiTags)('Maintenance'),
|
|
40
|
+
(0, zones_1.Internal)(),
|
|
39
41
|
__metadata("design:paramtypes", [core_1.HealthChecksService])
|
|
40
42
|
], HealthHttpController);
|
|
41
43
|
//# sourceMappingURL=health.http-controller.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health.http-controller.js","sourceRoot":"","sources":["../../src/controllers/health.http-controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAwD;
|
|
1
|
+
{"version":3,"file":"health.http-controller.js","sourceRoot":"","sources":["../../src/controllers/health.http-controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAwD;AACxD,6CAA0C;AAC1C,qCAA+D;AAC/D,uCAAuC;AAKhC,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IACF;IAA7B,YAA6B,MAA2B;QAA3B,WAAM,GAAN,MAAM,CAAqB;IAAG,CAAC;IAG5D,KAAK,CAAkB,MAAc;QACnC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;CACF,CAAA;AAPY,oDAAoB;AAI/B;IADC,IAAA,YAAG,EAAC,QAAQ,CAAC;IACP,WAAA,IAAA,cAAK,EAAC,QAAQ,CAAC,CAAA;;;;iDAErB;+BANU,oBAAoB;IAHhC,IAAA,mBAAU,GAAE;IACZ,IAAA,iBAAO,EAAC,aAAa,CAAC;IACtB,IAAA,gBAAQ,GAAE;qCAE4B,0BAAmB;GAD7C,oBAAoB,CAOhC"}
|
|
@@ -14,9 +14,10 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.MetricsHttpController = void 0;
|
|
16
16
|
const common_1 = require("@nestjs/common");
|
|
17
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
17
18
|
const common_2 = require("@rsdk/common");
|
|
18
19
|
const core_1 = require("@rsdk/core");
|
|
19
|
-
const
|
|
20
|
+
const zones_1 = require("@rsdk/zones");
|
|
20
21
|
let MetricsHttpController = class MetricsHttpController {
|
|
21
22
|
async get(response) {
|
|
22
23
|
if (typeof response.header === 'function') {
|
|
@@ -37,13 +38,14 @@ let MetricsHttpController = class MetricsHttpController {
|
|
|
37
38
|
exports.MetricsHttpController = MetricsHttpController;
|
|
38
39
|
__decorate([
|
|
39
40
|
(0, common_1.Get)('/metrics'),
|
|
40
|
-
(0, service_routes_1.ServiceRoute)(),
|
|
41
41
|
__param(0, (0, common_1.Res)({ passthrough: false })),
|
|
42
42
|
__metadata("design:type", Function),
|
|
43
43
|
__metadata("design:paramtypes", [Object]),
|
|
44
44
|
__metadata("design:returntype", Promise)
|
|
45
45
|
], MetricsHttpController.prototype, "get", null);
|
|
46
46
|
exports.MetricsHttpController = MetricsHttpController = __decorate([
|
|
47
|
-
(0,
|
|
47
|
+
(0, zones_1.Internal)(),
|
|
48
|
+
(0, common_1.Controller)(),
|
|
49
|
+
(0, swagger_1.ApiTags)('Maintenance')
|
|
48
50
|
], MetricsHttpController);
|
|
49
51
|
//# sourceMappingURL=metrics.controller.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.controller.js","sourceRoot":"","sources":["../../src/controllers/metrics.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAsD;AACtD,yCAAoC;AACpC,qCAAyD;
|
|
1
|
+
{"version":3,"file":"metrics.controller.js","sourceRoot":"","sources":["../../src/controllers/metrics.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAsD;AACtD,6CAA0C;AAC1C,yCAAoC;AACpC,qCAAyD;AACzD,uCAAuC;AAKhC,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAE1B,AAAN,KAAK,CAAC,GAAG,CAA8B,QAAa;QAClD,IAAI,OAAO,QAAQ,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAC1C,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,eAAQ,CAAC,WAAW,CAAC,CAAC;QACxD,CAAC;aAAM,IAAI,OAAO,QAAQ,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;YACpD,QAAQ,CAAC,SAAS,CAAC,cAAc,EAAE,eAAQ,CAAC,WAAW,CAAC,CAAC;QAC3D,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,wBAAiB,CAAC,IAAA,aAAI,EAAA;;;OAG/B,CAAC,CAAC;QACL,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC,MAAM,eAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1C,CAAC;CACF,CAAA;AAhBY,sDAAqB;AAE1B;IADL,IAAA,YAAG,EAAC,UAAU,CAAC;IACL,WAAA,IAAA,YAAG,EAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAA;;;;gDAarC;gCAfU,qBAAqB;IAHjC,IAAA,gBAAQ,GAAE;IACV,IAAA,mBAAU,GAAE;IACZ,IAAA,iBAAO,EAAC,aAAa,CAAC;GACV,qBAAqB,CAgBjC"}
|
package/dist/http.config.d.ts
CHANGED
package/dist/http.config.js
CHANGED
|
@@ -17,7 +17,6 @@ let HttpConfig = class HttpConfig extends core_1.Config {
|
|
|
17
17
|
port;
|
|
18
18
|
bodyLimit;
|
|
19
19
|
swaggerUI;
|
|
20
|
-
requestLogging;
|
|
21
20
|
};
|
|
22
21
|
exports.HttpConfig = HttpConfig;
|
|
23
22
|
__decorate([
|
|
@@ -49,13 +48,6 @@ __decorate([
|
|
|
49
48
|
}),
|
|
50
49
|
__metadata("design:type", Boolean)
|
|
51
50
|
], HttpConfig.prototype, "swaggerUI", void 0);
|
|
52
|
-
__decorate([
|
|
53
|
-
(0, core_1.Property)('HTTP_REQUEST_LOGGING', new core_1.BoolParser(), {
|
|
54
|
-
defaultValue: false,
|
|
55
|
-
description: 'Enable trace logging all requests',
|
|
56
|
-
}),
|
|
57
|
-
__metadata("design:type", Boolean)
|
|
58
|
-
], HttpConfig.prototype, "requestLogging", void 0);
|
|
59
51
|
exports.HttpConfig = HttpConfig = __decorate([
|
|
60
52
|
(0, core_1.ConfigSection)({
|
|
61
53
|
tags: [core_1.ConfigTag.infrastructure, core_1.ConfigTag.transport, core_1.ConfigTag.http],
|
package/dist/http.config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.config.js","sourceRoot":"","sources":["../src/http.config.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAAoC;AACpC,qCASoB;AAKb,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,aAAM;IAK3B,IAAI,CAAU;IAOd,IAAI,CAAU;IAMd,SAAS,CAAQ;IAMjB,SAAS,CAAW;
|
|
1
|
+
{"version":3,"file":"http.config.js","sourceRoot":"","sources":["../src/http.config.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAAoC;AACpC,qCASoB;AAKb,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,aAAM;IAK3B,IAAI,CAAU;IAOd,IAAI,CAAU;IAMd,SAAS,CAAQ;IAMjB,SAAS,CAAW;CAC9B,CAAA;AAzBY,gCAAU;AAKZ;IAJR,IAAA,eAAQ,EAAC,WAAW,EAAE,IAAI,mBAAY,EAAE,EAAE;QACzC,YAAY,EAAE,SAAS;QACvB,WAAW,EAAE,WAAW;KACzB,CAAC;;wCACqB;AAOd;IALR,IAAA,eAAQ,EAAC,WAAW,EAAE,IAAI,gBAAS,EAAE,EAAE;QACtC,4DAA4D;QAC5D,YAAY,EAAE,KAAK;QACnB,WAAW,EAAE,WAAW;KACzB,CAAC;;wCACqB;AAMd;IAJR,IAAA,eAAQ,EAAC,iBAAiB,EAAE,IAAI,iBAAU,EAAE,EAAE;QAC7C,YAAY,EAAE,IAAI,aAAI,CAAC,GAAG,EAAE,IAAI,CAAC;QACjC,WAAW,EAAE,oBAAoB;KAClC,CAAC;8BACmB,aAAI;6CAAC;AAMjB;IAJR,IAAA,eAAQ,EAAC,yBAAyB,EAAE,IAAI,iBAAU,EAAE,EAAE;QACrD,YAAY,EAAE,IAAI;QAClB,WAAW,EAAE,wCAAwC;KACtD,CAAC;;6CAC2B;qBAxBlB,UAAU;IAHtB,IAAA,oBAAa,EAAC;QACb,IAAI,EAAE,CAAC,gBAAS,CAAC,cAAc,EAAE,gBAAS,CAAC,SAAS,EAAE,gBAAS,CAAC,IAAI,CAAC;KACtE,CAAC;GACW,UAAU,CAyBtB"}
|
package/dist/http.transport.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { type ExecutionContext } from '@nestjs/common';
|
|
2
2
|
import type { Controller, INestApplication } from '@nestjs/common/interfaces';
|
|
3
3
|
import type { CorsOptions } from '@nestjs/common/interfaces/external/cors-options.interface';
|
|
4
|
-
import {
|
|
4
|
+
import type { AbstractHttpAdapter } from '@nestjs/core';
|
|
5
5
|
import { DocumentBuilder as OriginalDocumentBuilder } from '@nestjs/swagger';
|
|
6
6
|
import type { Constructor, DeepPartial } from '@rsdk/common';
|
|
7
|
-
import type { ConfigContext, GenericHeaders, HttpOptions, IErrorsFormatter, IErrorsSender, IErrorsTransformer, IHttpTransport,
|
|
7
|
+
import type { ConfigContext, GenericHeaders, HttpOptions, IErrorsFormatter, IErrorsSender, IErrorsTransformer, IHttpTransport, LogFormatter } from '@rsdk/core';
|
|
8
8
|
import { HttpConfig } from './http.config';
|
|
9
9
|
export interface ParsersConfig {
|
|
10
10
|
body: {
|
|
@@ -47,15 +47,15 @@ export declare abstract class AbstractHttpTransport implements IHttpTransport {
|
|
|
47
47
|
constructor(options?: HttpTransportOptions | undefined);
|
|
48
48
|
extractHeaders(ctx: ExecutionContext): GenericHeaders;
|
|
49
49
|
matchByContext(ctx: ExecutionContext): boolean;
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
getErrorTransformers(): IErrorsTransformer[];
|
|
50
|
+
errorFormatter(): IErrorsFormatter;
|
|
51
|
+
errorSender(): IErrorsSender;
|
|
52
|
+
errorTransformers(): IErrorsTransformer[];
|
|
54
53
|
getProtocol(): string;
|
|
55
54
|
getHealthController(): Constructor<Controller>;
|
|
56
55
|
getMetricsController(): Constructor<Controller>;
|
|
57
56
|
createHttpOptions(configContext: ConfigContext): HttpOptions;
|
|
58
57
|
createAdapter(configContext: ConfigContext): AbstractHttpAdapter;
|
|
59
58
|
configureApp(app: INestApplication, configContext: ConfigContext): Promise<void> | void;
|
|
60
|
-
abstract createHttpAdapter(
|
|
59
|
+
abstract createHttpAdapter(config: HttpConfig): AbstractHttpAdapter;
|
|
60
|
+
abstract logFormatter(): LogFormatter;
|
|
61
61
|
}
|
package/dist/http.transport.js
CHANGED
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AbstractHttpTransport = void 0;
|
|
4
|
-
const core_1 = require("@nestjs/core");
|
|
5
4
|
const swagger_1 = require("@nestjs/swagger");
|
|
6
|
-
const
|
|
5
|
+
const core_1 = require("@rsdk/core");
|
|
7
6
|
const node_fs_1 = require("node:fs");
|
|
8
7
|
const controllers_1 = require("./controllers");
|
|
9
8
|
const error_handling_1 = require("./error-handling");
|
|
10
9
|
const http_config_1 = require("./http.config");
|
|
11
10
|
const http_headers_1 = require("./http.headers");
|
|
12
|
-
const http_logger_interceptor_1 = require("./http-logger.interceptor");
|
|
13
11
|
class AbstractHttpTransport {
|
|
14
12
|
options;
|
|
15
13
|
constructor(options) {
|
|
@@ -21,30 +19,13 @@ class AbstractHttpTransport {
|
|
|
21
19
|
matchByContext(ctx) {
|
|
22
20
|
return ctx.getType() === 'http';
|
|
23
21
|
}
|
|
24
|
-
|
|
25
|
-
return [
|
|
26
|
-
{
|
|
27
|
-
/**
|
|
28
|
-
* Abstract class is transpiled into a simple class just as not abstract classes.
|
|
29
|
-
* But typescript doesn't like this (((
|
|
30
|
-
*/
|
|
31
|
-
module: AbstractHttpTransport,
|
|
32
|
-
providers: [
|
|
33
|
-
{
|
|
34
|
-
provide: core_1.APP_INTERCEPTOR,
|
|
35
|
-
useClass: http_logger_interceptor_1.HttpLoggerInterceptor,
|
|
36
|
-
},
|
|
37
|
-
],
|
|
38
|
-
},
|
|
39
|
-
];
|
|
40
|
-
}
|
|
41
|
-
getErrorsFormatter() {
|
|
22
|
+
errorFormatter() {
|
|
42
23
|
return new error_handling_1.HttpErrorsFormatter();
|
|
43
24
|
}
|
|
44
|
-
|
|
25
|
+
errorSender() {
|
|
45
26
|
return new error_handling_1.HttpErrorsSender();
|
|
46
27
|
}
|
|
47
|
-
|
|
28
|
+
errorTransformers() {
|
|
48
29
|
return [new error_handling_1.HttpErrorsTransformer()];
|
|
49
30
|
}
|
|
50
31
|
getProtocol() {
|
|
@@ -77,9 +58,9 @@ class AbstractHttpTransport {
|
|
|
77
58
|
}
|
|
78
59
|
if (swaggerUI || swagger?.file) {
|
|
79
60
|
const builder = new swagger_1.DocumentBuilder()
|
|
80
|
-
.setTitle(app.get(
|
|
81
|
-
.setVersion(app.get(
|
|
82
|
-
.setDescription(app.get(
|
|
61
|
+
.setTitle(app.get(core_1.APP_NAME))
|
|
62
|
+
.setVersion(app.get(core_1.APP_VERSION))
|
|
63
|
+
.setDescription(app.get(core_1.APP_DESCRIPTION));
|
|
83
64
|
// Applies additional configuration from user
|
|
84
65
|
swagger?.configure?.(builder);
|
|
85
66
|
const openApiConfig = builder.build();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.transport.js","sourceRoot":"","sources":["../src/http.transport.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"http.transport.js","sourceRoot":"","sources":["../src/http.transport.ts"],"names":[],"mappings":";;;AAIA,6CAGyB;AAYzB,qCAAoE;AACpE,qCAAwC;AAExC,+CAA4E;AAC5E,qDAI0B;AAC1B,+CAA2C;AAC3C,iDAA6C;AAiD7C,MAAsB,qBAAqB;IACV;IAA/B,YAA+B,OAA8B;QAA9B,YAAO,GAAP,OAAO,CAAuB;IAAG,CAAC;IAEjE,cAAc,CAAC,GAAqB;QAClC,OAAO,IAAI,0BAAW,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,cAAc,CAAC,GAAqB;QAClC,OAAO,GAAG,CAAC,OAAO,EAAE,KAAK,MAAM,CAAC;IAClC,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,oCAAmB,EAAE,CAAC;IACnC,CAAC;IAED,WAAW;QACT,OAAO,IAAI,iCAAgB,EAAE,CAAC;IAChC,CAAC;IAED,iBAAiB;QACf,OAAO,CAAC,IAAI,sCAAqB,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,WAAW;QACT,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,mBAAmB;QACjB,OAAO,kCAAoB,CAAC;IAC9B,CAAC;IAED,oBAAoB;QAClB,OAAO,mCAAqB,CAAC;IAC/B,CAAC;IAED,iBAAiB,CAAC,aAA4B;QAC5C,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,wBAAU,CAAC,CAAC;QAEzD,OAAO;YACL,IAAI;YACJ,IAAI;SACL,CAAC;IACJ,CAAC;IAED,aAAa,CAAC,aAA4B;QACxC,OAAO,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,OAAO,CAAC,wBAAU,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,YAAY,CACV,GAAqB,EACrB,aAA4B;QAE5B,MAAM,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,wBAAU,CAAC,CAAC;QACxD,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QAC3D,IAAI,YAAY,EAAE,CAAC;YACjB,GAAG,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,IAAI,EAAE,CAAC;YACT,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;QAED,IAAI,SAAS,IAAI,OAAO,EAAE,IAAI,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,IAAI,yBAAuB,EAAE;iBAC1C,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,eAAQ,CAAC,CAAC;iBAC3B,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,kBAAW,CAAC,CAAC;iBAChC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,sBAAe,CAAC,CAAC,CAAC;YAE5C,6CAA6C;YAC7C,OAAO,EAAE,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC;YAE9B,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,uBAAa,CAAC,cAAc,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;YAE9D,IAAI,OAAO,EAAE,IAAI,EAAE,CAAC;gBAClB,IAAA,uBAAa,EAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;YACpD,CAAC;YAED,IAAI,SAAS,EAAE,CAAC;gBACd,uBAAa,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;IACH,CAAC;CAKF;AAtFD,sDAsFC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rsdk/http.server",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "6.0.0-next.1",
|
|
4
4
|
"description": "HTTP transport for rsdk apps (needs some of HTTP adapters)",
|
|
5
5
|
"license": "Apache License 2.0",
|
|
6
6
|
"publishConfig": {
|
|
@@ -17,8 +17,11 @@
|
|
|
17
17
|
"@rsdk/common": "*",
|
|
18
18
|
"@rsdk/core": "*",
|
|
19
19
|
"@rsdk/logging": "*",
|
|
20
|
+
"@rsdk/zones": "*",
|
|
21
|
+
"body-parser": "^1.20.1",
|
|
22
|
+
"cookie-parser": "^1.4.6",
|
|
20
23
|
"reflect-metadata": "^0.1.12 || ^0.2.0",
|
|
21
|
-
"rxjs": "^7.1
|
|
24
|
+
"rxjs": "^7.8.1"
|
|
22
25
|
},
|
|
23
|
-
"gitHead": "
|
|
26
|
+
"gitHead": "3114a76df17cf98d6f3cbb8a931599a883af6783"
|
|
24
27
|
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { Controller, Get, Query } from '@nestjs/common';
|
|
2
|
-
import
|
|
3
|
-
import { HealthChecksService } from '@rsdk/core';
|
|
4
|
-
|
|
5
|
-
import { ServiceRoute } from '../service-routes';
|
|
2
|
+
import { ApiTags } from '@nestjs/swagger';
|
|
3
|
+
import { CheckSummary, HealthChecksService } from '@rsdk/core';
|
|
4
|
+
import { Internal } from '@rsdk/zones';
|
|
6
5
|
|
|
7
6
|
@Controller()
|
|
7
|
+
@ApiTags('Maintenance')
|
|
8
|
+
@Internal()
|
|
8
9
|
export class HealthHttpController {
|
|
9
10
|
constructor(private readonly health: HealthChecksService) {}
|
|
10
11
|
|
|
11
12
|
@Get('health')
|
|
12
|
-
@ServiceRoute()
|
|
13
13
|
ready(@Query('filter') filter: string): Promise<CheckSummary> {
|
|
14
14
|
return this.health.check(filter);
|
|
15
15
|
}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { Controller, Get, Res } from '@nestjs/common';
|
|
2
|
+
import { ApiTags } from '@nestjs/swagger';
|
|
2
3
|
import { text } from '@rsdk/common';
|
|
3
4
|
import { InternalException, register } from '@rsdk/core';
|
|
5
|
+
import { Internal } from '@rsdk/zones';
|
|
4
6
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
+
@Internal()
|
|
7
8
|
@Controller()
|
|
9
|
+
@ApiTags('Maintenance')
|
|
8
10
|
export class MetricsHttpController {
|
|
9
11
|
@Get('/metrics')
|
|
10
|
-
@ServiceRoute()
|
|
11
12
|
async get(@Res({ passthrough: false }) response: any): Promise<void> {
|
|
12
13
|
if (typeof response.header === 'function') {
|
|
13
14
|
response.header('Content-Type', register.contentType);
|
package/src/http.config.ts
CHANGED
|
@@ -38,10 +38,4 @@ export class HttpConfig extends Config {
|
|
|
38
38
|
description: 'Enable swagger UI on /swagger endpoint',
|
|
39
39
|
})
|
|
40
40
|
readonly swaggerUI!: boolean;
|
|
41
|
-
|
|
42
|
-
@Property('HTTP_REQUEST_LOGGING', new BoolParser(), {
|
|
43
|
-
defaultValue: false,
|
|
44
|
-
description: 'Enable trace logging all requests',
|
|
45
|
-
})
|
|
46
|
-
readonly requestLogging!: boolean;
|
|
47
41
|
}
|
package/src/http.transport.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type ExecutionContext } from '@nestjs/common';
|
|
2
2
|
import type { Controller, INestApplication } from '@nestjs/common/interfaces';
|
|
3
3
|
import type { CorsOptions } from '@nestjs/common/interfaces/external/cors-options.interface';
|
|
4
|
-
import {
|
|
4
|
+
import type { AbstractHttpAdapter } from '@nestjs/core';
|
|
5
5
|
import {
|
|
6
6
|
DocumentBuilder as OriginalDocumentBuilder,
|
|
7
7
|
SwaggerModule,
|
|
@@ -15,7 +15,7 @@ import type {
|
|
|
15
15
|
IErrorsSender,
|
|
16
16
|
IErrorsTransformer,
|
|
17
17
|
IHttpTransport,
|
|
18
|
-
|
|
18
|
+
LogFormatter,
|
|
19
19
|
} from '@rsdk/core';
|
|
20
20
|
import { APP_DESCRIPTION, APP_NAME, APP_VERSION } from '@rsdk/core';
|
|
21
21
|
import { writeFileSync } from 'node:fs';
|
|
@@ -28,7 +28,6 @@ import {
|
|
|
28
28
|
} from './error-handling';
|
|
29
29
|
import { HttpConfig } from './http.config';
|
|
30
30
|
import { HttpHeaders } from './http.headers';
|
|
31
|
-
import { HttpLoggerInterceptor } from './http-logger.interceptor';
|
|
32
31
|
|
|
33
32
|
export interface ParsersConfig {
|
|
34
33
|
body: {
|
|
@@ -88,33 +87,15 @@ export abstract class AbstractHttpTransport implements IHttpTransport {
|
|
|
88
87
|
return ctx.getType() === 'http';
|
|
89
88
|
}
|
|
90
89
|
|
|
91
|
-
|
|
92
|
-
return [
|
|
93
|
-
{
|
|
94
|
-
/**
|
|
95
|
-
* Abstract class is transpiled into a simple class just as not abstract classes.
|
|
96
|
-
* But typescript doesn't like this (((
|
|
97
|
-
*/
|
|
98
|
-
module: AbstractHttpTransport as any,
|
|
99
|
-
providers: [
|
|
100
|
-
{
|
|
101
|
-
provide: APP_INTERCEPTOR,
|
|
102
|
-
useClass: HttpLoggerInterceptor,
|
|
103
|
-
},
|
|
104
|
-
],
|
|
105
|
-
},
|
|
106
|
-
];
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
getErrorsFormatter(): IErrorsFormatter {
|
|
90
|
+
errorFormatter(): IErrorsFormatter {
|
|
110
91
|
return new HttpErrorsFormatter();
|
|
111
92
|
}
|
|
112
93
|
|
|
113
|
-
|
|
94
|
+
errorSender(): IErrorsSender {
|
|
114
95
|
return new HttpErrorsSender();
|
|
115
96
|
}
|
|
116
97
|
|
|
117
|
-
|
|
98
|
+
errorTransformers(): IErrorsTransformer[] {
|
|
118
99
|
return [new HttpErrorsTransformer()];
|
|
119
100
|
}
|
|
120
101
|
|
|
@@ -178,5 +159,7 @@ export abstract class AbstractHttpTransport implements IHttpTransport {
|
|
|
178
159
|
}
|
|
179
160
|
}
|
|
180
161
|
|
|
181
|
-
abstract createHttpAdapter(
|
|
162
|
+
abstract createHttpAdapter(config: HttpConfig): AbstractHttpAdapter;
|
|
163
|
+
|
|
164
|
+
abstract logFormatter(): LogFormatter;
|
|
182
165
|
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { CallHandler, ExecutionContext, NestInterceptor } from '@nestjs/common';
|
|
2
|
-
import { ILogger } from '@rsdk/logging';
|
|
3
|
-
import type { Observable } from 'rxjs';
|
|
4
|
-
import { HttpConfig } from './http.config';
|
|
5
|
-
export declare class HttpLoggerInterceptor implements NestInterceptor {
|
|
6
|
-
private logger;
|
|
7
|
-
private httpConfig;
|
|
8
|
-
constructor(logger: ILogger, httpConfig: HttpConfig);
|
|
9
|
-
intercept(context: ExecutionContext, next: CallHandler<any>): Observable<any> | Promise<Observable<any>>;
|
|
10
|
-
}
|
|
@@ -1,72 +0,0 @@
|
|
|
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
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
-
};
|
|
11
|
-
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
-
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
-
};
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.HttpLoggerInterceptor = void 0;
|
|
16
|
-
const common_1 = require("@nestjs/common");
|
|
17
|
-
const core_1 = require("@rsdk/core");
|
|
18
|
-
const rxjs_1 = require("rxjs");
|
|
19
|
-
const http_config_1 = require("./http.config");
|
|
20
|
-
let HttpLoggerInterceptor = class HttpLoggerInterceptor {
|
|
21
|
-
logger;
|
|
22
|
-
httpConfig;
|
|
23
|
-
constructor(logger, httpConfig) {
|
|
24
|
-
this.logger = logger;
|
|
25
|
-
this.httpConfig = httpConfig;
|
|
26
|
-
}
|
|
27
|
-
intercept(context, next) {
|
|
28
|
-
if (!this.httpConfig.requestLogging) {
|
|
29
|
-
return next.handle();
|
|
30
|
-
}
|
|
31
|
-
const isHttp = context.getType() === 'http';
|
|
32
|
-
if (!isHttp) {
|
|
33
|
-
return next.handle();
|
|
34
|
-
}
|
|
35
|
-
const http = context.switchToHttp();
|
|
36
|
-
const request = http.getRequest();
|
|
37
|
-
const now = Date.now();
|
|
38
|
-
const requestForLog = {
|
|
39
|
-
body: request.body,
|
|
40
|
-
query: request.query,
|
|
41
|
-
params: request.params,
|
|
42
|
-
method: request.method,
|
|
43
|
-
url: request.url,
|
|
44
|
-
headers: request.headers,
|
|
45
|
-
};
|
|
46
|
-
this.logger.trace('received http request', {
|
|
47
|
-
request: requestForLog,
|
|
48
|
-
timestamp: now,
|
|
49
|
-
});
|
|
50
|
-
return next.handle().pipe((0, rxjs_1.catchError)((err) => {
|
|
51
|
-
this.logger.trace('handled http request with error', {
|
|
52
|
-
request: requestForLog,
|
|
53
|
-
start: now,
|
|
54
|
-
end: Date.now() - now,
|
|
55
|
-
err,
|
|
56
|
-
});
|
|
57
|
-
return (0, rxjs_1.throwError)(() => err);
|
|
58
|
-
}), (0, rxjs_1.tap)((response) => this.logger.trace('handled http request', {
|
|
59
|
-
request: requestForLog,
|
|
60
|
-
start: now,
|
|
61
|
-
response,
|
|
62
|
-
end: Date.now() - now,
|
|
63
|
-
})));
|
|
64
|
-
}
|
|
65
|
-
};
|
|
66
|
-
exports.HttpLoggerInterceptor = HttpLoggerInterceptor;
|
|
67
|
-
exports.HttpLoggerInterceptor = HttpLoggerInterceptor = __decorate([
|
|
68
|
-
(0, common_1.Injectable)(),
|
|
69
|
-
__param(0, (0, core_1.InjectLogger)(HttpLoggerInterceptor)),
|
|
70
|
-
__metadata("design:paramtypes", [Object, http_config_1.HttpConfig])
|
|
71
|
-
], HttpLoggerInterceptor);
|
|
72
|
-
//# sourceMappingURL=http-logger.interceptor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"http-logger.interceptor.js","sourceRoot":"","sources":["../src/http-logger.interceptor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAKA,2CAA4C;AAC5C,qCAA0C;AAG1C,+BAAmD;AAEnD,+CAA2C;AAGpC,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAEe;IACrC;IAFV,YAC+C,MAAe,EACpD,UAAsB;QADe,WAAM,GAAN,MAAM,CAAS;QACpD,eAAU,GAAV,UAAU,CAAY;IAC7B,CAAC;IAEJ,SAAS,CACP,OAAyB,EACzB,IAAsB;QAEtB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,KAAK,MAAM,CAAC;QAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,CAAC;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;QAEpC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAElC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,aAAa,GAAG;YACpB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE;YACzC,OAAO,EAAE,aAAa;YACtB,SAAS,EAAE,GAAG;SACf,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CACvB,IAAA,iBAAU,EAAC,CAAC,GAAG,EAAE,EAAE;YACjB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE;gBACnD,OAAO,EAAE,aAAa;gBACtB,KAAK,EAAE,GAAG;gBACV,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG;gBACrB,GAAG;aACJ,CAAC,CAAC;YACH,OAAO,IAAA,iBAAU,EAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;QAC/B,CAAC,CAAC,EACF,IAAA,UAAG,EAAC,CAAC,QAAQ,EAAE,EAAE,CACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE;YACxC,OAAO,EAAE,aAAa;YACtB,KAAK,EAAE,GAAG;YACV,QAAQ;YACR,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG;SACtB,CAAC,CACH,CACF,CAAC;IACJ,CAAC;CACF,CAAA;AAzDY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,mBAAY,EAAC,qBAAqB,CAAC,CAAA;6CAChB,wBAAU;GAHrB,qBAAqB,CAyDjC"}
|
package/dist/service-routes.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Хранение ссылок на обработчики http ручек.
|
|
3
|
-
* Прежде всего предназначен для дополнительного декорирования этих ручек в зависимости от конфигурации
|
|
4
|
-
*/
|
|
5
|
-
export declare class ServiceRoutes {
|
|
6
|
-
static storage: {
|
|
7
|
-
target: any;
|
|
8
|
-
propertyKey: string | symbol;
|
|
9
|
-
descriptor: PropertyDescriptor;
|
|
10
|
-
}[];
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Сохраняет ссылку на http ручку в хранилище сервисных ручек для дополнительного декорирования в зависимости от конфигурации
|
|
14
|
-
*/
|
|
15
|
-
export declare function ServiceRoute(): MethodDecorator;
|
package/dist/service-routes.js
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ServiceRoutes = void 0;
|
|
4
|
-
exports.ServiceRoute = ServiceRoute;
|
|
5
|
-
const swagger_1 = require("@nestjs/swagger");
|
|
6
|
-
/**
|
|
7
|
-
* Хранение ссылок на обработчики http ручек.
|
|
8
|
-
* Прежде всего предназначен для дополнительного декорирования этих ручек в зависимости от конфигурации
|
|
9
|
-
*/
|
|
10
|
-
class ServiceRoutes {
|
|
11
|
-
static storage = [];
|
|
12
|
-
}
|
|
13
|
-
exports.ServiceRoutes = ServiceRoutes;
|
|
14
|
-
/**
|
|
15
|
-
* Сохраняет ссылку на http ручку в хранилище сервисных ручек для дополнительного декорирования в зависимости от конфигурации
|
|
16
|
-
*/
|
|
17
|
-
function ServiceRoute() {
|
|
18
|
-
return (target, propertyKey, descriptor) => {
|
|
19
|
-
ServiceRoutes.storage.push({ target, propertyKey, descriptor });
|
|
20
|
-
return (0, swagger_1.ApiExcludeEndpoint)(true)(target, propertyKey, descriptor);
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
//# sourceMappingURL=service-routes.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"service-routes.js","sourceRoot":"","sources":["../src/service-routes.ts"],"names":[],"mappings":";;;AAiBA,oCAKC;AAtBD,6CAAqD;AAErD;;;GAGG;AACH,MAAa,aAAa;IACxB,MAAM,CAAC,OAAO,GAIR,EAAE,CAAC;;AALX,sCAMC;AAED;;GAEG;AACH,SAAgB,YAAY;IAC1B,OAAO,CAAC,MAAW,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE;QAC9C,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;QAChE,OAAO,IAAA,4BAAkB,EAAC,IAAI,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;IACnE,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
CallHandler,
|
|
3
|
-
ExecutionContext,
|
|
4
|
-
NestInterceptor,
|
|
5
|
-
} from '@nestjs/common';
|
|
6
|
-
import { Injectable } from '@nestjs/common';
|
|
7
|
-
import { InjectLogger } from '@rsdk/core';
|
|
8
|
-
import { ILogger } from '@rsdk/logging';
|
|
9
|
-
import type { Observable } from 'rxjs';
|
|
10
|
-
import { catchError, tap, throwError } from 'rxjs';
|
|
11
|
-
|
|
12
|
-
import { HttpConfig } from './http.config';
|
|
13
|
-
|
|
14
|
-
@Injectable()
|
|
15
|
-
export class HttpLoggerInterceptor implements NestInterceptor {
|
|
16
|
-
constructor(
|
|
17
|
-
@InjectLogger(HttpLoggerInterceptor) private logger: ILogger,
|
|
18
|
-
private httpConfig: HttpConfig,
|
|
19
|
-
) {}
|
|
20
|
-
|
|
21
|
-
intercept(
|
|
22
|
-
context: ExecutionContext,
|
|
23
|
-
next: CallHandler<any>,
|
|
24
|
-
): Observable<any> | Promise<Observable<any>> {
|
|
25
|
-
if (!this.httpConfig.requestLogging) {
|
|
26
|
-
return next.handle();
|
|
27
|
-
}
|
|
28
|
-
const isHttp = context.getType() === 'http';
|
|
29
|
-
if (!isHttp) {
|
|
30
|
-
return next.handle();
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
const http = context.switchToHttp();
|
|
34
|
-
|
|
35
|
-
const request = http.getRequest();
|
|
36
|
-
|
|
37
|
-
const now = Date.now();
|
|
38
|
-
const requestForLog = {
|
|
39
|
-
body: request.body,
|
|
40
|
-
query: request.query,
|
|
41
|
-
params: request.params,
|
|
42
|
-
method: request.method,
|
|
43
|
-
url: request.url,
|
|
44
|
-
headers: request.headers,
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
this.logger.trace('received http request', {
|
|
48
|
-
request: requestForLog,
|
|
49
|
-
timestamp: now,
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
return next.handle().pipe(
|
|
53
|
-
catchError((err) => {
|
|
54
|
-
this.logger.trace('handled http request with error', {
|
|
55
|
-
request: requestForLog,
|
|
56
|
-
start: now,
|
|
57
|
-
end: Date.now() - now,
|
|
58
|
-
err,
|
|
59
|
-
});
|
|
60
|
-
return throwError(() => err);
|
|
61
|
-
}),
|
|
62
|
-
tap((response) =>
|
|
63
|
-
this.logger.trace('handled http request', {
|
|
64
|
-
request: requestForLog,
|
|
65
|
-
start: now,
|
|
66
|
-
response,
|
|
67
|
-
end: Date.now() - now,
|
|
68
|
-
}),
|
|
69
|
-
),
|
|
70
|
-
);
|
|
71
|
-
}
|
|
72
|
-
}
|
package/src/service-routes.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { ApiExcludeEndpoint } from '@nestjs/swagger';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Хранение ссылок на обработчики http ручек.
|
|
5
|
-
* Прежде всего предназначен для дополнительного декорирования этих ручек в зависимости от конфигурации
|
|
6
|
-
*/
|
|
7
|
-
export class ServiceRoutes {
|
|
8
|
-
static storage: {
|
|
9
|
-
target: any;
|
|
10
|
-
propertyKey: string | symbol;
|
|
11
|
-
descriptor: PropertyDescriptor;
|
|
12
|
-
}[] = [];
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Сохраняет ссылку на http ручку в хранилище сервисных ручек для дополнительного декорирования в зависимости от конфигурации
|
|
17
|
-
*/
|
|
18
|
-
export function ServiceRoute(): MethodDecorator {
|
|
19
|
-
return (target: any, propertyKey, descriptor) => {
|
|
20
|
-
ServiceRoutes.storage.push({ target, propertyKey, descriptor });
|
|
21
|
-
return ApiExcludeEndpoint(true)(target, propertyKey, descriptor);
|
|
22
|
-
};
|
|
23
|
-
}
|