/
console-resolve-org.js
85 lines (71 loc) · 2.31 KB
/
console-resolve-org.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
'use strict';
const { log } = require('@serverless/utils/log');
const resolveAuthMode = require('@serverless/utils/auth/resolve-mode');
const apiRequest = require('@serverless/utils/api-request');
const promptWithHistory = require('@serverless/utils/inquirer/prompt-with-history');
const { showOnboardingWelcome } = require('./utils');
const orgsChoice = async (orgs, stepHistory) =>
promptWithHistory({
message: 'What org do you want to add this service to?',
type: 'list',
name: 'orgName',
choices: [
...orgs.map((org) => ({ name: org.orgName, value: org })),
{ name: '[Skip]', value: '_skip_' },
],
stepHistory,
});
const resolveOrgs = async () => {
const { userId } = await apiRequest('/api/identity/me');
return (await apiRequest(`/api/identity/users/${userId}/orgs`)).orgs;
};
module.exports = {
async isApplicable(context) {
const { options, isConsole } = context;
if (!isConsole) {
context.inapplicabilityReasonCode = 'NON_CONSOLE_CONTEXT';
return false;
}
if (!(await resolveAuthMode())) {
context.inapplicabilityReasonCode = 'NOT_LOGGED_IN';
return false;
}
const orgs = await resolveOrgs();
const orgName = options.org;
if (!orgs.length) {
context.inapplicabilityReasonCode = 'NO_ORGS_AVAILABLE';
return false;
}
log.notice();
showOnboardingWelcome(context);
if (orgName) {
const org = orgs.find((someOrg) => someOrg.orgName === orgName);
if (org) {
context.org = org;
context.inapplicabilityReasonCode = 'RESOLVED_FROM_OPTIONS';
return false;
}
log.error(
'Passed value for "--org" doesn\'t seem to correspond to account with which ' +
"you're logged in with. Please choose applicable org"
);
return { orgs, isOrgMismatch: true };
} else if (orgs.length === 1) {
context.org = orgs[0];
context.inapplicabilityReasonCode = 'ONLY_ORG';
return false;
}
return { orgs };
},
async run(context, stepData) {
const { stepHistory } = context;
const org = await orgsChoice(stepData.orgs, stepHistory);
if (org === '_skip_') {
log.error('Console integraton aborted');
context.isConsole = false;
return;
}
context.org = org;
},
configuredQuestions: ['orgName'],
};