bdy 1.12.8-dev → 1.12.8-dev-pipeline-run

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 (156) hide show
  1. package/distTs/package.json +1 -1
  2. package/package.json +1 -1
  3. package/distTs/bin/cli.js +0 -5
  4. package/distTs/src/agent/agent.js +0 -328
  5. package/distTs/src/agent/linux.js +0 -124
  6. package/distTs/src/agent/manager.js +0 -519
  7. package/distTs/src/agent/osx.js +0 -146
  8. package/distTs/src/agent/socket/client.js +0 -178
  9. package/distTs/src/agent/socket/tunnel.js +0 -237
  10. package/distTs/src/agent/socket.js +0 -242
  11. package/distTs/src/agent/system.js +0 -179
  12. package/distTs/src/agent/wait.js +0 -23
  13. package/distTs/src/agent/windows.js +0 -159
  14. package/distTs/src/agent.js +0 -302
  15. package/distTs/src/api/agent.js +0 -99
  16. package/distTs/src/api/buddy.js +0 -139
  17. package/distTs/src/api/socket.js +0 -159
  18. package/distTs/src/cfg.js +0 -234
  19. package/distTs/src/command/agent/disable.js +0 -27
  20. package/distTs/src/command/agent/enable.js +0 -27
  21. package/distTs/src/command/agent/install.js +0 -117
  22. package/distTs/src/command/agent/restart.js +0 -27
  23. package/distTs/src/command/agent/run.js +0 -19
  24. package/distTs/src/command/agent/start.js +0 -28
  25. package/distTs/src/command/agent/status.js +0 -34
  26. package/distTs/src/command/agent/stop.js +0 -28
  27. package/distTs/src/command/agent/target/disable.js +0 -27
  28. package/distTs/src/command/agent/target/enable.js +0 -27
  29. package/distTs/src/command/agent/target/status.js +0 -32
  30. package/distTs/src/command/agent/target.js +0 -15
  31. package/distTs/src/command/agent/tunnel/http.js +0 -43
  32. package/distTs/src/command/agent/tunnel/list.js +0 -27
  33. package/distTs/src/command/agent/tunnel/remove.js +0 -28
  34. package/distTs/src/command/agent/tunnel/start.js +0 -34
  35. package/distTs/src/command/agent/tunnel/status.js +0 -31
  36. package/distTs/src/command/agent/tunnel/tcp.js +0 -43
  37. package/distTs/src/command/agent/tunnel/tls.js +0 -43
  38. package/distTs/src/command/agent/tunnel.js +0 -23
  39. package/distTs/src/command/agent/uninstall.js +0 -44
  40. package/distTs/src/command/agent/update.js +0 -38
  41. package/distTs/src/command/agent/version.js +0 -21
  42. package/distTs/src/command/agent.js +0 -35
  43. package/distTs/src/command/config/add/http.js +0 -25
  44. package/distTs/src/command/config/add/tcp.js +0 -25
  45. package/distTs/src/command/config/add/tls.js +0 -25
  46. package/distTs/src/command/config/add.js +0 -15
  47. package/distTs/src/command/config/get/region.js +0 -15
  48. package/distTs/src/command/config/get/timeout.js +0 -15
  49. package/distTs/src/command/config/get/token.js +0 -15
  50. package/distTs/src/command/config/get/tunnel.js +0 -19
  51. package/distTs/src/command/config/get/tunnels.js +0 -15
  52. package/distTs/src/command/config/get/whitelist.js +0 -15
  53. package/distTs/src/command/config/get.js +0 -21
  54. package/distTs/src/command/config/remove/tunnel.js +0 -19
  55. package/distTs/src/command/config/remove.js +0 -11
  56. package/distTs/src/command/config/set/region.js +0 -17
  57. package/distTs/src/command/config/set/timeout.js +0 -17
  58. package/distTs/src/command/config/set/token.js +0 -16
  59. package/distTs/src/command/config/set/whitelist.js +0 -17
  60. package/distTs/src/command/config/set.js +0 -17
  61. package/distTs/src/command/config.js +0 -17
  62. package/distTs/src/command/http.js +0 -30
  63. package/distTs/src/command/pre.js +0 -49
  64. package/distTs/src/command/start.js +0 -28
  65. package/distTs/src/command/tcp.js +0 -30
  66. package/distTs/src/command/tls.js +0 -30
  67. package/distTs/src/command/tunnel/config.js +0 -17
  68. package/distTs/src/command/tunnel/http.js +0 -31
  69. package/distTs/src/command/tunnel/start.js +0 -28
  70. package/distTs/src/command/tunnel/tcp.js +0 -30
  71. package/distTs/src/command/tunnel/tls.js +0 -30
  72. package/distTs/src/command/tunnel.js +0 -19
  73. package/distTs/src/command/ut/upload.js +0 -108
  74. package/distTs/src/command/ut.js +0 -12
  75. package/distTs/src/command/version.js +0 -13
  76. package/distTs/src/command/vt/close.js +0 -27
  77. package/distTs/src/command/vt/compare/validation.js +0 -173
  78. package/distTs/src/command/vt/compare.js +0 -97
  79. package/distTs/src/command/vt/exec.js +0 -81
  80. package/distTs/src/command/vt/installBrowser.js +0 -20
  81. package/distTs/src/command/vt/scrap.js +0 -193
  82. package/distTs/src/command/vt/storybook.js +0 -92
  83. package/distTs/src/command/vt.js +0 -22
  84. package/distTs/src/format.js +0 -174
  85. package/distTs/src/index.js +0 -34
  86. package/distTs/src/input.js +0 -270
  87. package/distTs/src/logger.js +0 -95
  88. package/distTs/src/output/interactive/tunnel.js +0 -860
  89. package/distTs/src/output/noninteractive/agent/tunnels.js +0 -43
  90. package/distTs/src/output/noninteractive/config/tunnel.js +0 -65
  91. package/distTs/src/output/noninteractive/config/tunnels.js +0 -18
  92. package/distTs/src/output/noninteractive/tunnel.js +0 -59
  93. package/distTs/src/output.js +0 -143
  94. package/distTs/src/server/cert.js +0 -52
  95. package/distTs/src/server/http1.js +0 -75
  96. package/distTs/src/server/http2.js +0 -78
  97. package/distTs/src/server/sftp.js +0 -497
  98. package/distTs/src/server/ssh.js +0 -446
  99. package/distTs/src/server/tls.js +0 -41
  100. package/distTs/src/ssh/client.js +0 -197
  101. package/distTs/src/texts.js +0 -421
  102. package/distTs/src/tunnel/agent.js +0 -103
  103. package/distTs/src/tunnel/api/agent.js +0 -100
  104. package/distTs/src/tunnel/api/buddy.js +0 -141
  105. package/distTs/src/tunnel/cfg.js +0 -243
  106. package/distTs/src/tunnel/compression.js +0 -44
  107. package/distTs/src/tunnel/dns.js +0 -53
  108. package/distTs/src/tunnel/html/503.html +0 -338
  109. package/distTs/src/tunnel/html.js +0 -33
  110. package/distTs/src/tunnel/http/log.js +0 -218
  111. package/distTs/src/tunnel/http/serve.js +0 -133
  112. package/distTs/src/tunnel/http/stream.js +0 -34
  113. package/distTs/src/tunnel/http.js +0 -508
  114. package/distTs/src/tunnel/identification.js +0 -103
  115. package/distTs/src/tunnel/latency.js +0 -83
  116. package/distTs/src/tunnel/output/interactive/tunnel.js +0 -867
  117. package/distTs/src/tunnel/output/noninteractive/agent/tunnels.js +0 -45
  118. package/distTs/src/tunnel/output/noninteractive/config/tunnel.js +0 -67
  119. package/distTs/src/tunnel/output/noninteractive/config/tunnels.js +0 -20
  120. package/distTs/src/tunnel/output/noninteractive/tunnel.js +0 -61
  121. package/distTs/src/tunnel/server/cert.js +0 -54
  122. package/distTs/src/tunnel/server/http1.js +0 -80
  123. package/distTs/src/tunnel/server/http2.js +0 -84
  124. package/distTs/src/tunnel/server/sftp.js +0 -514
  125. package/distTs/src/tunnel/server/ssh.js +0 -464
  126. package/distTs/src/tunnel/server/tls.js +0 -47
  127. package/distTs/src/tunnel/ssh/client.js +0 -211
  128. package/distTs/src/tunnel/tcp.js +0 -113
  129. package/distTs/src/tunnel/tunnel.js +0 -1010
  130. package/distTs/src/tunnel.js +0 -656
  131. package/distTs/src/types/ciInfo.js +0 -10
  132. package/distTs/src/types/options.js +0 -2
  133. package/distTs/src/types/plugin.js +0 -2
  134. package/distTs/src/types/queue.js +0 -2
  135. package/distTs/src/types/requests.js +0 -2
  136. package/distTs/src/types/resources.js +0 -2
  137. package/distTs/src/types/schemas.js +0 -54
  138. package/distTs/src/types/scrape.js +0 -2
  139. package/distTs/src/types/snapshots.js +0 -2
  140. package/distTs/src/types/storybook.js +0 -2
  141. package/distTs/src/types/tunnel.js +0 -141
  142. package/distTs/src/unitTest/ci.js +0 -108
  143. package/distTs/src/unitTest/requests.js +0 -72
  144. package/distTs/src/utils.js +0 -378
  145. package/distTs/src/visualTest/browser.js +0 -39
  146. package/distTs/src/visualTest/ci.js +0 -241
  147. package/distTs/src/visualTest/context.js +0 -52
  148. package/distTs/src/visualTest/exec.js +0 -51
  149. package/distTs/src/visualTest/linkUtils.js +0 -21
  150. package/distTs/src/visualTest/queue.js +0 -43
  151. package/distTs/src/visualTest/requests.js +0 -365
  152. package/distTs/src/visualTest/resources.js +0 -259
  153. package/distTs/src/visualTest/server.js +0 -109
  154. package/distTs/src/visualTest/snapshots.js +0 -129
  155. package/distTs/src/visualTest/utils/parseDom.js +0 -238
  156. package/distTs/src/visualTest/validation.js +0 -18
