@webda/core 3.11.2 → 3.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/lib/core.d.ts +1 -1
  2. package/lib/core.js +2 -2
  3. package/lib/core.js.map +1 -1
  4. package/lib/index.d.ts +0 -3
  5. package/lib/index.js +14 -17
  6. package/lib/index.js.map +1 -1
  7. package/lib/models/coremodel.d.ts +116 -6
  8. package/lib/models/coremodel.js +88 -11
  9. package/lib/models/coremodel.js.map +1 -1
  10. package/lib/models/user.d.ts +13 -0
  11. package/lib/models/user.js +20 -0
  12. package/lib/models/user.js.map +1 -1
  13. package/lib/queues/pubsubservice.d.ts +20 -0
  14. package/lib/queues/pubsubservice.js +27 -0
  15. package/lib/queues/pubsubservice.js.map +1 -1
  16. package/lib/queues/queueservice.d.ts +0 -12
  17. package/lib/queues/queueservice.js +4 -26
  18. package/lib/queues/queueservice.js.map +1 -1
  19. package/lib/services/cloudbinary.js.map +1 -1
  20. package/lib/services/configuration.d.ts +3 -2
  21. package/lib/services/configuration.js +4 -2
  22. package/lib/services/configuration.js.map +1 -1
  23. package/lib/services/cryptoservice.d.ts +49 -1
  24. package/lib/services/cryptoservice.js +123 -4
  25. package/lib/services/cryptoservice.js.map +1 -1
  26. package/lib/services/cryptoservice.spec.js +40 -0
  27. package/lib/services/cryptoservice.spec.js.map +1 -1
  28. package/lib/services/prometheus.spec.js +1 -1
  29. package/lib/services/prometheus.spec.js.map +1 -1
  30. package/lib/services/service.d.ts +18 -1
  31. package/lib/services/service.js +24 -0
  32. package/lib/services/service.js.map +1 -1
  33. package/lib/services/service.spec.js +8 -0
  34. package/lib/services/service.spec.js.map +1 -1
  35. package/lib/stores/file.js +0 -9
  36. package/lib/stores/file.js.map +1 -1
  37. package/lib/stores/file.spec.js +9 -0
  38. package/lib/stores/file.spec.js.map +1 -1
  39. package/lib/stores/memory.js +2 -0
  40. package/lib/stores/memory.js.map +1 -1
  41. package/lib/stores/store.d.ts +40 -2
  42. package/lib/stores/store.js +108 -44
  43. package/lib/stores/store.js.map +1 -1
  44. package/lib/stores/store.spec.js +2 -2
  45. package/lib/stores/store.spec.js.map +1 -1
  46. package/lib/stores/webdaql/query.d.ts +82 -13
  47. package/lib/stores/webdaql/query.js +131 -3
  48. package/lib/stores/webdaql/query.js.map +1 -1
  49. package/lib/stores/webdaql/query.spec.js +27 -0
  50. package/lib/stores/webdaql/query.spec.js.map +1 -1
  51. package/lib/test.js +2 -1
  52. package/lib/test.js.map +1 -1
  53. package/lib/utils/context.d.ts +5 -1
  54. package/lib/utils/context.js +14 -8
  55. package/lib/utils/context.js.map +1 -1
  56. package/lib/utils/context.spec.js +15 -0
  57. package/lib/utils/context.spec.js.map +1 -1
  58. package/lib/utils/logger.d.ts +1 -1
  59. package/lib/utils/logger.js +3 -0
  60. package/lib/utils/logger.js.map +1 -1
  61. package/lib/utils/serializers.d.ts +5 -0
  62. package/lib/utils/serializers.js +22 -0
  63. package/lib/utils/serializers.js.map +1 -1
  64. package/lib/utils/serializers.spec.js +57 -1
  65. package/lib/utils/serializers.spec.js.map +1 -1
  66. package/package.json +6 -5
  67. package/webda.module.json +14 -113
  68. package/lib/services/echo.d.ts +0 -45
  69. package/lib/services/echo.js +0 -49
  70. package/lib/services/echo.js.map +0 -1
  71. package/lib/services/echo.spec.d.ts +0 -1
  72. package/lib/services/echo.spec.js +0 -47
  73. package/lib/services/echo.spec.js.map +0 -1
  74. package/lib/services/proxy.d.ts +0 -197
  75. package/lib/services/proxy.js +0 -336
  76. package/lib/services/proxy.js.map +0 -1
  77. package/lib/services/proxy.spec.d.ts +0 -1
  78. package/lib/services/proxy.spec.js +0 -188
  79. package/lib/services/proxy.spec.js.map +0 -1
  80. package/lib/services/version.d.ts +0 -34
  81. package/lib/services/version.js +0 -53
  82. package/lib/services/version.js.map +0 -1
  83. package/lib/services/version.spec.d.ts +0 -1
  84. package/lib/services/version.spec.js +0 -24
  85. package/lib/services/version.spec.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"echo.js","sourceRoot":"","sources":["../../src/services/echo.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAEvD,MAAM,OAAO,qBAAsB,SAAQ,iBAAiB;CAa3D;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,WAAY,SAAQ,OAA8B;IAC7D;;;;;OAKG;IACH,cAAc,CAAC,MAAW;QACxB,OAAO,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED,cAAc;IACd,UAAU;QACR,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5D,CAAC;IAED,cAAc;IACd,KAAK,CAAC,OAAO,CAAC,GAAe;QAC3B,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YACzB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;gBACjB,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI;aACrC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC9C,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;CACF"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,47 +0,0 @@
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 { suite, test } from "@testdeck/mocha";
8
- import * as assert from "assert";
9
- import * as sinon from "sinon";
10
- import { WebdaTest } from "../test.js";
11
- import { EchoService } from "./echo.js";
12
- let EchoTest = class EchoTest extends WebdaTest {
13
- async cov() {
14
- let service = new EchoService(this.webda, "test", {
15
- url: "/bouzouf",
16
- result: "plop"
17
- });
18
- // @ts-ignore
19
- let stub = sinon.spy(service, "addRoute");
20
- try {
21
- service.initRoutes();
22
- assert.strictEqual(stub.callCount, 1);
23
- }
24
- finally {
25
- stub.restore();
26
- }
27
- let ctx = await this.newContext();
28
- await service.execute(ctx);
29
- assert.strictEqual(ctx.getResponseBody(), "plop");
30
- service = new EchoService(this.webda, "test", {
31
- url: "/bouzouf",
32
- mime: "mine/json",
33
- result: { obj: "plop" }
34
- });
35
- ctx = await this.newContext();
36
- await service.execute(ctx);
37
- assert.strictEqual(ctx.getResponseHeaders()["Content-Type"], "mine/json");
38
- assert.strictEqual(ctx.getResponseBody(), '{"obj":"plop"}');
39
- }
40
- };
41
- __decorate([
42
- test
43
- ], EchoTest.prototype, "cov", null);
44
- EchoTest = __decorate([
45
- suite
46
- ], EchoTest);
47
- //# sourceMappingURL=echo.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"echo.spec.js","sourceRoot":"","sources":["../../src/services/echo.spec.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAGrC,IAAM,QAAQ,GAAd,MAAM,QAAS,SAAQ,SAAS;IAExB,AAAN,KAAK,CAAC,GAAG;QACP,IAAI,OAAO,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE;YAChD,GAAG,EAAE,UAAU;YACf,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QACH,aAAa;QACb,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC1C,IAAI,CAAC;YACH,OAAO,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACxC,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC;QACD,IAAI,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3B,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,MAAM,CAAC,CAAC;QAClD,OAAO,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE;YAC5C,GAAG,EAAE,UAAU;YACf,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE;SACxB,CAAC,CAAC;QACH,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC9B,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3B,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,cAAc,CAAC,EAAE,WAAW,CAAC,CAAC;QAC1E,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAC9D,CAAC;CACF,CAAA;AA1BO;IADL,IAAI;mCA0BJ;AA3BG,QAAQ;IADb,KAAK;GACA,QAAQ,CA4Bb"}
@@ -1,197 +0,0 @@
1
- /// <reference types="node" />
2
- import * as http from "http";
3
- import { Counter, Gauge, Histogram } from "../core.js";
4
- import { WebContext } from "../utils/context.js";
5
- import { HttpContext } from "../utils/httpcontext.js";
6
- import { Service, ServiceParameters } from "./service.js";
7
- export declare function createHttpHeader(line: any, headers: any): string;
8
- /**
9
- * Proxy to a backend service
10
- */
11
- export declare class ProxyParameters extends ServiceParameters {
12
- /**
13
- * URL to expose
14
- */
15
- url?: string;
16
- /**
17
- * URL to proxy to
18
- */
19
- backend: string;
20
- /**
21
- * Helper to refuse any request if user is not auth
22
- */
23
- requireAuthentication: boolean;
24
- /**
25
- * Add X-Forwarded-* headers
26
- *
27
- * @default true
28
- */
29
- proxyHeaders: boolean;
30
- constructor(params: any);
31
- }
32
- /**
33
- * Proxy to starling computation api
34
- *
35
- * @WebdaModda
36
- */
37
- export declare class ProxyService<T extends ProxyParameters = ProxyParameters> extends Service<T> {
38
- metrics: {
39
- http_request_total: Counter;
40
- http_request_in_flight: Gauge;
41
- http_request_duration_milliseconds: Histogram;
42
- http_errors: Counter;
43
- };
44
- /**
45
- * @override
46
- */
47
- initMetrics(): void;
48
- /**
49
- * @override
50
- */
51
- loadParameters(params: any): ProxyParameters;
52
- resolve(): this;
53
- /**
54
- * Create the request to the backend
55
- * @param url
56
- * @param method
57
- * @param headers
58
- * @param callback
59
- * @returns
60
- */
61
- createRequest(url: string, method: string, headers: any, callback: (response: http.IncomingMessage) => void, options?: {
62
- timeout?: number;
63
- }): any;
64
- /**
65
- * Filter backend headers to send to the client
66
- *
67
- * @param responseHeaders
68
- * @returns
69
- */
70
- filterHeaders(responseHeaders?: http.IncomingHttpHeaders): http.OutgoingHttpHeaders;
71
- /**
72
- * Forward the response
73
- * Allow you to intercept and override part of the answer
74
- *
75
- * @param response
76
- * @param context
77
- */
78
- forwardResponse(response: http.IncomingMessage, context: WebContext): void;
79
- /**
80
- * Allow subclass to implement custom override
81
- * @param context
82
- * @returns
83
- */
84
- getRequestHeaders(context: HttpContext): {
85
- [x: string]: string | string[];
86
- accept?: string;
87
- 'accept-language'?: string;
88
- 'accept-patch'?: string;
89
- 'accept-ranges'?: string;
90
- 'access-control-allow-credentials'?: string;
91
- 'access-control-allow-headers'?: string;
92
- 'access-control-allow-methods'?: string;
93
- 'access-control-allow-origin'?: string;
94
- 'access-control-expose-headers'?: string;
95
- 'access-control-max-age'?: string;
96
- 'access-control-request-headers'?: string;
97
- 'access-control-request-method'?: string;
98
- age?: string;
99
- allow?: string;
100
- 'alt-svc'?: string;
101
- authorization?: string;
102
- 'cache-control'?: string;
103
- connection?: string;
104
- 'content-disposition'?: string;
105
- 'content-encoding'?: string;
106
- 'content-language'?: string;
107
- 'content-length'?: string;
108
- 'content-location'?: string;
109
- 'content-range'?: string;
110
- 'content-type'?: string;
111
- cookie?: string;
112
- date?: string;
113
- etag?: string;
114
- expect?: string;
115
- expires?: string;
116
- forwarded?: string;
117
- from?: string;
118
- host?: string;
119
- 'if-match'?: string;
120
- 'if-modified-since'?: string;
121
- 'if-none-match'?: string;
122
- 'if-unmodified-since'?: string;
123
- 'last-modified'?: string;
124
- location?: string;
125
- origin?: string;
126
- pragma?: string;
127
- 'proxy-authenticate'?: string;
128
- 'proxy-authorization'?: string;
129
- 'public-key-pins'?: string;
130
- range?: string;
131
- referer?: string;
132
- 'retry-after'?: string;
133
- 'sec-websocket-accept'?: string;
134
- 'sec-websocket-extensions'?: string;
135
- 'sec-websocket-key'?: string;
136
- 'sec-websocket-protocol'?: string;
137
- 'sec-websocket-version'?: string;
138
- 'set-cookie'?: string[];
139
- 'strict-transport-security'?: string;
140
- tk?: string;
141
- trailer?: string;
142
- 'transfer-encoding'?: string;
143
- upgrade?: string;
144
- 'user-agent'?: string;
145
- vary?: string;
146
- via?: string;
147
- warning?: string;
148
- 'www-authenticate'?: string;
149
- };
150
- /**
151
- * Proxy to an url
152
- * @param ctx
153
- * @param host
154
- * @param url prefix to remove
155
- */
156
- proxy(ctx: WebContext, host: string, url: string): Promise<void>;
157
- /**
158
- * Proxy request to the backend errored
159
- * @param e
160
- */
161
- onError(e: any): void;
162
- /**
163
- * Proxy WebService
164
- */
165
- proxyWS(req: any, socket: any, head: any): Promise<void>;
166
- /**
167
- * Create the request to the WS backend
168
- * @param url
169
- * @param context
170
- * @returns
171
- */
172
- createWSRequest(url: string, context: WebContext): http.ClientRequest;
173
- /**
174
- *
175
- * @param context
176
- * @param url
177
- * @param socket
178
- */
179
- rawProxyWS(context: WebContext, url: string, socket: any): Promise<void>;
180
- /**
181
- * Proxy an url to the response directly
182
- * @param ctx
183
- * @param url
184
- */
185
- rawProxy(ctx: WebContext, host: string, url?: string, headers?: any): Promise<void>;
186
- /**
187
- * Simplify override for dynamic backend
188
- * @param _ctx
189
- * @returns
190
- */
191
- getBackend(_ctx: WebContext): string;
192
- /**
193
- * Proxy route
194
- * @param ctx
195
- */
196
- proxyRoute(ctx: WebContext): Promise<void>;
197
- }
@@ -1,336 +0,0 @@
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 * as http from "http";
8
- import * as https from "https";
9
- import { Counter, Gauge, Histogram } from "../core.js";
10
- import { WebdaError } from "../errors.js";
11
- import { Route, Service, ServiceParameters } from "./service.js";
12
- export function createHttpHeader(line, headers) {
13
- return (Object.keys(headers)
14
- .reduce(function (head, key) {
15
- var value = headers[key];
16
- if (!Array.isArray(value)) {
17
- head.push(key + ": " + value);
18
- return head;
19
- }
20
- for (var i = 0; i < value.length; i++) {
21
- head.push(key + ": " + value[i]);
22
- }
23
- return head;
24
- }, [line])
25
- .join("\r\n") + "\r\n\r\n");
26
- }
27
- /**
28
- * Proxy to a backend service
29
- */
30
- export class ProxyParameters extends ServiceParameters {
31
- constructor(params) {
32
- super(params);
33
- if (this.backend?.endsWith("/")) {
34
- this.backend = this.backend.substring(0, this.backend.length - 1);
35
- }
36
- this.proxyHeaders ?? (this.proxyHeaders = true);
37
- }
38
- }
39
- /**
40
- * Proxy to starling computation api
41
- *
42
- * @WebdaModda
43
- */
44
- export class ProxyService extends Service {
45
- /**
46
- * @override
47
- */
48
- initMetrics() {
49
- super.initMetrics();
50
- this.metrics.http_request_total = this.getMetric(Counter, {
51
- name: "proxy_request_total",
52
- help: "number of request",
53
- labelNames: ["method", "statuscode", "handler", "host"]
54
- });
55
- this.metrics.http_request_in_flight = this.getMetric(Gauge, {
56
- name: "proxy_request_in_flight",
57
- help: "number of request in flight",
58
- labelNames: ["method", "statuscode", "handler", "host"]
59
- });
60
- this.metrics.http_request_duration_milliseconds = this.getMetric(Histogram, {
61
- name: "proxy_request_duration_milliseconds",
62
- help: "request duration",
63
- labelNames: ["method", "statuscode", "handler", "host"]
64
- });
65
- this.metrics.http_errors = this.getMetric(Counter, {
66
- name: "proxy_request_errors",
67
- help: "request errors",
68
- labelNames: ["method", "statuscode", "handler", "host"]
69
- });
70
- }
71
- /**
72
- * @override
73
- */
74
- loadParameters(params) {
75
- return new ProxyParameters(params);
76
- }
77
- resolve() {
78
- // Register the proxy on the 'upgrade' event of http socket
79
- this.getWebda().on("Webda.Init.Http", (evt) => {
80
- evt.on("upgrade", (req, socket, head) => {
81
- this.proxyWS(req, socket, head);
82
- });
83
- });
84
- return super.resolve();
85
- }
86
- /**
87
- * Create the request to the backend
88
- * @param url
89
- * @param method
90
- * @param headers
91
- * @param callback
92
- * @returns
93
- */
94
- createRequest(url, method, headers, callback, options = { timeout: 30000 }) {
95
- let mod = http;
96
- if (url.startsWith("https://")) {
97
- mod = https;
98
- }
99
- return mod.request(url, {
100
- method,
101
- headers,
102
- ...options
103
- }, callback);
104
- }
105
- /**
106
- * Filter backend headers to send to the client
107
- *
108
- * @param responseHeaders
109
- * @returns
110
- */
111
- filterHeaders(responseHeaders = {}) {
112
- const headers = {};
113
- Object.keys(responseHeaders)
114
- // Filter all CORS by default
115
- .filter(k => !k.startsWith("access") && k !== "")
116
- .forEach(k => {
117
- headers[k] = responseHeaders[k];
118
- });
119
- return headers;
120
- }
121
- /**
122
- * Forward the response
123
- * Allow you to intercept and override part of the answer
124
- *
125
- * @param response
126
- * @param context
127
- */
128
- forwardResponse(response, context) {
129
- context.writeHead(response.statusCode, this.filterHeaders(response.headers));
130
- response.pipe(context.getStream());
131
- }
132
- /**
133
- * Allow subclass to implement custom override
134
- * @param context
135
- * @returns
136
- */
137
- getRequestHeaders(context) {
138
- const headers = { ...context.getHeaders() };
139
- if (this.parameters.proxyHeaders) {
140
- let xff = context.getHeader("x-forwarded-for");
141
- if (!xff) {
142
- xff += `, ${context.getClientIp()}`;
143
- }
144
- else {
145
- xff = context.getClientIp();
146
- }
147
- const protocol = context.getProtocol();
148
- headers["X-Rewrite-URL"] = context.getRelativeUri();
149
- headers["X-Forwarded-Host"] = context.getHeader("x-forwarded-host", `${context.getHost()}`);
150
- headers["X-Forwarded-Proto"] = context.getHeader("x-forwarded-proto", protocol.substring(0, protocol.length - 1));
151
- headers["X-Forwarded-For"] = xff;
152
- }
153
- return headers;
154
- }
155
- /**
156
- * Proxy to an url
157
- * @param ctx
158
- * @param host
159
- * @param url prefix to remove
160
- */
161
- async proxy(ctx, host, url) {
162
- const subUrl = ctx.getHttpContext().getRelativeUri().substring(url.length);
163
- return this.rawProxy(ctx, host, subUrl);
164
- }
165
- /**
166
- * Proxy request to the backend errored
167
- * @param e
168
- */
169
- onError(e) {
170
- this.log("ERROR", "Proxying error", e);
171
- }
172
- /**
173
- * Proxy WebService
174
- */
175
- async proxyWS(req, socket, head) {
176
- if (!req.url.startsWith(this.parameters.url)) {
177
- return;
178
- }
179
- if (req.method !== "GET" || !req.headers.upgrade) {
180
- socket.destroy();
181
- }
182
- if (req.headers.upgrade.toLowerCase() !== "websocket") {
183
- socket.destroy();
184
- }
185
- // Proxy WS Only works with a WebdaServer from @webda/shell for now
186
- const webdaContext = await this.getWebda().getContextFromRequest(req);
187
- await webdaContext.init();
188
- return this.rawProxyWS(webdaContext, `${this.getBackend(webdaContext)}${req.url.substring(this.parameters.url.length)}`, socket);
189
- }
190
- /**
191
- * Create the request to the WS backend
192
- * @param url
193
- * @param context
194
- * @returns
195
- */
196
- createWSRequest(url, context) {
197
- const Url = new URL(url);
198
- return (Url.protocol === "http:" ? http : https).request({
199
- path: Url.pathname + Url.search,
200
- method: "GET",
201
- headers: { ...this.getRequestHeaders(context.getHttpContext()), host: Url.host },
202
- host: Url.hostname,
203
- port: Url.port
204
- });
205
- }
206
- /**
207
- *
208
- * @param context
209
- * @param url
210
- * @param socket
211
- */
212
- async rawProxyWS(context, url, socket) {
213
- this.log("DEBUG", "Proxying upgrade request", `${url}`);
214
- const proxyReq = this.createWSRequest(url, context);
215
- proxyReq.on("response", res => {
216
- // @ts-ignore
217
- if (!res.upgrade) {
218
- socket.write(createHttpHeader("HTTP/" + res.httpVersion + " " + res.statusCode + " " + res.statusMessage, res.headers));
219
- res.pipe(socket);
220
- }
221
- });
222
- const onError = err => {
223
- this.log("ERROR", err);
224
- socket.end();
225
- };
226
- proxyReq.on("error", onError);
227
- proxyReq.on("upgrade", (proxyRes, proxySocket, proxyHead) => {
228
- proxySocket.on("error", onError);
229
- // Allow us to listen when the websocket has completed
230
- proxySocket.on("end", function () {
231
- socket.end();
232
- });
233
- // The pipe below will end proxySocket if socket closes cleanly, but not
234
- // if it errors (eg, vanishes from the net and starts returning
235
- // EHOSTUNREACH). We need to do that explicitly.
236
- socket.on("error", function () {
237
- /* c8 ignore next 2 */
238
- proxySocket.end();
239
- });
240
- proxySocket.setTimeout(0);
241
- proxySocket.setNoDelay(true);
242
- proxySocket.setKeepAlive(true, 0);
243
- if (proxyHead && proxyHead.length)
244
- proxySocket.unshift(proxyHead);
245
- //
246
- // Remark: Handle writing the headers to the socket when switching protocols
247
- // Also handles when a header is an array
248
- //
249
- socket.write(createHttpHeader("HTTP/1.1 101 Switching Protocols", proxyRes.headers));
250
- proxySocket.pipe(socket).pipe(proxySocket);
251
- });
252
- proxyReq.end();
253
- }
254
- /**
255
- * Proxy an url to the response directly
256
- * @param ctx
257
- * @param url
258
- */
259
- async rawProxy(ctx, host, url = "/", headers = {}) {
260
- if (!url.startsWith("/")) {
261
- url = "/" + url;
262
- }
263
- this.log("DEBUG", "Proxying to", `${ctx.getHttpContext().getMethod()} ${host} ${url}`);
264
- this.metrics.http_request_in_flight.inc();
265
- await new Promise((resolve, reject) => {
266
- const labels = {
267
- method: ctx.getHttpContext().getMethod(),
268
- host,
269
- handler: url
270
- };
271
- const onError = e => {
272
- this.metrics.http_request_in_flight.dec();
273
- this.metrics.http_errors.inc({ ...labels, statuscode: -1 });
274
- this.onError(e);
275
- resolve();
276
- };
277
- let Host;
278
- try {
279
- Host = new URL(host).host;
280
- }
281
- catch (err) {
282
- // Skip wrong host
283
- }
284
- try {
285
- const req = this.createRequest(`${host}${url}`, ctx.getHttpContext().getMethod(), {
286
- ...this.getRequestHeaders(ctx.getHttpContext()),
287
- Host,
288
- ...headers
289
- }, res => {
290
- res.on("end", () => {
291
- this.metrics.http_request_in_flight.dec();
292
- resolve();
293
- });
294
- res.on("error", onError);
295
- this.metrics.http_request_total.inc({
296
- ...labels,
297
- statuscode: res.statusCode
298
- });
299
- if (res.statusCode >= 400) {
300
- this.metrics.http_errors.inc(labels);
301
- }
302
- this.forwardResponse(res, ctx);
303
- });
304
- req.on("error", onError);
305
- ctx.getHttpContext().getRawStream().pipe(req);
306
- }
307
- catch (e) {
308
- onError(e);
309
- }
310
- });
311
- }
312
- /**
313
- * Simplify override for dynamic backend
314
- * @param _ctx
315
- * @returns
316
- */
317
- getBackend(_ctx) {
318
- return this.parameters.backend;
319
- }
320
- /**
321
- * Proxy route
322
- * @param ctx
323
- */
324
- async proxyRoute(ctx) {
325
- if (this.parameters.requireAuthentication && !ctx.getCurrentUserId()) {
326
- throw new WebdaError.Unauthorized("You need to be authenticated to access this route");
327
- }
328
- // Add any additional controls here
329
- await this.proxy(ctx, this.getBackend(ctx), this.parameters.url);
330
- }
331
- }
332
- __decorate([
333
- Route("./{+path}", ["GET", "POST", "DELETE", "PUT", "PATCH"]),
334
- Route(".", ["GET", "POST", "DELETE", "PUT", "PATCH"])
335
- ], ProxyService.prototype, "proxyRoute", null);
336
- //# sourceMappingURL=proxy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../src/services/proxy.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};