bdy 1.8.3-dev → 1.8.4-dev

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 (112) hide show
  1. package/distTs/bin/cli.js +5 -0
  2. package/distTs/src/agent/linux.js +119 -0
  3. package/distTs/src/agent/manager.js +395 -0
  4. package/distTs/src/agent/osx.js +139 -0
  5. package/distTs/src/agent/socket/tunnel.js +212 -0
  6. package/distTs/src/agent/socket.js +220 -0
  7. package/distTs/src/agent/system.js +177 -0
  8. package/distTs/src/agent/wait.js +23 -0
  9. package/distTs/src/agent/windows.js +159 -0
  10. package/distTs/src/agent.js +237 -0
  11. package/distTs/src/api/agent.js +84 -0
  12. package/distTs/src/api/buddy.js +117 -0
  13. package/distTs/src/api/socket.js +133 -0
  14. package/distTs/src/cfg.js +238 -0
  15. package/distTs/src/command/agent/install.js +106 -0
  16. package/distTs/src/command/agent/restart.js +27 -0
  17. package/distTs/src/command/agent/run.js +19 -0
  18. package/distTs/src/command/agent/start.js +28 -0
  19. package/distTs/src/command/agent/status.js +35 -0
  20. package/distTs/src/command/agent/stop.js +28 -0
  21. package/distTs/src/command/agent/tunnel/http.js +44 -0
  22. package/distTs/src/command/agent/tunnel/list.js +27 -0
  23. package/distTs/src/command/agent/tunnel/remove.js +28 -0
  24. package/distTs/src/command/agent/tunnel/start.js +34 -0
  25. package/distTs/src/command/agent/tunnel/status.js +31 -0
  26. package/distTs/src/command/agent/tunnel/tcp.js +43 -0
  27. package/distTs/src/command/agent/tunnel/tls.js +43 -0
  28. package/distTs/src/command/agent/tunnel.js +23 -0
  29. package/distTs/src/command/agent/uninstall.js +38 -0
  30. package/distTs/src/command/agent/update.js +38 -0
  31. package/distTs/src/command/agent/version.js +21 -0
  32. package/distTs/src/command/agent.js +29 -0
  33. package/distTs/src/command/config/add/http.js +25 -0
  34. package/distTs/src/command/config/add/tcp.js +25 -0
  35. package/distTs/src/command/config/add/tls.js +25 -0
  36. package/distTs/src/command/config/add.js +15 -0
  37. package/distTs/src/command/config/get/region.js +15 -0
  38. package/distTs/src/command/config/get/timeout.js +15 -0
  39. package/distTs/src/command/config/get/token.js +15 -0
  40. package/distTs/src/command/config/get/tunnel.js +19 -0
  41. package/distTs/src/command/config/get/tunnels.js +15 -0
  42. package/distTs/src/command/config/get/whitelist.js +15 -0
  43. package/distTs/src/command/config/get.js +21 -0
  44. package/distTs/src/command/config/remove/tunnel.js +19 -0
  45. package/distTs/src/command/config/remove.js +11 -0
  46. package/distTs/src/command/config/set/region.js +17 -0
  47. package/distTs/src/command/config/set/timeout.js +17 -0
  48. package/distTs/src/command/config/set/token.js +16 -0
  49. package/distTs/src/command/config/set/whitelist.js +17 -0
  50. package/distTs/src/command/config/set.js +17 -0
  51. package/distTs/src/command/config.js +17 -0
  52. package/distTs/src/command/http.js +30 -0
  53. package/distTs/src/command/pre.js +49 -0
  54. package/distTs/src/command/start.js +28 -0
  55. package/distTs/src/command/tcp.js +30 -0
  56. package/distTs/src/command/tls.js +30 -0
  57. package/distTs/src/command/version.js +13 -0
  58. package/distTs/src/command/vt/close.js +28 -0
  59. package/distTs/src/command/vt/exec.js +79 -0
  60. package/distTs/src/command/vt/storybook.js +90 -0
  61. package/distTs/src/command/vt.js +15 -0
  62. package/distTs/src/format.js +172 -0
  63. package/distTs/src/index.js +40 -0
  64. package/distTs/src/input.js +286 -0
  65. package/distTs/src/logger.js +93 -0
  66. package/distTs/src/output/interactive/tunnel.js +860 -0
  67. package/distTs/src/output/noninteractive/agent/tunnels.js +43 -0
  68. package/distTs/src/output/noninteractive/config/tunnel.js +67 -0
  69. package/distTs/src/output/noninteractive/config/tunnels.js +18 -0
  70. package/distTs/src/output/noninteractive/tunnel.js +59 -0
  71. package/distTs/src/output.js +138 -0
  72. package/distTs/src/server/cert.js +52 -0
  73. package/distTs/src/server/http1.js +74 -0
  74. package/distTs/src/server/http2.js +74 -0
  75. package/distTs/src/server/sftp.js +487 -0
  76. package/distTs/src/server/ssh.js +112 -0
  77. package/distTs/src/server/tls.js +41 -0
  78. package/distTs/src/ssh/client.js +191 -0
  79. package/distTs/src/texts.js +345 -0
  80. package/distTs/src/tunnel/agent.js +100 -0
  81. package/distTs/src/tunnel/compression.js +41 -0
  82. package/distTs/src/tunnel/dns.js +54 -0
  83. package/distTs/src/tunnel/html.js +30 -0
  84. package/distTs/src/tunnel/http/log.js +196 -0
  85. package/distTs/src/tunnel/http/serve.js +132 -0
  86. package/distTs/src/tunnel/http/stream.js +45 -0
  87. package/distTs/src/tunnel/http.js +405 -0
  88. package/distTs/src/tunnel/identification.js +96 -0
  89. package/distTs/src/tunnel/latency.js +71 -0
  90. package/distTs/src/tunnel/tcp.js +92 -0
  91. package/distTs/src/tunnel.js +647 -0
  92. package/distTs/src/types/ciInfo.js +10 -0
  93. package/distTs/src/types/options.js +2 -0
  94. package/distTs/src/types/plugin.js +2 -0
  95. package/distTs/src/types/queue.js +2 -0
  96. package/distTs/src/types/requests.js +2 -0
  97. package/distTs/src/types/resources.js +2 -0
  98. package/distTs/src/types/snapshots.js +2 -0
  99. package/distTs/src/types/storybook.js +2 -0
  100. package/distTs/src/utils.js +437 -0
  101. package/distTs/src/visualTest/browser.js +32 -0
  102. package/distTs/src/visualTest/ci.js +206 -0
  103. package/distTs/src/visualTest/context.js +44 -0
  104. package/distTs/src/visualTest/exec.js +51 -0
  105. package/distTs/src/visualTest/queue.js +43 -0
  106. package/distTs/src/visualTest/requests.js +197 -0
  107. package/distTs/src/visualTest/resources.js +195 -0
  108. package/distTs/src/visualTest/server.js +33 -0
  109. package/distTs/src/visualTest/snapshots.js +109 -0
  110. package/distTs/src/visualTest/utils/parseDom.js +238 -0
  111. package/distTs/src/visualTest/validation.js +18 -0
  112. package/package.json +1 -1
