@hubspot/cli 6.2.2-experimental.2 → 6.3.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.
Files changed (70) hide show
  1. package/bin/cli.js +21 -2
  2. package/commands/accounts/clean.js +8 -5
  3. package/commands/accounts/info.js +6 -6
  4. package/commands/accounts/list.js +14 -10
  5. package/commands/accounts/remove.js +1 -1
  6. package/commands/accounts/rename.js +3 -4
  7. package/commands/auth.js +11 -7
  8. package/commands/cms/lighthouseScore.js +19 -19
  9. package/commands/config/set.js +4 -5
  10. package/commands/create.js +3 -2
  11. package/commands/customObject/create.js +4 -6
  12. package/commands/customObject/schema/create.js +8 -9
  13. package/commands/customObject/schema/delete.js +3 -5
  14. package/commands/customObject/schema/fetch-all.js +3 -4
  15. package/commands/customObject/schema/fetch.js +4 -6
  16. package/commands/customObject/schema/list.js +3 -4
  17. package/commands/customObject/schema/update.js +8 -9
  18. package/commands/fetch.js +4 -4
  19. package/commands/filemanager/fetch.js +4 -5
  20. package/commands/filemanager/upload.js +9 -10
  21. package/commands/functions/deploy.js +12 -10
  22. package/commands/functions/list.js +5 -5
  23. package/commands/functions/server.js +4 -5
  24. package/commands/hubdb/clear.js +5 -6
  25. package/commands/hubdb/create.js +5 -6
  26. package/commands/hubdb/delete.js +5 -6
  27. package/commands/hubdb/fetch.js +4 -5
  28. package/commands/init.js +26 -8
  29. package/commands/lint.js +5 -5
  30. package/commands/list.js +4 -5
  31. package/commands/logs.js +4 -5
  32. package/commands/module/marketplace-validate.js +6 -7
  33. package/commands/mv.js +7 -8
  34. package/commands/open.js +7 -8
  35. package/commands/project/add.js +2 -3
  36. package/commands/project/cloneApp.js +14 -14
  37. package/commands/project/create.js +3 -3
  38. package/commands/project/deploy.js +15 -12
  39. package/commands/project/dev.js +13 -13
  40. package/commands/project/download.js +11 -9
  41. package/commands/project/listBuilds.js +10 -8
  42. package/commands/project/logs.js +5 -5
  43. package/commands/project/migrateApp.js +18 -18
  44. package/commands/project/open.js +6 -7
  45. package/commands/project/upload.js +12 -10
  46. package/commands/project/watch.js +9 -10
  47. package/commands/remove.js +10 -8
  48. package/commands/sandbox/create.js +8 -9
  49. package/commands/sandbox/delete.js +11 -9
  50. package/commands/secrets/addSecret.js +6 -7
  51. package/commands/secrets/deleteSecret.js +6 -7
  52. package/commands/secrets/listSecrets.js +6 -6
  53. package/commands/secrets/updateSecret.js +6 -7
  54. package/commands/theme/marketplace-validate.js +6 -7
  55. package/commands/theme/preview.js +5 -6
  56. package/commands/upload.js +18 -15
  57. package/commands/watch.js +9 -10
  58. package/lang/en.lyaml +3 -0
  59. package/lib/buildAccount.js +3 -1
  60. package/lib/commonOpts.d.ts +9 -1
  61. package/lib/commonOpts.js +14 -12
  62. package/lib/developerTestAccounts.js +8 -5
  63. package/lib/oauth.js +3 -1
  64. package/lib/prompts/accountsPrompt.js +8 -4
  65. package/lib/prompts/projectDevTargetAccountPrompt.js +3 -2
  66. package/lib/prompts/sandboxesPrompt.js +10 -7
  67. package/lib/prompts/setAsDefaultAccountPrompt.js +4 -2
  68. package/lib/sandboxSync.js +5 -2
  69. package/lib/sandboxes.js +12 -7
  70. package/package.json +1 -1
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  // @ts-nocheck
4
4
  const path = require('path');
5
- const { addAccountOptions, addConfigOptions, getAccountId, addUseEnvironmentOptions, } = require('../../lib/commonOpts');
5
+ const { addAccountOptions, addConfigOptions, addUseEnvironmentOptions, } = require('../../lib/commonOpts');
6
6
  const { trackCommandUsage, trackCommandMetadataUsage, } = require('../../lib/usageTracking');
7
7
  const { loadAndValidateOptions } = require('../../lib/validation');
8
8
  const { createProjectPrompt, } = require('../../lib/prompts/createProjectPrompt');
@@ -30,10 +30,10 @@ exports.command = 'migrate-app';
30
30
  exports.describe = uiBetaTag(i18n(`${i18nKey}.describe`), false);
