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,17 @@
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 output_js_1 = __importDefault(require("../../../output.js"));
7
+ const cfg_js_1 = __importDefault(require("../../../cfg.js"));
8
+ const input_js_1 = __importDefault(require("../../../input.js"));
9
+ const utils_js_1 = require("../../../utils.js");
10
+ const texts_js_1 = require("../../../texts.js");
11
+ const commandConfigSetTimeout = (0, utils_js_1.newCommand)('timeout', texts_js_1.DESC_COMMAND_CONFIG_SET_TIMEOUT);
12
+ commandConfigSetTimeout.argument('[timeout]', texts_js_1.OPTION_TIMEOUT, utils_js_1.DEFAULT_TIMEOUT);
13
+ commandConfigSetTimeout.action((timeout) => {
14
+ cfg_js_1.default.setTimeout(input_js_1.default.timeout(timeout));
15
+ output_js_1.default.exitSuccess(texts_js_1.TXT_TIMEOUT_SAVED);
16
+ });
17
+ exports.default = commandConfigSetTimeout;
@@ -0,0 +1,16 @@
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 cfg_js_1 = __importDefault(require("../../../cfg.js"));
7
+ const output_js_1 = __importDefault(require("../../../output.js"));
8
+ const texts_js_1 = require("../../../texts.js");
9
+ const utils_1 = require("../../../utils");
10
+ const commandConfigSetToken = (0, utils_1.newCommand)('token', texts_js_1.DESC_COMMAND_CONFIG_SET_TOKEN);
11
+ commandConfigSetToken.argument('[token]', texts_js_1.OPTION_TOKEN, '');
12
+ commandConfigSetToken.action((token) => {
13
+ cfg_js_1.default.setToken(token);
14
+ output_js_1.default.exitSuccess(!token ? texts_js_1.TXT_TOKEN_REMOVED : texts_js_1.TXT_TOKEN_SAVED);
15
+ });
16
+ exports.default = commandConfigSetToken;
@@ -0,0 +1,17 @@
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 cfg_js_1 = __importDefault(require("../../../cfg.js"));
7
+ const output_js_1 = __importDefault(require("../../../output.js"));
8
+ const input_js_1 = __importDefault(require("../../../input.js"));
9
+ const texts_js_1 = require("../../../texts.js");
10
+ const utils_1 = require("../../../utils");
11
+ const commandConfigSetWhitelist = (0, utils_1.newCommand)('whitelist', texts_js_1.DESC_COMMAND_CONFIG_SET_WHITELIST);
12
+ commandConfigSetWhitelist.argument('[cidrs...]', texts_js_1.OPTION_WHITELIST, []);
13
+ commandConfigSetWhitelist.action((whitelist) => {
14
+ cfg_js_1.default.setWhitelist(input_js_1.default.whitelist(whitelist));
15
+ output_js_1.default.exitSuccess(texts_js_1.TXT_WHITELIST_SAVED);
16
+ });
17
+ exports.default = commandConfigSetWhitelist;
@@ -0,0 +1,17 @@
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 token_js_1 = __importDefault(require("./set/token.js"));
7
+ const region_js_1 = __importDefault(require("./set/region.js"));
8
+ const whitelist_js_1 = __importDefault(require("./set/whitelist.js"));
9
+ const timeout_js_1 = __importDefault(require("./set/timeout.js"));
10
+ const texts_js_1 = require("../../texts.js");
11
+ const utils_1 = require("../../utils");
12
+ const commandConfigSet = (0, utils_1.newCommand)('set', texts_js_1.DESC_COMMAND_CONFIG_SET);
13
+ commandConfigSet.addCommand(token_js_1.default);
14
+ commandConfigSet.addCommand(region_js_1.default);
15
+ commandConfigSet.addCommand(whitelist_js_1.default);
16
+ commandConfigSet.addCommand(timeout_js_1.default);
17
+ exports.default = commandConfigSet;
@@ -0,0 +1,17 @@
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 set_js_1 = __importDefault(require("./config/set.js"));
7
+ const get_js_1 = __importDefault(require("./config/get.js"));
8
+ const add_js_1 = __importDefault(require("./config/add.js"));
9
+ const remove_js_1 = __importDefault(require("./config/remove.js"));
10
+ const texts_js_1 = require("../texts.js");
11
+ const utils_1 = require("../utils");
12
+ const commandConfig = (0, utils_1.newCommand)('config', texts_js_1.DESC_COMMAND_CONFIG);
13
+ commandConfig.addCommand(set_js_1.default);
14
+ commandConfig.addCommand(add_js_1.default);
15
+ commandConfig.addCommand(get_js_1.default);
16
+ commandConfig.addCommand(remove_js_1.default);
17
+ exports.default = commandConfig;
@@ -0,0 +1,30 @@
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 utils_js_1 = require("../utils.js");
7
+ const cfg_js_1 = __importDefault(require("../cfg.js"));
8
+ const output_js_1 = __importDefault(require("../output.js"));
9
+ const texts_js_1 = require("../texts.js");
10
+ const buddy_js_1 = __importDefault(require("../api/buddy.js"));
11
+ const commandHttp = (0, utils_js_1.getBasicCommandHttp)();
12
+ commandHttp.description(texts_js_1.DESC_COMMAND_HTTP);
13
+ commandHttp.option('-s, --serve <directory>', texts_js_1.OPTION_SERVE);
14
+ commandHttp.option('--token <token>', texts_js_1.OPTION_TOKEN);
15
+ commandHttp.argument('[protocol://host:port]', texts_js_1.OPTION_TARGET);
16
+ commandHttp.action(async (target, options) => {
17
+ if (options.token)
18
+ cfg_js_1.default.setToken(options.token);
19
+ const prepared = await cfg_js_1.default.prepareTunnel(utils_js_1.TUNNEL_HTTP, target, options, true);
20
+ await output_js_1.default.spinner(texts_js_1.TXT_OPENING_TUNNEL);
21
+ const agent = await buddy_js_1.default.register(false, cfg_js_1.default.getTokenHost(), cfg_js_1.default.getToken(), (region) => {
22
+ cfg_js_1.default.setRegionIfNotSet(region);
23
+ });
24
+ await agent.start();
25
+ agent.startRefreshingConfiguration();
26
+ const tunnel = await buddy_js_1.default.addTunnel(agent.id, agent.host, agent.token, prepared);
27
+ agent.addTunnel(tunnel);
28
+ output_js_1.default.tunnel(tunnel);
29
+ });
30
+ exports.default = commandHttp;
@@ -0,0 +1,49 @@
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 utils_js_1 = require("../utils.js");
7
+ const output_js_1 = __importDefault(require("../output.js"));
8
+ const manager_js_1 = __importDefault(require("../agent/manager.js"));
9
+ const agent_js_1 = __importDefault(require("../api/agent.js"));
10
+ const commandPre = async (_, command) => {
11
+ command.agentStatus = null;
12
+ try {
13
+ if (!(0, utils_js_1.isDocker)()) {
14
+ const isEnabled = await manager_js_1.default.system.isEnabled();
15
+ if (isEnabled) {
16
+ const json = manager_js_1.default.system.loadSystemConfig();
17
+ const api = new agent_js_1.default(json.port);
18
+ command.agentStatus = await api.fetchStatus();
19
+ }
20
+ }
21
+ }
22
+ catch {
23
+ // do nothing
24
+ }
25
+ command.currentVersion = (0, utils_js_1.getVersion)();
26
+ try {
27
+ command.latestVersion = await (0, utils_js_1.getLatestVersion)();
28
+ }
29
+ catch {
30
+ // do nothing
31
+ return;
32
+ }
33
+ if (command.hideVersionUpdate) {
34
+ return;
35
+ }
36
+ const newCli = command.currentVersion !== command.latestVersion;
37
+ const newAgent = command.agentStatus &&
38
+ command.agentStatus.version !== command.latestVersion;
39
+ if ((0, utils_js_1.isDocker)() && newCli) {
40
+ output_js_1.default.newCliDockerVersion(command.latestVersion);
41
+ }
42
+ else if (newCli) {
43
+ output_js_1.default.newCliVersion(command.latestVersion);
44
+ }
45
+ else if (newAgent) {
46
+ output_js_1.default.newAgentVersion(command.latestVersion);
47
+ }
48
+ };
49
+ exports.default = commandPre;
@@ -0,0 +1,28 @@
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 cfg_js_1 = __importDefault(require("../cfg.js"));
7
+ const output_js_1 = __importDefault(require("../output.js"));
8
+ const texts_js_1 = require("../texts.js");
9
+ const buddy_js_1 = __importDefault(require("../api/buddy.js"));
10
+ const utils_1 = require("../utils");
11
+ const commandStart = (0, utils_1.newCommand)('start', texts_js_1.DESC_COMMAND_START);
12
+ commandStart.argument('<name>', texts_js_1.OPTION_NAME);
13
+ commandStart.action(async (name) => {
14
+ if (!cfg_js_1.default.hasTunnel(name)) {
15
+ output_js_1.default.exitError((0, texts_js_1.ERR_TUNNEL_NOT_FOUND)(name));
16
+ }
17
+ const prepared = cfg_js_1.default.getTunnel(name);
18
+ await output_js_1.default.spinner(texts_js_1.TXT_OPENING_TUNNEL);
19
+ const agent = await buddy_js_1.default.register(false, cfg_js_1.default.getTokenHost(), cfg_js_1.default.getToken(), (region) => {
20
+ cfg_js_1.default.setRegionIfNotSet(region);
21
+ });
22
+ await agent.start();
23
+ agent.startRefreshingConfiguration();
24
+ const tunnel = await buddy_js_1.default.addTunnel(agent.id, agent.host, agent.token, prepared);
25
+ agent.addTunnel(tunnel);
26
+ output_js_1.default.tunnel(tunnel);
27
+ });
28
+ exports.default = commandStart;
@@ -0,0 +1,30 @@
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 utils_js_1 = require("../utils.js");
7
+ const cfg_js_1 = __importDefault(require("../cfg.js"));
8
+ const output_js_1 = __importDefault(require("../output.js"));
9
+ const texts_js_1 = require("../texts.js");
10
+ const utils_1 = require("../utils");
11
+ const buddy_js_1 = __importDefault(require("../api/buddy.js"));
12
+ const commandTcp = (0, utils_1.getBasicCommandTcp)();
13
+ commandTcp.description(texts_js_1.DESC_COMMAND_TCP);
14
+ commandTcp.option('--token <token>', texts_js_1.OPTION_TOKEN);
15
+ commandTcp.argument('[host:port]', texts_js_1.OPTION_TARGET);
16
+ commandTcp.action(async (target, options) => {
17
+ if (options.token)
18
+ cfg_js_1.default.setToken(options.token);
19
+ const prepared = await cfg_js_1.default.prepareTunnel(utils_js_1.TUNNEL_TCP, target, options, true);
20
+ await output_js_1.default.spinner(texts_js_1.TXT_OPENING_TUNNEL);
21
+ const agent = await buddy_js_1.default.register(false, cfg_js_1.default.getTokenHost(), cfg_js_1.default.getToken(), (region) => {
22
+ cfg_js_1.default.setRegionIfNotSet(region);
23
+ });
24
+ await agent.start();
25
+ agent.startRefreshingConfiguration();
26
+ const tunnel = await buddy_js_1.default.addTunnel(agent.id, agent.host, agent.token, prepared);
27
+ agent.addTunnel(tunnel);
28
+ output_js_1.default.tunnel(tunnel);
29
+ });
30
+ exports.default = commandTcp;
@@ -0,0 +1,30 @@
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 utils_js_1 = require("../utils.js");
7
+ const cfg_js_1 = __importDefault(require("../cfg.js"));
8
+ const output_js_1 = __importDefault(require("../output.js"));
9
+ const texts_js_1 = require("../texts.js");
10
+ const utils_1 = require("../utils");
11
+ const buddy_js_1 = __importDefault(require("../api/buddy.js"));
12
+ const commandTls = (0, utils_1.getBasicCommandTls)();
13
+ commandTls.description(texts_js_1.DESC_COMMAND_TLS);
14
+ commandTls.option('--token <token>', texts_js_1.OPTION_TOKEN);
15
+ commandTls.argument('[host:port]', texts_js_1.OPTION_TARGET);
16
+ commandTls.action(async (target, options) => {
17
+ if (options.token)
18
+ cfg_js_1.default.setToken(options.token);
19
+ const prepared = await cfg_js_1.default.prepareTunnel(utils_js_1.TUNNEL_TLS, target, options, true);
20
+ await output_js_1.default.spinner(texts_js_1.TXT_OPENING_TUNNEL);
21
+ const agent = await buddy_js_1.default.register(false, cfg_js_1.default.getTokenHost(), cfg_js_1.default.getToken(), (region) => {
22
+ cfg_js_1.default.setRegionIfNotSet(region);
23
+ });
24
+ await agent.start();
25
+ agent.startRefreshingConfiguration();
26
+ const tunnel = await buddy_js_1.default.addTunnel(agent.id, agent.host, agent.token, prepared);
27
+ agent.addTunnel(tunnel);
28
+ output_js_1.default.tunnel(tunnel);
29
+ });
30
+ exports.default = commandTls;
@@ -0,0 +1,13 @@
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 utils_js_1 = require("../utils.js");
7
+ const output_js_1 = __importDefault(require("../output.js"));
8
+ const utils_1 = require("../utils");
9
+ const commandVersion = (0, utils_1.newCommand)('version');
10
+ commandVersion.action(() => {
11
+ output_js_1.default.exitNormal((0, utils_js_1.getVersion)());
12
+ });
13
+ exports.default = commandVersion;
@@ -0,0 +1,28 @@
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 utils_1 = require("../../utils");
7
+ const texts_js_1 = require("../../texts.js");
8
+ const validation_1 = require("../../visualTest/validation");
9
+ const requests_1 = require("../../visualTest/requests");
10
+ const output_1 = __importDefault(require("../../output"));
11
+ const commandVtClose = (0, utils_1.newCommand)('close', texts_js_1.DESC_COMMAND_VT_CLOSE);
12
+ commandVtClose.action(async () => {
13
+ if (!(0, validation_1.checkToken)()) {
14
+ output_1.default.exitError(texts_js_1.ERR_MISSING_TOKEN);
15
+ }
16
+ if (!(0, validation_1.checkBuildId)()) {
17
+ output_1.default.exitError(texts_js_1.ERR_MISSING_BUILD_ID);
18
+ }
19
+ try {
20
+ const response = await (0, requests_1.closeSession)();
21
+ // todo: add types of response
22
+ output_1.default.exitNormal(response);
23
+ }
24
+ catch (error) {
25
+ output_1.default.exitError(`${error}`);
26
+ }
27
+ });
28
+ exports.default = commandVtClose;
@@ -0,0 +1,79 @@
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 utils_1 = require("../../utils");
7
+ const texts_js_1 = require("../../texts.js");
8
+ const validation_1 = require("../../visualTest/validation");
9
+ const requests_1 = require("../../visualTest/requests");
10
+ const output_1 = __importDefault(require("../../output"));
11
+ const context_1 = require("../../visualTest/context");
12
+ const server_1 = require("../../visualTest/server");
13
+ const which_1 = __importDefault(require("which"));
14
+ const snapshots_1 = require("../../visualTest/snapshots");
15
+ const ci_1 = require("../../visualTest/ci");
16
+ const exec_1 = require("../../visualTest/exec");
17
+ const browser_1 = require("../../visualTest/browser");
18
+ const commandVtExec = (0, utils_1.newCommand)('exec', texts_js_1.DESC_COMMAND_VT_EXEC);
19
+ commandVtExec.argument('<command>', texts_js_1.OPTION_EXEC_COMMAND);
20
+ commandVtExec.option('--skipDiscovery', texts_js_1.OPTION_EXEC_SKIP_DISCOVERY);
21
+ commandVtExec.option('--oneByOne', texts_js_1.OPTION_EXEC_ONE_BY_ONE);
22
+ commandVtExec.option('--parallel', texts_js_1.OPTION_EXEC_PARALLEL);
23
+ commandVtExec.action(async (command, options) => {
24
+ output_1.default.normal(JSON.stringify({ command, options }));
25
+ (0, context_1.setOptions)(options);
26
+ try {
27
+ const browserPath = await (0, browser_1.getBrowserPath)();
28
+ (0, context_1.setBrowserPath)(browserPath);
29
+ }
30
+ catch (error) {
31
+ output_1.default.exitError(`${error}`);
32
+ }
33
+ if (!(0, validation_1.checkToken)()) {
34
+ output_1.default.exitError(texts_js_1.ERR_MISSING_TOKEN);
35
+ }
36
+ if (!(0, validation_1.checkParallel)()) {
37
+ output_1.default.exitError(texts_js_1.ERR_MISSING_BUILD_ID);
38
+ }
39
+ const app = await (0, server_1.createServer)();
40
+ const [mainCommand, ...mainCommandArguments] = command.split(' ');
41
+ output_1.default.normal((0, texts_js_1.LOG_RUNNING_EXEC_COMMAND)(`${mainCommand} ${[...mainCommandArguments].join(' ')}`));
42
+ const resolved = await (0, which_1.default)(mainCommand, { nothrow: true });
43
+ if (!resolved) {
44
+ output_1.default.exitError((0, texts_js_1.ERR_MISSING_EXEC_COMMAND)(`${mainCommand} ${[...mainCommandArguments].join(' ')}`));
45
+ }
46
+ try {
47
+ let t1, t11;
48
+ if (context_1.debug) {
49
+ t1 = performance.now();
50
+ }
51
+ const defaultSettings = await (0, requests_1.getDefaultSettings)();
52
+ (0, snapshots_1.setDefaultSettings)(defaultSettings);
53
+ const ciAndGitInfo = await (0, ci_1.getCiAndGitInfo)(defaultSettings.baseBranch);
54
+ (0, context_1.setCiAndCommitInfo)(ciAndGitInfo);
55
+ (0, ci_1.logCiInfo)(ciAndGitInfo);
56
+ if (context_1.debug) {
57
+ t11 = performance.now();
58
+ }
59
+ const spawnedProcessExitCode = await (0, exec_1.testExec)(mainCommand, [
60
+ ...mainCommandArguments,
61
+ ]);
62
+ if (context_1.debug && t11) {
63
+ const t22 = performance.now();
64
+ output_1.default.normal((0, texts_js_1.DEBUG_EXEC_TEST_COMMAND)(t22 - t11));
65
+ }
66
+ await app.close();
67
+ await (0, snapshots_1.finishProcessingSnapshots)(spawnedProcessExitCode);
68
+ if (context_1.debug && t1) {
69
+ const t2 = performance.now();
70
+ output_1.default.normal((0, texts_js_1.DEBUG_EXEC_COMMAND)(t2 - t1));
71
+ }
72
+ process.exit(spawnedProcessExitCode);
73
+ }
74
+ catch (error) {
75
+ await app.close();
76
+ output_1.default.exitError(`${error}`);
77
+ }
78
+ });
79
+ exports.default = commandVtExec;
@@ -0,0 +1,90 @@
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 utils_1 = require("../../utils");
7
+ const texts_js_1 = require("../../texts.js");
8
+ const validation_1 = require("../../visualTest/validation");
9
+ const requests_1 = require("../../visualTest/requests");
10
+ const output_1 = __importDefault(require("../../output"));
11
+ const snapshots_1 = require("../../visualTest/snapshots");
12
+ const ci_1 = require("../../visualTest/ci");
13
+ const context_1 = require("../../visualTest/context");
14
+ const node_fs_1 = require("node:fs");
15
+ const node_path_1 = __importDefault(require("node:path"));
16
+ const commandVtStorybook = (0, utils_1.newCommand)('storybook', texts_js_1.DESC_COMMAND_VT_STORYBOOK);
17
+ commandVtStorybook.action(async () => {
18
+ if (!(0, validation_1.checkToken)()) {
19
+ output_1.default.exitError(texts_js_1.ERR_MISSING_TOKEN);
20
+ }
21
+ const currentDirectoryFiles = getCurrentDirectoryFiles();
22
+ if (!isStorybookDirectory(currentDirectoryFiles)) {
23
+ output_1.default.exitError(texts_js_1.ERR_WRONG_STORYBOOK_DIRECTORY);
24
+ }
25
+ const storybookStoriesIndex = getStorybookStoriesIndex(currentDirectoryFiles);
26
+ const storiesList = getStoriesList(storybookStoriesIndex);
27
+ const storybookSnapshots = getStorybookSnapshots(storiesList);
28
+ const defaultSettings = await (0, requests_1.getDefaultSettings)();
29
+ (0, snapshots_1.setDefaultSettings)(defaultSettings);
30
+ const ciAndGitInfo = await (0, ci_1.getCiAndGitInfo)(defaultSettings.baseBranch);
31
+ (0, context_1.setCiAndCommitInfo)(ciAndGitInfo);
32
+ (0, ci_1.logCiInfo)(ciAndGitInfo);
33
+ try {
34
+ const response = await (0, requests_1.sendStorybook)(storybookSnapshots, currentDirectoryFiles);
35
+ output_1.default.exitSuccess(response);
36
+ }
37
+ catch (error) {
38
+ output_1.default.exitError(`${error}`);
39
+ }
40
+ });
41
+ function getCurrentDirectoryFiles() {
42
+ const cwd = process.cwd();
43
+ const filesAndDirectories = (0, node_fs_1.readdirSync)(cwd, {
44
+ encoding: 'utf8',
45
+ recursive: true,
46
+ });
47
+ return filesAndDirectories.filter((file) => {
48
+ const elementPath = node_path_1.default.join(cwd, file);
49
+ const stats = (0, node_fs_1.statSync)(elementPath);
50
+ return stats.isFile();
51
+ });
52
+ }
53
+ function isStorybookDirectory(files) {
54
+ return (files.length > 0 &&
55
+ files.includes('index.html') &&
56
+ files.includes('iframe.html'));
57
+ }
58
+ function getStorybookStoriesIndex(files) {
59
+ const indexFiles = files.find((file) => file === 'index.json');
60
+ if (indexFiles) {
61
+ return indexFiles;
62
+ }
63
+ else {
64
+ return output_1.default.exitError(texts_js_1.ERR_MISSING_STORYBOOK_INDEX_FILE);
65
+ }
66
+ }
67
+ function getStoriesList(storybookStoriesIndex) {
68
+ const storiesListFile = (0, node_fs_1.readFileSync)(storybookStoriesIndex);
69
+ try {
70
+ const json = JSON.parse(storiesListFile.toString());
71
+ if (![4, 5].includes(json.v)) {
72
+ output_1.default.exitError(texts_js_1.ERR_UNSUPPORTED_STORYBOOK);
73
+ }
74
+ return json;
75
+ }
76
+ catch {
77
+ output_1.default.exitError(texts_js_1.ERR_PARSING_STORIES);
78
+ }
79
+ }
80
+ function getStorybookSnapshots(storiesList) {
81
+ const stories = Object.entries(storiesList.entries)
82
+ .filter(([, value]) => value.type === 'story')
83
+ .map(([key, value]) => ({
84
+ id: key,
85
+ name: `${value.title}/${value.name}`,
86
+ }));
87
+ output_1.default.normal((0, texts_js_1.TXT_STORIES_AMOUNT)(stories.length));
88
+ return stories;
89
+ }
90
+ exports.default = commandVtStorybook;
@@ -0,0 +1,15 @@
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 utils_1 = require("../utils");
8
+ const close_1 = __importDefault(require("./vt/close"));
9
+ const storybook_1 = __importDefault(require("./vt/storybook"));
10
+ const exec_1 = __importDefault(require("./vt/exec"));
11
+ const commandVt = (0, utils_1.newCommand)('vt', texts_js_1.DESC_COMMAND_VT);
12
+ commandVt.addCommand(close_1.default);
13
+ commandVt.addCommand(storybook_1.default);
14
+ commandVt.addCommand(exec_1.default);
15
+ exports.default = commandVt;
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("./utils");
4
+ class Format {
5
+ static date() {
6
+ const dt = new Date();
7
+ return dt.toISOString();
8
+ }
9
+ static token(token) {
10
+ if (!token || token.length < 6)
11
+ return 'Not provided';
12
+ return token.substring(0, 3) + '...' + token.substring(token.length - 3);
13
+ }
14
+ static region(region) {
15
+ if (!region)
16
+ return 'Autodetect';
17
+ return region.toUpperCase();
18
+ }
19
+ static timeout(timeout) {
20
+ if (timeout === 1)
21
+ return '1 second';
22
+ return `${timeout} seconds`;
23
+ }
24
+ static tunnelTimeout(timeout) {
25
+ if (!timeout)
26
+ return 'Default';
27
+ return this.timeout(timeout);
28
+ }
29
+ static whitelist(whitelist) {
30
+ if (!whitelist || !whitelist.length)
31
+ return 'Everyone';
32
+ if (whitelist.includes('*'))
33
+ return 'Everyone';
34
+ return whitelist.join('\n');
35
+ }
36
+ static tunnelWhitelist(whitelist) {
37
+ if (!whitelist)
38
+ return 'Default';
39
+ return this.whitelist(whitelist);
40
+ }
41
+ static tunnelHeaders(headers) {
42
+ if (!headers || !headers.length)
43
+ return 'Not set';
44
+ return headers.map((h) => `${h.name}: ${h.value}`).join('\n');
45
+ }
46
+ static tunnelCircuitBreaker(cb) {
47
+ if (cb === undefined || cb === null)
48
+ return 'Not set';
49
+ return String(cb);
50
+ }
51
+ static tunnelUserAgent(userAgents) {
52
+ if (!userAgents || !userAgents.length)
53
+ return 'Everyone';
54
+ return userAgents.join('\n');
55
+ }
56
+ static tunnelDomain(domain) {
57
+ if (!domain)
58
+ return 'Default';
59
+ return domain;
60
+ }
61
+ static type(type) {
62
+ return type.toUpperCase();
63
+ }
64
+ static tunnelRegion(region) {
65
+ if (!region)
66
+ return 'Default';
67
+ return this.region(region);
68
+ }
69
+ static identify(identifyType) {
70
+ if (identifyType === utils_1.TUNNEL_IDENTIFIED_HTTP1)
71
+ return 'Ver. 1.1';
72
+ return 'Ver. 2';
73
+ }
74
+ static terminate(terminate) {
75
+ if (terminate === utils_1.TLS_TERMINATE_AT_AGENT)
76
+ return 'AGENT';
77
+ if (terminate === utils_1.TLS_TERMINATE_AT_REGION)
78
+ return 'REGION';
79
+ return 'TARGET';
80
+ }
81
+ static serve(serve) {
82
+ return serve;
83
+ }
84
+ static hostHeader(host) {
85
+ if (!host)
86
+ return 'Not set';
87
+ return host;
88
+ }
89
+ static basicAuth(login, pass) {
90
+ if (!login || !pass)
91
+ return 'Not set';
92
+ return `${login}:${pass}`;
93
+ }
94
+ static latency(latency) {
95
+ if (latency < 0)
96
+ return 'Unreachable';
97
+ if (latency < 1000)
98
+ return `${latency.toFixed(0)}ms`;
99
+ return `${(latency / 1000).toFixed(0)}s`;
100
+ }
101
+ static yesNo(val) {
102
+ if (!val)
103
+ return 'No';
104
+ return 'Yes';
105
+ }
106
+ static entryHost(tunnel) {
107
+ let host = '';
108
+ host += tunnel.subdomain;
109
+ host += '.';
110
+ // todo custom domain
111
+ host += tunnel.region.toLowerCase();
112
+ host += '-';
113
+ host += tunnel.sshId;
114
+ host += '.';
115
+ host += tunnel.domain;
116
+ return host;
117
+ }
118
+ static entry(tunnel) {
119
+ let entry = '';
120
+ if (tunnel.type === utils_1.TUNNEL_HTTP)
121
+ entry += 'https://';
122
+ entry += this.entryHost(tunnel);
123
+ if (tunnel.type === utils_1.TUNNEL_TCP)
124
+ entry += `:${tunnel.sshForwardPort}`;
125
+ else if (tunnel.type === utils_1.TUNNEL_TLS)
126
+ entry += ':443';
127
+ return entry;
128
+ }
129
+ static target(type, target) {
130
+ if (type === utils_1.TUNNEL_HTTP) {
131
+ let port = '80';
132
+ let host = 'localhost';
133
+ let proto = 'http';
134
+ let m = target.match(utils_1.TARGET_ONLY_PORT_REGEX);
135
+ if (m) {
136
+ port = m[0];
137
+ }
138
+ else {
139
+ m = target.match(utils_1.TARGET_HTTP_REGEX);
140
+ if (m) {
141
+ if (m[2])
142
+ proto = m[2];
143
+ if (m[4])
144
+ host = m[4];
145
+ if (m[6])
146
+ port = m[6];
147
+ else if (proto === 'https')
148
+ port = '443';
149
+ }
150
+ }
151
+ let t = `${proto}://${host}`;
152
+ if (proto === 'http' && port !== '80')
153
+ t += `:${port}`;
154
+ else if (proto === 'https' && port !== '443')
155
+ t += `:${port}`;
156
+ return t;
157
+ }
158
+ else {
159
+ let host = 'localhost';
160
+ let port = '80';
161
+ const m = target.match(utils_1.TARGET_TCP_TLS_REGEX);
162
+ if (m) {
163
+ if (m[3])
164
+ port = m[3];
165
+ if (m[2])
166
+ host = m[2];
167
+ }
168
+ return `${host}:${port}`;
169
+ }
170
+ }
171
+ }
172
+ exports.default = Format;