@hubspot/cli 6.4.0 → 7.0.0-experimental.0
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/bin/cli.js +36 -15
- package/commands/{accounts → account}/clean.js +10 -9
- package/commands/{accounts → account}/info.js +10 -14
- package/commands/{accounts → account}/list.js +16 -13
- package/commands/{accounts → account}/remove.js +8 -8
- package/commands/{accounts → account}/rename.js +4 -5
- package/commands/{accounts → account}/use.js +5 -8
- package/commands/account.js +26 -0
- package/commands/auth.js +30 -23
- package/commands/cms/getReactModule.js +70 -0
- package/commands/cms/lighthouseScore.js +19 -19
- package/commands/cms.js +4 -3
- package/commands/completion.js +22 -0
- package/commands/config/set.js +22 -22
- package/commands/config.js +2 -2
- package/commands/create.js +5 -3
- package/commands/customObject/create.js +18 -13
- package/commands/customObject/schema/create.js +14 -14
- package/commands/customObject/schema/delete.js +29 -9
- package/commands/customObject/schema/fetch-all.js +14 -9
- package/commands/customObject/schema/fetch.js +22 -12
- package/commands/customObject/schema/list.js +3 -4
- package/commands/customObject/schema/update.js +27 -16
- package/commands/customObject/schema.js +1 -1
- package/commands/customObject.js +3 -4
- package/commands/doctor.js +2 -0
- package/commands/feedback.js +2 -0
- package/commands/fetch.js +13 -12
- package/commands/filemanager/fetch.js +6 -5
- package/commands/filemanager/upload.js +10 -10
- package/commands/filemanager.js +0 -4
- package/commands/{functions → function}/deploy.js +13 -11
- package/commands/{functions → function}/list.js +7 -7
- package/commands/{functions → function}/server.js +5 -6
- package/commands/function.js +20 -0
- package/commands/hubdb/clear.js +14 -8
- package/commands/hubdb/create.js +36 -11
- package/commands/hubdb/delete.js +31 -8
- package/commands/hubdb/fetch.js +14 -7
- package/commands/hubdb.js +2 -3
- package/commands/init.js +37 -14
- package/commands/lint.js +6 -5
- package/commands/list.js +5 -5
- package/commands/logs.js +24 -13
- package/commands/module/marketplace-validate.js +6 -7
- package/commands/module.js +2 -1
- package/commands/mv.js +11 -11
- package/commands/open.js +11 -10
- package/commands/project/add.js +2 -3
- package/commands/project/cloneApp.js +28 -30
- package/commands/project/create.js +8 -8
- package/commands/project/deploy.js +16 -13
- package/commands/project/dev.js +14 -14
- package/commands/project/download.js +18 -13
- package/commands/project/listBuilds.js +34 -29
- package/commands/project/logs.js +5 -5
- package/commands/project/migrateApp.js +27 -25
- package/commands/project/open.js +7 -8
- package/commands/project/upload.js +27 -29
- package/commands/project/watch.js +12 -19
- package/commands/project.js +3 -4
- package/commands/remove.js +14 -11
- package/commands/sandbox/create.js +12 -13
- package/commands/sandbox/delete.js +15 -13
- package/commands/sandbox.js +3 -4
- package/commands/{secrets → secret}/addSecret.js +24 -9
- package/commands/secret/deleteSecret.js +71 -0
- package/commands/{secrets → secret}/listSecrets.js +6 -6
- package/commands/secret/updateSecret.d.ts +1 -0
- package/commands/{secrets → secret}/updateSecret.js +20 -10
- package/commands/secret.js +22 -0
- package/commands/theme/generate-selectors.js +8 -8
- package/commands/theme/marketplace-validate.js +10 -11
- package/commands/theme/preview.js +6 -7
- package/commands/theme.js +3 -1
- package/commands/upload.js +28 -24
- package/commands/watch.js +19 -19
- package/lang/en.lyaml +177 -111
- package/lib/buildAccount.js +3 -1
- package/lib/commonOpts.d.ts +15 -6
- package/lib/commonOpts.js +53 -38
- package/lib/configOptions.js +19 -18
- package/lib/developerTestAccounts.js +8 -5
- package/lib/oauth.js +3 -1
- package/lib/projects.js +10 -5
- package/lib/prompts/accountsPrompt.js +9 -5
- package/lib/prompts/createModulePrompt.js +17 -2
- package/lib/prompts/createProjectPrompt.js +5 -5
- package/lib/prompts/projectDevTargetAccountPrompt.js +3 -2
- package/lib/prompts/promptUtils.d.ts +3 -0
- package/lib/prompts/promptUtils.js +14 -2
- package/lib/prompts/sandboxesPrompt.js +10 -7
- package/lib/prompts/secretPrompt.d.ts +3 -1
- package/lib/prompts/secretPrompt.js +32 -19
- package/lib/prompts/selectHubDBTablePrompt.d.ts +8 -0
- package/lib/prompts/selectHubDBTablePrompt.js +69 -0
- package/lib/prompts/setAsDefaultAccountPrompt.js +4 -2
- package/lib/sandboxSync.js +5 -2
- package/lib/sandboxes.js +12 -7
- package/lib/validation.js +14 -13
- package/package.json +5 -4
- package/commands/accounts.js +0 -30
- package/commands/cms/reactModules.js +0 -60
- package/commands/functions.js +0 -24
- package/commands/secrets/deleteSecret.js +0 -46
- package/commands/secrets.js +0 -23
- /package/commands/{accounts → account}/clean.d.ts +0 -0
- /package/commands/{accounts → account}/info.d.ts +0 -0
- /package/commands/{accounts → account}/list.d.ts +0 -0
- /package/commands/{accounts → account}/remove.d.ts +0 -0
- /package/commands/{accounts → account}/rename.d.ts +0 -0
- /package/commands/{accounts → account}/use.d.ts +0 -0
- /package/commands/{accounts.d.ts → account.d.ts} +0 -0
- /package/commands/cms/{reactModules.d.ts → getReactModule.d.ts} +0 -0
- /package/commands/{functions.d.ts → completion.d.ts} +0 -0
- /package/commands/{functions/list.d.ts → function/deploy.d.ts} +0 -0
- /package/commands/{functions/server.d.ts → function/list.d.ts} +0 -0
- /package/commands/{secrets.d.ts → function/server.d.ts} +0 -0
- /package/commands/{functions/deploy.d.ts → function.d.ts} +0 -0
- /package/commands/{secrets/deleteSecret.d.ts → secret/addSecret.d.ts} +0 -0
- /package/commands/{secrets/listSecrets.d.ts → secret/deleteSecret.d.ts} +0 -0
- /package/commands/{secrets/updateSecret.d.ts → secret/listSecrets.d.ts} +0 -0
- /package/commands/{secrets/addSecret.d.ts → secret.d.ts} +0 -0
package/bin/cli.js
CHANGED
|
@@ -3,10 +3,12 @@
|
|
|
3
3
|
const yargs = require('yargs');
|
|
4
4
|
const updateNotifier = require('update-notifier');
|
|
5
5
|
const chalk = require('chalk');
|
|
6
|
+
const fs = require('fs');
|
|
6
7
|
const { logger } = require('@hubspot/local-dev-lib/logger');
|
|
7
8
|
const { addUserAgentHeader } = require('@hubspot/local-dev-lib/http');
|
|
9
|
+
const { loadConfig, configFileExists, getConfigPath, } = require('@hubspot/local-dev-lib/config');
|
|
8
10
|
const { logError } = require('../lib/errorHandlers/index');
|
|
9
|
-
const { setLogLevel, getCommandName } = require('../lib/commonOpts');
|
|
11
|
+
const { setLogLevel, getCommandName, injectAccountIdMiddleware, } = require('../lib/commonOpts');
|
|
10
12
|
const { trackHelpUsage, trackConvertFieldsUsage, } = require('../lib/usageTracking');
|
|
11
13
|
const { getIsInProject } = require('../lib/projects');
|
|
12
14
|
const pkg = require('../package.json');
|
|
@@ -24,9 +26,9 @@ const uploadCommand = require('../commands/upload');
|
|
|
24
26
|
const createCommand = require('../commands/create');
|
|
25
27
|
const fetchCommand = require('../commands/fetch');
|
|
26
28
|
const filemanagerCommand = require('../commands/filemanager');
|
|
27
|
-
const
|
|
29
|
+
const secretCommands = require('../commands/secret');
|
|
28
30
|
const customObjectCommand = require('../commands/customObject');
|
|
29
|
-
const
|
|
31
|
+
const functionCommands = require('../commands/function');
|
|
30
32
|
const listCommand = require('../commands/list');
|
|
31
33
|
const openCommand = require('../commands/open');
|
|
32
34
|
const mvCommand = require('../commands/mv');
|
|
@@ -34,11 +36,12 @@ const projectCommands = require('../commands/project');
|
|
|
34
36
|
const themeCommand = require('../commands/theme');
|
|
35
37
|
const moduleCommand = require('../commands/module');
|
|
36
38
|
const configCommand = require('../commands/config');
|
|
37
|
-
const
|
|
39
|
+
const accountCommands = require('../commands/account');
|
|
38
40
|
const sandboxesCommand = require('../commands/sandbox');
|
|
39
41
|
const cmsCommand = require('../commands/cms');
|
|
40
42
|
const feedbackCommand = require('../commands/feedback');
|
|
41
43
|
const doctorCommand = require('../commands/doctor');
|
|
44
|
+
const completionCommand = require('../commands/completion');
|
|
42
45
|
const notifier = updateNotifier({
|
|
43
46
|
pkg: { ...pkg, name: '@hubspot/cli' },
|
|
44
47
|
distTag: 'latest',
|
|
@@ -116,17 +119,34 @@ const performChecks = argv => {
|
|
|
116
119
|
const setRequestHeaders = () => {
|
|
117
120
|
addUserAgentHeader('HubSpot CLI', pkg.version);
|
|
118
121
|
};
|
|
122
|
+
const loadConfigMiddleware = async (options) => {
|
|
123
|
+
if (configFileExists(true)) {
|
|
124
|
+
loadConfig('', options);
|
|
125
|
+
if (options.config) {
|
|
126
|
+
logger.error(i18n(`${i18nKey}.loadConfigMiddleware.configFileExists`, {
|
|
127
|
+
configPath: getConfigPath(),
|
|
128
|
+
}));
|
|
129
|
+
process.exit(EXIT_CODES.ERROR);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
// We need to load the config when options.config exists,
|
|
133
|
+
// so that getAccountIdFromConfig() in injectAccountIdMiddleware reads from the right config
|
|
134
|
+
if (options.config && fs.existsSync(options.config)) {
|
|
135
|
+
const { config: configPath } = options;
|
|
136
|
+
await loadConfig(configPath, options);
|
|
137
|
+
}
|
|
138
|
+
};
|
|
119
139
|
const argv = yargs
|
|
120
140
|
.usage('The command line interface to interact with HubSpot.')
|
|
121
|
-
|
|
141
|
+
// loadConfigMiddleware loads the new hidden config for all commands
|
|
142
|
+
.middleware([
|
|
143
|
+
setLogLevel,
|
|
144
|
+
setRequestHeaders,
|
|
145
|
+
loadConfigMiddleware,
|
|
146
|
+
injectAccountIdMiddleware,
|
|
147
|
+
])
|
|
122
148
|
.exitProcess(false)
|
|
123
149
|
.fail(handleFailure)
|
|
124
|
-
.option('debug', {
|
|
125
|
-
alias: 'd',
|
|
126
|
-
default: false,
|
|
127
|
-
describe: 'Set log level to debug',
|
|
128
|
-
type: 'boolean',
|
|
129
|
-
})
|
|
130
150
|
.option('noHyperlinks', {
|
|
131
151
|
default: false,
|
|
132
152
|
describe: 'prevent hyperlinks from displaying in the ui',
|
|
@@ -152,9 +172,9 @@ const argv = yargs
|
|
|
152
172
|
.command(createCommand)
|
|
153
173
|
.command(fetchCommand)
|
|
154
174
|
.command(filemanagerCommand)
|
|
155
|
-
.command(
|
|
175
|
+
.command(secretCommands)
|
|
156
176
|
.command(customObjectCommand)
|
|
157
|
-
.command(
|
|
177
|
+
.command(functionCommands)
|
|
158
178
|
.command({
|
|
159
179
|
...listCommand,
|
|
160
180
|
aliases: 'ls',
|
|
@@ -165,14 +185,15 @@ const argv = yargs
|
|
|
165
185
|
.command(themeCommand)
|
|
166
186
|
.command(moduleCommand)
|
|
167
187
|
.command(configCommand)
|
|
168
|
-
.command(
|
|
188
|
+
.command(accountCommands)
|
|
169
189
|
.command(sandboxesCommand)
|
|
170
190
|
.command(feedbackCommand)
|
|
171
191
|
.command(doctorCommand)
|
|
192
|
+
.command(completionCommand)
|
|
172
193
|
.help()
|
|
194
|
+
.alias('h', 'help')
|
|
173
195
|
.recommendCommands()
|
|
174
196
|
.demandCommand(1, '')
|
|
175
|
-
.completion()
|
|
176
197
|
.wrap(getTerminalWidth())
|
|
177
198
|
.strict().argv;
|
|
178
199
|
if (argv.help) {
|
|
@@ -7,22 +7,23 @@ const { trackCommandUsage } = require('../../lib/usageTracking');
|
|
|
7
7
|
const { i18n } = require('../../lib/lang');
|
|
8
8
|
const { loadAndValidateOptions } = require('../../lib/validation');
|
|
9
9
|
const { EXIT_CODES } = require('../../lib/enums/exitCodes');
|
|
10
|
-
const {
|
|
10
|
+
const { addTestingOptions, addConfigOptions } = require('../../lib/commonOpts');
|
|
11
11
|
const { promptUser } = require('../../lib/prompts/promptUtils');
|
|
12
12
|
const { getTableContents } = require('../../lib/ui/table');
|
|
13
13
|
const SpinniesManager = require('../../lib/ui/SpinniesManager');
|
|
14
|
-
const { getConfig, deleteAccount } = require('@hubspot/local-dev-lib/config');
|
|
15
14
|
const { uiAccountDescription } = require('../../lib/ui');
|
|
15
|
+
const { deleteAccount, getConfigAccounts, } = require('@hubspot/local-dev-lib/config');
|
|
16
|
+
const { getAccountIdentifier, } = require('@hubspot/local-dev-lib/config/getAccountIdentifier');
|
|
16
17
|
const { isSpecifiedError } = require('@hubspot/local-dev-lib/errors/index');
|
|
17
|
-
const i18nKey = 'commands.
|
|
18
|
+
const i18nKey = 'commands.account.subcommands.clean';
|
|
18
19
|
exports.command = 'clean';
|
|
19
20
|
exports.describe = i18n(`${i18nKey}.describe`);
|
|
20
21
|
exports.handler = async (options) => {
|
|
21
22
|
const { qa } = options;
|
|
22
23
|
await loadAndValidateOptions(options, false);
|
|
23
|
-
const config = getConfig();
|
|
24
24
|
trackCommandUsage('accounts-clean', null);
|
|
25
|
-
const
|
|
25
|
+
const accountsList = getConfigAccounts();
|
|
26
|
+
const filteredTestAccounts = accountsList.filter(p => qa ? p.env === 'qa' : p.env !== 'qa');
|
|
26
27
|
if (filteredTestAccounts && filteredTestAccounts.length === 0) {
|
|
27
28
|
logger.log(i18n(`${i18nKey}.noResults`));
|
|
28
29
|
process.exit(EXIT_CODES.SUCCESS);
|
|
@@ -36,7 +37,7 @@ exports.handler = async (options) => {
|
|
|
36
37
|
});
|
|
37
38
|
for (const account of filteredTestAccounts) {
|
|
38
39
|
try {
|
|
39
|
-
await accessTokenForPersonalAccessKey(account
|
|
40
|
+
await accessTokenForPersonalAccessKey(getAccountIdentifier(account), true);
|
|
40
41
|
}
|
|
41
42
|
catch (error) {
|
|
42
43
|
if (isSpecifiedError(error, {
|
|
@@ -62,7 +63,9 @@ exports.handler = async (options) => {
|
|
|
62
63
|
count: accountsToRemove.length,
|
|
63
64
|
}),
|
|
64
65
|
});
|
|
65
|
-
logger.log(getTableContents(accountsToRemove.map(p => [
|
|
66
|
+
logger.log(getTableContents(accountsToRemove.map(p => [
|
|
67
|
+
uiAccountDescription(getAccountIdentifier(p)),
|
|
68
|
+
]), { border: { bodyLeft: ' ' } }));
|
|
66
69
|
const { accountsCleanPrompt } = await promptUser([
|
|
67
70
|
{
|
|
68
71
|
name: 'accountsCleanPrompt',
|
|
@@ -94,8 +97,6 @@ exports.handler = async (options) => {
|
|
|
94
97
|
};
|
|
95
98
|
exports.builder = yargs => {
|
|
96
99
|
addConfigOptions(yargs);
|
|
97
|
-
addAccountOptions(yargs);
|
|
98
|
-
addUseEnvironmentOptions(yargs);
|
|
99
100
|
addTestingOptions(yargs);
|
|
100
101
|
yargs.example([['$0 accounts clean']]);
|
|
101
102
|
return yargs;
|
|
@@ -4,24 +4,24 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
4
4
|
const { logger } = require('@hubspot/local-dev-lib/logger');
|
|
5
5
|
const { getAccountConfig } = require('@hubspot/local-dev-lib/config');
|
|
6
6
|
const { getAccessToken } = require('@hubspot/local-dev-lib/personalAccessKey');
|
|
7
|
-
const {
|
|
7
|
+
const { addConfigOptions } = require('../../lib/commonOpts');
|
|
8
8
|
const { loadAndValidateOptions } = require('../../lib/validation');
|
|
9
9
|
const { i18n } = require('../../lib/lang');
|
|
10
10
|
const { getTableContents } = require('../../lib/ui/table');
|
|
11
|
-
const i18nKey = 'commands.
|
|
11
|
+
const i18nKey = 'commands.account.subcommands.info';
|
|
12
12
|
exports.describe = i18n(`${i18nKey}.describe`);
|
|
13
|
-
exports.command = 'info [
|
|
13
|
+
exports.command = 'info [account]';
|
|
14
14
|
exports.handler = async (options) => {
|
|
15
15
|
await loadAndValidateOptions(options);
|
|
16
|
-
const
|
|
17
|
-
const config = getAccountConfig(
|
|
16
|
+
const { derivedAccountId } = options;
|
|
17
|
+
const config = getAccountConfig(derivedAccountId);
|
|
18
18
|
// check if the provided account is using a personal access key, if not, show an error
|
|
19
|
-
if (config.authType === 'personalaccesskey') {
|
|
19
|
+
if (config && config.authType === 'personalaccesskey') {
|
|
20
20
|
const { name, personalAccessKey, env } = config;
|
|
21
|
-
const response = await getAccessToken(personalAccessKey, env,
|
|
21
|
+
const response = await getAccessToken(personalAccessKey, env, derivedAccountId);
|
|
22
22
|
const scopeGroups = response.scopeGroups.map(s => [s]);
|
|
23
23
|
logger.log(i18n(`${i18nKey}.name`, { name }));
|
|
24
|
-
logger.log(i18n(`${i18nKey}.accountId`, { accountId }));
|
|
24
|
+
logger.log(i18n(`${i18nKey}.accountId`, { accountId: derivedAccountId }));
|
|
25
25
|
logger.log(i18n(`${i18nKey}.scopeGroups`));
|
|
26
26
|
logger.log(getTableContents(scopeGroups, { border: { bodyLeft: ' ' } }));
|
|
27
27
|
}
|
|
@@ -31,14 +31,10 @@ exports.handler = async (options) => {
|
|
|
31
31
|
};
|
|
32
32
|
exports.builder = yargs => {
|
|
33
33
|
addConfigOptions(yargs);
|
|
34
|
-
addAccountOptions(yargs);
|
|
35
34
|
yargs.example([
|
|
36
35
|
['$0 accounts info', i18n(`${i18nKey}.examples.default`)],
|
|
37
|
-
[
|
|
38
|
-
|
|
39
|
-
i18n(`${i18nKey}.examples.nameBased`),
|
|
40
|
-
],
|
|
41
|
-
['$0 accounts info --account=1234567', i18n(`${i18nKey}.examples.idBased`)],
|
|
36
|
+
['$0 accounts info MyAccount', i18n(`${i18nKey}.examples.nameBased`)],
|
|
37
|
+
['$0 accounts info 1234567', i18n(`${i18nKey}.examples.idBased`)],
|
|
42
38
|
]);
|
|
43
39
|
return yargs;
|
|
44
40
|
};
|
|
@@ -2,16 +2,17 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
// @ts-nocheck
|
|
4
4
|
const { logger } = require('@hubspot/local-dev-lib/logger');
|
|
5
|
-
const { getConfig, getConfigPath } = require('@hubspot/local-dev-lib/config');
|
|
5
|
+
const { getConfig, getConfigPath, getConfigDefaultAccount, getConfigAccounts, } = require('@hubspot/local-dev-lib/config');
|
|
6
|
+
const { getAccountIdentifier, } = require('@hubspot/local-dev-lib/config/getAccountIdentifier');
|
|
7
|
+
const { addConfigOptions } = require('../../lib/commonOpts');
|
|
6
8
|
const { getTableContents, getTableHeader } = require('../../lib/ui/table');
|
|
7
|
-
const { addConfigOptions, addAccountOptions, getAccountId, } = require('../../lib/commonOpts');
|
|
8
9
|
const { trackCommandUsage } = require('../../lib/usageTracking');
|
|
9
10
|
const { loadAndValidateOptions } = require('../../lib/validation');
|
|
10
11
|
const { isSandbox, isDeveloperTestAccount } = require('../../lib/accountTypes');
|
|
11
12
|
const { i18n } = require('../../lib/lang');
|
|
12
13
|
const { HUBSPOT_ACCOUNT_TYPES, HUBSPOT_ACCOUNT_TYPE_STRINGS, } = require('@hubspot/local-dev-lib/constants/config');
|
|
13
|
-
const i18nKey = 'commands.
|
|
14
|
-
exports.command = 'list';
|
|
14
|
+
const i18nKey = 'commands.account.subcommands.list';
|
|
15
|
+
exports.command = ['list', 'ls'];
|
|
15
16
|
exports.describe = i18n(`${i18nKey}.describe`);
|
|
16
17
|
const sortAndMapPortals = portals => {
|
|
17
18
|
const mappedPortalData = {};
|
|
@@ -21,7 +22,7 @@ const sortAndMapPortals = portals => {
|
|
|
21
22
|
(p.accountType === HUBSPOT_ACCOUNT_TYPES.STANDARD ||
|
|
22
23
|
p.accountType === HUBSPOT_ACCOUNT_TYPES.APP_DEVELOPER))
|
|
23
24
|
.forEach(portal => {
|
|
24
|
-
mappedPortalData[portal
|
|
25
|
+
mappedPortalData[getAccountIdentifier(portal)] = [portal];
|
|
25
26
|
});
|
|
26
27
|
// Non-standard portals (sandbox, developer test account)
|
|
27
28
|
portals
|
|
@@ -34,7 +35,7 @@ const sortAndMapPortals = portals => {
|
|
|
34
35
|
];
|
|
35
36
|
}
|
|
36
37
|
else {
|
|
37
|
-
mappedPortalData[p
|
|
38
|
+
mappedPortalData[getAccountIdentifier(p)] = [p];
|
|
38
39
|
}
|
|
39
40
|
});
|
|
40
41
|
return mappedPortalData;
|
|
@@ -42,7 +43,7 @@ const sortAndMapPortals = portals => {
|
|
|
42
43
|
const getPortalData = mappedPortalData => {
|
|
43
44
|
const portalData = [];
|
|
44
45
|
Object.entries(mappedPortalData).forEach(([key, set]) => {
|
|
45
|
-
const hasParentPortal = set.filter(p => p
|
|
46
|
+
const hasParentPortal = set.filter(p => getAccountIdentifier(p) === parseInt(key, 10))[0];
|
|
46
47
|
set.forEach(portal => {
|
|
47
48
|
let name = `${portal.name} [${HUBSPOT_ACCOUNT_TYPE_STRINGS[portal.accountType]}]`;
|
|
48
49
|
if (isSandbox(portal)) {
|
|
@@ -55,18 +56,19 @@ const getPortalData = mappedPortalData => {
|
|
|
55
56
|
name = `↳ ${name}`;
|
|
56
57
|
}
|
|
57
58
|
}
|
|
58
|
-
portalData.push([name, portal
|
|
59
|
+
portalData.push([name, getAccountIdentifier(portal), portal.authType]);
|
|
59
60
|
});
|
|
60
61
|
});
|
|
61
62
|
return portalData;
|
|
62
63
|
};
|
|
63
64
|
exports.handler = async (options) => {
|
|
64
65
|
await loadAndValidateOptions(options, false);
|
|
65
|
-
const
|
|
66
|
-
trackCommandUsage('accounts-list', null,
|
|
66
|
+
const { derivedAccountId } = options;
|
|
67
|
+
trackCommandUsage('accounts-list', null, derivedAccountId);
|
|
67
68
|
const config = getConfig();
|
|
68
69
|
const configPath = getConfigPath();
|
|
69
|
-
const
|
|
70
|
+
const accountsList = getConfigAccounts();
|
|
71
|
+
const mappedPortalData = sortAndMapPortals(accountsList);
|
|
70
72
|
const portalData = getPortalData(mappedPortalData);
|
|
71
73
|
portalData.unshift(getTableHeader([
|
|
72
74
|
i18n(`${i18nKey}.labels.name`),
|
|
@@ -74,13 +76,14 @@ exports.handler = async (options) => {
|
|
|
74
76
|
i18n(`${i18nKey}.labels.authType`),
|
|
75
77
|
]));
|
|
76
78
|
logger.log(i18n(`${i18nKey}.configPath`, { configPath }));
|
|
77
|
-
logger.log(i18n(`${i18nKey}.defaultAccount`, {
|
|
79
|
+
logger.log(i18n(`${i18nKey}.defaultAccount`, {
|
|
80
|
+
account: getConfigDefaultAccount(config),
|
|
81
|
+
}));
|
|
78
82
|
logger.log(i18n(`${i18nKey}.accounts`));
|
|
79
83
|
logger.log(getTableContents(portalData, { border: { bodyLeft: ' ' } }));
|
|
80
84
|
};
|
|
81
85
|
exports.builder = yargs => {
|
|
82
86
|
addConfigOptions(yargs);
|
|
83
|
-
addAccountOptions(yargs);
|
|
84
87
|
yargs.example([['$0 accounts list']]);
|
|
85
88
|
return yargs;
|
|
86
89
|
};
|
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
// @ts-nocheck
|
|
4
|
+
const { addConfigOptions } = require('../../lib/commonOpts');
|
|
4
5
|
const { logger } = require('@hubspot/local-dev-lib/logger');
|
|
5
6
|
const { getConfig, getConfigPath, deleteAccount, getConfigDefaultAccount, getAccountId: getAccountIdFromConfig, updateDefaultAccount, } = require('@hubspot/local-dev-lib/config');
|
|
6
7
|
const { trackCommandUsage } = require('../../lib/usageTracking');
|
|
7
8
|
const { i18n } = require('../../lib/lang');
|
|
8
9
|
const { selectAccountFromConfig } = require('../../lib/prompts/accountsPrompt');
|
|
9
10
|
const { loadAndValidateOptions } = require('../../lib/validation');
|
|
10
|
-
const i18nKey = 'commands.
|
|
11
|
-
exports.command = 'remove [
|
|
11
|
+
const i18nKey = 'commands.account.subcommands.remove';
|
|
12
|
+
exports.command = 'remove [account]';
|
|
12
13
|
exports.describe = i18n(`${i18nKey}.describe`);
|
|
13
14
|
exports.handler = async (options) => {
|
|
14
15
|
await loadAndValidateOptions(options, false);
|
|
16
|
+
const { account } = options;
|
|
17
|
+
let accountToRemove = account;
|
|
15
18
|
let config = getConfig();
|
|
16
|
-
let accountToRemove = options.account;
|
|
17
19
|
if (accountToRemove && !getAccountIdFromConfig(accountToRemove)) {
|
|
18
20
|
logger.error(i18n(`${i18nKey}.errors.accountNotFound`, {
|
|
19
21
|
specifiedAccount: accountToRemove,
|
|
@@ -39,16 +41,14 @@ exports.handler = async (options) => {
|
|
|
39
41
|
}
|
|
40
42
|
};
|
|
41
43
|
exports.builder = yargs => {
|
|
42
|
-
yargs
|
|
44
|
+
addConfigOptions(yargs);
|
|
45
|
+
yargs.positional('account', {
|
|
43
46
|
describe: i18n(`${i18nKey}.options.account.describe`),
|
|
44
47
|
type: 'string',
|
|
45
48
|
});
|
|
46
49
|
yargs.example([
|
|
47
50
|
['$0 accounts remove', i18n(`${i18nKey}.examples.default`)],
|
|
48
|
-
[
|
|
49
|
-
'$0 accounts remove --account=MyAccount',
|
|
50
|
-
i18n(`${i18nKey}.examples.byName`),
|
|
51
|
-
],
|
|
51
|
+
['$0 accounts remove MyAccount', i18n(`${i18nKey}.examples.byName`)],
|
|
52
52
|
]);
|
|
53
53
|
return yargs;
|
|
54
54
|
};
|
|
@@ -3,18 +3,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
// @ts-nocheck
|
|
4
4
|
const { logger } = require('@hubspot/local-dev-lib/logger');
|
|
5
5
|
const { renameAccount } = require('@hubspot/local-dev-lib/config');
|
|
6
|
-
const { addConfigOptions, addAccountOptions
|
|
6
|
+
const { addConfigOptions, addAccountOptions } = require('../../lib/commonOpts');
|
|
7
7
|
const { trackCommandUsage } = require('../../lib/usageTracking');
|
|
8
8
|
const { loadAndValidateOptions } = require('../../lib/validation');
|
|
9
9
|
const { i18n } = require('../../lib/lang');
|
|
10
|
-
const i18nKey = 'commands.
|
|
10
|
+
const i18nKey = 'commands.account.subcommands.rename';
|
|
11
11
|
exports.command = 'rename <accountName> <newName>';
|
|
12
12
|
exports.describe = i18n(`${i18nKey}.describe`);
|
|
13
13
|
exports.handler = async (options) => {
|
|
14
14
|
loadAndValidateOptions(options);
|
|
15
|
-
const { accountName, newName } = options;
|
|
16
|
-
|
|
17
|
-
trackCommandUsage('accounts-rename', null, accountId);
|
|
15
|
+
const { accountName, newName, derivedAccountId } = options;
|
|
16
|
+
trackCommandUsage('accounts-rename', null, derivedAccountId);
|
|
18
17
|
await renameAccount(accountName, newName);
|
|
19
18
|
return logger.log(i18n(`${i18nKey}.success.renamed`, {
|
|
20
19
|
name: accountName,
|
|
@@ -7,8 +7,8 @@ const { trackCommandUsage } = require('../../lib/usageTracking');
|
|
|
7
7
|
const { i18n } = require('../../lib/lang');
|
|
8
8
|
const { selectAccountFromConfig } = require('../../lib/prompts/accountsPrompt');
|
|
9
9
|
const { loadAndValidateOptions } = require('../../lib/validation');
|
|
10
|
-
const i18nKey = 'commands.
|
|
11
|
-
exports.command = 'use [
|
|
10
|
+
const i18nKey = 'commands.account.subcommands.use';
|
|
11
|
+
exports.command = 'use [account]';
|
|
12
12
|
exports.describe = i18n(`${i18nKey}.describe`);
|
|
13
13
|
exports.handler = async (options) => {
|
|
14
14
|
await loadAndValidateOptions(options, false);
|
|
@@ -31,17 +31,14 @@ exports.handler = async (options) => {
|
|
|
31
31
|
}));
|
|
32
32
|
};
|
|
33
33
|
exports.builder = yargs => {
|
|
34
|
-
yargs.
|
|
34
|
+
yargs.positional('account', {
|
|
35
35
|
describe: i18n(`${i18nKey}.options.account.describe`),
|
|
36
36
|
type: 'string',
|
|
37
37
|
});
|
|
38
38
|
yargs.example([
|
|
39
39
|
['$0 accounts use', i18n(`${i18nKey}.examples.default`)],
|
|
40
|
-
[
|
|
41
|
-
|
|
42
|
-
i18n(`${i18nKey}.examples.nameBased`),
|
|
43
|
-
],
|
|
44
|
-
['$0 accounts use --account=1234567', i18n(`${i18nKey}.examples.idBased`)],
|
|
40
|
+
['$0 accounts use MyAccount', i18n(`${i18nKey}.examples.nameBased`)],
|
|
41
|
+
['$0 accounts use 1234567', i18n(`${i18nKey}.examples.idBased`)],
|
|
45
42
|
]);
|
|
46
43
|
return yargs;
|
|
47
44
|
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
// @ts-nocheck
|
|
4
|
+
const { addGlobalOptions } = require('../lib/commonOpts');
|
|
5
|
+
const { i18n } = require('../lib/lang');
|
|
6
|
+
const list = require('./account/list');
|
|
7
|
+
const rename = require('./account/rename');
|
|
8
|
+
const use = require('./account/use');
|
|
9
|
+
const info = require('./account/info');
|
|
10
|
+
const remove = require('./account/remove');
|
|
11
|
+
const clean = require('./account/clean');
|
|
12
|
+
const i18nKey = 'commands.account';
|
|
13
|
+
exports.command = ['account', 'accounts'];
|
|
14
|
+
exports.describe = i18n(`${i18nKey}.describe`);
|
|
15
|
+
exports.builder = yargs => {
|
|
16
|
+
addGlobalOptions(yargs);
|
|
17
|
+
yargs
|
|
18
|
+
.command(list)
|
|
19
|
+
.command(rename)
|
|
20
|
+
.command(use)
|
|
21
|
+
.command(info)
|
|
22
|
+
.command(remove)
|
|
23
|
+
.command(clean)
|
|
24
|
+
.demandCommand(1, '');
|
|
25
|
+
return yargs;
|
|
26
|
+
};
|
package/commands/auth.js
CHANGED
|
@@ -8,13 +8,13 @@ const { ENVIRONMENTS, } = require('@hubspot/local-dev-lib/constants/environments
|
|
|
8
8
|
const { DEFAULT_HUBSPOT_CONFIG_YAML_FILE_NAME, } = require('@hubspot/local-dev-lib/constants/config');
|
|
9
9
|
const { i18n } = require('../lib/lang');
|
|
10
10
|
const { getAccessToken, updateConfigWithAccessToken, } = require('@hubspot/local-dev-lib/personalAccessKey');
|
|
11
|
-
const { updateAccountConfig, writeConfig, getConfig, getConfigPath, loadConfig, } = require('@hubspot/local-dev-lib/config');
|
|
11
|
+
const { updateAccountConfig, writeConfig, getConfig, getConfigPath, loadConfig, getConfigDefaultAccount, } = require('@hubspot/local-dev-lib/config');
|
|
12
12
|
const { commaSeparatedValues, toKebabCase, } = require('@hubspot/local-dev-lib/text');
|
|
13
13
|
const { promptUser } = require('../lib/prompts/promptUtils');
|
|
14
14
|
const { personalAccessKeyPrompt, OAUTH_FLOW, } = require('../lib/prompts/personalAccessKeyPrompt');
|
|
15
15
|
const { cliAccountNamePrompt } = require('../lib/prompts/accountNamePrompt');
|
|
16
16
|
const { setAsDefaultAccountPrompt, } = require('../lib/prompts/setAsDefaultAccountPrompt');
|
|
17
|
-
const { addConfigOptions, setLogLevel, getAccountId, addTestingOptions, } = require('../lib/commonOpts');
|
|
17
|
+
const { addConfigOptions, setLogLevel, getAccountId, addTestingOptions, addGlobalOptions, } = require('../lib/commonOpts');
|
|
18
18
|
const { trackAuthAction, trackCommandUsage } = require('../lib/usageTracking');
|
|
19
19
|
const { authenticateWithOauth } = require('../lib/oauth');
|
|
20
20
|
const { EXIT_CODES } = require('../lib/enums/exitCodes');
|
|
@@ -31,21 +31,23 @@ const ALLOWED_AUTH_METHODS = [
|
|
|
31
31
|
PERSONAL_ACCESS_KEY_AUTH_METHOD.value,
|
|
32
32
|
];
|
|
33
33
|
const SUPPORTED_AUTHENTICATION_PROTOCOLS_TEXT = commaSeparatedValues(ALLOWED_AUTH_METHODS);
|
|
34
|
-
exports.command = 'auth
|
|
34
|
+
exports.command = 'auth';
|
|
35
35
|
exports.describe = i18n(`${i18nKey}.describe`, {
|
|
36
36
|
supportedProtocols: SUPPORTED_AUTHENTICATION_PROTOCOLS_TEXT,
|
|
37
37
|
});
|
|
38
38
|
exports.handler = async (options) => {
|
|
39
|
-
const {
|
|
40
|
-
const authType = (
|
|
39
|
+
const { authType: authTypeFlagValue, config: configFlagValue, qa, providedAccountId, } = options;
|
|
40
|
+
const authType = (authTypeFlagValue && authTypeFlagValue.toLowerCase()) ||
|
|
41
|
+
PERSONAL_ACCESS_KEY_AUTH_METHOD.value;
|
|
41
42
|
setLogLevel(options);
|
|
42
|
-
|
|
43
|
+
const env = qa ? ENVIRONMENTS.QA : ENVIRONMENTS.PROD;
|
|
44
|
+
// Needed to load deprecated config
|
|
45
|
+
loadConfig(configFlagValue);
|
|
46
|
+
checkAndWarnGitInclusion(getConfigPath());
|
|
47
|
+
if (!getConfigPath(configFlagValue)) {
|
|
43
48
|
logger.error(i18n(`${i18nKey}.errors.noConfigFileFound`));
|
|
44
49
|
process.exit(EXIT_CODES.ERROR);
|
|
45
50
|
}
|
|
46
|
-
const env = qa ? ENVIRONMENTS.QA : ENVIRONMENTS.PROD;
|
|
47
|
-
loadConfig(c);
|
|
48
|
-
checkAndWarnGitInclusion(getConfigPath());
|
|
49
51
|
trackCommandUsage('auth');
|
|
50
52
|
trackAuthAction('auth', authType, TRACKING_STATUS.STARTED);
|
|
51
53
|
let configData;
|
|
@@ -64,7 +66,10 @@ exports.handler = async (options) => {
|
|
|
64
66
|
successAuthMethod = OAUTH_AUTH_METHOD.name;
|
|
65
67
|
break;
|
|
66
68
|
case PERSONAL_ACCESS_KEY_AUTH_METHOD.value:
|
|
67
|
-
configData = await personalAccessKeyPrompt({
|
|
69
|
+
configData = await personalAccessKeyPrompt({
|
|
70
|
+
env,
|
|
71
|
+
account: providedAccountId,
|
|
72
|
+
});
|
|
68
73
|
try {
|
|
69
74
|
token = await getAccessToken(configData.personalAccessKey, env);
|
|
70
75
|
defaultName = toKebabCase(token.hubName);
|
|
@@ -112,7 +117,7 @@ exports.handler = async (options) => {
|
|
|
112
117
|
else {
|
|
113
118
|
const config = getConfig();
|
|
114
119
|
logger.info(i18n(`lib.prompts.setAsDefaultAccountPrompt.keepingCurrentDefault`, {
|
|
115
|
-
accountName: config
|
|
120
|
+
accountName: getConfigDefaultAccount(config),
|
|
116
121
|
}));
|
|
117
122
|
}
|
|
118
123
|
logger.success(i18n(`${i18nKey}.success.configFileUpdated`, {
|
|
@@ -130,25 +135,27 @@ exports.handler = async (options) => {
|
|
|
130
135
|
process.exit(EXIT_CODES.SUCCESS);
|
|
131
136
|
};
|
|
132
137
|
exports.builder = yargs => {
|
|
133
|
-
yargs.positional('type', {
|
|
134
|
-
describe: i18n(`${i18nKey}.positionals.type.describe`),
|
|
135
|
-
type: 'string',
|
|
136
|
-
choices: [
|
|
137
|
-
`${PERSONAL_ACCESS_KEY_AUTH_METHOD.value}`,
|
|
138
|
-
`${OAUTH_AUTH_METHOD.value}`,
|
|
139
|
-
],
|
|
140
|
-
default: PERSONAL_ACCESS_KEY_AUTH_METHOD.value,
|
|
141
|
-
defaultDescription: i18n(`${i18nKey}.positionals.type.defaultDescription`, {
|
|
142
|
-
authMethod: PERSONAL_ACCESS_KEY_AUTH_METHOD.value,
|
|
143
|
-
}),
|
|
144
|
-
});
|
|
145
138
|
yargs.options({
|
|
139
|
+
'auth-type': {
|
|
140
|
+
describe: i18n(`${i18nKey}.options.authType.describe`),
|
|
141
|
+
type: 'string',
|
|
142
|
+
choices: [
|
|
143
|
+
`${PERSONAL_ACCESS_KEY_AUTH_METHOD.value}`,
|
|
144
|
+
`${OAUTH_AUTH_METHOD.value}`,
|
|
145
|
+
],
|
|
146
|
+
default: PERSONAL_ACCESS_KEY_AUTH_METHOD.value,
|
|
147
|
+
defaultDescription: i18n(`${i18nKey}.options.authType.defaultDescription`, {
|
|
148
|
+
authMethod: PERSONAL_ACCESS_KEY_AUTH_METHOD.value,
|
|
149
|
+
}),
|
|
150
|
+
},
|
|
146
151
|
account: {
|
|
147
152
|
describe: i18n(`${i18nKey}.options.account.describe`),
|
|
148
153
|
type: 'string',
|
|
154
|
+
alias: 'a',
|
|
149
155
|
},
|
|
150
156
|
});
|
|
151
157
|
addConfigOptions(yargs);
|
|
152
158
|
addTestingOptions(yargs);
|
|
159
|
+
addGlobalOptions(yargs);
|
|
153
160
|
return yargs;
|
|
154
161
|
};
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
// @ts-nocheck
|
|
4
|
+
const fs = require('fs');
|
|
5
|
+
const path = require('path');
|
|
6
|
+
const { getCwd } = require('@hubspot/local-dev-lib/path');
|
|
7
|
+
const { logger } = require('@hubspot/local-dev-lib/logger');
|
|
8
|
+
const { retrieveDefaultModule } = require('@hubspot/local-dev-lib/cms/modules');
|
|
9
|
+
const { i18n } = require('../../lib/lang');
|
|
10
|
+
const { logError } = require('../../lib/errorHandlers/index');
|
|
11
|
+
const { trackCommandUsage } = require('../../lib/usageTracking');
|
|
12
|
+
const { listPrompt } = require('../../lib/prompts/promptUtils');
|
|
13
|
+
const { EXIT_CODES } = require('../../lib/enums/exitCodes');
|
|
14
|
+
const i18nKey = 'commands.cms.subcommands.getReactModule';
|
|
15
|
+
exports.command = 'get-react-module [name] [dest]';
|
|
16
|
+
exports.describe = i18n(`${i18nKey}.describe`);
|
|
17
|
+
exports.handler = async (options) => {
|
|
18
|
+
const { name, dest } = options;
|
|
19
|
+
trackCommandUsage('get-react-modules');
|
|
20
|
+
let moduleToRetrieve = name;
|
|
21
|
+
if (!moduleToRetrieve) {
|
|
22
|
+
let availableModules;
|
|
23
|
+
try {
|
|
24
|
+
availableModules = await retrieveDefaultModule(null, '');
|
|
25
|
+
}
|
|
26
|
+
catch (e) {
|
|
27
|
+
logError(e);
|
|
28
|
+
}
|
|
29
|
+
const moduleChoice = await listPrompt(i18n(`${i18nKey}.selectModulePrompt`), {
|
|
30
|
+
choices: availableModules.map(module => module.name),
|
|
31
|
+
});
|
|
32
|
+
moduleToRetrieve = moduleChoice;
|
|
33
|
+
}
|
|
34
|
+
const destPath = dest
|
|
35
|
+
? path.join(path.resolve(getCwd(), dest), `${moduleToRetrieve}`)
|
|
36
|
+
: path.join(getCwd(), `${moduleToRetrieve}`);
|
|
37
|
+
if (fs.existsSync(destPath)) {
|
|
38
|
+
logger.error(i18n(`${i18nKey}.errors.pathExists`, {
|
|
39
|
+
path: destPath,
|
|
40
|
+
}));
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
await retrieveDefaultModule(moduleToRetrieve, destPath);
|
|
45
|
+
logger.success(i18n(`${i18nKey}.success.moduleDownloaded`, {
|
|
46
|
+
moduleName: moduleToRetrieve,
|
|
47
|
+
path: destPath,
|
|
48
|
+
}));
|
|
49
|
+
}
|
|
50
|
+
catch (e) {
|
|
51
|
+
if (e.cause && e.cause.code === 'ERR_BAD_REQUEST') {
|
|
52
|
+
logger.error(i18n(`${i18nKey}.errors.invalidName`));
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
logError(e);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
process.exit(EXIT_CODES.SUCCESS);
|
|
59
|
+
};
|
|
60
|
+
exports.builder = yargs => {
|
|
61
|
+
yargs.positional('name', {
|
|
62
|
+
describe: i18n(`${i18nKey}.positionals.name.describe`),
|
|
63
|
+
type: 'string',
|
|
64
|
+
});
|
|
65
|
+
yargs.positional('dest', {
|
|
66
|
+
describe: i18n(`${i18nKey}.positionals.dest.describe`),
|
|
67
|
+
type: 'string',
|
|
68
|
+
});
|
|
69
|
+
return yargs;
|
|
70
|
+
};
|