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.
Files changed (96) hide show
  1. package/.eslintrc.yml +23 -0
  2. package/LICENSE +21 -0
  3. package/bin/cli.js +5 -0
  4. package/dockerfile +15 -0
  5. package/link.sh +3 -0
  6. package/package.json +39 -0
  7. package/src/agent/linux.js +127 -0
  8. package/src/agent/manager.js +404 -0
  9. package/src/agent/osx.js +150 -0
  10. package/src/agent/socket/tunnel.js +232 -0
  11. package/src/agent/socket.js +260 -0
  12. package/src/agent/system.js +205 -0
  13. package/src/agent/wait.js +20 -0
  14. package/src/agent/windows.js +168 -0
  15. package/src/agent.js +248 -0
  16. package/src/api/agent.js +95 -0
  17. package/src/api/buddy.js +131 -0
  18. package/src/api/socket.js +142 -0
  19. package/src/cfg.js +228 -0
  20. package/src/command/agent/disable.js +37 -0
  21. package/src/command/agent/enable.js +117 -0
  22. package/src/command/agent/restart.js +28 -0
  23. package/src/command/agent/run.js +16 -0
  24. package/src/command/agent/start.js +28 -0
  25. package/src/command/agent/status.js +45 -0
  26. package/src/command/agent/stop.js +28 -0
  27. package/src/command/agent/tunnel/http.js +47 -0
  28. package/src/command/agent/tunnel/list.js +27 -0
  29. package/src/command/agent/tunnel/start.js +38 -0
  30. package/src/command/agent/tunnel/status.js +32 -0
  31. package/src/command/agent/tunnel/stop.js +30 -0
  32. package/src/command/agent/tunnel/tcp.js +47 -0
  33. package/src/command/agent/tunnel/tls.js +47 -0
  34. package/src/command/agent/tunnel.js +21 -0
  35. package/src/command/agent/update.js +43 -0
  36. package/src/command/agent/version.js +23 -0
  37. package/src/command/agent.js +27 -0
  38. package/src/command/config/add/http.js +33 -0
  39. package/src/command/config/add/tcp.js +33 -0
  40. package/src/command/config/add/tls.js +33 -0
  41. package/src/command/config/add.js +13 -0
  42. package/src/command/config/get/region.js +13 -0
  43. package/src/command/config/get/timeout.js +13 -0
  44. package/src/command/config/get/token.js +13 -0
  45. package/src/command/config/get/tunnel.js +21 -0
  46. package/src/command/config/get/tunnels.js +13 -0
  47. package/src/command/config/get/whitelist.js +13 -0
  48. package/src/command/config/get.js +19 -0
  49. package/src/command/config/remove/tunnel.js +22 -0
  50. package/src/command/config/remove.js +9 -0
  51. package/src/command/config/set/region.js +19 -0
  52. package/src/command/config/set/timeout.js +22 -0
  53. package/src/command/config/set/token.js +18 -0
  54. package/src/command/config/set/whitelist.js +19 -0
  55. package/src/command/config/set.js +15 -0
  56. package/src/command/config.js +15 -0
  57. package/src/command/http.js +34 -0
  58. package/src/command/pre.js +47 -0
  59. package/src/command/start.js +31 -0
  60. package/src/command/tcp.js +32 -0
  61. package/src/command/tls.js +32 -0
  62. package/src/command/version.js +10 -0
  63. package/src/format.js +171 -0
  64. package/src/index.js +32 -0
  65. package/src/input.js +283 -0
  66. package/src/logger.js +87 -0
  67. package/src/output/interactive/tunnel.js +871 -0
  68. package/src/output/noninteractive/agent/tunnels.js +32 -0
  69. package/src/output/noninteractive/config/tunnel.js +52 -0
  70. package/src/output/noninteractive/config/tunnels.js +19 -0
  71. package/src/output/noninteractive/tunnel.js +79 -0
  72. package/src/output.js +136 -0
  73. package/src/server/cert.js +51 -0
  74. package/src/server/http1.js +79 -0
  75. package/src/server/http2.js +79 -0
  76. package/src/server/sftp.js +474 -0
  77. package/src/server/ssh.js +107 -0
  78. package/src/server/tls.js +41 -0
  79. package/src/ssh/client.js +196 -0
  80. package/src/texts.js +447 -0
  81. package/src/tunnel/agent.js +100 -0
  82. package/src/tunnel/compression.js +32 -0
  83. package/src/tunnel/dns.js +55 -0
  84. package/src/tunnel/html/404.html +129 -0
  85. package/src/tunnel/html/503.html +136 -0
  86. package/src/tunnel/html.js +32 -0
  87. package/src/tunnel/http/log.js +204 -0
  88. package/src/tunnel/http/serve.js +127 -0
  89. package/src/tunnel/http/stream.js +46 -0
  90. package/src/tunnel/http.js +406 -0
  91. package/src/tunnel/identification.js +95 -0
  92. package/src/tunnel/latency.js +63 -0
  93. package/src/tunnel/tcp.js +71 -0
  94. package/src/tunnel.js +696 -0
  95. package/src/utils.js +496 -0
  96. package/unlink.sh +3 -0
