bdy 1.25.13-dev → 1.25.14-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 +19 -0
- package/distTs/src/visualTest/browser.js +3 -2
- package/package.json +1 -1
|
@@ -8,7 +8,7 @@ const texts_1 = require("../../texts");
|
|
|
8
8
|
const input_1 = __importDefault(require("../../input"));
|
|
9
9
|
const output_1 = __importDefault(require("../../output"));
|
|
10
10
|
const distro_1 = require("../../types/distro");
|
|
11
|
-
const commandEnvironmentCreate = (0, utils_1.newCommand)('create', texts_1.DESC_COMMAND_ENVIRONMENT_CREATE, { examples: texts_1.EXAMPLE_ENVIRONMENT_CREATE });
|
|
11
|
+
const commandEnvironmentCreate = (0, utils_1.newCommand)('create', texts_1.DESC_COMMAND_ENVIRONMENT_CREATE, { requiredScopes: [utils_1.REST_API_SCOPE.ENVIRONMENT_WRITE], examples: texts_1.EXAMPLE_ENVIRONMENT_CREATE });
|
|
12
12
|
commandEnvironmentCreate.alias('add');
|
|
13
13
|
commandEnvironmentCreate.option('-i, --identifier <identifier>', texts_1.OPTION_ENVIRONMENT_CREATE_IDENTIFIER);
|
|
14
14
|
commandEnvironmentCreate.option('-w, --workspace <domain>', texts_1.OPTION_REST_API_WORKSPACE);
|
|
@@ -7,21 +7,23 @@ 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 commandEnvironmentDelete = (0, utils_1.newCommand)('delete', texts_1.DESC_COMMAND_ENVIRONMENT_DELETE, { examples: texts_1.EXAMPLE_ENVIRONMENT_DELETE });
|
|
10
|
+
const commandEnvironmentDelete = (0, utils_1.newCommand)('delete', texts_1.DESC_COMMAND_ENVIRONMENT_DELETE, { requiredScopes: [utils_1.REST_API_SCOPE.ENVIRONMENT_MANAGE], examples: texts_1.EXAMPLE_ENVIRONMENT_DELETE });
|
|
11
11
|
commandEnvironmentDelete.alias('rm');
|
|
12
12
|
commandEnvironmentDelete.option('-w, --workspace <domain>', texts_1.OPTION_REST_API_WORKSPACE);
|
|
13
13
|
commandEnvironmentDelete.option('-p, --project <name>', texts_1.OPTION_REST_API_PROJECT);
|
|
14
14
|
commandEnvironmentDelete.option('-f, --force', texts_1.OPTION_CONFIRM_FORCE);
|
|
15
|
+
commandEnvironmentDelete.option('--format <text|json>', texts_1.OPTION_FORMAT);
|
|
15
16
|
commandEnvironmentDelete.argument('<identifier>', texts_1.OPTION_ENVIRONMENT_IDENTIFIER);
|
|
16
17
|
commandEnvironmentDelete.action(async (identifier, options) => {
|
|
17
18
|
const workspace = input_1.default.restApiWorkspace(options.workspace);
|
|
18
19
|
const client = input_1.default.restApiTokenClient();
|
|
19
20
|
const environment_id = await input_1.default.environmentId(client, workspace, identifier, options,
|
|
20
21
|
/* strictProject */ true);
|
|
21
|
-
const
|
|
22
|
+
const json = options.format === 'json';
|
|
23
|
+
const confirmed = await output_1.default.confirmDestructive(options.force, (0, texts_1.TXT_ENVIRONMENT_DELETE_CONFIRM)(identifier), json);
|
|
22
24
|
if (!confirmed)
|
|
23
|
-
output_1.default.
|
|
25
|
+
output_1.default.exitResult(json, { deleted: null });
|
|
24
26
|
await client.deleteEnvironment(workspace, environment_id);
|
|
25
|
-
output_1.default.
|
|
27
|
+
output_1.default.exitResult(json, { deleted: identifier }, (0, texts_1.TXT_ENVIRONMENT_DELETED)(identifier));
|
|
26
28
|
});
|
|
27
29
|
exports.default = commandEnvironmentDelete;
|
|
@@ -8,6 +8,7 @@ const texts_1 = require("../../texts");
|
|
|
8
8
|
const output_1 = __importDefault(require("../../output"));
|
|
9
9
|
const input_1 = __importDefault(require("../../input"));
|
|
10
10
|
const commandEnvironmentGet = (0, utils_1.newCommand)('get', texts_1.DESC_COMMAND_ENVIRONMENT_GET, {
|
|
11
|
+
requiredScopes: [utils_1.REST_API_SCOPE.ENVIRONMENT_READ],
|
|
11
12
|
examples: texts_1.EXAMPLE_ENVIRONMENT_GET,
|
|
12
13
|
});
|
|
13
14
|
commandEnvironmentGet.option('-w, --workspace <domain>', texts_1.OPTION_REST_API_WORKSPACE);
|
|
@@ -8,7 +8,7 @@ const texts_1 = require("../../texts");
|
|
|
8
8
|
const output_1 = __importDefault(require("../../output"));
|
|
9
9
|
const input_1 = __importDefault(require("../../input"));
|
|
10
10
|
const distro_1 = require("../../types/distro");
|
|
11
|
-
const commandEnvironmentList = (0, utils_1.newCommand)('list', texts_1.DESC_COMMAND_ENVIRONMENT_LIST, { examples: texts_1.EXAMPLE_ENVIRONMENT_LIST });
|
|
11
|
+
const commandEnvironmentList = (0, utils_1.newCommand)('list', texts_1.DESC_COMMAND_ENVIRONMENT_LIST, { requiredScopes: [utils_1.REST_API_SCOPE.ENVIRONMENT_READ], examples: texts_1.EXAMPLE_ENVIRONMENT_LIST });
|
|
12
12
|
commandEnvironmentList.alias('ls');
|
|
13
13
|
commandEnvironmentList.option('-w, --workspace <domain>', texts_1.OPTION_REST_API_WORKSPACE);
|
|
14
14
|
commandEnvironmentList.option('-p, --project <name>', texts_1.OPTION_REST_API_PROJECT);
|
|
@@ -8,16 +8,18 @@ const texts_1 = require("../../texts");
|
|
|
8
8
|
const input_1 = __importDefault(require("../../input"));
|
|
9
9
|
const output_1 = __importDefault(require("../../output"));
|
|
10
10
|
const commandEnvironmentOpen = (0, utils_1.newCommand)('open', texts_1.DESC_COMMAND_RESOURCE_OPEN, {
|
|
11
|
+
requiredScopes: [utils_1.REST_API_SCOPE.ENVIRONMENT_READ],
|
|
11
12
|
examples: [{ description: 'Open an environment in Buddy', command: 'bdy env open production' }],
|
|
12
13
|
});
|
|
13
14
|
commandEnvironmentOpen.option('-w, --workspace <domain>', texts_1.OPTION_REST_API_WORKSPACE);
|
|
14
15
|
commandEnvironmentOpen.option('-p, --project <name>', texts_1.OPTION_REST_API_PROJECT);
|
|
16
|
+
commandEnvironmentOpen.option('--format <text|json>', texts_1.OPTION_FORMAT);
|
|
15
17
|
commandEnvironmentOpen.argument('<identifier>', texts_1.OPTION_ENVIRONMENT_IDENTIFIER);
|
|
16
18
|
commandEnvironmentOpen.action(async (identifier, options) => {
|
|
17
19
|
const workspace = input_1.default.restApiWorkspace(options.workspace);
|
|
18
20
|
const client = input_1.default.restApiTokenClient();
|
|
19
21
|
const id = await input_1.default.environmentId(client, workspace, identifier, options);
|
|
20
22
|
const environment = await client.getEnvironment(workspace, id);
|
|
21
|
-
await output_1.default.openUrl(environment.html_url);
|
|
23
|
+
await output_1.default.openUrl(environment.html_url, options.format === 'json');
|
|
22
24
|
});
|
|
23
25
|
exports.default = commandEnvironmentOpen;
|
|
@@ -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 commandEnvironmentUpdate = (0, utils_1.newCommand)('update', texts_1.DESC_COMMAND_ENVIRONMENT_UPDATE, { examples: texts_1.EXAMPLE_ENVIRONMENT_UPDATE });
|
|
10
|
+
const commandEnvironmentUpdate = (0, utils_1.newCommand)('update', texts_1.DESC_COMMAND_ENVIRONMENT_UPDATE, { requiredScopes: [utils_1.REST_API_SCOPE.ENVIRONMENT_WRITE], examples: texts_1.EXAMPLE_ENVIRONMENT_UPDATE });
|
|
11
11
|
commandEnvironmentUpdate.alias('edit');
|
|
12
12
|
commandEnvironmentUpdate.option('-w, --workspace <domain>', texts_1.OPTION_REST_API_WORKSPACE);
|
|
13
13
|
commandEnvironmentUpdate.option('-p, --project <name>', texts_1.OPTION_REST_API_PROJECT);
|
|
@@ -61,9 +61,13 @@ function generatePkcePair() {
|
|
|
61
61
|
.digest('base64url');
|
|
62
62
|
return { codeVerifier, codeChallenge };
|
|
63
63
|
}
|
|
64
|
-
async function waitForOpen(isRegister, abortCode, verbose = false, seconds = 3) {
|
|
65
|
-
|
|
66
|
-
if (
|
|
64
|
+
async function waitForOpen(isRegister, abortCode, verbose = false, seconds = 3, json = false) {
|
|
65
|
+
// with --format json narration goes to stderr, keeping stdout for the result
|
|
66
|
+
if (json)
|
|
67
|
+
output_1.default.note(isRegister ? texts_1.TXT_REGISTER_OPENING : texts_1.TXT_LOGIN_OPENING);
|
|
68
|
+
else
|
|
69
|
+
output_1.default.normal(isRegister ? texts_1.TXT_REGISTER_OPENING : texts_1.TXT_LOGIN_OPENING);
|
|
70
|
+
if (verbose || json) {
|
|
67
71
|
const end = Date.now() + seconds * 1000;
|
|
68
72
|
while (Date.now() <= end && !abortCode.signal.aborted)
|
|
69
73
|
await (0, utils_1.sleep)(500);
|
|
@@ -86,7 +90,7 @@ async function waitForOpen(isRegister, abortCode, verbose = false, seconds = 3)
|
|
|
86
90
|
}
|
|
87
91
|
output_1.default.clearPreviousLine();
|
|
88
92
|
}
|
|
89
|
-
async function oauthServer(api, clientId, clientSecret, forceRegisterEmail, forceRegisterName) {
|
|
93
|
+
async function oauthServer(api, clientId, clientSecret, forceRegisterEmail, forceRegisterName, json = false) {
|
|
90
94
|
const isRegister = !!forceRegisterEmail && !!forceRegisterName;
|
|
91
95
|
const ApiClient = require('../api/client').default;
|
|
92
96
|
const open = require('open').default;
|
|
@@ -158,13 +162,19 @@ async function oauthServer(api, clientId, clientSecret, forceRegisterEmail, forc
|
|
|
158
162
|
catch {
|
|
159
163
|
// do nothing
|
|
160
164
|
}
|
|
161
|
-
await waitForOpen(isRegister, abortCode, !!ApiClient.onRequestTrace);
|
|
165
|
+
await waitForOpen(isRegister, abortCode, !!ApiClient.onRequestTrace, 3, json);
|
|
162
166
|
if (abortCode.signal.aborted)
|
|
163
167
|
return;
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
+
if (json) {
|
|
169
|
+
output_1.default.note(isRegister ? texts_1.TXT_REGISTER_OPEN_URL : texts_1.TXT_LOGIN_OPEN_URL);
|
|
170
|
+
output_1.default.note(url);
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
output_1.default.dim(isRegister ? texts_1.TXT_REGISTER_OPEN_URL : texts_1.TXT_LOGIN_OPEN_URL);
|
|
174
|
+
output_1.default.normal('');
|
|
175
|
+
output_1.default.dim(url.replace(/%/g, '%%'));
|
|
176
|
+
output_1.default.normal('');
|
|
177
|
+
}
|
|
168
178
|
for (;;) {
|
|
169
179
|
try {
|
|
170
180
|
const code = await output_1.default.inputString(texts_1.TXT_LOGIN_PROVIDE_CODE, undefined, false, abortCode.signal);
|
|
@@ -230,12 +240,12 @@ async function getOrCreateApp(api) {
|
|
|
230
240
|
clientToken,
|
|
231
241
|
};
|
|
232
242
|
}
|
|
233
|
-
async function authorizeOAuth(api, forceRegisterEmail, forceRegisterName) {
|
|
243
|
+
async function authorizeOAuth(api, forceRegisterEmail, forceRegisterName, json = false) {
|
|
234
244
|
const { clientId, clientSecret, clientToken } = await getOrCreateApp(api);
|
|
235
|
-
const { token, refreshToken } = await oauthServer(api, clientId, clientSecret, forceRegisterEmail, forceRegisterName);
|
|
245
|
+
const { token, refreshToken } = await oauthServer(api, clientId, clientSecret, forceRegisterEmail, forceRegisterName, json);
|
|
236
246
|
return { token, refreshToken, clientId, clientSecret, clientToken };
|
|
237
247
|
}
|
|
238
|
-
async function authorizeToken(isRegister, api, token, refreshToken, clientId, clientSecret, clientToken, workspace) {
|
|
248
|
+
async function authorizeToken(isRegister, api, token, refreshToken, clientId, clientSecret, clientToken, workspace, json = false) {
|
|
239
249
|
const ApiClient = require('../api/client').default;
|
|
240
250
|
cfg_1.default.setApiToken(token);
|
|
241
251
|
cfg_1.default.setApiRefreshToken(refreshToken);
|
|
@@ -254,11 +264,12 @@ async function authorizeToken(isRegister, api, token, refreshToken, clientId, cl
|
|
|
254
264
|
workspace = await output_1.default.selectWorkspace(w.workspaces);
|
|
255
265
|
}
|
|
256
266
|
cfg_1.default.setWorkspace(workspace);
|
|
257
|
-
output_1.default.
|
|
267
|
+
output_1.default.exitResult(json, { workspace, api }, isRegister ? texts_1.TXT_REGISTER_SUCCESS : texts_1.TXT_LOGIN_SUCCESS);
|
|
258
268
|
}
|
|
259
269
|
async function authorize(options, forceRegisterEmail, forceRegisterName) {
|
|
260
270
|
cfg_1.default.clearLogin();
|
|
261
271
|
const isRegister = !!forceRegisterEmail && !!forceRegisterName;
|
|
272
|
+
const json = options.format === 'json';
|
|
262
273
|
let api = options.api || process.env.BUDDY_API_ENDPOINT;
|
|
263
274
|
let region = options.region || process.env.BUDDY_REGION;
|
|
264
275
|
let token = options.token;
|
|
@@ -299,20 +310,21 @@ async function authorize(options, forceRegisterEmail, forceRegisterName) {
|
|
|
299
310
|
if (!output_1.default.isStdInTTY()) {
|
|
300
311
|
output_1.default.exitError(texts_1.ERR_TOKEN_NOT_PROVIDED);
|
|
301
312
|
}
|
|
302
|
-
const { token, refreshToken, clientId, clientSecret, clientToken } = await authorizeOAuth(api, forceRegisterEmail, forceRegisterName);
|
|
303
|
-
await authorizeToken(isRegister, api, token, refreshToken, clientId, clientSecret, clientToken, workspace);
|
|
313
|
+
const { token, refreshToken, clientId, clientSecret, clientToken } = await authorizeOAuth(api, forceRegisterEmail, forceRegisterName, json);
|
|
314
|
+
await authorizeToken(isRegister, api, token, refreshToken, clientId, clientSecret, clientToken, workspace, json);
|
|
304
315
|
}
|
|
305
316
|
else {
|
|
306
|
-
await authorizeToken(false, api, token, '', '', '', '', workspace);
|
|
317
|
+
await authorizeToken(false, api, token, '', '', '', '', workspace, json);
|
|
307
318
|
}
|
|
308
319
|
}
|
|
309
|
-
const commandLogin = (0, utils_1.newCommand)('login', texts_1.DESC_COMMAND_LOGIN);
|
|
320
|
+
const commandLogin = (0, utils_1.newCommand)('login', texts_1.DESC_COMMAND_LOGIN, { requiredScopes: [utils_1.REST_API_SCOPE.WORKSPACE_READ] });
|
|
310
321
|
commandLogin.usesDefaultContext = true;
|
|
311
322
|
commandLogin.alias('sign-in');
|
|
312
323
|
commandLogin.option('--token <token>', texts_1.OPTION_REST_API_TOKEN);
|
|
313
324
|
commandLogin.option('--api <url>', texts_1.OPTION_REST_API_ENDPOINT);
|
|
314
325
|
commandLogin.option('--region <region>', texts_1.OPTION_REST_API_REGION);
|
|
315
326
|
commandLogin.option('-w, --workspace <domain>', texts_1.OPTION_REST_API_WORKSPACE);
|
|
327
|
+
commandLogin.option('--format <text|json>', texts_1.OPTION_FORMAT);
|
|
316
328
|
commandLogin.action(async (options) => {
|
|
317
329
|
output_1.default.handleSignals();
|
|
318
330
|
await authorize(options);
|
|
@@ -8,8 +8,9 @@ const output_1 = __importDefault(require("../output"));
|
|
|
8
8
|
const texts_1 = require("../texts");
|
|
9
9
|
const utils_1 = require("../utils");
|
|
10
10
|
const input_1 = __importDefault(require("../input"));
|
|
11
|
-
const commandLogout = (0, utils_1.newCommand)('logout', texts_1.DESC_COMMAND_LOGOUT);
|
|
11
|
+
const commandLogout = (0, utils_1.newCommand)('logout', texts_1.DESC_COMMAND_LOGOUT, { requiredScopes: [] });
|
|
12
12
|
commandLogout.usesDefaultContext = true;
|
|
13
|
+
commandLogout.option('--format <text|json>', texts_1.OPTION_FORMAT);
|
|
13
14
|
const tryRemovingApp = async () => {
|
|
14
15
|
try {
|
|
15
16
|
const clientId = cfg_1.default.getApiClientId();
|
|
@@ -20,9 +21,9 @@ const tryRemovingApp = async () => {
|
|
|
20
21
|
// do nothing
|
|
21
22
|
}
|
|
22
23
|
};
|
|
23
|
-
commandLogout.action(async () => {
|
|
24
|
+
commandLogout.action(async (options) => {
|
|
24
25
|
await tryRemovingApp();
|
|
25
26
|
cfg_1.default.clearLogin();
|
|
26
|
-
output_1.default.
|
|
27
|
+
output_1.default.exitResult(options.format === 'json', { logged_out: true }, texts_1.TXT_LOGOUT_SUCCESS);
|
|
27
28
|
});
|
|
28
29
|
exports.default = commandLogout;
|
|
@@ -22,6 +22,8 @@ commandPipelineCreate.action(async (options) => {
|
|
|
22
22
|
const workspace = input_1.default.restApiWorkspace(options.workspace);
|
|
23
23
|
const project = input_1.default.restApiProject(options.project);
|
|
24
24
|
const client = input_1.default.restApiTokenClient();
|
|
25
|
+
// read before creating, so a missing file leaves no empty pipeline behind
|
|
26
|
+
const yaml = options.yaml ? input_1.default.restApiYaml(options.yaml) : null;
|
|
25
27
|
const humanId = require('human-id').default;
|
|
26
28
|
const timestamp = Date.now().toString(36);
|
|
27
29
|
const baseName = humanId({ separator: '-', capitalize: false });
|
|
@@ -31,12 +33,20 @@ commandPipelineCreate.action(async (options) => {
|
|
|
31
33
|
identifier: options.identifier || defaultIdentifier,
|
|
32
34
|
};
|
|
33
35
|
let result = await client.createPipeline(workspace, project, body);
|
|
34
|
-
if (
|
|
35
|
-
const yaml = input_1.default.restApiYaml(options.yaml);
|
|
36
|
+
if (yaml !== null) {
|
|
36
37
|
body = {
|
|
37
38
|
yaml: Buffer.from(yaml, 'utf8').toString('base64'),
|
|
38
39
|
};
|
|
39
|
-
|
|
40
|
+
try {
|
|
41
|
+
await client.updatePipelineYml(workspace, project, result.id, body);
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
// the command fails, so it must not leave the empty pipeline behind
|
|
45
|
+
await client
|
|
46
|
+
.deletePipeline(workspace, project, result.id)
|
|
47
|
+
.catch(() => output_1.default.noteWarning((0, texts_1.TXT_PIPELINE_CREATE_ROLLBACK_FAILED)(result.id)));
|
|
48
|
+
throw err;
|
|
49
|
+
}
|
|
40
50
|
}
|
|
41
51
|
result = await client.getPipeline(workspace, project, result.id);
|
|
42
52
|
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"));
|
|
@@ -15,6 +16,7 @@ commandPipelineDelete.alias('rm');
|
|
|
15
16
|
commandPipelineDelete.option('-w, --workspace <domain>', texts_1.OPTION_REST_API_WORKSPACE);
|
|
16
17
|
commandPipelineDelete.option('-p, --project <name>', texts_1.OPTION_REST_API_PROJECT);
|
|
17
18
|
commandPipelineDelete.option('-f, --force', texts_1.OPTION_CONFIRM_FORCE);
|
|
19
|
+
commandPipelineDelete.option('--format <text|json>', texts_1.OPTION_FORMAT);
|
|
18
20
|
commandPipelineDelete.argument('<identifier>', texts_1.OPTION_PIPELINE_IDENTIFIER);
|
|
19
21
|
commandPipelineDelete.action(async (identifier, options) => {
|
|
20
22
|
const workspace = input_1.default.restApiWorkspace(options.workspace);
|
|
@@ -22,21 +24,22 @@ commandPipelineDelete.action(async (identifier, options) => {
|
|
|
22
24
|
const client = input_1.default.restApiTokenClient();
|
|
23
25
|
const data = await client.getPipelineByIdentifier(workspace, project, identifier);
|
|
24
26
|
if (!data || !data.domain) {
|
|
25
|
-
output_1.default.exitError(texts_1.ERR_WORKSPACE_NOT_FOUND);
|
|
27
|
+
output_1.default.exitError(new cliError_1.default('not_found', texts_1.ERR_WORKSPACE_NOT_FOUND, texts_1.HINT_WORKSPACE_LIST));
|
|
26
28
|
}
|
|
27
29
|
if (!data.project_identifier) {
|
|
28
|
-
output_1.default.exitError(texts_1.ERR_PROJECT_NOT_FOUND);
|
|
30
|
+
output_1.default.exitError(new cliError_1.default('not_found', texts_1.ERR_PROJECT_NOT_FOUND, texts_1.HINT_PROJECT_LIST));
|
|
29
31
|
}
|
|
30
32
|
if (!data.pipeline_id) {
|
|
31
|
-
output_1.default.exitError(texts_1.ERR_PIPELINE_NOT_FOUND);
|
|
33
|
+
output_1.default.exitError(new cliError_1.default('not_found', texts_1.ERR_PIPELINE_NOT_FOUND, texts_1.HINT_PIPELINE_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_PIPELINE_DELETE_CONFIRM)(identifier), json);
|
|
34
37
|
if (confirmed) {
|
|
35
38
|
await client.deletePipeline(workspace, project, data.pipeline_id);
|
|
36
|
-
output_1.default.
|
|
39
|
+
output_1.default.exitResult(json, { deleted: identifier }, texts_1.TXT_PIPELINE_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 = commandPipelineDelete;
|
|
@@ -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"));
|
|
@@ -21,13 +22,13 @@ commandPipelineGet.action(async (identifier, options) => {
|
|
|
21
22
|
const client = input_1.default.restApiTokenClient();
|
|
22
23
|
const data = await client.getPipelineByIdentifier(workspace, project, identifier);
|
|
23
24
|
if (!data || !data.domain) {
|
|
24
|
-
output_1.default.exitError(texts_1.ERR_WORKSPACE_NOT_FOUND);
|
|
25
|
+
output_1.default.exitError(new cliError_1.default('not_found', texts_1.ERR_WORKSPACE_NOT_FOUND, texts_1.HINT_WORKSPACE_LIST));
|
|
25
26
|
}
|
|
26
27
|
if (!data.project_identifier) {
|
|
27
|
-
output_1.default.exitError(texts_1.ERR_PROJECT_NOT_FOUND);
|
|
28
|
+
output_1.default.exitError(new cliError_1.default('not_found', texts_1.ERR_PROJECT_NOT_FOUND, texts_1.HINT_PROJECT_LIST));
|
|
28
29
|
}
|
|
29
30
|
if (!data.pipeline_id) {
|
|
30
|
-
output_1.default.exitError(texts_1.ERR_PIPELINE_NOT_FOUND);
|
|
31
|
+
output_1.default.exitError(new cliError_1.default('not_found', texts_1.ERR_PIPELINE_NOT_FOUND, texts_1.HINT_PIPELINE_LIST));
|
|
31
32
|
}
|
|
32
33
|
const pipeline = await client.getPipeline(workspace, project, data.pipeline_id);
|
|
33
34
|
if (options.format === 'json') {
|
|
@@ -14,6 +14,7 @@ const commandPipelineOpen = (0, utils_1.newCommand)('open', texts_1.DESC_COMMAND
|
|
|
14
14
|
});
|
|
15
15
|
commandPipelineOpen.option('-w, --workspace <domain>', texts_1.OPTION_REST_API_WORKSPACE);
|
|
16
16
|
commandPipelineOpen.option('-p, --project <name>', texts_1.OPTION_REST_API_PROJECT);
|
|
17
|
+
commandPipelineOpen.option('--format <text|json>', texts_1.OPTION_FORMAT);
|
|
17
18
|
commandPipelineOpen.argument('<identifier>', texts_1.OPTION_PIPELINE_IDENTIFIER);
|
|
18
19
|
commandPipelineOpen.action(async (identifier, options) => {
|
|
19
20
|
const workspace = input_1.default.restApiWorkspace(options.workspace);
|
|
@@ -21,6 +22,6 @@ commandPipelineOpen.action(async (identifier, options) => {
|
|
|
21
22
|
const client = input_1.default.restApiTokenClient();
|
|
22
23
|
const pipelineId = await (0, execution_1.resolvePipelineId)(client, workspace, project, identifier);
|
|
23
24
|
const pipeline = await client.getPipeline(workspace, project, pipelineId);
|
|
24
|
-
await output_1.default.openUrl(pipeline.html_url);
|
|
25
|
+
await output_1.default.openUrl(pipeline.html_url, options.format === 'json');
|
|
25
26
|
});
|
|
26
27
|
exports.default = commandPipelineOpen;
|
|
@@ -10,11 +10,11 @@ const texts_1 = require("../../../texts");
|
|
|
10
10
|
async function resolvePipelineId(client, workspace, project, identifier) {
|
|
11
11
|
const data = await client.getPipelineByIdentifier(workspace, project, identifier);
|
|
12
12
|
if (!data || !data.domain)
|
|
13
|
-
throw new cliError_1.default('not_found', texts_1.ERR_WORKSPACE_NOT_FOUND);
|
|
13
|
+
throw new cliError_1.default('not_found', texts_1.ERR_WORKSPACE_NOT_FOUND, texts_1.HINT_WORKSPACE_LIST);
|
|
14
14
|
if (!data.project_identifier)
|
|
15
|
-
throw new cliError_1.default('not_found', texts_1.ERR_PROJECT_NOT_FOUND);
|
|
15
|
+
throw new cliError_1.default('not_found', texts_1.ERR_PROJECT_NOT_FOUND, texts_1.HINT_PROJECT_LIST);
|
|
16
16
|
if (!data.pipeline_id) {
|
|
17
|
-
throw new cliError_1.default('not_found', texts_1.ERR_PIPELINE_NOT_FOUND);
|
|
17
|
+
throw new cliError_1.default('not_found', texts_1.ERR_PIPELINE_NOT_FOUND, texts_1.HINT_PIPELINE_LIST);
|
|
18
18
|
}
|
|
19
19
|
return data.pipeline_id;
|
|
20
20
|
}
|
|
@@ -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"));
|
|
@@ -26,13 +27,13 @@ commandPipelineRunList.action(async (identifier, options) => {
|
|
|
26
27
|
const client = input_1.default.restApiTokenClient();
|
|
27
28
|
const data = await client.getPipelineByIdentifier(workspace, project, identifier);
|
|
28
29
|
if (!data || !data.domain) {
|
|
29
|
-
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));
|
|
30
31
|
}
|
|
31
32
|
if (!data.project_identifier) {
|
|
32
|
-
output_1.default.exitError(texts_1.ERR_PROJECT_NOT_FOUND);
|
|
33
|
+
output_1.default.exitError(new cliError_1.default('not_found', texts_1.ERR_PROJECT_NOT_FOUND, texts_1.HINT_PROJECT_LIST));
|
|
33
34
|
}
|
|
34
35
|
if (!data.pipeline_id) {
|
|
35
|
-
output_1.default.exitError(texts_1.ERR_PIPELINE_NOT_FOUND);
|
|
36
|
+
output_1.default.exitError(new cliError_1.default('not_found', texts_1.ERR_PIPELINE_NOT_FOUND, texts_1.HINT_PIPELINE_LIST));
|
|
36
37
|
}
|
|
37
38
|
const result = await client.getPipelineRuns(workspace, project, data.pipeline_id, page, perPage);
|
|
38
39
|
if (!result.executions.length) {
|
|
@@ -14,6 +14,7 @@ const commandPipelineRunOpen = (0, utils_1.newCommand)('open', texts_1.DESC_COMM
|
|
|
14
14
|
});
|
|
15
15
|
commandPipelineRunOpen.option('-w, --workspace <domain>', texts_1.OPTION_REST_API_WORKSPACE);
|
|
16
16
|
commandPipelineRunOpen.option('-p, --project <name>', texts_1.OPTION_REST_API_PROJECT);
|
|
17
|
+
commandPipelineRunOpen.option('--format <text|json>', texts_1.OPTION_FORMAT);
|
|
17
18
|
commandPipelineRunOpen.argument('<identifier>', texts_1.OPTION_PIPELINE_IDENTIFIER);
|
|
18
19
|
commandPipelineRunOpen.argument('<run-id>', texts_1.OPTION_PIPELINE_RUN_ID);
|
|
19
20
|
commandPipelineRunOpen.action(async (identifier, runId, options) => {
|
|
@@ -23,6 +24,6 @@ commandPipelineRunOpen.action(async (identifier, runId, options) => {
|
|
|
23
24
|
const rid = input_1.default.pipelineRunId(runId);
|
|
24
25
|
const pipelineId = await (0, execution_1.resolvePipelineId)(client, workspace, project, identifier);
|
|
25
26
|
const run = await client.getPipelineRun(workspace, project, pipelineId, rid);
|
|
26
|
-
await output_1.default.openUrl(run.html_url);
|
|
27
|
+
await output_1.default.openUrl(run.html_url, options.format === 'json');
|
|
27
28
|
});
|
|
28
29
|
exports.default = commandPipelineRunOpen;
|
|
@@ -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"));
|
|
@@ -23,13 +24,13 @@ commandPipelineUpdate.action(async (identifier, y, options) => {
|
|
|
23
24
|
const client = input_1.default.restApiTokenClient();
|
|
24
25
|
const data = await client.getPipelineByIdentifier(workspace, project, identifier);
|
|
25
26
|
if (!data || !data.domain) {
|
|
26
|
-
output_1.default.exitError(texts_1.ERR_WORKSPACE_NOT_FOUND);
|
|
27
|
+
output_1.default.exitError(new cliError_1.default('not_found', texts_1.ERR_WORKSPACE_NOT_FOUND, texts_1.HINT_WORKSPACE_LIST));
|
|
27
28
|
}
|
|
28
29
|
if (!data.project_identifier) {
|
|
29
|
-
output_1.default.exitError(texts_1.ERR_PROJECT_NOT_FOUND);
|
|
30
|
+
output_1.default.exitError(new cliError_1.default('not_found', texts_1.ERR_PROJECT_NOT_FOUND, texts_1.HINT_PROJECT_LIST));
|
|
30
31
|
}
|
|
31
32
|
if (!data.pipeline_id) {
|
|
32
|
-
output_1.default.exitError(texts_1.ERR_PIPELINE_NOT_FOUND);
|
|
33
|
+
output_1.default.exitError(new cliError_1.default('not_found', texts_1.ERR_PIPELINE_NOT_FOUND, texts_1.HINT_PIPELINE_LIST));
|
|
33
34
|
}
|
|
34
35
|
await client.updatePipelineYml(workspace, project, data.pipeline_id, {
|
|
35
36
|
yaml: Buffer.from(yaml, 'utf8').toString('base64'),
|
|
@@ -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"));
|
|
@@ -22,13 +23,13 @@ commandPipelineYaml.action(async (identifier, options) => {
|
|
|
22
23
|
const client = input_1.default.restApiTokenClient();
|
|
23
24
|
const data = await client.getPipelineByIdentifier(workspace, project, identifier);
|
|
24
25
|
if (!data || !data.domain) {
|
|
25
|
-
output_1.default.exitError(texts_1.ERR_WORKSPACE_NOT_FOUND);
|
|
26
|
+
output_1.default.exitError(new cliError_1.default('not_found', texts_1.ERR_WORKSPACE_NOT_FOUND, texts_1.HINT_WORKSPACE_LIST));
|
|
26
27
|
}
|
|
27
28
|
if (!data.project_identifier) {
|
|
28
|
-
output_1.default.exitError(texts_1.ERR_PROJECT_NOT_FOUND);
|
|
29
|
+
output_1.default.exitError(new cliError_1.default('not_found', texts_1.ERR_PROJECT_NOT_FOUND, texts_1.HINT_PROJECT_LIST));
|
|
29
30
|
}
|
|
30
31
|
if (!data.pipeline_id) {
|
|
31
|
-
output_1.default.exitError(texts_1.ERR_PIPELINE_NOT_FOUND);
|
|
32
|
+
output_1.default.exitError(new cliError_1.default('not_found', texts_1.ERR_PIPELINE_NOT_FOUND, texts_1.HINT_PIPELINE_LIST));
|
|
32
33
|
}
|
|
33
34
|
const result = await client.getPipelineYml(workspace, project, data.pipeline_id);
|
|
34
35
|
let yml = '';
|