31
31
  exports.handler = async (options) => {
32
32
  await loadAndValidateOptions(options);
33
- const accountId = getAccountId(options);
34
- const accountConfig = getAccountConfig(accountId);
35
- const accountName = uiAccountDescription(accountId);
36
- trackCommandUsage('migrate-app', {}, accountId);
33
+ const { derivedAccountId } = options;
34
+ const accountConfig = getAccountConfig(derivedAccountId);
35
+ const accountName = uiAccountDescription(derivedAccountId);
36
+ trackCommandUsage('migrate-app', {}, derivedAccountId);
37
37
  logger.log('');
38
38
  logger.log(uiBetaTag(i18n(`${i18nKey}.header.text`), false));
39
39
  logger.log(uiLink(i18n(`${i18nKey}.header.link`), 'https://developers.hubspot.com/docs/platform/migrate-a-public-app-to-projects'));
@@ -51,12 +51,12 @@ exports.handler = async (options) => {
51
51
  const { appId } = 'appId' in options
52
52
  ? options
53
53
  : await selectPublicAppPrompt({
54
- accountId,
54
+ accountId: derivedAccountId,
55
55
  accountName,
56
56
  isMigratingApp: true,
57
57
  });
58
58
  try {
59
- const { data: selectedApp } = await fetchPublicAppMetadata(appId, accountId);
59
+ const { data: selectedApp } = await fetchPublicAppMetadata(appId, derivedAccountId);
60
60
  // preventProjectMigrations returns true if we have not added app to allowlist config.
61
61
  // listingInfo will only exist for marketplace apps
62
62
  const preventProjectMigrations = selectedApp.preventProjectMigrations;
@@ -67,7 +67,7 @@ exports.handler = async (options) => {
67
67
  }
68
68
  }
69
69
  catch (error) {
70
- logError(error, new ApiErrorContext({ accountId }));
70
+ logError(error, new ApiErrorContext({ accountId: derivedAccountId }));
71
71
  process.exit(EXIT_CODES.ERROR);
72
72
  }
73
73
  let projectName;
@@ -76,7 +76,7 @@ exports.handler = async (options) => {
76
76
  const { name, location } = await createProjectPrompt('', options, true);
77
77
  projectName = options.name || name;
78
78
  projectLocation = options.location || location;
79
- const { projectExists } = await ensureProjectExists(accountId, projectName, {
79
+ const { projectExists } = await ensureProjectExists(derivedAccountId, projectName, {
80
80
  allowCreate: false,
81
81
  noLogs: true,
82
82
  });
@@ -88,7 +88,7 @@ exports.handler = async (options) => {
88
88
  }
89
89
  }
90
90
  catch (error) {
91
- logError(error, new ApiErrorContext({ accountId }));
91
+ logError(error, new ApiErrorContext({ accountId: derivedAccountId }));
92
92
  process.exit(EXIT_CODES.ERROR);
93
93
  }
94
94
  logger.log('');
@@ -125,17 +125,17 @@ exports.handler = async (options) => {
125
125
  process.exit(EXIT_CODES.SUCCESS);
126
126
  }
127
127
  });
128
- const { data: migrateResponse } = await migrateApp(accountId, appId, projectName);
128
+ const { data: migrateResponse } = await migrateApp(derivedAccountId, appId, projectName);
129
129
  const { id } = migrateResponse;
130
- const pollResponse = await poll(checkMigrationStatus, accountId, id);
130
+ const pollResponse = await poll(checkMigrationStatus, derivedAccountId, id);
131
131
  const { status, project } = pollResponse;
132
132
  if (status === 'SUCCESS') {
133
133
  const absoluteDestPath = path.resolve(getCwd(), projectLocation);
134
- const { env } = getAccountConfig(accountId);
134
+ const { env } = accountConfig;
135
135
  const baseUrl = getHubSpotWebsiteOrigin(env);
136
- const { data: zippedProject } = await downloadProject(accountId, projectName, 1);
136
+ const { data: zippedProject } = await downloadProject(derivedAccountId, projectName, 1);
137
137
  await extractZipArchive(zippedProject, sanitizeFileName(projectName), path.resolve(absoluteDestPath), { includesRootDir: true, hideLogs: true });
138
- trackCommandMetadataUsage('migrate-app', { type: projectName, assetType: appId, successful: status }, accountId);
138
+ trackCommandMetadataUsage('migrate-app', { type: projectName, assetType: appId, successful: status }, derivedAccountId);
139
139
  SpinniesManager.succeed('migrateApp', {
140
140
  text: i18n(`${i18nKey}.migrationStatus.done`),
141
141
  succeedColor: 'white',
@@ -144,12 +144,12 @@ exports.handler = async (options) => {
144
144
  uiLine();
145
145
  logger.success(i18n(`${i18nKey}.migrationStatus.success`));
146
146
  logger.log('');
147
- logger.log(uiLink(i18n(`${i18nKey}.projectDetailsLink`), `${baseUrl}/developer-projects/${accountId}/project/${encodeURIComponent(project.name)}`));
147
+ logger.log(uiLink(i18n(`${i18nKey}.projectDetailsLink`), `${baseUrl}/developer-projects/${derivedAccountId}/project/${encodeURIComponent(project.name)}`));
148
148
  process.exit(EXIT_CODES.SUCCESS);
149
149
  }
150
150
  }
151
151
  catch (error) {
152
- trackCommandMetadataUsage('migrate-app', { projectName, appId, status: 'FAILURE', error }, accountId);
152
+ trackCommandMetadataUsage('migrate-app', { projectName, appId, status: 'FAILURE', error }, derivedAccountId);
153
153
  SpinniesManager.fail('migrateApp', {
154
154
  text: i18n(`${i18nKey}.migrationStatus.failure`),
155
155
  failColor: 'white',
@@ -158,7 +158,7 @@ exports.handler = async (options) => {
158
158
  error.errors.forEach(logError);
159
159
  }
160
160
  else {
161
- logError(error, new ApiErrorContext({ accountId }));
161
+ logError(error, new ApiErrorContext({ accountId: derivedAccountId }));
162
162
  }
163
163
  process.exit(EXIT_CODES.ERROR);
164
164
  }
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  // @ts-nocheck
4
4
  const open = require('open');
5
- const { addAccountOptions, addConfigOptions, getAccountId, addUseEnvironmentOptions, addTestingOptions, } = require('../../lib/commonOpts');
5
+ const { addAccountOptions, addConfigOptions, addUseEnvironmentOptions, addTestingOptions, } = require('../../lib/commonOpts');
6
6
  const { trackCommandUsage } = require('../../lib/usageTracking');
7
7
  const { loadAndValidateOptions } = require('../../lib/validation');
8
8
  const { i18n } = require('../../lib/lang');
@@ -16,13 +16,12 @@ exports.command = 'open [--project]';
16
16
  exports.describe = uiBetaTag(i18n(`${i18nKey}.describe`), false);
17
17
  exports.handler = async (options) => {
18
18
  await loadAndValidateOptions(options);
19
- const accountId = getAccountId(options);
20
- const { project } = options;
21
- trackCommandUsage('project-open', null, accountId);
19
+ const { project, derivedAccountId } = options;
20
+ trackCommandUsage('project-open', null, derivedAccountId);
22
21
  const { projectConfig } = await getProjectConfig();
23
22
  let projectName = project;
24
23
  if (projectName) {
25
- const { projectExists } = await ensureProjectExists(accountId, projectName, {
24
+ const { projectExists } = await ensureProjectExists(derivedAccountId, projectName, {
26
25
  allowCreate: false,
27
26
  });
28
27
  if (!projectExists) {
@@ -33,13 +32,13 @@ exports.handler = async (options) => {
33
32
  projectName = projectConfig.name;
34
33
  }
35
34
  else if (!projectName && !projectConfig) {
36
- const namePrompt = await projectNamePrompt(accountId);
35
+ const namePrompt = await projectNamePrompt(derivedAccountId);
37
36
  if (!namePrompt.projectName) {
38
37
  process.exit(EXIT_CODES.ERROR);
39
38
  }
40
39
  projectName = namePrompt.projectName;
41
40
  }
42
- const url = getProjectDetailUrl(projectName, accountId);
41
+ const url = getProjectDetailUrl(projectName, derivedAccountId);
43
42
  open(url, { url: true });
44
43
  logger.success(i18n(`${i18nKey}.success`, { projectName }));
45
44
  process.exit(EXIT_CODES.SUCCESS);
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  // @ts-nocheck
4
- const { addAccountOptions, addConfigOptions, getAccountId, addUseEnvironmentOptions, } = require('../../lib/commonOpts');
4
+ const { addAccountOptions, addConfigOptions, addUseEnvironmentOptions, } = require('../../lib/commonOpts');
5
5
  const chalk = require('chalk');
6
6
  const { logger } = require('@hubspot/local-dev-lib/logger');
7
7
  const { uiBetaTag, uiCommandReference } = require('../../lib/ui');
@@ -19,19 +19,18 @@ exports.command = 'upload [path] [--forceCreate] [--message]';
19
19
  exports.describe = uiBetaTag(i18n(`${i18nKey}.describe`), false);
20
20
  exports.handler = async (options) => {
21
21
  await loadAndValidateOptions(options);
22
- const { forceCreate, path: projectPath, message } = options;
23
- const accountId = getAccountId(options);
24
- const accountConfig = getAccountConfig(accountId);
22
+ const { forceCreate, path: projectPath, message, derivedAccountId } = options;
23
+ const accountConfig = getAccountConfig(derivedAccountId);
25
24
  const accountType = accountConfig && accountConfig.accountType;
26
- trackCommandUsage('project-upload', { type: accountType }, accountId);
25
+ trackCommandUsage('project-upload', { type: accountType }, derivedAccountId);
27
26
  const { projectConfig, projectDir } = await getProjectConfig(projectPath);
28
27
  validateProjectConfig(projectConfig, projectDir);
29
- await ensureProjectExists(accountId, projectConfig.name, {
28
+ await ensureProjectExists(derivedAccountId, projectConfig.name, {
30
29
  forceCreate,
31
30
  uploadCommand: true,
32
31
  });
33
32
  try {
34
- const result = await handleProjectUpload(accountId, projectConfig, projectDir, pollProjectBuildAndDeploy, message);
33
+ const result = await handleProjectUpload(derivedAccountId, projectConfig, projectDir, pollProjectBuildAndDeploy, message);
35
34
  if (result.uploadError) {
36
35
  if (isSpecifiedError(result.uploadError, {
37
36
  subCategory: PROJECT_ERROR_TYPES.PROJECT_LOCKED,
@@ -42,7 +41,7 @@ exports.handler = async (options) => {
42
41
  }
43
42
  else {
44
43
  logError(result.uploadError, new ApiErrorContext({
45
- accountId,
44
+ accountId: derivedAccountId,
46
45
  request: 'project upload',
47
46
  }));
48
47
  }
@@ -56,12 +55,15 @@ exports.handler = async (options) => {
56
55
  deployCommand: uiCommandReference(`hs project deploy --build=${result.buildId}`),
57
56
  }));
58
57
  logFeedbackMessage(result.buildId);
59
- await displayWarnLogs(accountId, projectConfig.name, result.buildId);
58
+ await displayWarnLogs(derivedAccountId, projectConfig.name, result.buildId);
60
59
  process.exit(EXIT_CODES.SUCCESS);
61
60
  }
62
61
  }
63
62
  catch (e) {
64
- logError(e, new ApiErrorContext({ accountId, request: 'project upload' }));
63
+ logError(e, new ApiErrorContext({
64
+ accountId: derivedAccountId,
65
+ request: 'project upload',
66
+ }));
65
67
  process.exit(EXIT_CODES.ERROR);
66
68
  }
67
69
  };
@@ -6,7 +6,7 @@ const { createWatcher } = require('../../lib/projectsWatch');
6
6
  const { logError, ApiErrorContext } = require('../../lib/errorHandlers/index');
7
7
  const { logger } = require('@hubspot/local-dev-lib/logger');
8
8
  const { PROJECT_ERROR_TYPES } = require('../../lib/constants');
9
- const { addAccountOptions, addConfigOptions, getAccountId, addUseEnvironmentOptions, } = require('../../lib/commonOpts');
9
+ const { addAccountOptions, addConfigOptions, addUseEnvironmentOptions, } = require('../../lib/commonOpts');
10
10
  const { trackCommandUsage } = require('../../lib/usageTracking');
11
11
  const { uiBetaTag } = require('../../lib/ui');
12
12
  const { ensureProjectExists, getProjectConfig, handleProjectUpload, pollBuildStatus, pollDeployStatus, validateProjectConfig, logFeedbackMessage, } = require('../../lib/projects');
@@ -58,21 +58,20 @@ const handleUserInput = (accountId, projectName, currentBuildId) => {
58
58
  };
59
59
  exports.handler = async (options) => {
60
60
  await loadAndValidateOptions(options);
61
- const { initialUpload, path: projectPath } = options;
62
- const accountId = getAccountId(options);
63
- trackCommandUsage('project-watch', null, accountId);
61
+ const { initialUpload, path: projectPath, derivedAccountId } = options;
62
+ trackCommandUsage('project-watch', null, derivedAccountId);
64
63
  const { projectConfig, projectDir } = await getProjectConfig(projectPath);
65
64
  validateProjectConfig(projectConfig, projectDir);
66
- await ensureProjectExists(accountId, projectConfig.name);
65
+ await ensureProjectExists(derivedAccountId, projectConfig.name);
67
66
  try {
68
- const { data: { results: builds }, } = await fetchProjectBuilds(accountId, projectConfig.name, options);
67
+ const { data: { results: builds }, } = await fetchProjectBuilds(derivedAccountId, projectConfig.name, options);
69
68
  const hasNoBuilds = !builds || !builds.length;
70
69
  const startWatching = async () => {
71
- await createWatcher(accountId, projectConfig, projectDir, handleBuildStatus, handleUserInput);
70
+ await createWatcher(derivedAccountId, projectConfig, projectDir, handleBuildStatus, handleUserInput);
72
71
  };
73
72
  // Upload all files if no build exists for this project yet
74
73
  if (initialUpload || hasNoBuilds) {
75
- const result = await handleProjectUpload(accountId, projectConfig, projectDir, startWatching);
74
+ const result = await handleProjectUpload(derivedAccountId, projectConfig, projectDir, startWatching);
76
75
  if (result.uploadError) {
77
76
  if (isSpecifiedError(result.uploadError, {
78
77
  subCategory: PROJECT_ERROR_TYPES.PROJECT_LOCKED,
@@ -83,7 +82,7 @@ exports.handler = async (options) => {
83
82
  }
84
83
  else {
85
84
  logError(result.uploadError, new ApiErrorContext({
86
- accountId,
85
+ accountId: derivedAccountId,
87
86
  request: 'project upload',
88
87
  }));
89
88
  }
@@ -95,7 +94,7 @@ exports.handler = async (options) => {
95
94
  }
96
95
  }
97
96
  catch (e) {
98
- logError(e, new ApiErrorContext({ accountId }));
97
+ logError(e, new ApiErrorContext({ accountId: derivedAccountId }));
99
98
  }
100
99
  };
101
100
  exports.builder = yargs => {
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
4
4
  const { deleteFile } = require('@hubspot/local-dev-lib/api/fileMapper');
5
5
  const { logger } = require('@hubspot/local-dev-lib/logger');
6
6
  const { logError, ApiErrorContext } = require('../lib/errorHandlers/index');
7
- const { addConfigOptions, addAccountOptions, addUseEnvironmentOptions, getAccountId, } = require('../lib/commonOpts');
7
+ const { addConfigOptions, addAccountOptions, addUseEnvironmentOptions, } = require('../lib/commonOpts');
8
8
  const { loadAndValidateOptions } = require('../lib/validation');
9
9
  const { trackCommandUsage } = require('../lib/usageTracking');
10
10
  const { i18n } = require('../lib/lang');
@@ -12,18 +12,20 @@ const i18nKey = 'commands.remove';
12
12
  exports.command = 'remove <path>';
13
13
  exports.describe = i18n(`${i18nKey}.describe`);
14
14
  exports.handler = async (options) => {
15
- const { path: hsPath } = options;
15
+ const { path: hsPath, derivedAccountId } = options;
16
16
  await loadAndValidateOptions(options);
17
- const accountId = getAccountId(options);
18
- trackCommandUsage('remove', null, accountId);
17
+ trackCommandUsage('remove', null, derivedAccountId);
19
18
  try {
20
- await deleteFile(accountId, hsPath);
21
- logger.log(i18n(`${i18nKey}.deleted`, { accountId, path: hsPath }));
19
+ await deleteFile(derivedAccountId, hsPath);
20
+ logger.log(i18n(`${i18nKey}.deleted`, { accountId: derivedAccountId, path: hsPath }));
22
21
  }
23
22
  catch (error) {
24
- logger.error(i18n(`${i18nKey}.errors.deleteFailed`, { accountId, path: hsPath }));
23
+ logger.error(i18n(`${i18nKey}.errors.deleteFailed`, {
24
+ accountId: derivedAccountId,
25
+ path: hsPath,
26
+ }));
25
27
  logError(error, new ApiErrorContext({
26
- accountId,
28
+ accountId: derivedAccountId,
27
29
  request: hsPath,
28
30
  }));
29
31
  }
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  // @ts-nocheck
4
- const { addAccountOptions, addConfigOptions, getAccountId, addUseEnvironmentOptions, addTestingOptions, } = require('../../lib/commonOpts');
4
+ const { addAccountOptions, addConfigOptions, addUseEnvironmentOptions, addTestingOptions, } = require('../../lib/commonOpts');
5
5
  const { loadAndValidateOptions } = require('../../lib/validation');
6
6
  const { i18n } = require('../../lib/lang');
7
7
  const { EXIT_CODES } = require('../../lib/enums/exitCodes');
@@ -25,11 +25,10 @@ exports.command = 'create [--name] [--type]';
25
25
  exports.describe = uiBetaTag(i18n(`${i18nKey}.describe`), false);
26
26
  exports.handler = async (options) => {
27
27
  await loadAndValidateOptions(options);
28
- const { name, type, force } = options;
29
- const accountId = getAccountId(options);
30
- const accountConfig = getAccountConfig(accountId);
31
- const env = getValidEnv(getEnv(accountId));
32
- trackCommandUsage('sandbox-create', null, accountId);
28
+ const { name, type, force, derivedAccountId } = options;
29
+ const accountConfig = getAccountConfig(derivedAccountId);
30
+ const env = getValidEnv(getEnv(derivedAccountId));
31
+ trackCommandUsage('sandbox-create', null, derivedAccountId);
33
32
  // Default account is not a production portal
34
33
  if (accountConfig.accountType &&
35
34
  accountConfig.accountType !== HUBSPOT_ACCOUNT_TYPES.STANDARD) {
@@ -60,12 +59,12 @@ exports.handler = async (options) => {
60
59
  catch (err) {
61
60
  if (isMissingScopeError(err)) {
62
61
  logger.error(i18n('lib.sandbox.create.failure.scopes.message', {
63
- accountName: accountConfig.name || accountId,
62
+ accountName: accountConfig.name || derivedAccountId,
64
63
  }));
65
64
  const websiteOrigin = getHubSpotWebsiteOrigin(env);
66
- const url = `${websiteOrigin}/personal-access-key/${accountId}`;
65
+ const url = `${websiteOrigin}/personal-access-key/${derivedAccountId}`;
67
66
  logger.info(i18n('lib.sandbox.create.failure.scopes.instructions', {
68
- accountName: accountConfig.name || accountId,
67
+ accountName: accountConfig.name || derivedAccountId,
69
68
  url,
70
69
  }));
71
70
  }
@@ -10,23 +10,24 @@ const { isSpecifiedError } = require('@hubspot/local-dev-lib/errors/index');
10
10
  const { deleteSandbox } = require('@hubspot/local-dev-lib/api/sandboxHubs');
11
11
  const { i18n } = require('../../lib/lang');
12
12
  const { deleteSandboxPrompt } = require('../../lib/prompts/sandboxesPrompt');
13
- const { getConfig, getEnv, removeSandboxAccountFromConfig, updateDefaultAccount, } = require('@hubspot/local-dev-lib/config');
13
+ const { getConfig, getEnv, removeSandboxAccountFromConfig, updateDefaultAccount, getConfigDefaultAccount, getConfigAccounts, } = require('@hubspot/local-dev-lib/config');
14
+ const { getAccountIdentifier, } = require('@hubspot/local-dev-lib/config/getAccountIdentifier');
14
15
  const { selectAccountFromConfig } = require('../../lib/prompts/accountsPrompt');
15
16
  const { EXIT_CODES } = require('../../lib/enums/exitCodes');
16
17
  const { promptUser } = require('../../lib/prompts/promptUtils');
18
+ const { uiAccountDescription, uiBetaTag } = require('../../lib/ui');
17
19
  const { getHubSpotWebsiteOrigin } = require('@hubspot/local-dev-lib/urls');
18
20
  const { getValidEnv } = require('@hubspot/local-dev-lib/environment');
19
- const { uiAccountDescription, uiBetaTag } = require('../../lib/ui');
20
21
  const i18nKey = 'commands.sandbox.subcommands.delete';
21
22
  exports.command = 'delete [--account]';
22
23
  exports.describe = exports.describe = uiBetaTag(i18n(`${i18nKey}.describe`), false);
23
24
  exports.handler = async (options) => {
24
25
  await loadAndValidateOptions(options, false);
25
- const { account, force } = options;
26
+ const { providedAccountId, force } = options;
26
27
  const config = getConfig();
27
28
  trackCommandUsage('sandbox-delete', null);
28
29
  let accountPrompt;
29
- if (!account) {
30
+ if (!providedAccountId) {
30
31
  if (!force) {
31
32
  accountPrompt = await deleteSandboxPrompt(config);
32
33
  }
@@ -43,13 +44,14 @@ exports.handler = async (options) => {
43
44
  }
44
45
  }
45
46
  const sandboxAccountId = getAccountId({
46
- account: account || accountPrompt.account,
47
+ account: providedAccountId || accountPrompt.account,
47
48
  });
48
- const isDefaultAccount = sandboxAccountId === getAccountId(config.defaultPortal);
49
+ const isDefaultAccount = sandboxAccountId === getAccountId(getConfigDefaultAccount(config));
49
50
  const baseUrl = getHubSpotWebsiteOrigin(getValidEnv(getEnv(sandboxAccountId)));
50
51
  let parentAccountId;
51
- for (const portal of config.portals) {
52
- if (portal.portalId === sandboxAccountId) {
52
+ const accountsList = getConfigAccounts();
53
+ for (const portal of accountsList) {
54
+ if (getAccountIdentifier(portal) === sandboxAccountId) {
53
55
  if (portal.parentAccountId) {
54
56
  parentAccountId = portal.parentAccountId;
55
57
  }
@@ -107,7 +109,7 @@ exports.handler = async (options) => {
107
109
  : `${i18nKey}.success.delete`;
108
110
  logger.log('');
109
111
  logger.success(i18n(deleteKey, {
110
- account: account || accountPrompt.account,
112
+ account: providedAccountId || accountPrompt.account,
111
113
  sandboxHubId: sandboxAccountId,
112
114
  }));
113
115
  logger.log('');
@@ -6,7 +6,7 @@ const { logError, ApiErrorContext } = require('../../lib/errorHandlers/index');
6
6
  const { addSecret } = require('@hubspot/local-dev-lib/api/secrets');
7
7
  const { loadAndValidateOptions } = require('../../lib/validation');
8
8
  const { trackCommandUsage } = require('../../lib/usageTracking');
9
- const { addConfigOptions, addAccountOptions, addUseEnvironmentOptions, getAccountId, } = require('../../lib/commonOpts');
9
+ const { addConfigOptions, addAccountOptions, addUseEnvironmentOptions, } = require('../../lib/commonOpts');
10
10
  const { uiAccountDescription } = require('../../lib/ui');
11
11
  const { secretValuePrompt } = require('../../lib/prompts/secretPrompt');
12
12
  const { i18n } = require('../../lib/lang');
@@ -14,15 +14,14 @@ const i18nKey = 'commands.secrets.subcommands.add';
14
14
  exports.command = 'add <name>';
15
15
  exports.describe = i18n(`${i18nKey}.describe`);
16
16
  exports.handler = async (options) => {
17
- const { name: secretName } = options;
17
+ const { name: secretName, derivedAccountId } = options;
18
18
  await loadAndValidateOptions(options);
19
- const accountId = getAccountId(options);
20
- trackCommandUsage('secrets-add', null, accountId);
19
+ trackCommandUsage('secrets-add', null, derivedAccountId);
21
20
  try {
22
21
  const { secretValue } = await secretValuePrompt();
23
- await addSecret(accountId, secretName, secretValue);
22
+ await addSecret(derivedAccountId, secretName, secretValue);
24
23
  logger.success(i18n(`${i18nKey}.success.add`, {
25
- accountIdentifier: uiAccountDescription(accountId),
24
+ accountIdentifier: uiAccountDescription(derivedAccountId),
26
25
  secretName,
27
26
  }));
28
27
  }
@@ -32,7 +31,7 @@ exports.handler = async (options) => {
32
31
  }));
33
32
  logError(err, new ApiErrorContext({
34
33
  request: 'add secret',
35
- accountId,
34
+ accountId: derivedAccountId,
36
35
  }));
37
36
  }
38
37
  };
@@ -7,20 +7,19 @@ const { deleteSecret } = require('@hubspot/local-dev-lib/api/secrets');
7
7
  const { loadAndValidateOptions } = require('../../lib/validation');
8
8
  const { trackCommandUsage } = require('../../lib/usageTracking');
9
9
  const { uiAccountDescription } = require('../../lib/ui');
10
- const { addConfigOptions, addAccountOptions, addUseEnvironmentOptions, getAccountId, } = require('../../lib/commonOpts');
10
+ const { addConfigOptions, addAccountOptions, addUseEnvironmentOptions, } = require('../../lib/commonOpts');
11
11
  const { i18n } = require('../../lib/lang');
12
12
  const i18nKey = 'commands.secrets.subcommands.delete';
13
13
  exports.command = 'delete <name>';
14
14
  exports.describe = i18n(`${i18nKey}.describe`);
15
15
  exports.handler = async (options) => {
16
- const { name: secretName } = options;
16
+ const { name: secretName, derivedAccountId } = options;
17
17
  await loadAndValidateOptions(options);
18
- const accountId = getAccountId(options);
19
- trackCommandUsage('secrets-delete', null, accountId);
18
+ trackCommandUsage('secrets-delete', null, derivedAccountId);
20
19
  try {
21
- await deleteSecret(accountId, secretName);
20
+ await deleteSecret(derivedAccountId, secretName);
22
21
  logger.success(i18n(`${i18nKey}.success.delete`, {
23
- accountIdentifier: uiAccountDescription(accountId),
22
+ accountIdentifier: uiAccountDescription(derivedAccountId),
24
23
  secretName,
25
24
  }));
26
25
  }
@@ -30,7 +29,7 @@ exports.handler = async (options) => {
30
29
  }));
31
30
  logError(err, new ApiErrorContext({
32
31
  request: 'delete a secret',
33
- accountId,
32
+ accountId: derivedAccountId,
34
33
  }));
35
34
  }
36
35
  };
@@ -7,19 +7,19 @@ const { fetchSecrets } = require('@hubspot/local-dev-lib/api/secrets');
7
7
  const { loadAndValidateOptions } = require('../../lib/validation');
8
8
  const { trackCommandUsage } = require('../../lib/usageTracking');
9
9
  const { uiAccountDescription } = require('../../lib/ui');
10
- const { addConfigOptions, addAccountOptions, addUseEnvironmentOptions, getAccountId, } = require('../../lib/commonOpts');
10
+ const { addConfigOptions, addAccountOptions, addUseEnvironmentOptions, } = require('../../lib/commonOpts');
11
11
  const { i18n } = require('../../lib/lang');
12
12
  const i18nKey = 'commands.secrets.subcommands.list';
13
13
  exports.command = 'list';
14
14
  exports.describe = i18n(`${i18nKey}.describe`);
15
15
  exports.handler = async (options) => {
16
16
  await loadAndValidateOptions(options);
17
- const accountId = getAccountId(options);
18
- trackCommandUsage('secrets-list', null, accountId);
17
+ const { derivedAccountId } = options;
18
+ trackCommandUsage('secrets-list', null, derivedAccountId);
19
19
  try {
20
- const { data: { results }, } = await fetchSecrets(accountId);
20
+ const { data: { results }, } = await fetchSecrets(derivedAccountId);
21
21
  const groupLabel = i18n(`${i18nKey}.groupLabel`, {
22
- accountIdentifier: uiAccountDescription(accountId),
22
+ accountIdentifier: uiAccountDescription(derivedAccountId),
23
23
  });
24
24
  logger.group(groupLabel);
25
25
  results.forEach(secret => logger.log(secret));
@@ -29,7 +29,7 @@ exports.handler = async (options) => {
29
29
  logger.error(i18n(`${i18nKey}.errors.list`));
30
30
  logError(err, new ApiErrorContext({
31
31
  request: 'add secret',
32
- accountId,
32
+ accountId: derivedAccountId,
33
33
  }));
34
34
  }
35
35
  };
@@ -7,22 +7,21 @@ const { updateSecret } = require('@hubspot/local-dev-lib/api/secrets');
7
7
  const { loadAndValidateOptions } = require('../../lib/validation');
8
8
  const { trackCommandUsage } = require('../../lib/usageTracking');
9
9
  const { uiAccountDescription } = require('../../lib/ui');
10
- const { addConfigOptions, addAccountOptions, addUseEnvironmentOptions, getAccountId, } = require('../../lib/commonOpts');
10
+ const { addConfigOptions, addAccountOptions, addUseEnvironmentOptions, } = require('../../lib/commonOpts');
11
11
  const { secretValuePrompt } = require('../../lib/prompts/secretPrompt');
12
12
  const { i18n } = require('../../lib/lang');
13
13
  const i18nKey = 'commands.secrets.subcommands.update';
14
14
  exports.command = 'update <name>';
15
15
  exports.describe = i18n(`${i18nKey}.describe`);
16
16
  exports.handler = async (options) => {
17
- const { name: secretName } = options;
17
+ const { name: secretName, derivedAccountId } = options;
18
18
  await loadAndValidateOptions(options);
19
- const accountId = getAccountId(options);
20
- trackCommandUsage('secrets-update', null, accountId);
19
+ trackCommandUsage('secrets-update', null, derivedAccountId);
21
20
  try {
22
21
  const { secretValue } = await secretValuePrompt();
23
- await updateSecret(accountId, secretName, secretValue);
22
+ await updateSecret(derivedAccountId, secretName, secretValue);
24
23
  logger.success(i18n(`${i18nKey}.success.update`, {
25
- accountIdentifier: uiAccountDescription(accountId),
24
+ accountIdentifier: uiAccountDescription(derivedAccountId),
26
25
  secretName,
27
26
  }));
28
27
  logger.log(i18n(`${i18nKey}.success.updateExplanation`));
@@ -33,7 +32,7 @@ exports.handler = async (options) => {
33
32
  }));
34
33
  logError(err, new ApiErrorContext({
35
34
  request: 'update secret',
36
- accountId,
35
+ accountId: derivedAccountId,
37
36
  }));
38
37
  }
39
38
  };
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  // @ts-nocheck
4
4
  const SpinniesManager = require('../../lib/ui/SpinniesManager');
5
- const { addConfigOptions, addAccountOptions, addUseEnvironmentOptions, getAccountId, } = require('../../lib/commonOpts');
5
+ const { addConfigOptions, addAccountOptions, addUseEnvironmentOptions, } = require('../../lib/commonOpts');
6
6
  const { loadAndValidateOptions } = require('../../lib/validation');
7
7
  const { trackCommandUsage } = require('../../lib/usageTracking');
8
8
  const { kickOffValidation, pollForValidationFinish, fetchValidationResults, processValidationErrors, displayValidationResults, } = require('../../lib/marketplaceValidate');
@@ -11,10 +11,9 @@ const i18nKey = 'commands.theme.subcommands.marketplaceValidate';
11
11
  exports.command = 'marketplace-validate <src>';
12
12
  exports.describe = i18n(`${i18nKey}.describe`);
13
13
  exports.handler = async (options) => {
14
- const { src } = options;
14
+ const { src, derivedAccountId } = options;
15
15
  await loadAndValidateOptions(options);
16
- const accountId = getAccountId(options);
17
- trackCommandUsage('validate', null, accountId);
16
+ trackCommandUsage('validate', null, derivedAccountId);
18
17
  SpinniesManager.init();
19
18
  SpinniesManager.add('marketplaceValidation', {
20
19
  text: i18n(`${i18nKey}.logs.validatingTheme`, {
@@ -22,10 +21,10 @@ exports.handler = async (options) => {
22
21
  }),
23
22
  });
24
23
  const assetType = 'THEME';
25
- const validationId = await kickOffValidation(accountId, assetType, src);
26
- await pollForValidationFinish(accountId, validationId);
24
+ const validationId = await kickOffValidation(derivedAccountId, assetType, src);
25
+ await pollForValidationFinish(derivedAccountId, validationId);
27
26
  SpinniesManager.remove('marketplaceValidation');
28
- const validationResults = await fetchValidationResults(accountId, validationId);
27
+ const validationResults = await fetchValidationResults(derivedAccountId, validationId);
29
28
  processValidationErrors(i18nKey, validationResults);
30
29
  displayValidationResults(i18nKey, validationResults);
31
30
  process.exit();
@@ -5,7 +5,7 @@ const fs = require('fs');
5
5
  const path = require('path');
6
6
  const { i18n } = require('../../lib/lang');
7
7
  const { logger } = require('@hubspot/local-dev-lib/logger');
8
- const { addAccountOptions, addConfigOptions, getAccountId, } = require('../../lib/commonOpts');
8
+ const { addAccountOptions, addConfigOptions } = require('../../lib/commonOpts');
9
9
  const { getCwd } = require('@hubspot/local-dev-lib/path');
10
10
  const { preview } = require('@hubspot/theme-preview-dev-server');
11
11
  const { getUploadableFileList } = require('../../lib/upload');
@@ -89,9 +89,8 @@ const determineSrcAndDest = async (options) => {
89
89
  return { absoluteSrc, dest };
90
90
  };
91
91
  exports.handler = async (options) => {
92
- const { notify, skipUpload, noSsl, port, debug, resetSession } = options;
92
+ const { notify, skipUpload, noSsl, port, debug, derivedAccountId, resetSession, } = options;
93
93
  await loadAndValidateOptions(options);
94
- const accountId = getAccountId(options);
95
94
  const { absoluteSrc, dest } = await determineSrcAndDest(options);
96
95
  const filePaths = await getUploadableFileList(absoluteSrc, false);
97
96
  const startProgressBar = numFiles => {
@@ -133,7 +132,7 @@ exports.handler = async (options) => {
133
132
  if (result.resultType == FILE_UPLOAD_RESULT_TYPES.FAILURE) {
134
133
  logger.error('Uploading file "%s" to "%s" failed', result.file, dest);
135
134
  logError(result.error, new ApiErrorContext({
136
- accountId,
135
+ accountId: derivedAccountId,
137
136
  request: dest,
138
137
  payload: result.file,
139
138
  }));
@@ -143,8 +142,8 @@ exports.handler = async (options) => {
143
142
  };
144
143
  return uploadOptions;
145
144
  };
146
- trackCommandUsage('preview', accountId);
147
- preview(accountId, absoluteSrc, dest, {
145
+ trackCommandUsage('preview', derivedAccountId);
146
+ preview(derivedAccountId, absoluteSrc, dest, {
148
147
  notify,
149
148
  filePaths,
150
149
  skipUpload,