@@ -1,45 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const texts_1 = require("../../../../texts");
7
- const format_1 = __importDefault(require("../../../../format"));
8
- const tunnel_1 = require("../../../../types/tunnel");
9
- class OutputNoninteractiveAgentTunnels {
10
- terminal;
11
- tunnels;
12
- constructor(terminal, tunnels) {
13
- this.terminal = terminal;
14
- this.tunnels = tunnels;
15
- }
16
- start(output) {
17
- if (!this.tunnels.length) {
18
- output.exitNormal(texts_1.NO_TUNNELS_STARTED);
19
- }
20
- else {
21
- const tunnels = [
22
- ['Id', 'Type', 'Target / Latency', 'Entry / Latency', 'Status'],
23
- ];
24
- this.tunnels.forEach((tunnel) => {
25
- let target;
26
- let status;
27
- if (tunnel.serve)
28
- target = format_1.default.serve(tunnel.serve) + ' / 0ms';
29
- else
30
- target =
31
- format_1.default.target(tunnel.type, tunnel.target) +
32
- ` / ${format_1.default.latency(tunnel.targetLatency)}`;
33
- const entry = format_1.default.entry(tunnel) + ` / ${format_1.default.latency(tunnel.regionLatency)}`;
34
- if (tunnel.status === tunnel_1.TUNNEL_STATUS.OPEN)
35
- status = 'Open';
36
- else
37
- status = 'Closed';
38
- tunnels.push([tunnel.id, tunnel.type, target, entry, status]);
39
- });
40
- output.table(tunnels);
41
- output.exitNormal();
42
- }
43
- }
44
- }
45
- exports.default = OutputNoninteractiveAgentTunnels;
@@ -1,67 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const format_1 = __importDefault(require("../../../../format"));
7
- const tunnel_1 = require("../../../../types/tunnel");
8
- class OutputNoninteractiveConfigTunnel {
9
- terminal;
10
- tunnel;
11
- constructor(terminal, tunnel) {
12
- this.terminal = terminal;
13
- this.tunnel = tunnel;
14
- }
15
- start(output) {
16
- const data = [
17
- ['Name', this.tunnel.name],
18
- ['Type', format_1.default.type(this.tunnel.type)],
19
- ];
20
- if (this.tunnel.type === tunnel_1.TUNNEL_TYPE.HTTP && this.tunnel.serve) {
21
- data.push(['Serve', format_1.default.serve(this.tunnel.serve)]);
22
- }
23
- else {
24
- data.push([
25
- 'Target',
26
- format_1.default.target(this.tunnel.type, this.tunnel.target),
27
- ]);
28
- }
29
- data.push(['Region', format_1.default.tunnelRegion(this.tunnel.region)]);
30
- data.push(['Timeout', format_1.default.tunnelTimeout(this.tunnel.timeout)]);
31
- data.push(['Whitelist', format_1.default.tunnelWhitelist(this.tunnel.whitelist)]);
32
- if (this.tunnel.type === tunnel_1.TUNNEL_TYPE.HTTP) {
33
- data.push(['Host Header', format_1.default.hostHeader(this.tunnel.host)]);
34
- data.push([
35
- 'Basic Auth',
36
- format_1.default.basicAuth(this.tunnel.login, this.tunnel.password),
37
- ]);
38
- data.push([
39
- 'User Agents',
40
- format_1.default.tunnelUserAgent(this.tunnel.useragents),
41
- ]);
42
- data.push(['Request Headers', format_1.default.tunnelHeaders(this.tunnel.headers)]);
43
- data.push([
44
- 'Response Headers',
45
- format_1.default.tunnelHeaders(this.tunnel.responseHeaders),
46
- ]);
47
- data.push([
48
- 'Circuit Breaker',
49
- format_1.default.tunnelCircuitBreaker(this.tunnel.circuitBreaker),
50
- ]);
51
- data.push(['Log Requests', format_1.default.yesNo(this.tunnel.log)]);
52
- data.push(['TLS Auth', format_1.default.yesNo(!!this.tunnel.ca)]);
53
- data.push(['TLS Verify', format_1.default.yesNo(this.tunnel.verify)]);
54
- data.push(['Force HTTP/2', format_1.default.yesNo(this.tunnel.http2)]);
55
- data.push(['Compression', format_1.default.yesNo(this.tunnel.compression)]);
56
- }
57
- else if (this.tunnel.type === tunnel_1.TUNNEL_TYPE.TLS) {
58
- data.push(['Terminate TLS At', this.tunnel.terminate]);
59
- data.push(['TLS Key', format_1.default.yesNo(!!this.tunnel.key)]);
60
- data.push(['TLS Cert', format_1.default.yesNo(!!this.tunnel.cert)]);
61
- data.push(['TLS Auth', format_1.default.yesNo(!!this.tunnel.ca)]);
62
- }
63
- output.table(data);
64
- output.exitNormal();
65
- }
66
- }
67
- exports.default = OutputNoninteractiveConfigTunnel;
@@ -1,20 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- class OutputNoninteractiveConfigTunnels {
4
- terminal;
5
- tunnels;
6
- constructor(terminal, tunnels) {
7
- this.terminal = terminal;
8
- this.tunnels = tunnels;
9
- }
10
- start(output) {
11
- const data = [['Name', 'Type', 'Target']];
12
- Object.keys(this.tunnels).forEach((name) => {
13
- const t = this.tunnels[name];
14
- data.push([name, t.type, String(t.target)]);
15
- });
16
- output.table(data);
17
- output.exitNormal();
18
- }
19
- }
20
- exports.default = OutputNoninteractiveConfigTunnels;
@@ -1,61 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const format_1 = __importDefault(require("../../../format"));
7
- const tunnel_1 = require("../../../types/tunnel");
8
- class OutputNoninteractiveTunnel {
9
- tunnel;
10
- terminal;
11
- constructor(terminal, tunnel) {
12
- this.tunnel = tunnel;
13
- this.terminal = terminal;
14
- }
15
- status(t, status) {
16
- this.terminal(`${format_1.default.date()}: Tunnel ${t.type} to ${t.serve || t.target} ${status}\n`);
17
- }
18
- onOpen(t) {
19
- this.status(t, `open. Entry: ${format_1.default.entry(t)}`);
20
- }
21
- onClosed(t) {
22
- this.status(t, 'closed');
23
- }
24
- onTcpOpen(t) {
25
- this.status(t, 'has incoming tcp connection');
26
- }
27
- onTcpClosed(t) {
28
- this.status(t, 'closed tcp connection');
29
- }
30
- onTlsOpen(t) {
31
- this.status(t, 'has incoming tls connection');
32
- }
33
- onTlsClosed(t) {
34
- this.status(t, 'closed tls connection');
35
- }
36
- onHttpIdentified(t, type) {
37
- this.status(t, `identified as ${type}`);
38
- }
39
- onHttpRequest(t, logRequest) {
40
- this.status(t, `Request ${logRequest.method} ${logRequest.url}`);
41
- }
42
- onHttpResponse(t, logRequest) {
43
- this.status(t, `Response ${logRequest.method} ${logRequest.url} ${logRequest.status} in ${logRequest.time}ms`);
44
- }
45
- onStopped() {
46
- process.exit();
47
- }
48
- start() {
49
- this.tunnel.on(tunnel_1.TUNNEL_EVENT.OPEN, (t) => this.onOpen(t));
50
- this.tunnel.on(tunnel_1.TUNNEL_EVENT.CLOSED, (t) => this.onClosed(t));
51
- this.tunnel.on(tunnel_1.TUNNEL_EVENT.TCP_OPEN, (t) => this.onTcpOpen(t));
52
- this.tunnel.on(tunnel_1.TUNNEL_EVENT.TCP_CLOSED, (t) => this.onTcpClosed(t));
53
- this.tunnel.on(tunnel_1.TUNNEL_EVENT.TLS_OPEN, (t) => this.onTlsOpen(t));
54
- this.tunnel.on(tunnel_1.TUNNEL_EVENT.TLS_CLOSED, (t) => this.onTlsClosed(t));
55
- this.tunnel.on(tunnel_1.TUNNEL_EVENT.HTTP_IDENTIFIED, (t, type) => this.onHttpIdentified(t, type));
56
- this.tunnel.on(tunnel_1.TUNNEL_EVENT.HTTP_REQUEST, (t, logRequest) => this.onHttpRequest(t, logRequest));
57
- this.tunnel.on(tunnel_1.TUNNEL_EVENT.HTTP_RESPONSE, (t, logRequest) => this.onHttpResponse(t, logRequest));
58
- this.tunnel.on(tunnel_1.TUNNEL_EVENT.STOPPED, () => this.onStopped());
59
- }
60
- }
61
- exports.default = OutputNoninteractiveTunnel;
@@ -1,54 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const node_forge_1 = __importDefault(require("node-forge"));
7
- const toPositiveHex = (hexString) => {
8
- let hexAsInt = parseInt(hexString[0], 16);
9
- if (hexAsInt < 8) {
10
- return hexString;
11
- }
12
- hexAsInt -= 8;
13
- return hexAsInt.toString() + hexString.substring(1);
14
- };
15
- class ServerCert {
16
- key;
17
- cert;
18
- constructor() {
19
- const keyPair = node_forge_1.default.pki.rsa.generateKeyPair(2048);
20
- const cert = node_forge_1.default.pki.createCertificate();
21
- cert.serialNumber = toPositiveHex(node_forge_1.default.util.bytesToHex(node_forge_1.default.random.getBytesSync(9)));
22
- cert.validity.notBefore = new Date();
23
- const notAfter = new Date();
24
- notAfter.setTime(notAfter.getTime() + 622080000000);
25
- cert.validity.notAfter = notAfter;
26
- const attrs = [
27
- {
28
- name: 'commonName',
29
- value: 'buddy.tunnel',
30
- },
31
- ];
32
- cert.setSubject(attrs);
33
- cert.setIssuer(attrs);
34
- cert.publicKey = keyPair.publicKey;
35
- cert.setExtensions([
36
- {
37
- name: 'basicConstraints',
38
- cA: true,
39
- },
40
- {
41
- name: 'keyUsage',
42
- keyCertSign: true,
43
- digitalSignature: true,
44
- nonRepudiation: true,
45
- keyEncipherment: true,
46
- dataEncipherment: true,
47
- },
48
- ]);
49
- cert.sign(keyPair.privateKey, node_forge_1.default.md.sha256.create());
50
- this.key = node_forge_1.default.pki.privateKeyToPem(keyPair.privateKey);
51
- this.cert = node_forge_1.default.pki.certificateToPem(cert);
52
- }
53
- }
54
- exports.default = ServerCert;
@@ -1,80 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const events_1 = __importDefault(require("events"));
7
- const logger_1 = __importDefault(require("../../logger"));
8
- const uuid_1 = require("uuid");
9
- const http_1 = __importDefault(require("http"));
10
- const texts_1 = require("../../texts");
11
- const tunnel_1 = require("../../types/tunnel");
12
- class ServerHttp1 extends events_1.default {
13
- server;
14
- constructor(host) {
15
- super();
16
- this.server = http_1.default.createServer((req, res) => this.processRequest(req, res, host));
17
- this.server.on('connection', (socket) => {
18
- socket.id = (0, uuid_1.v4)();
19
- this.emit(tunnel_1.TUNNEL_HTTP_SOCKET.OPEN, socket);
20
- socket.once('close', () => {
21
- this.emit(tunnel_1.TUNNEL_HTTP_SOCKET.CLOSED, socket);
22
- });
23
- });
24
- this.server.listen();
25
- }
26
- stop() {
27
- if (this.server) {
28
- this.server.close();
29
- this.server.removeAllListeners();
30
- }
31
- this.server = null;
32
- }
33
- handleSshTunnel(stream, _, ip) {
34
- logger_1.default.debug((0, texts_1.LOG_HTTP1_CONNECTION)(ip));
35
- stream.remoteAddress = ip;
36
- if (this.server)
37
- this.server.emit('connection', stream);
38
- }
39
- retryRequest(logRequest) {
40
- const address = this.server?.address();
41
- if (!address || !address.port)
42
- return;
43
- let req = http_1.default.request({
44
- host: 'localhost',
45
- port: address.port,
46
- method: logRequest.method,
47
- setHost: false,
48
- path: logRequest.url,
49
- headers: logRequest.headers,
50
- });
51
- if (logRequest.requestBody.data.length > 0)
52
- req.write(logRequest.requestBody.data);
53
- req.on('response', (res) => {
54
- res.resume();
55
- });
56
- req.on('close', () => {
57
- if (req)
58
- req.removeAllListeners();
59
- req = null;
60
- });
61
- req.end();
62
- }
63
- checkHostHeader(req, res, host) {
64
- const headerHost = (req.headers.host || '').split(':')[0];
65
- if (headerHost === host)
66
- return true;
67
- else {
68
- res.statusCode = 421;
69
- res.end('Misdirected Request');
70
- return false;
71
- }
72
- }
73
- async processRequest(req, res, host) {
74
- if (!this.checkHostHeader(req, res, host))
75
- return;
76
- logger_1.default.debug((0, texts_1.LOG_HTTP1_REQUEST)(req.method, req.url));
77
- this.emit(tunnel_1.TUNNEL_EVENT.HTTP_REQUEST, req, res);
78
- }
79
- }
80
- exports.default = ServerHttp1;
@@ -1,84 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const events_1 = __importDefault(require("events"));
7
- const http2_1 = __importDefault(require("http2"));
8
- const logger_js_1 = __importDefault(require("../../logger.js"));
9
- const uuid_1 = require("uuid");
10
- const texts_1 = require("../../texts");
11
- const tunnel_1 = require("../../types/tunnel");
12
- class ServerHttp2 extends events_1.default {
13
- server;
14
- constructor(host) {
15
- super();
16
- this.server = http2_1.default.createServer((req, res) => this.processRequest(req, res, host));
17
- this.server.on('session', (session) => {
18
- session.id = (0, uuid_1.v4)();
19
- this.emit(tunnel_1.TUNNEL_EVENT.HTTP_SESSION_OPEN, session);
20
- session.once('close', () => {
21
- this.emit(tunnel_1.TUNNEL_EVENT.HTTP_SESSION_CLOSED, session);
22
- });
23
- });
24
- this.server.listen();
25
- }
26
- stop() {
27
- if (this.server) {
28
- this.server.close();
29
- this.server.removeAllListeners();
30
- }
31
- this.server = null;
32
- }
33
- handleSshTunnel(stream, info, ip) {
34
- logger_js_1.default.debug((0, texts_1.LOG_HTTP2_CONNECTION)(ip));
35
- stream.remoteAddress = ip;
36
- if (this.server)
37
- this.server.emit('connection', stream);
38
- }
39
- retryRequest(logRequest) {
40
- const address = this.server?.address();
41
- if (!address || !address.port)
42
- return;
43
- let client = http2_1.default.connect(`http://localhost:${address.port}`, {
44
- maxSessionMemory: 100,
45
- });
46
- let req = client.request(logRequest.headers);
47
- if (logRequest.requestBody.data.length > 0)
48
- req.write(logRequest.requestBody.data);
49
- req.on('response', () => {
50
- if (req)
51
- req.resume();
52
- });
53
- req.on('error', (err) => {
54
- logger_js_1.default.debug(texts_1.LOG_ERROR);
55
- logger_js_1.default.debug(err);
56
- });
57
- req.on('close', () => {
58
- if (req)
59
- req.removeAllListeners();
60
- if (client)
61
- client.close();
62
- req = null;
63
- client = null;
64
- });
65
- req.end();
66
- }
67
- checkHostHeader(req, res, host) {
68
- const headerHost = (req.headers[':authority'] || '').split(':')[0];
69
- if (headerHost === host)
70
- return true;
71
- else {
72
- res.statusCode = 421;
73
- res.end('Misdirected Request');
74
- return false;
75
- }
76
- }
77
- async processRequest(req, res, host) {
78
- if (!this.checkHostHeader(req, res, host))
79
- return;
80
- logger_js_1.default.debug((0, texts_1.LOG_HTTP2_REQUEST)(req.method, req.url));
81
- this.emit(tunnel_1.TUNNEL_EVENT.HTTP_REQUEST, req, res);
82
- }
83
- }
84
- exports.default = ServerHttp2;