@sectester/repeater 0.16.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/LICENSE +21 -0
- package/README.md +173 -0
- package/package.json +60 -0
- package/src/api/DefaultRepeatersManager.d.ts +13 -0
- package/src/api/DefaultRepeatersManager.js +31 -0
- package/src/api/DefaultRepeatersManager.js.map +1 -0
- package/src/api/RepeatersManager.d.ts +10 -0
- package/src/api/RepeatersManager.js +5 -0
- package/src/api/RepeatersManager.js.map +1 -0
- package/src/api/commands/CreateRepeaterRequest.d.ts +9 -0
- package/src/api/commands/CreateRepeaterRequest.js +15 -0
- package/src/api/commands/CreateRepeaterRequest.js.map +1 -0
- package/src/api/commands/DeleteRepeaterRequest.d.ts +6 -0
- package/src/api/commands/DeleteRepeaterRequest.js +16 -0
- package/src/api/commands/DeleteRepeaterRequest.js.map +1 -0
- package/src/api/commands/ListRepeatersRequest.d.ts +8 -0
- package/src/api/commands/ListRepeatersRequest.js +11 -0
- package/src/api/commands/ListRepeatersRequest.js.map +1 -0
- package/src/api/commands/index.d.ts +3 -0
- package/src/api/commands/index.js +10 -0
- package/src/api/commands/index.js.map +1 -0
- package/src/api/index.d.ts +2 -0
- package/src/api/index.js +6 -0
- package/src/api/index.js.map +1 -0
- package/src/api/register.d.ts +1 -0
- package/src/api/register.js +7 -0
- package/src/api/register.js.map +1 -0
- package/src/bus/EventBusFactory.d.ts +5 -0
- package/src/bus/EventBusFactory.js +5 -0
- package/src/bus/EventBusFactory.js.map +1 -0
- package/src/bus/ExecuteRequestEventHandler.d.ts +25 -0
- package/src/bus/ExecuteRequestEventHandler.js +37 -0
- package/src/bus/ExecuteRequestEventHandler.js.map +1 -0
- package/src/bus/RegisterRepeaterCommand.d.ts +22 -0
- package/src/bus/RegisterRepeaterCommand.js +18 -0
- package/src/bus/RegisterRepeaterCommand.js.map +1 -0
- package/src/bus/RepeaterEventBusFactory.d.ts +11 -0
- package/src/bus/RepeaterEventBusFactory.js +40 -0
- package/src/bus/RepeaterEventBusFactory.js.map +1 -0
- package/src/bus/RepeaterStatusEvent.d.ts +10 -0
- package/src/bus/RepeaterStatusEvent.js +11 -0
- package/src/bus/RepeaterStatusEvent.js.map +1 -0
- package/src/bus/index.d.ts +5 -0
- package/src/bus/index.js +9 -0
- package/src/bus/index.js.map +1 -0
- package/src/bus/register.d.ts +1 -0
- package/src/bus/register.js +14 -0
- package/src/bus/register.js.map +1 -0
- package/src/index.d.ts +3 -0
- package/src/index.js +9 -0
- package/src/index.js.map +1 -0
- package/src/lib/Repeater.d.ts +29 -0
- package/src/lib/Repeater.js +120 -0
- package/src/lib/Repeater.js.map +1 -0
- package/src/lib/RepeaterFactory.d.ts +16 -0
- package/src/lib/RepeaterFactory.js +79 -0
- package/src/lib/RepeaterFactory.js.map +1 -0
- package/src/lib/RepeaterOptions.d.ts +6 -0
- package/src/lib/RepeaterOptions.js +3 -0
- package/src/lib/RepeaterOptions.js.map +1 -0
- package/src/lib/index.d.ts +5 -0
- package/src/lib/index.js +10 -0
- package/src/lib/index.js.map +1 -0
- package/src/lib/register.d.ts +1 -0
- package/src/lib/register.js +11 -0
- package/src/lib/register.js.map +1 -0
- package/src/models/Protocol.d.ts +4 -0
- package/src/models/Protocol.js +9 -0
- package/src/models/Protocol.js.map +1 -0
- package/src/models/RepeaterStatus.d.ts +1 -0
- package/src/models/RepeaterStatus.js +3 -0
- package/src/models/RepeaterStatus.js.map +1 -0
- package/src/models/index.d.ts +3 -0
- package/src/models/index.js +8 -0
- package/src/models/index.js.map +1 -0
- package/src/request-runner/Request.d.ts +23 -0
- package/src/request-runner/Request.js +56 -0
- package/src/request-runner/Request.js.map +1 -0
- package/src/request-runner/RequestRunner.d.ts +8 -0
- package/src/request-runner/RequestRunner.js +5 -0
- package/src/request-runner/RequestRunner.js.map +1 -0
- package/src/request-runner/RequestRunnerOptions.d.ts +9 -0
- package/src/request-runner/RequestRunnerOptions.js +5 -0
- package/src/request-runner/RequestRunnerOptions.js.map +1 -0
- package/src/request-runner/Response.d.ts +17 -0
- package/src/request-runner/Response.js +15 -0
- package/src/request-runner/Response.js.map +1 -0
- package/src/request-runner/index.d.ts +5 -0
- package/src/request-runner/index.js +9 -0
- package/src/request-runner/index.js.map +1 -0
- package/src/request-runner/protocols/HttpRequestRunner.d.ts +29 -0
- package/src/request-runner/protocols/HttpRequestRunner.js +180 -0
- package/src/request-runner/protocols/HttpRequestRunner.js.map +1 -0
- package/src/request-runner/protocols/WsRequestRunner.d.ts +24 -0
- package/src/request-runner/protocols/WsRequestRunner.js +148 -0
- package/src/request-runner/protocols/WsRequestRunner.js.map +1 -0
- package/src/request-runner/protocols/index.d.ts +2 -0
- package/src/request-runner/protocols/index.js +6 -0
- package/src/request-runner/protocols/index.js.map +1 -0
- package/src/request-runner/register.d.ts +1 -0
- package/src/request-runner/register.js +12 -0
- package/src/request-runner/register.js.map +1 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Protocol } from '../models';
|
|
2
|
+
export declare class Response {
|
|
3
|
+
readonly protocol: Protocol;
|
|
4
|
+
readonly statusCode?: number;
|
|
5
|
+
readonly headers?: Record<string, string | string[] | undefined>;
|
|
6
|
+
readonly body?: string;
|
|
7
|
+
readonly message?: string;
|
|
8
|
+
readonly errorCode?: string;
|
|
9
|
+
constructor({ protocol, statusCode, headers, body, message, errorCode }: {
|
|
10
|
+
protocol: Protocol;
|
|
11
|
+
statusCode?: number;
|
|
12
|
+
message?: string;
|
|
13
|
+
errorCode?: string;
|
|
14
|
+
headers?: Record<string, string | string[] | undefined>;
|
|
15
|
+
body?: string;
|
|
16
|
+
});
|
|
17
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Response = void 0;
|
|
4
|
+
class Response {
|
|
5
|
+
constructor({ protocol, statusCode, headers, body, message, errorCode }) {
|
|
6
|
+
this.protocol = protocol;
|
|
7
|
+
this.statusCode = statusCode;
|
|
8
|
+
this.headers = headers;
|
|
9
|
+
this.body = body;
|
|
10
|
+
this.errorCode = errorCode;
|
|
11
|
+
this.message = message;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.Response = Response;
|
|
15
|
+
//# sourceMappingURL=Response.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Response.js","sourceRoot":"","sources":["../../../../../packages/repeater/src/request-runner/Response.ts"],"names":[],"mappings":";;;AAEA,MAAa,QAAQ;IAQnB,YAAY,EACV,QAAQ,EACR,UAAU,EACV,OAAO,EACP,IAAI,EACJ,OAAO,EACP,SAAS,EAQV;QACC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AA9BD,4BA8BC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
require("./register");
|
|
5
|
+
(0, tslib_1.__exportStar)(require("./Request"), exports);
|
|
6
|
+
(0, tslib_1.__exportStar)(require("./RequestRunner"), exports);
|
|
7
|
+
(0, tslib_1.__exportStar)(require("./RequestRunnerOptions"), exports);
|
|
8
|
+
(0, tslib_1.__exportStar)(require("./Response"), exports);
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/repeater/src/request-runner/index.ts"],"names":[],"mappings":";;;AAAA,sBAAoB;AAEpB,yDAA0B;AAC1B,+DAAgC;AAChC,sEAAuC;AACvC,0DAA2B"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Request } from '../Request';
|
|
2
|
+
import { RequestRunner } from '../RequestRunner';
|
|
3
|
+
import { RequestRunnerOptions } from '../RequestRunnerOptions';
|
|
4
|
+
import { Response } from '../Response';
|
|
5
|
+
import { Protocol } from '../../models';
|
|
6
|
+
import { Logger } from '@sectester/core';
|
|
7
|
+
export declare class HttpRequestRunner implements RequestRunner {
|
|
8
|
+
private readonly options;
|
|
9
|
+
private readonly logger;
|
|
10
|
+
private readonly proxy?;
|
|
11
|
+
private readonly httpAgent?;
|
|
12
|
+
private readonly httpsAgent?;
|
|
13
|
+
private readonly maxContentLength;
|
|
14
|
+
get protocol(): Protocol;
|
|
15
|
+
constructor(options: RequestRunnerOptions, logger: Logger);
|
|
16
|
+
run(options: Request): Promise<Response>;
|
|
17
|
+
private handleRequestError;
|
|
18
|
+
private request;
|
|
19
|
+
private getRequestAgent;
|
|
20
|
+
private truncateResponse;
|
|
21
|
+
private parseContentType;
|
|
22
|
+
private parseBody;
|
|
23
|
+
/**
|
|
24
|
+
* Allows to attack headers. Node.js does not accept any other characters
|
|
25
|
+
* which violate [rfc7230](https://tools.ietf.org/html/rfc7230#section-3.2.6).
|
|
26
|
+
* To override default behavior bypassing {@link OutgoingMessage.setHeader} method we have to set headers via internal symbol.
|
|
27
|
+
*/
|
|
28
|
+
private setHeaders;
|
|
29
|
+
}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HttpRequestRunner = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const RequestRunnerOptions_1 = require("../RequestRunnerOptions");
|
|
6
|
+
const Response_1 = require("../Response");
|
|
7
|
+
const models_1 = require("../../models");
|
|
8
|
+
const core_1 = require("@sectester/core");
|
|
9
|
+
const request_promise_1 = (0, tslib_1.__importDefault)(require("request-promise"));
|
|
10
|
+
const socks_proxy_agent_1 = require("socks-proxy-agent");
|
|
11
|
+
const tsyringe_1 = require("tsyringe");
|
|
12
|
+
const content_type_1 = require("content-type");
|
|
13
|
+
const url_1 = require("url");
|
|
14
|
+
const http_1 = (0, tslib_1.__importDefault)(require("http"));
|
|
15
|
+
const https_1 = (0, tslib_1.__importDefault)(require("https"));
|
|
16
|
+
let HttpRequestRunner = class HttpRequestRunner {
|
|
17
|
+
constructor(options, logger) {
|
|
18
|
+
this.options = options;
|
|
19
|
+
this.logger = logger;
|
|
20
|
+
if (this.options.proxyUrl) {
|
|
21
|
+
this.proxy = new socks_proxy_agent_1.SocksProxyAgent({
|
|
22
|
+
...(0, url_1.parse)(this.options.proxyUrl)
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
this.maxContentLength =
|
|
26
|
+
typeof this.options.maxContentLength === 'number'
|
|
27
|
+
? this.options.maxContentLength
|
|
28
|
+
: -1;
|
|
29
|
+
if (this.options.reuseConnection) {
|
|
30
|
+
const agentOptions = {
|
|
31
|
+
keepAlive: true,
|
|
32
|
+
maxSockets: 100,
|
|
33
|
+
timeout: this.options.timeout
|
|
34
|
+
};
|
|
35
|
+
this.httpsAgent = new https_1.default.Agent(agentOptions);
|
|
36
|
+
this.httpAgent = new http_1.default.Agent(agentOptions);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
get protocol() {
|
|
40
|
+
return models_1.Protocol.HTTP;
|
|
41
|
+
}
|
|
42
|
+
async run(options) {
|
|
43
|
+
try {
|
|
44
|
+
if (this.options.headers) {
|
|
45
|
+
options.setHeaders(this.options.headers);
|
|
46
|
+
}
|
|
47
|
+
this.logger.debug('Executing HTTP request with following params: %j', options);
|
|
48
|
+
const response = await this.request(options);
|
|
49
|
+
return new Response_1.Response({
|
|
50
|
+
protocol: this.protocol,
|
|
51
|
+
statusCode: response.statusCode,
|
|
52
|
+
headers: response.headers,
|
|
53
|
+
body: response.body
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
return this.handleRequestError(err, options);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
handleRequestError(err, options) {
|
|
61
|
+
var _a, _b, _c, _d, _e, _f;
|
|
62
|
+
if (err.response) {
|
|
63
|
+
const { response } = err;
|
|
64
|
+
return new Response_1.Response({
|
|
65
|
+
protocol: this.protocol,
|
|
66
|
+
statusCode: response.statusCode,
|
|
67
|
+
headers: response.headers,
|
|
68
|
+
body: response.body
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
const message = (_b = (_a = err.cause) === null || _a === void 0 ? void 0 : _a.message) !== null && _b !== void 0 ? _b : err.message;
|
|
72
|
+
const errorCode = (_f = (_d = (_c = err.cause) === null || _c === void 0 ? void 0 : _c.code) !== null && _d !== void 0 ? _d : (_e = err.error) === null || _e === void 0 ? void 0 : _e.syscall) !== null && _f !== void 0 ? _f : err.name;
|
|
73
|
+
this.logger.error('Error executing request: "%s %s HTTP/1.1"', options.method, options.url);
|
|
74
|
+
this.logger.error('Cause: %s', message);
|
|
75
|
+
return new Response_1.Response({
|
|
76
|
+
message,
|
|
77
|
+
errorCode,
|
|
78
|
+
protocol: this.protocol
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
async request(options) {
|
|
82
|
+
let responseTruncatePromise;
|
|
83
|
+
const res = await (0, request_promise_1.default)({
|
|
84
|
+
agent: this.getRequestAgent(options),
|
|
85
|
+
body: options.body,
|
|
86
|
+
followRedirect: false,
|
|
87
|
+
gzip: true,
|
|
88
|
+
method: options.method,
|
|
89
|
+
resolveWithFullResponse: true,
|
|
90
|
+
strictSSL: false,
|
|
91
|
+
rejectUnauthorized: false,
|
|
92
|
+
timeout: this.options.timeout,
|
|
93
|
+
url: options.url
|
|
94
|
+
})
|
|
95
|
+
.on('request', (req) => this.setHeaders(req, options))
|
|
96
|
+
.on('response', (response) => (responseTruncatePromise = this.truncateResponse(response)));
|
|
97
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
98
|
+
const body = await responseTruncatePromise;
|
|
99
|
+
if (body) {
|
|
100
|
+
res.body = body.toString();
|
|
101
|
+
res.headers['content-length'] = String(body.byteLength);
|
|
102
|
+
}
|
|
103
|
+
return res;
|
|
104
|
+
}
|
|
105
|
+
getRequestAgent(options) {
|
|
106
|
+
var _a;
|
|
107
|
+
return ((_a = this.proxy) !== null && _a !== void 0 ? _a : (options.url.startsWith('https') ? this.httpsAgent : this.httpAgent));
|
|
108
|
+
}
|
|
109
|
+
async truncateResponse(res) {
|
|
110
|
+
var _a;
|
|
111
|
+
if (res.statusCode === 204 || res.method === 'HEAD') {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
const type = this.parseContentType(res);
|
|
115
|
+
const maxBodySize = this.maxContentLength * 1024;
|
|
116
|
+
const requiresTruncating = !((_a = this.options.allowedMimes) === null || _a === void 0 ? void 0 : _a.some((mime) => type.startsWith(mime)));
|
|
117
|
+
return this.parseBody(res, { maxBodySize, requiresTruncating });
|
|
118
|
+
}
|
|
119
|
+
parseContentType(res) {
|
|
120
|
+
let type = res.headers['content-type'] || 'text/plain';
|
|
121
|
+
try {
|
|
122
|
+
({ type } = (0, content_type_1.parse)(type));
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
// noop
|
|
126
|
+
}
|
|
127
|
+
return type;
|
|
128
|
+
}
|
|
129
|
+
async parseBody(res, options) {
|
|
130
|
+
let truncated = false;
|
|
131
|
+
const chunks = [];
|
|
132
|
+
let chunksByteLength = 0;
|
|
133
|
+
for await (const chunk of res) {
|
|
134
|
+
chunks.push(chunk);
|
|
135
|
+
chunksByteLength += Buffer.from(chunk).byteLength;
|
|
136
|
+
truncated =
|
|
137
|
+
this.maxContentLength !== -1 &&
|
|
138
|
+
chunksByteLength > options.maxBodySize &&
|
|
139
|
+
options.requiresTruncating;
|
|
140
|
+
if (truncated) {
|
|
141
|
+
res.destroy();
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
const body = Buffer.concat(chunks);
|
|
146
|
+
if (truncated) {
|
|
147
|
+
this.logger.debug('Truncate original response body to %i bytes', options.maxBodySize);
|
|
148
|
+
return body.slice(0, options.maxBodySize);
|
|
149
|
+
}
|
|
150
|
+
return body;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Allows to attack headers. Node.js does not accept any other characters
|
|
154
|
+
* which violate [rfc7230](https://tools.ietf.org/html/rfc7230#section-3.2.6).
|
|
155
|
+
* To override default behavior bypassing {@link OutgoingMessage.setHeader} method we have to set headers via internal symbol.
|
|
156
|
+
*/
|
|
157
|
+
setHeaders(req, options) {
|
|
158
|
+
var _a;
|
|
159
|
+
const symbols = Object.getOwnPropertySymbols(req);
|
|
160
|
+
const headersSymbol = symbols.find(
|
|
161
|
+
// ADHOC: Node.js version < 12 uses "outHeadersKey" symbol to set headers
|
|
162
|
+
item => ['Symbol(kOutHeaders)', 'Symbol(outHeadersKey)'].includes(item.toString()));
|
|
163
|
+
if (!req.headersSent && headersSymbol && options.headers) {
|
|
164
|
+
const headers = (req[headersSymbol] =
|
|
165
|
+
(_a = req[headersSymbol]) !== null && _a !== void 0 ? _a : Object.create(null));
|
|
166
|
+
Object.entries(options.headers).forEach(([key, value]) => {
|
|
167
|
+
if (key) {
|
|
168
|
+
headers[key.toLowerCase()] = [key.toLowerCase(), value !== null && value !== void 0 ? value : ''];
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
HttpRequestRunner = (0, tslib_1.__decorate)([
|
|
175
|
+
(0, tsyringe_1.injectable)(),
|
|
176
|
+
(0, tslib_1.__param)(0, (0, tsyringe_1.inject)(RequestRunnerOptions_1.RequestRunnerOptions)),
|
|
177
|
+
(0, tslib_1.__metadata)("design:paramtypes", [Object, core_1.Logger])
|
|
178
|
+
], HttpRequestRunner);
|
|
179
|
+
exports.HttpRequestRunner = HttpRequestRunner;
|
|
180
|
+
//# sourceMappingURL=HttpRequestRunner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HttpRequestRunner.js","sourceRoot":"","sources":["../../../../../../packages/repeater/src/request-runner/protocols/HttpRequestRunner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Request } from '../Request';
|
|
2
|
+
import { RequestRunner } from '../RequestRunner';
|
|
3
|
+
import { RequestRunnerOptions } from '../RequestRunnerOptions';
|
|
4
|
+
import { Response } from '../Response';
|
|
5
|
+
import { Protocol } from '../../models';
|
|
6
|
+
import { Logger } from '@sectester/core';
|
|
7
|
+
export declare class WsRequestRunner implements RequestRunner {
|
|
8
|
+
private readonly options;
|
|
9
|
+
private readonly logger;
|
|
10
|
+
static readonly FORBIDDEN_HEADERS: ReadonlySet<string>;
|
|
11
|
+
private readonly agent?;
|
|
12
|
+
constructor(options: RequestRunnerOptions, logger: Logger);
|
|
13
|
+
get protocol(): Protocol;
|
|
14
|
+
run(options: Request): Promise<Response>;
|
|
15
|
+
private createWebSocketClient;
|
|
16
|
+
private sendMessage;
|
|
17
|
+
private createWsResponse;
|
|
18
|
+
private handleRequestError;
|
|
19
|
+
private setTimeout;
|
|
20
|
+
private consume;
|
|
21
|
+
private waitForResponse;
|
|
22
|
+
private connect;
|
|
23
|
+
private normalizeHeaders;
|
|
24
|
+
}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var WsRequestRunner_1;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.WsRequestRunner = void 0;
|
|
5
|
+
const tslib_1 = require("tslib");
|
|
6
|
+
const RequestRunnerOptions_1 = require("../RequestRunnerOptions");
|
|
7
|
+
const Response_1 = require("../Response");
|
|
8
|
+
const models_1 = require("../../models");
|
|
9
|
+
const core_1 = require("@sectester/core");
|
|
10
|
+
const ws_1 = (0, tslib_1.__importDefault)(require("ws"));
|
|
11
|
+
const tsyringe_1 = require("tsyringe");
|
|
12
|
+
const socks_proxy_agent_1 = require("socks-proxy-agent");
|
|
13
|
+
const events_1 = require("events");
|
|
14
|
+
const url_1 = require("url");
|
|
15
|
+
const util_1 = require("util");
|
|
16
|
+
let WsRequestRunner = WsRequestRunner_1 = class WsRequestRunner {
|
|
17
|
+
constructor(options, logger) {
|
|
18
|
+
this.options = options;
|
|
19
|
+
this.logger = logger;
|
|
20
|
+
this.agent = this.options.proxyUrl
|
|
21
|
+
? new socks_proxy_agent_1.SocksProxyAgent({
|
|
22
|
+
...(0, url_1.parse)(this.options.proxyUrl)
|
|
23
|
+
})
|
|
24
|
+
: undefined;
|
|
25
|
+
}
|
|
26
|
+
get protocol() {
|
|
27
|
+
return models_1.Protocol.WS;
|
|
28
|
+
}
|
|
29
|
+
async run(options) {
|
|
30
|
+
let timeout;
|
|
31
|
+
let client;
|
|
32
|
+
try {
|
|
33
|
+
this.logger.debug('Executing WS request with following params: %j', options);
|
|
34
|
+
client = this.createWebSocketClient(options);
|
|
35
|
+
const connectRes = await this.connect(client);
|
|
36
|
+
timeout = this.setTimeout(client);
|
|
37
|
+
const msg = await this.sendMessage(client, options);
|
|
38
|
+
return this.createWsResponse(msg, connectRes);
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
return this.handleRequestError(err, options);
|
|
42
|
+
}
|
|
43
|
+
finally {
|
|
44
|
+
if (timeout) {
|
|
45
|
+
clearTimeout(timeout);
|
|
46
|
+
}
|
|
47
|
+
if ((client === null || client === void 0 ? void 0 : client.readyState) === ws_1.default.OPEN) {
|
|
48
|
+
client.close(1000);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
createWebSocketClient(options) {
|
|
53
|
+
return new ws_1.default(options.url, {
|
|
54
|
+
agent: this.agent,
|
|
55
|
+
rejectUnauthorized: false,
|
|
56
|
+
timeout: this.options.timeout,
|
|
57
|
+
headers: this.normalizeHeaders(options.headers)
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
async sendMessage(client, options) {
|
|
61
|
+
// @ts-expect-error TS infers a wrong type here
|
|
62
|
+
await (0, util_1.promisify)(client.send.bind(client))(options.body);
|
|
63
|
+
const message = await this.consume(client, options.correlationIdRegex);
|
|
64
|
+
return message;
|
|
65
|
+
}
|
|
66
|
+
createWsResponse(msg, connectRes) {
|
|
67
|
+
var _a;
|
|
68
|
+
return new Response_1.Response({
|
|
69
|
+
protocol: this.protocol,
|
|
70
|
+
statusCode: (_a = msg === null || msg === void 0 ? void 0 : msg.code) !== null && _a !== void 0 ? _a : connectRes.statusCode,
|
|
71
|
+
headers: connectRes.headers,
|
|
72
|
+
body: msg === null || msg === void 0 ? void 0 : msg.body
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
handleRequestError(err, options) {
|
|
76
|
+
var _a, _b;
|
|
77
|
+
const message = (_a = err.info) !== null && _a !== void 0 ? _a : err.message;
|
|
78
|
+
const errorCode = (_b = err.code) !== null && _b !== void 0 ? _b : err.syscall;
|
|
79
|
+
this.logger.error('Error executing request: %s', options.url);
|
|
80
|
+
this.logger.error('Cause: %s', message);
|
|
81
|
+
return new Response_1.Response({
|
|
82
|
+
message,
|
|
83
|
+
errorCode,
|
|
84
|
+
protocol: this.protocol
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
setTimeout(client) {
|
|
88
|
+
const timeout = setTimeout(() => client.emit('error', Object.assign(new Error('Waiting frame has timed out'), {
|
|
89
|
+
code: 'ETIMEDOUT'
|
|
90
|
+
})), this.options.timeout);
|
|
91
|
+
timeout.unref();
|
|
92
|
+
return timeout;
|
|
93
|
+
}
|
|
94
|
+
async consume(client, matcher) {
|
|
95
|
+
const result = (await Promise.race([
|
|
96
|
+
this.waitForResponse(client, matcher),
|
|
97
|
+
(0, events_1.once)(client, 'close')
|
|
98
|
+
]));
|
|
99
|
+
let msg;
|
|
100
|
+
if (result.length) {
|
|
101
|
+
const [data, reason] = result;
|
|
102
|
+
const body = typeof data === 'string' ? data : reason;
|
|
103
|
+
const code = typeof data === 'number' ? data : undefined;
|
|
104
|
+
msg = {
|
|
105
|
+
body,
|
|
106
|
+
code
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
return msg;
|
|
110
|
+
}
|
|
111
|
+
waitForResponse(client, matcher) {
|
|
112
|
+
return new Promise(resolve => {
|
|
113
|
+
client.on('message', (data) => {
|
|
114
|
+
const dataString = String(data);
|
|
115
|
+
!matcher || matcher.test(dataString)
|
|
116
|
+
? resolve([dataString])
|
|
117
|
+
: undefined;
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
async connect(client) {
|
|
122
|
+
const opening = (0, events_1.once)(client, 'open');
|
|
123
|
+
const upgrading = (0, events_1.once)(client, 'upgrade');
|
|
124
|
+
await opening;
|
|
125
|
+
const [res] = await upgrading;
|
|
126
|
+
return res;
|
|
127
|
+
}
|
|
128
|
+
normalizeHeaders(headers) {
|
|
129
|
+
return Object.entries(headers).reduce((result, [key, value]) => {
|
|
130
|
+
const headerName = key.trim().toLowerCase();
|
|
131
|
+
if (!WsRequestRunner_1.FORBIDDEN_HEADERS.has(headerName)) {
|
|
132
|
+
result[key] = value;
|
|
133
|
+
}
|
|
134
|
+
return result;
|
|
135
|
+
}, {});
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
WsRequestRunner.FORBIDDEN_HEADERS = new Set([
|
|
139
|
+
'sec-websocket-version',
|
|
140
|
+
'sec-websocket-key'
|
|
141
|
+
]);
|
|
142
|
+
WsRequestRunner = WsRequestRunner_1 = (0, tslib_1.__decorate)([
|
|
143
|
+
(0, tsyringe_1.injectable)(),
|
|
144
|
+
(0, tslib_1.__param)(0, (0, tsyringe_1.inject)(RequestRunnerOptions_1.RequestRunnerOptions)),
|
|
145
|
+
(0, tslib_1.__metadata)("design:paramtypes", [Object, core_1.Logger])
|
|
146
|
+
], WsRequestRunner);
|
|
147
|
+
exports.WsRequestRunner = WsRequestRunner;
|
|
148
|
+
//# sourceMappingURL=WsRequestRunner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WsRequestRunner.js","sourceRoot":"","sources":["../../../../../../packages/repeater/src/request-runner/protocols/WsRequestRunner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
(0, tslib_1.__exportStar)(require("./HttpRequestRunner"), exports);
|
|
5
|
+
(0, tslib_1.__exportStar)(require("./WsRequestRunner"), exports);
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/repeater/src/request-runner/protocols/index.ts"],"names":[],"mappings":";;;AAAA,mEAAoC;AACpC,iEAAkC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const RequestRunner_1 = require("./RequestRunner");
|
|
4
|
+
const protocols_1 = require("./protocols");
|
|
5
|
+
const tsyringe_1 = require("tsyringe");
|
|
6
|
+
tsyringe_1.container.register(RequestRunner_1.RequestRunner, {
|
|
7
|
+
useClass: protocols_1.HttpRequestRunner
|
|
8
|
+
});
|
|
9
|
+
tsyringe_1.container.register(RequestRunner_1.RequestRunner, {
|
|
10
|
+
useClass: protocols_1.WsRequestRunner
|
|
11
|
+
});
|
|
12
|
+
//# sourceMappingURL=register.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../../../../packages/repeater/src/request-runner/register.ts"],"names":[],"mappings":";;AAAA,mDAAgD;AAChD,2CAAiE;AACjE,uCAAqC;AAErC,oBAAS,CAAC,QAAQ,CAAC,6BAAa,EAAE;IAChC,QAAQ,EAAE,6BAAiB;CAC5B,CAAC,CAAC;AAEH,oBAAS,CAAC,QAAQ,CAAC,6BAAa,EAAE;IAChC,QAAQ,EAAE,2BAAe;CAC1B,CAAC,CAAC"}
|