@hubspot/cli 7.0.0-experimental.0 → 7.0.0-experimental.1

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