bdy 1.25.13-stage → 1.25.15-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/distTs/package.json +1 -1
- package/distTs/src/agent/manager.js +19 -6
- package/distTs/src/agent/system.js +9 -4
- package/distTs/src/api/client.js +20 -7
- package/distTs/src/cliCommand.js +17 -1
- package/distTs/src/cliIndex.js +12 -2
- package/distTs/src/command/agent/debug.js +4 -3
- package/distTs/src/command/agent/disable.js +4 -3
- package/distTs/src/command/agent/enable.js +4 -3
- package/distTs/src/command/agent/install.js +28 -12
- package/distTs/src/command/agent/proxy/disable.js +4 -3
- package/distTs/src/command/agent/proxy/enable.js +4 -3
- package/distTs/src/command/agent/proxy/status.js +1 -1
- package/distTs/src/command/agent/restart.js +13 -5
- package/distTs/src/command/agent/start.js +11 -4
- package/distTs/src/command/agent/status.js +1 -1
- package/distTs/src/command/agent/stop.js +5 -4
- package/distTs/src/command/agent/tags/get.js +1 -1
- package/distTs/src/command/agent/tags/set.js +4 -3
- package/distTs/src/command/agent/target/disable.js +4 -3
- package/distTs/src/command/agent/target/enable.js +4 -3
- package/distTs/src/command/agent/target/status.js +1 -1
- package/distTs/src/command/agent/tunnel/disable.js +4 -3
- package/distTs/src/command/agent/tunnel/enable.js +4 -3
- package/distTs/src/command/agent/tunnel/http.js +10 -2
- package/distTs/src/command/agent/tunnel/list.js +1 -1
- package/distTs/src/command/agent/tunnel/remove.js +4 -3
- package/distTs/src/command/agent/tunnel/start.js +9 -5
- package/distTs/src/command/agent/tunnel/status.js +1 -1
- package/distTs/src/command/agent/tunnel/tcp.js +10 -2
- package/distTs/src/command/agent/tunnel/tls.js +10 -2
- package/distTs/src/command/agent/uninstall.js +6 -4
- package/distTs/src/command/agent/update.js +13 -5
- package/distTs/src/command/agent/user.js +4 -3
- package/distTs/src/command/agent/version.js +1 -1
- package/distTs/src/command/api/info.js +5 -3
- package/distTs/src/command/api/list.js +1 -0
- package/distTs/src/command/artifact/composer/publish.js +21 -16
- package/distTs/src/command/artifact/delete.js +8 -5
- package/distTs/src/command/artifact/docker/login.js +22 -5
- package/distTs/src/command/artifact/download.js +16 -15
- package/distTs/src/command/artifact/get.js +3 -2
- package/distTs/src/command/artifact/open.js +3 -2
- package/distTs/src/command/artifact/publish.js +3 -2
- package/distTs/src/command/artifact/version/create.js +3 -2
- package/distTs/src/command/artifact/version/delete.js +9 -6
- package/distTs/src/command/artifact/version/get.js +4 -3
- package/distTs/src/command/artifact/version/list.js +3 -2
- package/distTs/src/command/artifact/version/open.js +7 -6
- package/distTs/src/command/config/add/http.js +3 -2
- package/distTs/src/command/config/add/tcp.js +3 -2
- package/distTs/src/command/config/add/tls.js +3 -2
- package/distTs/src/command/config/get/region.js +5 -2
- package/distTs/src/command/config/get/timeout.js +5 -2
- package/distTs/src/command/config/get/token.js +5 -2
- package/distTs/src/command/config/get/tunnel.js +3 -2
- package/distTs/src/command/config/get/tunnels.js +1 -1
- package/distTs/src/command/config/get/whitelist.js +5 -2
- package/distTs/src/command/config/remove/token.js +4 -3
- package/distTs/src/command/config/remove/tunnel.js +6 -4
- package/distTs/src/command/config/set/region.js +4 -3
- package/distTs/src/command/config/set/timeout.js +4 -3
- package/distTs/src/command/config/set/token.js +5 -3
- package/distTs/src/command/config/set/whitelist.js +4 -3
- package/distTs/src/command/crawl/link.js +10 -4
- package/distTs/src/command/crawl/run.js +30 -18
- package/distTs/src/command/distro/delete.js +8 -5
- package/distTs/src/command/distro/get.js +3 -2
- package/distTs/src/command/distro/open.js +3 -2
- package/distTs/src/command/distro/route/create.js +3 -2
- package/distTs/src/command/distro/route/delete.js +8 -5
- package/distTs/src/command/distro/route/get.js +3 -2
- package/distTs/src/command/distro/route/list.js +3 -2
- package/distTs/src/command/distro/route/open.js +3 -2
- package/distTs/src/command/distro/route/update.js +3 -2
- package/distTs/src/command/distro/update.js +3 -2
- package/distTs/src/command/domain/buy.js +36 -17
- package/distTs/src/command/domain/get.js +3 -2
- package/distTs/src/command/domain/list.js +1 -1
- package/distTs/src/command/domain/open.js +4 -2
- package/distTs/src/command/domain/search.js +1 -0
- package/distTs/src/command/environment/create.js +1 -1
- package/distTs/src/command/environment/delete.js +6 -4
- package/distTs/src/command/environment/get.js +1 -0
- package/distTs/src/command/environment/list.js +1 -1
- package/distTs/src/command/environment/open.js +3 -1
- package/distTs/src/command/environment/update.js +1 -1
- package/distTs/src/command/login.js +29 -17
- package/distTs/src/command/logout.js +4 -3
- package/distTs/src/command/pipeline/create.js +13 -3
- package/distTs/src/command/pipeline/delete.js +9 -6
- package/distTs/src/command/pipeline/get.js +4 -3
- package/distTs/src/command/pipeline/open.js +2 -1
- package/distTs/src/command/pipeline/run/execution.js +3 -3
- package/distTs/src/command/pipeline/run/list.js +4 -3
- package/distTs/src/command/pipeline/run/open.js +2 -1
- package/distTs/src/command/pipeline/update.js +4 -3
- package/distTs/src/command/pipeline/yaml.js +4 -3
- package/distTs/src/command/project/link.js +74 -36
- package/distTs/src/command/project/list.js +1 -0
- package/distTs/src/command/project/open.js +3 -1
- package/distTs/src/command/register.js +2 -1
- package/distTs/src/command/sandbox/app/add.js +1 -0
- package/distTs/src/command/sandbox/app/list.js +1 -1
- package/distTs/src/command/sandbox/app/logs.js +1 -1
- package/distTs/src/command/sandbox/app/remove.js +4 -3
- package/distTs/src/command/sandbox/app/start.js +4 -3
- package/distTs/src/command/sandbox/app/status.js +3 -2
- package/distTs/src/command/sandbox/app/stop.js +4 -3
- package/distTs/src/command/sandbox/cp.js +23 -23
- package/distTs/src/command/sandbox/create.js +3 -1
- package/distTs/src/command/sandbox/destroy.js +6 -4
- package/distTs/src/command/sandbox/endpoint/add.js +1 -1
- package/distTs/src/command/sandbox/endpoint/delete.js +9 -6
- package/distTs/src/command/sandbox/endpoint/get.js +3 -2
- package/distTs/src/command/sandbox/endpoint/list.js +1 -1
- package/distTs/src/command/sandbox/exec/command.js +1 -0
- package/distTs/src/command/sandbox/exec/kill.js +7 -5
- package/distTs/src/command/sandbox/exec/list.js +1 -1
- package/distTs/src/command/sandbox/exec/logs.js +1 -1
- package/distTs/src/command/sandbox/exec/status.js +1 -1
- package/distTs/src/command/sandbox/get.js +1 -1
- package/distTs/src/command/sandbox/list.js +1 -1
- package/distTs/src/command/sandbox/logs.js +1 -1
- package/distTs/src/command/sandbox/open.js +3 -1
- package/distTs/src/command/sandbox/restart.js +9 -4
- package/distTs/src/command/sandbox/snapshot/create.js +1 -1
- package/distTs/src/command/sandbox/snapshot/delete.js +8 -5
- package/distTs/src/command/sandbox/snapshot/get.js +3 -2
- package/distTs/src/command/sandbox/snapshot/list.js +1 -1
- package/distTs/src/command/sandbox/snapshot/open.js +4 -2
- package/distTs/src/command/sandbox/ssh.js +1 -0
- package/distTs/src/command/sandbox/start.js +9 -4
- package/distTs/src/command/sandbox/status.js +1 -1
- package/distTs/src/command/sandbox/stop.js +9 -4
- package/distTs/src/command/sandbox/update.js +12 -6
- package/distTs/src/command/sandbox/yaml.js +1 -1
- package/distTs/src/command/target/create.js +1 -0
- package/distTs/src/command/target/delete.js +6 -3
- package/distTs/src/command/target/exec/command.js +1 -1
- package/distTs/src/command/target/exec/kill.js +6 -4
- package/distTs/src/command/target/exec/list.js +1 -1
- package/distTs/src/command/target/exec/logs.js +1 -1
- package/distTs/src/command/target/exec/status.js +1 -1
- package/distTs/src/command/target/get.js +1 -0
- package/distTs/src/command/target/list.js +1 -0
- package/distTs/src/command/target/open.js +3 -1
- package/distTs/src/command/target/scope.js +4 -4
- package/distTs/src/command/target/update.js +1 -0
- package/distTs/src/command/tests/capture.js +10 -7
- package/distTs/src/command/tests/unit/link.js +10 -4
- package/distTs/src/command/tests/visual/link.js +10 -4
- package/distTs/src/command/tests/visual/session/close.js +8 -3
- package/distTs/src/command/tests/visual/setup.js +6 -3
- package/distTs/src/command/tests/visual/upload.js +11 -8
- package/distTs/src/command/tunnel/http.js +6 -2
- package/distTs/src/command/tunnel/start.js +8 -3
- package/distTs/src/command/tunnel/tcp.js +6 -3
- package/distTs/src/command/tunnel/tls.js +6 -3
- package/distTs/src/command/version.js +24 -2
- package/distTs/src/command/whoami.js +1 -1
- package/distTs/src/command/workspace/get.js +7 -2
- package/distTs/src/command/workspace/list.js +1 -1
- package/distTs/src/command/workspace/open.js +4 -2
- package/distTs/src/command/workspace/set.js +4 -3
- package/distTs/src/command/yaml/actions/info.js +1 -1
- package/distTs/src/command/yaml/actions/list.js +1 -1
- package/distTs/src/command/yaml/pipeline.js +1 -0
- package/distTs/src/command/yaml/validate.js +1 -0
- package/distTs/src/discovery.js +169 -50
- package/distTs/src/input.js +6 -6
- package/distTs/src/output.js +72 -33
- package/distTs/src/texts.js +103 -42
- package/distTs/src/tunnel/output/noninteractive/tunnelJsonl.js +62 -0
- package/distTs/src/utils.js +61 -50
- package/distTs/src/visualTest/browser.js +3 -2
- package/package.json +1 -1
|
@@ -8,10 +8,11 @@ const output_1 = __importDefault(require("../../../output"));
|
|
|
8
8
|
const input_1 = __importDefault(require("../../../input"));
|
|
9
9
|
const texts_1 = require("../../../texts");
|
|
10
10
|
const utils_1 = require("../../../utils");
|
|
11
|
-
const commandConfigSetWhitelist = (0, utils_1.newCommand)('whitelist', texts_1.DESC_COMMAND_CONFIG_SET_WHITELIST);
|
|
11
|
+
const commandConfigSetWhitelist = (0, utils_1.newCommand)('whitelist', texts_1.DESC_COMMAND_CONFIG_SET_WHITELIST, { requiredScopes: [] });
|
|
12
12
|
commandConfigSetWhitelist.argument('[cidrs...]', texts_1.OPTION_WHITELIST, []);
|
|
13
|
-
commandConfigSetWhitelist.
|
|
13
|
+
commandConfigSetWhitelist.option('--format <text|json>', texts_1.OPTION_FORMAT);
|
|
14
|
+
commandConfigSetWhitelist.action((whitelist, options) => {
|
|
14
15
|
cfg_1.default.setWhitelist(input_1.default.whitelist(whitelist));
|
|
15
|
-
output_1.default.
|
|
16
|
+
output_1.default.exitResult(options.format === 'json', { whitelist: cfg_1.default.getWhitelist().length ? cfg_1.default.getWhitelist() : null }, texts_1.TXT_WHITELIST_SAVED);
|
|
16
17
|
});
|
|
17
18
|
exports.default = commandConfigSetWhitelist;
|
|
@@ -7,15 +7,18 @@ const utils_1 = require("../../utils");
|
|
|
7
7
|
const texts_1 = require("../../texts");
|
|
8
8
|
const output_1 = __importDefault(require("../../output"));
|
|
9
9
|
const commandCrawlLink = (0, utils_1.newCommand)('link', texts_1.DESC_COMMAND_CRAWL_LINK, {
|
|
10
|
+
requiredScopes: [utils_1.REST_API_SCOPE.CRAWL_WRITE],
|
|
10
11
|
examples: texts_1.EXAMPLE_CRAWL_LINK,
|
|
11
12
|
});
|
|
12
13
|
commandCrawlLink.option('-w, --workspace <workspace>', texts_1.OPTION_REST_API_WORKSPACE);
|
|
13
14
|
commandCrawlLink.option('-p, --project <project>', texts_1.OPTION_REST_API_PROJECT);
|
|
14
15
|
commandCrawlLink.option('-s, --suite <suite>', texts_1.OPTION_SUITE_IDENTIFIER);
|
|
16
|
+
commandCrawlLink.option('--format <text|json>', texts_1.OPTION_FORMAT);
|
|
15
17
|
commandCrawlLink.action(async (options) => {
|
|
16
18
|
const Input = require('../../input').default;
|
|
17
19
|
const ProjectCfg = require('../../project/cfg').default;
|
|
18
20
|
output_1.default.handleSignals();
|
|
21
|
+
const json = options.format === 'json';
|
|
19
22
|
const workspace = Input.restApiWorkspace(options.workspace);
|
|
20
23
|
const project = Input.restApiProject(options.project);
|
|
21
24
|
const client = Input.restApiTokenClient(false, options.api, options.region);
|
|
@@ -36,8 +39,10 @@ commandCrawlLink.action(async (options) => {
|
|
|
36
39
|
if (opt === 'new') {
|
|
37
40
|
const name = await output_1.default.inputString(texts_1.TXT_COMMAND_SUITE_NAME);
|
|
38
41
|
const response = await client.createCrawlSuite(workspace, project, { name, identifier: name });
|
|
39
|
-
|
|
40
|
-
|
|
42
|
+
if (!json) {
|
|
43
|
+
output_1.default.okSign();
|
|
44
|
+
output_1.default.normal(texts_1.TXT_COMMAND_SUITE_CREATED);
|
|
45
|
+
}
|
|
41
46
|
suiteIdentifier = response.identifier;
|
|
42
47
|
}
|
|
43
48
|
else {
|
|
@@ -57,7 +62,8 @@ commandCrawlLink.action(async (options) => {
|
|
|
57
62
|
}
|
|
58
63
|
}
|
|
59
64
|
ProjectCfg.setSuite((0, utils_1.getWorkingDir)(), 'crawl', suiteIdentifier);
|
|
60
|
-
|
|
61
|
-
|
|
65
|
+
if (!json)
|
|
66
|
+
output_1.default.okSign();
|
|
67
|
+
output_1.default.exitResult(json, { suite: suiteIdentifier }, texts_1.TXT_COMMAND_CRAWL_LINK_SUCCESS);
|
|
62
68
|
});
|
|
63
69
|
exports.default = commandCrawlLink;
|
|
@@ -42,7 +42,10 @@ commandCrawlRun.option('--header <headers...>', texts_1.OPTION_COMPARE_HEADER);
|
|
|
42
42
|
commandCrawlRun.option('--localStorage <items...>', texts_1.OPTION_CRAWL_LOCAL_STORAGE);
|
|
43
43
|
commandCrawlRun.option('--delay <delays...>', texts_1.OPTION_CRAWL_DELAY);
|
|
44
44
|
commandCrawlRun.option('--outputDir <dir>', texts_1.OPTION_CRAWL_OUTPUT_DIR, '.');
|
|
45
|
+
commandCrawlRun.option('--format <text|json>', texts_1.OPTION_FORMAT);
|
|
45
46
|
commandCrawlRun.action(async (inputUrl, options) => {
|
|
47
|
+
const json = options.format === 'json';
|
|
48
|
+
const say = output_1.default.progress(json);
|
|
46
49
|
const { downloadCrawlPackage, sendCrawl } = require('../../crawl/requests');
|
|
47
50
|
const { createCrawlContext, applyToken, applyCiAndCommitInfo } = require('../../visualTest/context');
|
|
48
51
|
const { validateInputAndOptions } = require('./validation');
|
|
@@ -60,25 +63,26 @@ commandCrawlRun.action(async (inputUrl, options) => {
|
|
|
60
63
|
const ciAndGitInfo = await getCiAndGitInfo({});
|
|
61
64
|
applyCiAndCommitInfo(ctx, ciAndGitInfo);
|
|
62
65
|
const { buildId } = await sendCrawl(ctx, url, follow, respectRobots, outputTypes, colorScheme, browsers, devices, cookies, requestHeaders, delays, waitForSelectors, localStorage);
|
|
63
|
-
const status = await watchSessionStatus(ctx, buildId);
|
|
66
|
+
const status = await watchSessionStatus(ctx, buildId, json);
|
|
64
67
|
if (!status.ok) {
|
|
65
68
|
output_1.default.exitError(`Crawl session failed: ${status.error}`);
|
|
66
69
|
}
|
|
67
|
-
|
|
70
|
+
say('Downloading crawl package');
|
|
68
71
|
const crawlPackageStream = await downloadCrawlPackage(ctx, buildId);
|
|
69
72
|
const brotliDecompressor = (0, node_zlib_1.createBrotliDecompress)();
|
|
70
73
|
const unpack = tar.extract();
|
|
74
|
+
const preparedOutputDir = outputDir.startsWith('.')
|
|
75
|
+
? node_path_1.default.join(process.cwd(), outputDir)
|
|
76
|
+
: outputDir;
|
|
77
|
+
let files = 0;
|
|
71
78
|
unpack.on('entry', async (header, stream, next) => {
|
|
72
|
-
const currentDir = process.cwd();
|
|
73
|
-
const preparedOutputDir = outputDir.startsWith('.')
|
|
74
|
-
? node_path_1.default.join(currentDir, outputDir)
|
|
75
|
-
: outputDir;
|
|
76
79
|
const newFilePath = node_path_1.default.join(preparedOutputDir, header.name);
|
|
77
80
|
try {
|
|
78
81
|
if (header.type === 'file') {
|
|
79
82
|
await (0, promises_2.mkdir)(node_path_1.default.dirname(newFilePath), { recursive: true });
|
|
80
83
|
const fileWriteStream = (0, node_fs_1.createWriteStream)(newFilePath);
|
|
81
84
|
await (0, promises_1.pipeline)(stream, fileWriteStream);
|
|
85
|
+
files += 1;
|
|
82
86
|
next();
|
|
83
87
|
}
|
|
84
88
|
else {
|
|
@@ -87,43 +91,51 @@ commandCrawlRun.action(async (inputUrl, options) => {
|
|
|
87
91
|
}
|
|
88
92
|
}
|
|
89
93
|
catch (entryError) {
|
|
90
|
-
|
|
94
|
+
sayError(json, `Error processing entry ${header.name}: ${entryError}`);
|
|
91
95
|
next(entryError);
|
|
92
96
|
}
|
|
93
97
|
});
|
|
94
98
|
await (0, promises_1.pipeline)(crawlPackageStream, brotliDecompressor, unpack);
|
|
95
|
-
output_1.default.
|
|
99
|
+
output_1.default.exitResult(json, { build_id: buildId, output_dir: preparedOutputDir, files }, 'Downloading crawl package finished');
|
|
96
100
|
}
|
|
97
101
|
catch (error) {
|
|
98
102
|
output_1.default.exitError(`${error}`);
|
|
99
103
|
}
|
|
100
104
|
});
|
|
101
|
-
|
|
105
|
+
// with --format json session failures go to stderr, keeping stdout for the result
|
|
106
|
+
const sayError = (json, txt) => {
|
|
107
|
+
if (json)
|
|
108
|
+
output_1.default.noteWarning(txt);
|
|
109
|
+
else
|
|
110
|
+
output_1.default.error(txt);
|
|
111
|
+
};
|
|
112
|
+
async function watchSessionStatus(ctx, buildId, json) {
|
|
102
113
|
const { connectToCrawlSession } = require('../../crawl/requests');
|
|
114
|
+
const say = output_1.default.progress(json);
|
|
103
115
|
return new Promise((resolve) => {
|
|
104
116
|
const eventSource = connectToCrawlSession(ctx, buildId);
|
|
105
117
|
eventSource.addEventListener('SESSION_STATUS', (event) => {
|
|
106
118
|
const data = JSON.parse(event.data);
|
|
107
119
|
if (data.status === 'STARTED') {
|
|
108
|
-
|
|
120
|
+
say('Crawl session started');
|
|
109
121
|
}
|
|
110
122
|
else if (data.status === 'GATHER_URLS_COMPLETED') {
|
|
111
|
-
|
|
123
|
+
say(`Gathering URLs completed, found ${data.text} URLs`);
|
|
112
124
|
}
|
|
113
125
|
else if (data.status === 'GATHER_URLS_FAILED') {
|
|
114
|
-
|
|
126
|
+
sayError(json, 'Gathering URLs failed');
|
|
115
127
|
}
|
|
116
128
|
else if (data.status === 'CRAWL_URL_COMPLETED') {
|
|
117
|
-
|
|
129
|
+
say(`Crawling ${data.text} completed`);
|
|
118
130
|
}
|
|
119
131
|
else if (data.status === 'CRAWL_URL_FAILED') {
|
|
120
|
-
|
|
132
|
+
sayError(json, `Crawling ${data.text} failed`);
|
|
121
133
|
}
|
|
122
134
|
else if (data.status === 'CREATE_PACKAGE_COMPLETED') {
|
|
123
|
-
|
|
135
|
+
say('Package created');
|
|
124
136
|
}
|
|
125
137
|
else if (data.status === 'CREATE_PACKAGE_FAILED') {
|
|
126
|
-
|
|
138
|
+
sayError(json, 'Package creation failed');
|
|
127
139
|
}
|
|
128
140
|
else if (data.status === 'ERROR') {
|
|
129
141
|
eventSource.close();
|
|
@@ -131,7 +143,7 @@ async function watchSessionStatus(ctx, buildId) {
|
|
|
131
143
|
}
|
|
132
144
|
else if (data.status === 'FINISHED') {
|
|
133
145
|
eventSource.close();
|
|
134
|
-
|
|
146
|
+
say('Crawl session finished');
|
|
135
147
|
resolve({ ok: true });
|
|
136
148
|
}
|
|
137
149
|
});
|
|
@@ -139,7 +151,7 @@ async function watchSessionStatus(ctx, buildId) {
|
|
|
139
151
|
if (event.code) {
|
|
140
152
|
eventSource.close();
|
|
141
153
|
if (event.code === 410) {
|
|
142
|
-
|
|
154
|
+
say('Crawl session finished');
|
|
143
155
|
}
|
|
144
156
|
resolve({ ok: event.code === 410, error: event.code });
|
|
145
157
|
}
|
|
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const cliError_1 = __importDefault(require("../../cliError"));
|
|
6
7
|
const utils_1 = require("../../utils");
|
|
7
8
|
const texts_1 = require("../../texts");
|
|
8
9
|
const input_1 = __importDefault(require("../../input"));
|
|
@@ -17,6 +18,7 @@ commandDistroDelete.option('-w, --workspace <domain>', texts_1.OPTION_REST_API_W
|
|
|
17
18
|
commandDistroDelete.option('--scope <scope>', texts_1.OPT_COMMAND_SCOPE);
|
|
18
19
|
commandDistroDelete.option('-p, --project <name>', texts_1.OPTION_REST_API_PROJECT);
|
|
19
20
|
commandDistroDelete.option('-f, --force', texts_1.OPTION_CONFIRM_FORCE);
|
|
21
|
+
commandDistroDelete.option('--format <text|json>', texts_1.OPTION_FORMAT);
|
|
20
22
|
commandDistroDelete.argument('<identifier>', texts_1.OPT_COMMAND_DISTRO_IDENTIFIER);
|
|
21
23
|
commandDistroDelete.action(async (identifier, options) => {
|
|
22
24
|
const workspace = input_1.default.restApiWorkspace(options.workspace);
|
|
@@ -25,18 +27,19 @@ commandDistroDelete.action(async (identifier, options) => {
|
|
|
25
27
|
const client = input_1.default.restApiTokenClient();
|
|
26
28
|
const data = await client.getDistributionByIdentifier(workspace, scope === distro_1.SCOPE.PROJECT ? project : null, identifier);
|
|
27
29
|
if (!data || !data.domain) {
|
|
28
|
-
output_1.default.exitError(texts_1.ERR_WORKSPACE_NOT_FOUND);
|
|
30
|
+
output_1.default.exitError(new cliError_1.default('not_found', texts_1.ERR_WORKSPACE_NOT_FOUND, texts_1.HINT_WORKSPACE_LIST));
|
|
29
31
|
}
|
|
30
32
|
if (!data || !data.distribution_id) {
|
|
31
|
-
output_1.default.exitError(texts_1.ERR_COMMAND_DISTRO_NOT_FOUND);
|
|
33
|
+
output_1.default.exitError(new cliError_1.default('not_found', texts_1.ERR_COMMAND_DISTRO_NOT_FOUND, texts_1.HINT_DISTRO_LIST));
|
|
32
34
|
}
|
|
33
|
-
const
|
|
35
|
+
const json = options.format === 'json';
|
|
36
|
+
const confirmed = await output_1.default.confirmDestructive(options.force, (0, texts_1.TXT_COMMAND_DISTRO_DELETE_CONFIRM)(identifier), json);
|
|
34
37
|
if (confirmed) {
|
|
35
38
|
await client.deleteDistribution(workspace, scope === distro_1.SCOPE.PROJECT ? project : null, data.distribution_id);
|
|
36
|
-
output_1.default.
|
|
39
|
+
output_1.default.exitResult(json, { deleted: identifier }, texts_1.TXT_COMMAND_DISTRO_DELETED);
|
|
37
40
|
}
|
|
38
41
|
else {
|
|
39
|
-
output_1.default.
|
|
42
|
+
output_1.default.exitResult(json, { deleted: null });
|
|
40
43
|
}
|
|
41
44
|
});
|
|
42
45
|
exports.default = commandDistroDelete;
|
|
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const cliError_1 = __importDefault(require("../../cliError"));
|
|
6
7
|
const utils_1 = require("../../utils");
|
|
7
8
|
const texts_1 = require("../../texts");
|
|
8
9
|
const input_1 = __importDefault(require("../../input"));
|
|
@@ -24,10 +25,10 @@ commandDistroGet.action(async (identifier, options) => {
|
|
|
24
25
|
const client = input_1.default.restApiTokenClient();
|
|
25
26
|
const data = await client.getDistributionByIdentifier(workspace, scope === distro_1.SCOPE.PROJECT ? project : null, identifier);
|
|
26
27
|
if (!data || !data.domain) {
|
|
27
|
-
output_1.default.exitError(texts_1.ERR_WORKSPACE_NOT_FOUND);
|
|
28
|
+
output_1.default.exitError(new cliError_1.default('not_found', texts_1.ERR_WORKSPACE_NOT_FOUND, texts_1.HINT_WORKSPACE_LIST));
|
|
28
29
|
}
|
|
29
30
|
if (!data || !data.distribution_id) {
|
|
30
|
-
output_1.default.exitError(texts_1.ERR_COMMAND_DISTRO_NOT_FOUND);
|
|
31
|
+
output_1.default.exitError(new cliError_1.default('not_found', texts_1.ERR_COMMAND_DISTRO_NOT_FOUND, texts_1.HINT_DISTRO_LIST));
|
|
31
32
|
}
|
|
32
33
|
const distro = await client.getDistribution(workspace, scope === distro_1.SCOPE.PROJECT ? project : null, data.distribution_id);
|
|
33
34
|
if (options.format === 'json') {
|
|
@@ -16,6 +16,7 @@ const commandDistroOpen = (0, utils_1.newCommand)('open', texts_1.DESC_COMMAND_R
|
|
|
16
16
|
commandDistroOpen.option('-w, --workspace <domain>', texts_1.OPTION_REST_API_WORKSPACE);
|
|
17
17
|
commandDistroOpen.option('-p, --project <name>', texts_1.OPTION_REST_API_PROJECT);
|
|
18
18
|
commandDistroOpen.option('--scope <scope>', texts_1.OPT_COMMAND_SCOPE);
|
|
19
|
+
commandDistroOpen.option('--format <text|json>', texts_1.OPTION_FORMAT);
|
|
19
20
|
commandDistroOpen.argument('<identifier>', texts_1.OPT_COMMAND_DISTRO_IDENTIFIER);
|
|
20
21
|
commandDistroOpen.action(async (identifier, options) => {
|
|
21
22
|
const workspace = input_1.default.restApiWorkspace(options.workspace);
|
|
@@ -25,8 +26,8 @@ commandDistroOpen.action(async (identifier, options) => {
|
|
|
25
26
|
const client = input_1.default.restApiTokenClient();
|
|
26
27
|
const data = await client.getDistributionByIdentifier(workspace, scopedProject, identifier);
|
|
27
28
|
if (!data?.distribution_id)
|
|
28
|
-
throw new cliError_1.default('not_found', texts_1.ERR_COMMAND_DISTRO_NOT_FOUND);
|
|
29
|
+
throw new cliError_1.default('not_found', texts_1.ERR_COMMAND_DISTRO_NOT_FOUND, texts_1.HINT_DISTRO_LIST);
|
|
29
30
|
const distro = await client.getDistribution(workspace, scopedProject, data.distribution_id);
|
|
30
|
-
await output_1.default.openUrl(distro.html_url);
|
|
31
|
+
await output_1.default.openUrl(distro.html_url, options.format === 'json');
|
|
31
32
|
});
|
|
32
33
|
exports.default = commandDistroOpen;
|
|
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const cliError_1 = __importDefault(require("../../../cliError"));
|
|
6
7
|
const utils_1 = require("../../../utils");
|
|
7
8
|
const texts_1 = require("../../../texts");
|
|
8
9
|
const input_1 = __importDefault(require("../../../input"));
|
|
@@ -47,10 +48,10 @@ commandDistroRouteCreate.action(async (identifier, options) => {
|
|
|
47
48
|
body.agent_note = options.agentNote;
|
|
48
49
|
const data = await client.getDistributionByIdentifier(workspace, scope === distro_1.SCOPE.PROJECT ? project : null, identifier);
|
|
49
50
|
if (!data?.domain) {
|
|
50
|
-
output_1.default.exitError(texts_1.ERR_WORKSPACE_NOT_FOUND);
|
|
51
|
+
output_1.default.exitError(new cliError_1.default('not_found', texts_1.ERR_WORKSPACE_NOT_FOUND, texts_1.HINT_WORKSPACE_LIST));
|
|
51
52
|
}
|
|
52
53
|
if (!data?.distribution_id) {
|
|
53
|
-
output_1.default.exitError(texts_1.ERR_COMMAND_DISTRO_NOT_FOUND);
|
|
54
|
+
output_1.default.exitError(new cliError_1.default('not_found', texts_1.ERR_COMMAND_DISTRO_NOT_FOUND, texts_1.HINT_DISTRO_LIST));
|
|
54
55
|
}
|
|
55
56
|
body.targets = await input_1.default.routeTarget(client, workspace, scope === distro_1.SCOPE.PROJECT ? project : null, options.target);
|
|
56
57
|
const result = await client.createRoute(workspace, scope === distro_1.SCOPE.PROJECT ? project : null, data.distribution_id, body);
|
|
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const cliError_1 = __importDefault(require("../../../cliError"));
|
|
6
7
|
const utils_1 = require("../../../utils");
|
|
7
8
|
const texts_1 = require("../../../texts");
|
|
8
9
|
const input_1 = __importDefault(require("../../../input"));
|
|
@@ -17,6 +18,7 @@ commandDistroRouteDelete.option('-w, --workspace <domain>', texts_1.OPTION_REST_
|
|
|
17
18
|
commandDistroRouteDelete.option('-p, --project <name>', texts_1.OPTION_REST_API_PROJECT);
|
|
18
19
|
commandDistroRouteDelete.option('--scope <scope>', texts_1.OPT_COMMAND_SCOPE);
|
|
19
20
|
commandDistroRouteDelete.option('-f, --force', texts_1.OPTION_CONFIRM_FORCE);
|
|
21
|
+
commandDistroRouteDelete.option('--format <text|json>', texts_1.OPTION_FORMAT);
|
|
20
22
|
commandDistroRouteDelete.argument('<identifier>', texts_1.OPT_COMMAND_DISTRO_IDENTIFIER);
|
|
21
23
|
commandDistroRouteDelete.argument('<route-id>', texts_1.OPT_COMMAND_ROUTE_ID);
|
|
22
24
|
commandDistroRouteDelete.action(async (identifier, routeId, options) => {
|
|
@@ -26,18 +28,19 @@ commandDistroRouteDelete.action(async (identifier, routeId, options) => {
|
|
|
26
28
|
const client = input_1.default.restApiTokenClient();
|
|
27
29
|
const data = await client.getDistributionByIdentifier(workspace, scope === distro_1.SCOPE.PROJECT ? project : null, identifier);
|
|
28
30
|
if (!data?.domain) {
|
|
29
|
-
output_1.default.exitError(texts_1.ERR_WORKSPACE_NOT_FOUND);
|
|
31
|
+
output_1.default.exitError(new cliError_1.default('not_found', texts_1.ERR_WORKSPACE_NOT_FOUND, texts_1.HINT_WORKSPACE_LIST));
|
|
30
32
|
}
|
|
31
33
|
if (!data?.distribution_id) {
|
|
32
|
-
output_1.default.exitError(texts_1.ERR_COMMAND_DISTRO_NOT_FOUND);
|
|
34
|
+
output_1.default.exitError(new cliError_1.default('not_found', texts_1.ERR_COMMAND_DISTRO_NOT_FOUND, texts_1.HINT_DISTRO_LIST));
|
|
33
35
|
}
|
|
34
|
-
const
|
|
36
|
+
const json = options.format === 'json';
|
|
37
|
+
const confirmed = await output_1.default.confirmDestructive(options.force, (0, texts_1.TXT_COMMAND_ROUTE_DELETE_CONFIRM)(identifier, routeId), json);
|
|
35
38
|
if (confirmed) {
|
|
36
39
|
await client.deleteRoute(workspace, scope === distro_1.SCOPE.PROJECT ? project : null, data.distribution_id, routeId);
|
|
37
|
-
output_1.default.
|
|
40
|
+
output_1.default.exitResult(json, { deleted: routeId }, texts_1.TXT_COMMAND_ROUTE_DELETED);
|
|
38
41
|
}
|
|
39
42
|
else {
|
|
40
|
-
output_1.default.
|
|
43
|
+
output_1.default.exitResult(json, { deleted: null });
|
|
41
44
|
}
|
|
42
45
|
});
|
|
43
46
|
exports.default = commandDistroRouteDelete;
|
|
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const cliError_1 = __importDefault(require("../../../cliError"));
|
|
6
7
|
const utils_1 = require("../../../utils");
|
|
7
8
|
const texts_1 = require("../../../texts");
|
|
8
9
|
const input_1 = __importDefault(require("../../../input"));
|
|
@@ -34,10 +35,10 @@ commandDistroRouteGet.action(async (identifier, routeId, options) => {
|
|
|
34
35
|
const client = input_1.default.restApiTokenClient();
|
|
35
36
|
const data = await client.getDistributionByIdentifier(workspace, scope === distro_1.SCOPE.PROJECT ? project : null, identifier);
|
|
36
37
|
if (!data?.domain) {
|
|
37
|
-
output_1.default.exitError(texts_1.ERR_WORKSPACE_NOT_FOUND);
|
|
38
|
+
output_1.default.exitError(new cliError_1.default('not_found', texts_1.ERR_WORKSPACE_NOT_FOUND, texts_1.HINT_WORKSPACE_LIST));
|
|
38
39
|
}
|
|
39
40
|
if (!data?.distribution_id) {
|
|
40
|
-
output_1.default.exitError(texts_1.ERR_COMMAND_DISTRO_NOT_FOUND);
|
|
41
|
+
output_1.default.exitError(new cliError_1.default('not_found', texts_1.ERR_COMMAND_DISTRO_NOT_FOUND, texts_1.HINT_DISTRO_LIST));
|
|
41
42
|
}
|
|
42
43
|
const route = await client.getRoute(workspace, scope === distro_1.SCOPE.PROJECT ? project : null, data.distribution_id, routeId);
|
|
43
44
|
if (options.format === 'json') {
|
|
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const cliError_1 = __importDefault(require("../../../cliError"));
|
|
6
7
|
const utils_1 = require("../../../utils");
|
|
7
8
|
const texts_1 = require("../../../texts");
|
|
8
9
|
const input_1 = __importDefault(require("../../../input"));
|
|
@@ -25,10 +26,10 @@ commandDistroRouteList.action(async (identifier, options) => {
|
|
|
25
26
|
const client = input_1.default.restApiTokenClient();
|
|
26
27
|
const data = await client.getDistributionByIdentifier(workspace, scope === distro_1.SCOPE.PROJECT ? project : null, identifier);
|
|
27
28
|
if (!data?.domain) {
|
|
28
|
-
output_1.default.exitError(texts_1.ERR_WORKSPACE_NOT_FOUND);
|
|
29
|
+
output_1.default.exitError(new cliError_1.default('not_found', texts_1.ERR_WORKSPACE_NOT_FOUND, texts_1.HINT_WORKSPACE_LIST));
|
|
29
30
|
}
|
|
30
31
|
if (!data?.distribution_id) {
|
|
31
|
-
output_1.default.exitError(texts_1.ERR_COMMAND_DISTRO_NOT_FOUND);
|
|
32
|
+
output_1.default.exitError(new cliError_1.default('not_found', texts_1.ERR_COMMAND_DISTRO_NOT_FOUND, texts_1.HINT_DISTRO_LIST));
|
|
32
33
|
}
|
|
33
34
|
const r = await client.listRoutes(workspace, scope === distro_1.SCOPE.PROJECT ? project : null, data.distribution_id);
|
|
34
35
|
const routes = r.routes || [];
|
|
@@ -16,6 +16,7 @@ const commandDistroRouteOpen = (0, utils_1.newCommand)('open', texts_1.DESC_COMM
|
|
|
16
16
|
commandDistroRouteOpen.option('-w, --workspace <domain>', texts_1.OPTION_REST_API_WORKSPACE);
|
|
17
17
|
commandDistroRouteOpen.option('-p, --project <name>', texts_1.OPTION_REST_API_PROJECT);
|
|
18
18
|
commandDistroRouteOpen.option('--scope <scope>', texts_1.OPT_COMMAND_SCOPE);
|
|
19
|
+
commandDistroRouteOpen.option('--format <text|json>', texts_1.OPTION_FORMAT);
|
|
19
20
|
commandDistroRouteOpen.argument('<identifier>', texts_1.OPT_COMMAND_DISTRO_IDENTIFIER);
|
|
20
21
|
commandDistroRouteOpen.argument('<route-id>', texts_1.OPT_COMMAND_ROUTE_ID);
|
|
21
22
|
commandDistroRouteOpen.action(async (identifier, routeId, options) => {
|
|
@@ -26,8 +27,8 @@ commandDistroRouteOpen.action(async (identifier, routeId, options) => {
|
|
|
26
27
|
const client = input_1.default.restApiTokenClient();
|
|
27
28
|
const data = await client.getDistributionByIdentifier(workspace, scopedProject, identifier);
|
|
28
29
|
if (!data?.distribution_id)
|
|
29
|
-
throw new cliError_1.default('not_found', texts_1.ERR_COMMAND_DISTRO_NOT_FOUND);
|
|
30
|
+
throw new cliError_1.default('not_found', texts_1.ERR_COMMAND_DISTRO_NOT_FOUND, texts_1.HINT_DISTRO_LIST);
|
|
30
31
|
const route = await client.getRoute(workspace, scopedProject, data.distribution_id, routeId);
|
|
31
|
-
await output_1.default.openUrl(route.html_url);
|
|
32
|
+
await output_1.default.openUrl(route.html_url, options.format === 'json');
|
|
32
33
|
});
|
|
33
34
|
exports.default = commandDistroRouteOpen;
|
|
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const cliError_1 = __importDefault(require("../../../cliError"));
|
|
6
7
|
const utils_1 = require("../../../utils");
|
|
7
8
|
const texts_1 = require("../../../texts");
|
|
8
9
|
const input_1 = __importDefault(require("../../../input"));
|
|
@@ -33,10 +34,10 @@ commandDistroRouteUpdate.action(async (identifier, routeId, options) => {
|
|
|
33
34
|
const client = input_1.default.restApiTokenClient();
|
|
34
35
|
const data = await client.getDistributionByIdentifier(workspace, scope === distro_1.SCOPE.PROJECT ? project : null, identifier);
|
|
35
36
|
if (!data?.domain) {
|
|
36
|
-
output_1.default.exitError(texts_1.ERR_WORKSPACE_NOT_FOUND);
|
|
37
|
+
output_1.default.exitError(new cliError_1.default('not_found', texts_1.ERR_WORKSPACE_NOT_FOUND, texts_1.HINT_WORKSPACE_LIST));
|
|
37
38
|
}
|
|
38
39
|
if (!data?.distribution_id) {
|
|
39
|
-
output_1.default.exitError(texts_1.ERR_COMMAND_DISTRO_NOT_FOUND);
|
|
40
|
+
output_1.default.exitError(new cliError_1.default('not_found', texts_1.ERR_COMMAND_DISTRO_NOT_FOUND, texts_1.HINT_DISTRO_LIST));
|
|
40
41
|
}
|
|
41
42
|
const route = await client.getRoute(workspace, scope === distro_1.SCOPE.PROJECT ? project : null, data.distribution_id, routeId);
|
|
42
43
|
let changed = false;
|
|
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const cliError_1 = __importDefault(require("../../cliError"));
|
|
6
7
|
const utils_1 = require("../../utils");
|
|
7
8
|
const texts_1 = require("../../texts");
|
|
8
9
|
const input_1 = __importDefault(require("../../input"));
|
|
@@ -54,10 +55,10 @@ commandDistroUpdate.action(async (identifier, options) => {
|
|
|
54
55
|
const client = input_1.default.restApiTokenClient();
|
|
55
56
|
const data = await client.getDistributionByIdentifier(workspace, scope === distro_1.SCOPE.PROJECT ? project : null, identifier);
|
|
56
57
|
if (!data || !data.domain) {
|
|
57
|
-
output_1.default.exitError(texts_1.ERR_WORKSPACE_NOT_FOUND);
|
|
58
|
+
output_1.default.exitError(new cliError_1.default('not_found', texts_1.ERR_WORKSPACE_NOT_FOUND, texts_1.HINT_WORKSPACE_LIST));
|
|
58
59
|
}
|
|
59
60
|
if (!data || !data.distribution_id) {
|
|
60
|
-
output_1.default.exitError(texts_1.ERR_COMMAND_DISTRO_NOT_FOUND);
|
|
61
|
+
output_1.default.exitError(new cliError_1.default('not_found', texts_1.ERR_COMMAND_DISTRO_NOT_FOUND, texts_1.HINT_DISTRO_LIST));
|
|
61
62
|
}
|
|
62
63
|
const result = await client.updateDistribution(workspace, scope === distro_1.SCOPE.PROJECT ? project : null, data.distribution_id, body);
|
|
63
64
|
if (options.format === 'json') {
|
|
@@ -7,6 +7,7 @@ const utils_1 = require("../../utils");
|
|
|
7
7
|
const texts_1 = require("../../texts");
|
|
8
8
|
const output_1 = __importDefault(require("../../output"));
|
|
9
9
|
const input_1 = __importDefault(require("../../input"));
|
|
10
|
+
const cliError_1 = __importDefault(require("../../cliError"));
|
|
10
11
|
const sortDomains = (arr, sort) => {
|
|
11
12
|
return arr.sort((a, b) => {
|
|
12
13
|
if (sort === 'name') {
|
|
@@ -20,13 +21,14 @@ const sortDomains = (arr, sort) => {
|
|
|
20
21
|
return 0;
|
|
21
22
|
});
|
|
22
23
|
};
|
|
23
|
-
const commandDomainBuy = (0, utils_1.newCommand)('buy', texts_1.DESC_COMMAND_DOMAIN_BUY);
|
|
24
|
+
const commandDomainBuy = (0, utils_1.newCommand)('buy', texts_1.DESC_COMMAND_DOMAIN_BUY, { requiredScopes: [utils_1.REST_API_SCOPE.DOMAIN_MANAGE] });
|
|
24
25
|
commandDomainBuy.option('-w, --workspace <domain>', texts_1.OPTION_REST_API_WORKSPACE);
|
|
25
26
|
commandDomainBuy.option('-d, --tld <tld...>', texts_1.OPT_COMMAND_DOMAIN_BUY_TLD);
|
|
26
27
|
commandDomainBuy.option('-o, --owner-behalf', texts_1.OPT_COMMAND_DOMAIN_BUY_OWNER);
|
|
27
28
|
commandDomainBuy.option('-s, --sort <name|price>', texts_1.OPT_COMMAND_DOMAIN_SORT);
|
|
28
29
|
commandDomainBuy.option('-f, --force', texts_1.OPTION_CONFIRM_DOMAIN_BUY);
|
|
29
30
|
commandDomainBuy.option('-a, --only-available', texts_1.OPT_COMMAND_DOMAIN_ONLY_AVAILABLE);
|
|
31
|
+
commandDomainBuy.option('--format <text|json>', texts_1.OPTION_FORMAT);
|
|
30
32
|
commandDomainBuy.argument('[domain|prompt]', texts_1.OPT_COMMAND_DOMAIN_PHRASE);
|
|
31
33
|
commandDomainBuy.action(async (text, options) => {
|
|
32
34
|
const onlyAvailable = options.onlyAvailable;
|
|
@@ -36,11 +38,16 @@ commandDomainBuy.action(async (text, options) => {
|
|
|
36
38
|
const tlds = input_1.default.allowedTlds(options.tld);
|
|
37
39
|
const prompt = (text || '').trim().toLowerCase();
|
|
38
40
|
const onOwnerBehalf = !!options.ownerBehalf;
|
|
39
|
-
|
|
41
|
+
const json = options.format === 'json';
|
|
42
|
+
if (options.force) {
|
|
43
|
+
await nonInteractive(client, workspace, prompt, tlds, onOwnerBehalf, json);
|
|
44
|
+
}
|
|
45
|
+
else if (output_1.default.isTTY() && !json) {
|
|
40
46
|
await interactive(client, workspace, prompt, tlds, onOwnerBehalf, onlyAvailable, sort);
|
|
41
47
|
}
|
|
42
48
|
else {
|
|
43
|
-
|
|
49
|
+
// buying spends money, so only the menu or --force may pick the domain
|
|
50
|
+
throw new cliError_1.default('usage_error', texts_1.ERR_CONFIRM_REQUIRED, texts_1.TXT_CONFIRM_FORCE_HINT);
|
|
44
51
|
}
|
|
45
52
|
output_1.default.exitNormal();
|
|
46
53
|
});
|
|
@@ -67,19 +74,28 @@ const outputBought = (domain) => {
|
|
|
67
74
|
output_1.default.normal(' bought');
|
|
68
75
|
outputRouteExample(domain);
|
|
69
76
|
};
|
|
70
|
-
const claimNonInteractive = async (client, workspace, domain, onOwnerBehalf) => {
|
|
77
|
+
const claimNonInteractive = async (client, workspace, domain, onOwnerBehalf, json) => {
|
|
78
|
+
if (json) {
|
|
79
|
+
output_1.default.json(await client.domainClaim(workspace, domain, onOwnerBehalf));
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
71
82
|
output_1.default.arrowSign();
|
|
72
83
|
output_1.default.normal(`Matched: ${output_1.default.formatDomainClaim(domain, true)}`);
|
|
73
84
|
await client.domainClaim(workspace, domain, onOwnerBehalf);
|
|
74
85
|
outputClaimed(domain);
|
|
75
86
|
};
|
|
76
|
-
const buyNonInteractive = async (client, workspace, domain, onOwnerBehalf) => {
|
|
87
|
+
const buyNonInteractive = async (client, workspace, domain, onOwnerBehalf, json) => {
|
|
88
|
+
if (!domain?.available) {
|
|
89
|
+
throw new cliError_1.default('usage_error', texts_1.ERR_COMMAND_DOMAIN_UNAVAILABLE);
|
|
90
|
+
}
|
|
91
|
+
if (json) {
|
|
92
|
+
output_1.default.json(await client.domainBuy(workspace, domain.name, onOwnerBehalf, true));
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
77
95
|
output_1.default.arrowSign();
|
|
78
96
|
output_1.default.normal(`Matched: ${output_1.default.formatDomain(domain)}`);
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
outputBought(domain.name);
|
|
82
|
-
}
|
|
97
|
+
await client.domainBuy(workspace, domain.name, onOwnerBehalf, true);
|
|
98
|
+
outputBought(domain.name);
|
|
83
99
|
};
|
|
84
100
|
const interactive = async (client, workspace, prompt, tlds, onOwnerBehalf, onlyAvailable, sort) => {
|
|
85
101
|
if (!prompt) {
|
|
@@ -264,7 +280,7 @@ const interactive = async (client, workspace, prompt, tlds, onOwnerBehalf, onlyA
|
|
|
264
280
|
outputBought(name);
|
|
265
281
|
}
|
|
266
282
|
};
|
|
267
|
-
const nonInteractive = async (client, workspace, prompt, tlds, onOwnerBehalf) => {
|
|
283
|
+
const nonInteractive = async (client, workspace, prompt, tlds, onOwnerBehalf, json) => {
|
|
268
284
|
if (!prompt) {
|
|
269
285
|
output_1.default.exitError(texts_1.TXT_COMMAND_DOMAIN_PROMPT_REQUIRED);
|
|
270
286
|
}
|
|
@@ -273,19 +289,22 @@ const nonInteractive = async (client, workspace, prompt, tlds, onOwnerBehalf) =>
|
|
|
273
289
|
const claims = await client.domainClaimable(workspace, subdomain);
|
|
274
290
|
const claimable = claims.domains.find((c) => c.available && `${subdomain}.${c.domain}` === prompt);
|
|
275
291
|
if (claimable) {
|
|
276
|
-
await claimNonInteractive(client, workspace, prompt, onOwnerBehalf);
|
|
292
|
+
await claimNonInteractive(client, workspace, prompt, onOwnerBehalf, json);
|
|
277
293
|
return;
|
|
278
294
|
}
|
|
279
295
|
const { domains } = await client.domainSearch(workspace, [prompt]);
|
|
280
|
-
await buyNonInteractive(client, workspace, domains[0], onOwnerBehalf);
|
|
296
|
+
await buyNonInteractive(client, workspace, domains[0], onOwnerBehalf, json);
|
|
281
297
|
return;
|
|
282
298
|
}
|
|
283
|
-
|
|
284
|
-
|
|
299
|
+
if (!json) {
|
|
300
|
+
output_1.default.arrowSign();
|
|
301
|
+
output_1.default.normal(`Searching...`);
|
|
302
|
+
}
|
|
285
303
|
const suggestions = await client.domainSuggest(workspace, prompt, tlds, 5);
|
|
286
|
-
|
|
304
|
+
if (!json)
|
|
305
|
+
output_1.default.clearPreviousLine();
|
|
287
306
|
if (suggestions.claims.length > 0) {
|
|
288
|
-
await claimNonInteractive(client, workspace, suggestions.claims[0], onOwnerBehalf);
|
|
307
|
+
await claimNonInteractive(client, workspace, suggestions.claims[0], onOwnerBehalf, json);
|
|
289
308
|
return;
|
|
290
309
|
}
|
|
291
310
|
const domains = suggestions.domains.sort((a, b) => {
|
|
@@ -296,7 +315,7 @@ const nonInteractive = async (client, workspace, prompt, tlds, onOwnerBehalf) =>
|
|
|
296
315
|
return a.prices.create.price < b.prices.create.price ? -1 : 1;
|
|
297
316
|
});
|
|
298
317
|
if (domains.length > 0) {
|
|
299
|
-
await buyNonInteractive(client, workspace, domains[0], onOwnerBehalf);
|
|
318
|
+
await buyNonInteractive(client, workspace, domains[0], onOwnerBehalf, json);
|
|
300
319
|
return;
|
|
301
320
|
}
|
|
302
321
|
output_1.default.exitError(texts_1.ERR_COMMAND_DOMAIN_NOT_FOUND);
|
|
@@ -3,11 +3,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const cliError_1 = __importDefault(require("../../cliError"));
|
|
6
7
|
const utils_1 = require("../../utils");
|
|
7
8
|
const texts_1 = require("../../texts");
|
|
8
9
|
const input_1 = __importDefault(require("../../input"));
|
|
9
10
|
const output_1 = __importDefault(require("../../output"));
|
|
10
|
-
const commandDomainGet = (0, utils_1.newCommand)('get', texts_1.DESC_COMMAND_DOMAIN_GET);
|
|
11
|
+
const commandDomainGet = (0, utils_1.newCommand)('get', texts_1.DESC_COMMAND_DOMAIN_GET, { requiredScopes: [utils_1.REST_API_SCOPE.DOMAIN_READ] });
|
|
11
12
|
commandDomainGet.option('-w, --workspace <domain>', texts_1.OPTION_REST_API_WORKSPACE);
|
|
12
13
|
commandDomainGet.option('--format <text|json>', texts_1.OPTION_FORMAT);
|
|
13
14
|
commandDomainGet.argument('<id|name>', texts_1.OPTION_COMMAND_DOMAIN_IDENTIFIER);
|
|
@@ -26,7 +27,7 @@ commandDomainGet.action(async (name, options) => {
|
|
|
26
27
|
}
|
|
27
28
|
}
|
|
28
29
|
if (!domain) {
|
|
29
|
-
output_1.default.exitError(texts_1.ERR_COMMAND_DOMAIN_NOT_FOUND);
|
|
30
|
+
output_1.default.exitError(new cliError_1.default('not_found', texts_1.ERR_COMMAND_DOMAIN_NOT_FOUND, texts_1.HINT_DOMAIN_LIST));
|
|
30
31
|
}
|
|
31
32
|
if (options.format === 'json') {
|
|
32
33
|
output_1.default.json(domain);
|
|
@@ -7,7 +7,7 @@ const utils_1 = require("../../utils");
|
|
|
7
7
|
const texts_1 = require("../../texts");
|
|
8
8
|
const input_1 = __importDefault(require("../../input"));
|
|
9
9
|
const output_1 = __importDefault(require("../../output"));
|
|
10
|
-
const commandDomainList = (0, utils_1.newCommand)('list', texts_1.DESC_COMMAND_DOMAIN_LIST);
|
|
10
|
+
const commandDomainList = (0, utils_1.newCommand)('list', texts_1.DESC_COMMAND_DOMAIN_LIST, { requiredScopes: [utils_1.REST_API_SCOPE.DOMAIN_READ] });
|
|
11
11
|
commandDomainList.alias('ls');
|
|
12
12
|
commandDomainList.option('-w, --workspace <domain>', texts_1.OPTION_REST_API_WORKSPACE);
|
|
13
13
|
commandDomainList.option('--format <text|json>', texts_1.OPTION_FORMAT);
|
|
@@ -9,9 +9,11 @@ const input_1 = __importDefault(require("../../input"));
|
|
|
9
9
|
const output_1 = __importDefault(require("../../output"));
|
|
10
10
|
const cliError_1 = __importDefault(require("../../cliError"));
|
|
11
11
|
const commandDomainOpen = (0, utils_1.newCommand)('open', texts_1.DESC_COMMAND_RESOURCE_OPEN, {
|
|
12
|
+
requiredScopes: [utils_1.REST_API_SCOPE.DOMAIN_READ],
|
|
12
13
|
examples: [{ description: 'Open a domain in Buddy', command: 'bdy domain open example.com' }],
|
|
13
14
|
});
|
|
14
15
|
commandDomainOpen.option('-w, --workspace <domain>', texts_1.OPTION_REST_API_WORKSPACE);
|
|
16
|
+
commandDomainOpen.option('--format <text|json>', texts_1.OPTION_FORMAT);
|
|
15
17
|
commandDomainOpen.argument('<id|name>', texts_1.OPTION_COMMAND_DOMAIN_IDENTIFIER);
|
|
16
18
|
commandDomainOpen.action(async (name, options) => {
|
|
17
19
|
const workspace = input_1.default.restApiWorkspace(options.workspace);
|
|
@@ -27,7 +29,7 @@ commandDomainOpen.action(async (name, options) => {
|
|
|
27
29
|
domain = await client.getDomain(workspace, found.id);
|
|
28
30
|
}
|
|
29
31
|
if (!domain)
|
|
30
|
-
throw new cliError_1.default('not_found', texts_1.ERR_COMMAND_DOMAIN_NOT_FOUND);
|
|
31
|
-
await output_1.default.openUrl(domain.html_url);
|
|
32
|
+
throw new cliError_1.default('not_found', texts_1.ERR_COMMAND_DOMAIN_NOT_FOUND, texts_1.HINT_DOMAIN_LIST);
|
|
33
|
+
await output_1.default.openUrl(domain.html_url, options.format === 'json');
|
|
32
34
|
});
|
|
33
35
|
exports.default = commandDomainOpen;
|
|
@@ -21,6 +21,7 @@ const sort = (arr, sort) => {
|
|
|
21
21
|
});
|
|
22
22
|
};
|
|
23
23
|
const commandDomainSearch = (0, utils_1.newCommand)('search', texts_1.DESC_COMMAND_DOMAIN_SEARCH, {
|
|
24
|
+
requiredScopes: [utils_1.REST_API_SCOPE.DOMAIN_READ],
|
|
24
25
|
helpText: texts_1.HELP_DOMAIN_SEARCH_JSON,
|
|
25
26
|
examples: texts_1.EXAMPLE_DOMAIN_SEARCH,
|
|
26
27
|
});
|