@@ -0,0 +1,212 @@
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_js_1 = require("../../texts.js");
7
+ const events_1 = __importDefault(require("events"));
8
+ const utils_1 = require("../../utils");
9
+ class AgentSocketTunnel extends events_1.default {
10
+ constructor(socket, id) {
11
+ super();
12
+ this.id = id;
13
+ this.ready = false;
14
+ this.closed = false;
15
+ this.socket = socket;
16
+ this.socket.on('close', () => this.onClose());
17
+ this.socket.on('message', (msg) => this.onMessage(msg));
18
+ this.socket.send(JSON.stringify({
19
+ message: utils_1.AGENT_SOCKET_MESSAGE_READY,
20
+ }));
21
+ }
22
+ close() {
23
+ if (this.socket) {
24
+ this.socket.close();
25
+ }
26
+ }
27
+ onTunnelRequests(data) {
28
+ this.httpLog = {
29
+ requests: data.requests.map((r) => {
30
+ r.requestBody = {
31
+ data: Buffer.from(r.requestBody.data, 'base64'),
32
+ tooLarge: r.requestBody.tooLarge,
33
+ realLength: r.requestBody.realLength,
34
+ };
35
+ r.responseBody = {
36
+ data: Buffer.from(r.responseBody.data, 'base64'),
37
+ tooLarge: r.responseBody.tooLarge,
38
+ realLength: r.responseBody.realLength,
39
+ };
40
+ return r;
41
+ }),
42
+ };
43
+ }
44
+ onTunnelData(data) {
45
+ if (data.regionLatency)
46
+ this.regionLatency = data.regionLatency;
47
+ if (data.targetLatency)
48
+ this.targetLatency = data.targetLatency;
49
+ if (data.identify)
50
+ this.identify = data.identify;
51
+ if (data.dns)
52
+ this.dns = data.dns;
53
+ if (data.connections)
54
+ this.connections = data.connections;
55
+ this.totalConnections = data.totalConnections;
56
+ this.serve = data.serve;
57
+ this.log = data.log;
58
+ this.status = data.status;
59
+ this.region = data.region;
60
+ this.type = data.type;
61
+ this.target = data.target;
62
+ this.terminate = data.terminate;
63
+ this.id = data.id;
64
+ this.subdomain = data.subdomain;
65
+ this.sshId = data.sshId;
66
+ this.domain = data.domain;
67
+ this.sshForwardPort = data.sshForwardPort;
68
+ }
69
+ upsertHttpLog(data) {
70
+ if (!this.httpLog || !this.httpLog.requests || !this.log)
71
+ return;
72
+ /**
73
+ * @type {object}
74
+ */
75
+ const r = this.httpLog.requests.find((r) => r.id === data.id);
76
+ if (!r) {
77
+ data.requestBody = {
78
+ data: Buffer.from(data.requestBody.data, 'base64'),
79
+ tooLarge: data.requestBody.tooLarge,
80
+ realLength: data.requestBody.realLength,
81
+ };
82
+ data.responseBody = {
83
+ data: Buffer.from(data.responseBody.data, 'base64'),
84
+ tooLarge: data.responseBody.tooLarge,
85
+ realLength: data.responseBody.realLength,
86
+ };
87
+ this.httpLog.requests.unshift(data);
88
+ }
89
+ else {
90
+ r.finished = data.finished;
91
+ r.time = data.time;
92
+ r.httpVersion = data.httpVersion;
93
+ r.requestBody = {
94
+ data: Buffer.from(data.requestBody.data, 'base64'),
95
+ tooLarge: data.requestBody.tooLarge,
96
+ realLength: data.requestBody.realLength,
97
+ };
98
+ r.responseBody = {
99
+ data: Buffer.from(data.responseBody.data, 'base64'),
100
+ tooLarge: data.responseBody.tooLarge,
101
+ realLength: data.responseBody.realLength,
102
+ };
103
+ r.headers = data.headers;
104
+ r.status = data.status;
105
+ r.url = data.url;
106
+ r.method = data.method;
107
+ }
108
+ if (this.httpLog.requests.length > utils_1.TUNNEL_HTTP_LOG_MAX_REQUESTS)
109
+ this.httpLog.requests.pop();
110
+ }
111
+ onMessage(msg) {
112
+ try {
113
+ const json = JSON.parse(msg.toString('utf8'));
114
+ if (json.message === utils_1.AGENT_SOCKET_MESSAGE_TUNNEL) {
115
+ this.onTunnelData(json);
116
+ this.ready = true;
117
+ return;
118
+ }
119
+ if (json.message === utils_1.AGENT_SOCKET_MESSAGE_TUNNEL_HTTP_REQUESTS) {
120
+ this.onTunnelRequests(json);
121
+ return;
122
+ }
123
+ if (json.message === utils_1.AGENT_SOCKET_MESSAGE_TUNNEL_OPEN) {
124
+ this.emit(utils_1.TUNNEL_EVENT_OPEN, json);
125
+ return;
126
+ }
127
+ if (json.message === utils_1.AGENT_SOCKET_MESSAGE_TUNNEL_CLOSED) {
128
+ this.emit(utils_1.TUNNEL_EVENT_CLOSED, json);
129
+ return;
130
+ }
131
+ if (json.message === utils_1.AGENT_SOCKET_MESSAGE_TUNNEL_TCP_OPEN) {
132
+ this.emit(utils_1.TUNNEL_EVENT_TCP_OPEN, json);
133
+ return;
134
+ }
135
+ if (json.message === utils_1.AGENT_SOCKET_MESSAGE_TUNNEL_TCP_CLOSED) {
136
+ this.emit(utils_1.TUNNEL_EVENT_TCP_CLOSED, json);
137
+ return;
138
+ }
139
+ if (json.message === utils_1.AGENT_SOCKET_MESSAGE_TUNNEL_TLS_OPEN) {
140
+ this.emit(utils_1.TUNNEL_EVENT_TLS_OPEN, json);
141
+ return;
142
+ }
143
+ if (json.message === utils_1.AGENT_SOCKET_MESSAGE_TUNNEL_TLS_CLOSED) {
144
+ this.emit(utils_1.TUNNEL_EVENT_TLS_CLOSED, json);
145
+ return;
146
+ }
147
+ if (json.message === utils_1.AGENT_SOCKET_MESSAGE_TUNNEL_HTTP_IDENTIFIED) {
148
+ this.emit(utils_1.TUNNEL_EVENT_HTTP_IDENTIFIED, json, json.identify);
149
+ return;
150
+ }
151
+ if (json.message === utils_1.AGENT_SOCKET_MESSAGE_TUNNEL_HTTP_REQUEST) {
152
+ this.upsertHttpLog(json.logRequest);
153
+ this.emit(utils_1.TUNNEL_EVENT_HTTP_REQUEST, json, json.logRequest);
154
+ return;
155
+ }
156
+ if (json.message === utils_1.AGENT_SOCKET_MESSAGE_TUNNEL_HTTP_RESPONSE) {
157
+ this.upsertHttpLog(json.logRequest);
158
+ this.emit(utils_1.TUNNEL_EVENT_HTTP_RESPONSE, json, json.logRequest);
159
+ return;
160
+ }
161
+ if (json.message === utils_1.AGENT_SOCKET_MESSAGE_TUNNEL_STOPPED) {
162
+ this.emit(utils_1.TUNNEL_EVENT_STOPPED, json);
163
+ this.close();
164
+ }
165
+ }
166
+ catch {
167
+ this.close();
168
+ }
169
+ }
170
+ onClose() {
171
+ this.emit(utils_1.TUNNEL_EVENT_STOPPED);
172
+ try {
173
+ this.socket.removeAllListeners();
174
+ this.socket.close();
175
+ }
176
+ catch {
177
+ // do nothing
178
+ }
179
+ this.closed = true;
180
+ this.socket = null;
181
+ }
182
+ retryHttpLogRequest(logRequest) {
183
+ if (this.socket) {
184
+ this.socket.send(JSON.stringify({
185
+ message: utils_1.AGENT_SOCKET_MESSAGE_TUNNEL_HTTP_RETRY,
186
+ logRequest,
187
+ }));
188
+ }
189
+ }
190
+ waitForReady() {
191
+ return new Promise((resolve, reject) => {
192
+ const ts1 = setInterval(() => {
193
+ if (this.ready) {
194
+ clearInterval(ts1);
195
+ clearTimeout(ts2);
196
+ resolve();
197
+ }
198
+ else if (this.closed) {
199
+ clearInterval(ts1);
200
+ clearTimeout(ts2);
201
+ reject(new Error((0, texts_js_1.ERR_TUNNEL_NOT_FOUND)(this.id)));
202
+ }
203
+ }, 100);
204
+ const ts2 = setTimeout(() => {
205
+ clearInterval(ts1);
206
+ clearTimeout(ts2);
207
+ reject(new Error((0, texts_js_1.ERR_TUNNEL_NOT_FOUND)(this.id)));
208
+ }, 3000);
209
+ });
210
+ }
211
+ }
212
+ exports.default = AgentSocketTunnel;
@@ -0,0 +1,220 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("../utils");
4
+ class AgentSocket {
5
+ constructor(socket, tunnel) {
6
+ this.tunnel = tunnel;
7
+ this.socket = socket;
8
+ this.ready = false;
9
+ this.socket.on('close', () => this.close());
10
+ this.socket.on('message', (msg) => this.onMessage(msg));
11
+ this.boundEventStopped = (t) => this.tunnelStopped(t);
12
+ this.boundEventOpen = (t) => this.tunnelOpen(t);
13
+ this.boundEventClosed = (t) => this.tunnelClosed(t);
14
+ this.boundEventTcpOpen = (t) => this.tunnelTcpOpen(t);
15
+ this.boundEventTcpClosed = (t) => this.tunnelTcpClosed(t);
16
+ this.boundEventTlsOpen = (t) => this.tunnelTlsOpen(t);
17
+ this.boundEventTlsClosed = (t) => this.tunnelTlsClosed(t);
18
+ this.boundEventHttpIdentified = (t, type) => this.tunnelHttpIdentified(t, type);
19
+ this.boundEventHttpRequest = (t, logRequest) => this.tunnelHttpRequest(t, logRequest);
20
+ this.boundEventHttpResponse = (t, logRequest) => this.tunnelHttpResponse(t, logRequest);
21
+ this.tunnel.on(utils_1.TUNNEL_EVENT_STOPPED, this.boundEventStopped);
22
+ this.tunnel.on(utils_1.TUNNEL_EVENT_OPEN, this.boundEventOpen);
23
+ this.tunnel.on(utils_1.TUNNEL_EVENT_CLOSED, this.boundEventClosed);
24
+ this.tunnel.on(utils_1.TUNNEL_EVENT_TCP_OPEN, this.boundEventTcpOpen);
25
+ this.tunnel.on(utils_1.TUNNEL_EVENT_TCP_CLOSED, this.boundEventTcpClosed);
26
+ this.tunnel.on(utils_1.TUNNEL_EVENT_TLS_OPEN, this.boundEventTlsOpen);
27
+ this.tunnel.on(utils_1.TUNNEL_EVENT_TLS_CLOSED, this.boundEventTlsClosed);
28
+ this.tunnel.on(utils_1.TUNNEL_EVENT_HTTP_IDENTIFIED, this.boundEventHttpIdentified);
29
+ this.tunnel.on(utils_1.TUNNEL_EVENT_HTTP_REQUEST, this.boundEventHttpRequest);
30
+ this.tunnel.on(utils_1.TUNNEL_EVENT_HTTP_RESPONSE, this.boundEventHttpResponse);
31
+ }
32
+ onMessage(message) {
33
+ try {
34
+ const json = JSON.parse(message.toString('utf8'));
35
+ if (json.message === utils_1.AGENT_SOCKET_MESSAGE_READY) {
36
+ this.ready = true;
37
+ this.ts = setInterval(() => {
38
+ this.sendTunnel();
39
+ }, 100);
40
+ this.sendTunnel();
41
+ this.sendRequests();
42
+ return;
43
+ }
44
+ if (json.message === utils_1.AGENT_SOCKET_MESSAGE_TUNNEL_HTTP_RETRY &&
45
+ this.ready) {
46
+ this.retryHttpRequest(json.logRequest);
47
+ }
48
+ }
49
+ catch {
50
+ // do nothing
51
+ }
52
+ }
53
+ retryHttpRequest(logRequest) {
54
+ this.tunnel.retryHttpLogRequest(logRequest);
55
+ }
56
+ send(message, data = {}) {
57
+ if (this.socket && this.ready) {
58
+ this.socket.send(JSON.stringify({
59
+ message,
60
+ ...data,
61
+ }));
62
+ }
63
+ }
64
+ sendEvent(message, t, data = {}) {
65
+ this.send(message, {
66
+ type: t.type,
67
+ serve: t.serve,
68
+ target: t.target,
69
+ subdomain: t.subdomain,
70
+ domain: t.domain,
71
+ sshId: t.sshId,
72
+ sshForwardPort: t.sshForwardPort,
73
+ ...data,
74
+ });
75
+ }
76
+ tunnelOpen(t) {
77
+ this.sendEvent(utils_1.AGENT_SOCKET_MESSAGE_TUNNEL_OPEN, t);
78
+ }
79
+ tunnelClosed(t) {
80
+ this.sendEvent(utils_1.AGENT_SOCKET_MESSAGE_TUNNEL_CLOSED, t);
81
+ }
82
+ tunnelTcpOpen(t) {
83
+ this.sendEvent(utils_1.AGENT_SOCKET_MESSAGE_TUNNEL_TCP_OPEN, t);
84
+ }
85
+ tunnelTcpClosed(t) {
86
+ this.sendEvent(utils_1.AGENT_SOCKET_MESSAGE_TUNNEL_TCP_CLOSED, t);
87
+ }
88
+ tunnelTlsOpen(t) {
89
+ this.sendEvent(utils_1.AGENT_SOCKET_MESSAGE_TUNNEL_TLS_OPEN, t);
90
+ }
91
+ tunnelTlsClosed(t) {
92
+ this.sendEvent(utils_1.AGENT_SOCKET_MESSAGE_TUNNEL_TLS_CLOSED, t);
93
+ }
94
+ tunnelHttpIdentified(t, type) {
95
+ this.sendEvent(utils_1.AGENT_SOCKET_MESSAGE_TUNNEL_HTTP_IDENTIFIED, t, {
96
+ identify: type,
97
+ });
98
+ }
99
+ logRequestToSocket(logRequest) {
100
+ return {
101
+ id: logRequest.id,
102
+ finished: logRequest.finished,
103
+ time: logRequest.time,
104
+ httpVersion: logRequest.httpVersion,
105
+ requestBody: {
106
+ data: logRequest.requestBody.data.toString('base64'),
107
+ tooLarge: logRequest.requestBody.tooLarge,
108
+ realLength: logRequest.requestBody.realLength,
109
+ },
110
+ responseBody: {
111
+ data: logRequest.responseBody.data.toString('base64'),
112
+ tooLarge: logRequest.responseBody.tooLarge,
113
+ realLength: logRequest.responseBody.realLength,
114
+ },
115
+ headers: logRequest.headers,
116
+ status: logRequest.status,
117
+ url: logRequest.url,
118
+ method: logRequest.method,
119
+ };
120
+ }
121
+ tunnelHttpRequest(t, logRequest) {
122
+ this.sendEvent(utils_1.AGENT_SOCKET_MESSAGE_TUNNEL_HTTP_REQUEST, t, {
123
+ logRequest: this.logRequestToSocket(logRequest),
124
+ });
125
+ }
126
+ tunnelHttpResponse(t, logRequest) {
127
+ this.sendEvent(utils_1.AGENT_SOCKET_MESSAGE_TUNNEL_HTTP_RESPONSE, t, {
128
+ logRequest: this.logRequestToSocket(logRequest),
129
+ });
130
+ }
131
+ tunnelStopped(t) {
132
+ this.sendEvent(utils_1.AGENT_SOCKET_MESSAGE_TUNNEL_STOPPED, t);
133
+ this.close();
134
+ }
135
+ sendRequests() {
136
+ let requests = [];
137
+ if (this.tunnel.httpLog) {
138
+ requests = this.tunnel.httpLog.requests.map((lr) => this.logRequestToSocket(lr));
139
+ }
140
+ this.send(utils_1.AGENT_SOCKET_MESSAGE_TUNNEL_HTTP_REQUESTS, {
141
+ requests,
142
+ });
143
+ }
144
+ sendTunnel() {
145
+ const connections = {};
146
+ Object.keys(this.tunnel.connections).forEach((id) => {
147
+ connections[id] = true;
148
+ });
149
+ const regionLatency = {
150
+ latency: -1,
151
+ };
152
+ if (this.tunnel.regionLatency) {
153
+ regionLatency.latency = this.tunnel.regionLatency.latency;
154
+ }
155
+ const targetLatency = {
156
+ latency: -1,
157
+ };
158
+ if (this.tunnel.targetLatency) {
159
+ targetLatency.latency = this.tunnel.targetLatency.latency;
160
+ }
161
+ let identify = null;
162
+ if (this.tunnel.identify) {
163
+ identify = {
164
+ type: this.tunnel.identify.type,
165
+ };
166
+ }
167
+ const dns = {
168
+ checking: false,
169
+ valid: false,
170
+ };
171
+ if (this.tunnel.dns) {
172
+ dns.checking = this.tunnel.dns.checking;
173
+ dns.valid = this.tunnel.dns.valid;
174
+ }
175
+ this.send(utils_1.AGENT_SOCKET_MESSAGE_TUNNEL, {
176
+ regionLatency,
177
+ targetLatency,
178
+ connections,
179
+ identify,
180
+ dns,
181
+ totalConnections: this.tunnel.totalConnections,
182
+ serve: this.tunnel.serve,
183
+ log: this.tunnel.log,
184
+ status: this.tunnel.status,
185
+ region: this.tunnel.region,
186
+ type: this.tunnel.type,
187
+ target: this.tunnel.target,
188
+ terminate: this.tunnel.terminate,
189
+ id: this.tunnel.id,
190
+ subdomain: this.tunnel.subdomain,
191
+ domain: this.tunnel.domain,
192
+ sshId: this.tunnel.sshId,
193
+ sshForwardPort: this.tunnel.sshForwardPort,
194
+ });
195
+ }
196
+ close() {
197
+ clearInterval(this.ts);
198
+ try {
199
+ this.socket.removeAllListeners();
200
+ this.socket.close();
201
+ }
202
+ catch {
203
+ // do nothing
204
+ }
205
+ this.ts = null;
206
+ this.socket = null;
207
+ this.tunnel.removeListener(utils_1.TUNNEL_EVENT_OPEN, this.boundEventOpen);
208
+ this.tunnel.removeListener(utils_1.TUNNEL_EVENT_CLOSED, this.boundEventClosed);
209
+ this.tunnel.removeListener(utils_1.TUNNEL_EVENT_TCP_OPEN, this.boundEventTcpOpen);
210
+ this.tunnel.removeListener(utils_1.TUNNEL_EVENT_TCP_CLOSED, this.boundEventTcpClosed);
211
+ this.tunnel.removeListener(utils_1.TUNNEL_EVENT_HTTP_IDENTIFIED, this.boundEventHttpIdentified);
212
+ this.tunnel.removeListener(utils_1.TUNNEL_EVENT_HTTP_REQUEST, this.boundEventHttpRequest);
213
+ this.tunnel.removeListener(utils_1.TUNNEL_EVENT_HTTP_RESPONSE, this.boundEventHttpResponse);
214
+ this.tunnel.removeListener(utils_1.TUNNEL_EVENT_TLS_OPEN, this.boundEventTlsOpen);
215
+ this.tunnel.removeListener(utils_1.TUNNEL_EVENT_TLS_CLOSED, this.boundEventTlsClosed);
216
+ this.tunnel.removeListener(utils_1.TUNNEL_EVENT_STOPPED, this.boundEventStopped);
217
+ this.tunnel = null;
218
+ }
219
+ }
220
+ exports.default = AgentSocket;
@@ -0,0 +1,177 @@
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 fs_1 = require("fs");
7
+ const https_1 = __importDefault(require("https"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const utils_1 = require("../utils");
10
+ const texts_1 = require("../texts");
11
+ const logger_1 = __importDefault(require("../logger"));
12
+ class AgentSystem {
13
+ // extend
14
+ isEnabled() {
15
+ return Promise.resolve(false);
16
+ }
17
+ // extend
18
+ enable() {
19
+ return Promise.reject();
20
+ }
21
+ // extend
22
+ update() {
23
+ return Promise.reject();
24
+ }
25
+ // extend
26
+ disable() {
27
+ return Promise.reject();
28
+ }
29
+ // extend
30
+ getSystemConfigPath() {
31
+ return '';
32
+ }
33
+ // extend
34
+ getSystemConfigDir() {
35
+ return '';
36
+ }
37
+ getAgentConfigDir() {
38
+ return (0, utils_1.getHomeDirectory)();
39
+ }
40
+ getAgentConfigPath() {
41
+ return path_1.default.join(this.getAgentConfigDir(), 'agent.json');
42
+ }
43
+ // extend
44
+ hasAdminRights() {
45
+ return Promise.resolve(false);
46
+ }
47
+ // extend
48
+ isSupported() {
49
+ return Promise.resolve(false);
50
+ }
51
+ // extend
52
+ getBinaryArchive() {
53
+ return '';
54
+ }
55
+ extractArchive(source, dest) {
56
+ return new Promise((resolve, reject) => {
57
+ import('@xhmikosr/decompress')
58
+ .then(({ default: decompress }) => {
59
+ decompress(source, dest)
60
+ .then(() => {
61
+ (0, fs_1.rmSync)(source, { force: true });
62
+ resolve();
63
+ })
64
+ .catch((err) => {
65
+ (0, fs_1.rmSync)(source, { force: true });
66
+ reject(err);
67
+ });
68
+ })
69
+ .catch(reject);
70
+ });
71
+ }
72
+ extractBinaryArchive() {
73
+ return this.extractArchive(this.getBinaryArchivePath(), this.getSystemConfigDir());
74
+ }
75
+ loadSystemConfig() {
76
+ const str = (0, fs_1.readFileSync)(this.getSystemConfigPath(), 'utf-8');
77
+ return JSON.parse(str);
78
+ }
79
+ loadAgentConfig() {
80
+ const str = (0, fs_1.readFileSync)(this.getAgentConfigPath(), 'utf-8');
81
+ return JSON.parse(str);
82
+ }
83
+ clearSystemFiles() {
84
+ (0, fs_1.rmSync)(this.getSystemBinaryPath(), { force: true });
85
+ (0, fs_1.rmSync)(this.getSystemConfigPath(), { force: true });
86
+ }
87
+ clearAgentFiles() {
88
+ (0, fs_1.rmSync)(this.getAgentConfigPath(), { force: true });
89
+ }
90
+ ensureSystemConfigDir() {
91
+ (0, fs_1.mkdirSync)(this.getSystemConfigDir(), { recursive: true });
92
+ }
93
+ saveFile(p, c) {
94
+ return new Promise((resolve, reject) => {
95
+ (0, fs_1.writeFile)(p, c, 'utf-8', (err) => {
96
+ if (!err)
97
+ resolve();
98
+ else
99
+ reject(err);
100
+ });
101
+ });
102
+ }
103
+ getSystemBinaryPath() {
104
+ return path_1.default.join(this.getSystemConfigDir(), 'bdy');
105
+ }
106
+ getBinaryArchivePath() {
107
+ return path_1.default.join(this.getSystemConfigDir(), this.getBinaryArchive());
108
+ }
109
+ downloadFile(url, dest) {
110
+ return new Promise((resolve, reject) => {
111
+ const file = (0, fs_1.createWriteStream)(dest);
112
+ const request = https_1.default.get(url, (response) => {
113
+ if (response.statusCode !== 200) {
114
+ file.close();
115
+ (0, fs_1.rmSync)(dest);
116
+ reject(new Error('File not found'));
117
+ return;
118
+ }
119
+ response.pipe(file);
120
+ file.once('finish', () => {
121
+ file.close((err) => {
122
+ if (err)
123
+ reject(err);
124
+ else
125
+ resolve();
126
+ });
127
+ });
128
+ });
129
+ request.once('error', (err) => {
130
+ file.close();
131
+ (0, fs_1.rmSync)(dest);
132
+ reject(err);
133
+ });
134
+ });
135
+ }
136
+ downloadBinaryArchive() {
137
+ const archivePath = this.getBinaryArchivePath();
138
+ const env = (0, utils_1.getVersionEnv)();
139
+ const version = (0, utils_1.getVersionWithoutEnv)();
140
+ const archive = this.getBinaryArchive();
141
+ return this.downloadFile(`https://es.buddy.works/bdy/${env}/${version}/${archive}`, archivePath);
142
+ }
143
+ saveSystemConfig(id, host, token, port) {
144
+ try {
145
+ logger_1.default.info(texts_1.LOG_SAVING_AGENT_SYSTEM_CONFIG);
146
+ this.ensureSystemConfigDir();
147
+ (0, fs_1.writeFileSync)(this.getSystemConfigPath(), JSON.stringify({
148
+ id,
149
+ host,
150
+ token,
151
+ port,
152
+ }), 'utf-8');
153
+ return true;
154
+ }
155
+ catch (err) {
156
+ logger_1.default.error(texts_1.LOG_ERROR_SAVING_AGENT_SYSTEM_CONFIG);
157
+ logger_1.default.error(err);
158
+ return false;
159
+ }
160
+ }
161
+ saveAgentConfig(shouldStart, sshHostKey) {
162
+ try {
163
+ logger_1.default.info(texts_1.LOG_SAVING_AGENT_LOCAL_CONFIG);
164
+ (0, fs_1.writeFileSync)(this.getAgentConfigPath(), JSON.stringify({
165
+ shouldStart,
166
+ sshHostKey,
167
+ }), 'utf-8');
168
+ return true;
169
+ }
170
+ catch (err) {
171
+ logger_1.default.error(texts_1.LOG_ERROR_SAVING_AGENT_LOCAL_CONFIG);
172
+ logger_1.default.error(err);
173
+ return false;
174
+ }
175
+ }
176
+ }
177
+ exports.default = AgentSystem;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_js_1 = require("../utils.js");
4
+ const waitUntilAgentEnabled = async (api, timeout, onTimeout, onSuccess) => {
5
+ let s;
6
+ try {
7
+ s = await api.fetchStatus();
8
+ }
9
+ catch {
10
+ s = {};
11
+ }
12
+ if (s.enabled) {
13
+ onSuccess();
14
+ }
15
+ else if (timeout < 1000) {
16
+ onTimeout();
17
+ }
18
+ else {
19
+ await (0, utils_js_1.sleep)(1000);
20
+ return waitUntilAgentEnabled(api, timeout - 1000, onTimeout, onSuccess);
21
+ }
22
+ };
23
+ exports.default = waitUntilAgentEnabled;