@@ -0,0 +1,33 @@
1
+ const {
2
+ TUNNEL_HTTP
3
+ } = require('../../../utils.js');
4
+ const Input = require('../../../input.js');
5
+ const Cfg = require('../../../cfg.js');
6
+ const Output = require('../../../output.js');
7
+ const {
8
+ DESC_COMMAND_CONFIG_ADD_HTTP,
9
+ ERR_TUNNEL_ALREADY_EXISTS,
10
+ OPTION_FORCE,
11
+ OPTION_NAME,
12
+ OPTION_TARGET,
13
+ TXT_TUNNEL_ADDED
14
+ } = require('../../../texts.js');
15
+ const ApiBuddy = require('../../../api/buddy');
16
+ const { getBasicCommandHttp } = require('../../../utils');
17
+
18
+ const commandConfigAddHttp = getBasicCommandHttp();
19
+ commandConfigAddHttp.description(DESC_COMMAND_CONFIG_ADD_HTTP);
20
+ commandConfigAddHttp.option('-f, --force', OPTION_FORCE);
21
+ commandConfigAddHttp.argument('<name>', OPTION_NAME);
22
+ commandConfigAddHttp.argument('[protocol://host:port]', OPTION_TARGET);
23
+ commandConfigAddHttp.action(async (n, target, options) => {
24
+ const name = Input.name(n);
25
+ if (Cfg.hasTunnel(name) && !options.force) {
26
+ Output.exitError(ERR_TUNNEL_ALREADY_EXISTS);
27
+ }
28
+ const myIp = await ApiBuddy.fetchMyIp();
29
+ await Cfg.addTunnel(name, TUNNEL_HTTP, target, options, myIp);
30
+ Output.exitSuccess(TXT_TUNNEL_ADDED);
31
+ });
32
+
33
+ module.exports = commandConfigAddHttp;
@@ -0,0 +1,33 @@
1
+ const {
2
+ TUNNEL_TCP
3
+ } = require('../../../utils.js');
4
+ const Input = require('../../../input.js');
5
+ const Cfg = require('../../../cfg.js');
6
+ const Output = require('../../../output.js');
7
+ const {
8
+ DESC_COMMAND_CONFIG_ADD_TCP,
9
+ ERR_TUNNEL_ALREADY_EXISTS,
10
+ OPTION_FORCE,
11
+ OPTION_NAME,
12
+ OPTION_TARGET,
13
+ TXT_TUNNEL_ADDED
14
+ } = require('../../../texts.js');
15
+ const ApiBuddy = require('../../../api/buddy');
16
+ const { getBasicCommandTcp } = require('../../../utils');
17
+
18
+ const commandConfigAddTcp = getBasicCommandTcp();
19
+ commandConfigAddTcp.description(DESC_COMMAND_CONFIG_ADD_TCP);
20
+ commandConfigAddTcp.option('-f, --force', OPTION_FORCE);
21
+ commandConfigAddTcp.argument('<name>', OPTION_NAME);
22
+ commandConfigAddTcp.argument('[host:port]', OPTION_TARGET);
23
+ commandConfigAddTcp.action(async (n, target, options) => {
24
+ const name = Input.name(n);
25
+ if (Cfg.hasTunnel(name) && !options.force) {
26
+ Output.exitError(ERR_TUNNEL_ALREADY_EXISTS);
27
+ }
28
+ const myIp = await ApiBuddy.fetchMyIp();
29
+ await Cfg.addTunnel(name, TUNNEL_TCP, target, options, myIp);
30
+ Output.exitSuccess(TXT_TUNNEL_ADDED);
31
+ });
32
+
33
+ module.exports = commandConfigAddTcp;
@@ -0,0 +1,33 @@
1
+ const {
2
+ TUNNEL_TLS
3
+ } = require('../../../utils.js');
4
+ const Input = require('../../../input.js');
5
+ const Cfg = require('../../../cfg.js');
6
+ const Output = require('../../../output.js');
7
+ const {
8
+ DESC_COMMAND_CONFIG_ADD_TLS,
9
+ ERR_TUNNEL_ALREADY_EXISTS,
10
+ OPTION_FORCE,
11
+ OPTION_NAME,
12
+ OPTION_TARGET,
13
+ TXT_TUNNEL_ADDED
14
+ } = require('../../../texts.js');
15
+ const ApiBuddy = require('../../../api/buddy');
16
+ const { getBasicCommandTls } = require('../../../utils');
17
+
18
+ const commandConfigAddTls = getBasicCommandTls();
19
+ commandConfigAddTls.description(DESC_COMMAND_CONFIG_ADD_TLS);
20
+ commandConfigAddTls.option('-f, --force', OPTION_FORCE);
21
+ commandConfigAddTls.argument('<name>', OPTION_NAME);
22
+ commandConfigAddTls.argument('[host:port]', OPTION_TARGET);
23
+ commandConfigAddTls.action(async (n, target, options) => {
24
+ const name = Input.name(n);
25
+ if (Cfg.hasTunnel(name) && !options.force) {
26
+ Output.exitError(ERR_TUNNEL_ALREADY_EXISTS);
27
+ }
28
+ const myIp = await ApiBuddy.fetchMyIp();
29
+ await Cfg.addTunnel(name, TUNNEL_TLS, target, options, myIp);
30
+ Output.exitSuccess(TXT_TUNNEL_ADDED);
31
+ });
32
+
33
+ module.exports = commandConfigAddTls;
@@ -0,0 +1,13 @@
1
+ const { Command } = require('commander');
2
+ const commandConfigAddTcp = require('./add/tcp.js');
3
+ const commandConfigAddHttp = require('./add/http.js');
4
+ const commandConfigAddTls = require('./add/tls.js');
5
+ const { DESC_COMMAND_CONFIG_ADD } = require('../../texts.js');
6
+
7
+ const commandConfigAdd = new Command('add');
8
+ commandConfigAdd.description(DESC_COMMAND_CONFIG_ADD);
9
+ commandConfigAdd.addCommand(commandConfigAddTcp);
10
+ commandConfigAdd.addCommand(commandConfigAddTls);
11
+ commandConfigAdd.addCommand(commandConfigAddHttp);
12
+
13
+ module.exports = commandConfigAdd;
@@ -0,0 +1,13 @@
1
+ const { Command } = require('commander');
2
+ const Cfg = require('../../../cfg.js');
3
+ const Output = require('../../../output.js');
4
+ const { DESC_COMMAND_CONFIG_GET_REGION } = require('../../../texts.js');
5
+ const Format = require('../../../format');
6
+
7
+ const commandConfigGetRegion = new Command('region');
8
+ commandConfigGetRegion.description(DESC_COMMAND_CONFIG_GET_REGION);
9
+ commandConfigGetRegion.action(() => {
10
+ Output.exitNormal(Format.region(Cfg.getRegion()));
11
+ });
12
+
13
+ module.exports = commandConfigGetRegion;
@@ -0,0 +1,13 @@
1
+ const { Command } = require('commander');
2
+ const Output = require('../../../output.js');
3
+ const Cfg = require('../../../cfg.js');
4
+ const { DESC_COMMAND_CONFIG_GET_TIMEOUT } = require('../../../texts.js');
5
+ const Format = require('../../../format');
6
+
7
+ const commandConfigGetTimeout = new Command('timeout');
8
+ commandConfigGetTimeout.description(DESC_COMMAND_CONFIG_GET_TIMEOUT);
9
+ commandConfigGetTimeout.action(() => {
10
+ Output.exitNormal(Format.timeout(Cfg.getTimeout()));
11
+ });
12
+
13
+ module.exports = commandConfigGetTimeout;
@@ -0,0 +1,13 @@
1
+ const { Command } = require('commander');
2
+ const Cfg = require('../../../cfg.js');
3
+ const Output = require('../../../output.js');
4
+ const { DESC_COMMAND_CONFIG_GET_TOKEN } = require('../../../texts.js');
5
+ const Format = require('../../../format');
6
+
7
+ const commandConfigGetToken = new Command('token');
8
+ commandConfigGetToken.description(DESC_COMMAND_CONFIG_GET_TOKEN);
9
+ commandConfigGetToken.action(() => {
10
+ Output.exitNormal(Format.token(Cfg.getToken()));
11
+ });
12
+
13
+ module.exports = commandConfigGetToken;
@@ -0,0 +1,21 @@
1
+ const { Command } = require('commander');
2
+ const Cfg = require('../../../cfg.js');
3
+ const Output = require('../../../output.js');
4
+ const {
5
+ DESC_COMMAND_CONFIG_GET_TUNNEL,
6
+ ERR_TUNNEL_NOT_FOUND,
7
+ OPTION_NAME
8
+ } = require('../../../texts.js');
9
+
10
+ const commandConfigGetTunnel = new Command('tunnel');
11
+ commandConfigGetTunnel.description(DESC_COMMAND_CONFIG_GET_TUNNEL);
12
+ commandConfigGetTunnel.argument('<name>', OPTION_NAME);
13
+ commandConfigGetTunnel.action((name) => {
14
+ if (!Cfg.hasTunnel(name)) {
15
+ Output.exitError(ERR_TUNNEL_NOT_FOUND(name));
16
+ }
17
+ Output.configTunnel(Cfg.getTunnel(name));
18
+ Output.exitNormal();
19
+ });
20
+
21
+ module.exports = commandConfigGetTunnel;
@@ -0,0 +1,13 @@
1
+ const { Command } = require('commander');
2
+ const Cfg = require('../../../cfg.js');
3
+ const Output = require('../../../output.js');
4
+ const { DESC_COMMAND_CONFIG_GET_TUNNELS } = require('../../../texts.js');
5
+
6
+ const commandConfigGetTunnels = new Command('tunnels');
7
+ commandConfigGetTunnels.description(DESC_COMMAND_CONFIG_GET_TUNNELS);
8
+ commandConfigGetTunnels.action(() => {
9
+ Output.configTunnels(Cfg.getTunnels());
10
+ Output.exitNormal();
11
+ });
12
+
13
+ module.exports = commandConfigGetTunnels;
@@ -0,0 +1,13 @@
1
+ const { Command } = require('commander');
2
+ const Output = require('../../../output.js');
3
+ const Cfg = require('../../../cfg.js');
4
+ const { DESC_COMMAND_CONFIG_GET_WHITELIST } = require('../../../texts.js');
5
+ const Format = require('../../../format');
6
+
7
+ const commandConfigGetWhitelist = new Command('whitelist');
8
+ commandConfigGetWhitelist.description(DESC_COMMAND_CONFIG_GET_WHITELIST);
9
+ commandConfigGetWhitelist.action(() => {
10
+ Output.exitNormal(Format.whitelist(Cfg.getWhitelist()));
11
+ });
12
+
13
+ module.exports = commandConfigGetWhitelist;
@@ -0,0 +1,19 @@
1
+ const { Command } = require('commander');
2
+ const commandConfigGetRegion = require('./get/region.js');
3
+ const commandConfigGetToken = require('./get/token.js');
4
+ const commandConfigGetTunnel = require('./get/tunnel.js');
5
+ const commandConfigGetWhitelist = require('./get/whitelist.js');
6
+ const commandConfigGetTimeout = require('./get/timeout.js');
7
+ const commandConfigGetTunnels = require('./get/tunnels.js');
8
+ const { DESC_COMMAND_CONFIG_GET } = require('../../texts.js');
9
+
10
+ const commandConfigGet = new Command('get');
11
+ commandConfigGet.description(DESC_COMMAND_CONFIG_GET);
12
+ commandConfigGet.addCommand(commandConfigGetRegion);
13
+ commandConfigGet.addCommand(commandConfigGetToken);
14
+ commandConfigGet.addCommand(commandConfigGetWhitelist);
15
+ commandConfigGet.addCommand(commandConfigGetTimeout);
16
+ commandConfigGet.addCommand(commandConfigGetTunnels);
17
+ commandConfigGet.addCommand(commandConfigGetTunnel);
18
+
19
+ module.exports = commandConfigGet;
@@ -0,0 +1,22 @@
1
+ const { Command } = require('commander');
2
+ const Cfg = require('../../../cfg.js');
3
+ const Output = require('../../../output.js');
4
+ const {
5
+ DESC_COMMAND_CONFIG_REMOVE_TUNNEL,
6
+ ERR_TUNNEL_NOT_FOUND,
7
+ OPTION_NAME,
8
+ TXT_TUNNEL_REMOVED
9
+ } = require('../../../texts.js');
10
+
11
+ const commandConfigRemoveTunnel = new Command('tunnel');
12
+ commandConfigRemoveTunnel.description(DESC_COMMAND_CONFIG_REMOVE_TUNNEL);
13
+ commandConfigRemoveTunnel.argument('<name>', OPTION_NAME);
14
+ commandConfigRemoveTunnel.action((name) => {
15
+ if (!Cfg.hasTunnel(name)) {
16
+ Output.exitError(ERR_TUNNEL_NOT_FOUND(name));
17
+ }
18
+ Cfg.removeTunnel(name);
19
+ Output.exitSuccess(TXT_TUNNEL_REMOVED);
20
+ });
21
+
22
+ module.exports = commandConfigRemoveTunnel;
@@ -0,0 +1,9 @@
1
+ const { Command } = require('commander');
2
+ const commandConfigRemoveTunnel = require('./remove/tunnel.js');
3
+ const { DESC_COMMAND_CONFIG_REMOVE } = require('../../texts.js');
4
+
5
+ const commandConfigRemove = new Command('rm');
6
+ commandConfigRemove.description(DESC_COMMAND_CONFIG_REMOVE);
7
+ commandConfigRemove.addCommand(commandConfigRemoveTunnel);
8
+
9
+ module.exports = commandConfigRemove;
@@ -0,0 +1,19 @@
1
+ const { Command } = require('commander');
2
+ const Cfg = require('../../../cfg.js');
3
+ const Output = require('../../../output.js');
4
+ const Input = require('../../../input.js');
5
+ const {
6
+ DESC_COMMAND_CONFIG_SET_REGION,
7
+ OPTION_DEFAULT_REGION,
8
+ TXT_REGION_SAVED
9
+ } = require('../../../texts.js');
10
+
11
+ const commandConfigSetRegion = new Command('region');
12
+ commandConfigSetRegion.description(DESC_COMMAND_CONFIG_SET_REGION);
13
+ commandConfigSetRegion.argument('<region>', OPTION_DEFAULT_REGION);
14
+ commandConfigSetRegion.action((region) => {
15
+ Cfg.setRegion(Input.region(region));
16
+ Output.exitSuccess(TXT_REGION_SAVED);
17
+ });
18
+
19
+ module.exports = commandConfigSetRegion;
@@ -0,0 +1,22 @@
1
+ const { Command } = require('commander');
2
+ const Output = require('../../../output.js');
3
+ const Cfg = require('../../../cfg.js');
4
+ const Input = require('../../../input.js');
5
+ const {
6
+ DEFAULT_TIMEOUT,
7
+ } = require('../../../utils.js');
8
+ const {
9
+ DESC_COMMAND_CONFIG_SET_TIMEOUT,
10
+ OPTION_TIMEOUT,
11
+ TXT_TIMEOUT_SAVED
12
+ } = require('../../../texts.js');
13
+
14
+ const commandConfigSetTimeout = new Command('timeout');
15
+ commandConfigSetTimeout.description(DESC_COMMAND_CONFIG_SET_TIMEOUT);
16
+ commandConfigSetTimeout.argument('[timeout]', OPTION_TIMEOUT, DEFAULT_TIMEOUT);
17
+ commandConfigSetTimeout.action((timeout) => {
18
+ Cfg.setTimeout(Input.timeout(timeout));
19
+ Output.exitSuccess(TXT_TIMEOUT_SAVED);
20
+ });
21
+
22
+ module.exports = commandConfigSetTimeout;
@@ -0,0 +1,18 @@
1
+ const { Command } = require('commander');
2
+ const Cfg = require('../../../cfg.js');
3
+ const Output = require('../../../output.js');
4
+ const {
5
+ DESC_COMMAND_CONFIG_SET_TOKEN,
6
+ OPTION_TOKEN,
7
+ TXT_TOKEN_SAVED
8
+ } = require('../../../texts.js');
9
+
10
+ const commandConfigSetToken = new Command('token');
11
+ commandConfigSetToken.description(DESC_COMMAND_CONFIG_SET_TOKEN);
12
+ commandConfigSetToken.argument('[token]', OPTION_TOKEN, '');
13
+ commandConfigSetToken.action((token) => {
14
+ Cfg.setToken(token);
15
+ Output.exitSuccess(TXT_TOKEN_SAVED);
16
+ });
17
+
18
+ module.exports = commandConfigSetToken;
@@ -0,0 +1,19 @@
1
+ const { Command } = require('commander');
2
+ const Cfg = require('../../../cfg.js');
3
+ const Output = require('../../../output.js');
4
+ const Input = require('../../../input.js');
5
+ const {
6
+ DESC_COMMAND_CONFIG_SET_WHITELIST,
7
+ OPTION_WHITELIST,
8
+ TXT_WHITELIST_SAVED
9
+ } = require('../../../texts.js');
10
+
11
+ const commandConfigSetWhitelist = new Command('whitelist');
12
+ commandConfigSetWhitelist.description(DESC_COMMAND_CONFIG_SET_WHITELIST);
13
+ commandConfigSetWhitelist.argument('[cidrs...]', OPTION_WHITELIST, []);
14
+ commandConfigSetWhitelist.action((whitelist) => {
15
+ Cfg.setWhitelist(Input.whitelist(whitelist));
16
+ Output.exitSuccess(TXT_WHITELIST_SAVED);
17
+ });
18
+
19
+ module.exports = commandConfigSetWhitelist;
@@ -0,0 +1,15 @@
1
+ const { Command } = require('commander');
2
+ const commandConfigSetToken = require('./set/token.js');
3
+ const commandConfigSetRegion = require('./set/region.js');
4
+ const commandConfigSetWhitelist = require('./set/whitelist.js');
5
+ const commandConfigSetTimeout = require('./set/timeout.js');
6
+ const { DESC_COMMAND_CONFIG_SET } = require('../../texts.js');
7
+
8
+ const commandConfigSet = new Command('set');
9
+ commandConfigSet.description(DESC_COMMAND_CONFIG_SET);
10
+ commandConfigSet.addCommand(commandConfigSetToken);
11
+ commandConfigSet.addCommand(commandConfigSetRegion);
12
+ commandConfigSet.addCommand(commandConfigSetWhitelist);
13
+ commandConfigSet.addCommand(commandConfigSetTimeout);
14
+
15
+ module.exports = commandConfigSet;
@@ -0,0 +1,15 @@
1
+ const { Command } = require('commander');
2
+ const commandConfigSet = require('./config/set.js');
3
+ const commandConfigGet = require('./config/get.js');
4
+ const commandConfigAdd = require('./config/add.js');
5
+ const commandConfigRemove = require('./config/remove.js');
6
+ const { DESC_COMMAND_CONFIG } = require('../texts.js');
7
+
8
+ const commandConfig = new Command('config');
9
+ commandConfig.description(DESC_COMMAND_CONFIG);
10
+ commandConfig.addCommand(commandConfigSet);
11
+ commandConfig.addCommand(commandConfigAdd);
12
+ commandConfig.addCommand(commandConfigGet);
13
+ commandConfig.addCommand(commandConfigRemove);
14
+
15
+ module.exports = commandConfig;
@@ -0,0 +1,34 @@
1
+ const { TUNNEL_HTTP } = require('../utils.js');
2
+ const Cfg = require('../cfg.js');
3
+ const Output = require('../output.js');
4
+ const {
5
+ DESC_COMMAND_HTTP,
6
+ OPTION_SERVE,
7
+ OPTION_TARGET,
8
+ OPTION_TOKEN,
9
+ TXT_OPENING_TUNNEL
10
+ } = require('../texts.js');
11
+ const ApiBuddy = require('../api/buddy.js');
12
+ const { getBasicCommandHttp } = require('../utils');
13
+
14
+ const commandHttp = getBasicCommandHttp();
15
+ commandHttp.description(DESC_COMMAND_HTTP);
16
+ commandHttp.option('-s, --serve <directory>', OPTION_SERVE);
17
+ commandHttp.option('--token <token>', OPTION_TOKEN);
18
+ commandHttp.argument('[protocol://host:port]', OPTION_TARGET);
19
+ commandHttp.action(async (target, options) => {
20
+ if (options.token) Cfg.setToken(options.token);
21
+ const myIp = await ApiBuddy.fetchMyIp();
22
+ const prepared = await Cfg.prepareTunnel(TUNNEL_HTTP, target, options, true, myIp);
23
+ await Output.spinner(TXT_OPENING_TUNNEL);
24
+ const agent = await ApiBuddy.register(false, Cfg.getTokenHost(), Cfg.getToken(), (region) => {
25
+ Cfg.setRegionIfNotSet(region);
26
+ });
27
+ await agent.start();
28
+ agent.startRefreshingConfiguration();
29
+ const tunnel = await ApiBuddy.addTunnel(agent.id, agent.host, agent.token, prepared);
30
+ agent.addTunnel(tunnel);
31
+ Output.tunnel(tunnel);
32
+ });
33
+
34
+ module.exports = commandHttp;
@@ -0,0 +1,47 @@
1
+ const {
2
+ getLatestVersion,
3
+ getVersion
4
+ } = require('../utils.js');
5
+ const Output = require('../output.js');
6
+ const AgentManager = require('../agent/manager.js');
7
+ const ApiAgent = require('../api/agent.js');
8
+ const { isDocker } = require('../utils');
9
+
10
+ const commandPre = async (_, command) => {
11
+ command.agentStatus = null;
12
+ try {
13
+ if (!isDocker()) {
14
+ const isEnabled = await AgentManager.system.isEnabled();
15
+ if (isEnabled) {
16
+ const json = AgentManager.system.loadSystemConfig();
17
+ const api = new ApiAgent(json.port);
18
+ command.agentStatus = await api.fetchStatus();
19
+ }
20
+ }
21
+ } catch {
22
+ // do nothing
23
+ }
24
+ command.currentVersion = getVersion();
25
+ try {
26
+ command.latestVersion = await getLatestVersion();
27
+ } catch {
28
+ // do nothing
29
+ return;
30
+ }
31
+ if (command.hideVersionUpdate) {
32
+ return;
33
+ }
34
+ const newCli = command.currentVersion !== command.latestVersion;
35
+ const newAgent = command.agentStatus && command.agentStatus.version !== command.latestVersion;
36
+ if (isDocker() && newCli) {
37
+ Output.newCliDockerVersion(command.latestVersion);
38
+ } else if (newCli && newAgent) {
39
+ Output.newCliAgentVersion(command.latestVersion);
40
+ } else if (newCli) {
41
+ Output.newCliVersion(command.latestVersion);
42
+ } else if (newAgent) {
43
+ Output.newAgentVersion(command.latestVersion);
44
+ }
45
+ };
46
+
47
+ module.exports = commandPre;
@@ -0,0 +1,31 @@
1
+ const { Command } = require('commander');
2
+ const Cfg = require('../cfg.js');
3
+ const Output = require('../output.js');
4
+ const {
5
+ DESC_COMMAND_START,
6
+ ERR_TUNNEL_NOT_FOUND,
7
+ OPTION_NAME,
8
+ TXT_OPENING_TUNNEL
9
+ } = require('../texts.js');
10
+ const ApiBuddy = require('../api/buddy.js');
11
+
12
+ const commandStart = new Command('start');
13
+ commandStart.description(DESC_COMMAND_START);
14
+ commandStart.argument('<name>', OPTION_NAME);
15
+ commandStart.action(async (name) => {
16
+ if (!Cfg.hasTunnel(name)) {
17
+ Output.exitError(ERR_TUNNEL_NOT_FOUND(name));
18
+ }
19
+ const prepared = Cfg.getTunnel(name);
20
+ await Output.spinner(TXT_OPENING_TUNNEL);
21
+ const agent = await ApiBuddy.register(false, Cfg.getTokenHost(), Cfg.getToken(), (region) => {
22
+ Cfg.setRegionIfNotSet(region);
23
+ });
24
+ await agent.start();
25
+ agent.startRefreshingConfiguration();
26
+ const tunnel = await ApiBuddy.addTunnel(agent.id, agent.host, agent.token, prepared);
27
+ agent.addTunnel(tunnel);
28
+ Output.tunnel(tunnel);
29
+ });
30
+
31
+ module.exports = commandStart;
@@ -0,0 +1,32 @@
1
+ const { TUNNEL_TCP } = require('../utils.js');
2
+ const Cfg = require('../cfg.js');
3
+ const Output = require('../output.js');
4
+ const {
5
+ DESC_COMMAND_TCP,
6
+ OPTION_TARGET,
7
+ OPTION_TOKEN,
8
+ TXT_OPENING_TUNNEL
9
+ } = require('../texts.js');
10
+ const ApiBuddy = require('../api/buddy.js');
11
+ const { getBasicCommandTcp } = require('../utils');
12
+
13
+ const commandTcp = getBasicCommandTcp();
14
+ commandTcp.description(DESC_COMMAND_TCP);
15
+ commandTcp.option('--token <token>', OPTION_TOKEN);
16
+ commandTcp.argument('[host:port]', OPTION_TARGET);
17
+ commandTcp.action(async (target, options) => {
18
+ if (options.token) Cfg.setToken(options.token);
19
+ const myIp = await ApiBuddy.fetchMyIp();
20
+ const prepared = await Cfg.prepareTunnel(TUNNEL_TCP, target, options, true, myIp);
21
+ await Output.spinner(TXT_OPENING_TUNNEL);
22
+ const agent = await ApiBuddy.register(false, Cfg.getTokenHost(), Cfg.getToken(), (region) => {
23
+ Cfg.setRegionIfNotSet(region);
24
+ });
25
+ await agent.start();
26
+ agent.startRefreshingConfiguration();
27
+ const tunnel = await ApiBuddy.addTunnel(agent.id, agent.host, agent.token, prepared);
28
+ agent.addTunnel(tunnel);
29
+ Output.tunnel(tunnel);
30
+ });
31
+
32
+ module.exports = commandTcp;
@@ -0,0 +1,32 @@
1
+ const { TUNNEL_TLS } = require('../utils.js');
2
+ const Cfg = require('../cfg.js');
3
+ const Output = require('../output.js');
4
+ const {
5
+ DESC_COMMAND_TLS,
6
+ OPTION_TARGET,
7
+ OPTION_TOKEN,
8
+ TXT_OPENING_TUNNEL
9
+ } = require('../texts.js');
10
+ const ApiBuddy = require('../api/buddy.js');
11
+ const { getBasicCommandTls } = require('../utils');
12
+
13
+ const commandTls = getBasicCommandTls();
14
+ commandTls.description(DESC_COMMAND_TLS);
15
+ commandTls.option('--token <token>', OPTION_TOKEN);
16
+ commandTls.argument('[host:port]', OPTION_TARGET);
17
+ commandTls.action(async (target, options) => {
18
+ if (options.token) Cfg.setToken(options.token);
19
+ const myIp = await ApiBuddy.fetchMyIp();
20
+ const prepared = await Cfg.prepareTunnel(TUNNEL_TLS, target, options, true, myIp);
21
+ await Output.spinner(TXT_OPENING_TUNNEL);
22
+ const agent = await ApiBuddy.register(false, Cfg.getTokenHost(), Cfg.getToken(), (region) => {
23
+ Cfg.setRegionIfNotSet(region);
24
+ });
25
+ await agent.start();
26
+ agent.startRefreshingConfiguration();
27
+ const tunnel = await ApiBuddy.addTunnel(agent.id, agent.host, agent.token, prepared);
28
+ agent.addTunnel(tunnel);
29
+ Output.tunnel(tunnel);
30
+ });
31
+
32
+ module.exports = commandTls;
@@ -0,0 +1,10 @@
1
+ const { Command } = require('commander');
2
+ const { getVersion } = require('../utils.js');
3
+ const Output = require('../output.js');
4
+
5
+ const commandVersion = new Command('version');
6
+ commandVersion.action(() => {
7
+ Output.exitNormal(getVersion());
8
+ });
9
+
10
+ module.exports = commandVersion;