bdy 1.7.46-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.
- package/.eslintrc.yml +23 -0
- package/LICENSE +21 -0
- package/bin/cli.js +5 -0
- package/dockerfile +15 -0
- package/link.sh +3 -0
- package/package.json +39 -0
- package/src/agent/linux.js +127 -0
- package/src/agent/manager.js +404 -0
- package/src/agent/osx.js +150 -0
- package/src/agent/socket/tunnel.js +232 -0
- package/src/agent/socket.js +260 -0
- package/src/agent/system.js +205 -0
- package/src/agent/wait.js +20 -0
- package/src/agent/windows.js +168 -0
- package/src/agent.js +248 -0
- package/src/api/agent.js +95 -0
- package/src/api/buddy.js +131 -0
- package/src/api/socket.js +142 -0
- package/src/cfg.js +228 -0
- package/src/command/agent/disable.js +37 -0
- package/src/command/agent/enable.js +117 -0
- package/src/command/agent/restart.js +28 -0
- package/src/command/agent/run.js +16 -0
- package/src/command/agent/start.js +28 -0
- package/src/command/agent/status.js +45 -0
- package/src/command/agent/stop.js +28 -0
- package/src/command/agent/tunnel/http.js +47 -0
- package/src/command/agent/tunnel/list.js +27 -0
- package/src/command/agent/tunnel/start.js +38 -0
- package/src/command/agent/tunnel/status.js +32 -0
- package/src/command/agent/tunnel/stop.js +30 -0
- package/src/command/agent/tunnel/tcp.js +47 -0
- package/src/command/agent/tunnel/tls.js +47 -0
- package/src/command/agent/tunnel.js +21 -0
- package/src/command/agent/update.js +43 -0
- package/src/command/agent/version.js +23 -0
- package/src/command/agent.js +27 -0
- package/src/command/config/add/http.js +33 -0
- package/src/command/config/add/tcp.js +33 -0
- package/src/command/config/add/tls.js +33 -0
- package/src/command/config/add.js +13 -0
- package/src/command/config/get/region.js +13 -0
- package/src/command/config/get/timeout.js +13 -0
- package/src/command/config/get/token.js +13 -0
- package/src/command/config/get/tunnel.js +21 -0
- package/src/command/config/get/tunnels.js +13 -0
- package/src/command/config/get/whitelist.js +13 -0
- package/src/command/config/get.js +19 -0
- package/src/command/config/remove/tunnel.js +22 -0
- package/src/command/config/remove.js +9 -0
- package/src/command/config/set/region.js +19 -0
- package/src/command/config/set/timeout.js +22 -0
- package/src/command/config/set/token.js +18 -0
- package/src/command/config/set/whitelist.js +19 -0
- package/src/command/config/set.js +15 -0
- package/src/command/config.js +15 -0
- package/src/command/http.js +34 -0
- package/src/command/pre.js +47 -0
- package/src/command/start.js +31 -0
- package/src/command/tcp.js +32 -0
- package/src/command/tls.js +32 -0
- package/src/command/version.js +10 -0
- package/src/format.js +171 -0
- package/src/index.js +32 -0
- package/src/input.js +283 -0
- package/src/logger.js +87 -0
- package/src/output/interactive/tunnel.js +871 -0
- package/src/output/noninteractive/agent/tunnels.js +32 -0
- package/src/output/noninteractive/config/tunnel.js +52 -0
- package/src/output/noninteractive/config/tunnels.js +19 -0
- package/src/output/noninteractive/tunnel.js +79 -0
- package/src/output.js +136 -0
- package/src/server/cert.js +51 -0
- package/src/server/http1.js +79 -0
- package/src/server/http2.js +79 -0
- package/src/server/sftp.js +474 -0
- package/src/server/ssh.js +107 -0
- package/src/server/tls.js +41 -0
- package/src/ssh/client.js +196 -0
- package/src/texts.js +447 -0
- package/src/tunnel/agent.js +100 -0
- package/src/tunnel/compression.js +32 -0
- package/src/tunnel/dns.js +55 -0
- package/src/tunnel/html/404.html +129 -0
- package/src/tunnel/html/503.html +136 -0
- package/src/tunnel/html.js +32 -0
- package/src/tunnel/http/log.js +204 -0
- package/src/tunnel/http/serve.js +127 -0
- package/src/tunnel/http/stream.js +46 -0
- package/src/tunnel/http.js +406 -0
- package/src/tunnel/identification.js +95 -0
- package/src/tunnel/latency.js +63 -0
- package/src/tunnel/tcp.js +71 -0
- package/src/tunnel.js +696 -0
- package/src/utils.js +496 -0
- package/unlink.sh +3 -0
package/src/utils.js
ADDED
|
@@ -0,0 +1,496 @@
|
|
|
1
|
+
const { resolve } = require('path');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
const { readFileSync, mkdirSync, existsSync } = require('fs');
|
|
4
|
+
const { homedir } = require('os');
|
|
5
|
+
const os = require('os');
|
|
6
|
+
const { ERR_FETCH_VERSION } = require('./texts.js');
|
|
7
|
+
const { Command } = require('commander');
|
|
8
|
+
const { getAsset, isSea } = require('node:sea');
|
|
9
|
+
const Ssh2 = require('ssh2');
|
|
10
|
+
const {
|
|
11
|
+
OPTION_REGION,
|
|
12
|
+
OPTION_WHITELIST,
|
|
13
|
+
OPTION_SUBDOMAIN,
|
|
14
|
+
OPTION_DOMAIN,
|
|
15
|
+
OPTION_TIMEOUT,
|
|
16
|
+
OPTION_HTTP_HOST,
|
|
17
|
+
OPTION_HEADER,
|
|
18
|
+
OPTION_RESPONSE_HEADER,
|
|
19
|
+
OPTION_HEADER_USER_AGENT,
|
|
20
|
+
OPTION_HTTP_AUTH,
|
|
21
|
+
OPTION_HTTP_LOG,
|
|
22
|
+
OPTION_HTTP_VERIFY,
|
|
23
|
+
OPTION_HTTP_2,
|
|
24
|
+
OPTION_HTTP_COMPRESSION,
|
|
25
|
+
OPTION_TLS_CA,
|
|
26
|
+
OPTION_HTTP_CIRCUIT_BREAKER,
|
|
27
|
+
OPTION_TLS_KEY,
|
|
28
|
+
OPTION_TLS_CERT,
|
|
29
|
+
OPTION_TLS_TERMINATE,
|
|
30
|
+
ERR_FAILED_TO_CONNECT,
|
|
31
|
+
ERR_WRONG_TOKEN,
|
|
32
|
+
ERR_AGENT_REMOVED,
|
|
33
|
+
ERR_SUBDOMAIN_TAKEN,
|
|
34
|
+
ERR_TUNNELS_DISABLED,
|
|
35
|
+
ERR_AGENT_LIMIT_REACHED,
|
|
36
|
+
ERR_TUNNEL_LIMIT_REACHED
|
|
37
|
+
} = require('./texts');
|
|
38
|
+
|
|
39
|
+
const REGION_US = 'US';
|
|
40
|
+
const REGION_EU = 'EU';
|
|
41
|
+
|
|
42
|
+
const TLS_TERMINATE_AT_TARGET = 'TARGET';
|
|
43
|
+
const TLS_TERMINATE_AT_AGENT = 'AGENT';
|
|
44
|
+
const TLS_TERMINATE_AT_REGION = 'REGION';
|
|
45
|
+
|
|
46
|
+
const TUNNEL_HTTP = 'HTTP';
|
|
47
|
+
const TUNNEL_TCP = 'TCP';
|
|
48
|
+
const TUNNEL_TLS = 'TLS';
|
|
49
|
+
const TUNNEL_SSH = 'SSH';
|
|
50
|
+
|
|
51
|
+
const EVENT_TUNNEL_IDENTIFIED = 'tunnel identified';
|
|
52
|
+
const TUNNEL_IDENTIFIED_HTTP1 = '1.1';
|
|
53
|
+
const TUNNEL_IDENTIFIED_HTTP2 = '2.0';
|
|
54
|
+
|
|
55
|
+
const HTTP1_SOCKET_OPEN = 'http socket open';
|
|
56
|
+
const HTTP1_SOCKET_CLOSED = 'http socket closed';
|
|
57
|
+
const HTTP1_REQUEST = 'http request';
|
|
58
|
+
|
|
59
|
+
const HTTP2_SESSION_OPEN = 'http session open';
|
|
60
|
+
const HTTP2_SESSION_CLOSED = 'http session closed';
|
|
61
|
+
const HTTP2_REQUEST = 'http request';
|
|
62
|
+
|
|
63
|
+
const TLS_SOCKET = 'tls socket';
|
|
64
|
+
|
|
65
|
+
const SSH_CLIENT_EVENT_CONNECTED = 'connected';
|
|
66
|
+
const SSH_CLIENT_EVENT_DISCONNECTED = 'disconnected';
|
|
67
|
+
const SSH_CLIENT_EVENT_STREAM_SSH = 'stream ssh';
|
|
68
|
+
const SSH_CLIENT_EVENT_STREAM_TCP = 'stream tcp';
|
|
69
|
+
const SSH_CLIENT_EVENT_STREAM_TLS = 'stream tls';
|
|
70
|
+
const SSH_CLIENT_EVENT_STREAM_HTTP1 = 'stream http1';
|
|
71
|
+
const SSH_CLIENT_EVENT_STREAM_HTTP2 = 'stream http2';
|
|
72
|
+
|
|
73
|
+
const SOCKET_TYPE_TCP = 0;
|
|
74
|
+
const SOCKET_TYPE_TLS = 1;
|
|
75
|
+
const SOCKET_TYPE_HTTP1 = 2;
|
|
76
|
+
const SOCKET_TYPE_HTTP2 = 3;
|
|
77
|
+
const SOCKET_TYPE_SSH = 4;
|
|
78
|
+
|
|
79
|
+
const TUNNEL_HTTP_RATE_LIMIT = 2000;
|
|
80
|
+
const TUNNEL_HTTP_RATE_WINDOW = 60000;
|
|
81
|
+
const TUNNEL_HTTP_LOG_MAX_BODY = 5242880; // 5MB
|
|
82
|
+
const TUNNEL_HTTP_LOG_MAX_REQUESTS = 20;
|
|
83
|
+
const TUNNEL_MAX_REQUEST_SIZE_TO_SYNC = 25600; // 25kB (1 request do frontu moze miec max 1MB, 20 requestow po req i res body)
|
|
84
|
+
const TUNNEL_HTTP_CB_WINDOW = 10000;
|
|
85
|
+
const TUNNEL_HTTP_CB_MIN_REQUESTS = 20;
|
|
86
|
+
const EVENT_TUNNEL_HTTP_NEW_REQUEST = 'new request';
|
|
87
|
+
const EVENT_TUNNEL_HTTP_NEW_REQUEST_END = 'new request end';
|
|
88
|
+
const EVENT_TUNNEL_HTTP_NEW_RESPONSE = 'new response';
|
|
89
|
+
const EVENT_TUNNEL_HTTP_NEW_RESPONSE_END = 'new response end';
|
|
90
|
+
|
|
91
|
+
const TUNNEL_EVENT_OPEN = 'open';
|
|
92
|
+
const TUNNEL_EVENT_CLOSED = 'closed';
|
|
93
|
+
const TUNNEL_EVENT_TCP_OPEN = 'tcp open';
|
|
94
|
+
const TUNNEL_EVENT_TCP_CLOSED = 'tcp closed';
|
|
95
|
+
const TUNNEL_EVENT_TLS_OPEN = 'tls open';
|
|
96
|
+
const TUNNEL_EVENT_TLS_CLOSED = 'tls closed';
|
|
97
|
+
const TUNNEL_EVENT_HTTP_OPEN = 'http open';
|
|
98
|
+
const TUNNEL_EVENT_HTTP_CLOSED = 'http closed';
|
|
99
|
+
const TUNNEL_EVENT_HTTP_IDENTIFIED = 'http identified';
|
|
100
|
+
const TUNNEL_EVENT_HTTP_REQUEST = 'http request';
|
|
101
|
+
const TUNNEL_EVENT_HTTP_RESPONSE = 'http response';
|
|
102
|
+
const TUNNEL_EVENT_STOPPED = 'stopped';
|
|
103
|
+
|
|
104
|
+
const TUNNEL_OPEN = 'OPEN';
|
|
105
|
+
const TUNNEL_CLOSED = 'CLOSED';
|
|
106
|
+
|
|
107
|
+
const DEFAULT_TIMEOUT = 30;
|
|
108
|
+
|
|
109
|
+
const AGENT_STATUS_DISABLED = 'disabled';
|
|
110
|
+
const AGENT_STATUS_INITIALIZING = 'initializing';
|
|
111
|
+
const AGENT_STATUS_FETCH_FAILED = 'fetch agent failed, retrying';
|
|
112
|
+
const AGENT_STATUS_ENABLED = 'enabled';
|
|
113
|
+
|
|
114
|
+
const AGENT_ACTION_STOP = 'STOP';
|
|
115
|
+
const AGENT_ACTION_START = 'START';
|
|
116
|
+
const AGENT_ACTION_RESTART = 'RESTART';
|
|
117
|
+
const AGENT_ACTION_DELETE = 'DELETE';
|
|
118
|
+
|
|
119
|
+
const AGENT_SOCKET_MESSAGE_READY = 'ready';
|
|
120
|
+
const AGENT_SOCKET_MESSAGE_TUNNEL = 'tunnel';
|
|
121
|
+
const AGENT_SOCKET_MESSAGE_TUNNEL_STOPPED = 'tunnel stopped';
|
|
122
|
+
const AGENT_SOCKET_MESSAGE_TUNNEL_OPEN = 'tunnel open';
|
|
123
|
+
const AGENT_SOCKET_MESSAGE_TUNNEL_CLOSED = 'tunnel closed';
|
|
124
|
+
const AGENT_SOCKET_MESSAGE_TUNNEL_TCP_OPEN = 'tunnel tcp open';
|
|
125
|
+
const AGENT_SOCKET_MESSAGE_TUNNEL_TCP_CLOSED = 'tunnel tcp closed';
|
|
126
|
+
const AGENT_SOCKET_MESSAGE_TUNNEL_TLS_OPEN = 'tunnel tls open';
|
|
127
|
+
const AGENT_SOCKET_MESSAGE_TUNNEL_TLS_CLOSED = 'tunnel tls closed';
|
|
128
|
+
const AGENT_SOCKET_MESSAGE_TUNNEL_HTTP_IDENTIFIED = 'tunnel http identified';
|
|
129
|
+
const AGENT_SOCKET_MESSAGE_TUNNEL_HTTP_REQUESTS = 'tunnel http requests';
|
|
130
|
+
const AGENT_SOCKET_MESSAGE_TUNNEL_HTTP_REQUEST = 'tunnel http request';
|
|
131
|
+
const AGENT_SOCKET_MESSAGE_TUNNEL_HTTP_RESPONSE = 'tunnel http response';
|
|
132
|
+
const AGENT_SOCKET_MESSAGE_TUNNEL_HTTP_RETRY = 'tunnel http retry';
|
|
133
|
+
|
|
134
|
+
const SOCKET_IO_EVENT_CONNECTED = 'socket connected';
|
|
135
|
+
const SOCKET_IO_EVENT_DISCONNECTED = 'socket disconnected';
|
|
136
|
+
const SOCKET_IO_EVENT_FETCH_SUCCESS = 'fetch success';
|
|
137
|
+
const SOCKET_IO_EVENT_FETCH_FAILED = 'fetch failed';
|
|
138
|
+
const SOCKET_IO_EVENT_AGENT = 'agent';
|
|
139
|
+
const SOCKET_IO_EVENT_TUNNEL = 'tunnel';
|
|
140
|
+
|
|
141
|
+
function apiErrorCodeToClass (code, host) {
|
|
142
|
+
if (code === 234000) {
|
|
143
|
+
return new ApiErrorAgentNotFound();
|
|
144
|
+
}
|
|
145
|
+
if (code === 234020) {
|
|
146
|
+
return new ApiErrorWrongToken();
|
|
147
|
+
}
|
|
148
|
+
if (code === 234003) {
|
|
149
|
+
return new ApiErrorSubdomainTaken();
|
|
150
|
+
}
|
|
151
|
+
if (code === 234500) {
|
|
152
|
+
return new ApiErrorTunnelsDisabled();
|
|
153
|
+
}
|
|
154
|
+
if (code === 234502) {
|
|
155
|
+
return new ApiErrorAgentLimitReached();
|
|
156
|
+
}
|
|
157
|
+
if (code === 234501) {
|
|
158
|
+
return new ApiErrorTunnelLimitReached();
|
|
159
|
+
}
|
|
160
|
+
return new ApiErrorFailedToConnect(host);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
class ApiErrorAgentNotFound extends Error {
|
|
164
|
+
constructor() {
|
|
165
|
+
super(ERR_AGENT_REMOVED);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
class ApiErrorFailedToConnect extends Error {
|
|
169
|
+
constructor(host) {
|
|
170
|
+
super(ERR_FAILED_TO_CONNECT(host));
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
class ApiErrorWrongToken extends Error {
|
|
174
|
+
constructor() {
|
|
175
|
+
super(ERR_WRONG_TOKEN);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
class ApiErrorSubdomainTaken extends Error {
|
|
179
|
+
constructor() {
|
|
180
|
+
super(ERR_SUBDOMAIN_TAKEN);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
class ApiErrorAgentLimitReached extends Error {
|
|
185
|
+
constructor() {
|
|
186
|
+
super(ERR_AGENT_LIMIT_REACHED);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
class ApiErrorTunnelLimitReached extends Error {
|
|
191
|
+
constructor() {
|
|
192
|
+
super(ERR_TUNNEL_LIMIT_REACHED);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
class ApiErrorTunnelsDisabled extends Error {
|
|
197
|
+
constructor() {
|
|
198
|
+
super(ERR_TUNNELS_DISABLED);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
const TARGET_TCP_TLS_REGEX = /^(([^:]+):)?(\d+)$/i;
|
|
203
|
+
const TARGET_HTTP_REGEX = /^((https?):\/\/)?([^:/]+:[^@:]+@)?([^:]+)(:(\d+))?$/i;
|
|
204
|
+
const TARGET_ONLY_PORT_REGEX = /^\d+$/i;
|
|
205
|
+
|
|
206
|
+
const TUNNEL_COMPRESSION_METHOD_IDENTITY = 'identity';
|
|
207
|
+
const TUNNEL_COMPRESSION_METHOD_BR = 'br';
|
|
208
|
+
const TUNNEL_COMPRESSION_METHOD_GZIP = 'gzip';
|
|
209
|
+
const TUNNEL_COMPRESSION_METHOD_DEFLATE = 'deflate';
|
|
210
|
+
|
|
211
|
+
const TUNNEL_LATENCY_EVENT_RECONNECTED = 'reconnected';
|
|
212
|
+
|
|
213
|
+
const TCP_EVENT_CLOSED = 'closed';
|
|
214
|
+
|
|
215
|
+
let cachedVersion;
|
|
216
|
+
let cachedRoot;
|
|
217
|
+
|
|
218
|
+
const getRootDir = () => {
|
|
219
|
+
if (!cachedRoot) {
|
|
220
|
+
cachedRoot = path.resolve(__dirname, '..');
|
|
221
|
+
}
|
|
222
|
+
return cachedRoot;
|
|
223
|
+
};
|
|
224
|
+
|
|
225
|
+
const isStringRegExp = (str) => /^\/.*\/$/.test(str);
|
|
226
|
+
|
|
227
|
+
const getHostname = () => {
|
|
228
|
+
return os.hostname();
|
|
229
|
+
};
|
|
230
|
+
|
|
231
|
+
const getPlatform = () => {
|
|
232
|
+
return os.platform();
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
const getHomeDirectory = () => {
|
|
236
|
+
if (isDocker()) return '/buddy';
|
|
237
|
+
const r = homedir();
|
|
238
|
+
const p = path.join(r, '.bdy');
|
|
239
|
+
if (!existsSync(p)) mkdirSync(p, { recursive: true });
|
|
240
|
+
return p;
|
|
241
|
+
};
|
|
242
|
+
|
|
243
|
+
const getVersion = () => {
|
|
244
|
+
if (!cachedVersion) {
|
|
245
|
+
let packageJson;
|
|
246
|
+
if (isSea()) {
|
|
247
|
+
packageJson = JSON.parse(getAsset('package.json', 'utf8'));
|
|
248
|
+
} else {
|
|
249
|
+
const root = getRootDir();
|
|
250
|
+
packageJson = JSON.parse(readFileSync(resolve(root, 'package.json'), 'utf8'));
|
|
251
|
+
}
|
|
252
|
+
cachedVersion = packageJson.version;
|
|
253
|
+
}
|
|
254
|
+
return cachedVersion;
|
|
255
|
+
};
|
|
256
|
+
|
|
257
|
+
const getVersionWithoutEnv = () => {
|
|
258
|
+
const v = getVersion();
|
|
259
|
+
const m = v.match(/^\d+\.\d+\.\d+/);
|
|
260
|
+
if (m) return m[0];
|
|
261
|
+
return '0.0.0';
|
|
262
|
+
};
|
|
263
|
+
|
|
264
|
+
const getVersionEnv = () => {
|
|
265
|
+
const v = getVersion();
|
|
266
|
+
if (/dev/.test(v)) return 'dev';
|
|
267
|
+
if (/beta/.test(v)) return 'beta';
|
|
268
|
+
if (/stage/.test(v)) return 'stage';
|
|
269
|
+
if (/master/.test(v)) return 'master';
|
|
270
|
+
return 'prod';
|
|
271
|
+
};
|
|
272
|
+
|
|
273
|
+
const getLatestVersion = async () => {
|
|
274
|
+
try {
|
|
275
|
+
const env = getVersionEnv();
|
|
276
|
+
const c = new AbortController();
|
|
277
|
+
setTimeout(() => {
|
|
278
|
+
c.abort();
|
|
279
|
+
}, 10000);
|
|
280
|
+
const response = await fetch(`https://es.buddy.works/tunnel/${env}/latest`, {
|
|
281
|
+
method: 'GET',
|
|
282
|
+
signal: c.signal,
|
|
283
|
+
});
|
|
284
|
+
if (response.status === 200) {
|
|
285
|
+
const data = await response.text();
|
|
286
|
+
const v = data.trim();
|
|
287
|
+
if (env === 'prod') return v;
|
|
288
|
+
return `${v}-${env}`;
|
|
289
|
+
} else {
|
|
290
|
+
return '0.0.0';
|
|
291
|
+
}
|
|
292
|
+
} catch {
|
|
293
|
+
throw new Error(ERR_FETCH_VERSION);
|
|
294
|
+
}
|
|
295
|
+
};
|
|
296
|
+
|
|
297
|
+
const sleep = (ms) => {
|
|
298
|
+
return new Promise((resolve) => {
|
|
299
|
+
setTimeout(resolve, ms);
|
|
300
|
+
});
|
|
301
|
+
};
|
|
302
|
+
|
|
303
|
+
const isDocker = () => {
|
|
304
|
+
return process.env['IS_IN_DOCKER'] === '1';
|
|
305
|
+
};
|
|
306
|
+
|
|
307
|
+
const isOsx = () => {
|
|
308
|
+
return os.platform() === 'darwin';
|
|
309
|
+
};
|
|
310
|
+
|
|
311
|
+
const isLinux = () => {
|
|
312
|
+
return os.platform() === 'linux';
|
|
313
|
+
};
|
|
314
|
+
|
|
315
|
+
const isWindows = () => {
|
|
316
|
+
return os.platform() === 'win32';
|
|
317
|
+
};
|
|
318
|
+
|
|
319
|
+
const getRealTargetHost = (target) => {
|
|
320
|
+
return target;
|
|
321
|
+
};
|
|
322
|
+
|
|
323
|
+
const createSshHostKey = () => {
|
|
324
|
+
const keys = Ssh2.utils.generateKeyPairSync('ed25519', {});
|
|
325
|
+
return keys.private;
|
|
326
|
+
};
|
|
327
|
+
|
|
328
|
+
const getBasicCommandTcp = () => {
|
|
329
|
+
const commandTcp = new Command('tcp');
|
|
330
|
+
commandTcp.alias('TCP');
|
|
331
|
+
commandTcp.option('-r, --region <region>', OPTION_REGION);
|
|
332
|
+
commandTcp.option('-w, --whitelist <cidrs...>', OPTION_WHITELIST);
|
|
333
|
+
commandTcp.option('-b, --subdomain <subdomain>', OPTION_SUBDOMAIN);
|
|
334
|
+
commandTcp.option('-d, --domain <domain>', OPTION_DOMAIN);
|
|
335
|
+
commandTcp.option('-t, --timeout <seconds>', OPTION_TIMEOUT);
|
|
336
|
+
return commandTcp;
|
|
337
|
+
};
|
|
338
|
+
|
|
339
|
+
const getBasicCommandHttp = () => {
|
|
340
|
+
const commandHttp = new Command('http');
|
|
341
|
+
commandHttp.alias('HTTP');
|
|
342
|
+
commandHttp.option('-r, --region <region>', OPTION_REGION);
|
|
343
|
+
commandHttp.option('-w, --whitelist <cidrs...>', OPTION_WHITELIST);
|
|
344
|
+
commandHttp.option('-b, --subdomain <subdomain>', OPTION_SUBDOMAIN);
|
|
345
|
+
commandHttp.option('-d, --domain <domain>', OPTION_DOMAIN);
|
|
346
|
+
commandHttp.option('-t, --timeout <seconds>', OPTION_TIMEOUT);
|
|
347
|
+
commandHttp.option('-h, --host <host>', OPTION_HTTP_HOST);
|
|
348
|
+
commandHttp.option('--header <headers...>', OPTION_HEADER);
|
|
349
|
+
commandHttp.option('--response-header <headers...>', OPTION_RESPONSE_HEADER);
|
|
350
|
+
commandHttp.option('--useragent <useragent...>', OPTION_HEADER_USER_AGENT);
|
|
351
|
+
commandHttp.option('-a, --auth <user:pass>', OPTION_HTTP_AUTH);
|
|
352
|
+
commandHttp.option('-l, --log', OPTION_HTTP_LOG);
|
|
353
|
+
commandHttp.option('-v, --verify', OPTION_HTTP_VERIFY);
|
|
354
|
+
commandHttp.option('-2, --http2', OPTION_HTTP_2);
|
|
355
|
+
commandHttp.option('-c, --compression', OPTION_HTTP_COMPRESSION);
|
|
356
|
+
commandHttp.option('--ca <ca>', OPTION_TLS_CA);
|
|
357
|
+
commandHttp.option('--circuit-breaker <threshold>', OPTION_HTTP_CIRCUIT_BREAKER);
|
|
358
|
+
return commandHttp;
|
|
359
|
+
};
|
|
360
|
+
|
|
361
|
+
const getBasicCommandTls = () => {
|
|
362
|
+
const commandTls = new Command('tls');
|
|
363
|
+
commandTls.alias('TLS');
|
|
364
|
+
commandTls.option('-r, --region <region>', OPTION_REGION);
|
|
365
|
+
commandTls.option('-w, --whitelist <cidrs...>', OPTION_WHITELIST);
|
|
366
|
+
commandTls.option('-b, --subdomain <subdomain>', OPTION_SUBDOMAIN);
|
|
367
|
+
commandTls.option('-d, --domain <domain>', OPTION_DOMAIN);
|
|
368
|
+
commandTls.option('-t, --timeout <seconds>', OPTION_TIMEOUT);
|
|
369
|
+
commandTls.option('-k, --key <key>', OPTION_TLS_KEY);
|
|
370
|
+
commandTls.option('-c, --cert <cert>', OPTION_TLS_CERT);
|
|
371
|
+
commandTls.option('--ca <ca>', OPTION_TLS_CA);
|
|
372
|
+
commandTls.option('-i, --terminate <at>', OPTION_TLS_TERMINATE);
|
|
373
|
+
return commandTls;
|
|
374
|
+
};
|
|
375
|
+
|
|
376
|
+
module.exports = {
|
|
377
|
+
apiErrorCodeToClass,
|
|
378
|
+
SOCKET_IO_EVENT_FETCH_SUCCESS,
|
|
379
|
+
SOCKET_IO_EVENT_FETCH_FAILED,
|
|
380
|
+
getBasicCommandHttp,
|
|
381
|
+
getBasicCommandTcp,
|
|
382
|
+
getBasicCommandTls,
|
|
383
|
+
ApiErrorAgentNotFound,
|
|
384
|
+
ApiErrorFailedToConnect,
|
|
385
|
+
ApiErrorWrongToken,
|
|
386
|
+
ApiErrorSubdomainTaken,
|
|
387
|
+
ApiErrorTunnelsDisabled,
|
|
388
|
+
AGENT_SOCKET_MESSAGE_READY,
|
|
389
|
+
AGENT_SOCKET_MESSAGE_TUNNEL,
|
|
390
|
+
AGENT_SOCKET_MESSAGE_TUNNEL_STOPPED,
|
|
391
|
+
AGENT_SOCKET_MESSAGE_TUNNEL_OPEN,
|
|
392
|
+
AGENT_SOCKET_MESSAGE_TUNNEL_CLOSED,
|
|
393
|
+
AGENT_SOCKET_MESSAGE_TUNNEL_TCP_OPEN,
|
|
394
|
+
AGENT_SOCKET_MESSAGE_TUNNEL_TCP_CLOSED,
|
|
395
|
+
AGENT_SOCKET_MESSAGE_TUNNEL_TLS_OPEN,
|
|
396
|
+
AGENT_SOCKET_MESSAGE_TUNNEL_TLS_CLOSED,
|
|
397
|
+
AGENT_SOCKET_MESSAGE_TUNNEL_HTTP_IDENTIFIED,
|
|
398
|
+
AGENT_SOCKET_MESSAGE_TUNNEL_HTTP_REQUESTS,
|
|
399
|
+
AGENT_SOCKET_MESSAGE_TUNNEL_HTTP_REQUEST,
|
|
400
|
+
AGENT_SOCKET_MESSAGE_TUNNEL_HTTP_RESPONSE,
|
|
401
|
+
AGENT_SOCKET_MESSAGE_TUNNEL_HTTP_RETRY,
|
|
402
|
+
EVENT_TUNNEL_IDENTIFIED,
|
|
403
|
+
TUNNEL_IDENTIFIED_HTTP1,
|
|
404
|
+
TUNNEL_IDENTIFIED_HTTP2,
|
|
405
|
+
AGENT_ACTION_STOP,
|
|
406
|
+
AGENT_ACTION_RESTART,
|
|
407
|
+
AGENT_ACTION_START,
|
|
408
|
+
AGENT_ACTION_DELETE,
|
|
409
|
+
getRootDir,
|
|
410
|
+
getHostname,
|
|
411
|
+
getPlatform,
|
|
412
|
+
getVersion,
|
|
413
|
+
getVersionEnv,
|
|
414
|
+
getVersionWithoutEnv,
|
|
415
|
+
REGION_EU,
|
|
416
|
+
REGION_US,
|
|
417
|
+
TUNNEL_HTTP,
|
|
418
|
+
TUNNEL_TCP,
|
|
419
|
+
TUNNEL_TLS,
|
|
420
|
+
TUNNEL_SSH,
|
|
421
|
+
TUNNEL_OPEN,
|
|
422
|
+
TUNNEL_CLOSED,
|
|
423
|
+
DEFAULT_TIMEOUT,
|
|
424
|
+
TLS_TERMINATE_AT_REGION,
|
|
425
|
+
TLS_TERMINATE_AT_TARGET,
|
|
426
|
+
TLS_TERMINATE_AT_AGENT,
|
|
427
|
+
getLatestVersion,
|
|
428
|
+
getHomeDirectory,
|
|
429
|
+
sleep,
|
|
430
|
+
getRealTargetHost,
|
|
431
|
+
isStringRegExp,
|
|
432
|
+
isDocker,
|
|
433
|
+
isOsx,
|
|
434
|
+
isLinux,
|
|
435
|
+
isWindows,
|
|
436
|
+
createSshHostKey,
|
|
437
|
+
AGENT_STATUS_INITIALIZING,
|
|
438
|
+
AGENT_STATUS_FETCH_FAILED,
|
|
439
|
+
AGENT_STATUS_DISABLED,
|
|
440
|
+
AGENT_STATUS_ENABLED,
|
|
441
|
+
TARGET_TCP_TLS_REGEX,
|
|
442
|
+
TARGET_ONLY_PORT_REGEX,
|
|
443
|
+
TARGET_HTTP_REGEX,
|
|
444
|
+
HTTP1_SOCKET_OPEN,
|
|
445
|
+
HTTP1_SOCKET_CLOSED,
|
|
446
|
+
HTTP1_REQUEST,
|
|
447
|
+
HTTP2_SESSION_OPEN,
|
|
448
|
+
HTTP2_SESSION_CLOSED,
|
|
449
|
+
HTTP2_REQUEST,
|
|
450
|
+
TLS_SOCKET,
|
|
451
|
+
SSH_CLIENT_EVENT_CONNECTED,
|
|
452
|
+
SSH_CLIENT_EVENT_DISCONNECTED,
|
|
453
|
+
SSH_CLIENT_EVENT_STREAM_TCP,
|
|
454
|
+
SSH_CLIENT_EVENT_STREAM_SSH,
|
|
455
|
+
SSH_CLIENT_EVENT_STREAM_TLS,
|
|
456
|
+
SSH_CLIENT_EVENT_STREAM_HTTP1,
|
|
457
|
+
SSH_CLIENT_EVENT_STREAM_HTTP2,
|
|
458
|
+
SOCKET_TYPE_TCP,
|
|
459
|
+
SOCKET_TYPE_TLS,
|
|
460
|
+
SOCKET_TYPE_HTTP1,
|
|
461
|
+
SOCKET_TYPE_HTTP2,
|
|
462
|
+
SOCKET_TYPE_SSH,
|
|
463
|
+
TUNNEL_HTTP_RATE_LIMIT,
|
|
464
|
+
TUNNEL_HTTP_RATE_WINDOW,
|
|
465
|
+
TUNNEL_HTTP_LOG_MAX_BODY,
|
|
466
|
+
TUNNEL_HTTP_LOG_MAX_REQUESTS,
|
|
467
|
+
TUNNEL_MAX_REQUEST_SIZE_TO_SYNC,
|
|
468
|
+
TUNNEL_HTTP_CB_WINDOW,
|
|
469
|
+
TUNNEL_HTTP_CB_MIN_REQUESTS,
|
|
470
|
+
EVENT_TUNNEL_HTTP_NEW_REQUEST,
|
|
471
|
+
EVENT_TUNNEL_HTTP_NEW_REQUEST_END,
|
|
472
|
+
EVENT_TUNNEL_HTTP_NEW_RESPONSE_END,
|
|
473
|
+
EVENT_TUNNEL_HTTP_NEW_RESPONSE,
|
|
474
|
+
TUNNEL_COMPRESSION_METHOD_IDENTITY,
|
|
475
|
+
TUNNEL_COMPRESSION_METHOD_BR,
|
|
476
|
+
TUNNEL_COMPRESSION_METHOD_GZIP,
|
|
477
|
+
TUNNEL_COMPRESSION_METHOD_DEFLATE,
|
|
478
|
+
TUNNEL_LATENCY_EVENT_RECONNECTED,
|
|
479
|
+
TCP_EVENT_CLOSED,
|
|
480
|
+
SOCKET_IO_EVENT_CONNECTED,
|
|
481
|
+
SOCKET_IO_EVENT_DISCONNECTED,
|
|
482
|
+
SOCKET_IO_EVENT_AGENT,
|
|
483
|
+
SOCKET_IO_EVENT_TUNNEL,
|
|
484
|
+
TUNNEL_EVENT_HTTP_OPEN,
|
|
485
|
+
TUNNEL_EVENT_HTTP_CLOSED,
|
|
486
|
+
TUNNEL_EVENT_OPEN,
|
|
487
|
+
TUNNEL_EVENT_CLOSED,
|
|
488
|
+
TUNNEL_EVENT_TCP_OPEN,
|
|
489
|
+
TUNNEL_EVENT_TCP_CLOSED,
|
|
490
|
+
TUNNEL_EVENT_TLS_OPEN,
|
|
491
|
+
TUNNEL_EVENT_TLS_CLOSED,
|
|
492
|
+
TUNNEL_EVENT_HTTP_IDENTIFIED,
|
|
493
|
+
TUNNEL_EVENT_HTTP_REQUEST,
|
|
494
|
+
TUNNEL_EVENT_HTTP_RESPONSE,
|
|
495
|
+
TUNNEL_EVENT_STOPPED
|
|
496
|
+
};
|
package/unlink.sh
ADDED