@hubspot/cli 7.9.0-experimental.0 → 7.9.1-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 (196) hide show
  1. package/bin/cli.js +5 -4
  2. package/commands/__tests__/getStarted.test.js +10 -0
  3. package/commands/account/__tests__/rename.test.js +42 -0
  4. package/commands/account/auth.js +10 -14
  5. package/commands/account/clean.js +11 -19
  6. package/commands/account/createOverride.js +15 -11
  7. package/commands/account/info.js +8 -5
  8. package/commands/account/list.js +13 -18
  9. package/commands/account/remove.js +23 -22
  10. package/commands/account/removeOverride.js +6 -6
  11. package/commands/account/rename.d.ts +1 -1
  12. package/commands/account/rename.js +6 -3
  13. package/commands/account/use.js +19 -8
  14. package/commands/app/__tests__/migrate.test.js +8 -4
  15. package/commands/app/migrate.js +2 -2
  16. package/commands/auth.js +18 -14
  17. package/commands/config/migrate.js +5 -5
  18. package/commands/config/set.js +1 -2
  19. package/commands/customObject/createSchema.js +2 -3
  20. package/commands/customObject/updateSchema.js +2 -3
  21. package/commands/getStarted.js +10 -5
  22. package/commands/hubdb/__tests__/list.test.js +1 -0
  23. package/commands/hubdb/list.js +2 -2
  24. package/commands/hubdb.d.ts +1 -1
  25. package/commands/init.js +36 -32
  26. package/commands/project/__tests__/deploy.test.js +10 -5
  27. package/commands/project/__tests__/devUnifiedFlow.test.js +6 -4
  28. package/commands/project/__tests__/logs.test.js +4 -0
  29. package/commands/project/__tests__/validate.test.js +2 -2
  30. package/commands/project/cloneApp.js +2 -2
  31. package/commands/project/deploy.js +2 -2
  32. package/commands/project/dev/deprecatedFlow.js +4 -5
  33. package/commands/project/dev/index.js +14 -4
  34. package/commands/project/dev/unifiedFlow.js +4 -5
  35. package/commands/project/listBuilds.js +7 -1
  36. package/commands/project/logs.js +2 -3
  37. package/commands/project/profile/add.js +6 -7
  38. package/commands/project/profile/delete.js +2 -2
  39. package/commands/project/upload.js +9 -3
  40. package/commands/project/validate.js +9 -3
  41. package/commands/project/watch.js +7 -2
  42. package/commands/sandbox/__tests__/create.test.js +14 -5
  43. package/commands/sandbox/create.js +4 -5
  44. package/commands/sandbox/delete.js +23 -20
  45. package/commands/testAccount/__tests__/create.test.js +68 -0
  46. package/commands/testAccount/create.d.ts +8 -0
  47. package/commands/testAccount/create.js +134 -44
  48. package/commands/testAccount/delete.js +9 -8
  49. package/commands/testAccount/importData.d.ts +1 -1
  50. package/lang/en.d.ts +3204 -3205
  51. package/lang/en.js +33 -9
  52. package/lib/__tests__/buildAccount.test.js +22 -30
  53. package/lib/__tests__/commonOpts.test.js +9 -13
  54. package/lib/__tests__/developerTestAccounts.test.js +29 -17
  55. package/lib/__tests__/importData.test.js +20 -10
  56. package/lib/__tests__/oauth.test.js +19 -8
  57. package/lib/__tests__/sandboxSync.test.js +33 -11
  58. package/lib/__tests__/sandboxes.test.js +30 -19
  59. package/lib/__tests__/usageTracking.test.js +10 -10
  60. package/lib/__tests__/validation.test.js +32 -32
  61. package/lib/accountTypes.d.ts +9 -9
  62. package/lib/accountTypes.js +2 -4
  63. package/lib/app/__tests__/migrate.test.js +15 -0
  64. package/lib/app/__tests__/migrate_legacy.test.js +9 -0
  65. package/lib/app/migrate_legacy.d.ts +2 -2
  66. package/lib/buildAccount.d.ts +4 -4
  67. package/lib/buildAccount.js +7 -14
  68. package/lib/commonOpts.js +3 -3
  69. package/lib/configMigrate.d.ts +2 -2
  70. package/lib/configMigrate.js +42 -18
  71. package/lib/configOptions.js +3 -2
  72. package/lib/constants.d.ts +1 -0
  73. package/lib/constants.js +6 -0
  74. package/lib/developerTestAccounts.d.ts +3 -3
  75. package/lib/developerTestAccounts.js +4 -7
  76. package/lib/doctor/DiagnosticInfoBuilder.d.ts +1 -1
  77. package/lib/doctor/DiagnosticInfoBuilder.js +9 -6
  78. package/lib/doctor/Doctor.js +4 -3
  79. package/lib/doctor/__tests__/Diagnosis.test.js +4 -3
  80. package/lib/doctor/__tests__/DiagnosticInfoBuilder.test.js +17 -9
  81. package/lib/doctor/__tests__/Doctor.test.js +14 -0
  82. package/lib/importData.js +8 -7
  83. package/lib/links.js +5 -5
  84. package/lib/mcp/__tests__/setup.test.js +127 -0
  85. package/lib/mcp/setup.d.ts +4 -12
  86. package/lib/mcp/setup.js +34 -1
  87. package/lib/middleware/__test__/commandTargetingUtils.test.js +3 -3
  88. package/lib/middleware/__test__/configMiddleware.test.js +23 -22
  89. package/lib/middleware/__test__/gitMiddleware.test.js +9 -7
  90. package/lib/middleware/autoUpdateMiddleware.d.ts +3 -1
  91. package/lib/middleware/autoUpdateMiddleware.js +10 -2
  92. package/lib/middleware/commandTargetingUtils.js +2 -2
  93. package/lib/middleware/configMiddleware.d.ts +6 -1
  94. package/lib/middleware/configMiddleware.js +36 -15
  95. package/lib/middleware/gitMiddleware.js +8 -4
  96. package/lib/oauth.d.ts +2 -2
  97. package/lib/oauth.js +8 -10
  98. package/lib/projects/__tests__/AppDevModeInterface.test.js +17 -6
  99. package/lib/projects/__tests__/DevServerManager.test.js +1 -0
  100. package/lib/projects/__tests__/LocalDevProcess.test.js +1 -0
  101. package/lib/projects/__tests__/components.test.js +148 -24
  102. package/lib/projects/__tests__/deploy.test.js +1 -0
  103. package/lib/projects/__tests__/projects.test.js +13 -42
  104. package/lib/projects/components.js +76 -20
  105. package/lib/projects/config.js +5 -9
  106. package/lib/projects/create/__tests__/v2.test.js +11 -0
  107. package/lib/projects/localDev/AppDevModeInterface.js +2 -2
  108. package/lib/projects/localDev/DevServerManager_DEPRECATED.js +2 -2
  109. package/lib/projects/localDev/LocalDevLogger.js +4 -4
  110. package/lib/projects/localDev/LocalDevManager_DEPRECATED.js +3 -3
  111. package/lib/projects/localDev/helpers/account.d.ts +10 -10
  112. package/lib/projects/localDev/helpers/account.js +6 -11
  113. package/lib/projects/urls.js +5 -6
  114. package/lib/prompts/__tests__/createDeveloperTestAccountConfigPrompt.test.d.ts +1 -0
  115. package/lib/prompts/__tests__/createDeveloperTestAccountConfigPrompt.test.js +153 -0
  116. package/lib/prompts/__tests__/downloadProjectPrompt.test.js +7 -5
  117. package/lib/prompts/accountNamePrompt.js +3 -3
  118. package/lib/prompts/accountsPrompt.d.ts +1 -1
  119. package/lib/prompts/accountsPrompt.js +6 -7
  120. package/lib/prompts/confirmImportDataPrompt.js +2 -2
  121. package/lib/prompts/createDeveloperTestAccountConfigPrompt.d.ts +5 -0
  122. package/lib/prompts/createDeveloperTestAccountConfigPrompt.js +76 -66
  123. package/lib/prompts/downloadProjectPrompt.d.ts +1 -0
  124. package/lib/prompts/downloadProjectPrompt.js +5 -2
  125. package/lib/prompts/importDataTestAccountSelectPrompt.js +4 -5
  126. package/lib/prompts/personalAccessKeyPrompt.js +2 -2
  127. package/lib/prompts/projectDevTargetAccountPrompt.d.ts +3 -3
  128. package/lib/prompts/projectDevTargetAccountPrompt.js +5 -7
  129. package/lib/prompts/sandboxesPrompt.js +7 -8
  130. package/lib/prompts/setAsDefaultAccountPrompt.js +7 -6
  131. package/lib/sandboxSync.d.ts +2 -2
  132. package/lib/sandboxSync.js +3 -9
  133. package/lib/sandboxes.d.ts +4 -4
  134. package/lib/sandboxes.js +6 -11
  135. package/lib/serverlessLogs.js +2 -2
  136. package/lib/theme/__tests__/migrate.test.js +15 -0
  137. package/lib/ui/index.js +6 -3
  138. package/lib/usageTracking.js +15 -8
  139. package/lib/validation.js +13 -11
  140. package/mcp-server/tools/cms/HsCreateFunctionTool.js +8 -2
  141. package/mcp-server/tools/cms/HsCreateModuleTool.d.ts +4 -4
  142. package/mcp-server/tools/cms/HsCreateModuleTool.js +8 -2
  143. package/mcp-server/tools/cms/HsCreateTemplateTool.js +8 -2
  144. package/mcp-server/tools/cms/HsFunctionLogsTool.d.ts +4 -4
  145. package/mcp-server/tools/cms/HsFunctionLogsTool.js +6 -2
  146. package/mcp-server/tools/cms/HsListFunctionsTool.js +5 -1
  147. package/mcp-server/tools/cms/HsListTool.js +5 -1
  148. package/mcp-server/tools/cms/__tests__/HsCreateFunctionTool.test.js +1 -0
  149. package/mcp-server/tools/index.js +4 -0
  150. package/mcp-server/tools/project/AddFeatureToProjectTool.d.ts +1 -1
  151. package/mcp-server/tools/project/AddFeatureToProjectTool.js +9 -3
  152. package/mcp-server/tools/project/CreateProjectTool.js +8 -2
  153. package/mcp-server/tools/project/CreateTestAccountTool.d.ts +41 -0
  154. package/mcp-server/tools/project/CreateTestAccountTool.js +150 -0
  155. package/mcp-server/tools/project/DeployProjectTool.d.ts +1 -1
  156. package/mcp-server/tools/project/DeployProjectTool.js +8 -2
  157. package/mcp-server/tools/project/DocFetchTool.d.ts +1 -1
  158. package/mcp-server/tools/project/DocFetchTool.js +9 -5
  159. package/mcp-server/tools/project/DocsSearchTool.d.ts +1 -1
  160. package/mcp-server/tools/project/DocsSearchTool.js +12 -8
  161. package/mcp-server/tools/project/GetApiUsagePatternsByAppIdTool.d.ts +1 -1
  162. package/mcp-server/tools/project/GetApiUsagePatternsByAppIdTool.js +11 -7
  163. package/mcp-server/tools/project/GetApplicationInfoTool.d.ts +1 -1
  164. package/mcp-server/tools/project/GetApplicationInfoTool.js +11 -7
  165. package/mcp-server/tools/project/GetBuildStatusTool.d.ts +26 -0
  166. package/mcp-server/tools/project/GetBuildStatusTool.js +164 -0
  167. package/mcp-server/tools/project/GetConfigValuesTool.d.ts +1 -1
  168. package/mcp-server/tools/project/GetConfigValuesTool.js +11 -7
  169. package/mcp-server/tools/project/GuidedWalkthroughTool.d.ts +1 -1
  170. package/mcp-server/tools/project/GuidedWalkthroughTool.js +7 -3
  171. package/mcp-server/tools/project/UploadProjectTools.d.ts +9 -3
  172. package/mcp-server/tools/project/UploadProjectTools.js +51 -5
  173. package/mcp-server/tools/project/ValidateProjectTool.d.ts +1 -1
  174. package/mcp-server/tools/project/ValidateProjectTool.js +7 -3
  175. package/mcp-server/tools/project/__tests__/CreateTestAccountTool.test.d.ts +1 -0
  176. package/mcp-server/tools/project/__tests__/CreateTestAccountTool.test.js +454 -0
  177. package/mcp-server/tools/project/__tests__/DocFetchTool.test.js +5 -1
  178. package/mcp-server/tools/project/__tests__/DocsSearchTool.test.js +25 -13
  179. package/mcp-server/tools/project/__tests__/GetApiUsagePatternsByAppIdTool.test.js +7 -5
  180. package/mcp-server/tools/project/__tests__/GetApplicationInfoTool.test.js +7 -5
  181. package/mcp-server/tools/project/__tests__/GetBuildStatusTool.test.d.ts +1 -0
  182. package/mcp-server/tools/project/__tests__/GetBuildStatusTool.test.js +240 -0
  183. package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.js +8 -6
  184. package/mcp-server/tools/project/__tests__/UploadProjectTools.test.js +56 -4
  185. package/mcp-server/utils/__tests__/content.test.js +21 -20
  186. package/mcp-server/utils/__tests__/feedbackTracking.test.js +33 -28
  187. package/mcp-server/utils/content.d.ts +1 -1
  188. package/mcp-server/utils/content.js +2 -2
  189. package/mcp-server/utils/feedbackTracking.d.ts +1 -1
  190. package/mcp-server/utils/feedbackTracking.js +3 -3
  191. package/mcp-server/utils/toolUsageTracking.js +4 -3
  192. package/package.json +8 -7
  193. package/mcp-server/utils/__tests__/cliConfig.test.js +0 -110
  194. package/mcp-server/utils/cliConfig.d.ts +0 -1
  195. package/mcp-server/utils/cliConfig.js +0 -12
  196. /package/{mcp-server/utils/__tests__/cliConfig.test.d.ts → lib/mcp/__tests__/setup.test.d.ts} +0 -0
@@ -1,5 +1,5 @@
1
1
  import { trackCommandUsage } from '../../../lib/usageTracking.js';
2
- import { getAccountId } from '@hubspot/local-dev-lib/config';
2
+ import { getConfigAccountIfExists } from '@hubspot/local-dev-lib/config';
3
3
  import { getProjectConfig, validateProjectConfig, } from '../../../lib/projects/config.js';
4
4
  import { EXIT_CODES } from '../../../lib/enums/exitCodes.js';
5
5
  import { uiLine } from '../../../lib/ui/index.js';
@@ -10,6 +10,7 @@ import { makeYargsBuilder } from '../../../lib/yargsUtils.js';
10
10
  import { loadProfile, exitIfUsingProfiles, } from '../../../lib/projectProfiles.js';
11
11
  import { commands } from '../../../lang/en.js';
12
12
  import { uiLogger } from '../../../lib/ui/logger.js';
13
+ import { logError } from '../../../lib/errorHandlers/index.js';
13
14
  const command = 'dev';
14
15
  const describe = commands.project.dev.describe;
15
16
  function validateAccountFlags(testingAccount, projectAccount, userProvidedAccount, useV2) {
@@ -26,7 +27,13 @@ function validateAccountFlags(testingAccount, projectAccount, userProvidedAccoun
26
27
  async function handler(args) {
27
28
  const { derivedAccountId, userProvidedAccount, testingAccount, projectAccount, } = args;
28
29
  const { projectConfig, projectDir } = await getProjectConfig();
29
- validateProjectConfig(projectConfig, projectDir);
30
+ try {
31
+ validateProjectConfig(projectConfig, projectDir);
32
+ }
33
+ catch (error) {
34
+ logError(error);
35
+ process.exit(EXIT_CODES.ERROR);
36
+ }
30
37
  const useV2Projects = isV2Project(projectConfig.platformVersion);
31
38
  if (!projectDir) {
32
39
  uiLogger.error(commands.project.dev.errors.noProjectConfig);
@@ -44,7 +51,8 @@ async function handler(args) {
44
51
  let profile;
45
52
  // Using the new --projectAccount flag
46
53
  if (projectAccount) {
47
- targetProjectAccountId = getAccountId(projectAccount);
54
+ targetProjectAccountId =
55
+ getConfigAccountIfExists(projectAccount)?.accountId;
48
56
  if (targetProjectAccountId) {
49
57
  uiLogger.log('');
50
58
  uiLogger.log(commands.project.dev.logs.projectAccountFlagExplanation(targetProjectAccountId));
@@ -80,7 +88,9 @@ async function handler(args) {
80
88
  }
81
89
  trackCommandUsage('project-dev', {}, targetProjectAccountId);
82
90
  if (isV2Project(projectConfig.platformVersion)) {
83
- const targetTestingAccountId = (testingAccount && getAccountId(testingAccount)) || undefined;
91
+ const targetTestingAccountId = testingAccount
92
+ ? getConfigAccountIfExists(testingAccount)?.accountId
93
+ : undefined;
84
94
  await unifiedProjectDevFlow({
85
95
  args,
86
96
  targetProjectAccountId,
@@ -4,8 +4,7 @@ import { HUBSPOT_ACCOUNT_TYPES } from '@hubspot/local-dev-lib/constants/config';
4
4
  import { startPortManagerServer, stopPortManagerServer, } from '@hubspot/local-dev-lib/portManager';
5
5
  import { isTranslationError } from '@hubspot/project-parsing-lib/src/lib/errors.js';
6
6
  import { translateForLocalDev } from '@hubspot/project-parsing-lib';
7
- import { getEnv, getConfigAccounts, getAccountConfig, } from '@hubspot/local-dev-lib/config';
8
- import { getValidEnv } from '@hubspot/local-dev-lib/environment';
7
+ import { getConfigAccountEnvironment, getAllConfigAccounts, getConfigAccountById, } from '@hubspot/local-dev-lib/config';
9
8
  import { logError } from '../../../lib/errorHandlers/index.js';
10
9
  import { EXIT_CODES } from '../../../lib/enums/exitCodes.js';
11
10
  import { ensureProjectExists } from '../../../lib/projects/ensureProjectExists.js';
@@ -23,7 +22,7 @@ import LocalDevWebsocketServer from '../../../lib/projects/localDev/LocalDevWebs
23
22
  import { confirmLocalDevIsNotRunning } from '../../../lib/projects/localDev/helpers/process.js';
24
23
  export async function unifiedProjectDevFlow({ args, targetProjectAccountId, providedTargetTestingAccountId, projectConfig, projectDir, }) {
25
24
  await confirmLocalDevIsNotRunning();
26
- const env = getValidEnv(getEnv(targetProjectAccountId));
25
+ const env = getConfigAccountEnvironment(targetProjectAccountId);
27
26
  let projectNodes;
28
27
  let projectProfileData;
29
28
  // Get IR
@@ -50,12 +49,12 @@ export async function unifiedProjectDevFlow({ args, targetProjectAccountId, prov
50
49
  uiLogger.error(commands.project.dev.errors.noRunnableComponents);
51
50
  process.exit(EXIT_CODES.SUCCESS);
52
51
  }
53
- const targetProjectAccountConfig = getAccountConfig(targetProjectAccountId);
52
+ const targetProjectAccountConfig = getConfigAccountById(targetProjectAccountId);
54
53
  if (!targetProjectAccountConfig) {
55
54
  uiLogger.error(commands.project.dev.errors.noAccount(targetProjectAccountId));
56
55
  process.exit(EXIT_CODES.ERROR);
57
56
  }
58
- const accounts = getConfigAccounts();
57
+ const accounts = getAllConfigAccounts();
59
58
  const accountIsCombined = await isUnifiedAccount(targetProjectAccountConfig);
60
59
  const targetProjectAccountIsTestAccountOrSandbox = isTestAccountOrSandbox(targetProjectAccountConfig);
61
60
  if (!accountIsCombined) {
@@ -68,7 +68,13 @@ async function handler(args) {
68
68
  let projectName = projectFlagValue;
69
69
  if (!projectName) {
70
70
  const { projectConfig, projectDir } = await getProjectConfig();
71
- validateProjectConfig(projectConfig, projectDir);
71
+ try {
72
+ validateProjectConfig(projectConfig, projectDir);
73
+ }
74
+ catch (error) {
75
+ logError(error);
76
+ process.exit(EXIT_CODES.ERROR);
77
+ }
72
78
  projectName = projectConfig.name;
73
79
  }
74
80
  try {
@@ -1,6 +1,5 @@
1
- import { getEnv } from '@hubspot/local-dev-lib/config';
1
+ import { getConfigAccountEnvironment } from '@hubspot/local-dev-lib/config';
2
2
  import { getHubSpotWebsiteOrigin } from '@hubspot/local-dev-lib/urls';
3
- import { ENVIRONMENTS } from '@hubspot/local-dev-lib/constants/environments';
4
3
  import { trackCommandUsage } from '../../lib/usageTracking.js';
5
4
  import { getTableContents, getTableHeader } from '../../lib/ui/table.js';
6
5
  import { logError } from '../../lib/errorHandlers/index.js';
@@ -12,7 +11,7 @@ import { EXIT_CODES } from '../../lib/enums/exitCodes.js';
12
11
  import { ProjectLogsManager } from '../../lib/projects/ProjectLogsManager.js';
13
12
  import { makeYargsBuilder } from '../../lib/yargsUtils.js';
14
13
  function getPrivateAppsUrl(accountId) {
15
- const baseUrl = getHubSpotWebsiteOrigin(getEnv(accountId) === 'qa' ? ENVIRONMENTS.QA : ENVIRONMENTS.PROD);
14
+ const baseUrl = getHubSpotWebsiteOrigin(getConfigAccountEnvironment(accountId));
16
15
  return `${baseUrl}/private-apps/${accountId}`;
17
16
  }
18
17
  function logTable(tableHeader, logsInfo) {
@@ -1,7 +1,6 @@
1
1
  import path from 'path';
2
2
  import fs from 'fs';
3
- import { getAccountId, getConfigAccounts } from '@hubspot/local-dev-lib/config';
4
- import { getAccountIdentifier } from '@hubspot/local-dev-lib/config/getAccountIdentifier';
3
+ import { getConfigAccountIfExists, getAllConfigAccounts, } from '@hubspot/local-dev-lib/config';
5
4
  import { getAllHsProfiles, getHsProfileFilename, loadHsProfileFile, } from '@hubspot/project-parsing-lib';
6
5
  import { trackCommandUsage } from '../../../lib/usageTracking.js';
7
6
  import { getProjectConfig } from '../../../lib/projects/config.js';
@@ -102,9 +101,9 @@ async function handler(args) {
102
101
  profileName = promptResponse.name;
103
102
  }
104
103
  if (targetAccountId) {
105
- const accountId = getAccountId(targetAccountId);
106
- if (accountId) {
107
- targetAccountId = accountId;
104
+ const account = getConfigAccountIfExists(targetAccountId);
105
+ if (account) {
106
+ targetAccountId = account.accountId;
108
107
  }
109
108
  else {
110
109
  uiLogger.error(commands.project.profile.add.errors.invalidTargetAccount);
@@ -113,14 +112,14 @@ async function handler(args) {
113
112
  }
114
113
  }
115
114
  if (!targetAccountId) {
116
- const configuredAccounts = getConfigAccounts();
115
+ const configuredAccounts = getAllConfigAccounts();
117
116
  if (!configuredAccounts || !configuredAccounts.length) {
118
117
  uiLogger.error(commands.project.profile.add.errors.noAccountsConfigured);
119
118
  process.exit(EXIT_CODES.ERROR);
120
119
  }
121
120
  const promptResponse = await listPrompt(commands.project.profile.add.prompts.targetAccountPrompt, {
122
121
  choices: configuredAccounts.map(account => {
123
- const accountId = getAccountIdentifier(account);
122
+ const accountId = account.accountId;
124
123
  return {
125
124
  name: uiAccountDescription(accountId),
126
125
  value: accountId,
@@ -2,7 +2,7 @@ import fs from 'fs';
2
2
  import path from 'path';
3
3
  import { getAllHsProfiles, getHsProfileFilename, loadHsProfileFile, } from '@hubspot/project-parsing-lib';
4
4
  import { fetchProject, deleteProject, } from '@hubspot/local-dev-lib/api/projects';
5
- import { getAccountConfig } from '@hubspot/local-dev-lib/config';
5
+ import { getConfigAccountById } from '@hubspot/local-dev-lib/config';
6
6
  import { trackCommandUsage } from '../../../lib/usageTracking.js';
7
7
  import { getProjectConfig } from '../../../lib/projects/config.js';
8
8
  import { uiLogger } from '../../../lib/ui/logger.js';
@@ -80,7 +80,7 @@ async function handler(args) {
80
80
  catch (err) {
81
81
  debugError(err);
82
82
  }
83
- const targetAccountConfig = getAccountConfig(targetAccountId);
83
+ const targetAccountConfig = getConfigAccountById(targetAccountId);
84
84
  if (projectExists &&
85
85
  targetAccountConfig &&
86
86
  (isDeveloperTestAccount(targetAccountConfig) ||
@@ -1,6 +1,6 @@
1
1
  import chalk from 'chalk';
2
2
  import { uiLogger } from '../../lib/ui/logger.js';
3
- import { getAccountConfig } from '@hubspot/local-dev-lib/config';
3
+ import { getConfigAccountById } from '@hubspot/local-dev-lib/config';
4
4
  import { isSpecifiedError } from '@hubspot/local-dev-lib/errors/index';
5
5
  import { isV2Project } from '../../lib/projects/platformVersion.js';
6
6
  import { trackCommandUsage } from '../../lib/usageTracking.js';
@@ -20,13 +20,19 @@ async function handler(args) {
20
20
  const { forceCreate, message, derivedAccountId, skipValidation, formatOutputAsJson, profile, } = args;
21
21
  const jsonOutput = {};
22
22
  const { projectConfig, projectDir } = await getProjectConfig();
23
- validateProjectConfig(projectConfig, projectDir);
23
+ try {
24
+ validateProjectConfig(projectConfig, projectDir);
25
+ }
26
+ catch (error) {
27
+ logError(error);
28
+ process.exit(EXIT_CODES.ERROR);
29
+ }
24
30
  let targetAccountId;
25
31
  if (isV2Project(projectConfig.platformVersion)) {
26
32
  targetAccountId = await loadAndValidateProfile(projectConfig, projectDir, profile);
27
33
  }
28
34
  targetAccountId = targetAccountId || derivedAccountId;
29
- const accountConfig = getAccountConfig(targetAccountId);
35
+ const accountConfig = getConfigAccountById(targetAccountId);
30
36
  const accountType = accountConfig && accountConfig.accountType;
31
37
  trackCommandUsage('project-upload', { type: accountType, assetType: projectConfig.platformVersion }, targetAccountId);
32
38
  try {
@@ -1,5 +1,5 @@
1
1
  import path from 'path';
2
- import { getAccountConfig } from '@hubspot/local-dev-lib/config';
2
+ import { getConfigAccountById } from '@hubspot/local-dev-lib/config';
3
3
  import { isV2Project } from '../../lib/projects/platformVersion.js';
4
4
  import { trackCommandUsage } from '../../lib/usageTracking.js';
5
5
  import { uiLogger } from '../../lib/ui/logger.js';
@@ -23,10 +23,16 @@ async function handler(args) {
23
23
  uiLogger.error(commands.project.validate.badVersion);
24
24
  process.exit(EXIT_CODES.ERROR);
25
25
  }
26
- validateProjectConfig(projectConfig, projectDir);
26
+ try {
27
+ validateProjectConfig(projectConfig, projectDir);
28
+ }
29
+ catch (error) {
30
+ logError(error);
31
+ process.exit(EXIT_CODES.ERROR);
32
+ }
27
33
  let targetAccountId = await loadAndValidateProfile(projectConfig, projectDir, profile);
28
34
  targetAccountId = targetAccountId || derivedAccountId;
29
- const accountConfig = getAccountConfig(targetAccountId);
35
+ const accountConfig = getConfigAccountById(targetAccountId);
30
36
  const accountType = accountConfig && accountConfig.accountType;
31
37
  trackCommandUsage('project-validate', { type: accountType }, targetAccountId);
32
38
  const srcDir = path.resolve(projectDir, projectConfig.srcDir);
@@ -58,7 +58,13 @@ async function handler(args) {
58
58
  const { initialUpload, derivedAccountId } = args;
59
59
  trackCommandUsage('project-watch', undefined, derivedAccountId);
60
60
  const { projectConfig, projectDir } = await getProjectConfig();
61
- validateProjectConfig(projectConfig, projectDir);
61
+ try {
62
+ validateProjectConfig(projectConfig, projectDir);
63
+ }
64
+ catch (error) {
65
+ logError(error);
66
+ process.exit(EXIT_CODES.ERROR);
67
+ }
62
68
  if (!projectConfig || !projectDir) {
63
69
  uiLogger.error(commands.project.watch.errors.projectConfigNotFound);
64
70
  return process.exit(EXIT_CODES.ERROR);
@@ -67,7 +73,6 @@ async function handler(args) {
67
73
  uiLogger.error(projectConfig.platformVersion);
68
74
  return process.exit(EXIT_CODES.ERROR);
69
75
  }
70
- validateProjectConfig(projectConfig, projectDir);
71
76
  try {
72
77
  const { data: { results: builds }, } = await fetchProjectBuilds(derivedAccountId, projectConfig.name);
73
78
  const hasNoBuilds = !builds || !builds.length;
@@ -14,6 +14,7 @@ import { uiLogger } from '../../../lib/ui/logger.js';
14
14
  import * as sandboxesLib from '../../../lib/sandboxes.js';
15
15
  import * as sandboxSync from '../../../lib/sandboxSync.js';
16
16
  import { vi } from 'vitest';
17
+ import { ENVIRONMENTS } from '@hubspot/local-dev-lib/constants/environments';
17
18
  vi.mock('../../../lib/ui/logger.js');
18
19
  vi.mock('@hubspot/local-dev-lib/config');
19
20
  vi.mock('../../../lib/commonOpts');
@@ -26,12 +27,13 @@ vi.mock('../../../lib/usageTracking');
26
27
  vi.mock('../../../lib/buildAccount');
27
28
  vi.mock('../../../lib/sandboxes');
28
29
  vi.mock('../../../lib/commonOpts');
29
- const getAccountConfigSpy = vi.spyOn(configUtils, 'getAccountConfig');
30
+ const getConfigAccountByIdSpy = vi.spyOn(configUtils, 'getConfigAccountById');
30
31
  const promptUserSpy = vi.spyOn(promptUtils, 'promptUser');
31
32
  const sandboxTypePromptSpy = vi.spyOn(sandboxPrompts, 'sandboxTypePrompt');
32
33
  const processExitSpy = vi.spyOn(process, 'exit');
33
34
  const buildSandboxSpy = vi.spyOn(buildAccount, 'buildSandbox');
34
35
  const buildV2SandboxSpy = vi.spyOn(buildAccount, 'buildV2Sandbox');
36
+ const getConfigAccountEnvironmentSpy = vi.spyOn(configUtils, 'getConfigAccountEnvironment');
35
37
  const getAvailableSyncTypesSpy = vi.spyOn(sandboxesLib, 'getAvailableSyncTypes');
36
38
  const syncSandboxSpy = vi.spyOn(sandboxSync, 'syncSandbox');
37
39
  const validateSandboxUsageLimitsSpy = vi.spyOn(sandboxesLib, 'validateSandboxUsageLimits');
@@ -88,7 +90,8 @@ describe('commands/sandbox/create', () => {
88
90
  args = {
89
91
  derivedAccountId: 1234567890,
90
92
  };
91
- getAccountConfigSpy.mockReturnValue({
93
+ getConfigAccountByIdSpy.mockReturnValue({
94
+ accountId: 1234567890,
92
95
  accountType: HUBSPOT_ACCOUNT_TYPES.STANDARD,
93
96
  env: 'prod',
94
97
  });
@@ -104,6 +107,7 @@ describe('commands/sandbox/create', () => {
104
107
  validateSandboxUsageLimitsSpy.mockResolvedValue(undefined);
105
108
  mockedHasFeatureV2Sandboxes.mockResolvedValue(false);
106
109
  mockedHasFeatureV2Cli.mockResolvedValue(false);
110
+ getConfigAccountEnvironmentSpy.mockReturnValue(ENVIRONMENTS.PROD);
107
111
  buildSandboxSpy.mockResolvedValue({
108
112
  sandbox: mockSandbox,
109
113
  personalAccessKey: 'mock-personal-access-key',
@@ -123,8 +127,8 @@ describe('commands/sandbox/create', () => {
123
127
  });
124
128
  it('should load the account config for the correct account id', async () => {
125
129
  await sandboxCreateCommand.handler(args);
126
- expect(getAccountConfigSpy).toHaveBeenCalledTimes(2); // 1st is for parent account, 2nd is for sandbox account
127
- expect(getAccountConfigSpy).toHaveBeenCalledWith(args.derivedAccountId);
130
+ expect(getConfigAccountByIdSpy).toHaveBeenCalledTimes(2); // 1st is for parent account, 2nd is for sandbox account
131
+ expect(getConfigAccountByIdSpy).toHaveBeenCalledWith(args.derivedAccountId);
128
132
  });
129
133
  it('should track the command usage', async () => {
130
134
  await sandboxCreateCommand.handler(args);
@@ -135,6 +139,7 @@ describe('commands/sandbox/create', () => {
135
139
  await sandboxCreateCommand.handler(args);
136
140
  expect(validateSandboxUsageLimitsSpy).toHaveBeenCalledTimes(1);
137
141
  expect(validateSandboxUsageLimitsSpy).toHaveBeenCalledWith({
142
+ accountId: 1234567890,
138
143
  accountType: HUBSPOT_ACCOUNT_TYPES.STANDARD,
139
144
  env: 'prod',
140
145
  }, HUBSPOT_ACCOUNT_TYPES.DEVELOPMENT_SANDBOX, 'prod');
@@ -168,6 +173,7 @@ describe('commands/sandbox/create', () => {
168
173
  await sandboxCreateCommand.handler(args);
169
174
  expect(buildSandboxSpy).toHaveBeenCalledTimes(1);
170
175
  expect(buildSandboxSpy).toHaveBeenCalledWith(sandboxNameFromPrompt, {
176
+ accountId: 1234567890,
171
177
  accountType: HUBSPOT_ACCOUNT_TYPES.STANDARD,
172
178
  env: 'prod',
173
179
  }, HUBSPOT_ACCOUNT_TYPES.DEVELOPMENT_SANDBOX, 'prod', undefined // force
@@ -181,6 +187,7 @@ describe('commands/sandbox/create', () => {
181
187
  await sandboxCreateCommand.handler(args);
182
188
  expect(buildSandboxSpy).toHaveBeenCalledTimes(1);
183
189
  expect(buildSandboxSpy).toHaveBeenCalledWith(sandboxNameFromPrompt, {
190
+ accountId: 1234567890,
184
191
  accountType: HUBSPOT_ACCOUNT_TYPES.STANDARD,
185
192
  env: 'prod',
186
193
  }, HUBSPOT_ACCOUNT_TYPES.DEVELOPMENT_SANDBOX, 'prod', undefined // force
@@ -194,6 +201,7 @@ describe('commands/sandbox/create', () => {
194
201
  await sandboxCreateCommand.handler(args);
195
202
  expect(buildV2SandboxSpy).toHaveBeenCalledTimes(1);
196
203
  expect(buildV2SandboxSpy).toHaveBeenCalledWith(sandboxNameFromPrompt, {
204
+ accountId: 1234567890,
197
205
  accountType: HUBSPOT_ACCOUNT_TYPES.STANDARD,
198
206
  env: 'prod',
199
207
  }, HUBSPOT_ACCOUNT_TYPES.DEVELOPMENT_SANDBOX, false, // syncObjectRecords
@@ -222,7 +230,8 @@ describe('commands/sandbox/create', () => {
222
230
  expect(processExitSpy).toHaveBeenCalledWith(EXIT_CODES.ERROR);
223
231
  });
224
232
  it('should error out if the default account type is not standard', async () => {
225
- getAccountConfigSpy.mockReturnValue({
233
+ getConfigAccountByIdSpy.mockReturnValue({
234
+ accountId: 1234567890,
226
235
  accountType: HUBSPOT_ACCOUNT_TYPES.DEVELOPMENT_SANDBOX,
227
236
  env: 'prod',
228
237
  });
@@ -1,9 +1,8 @@
1
- import { getAccountConfig, getEnv } from '@hubspot/local-dev-lib/config';
1
+ import { getConfigAccountById, getConfigAccountEnvironment, } from '@hubspot/local-dev-lib/config';
2
2
  import { uiLogger } from '../../lib/ui/logger.js';
3
3
  import { isMissingScopeError } from '@hubspot/local-dev-lib/errors/index';
4
4
  import { getHubSpotWebsiteOrigin } from '@hubspot/local-dev-lib/urls';
5
5
  import { HUBSPOT_ACCOUNT_TYPES, HUBSPOT_ACCOUNT_TYPE_STRINGS, } from '@hubspot/local-dev-lib/constants/config';
6
- import { getValidEnv } from '@hubspot/local-dev-lib/environment';
7
6
  import { commands, lib } from '../../lang/en.js';
8
7
  import { EXIT_CODES } from '../../lib/enums/exitCodes.js';
9
8
  import { uiFeatureHighlight, uiBetaTag } from '../../lib/ui/index.js';
@@ -22,8 +21,8 @@ const command = 'create';
22
21
  const describe = uiBetaTag(commands.sandbox.subcommands.create.describe, false);
23
22
  async function handler(args) {
24
23
  const { name, type, force, derivedAccountId } = args;
25
- const accountConfig = getAccountConfig(derivedAccountId);
26
- const env = getValidEnv(getEnv(derivedAccountId));
24
+ const accountConfig = getConfigAccountById(derivedAccountId);
25
+ const env = getConfigAccountEnvironment(derivedAccountId);
27
26
  trackCommandUsage('sandbox-create', {}, derivedAccountId);
28
27
  // Check if account config exists
29
28
  if (!accountConfig) {
@@ -111,7 +110,7 @@ async function handler(args) {
111
110
  else {
112
111
  result = await buildSandbox(sandboxName, accountConfig, sandboxType, env, force);
113
112
  }
114
- const sandboxAccountConfig = getAccountConfig(result.sandbox.sandboxHubId);
113
+ const sandboxAccountConfig = getConfigAccountById(result.sandbox.sandboxHubId);
115
114
  // Check if sandbox account config exists
116
115
  if (!sandboxAccountConfig) {
117
116
  uiLogger.error(commands.sandbox.subcommands.create.failure.noSandboxAccountConfig(result.sandbox.sandboxHubId));
@@ -1,8 +1,7 @@
1
1
  import { uiLogger } from '../../lib/ui/logger.js';
2
2
  import { isSpecifiedError } from '@hubspot/local-dev-lib/errors/index';
3
3
  import { deleteSandbox } from '@hubspot/local-dev-lib/api/sandboxHubs';
4
- import { getEnv, removeSandboxAccountFromConfig, updateDefaultAccount, getAccountId, getConfigAccounts, } from '@hubspot/local-dev-lib/config';
5
- import { getAccountIdentifier } from '@hubspot/local-dev-lib/config/getAccountIdentifier';
4
+ import { getConfigAccountEnvironment, removeAccountFromConfig, setConfigAccountAsDefault, getAllConfigAccounts, getConfigAccountIfExists, getConfigDefaultAccountIfExists, } from '@hubspot/local-dev-lib/config';
6
5
  import { getHubSpotWebsiteOrigin } from '@hubspot/local-dev-lib/urls';
7
6
  import { getValidEnv } from '@hubspot/local-dev-lib/environment';
8
7
  import { trackCommandUsage } from '../../lib/usageTracking.js';
@@ -36,17 +35,20 @@ async function handler(args) {
36
35
  process.exit(EXIT_CODES.ERROR);
37
36
  }
38
37
  }
39
- const sandboxAccountId = getAccountId(userProvidedAccount || accountPrompt.account);
40
- if (!sandboxAccountId) {
38
+ const accountIdentifier = userProvidedAccount || accountPrompt.account;
39
+ const sandboxAccount = getConfigAccountIfExists(accountIdentifier);
40
+ if (!sandboxAccount) {
41
41
  uiLogger.error(commands.sandbox.subcommands.delete.failure.noSandboxAccountId);
42
42
  process.exit(EXIT_CODES.ERROR);
43
43
  }
44
- const isDefaultAccount = sandboxAccountId === getAccountId();
45
- const baseUrl = getHubSpotWebsiteOrigin(getValidEnv(getEnv(sandboxAccountId)));
44
+ const sandboxAccountId = sandboxAccount.accountId;
45
+ const defaultAccount = getConfigDefaultAccountIfExists();
46
+ const isDefaultAccount = sandboxAccountId === defaultAccount?.accountId;
47
+ const baseUrl = getHubSpotWebsiteOrigin(getValidEnv(getConfigAccountEnvironment(sandboxAccountId)));
46
48
  let parentAccountId;
47
- const accountsList = getConfigAccounts() || [];
49
+ const accountsList = getAllConfigAccounts() || [];
48
50
  for (const portal of accountsList) {
49
- if (getAccountIdentifier(portal) === sandboxAccountId) {
51
+ if (portal.accountId === sandboxAccountId) {
50
52
  if (portal.parentAccountId) {
51
53
  parentAccountId = portal.parentAccountId;
52
54
  }
@@ -56,7 +58,8 @@ async function handler(args) {
56
58
  uiLogger.error(commands.sandbox.subcommands.delete.failure.noParentAccount);
57
59
  process.exit(EXIT_CODES.ERROR);
58
60
  }
59
- parentAccountId = getAccountId(parentAccountPrompt.account);
61
+ const parentAccount = getConfigAccountIfExists(parentAccountPrompt.account);
62
+ parentAccountId = parentAccount?.accountId;
60
63
  }
61
64
  else {
62
65
  uiLogger.error(commands.sandbox.subcommands.delete.failure.noParentAccount);
@@ -67,9 +70,9 @@ async function handler(args) {
67
70
  const url = `${baseUrl}/sandboxes/${parentAccountId}`;
68
71
  const command = uiAuthCommandReference({
69
72
  accountId: parentAccountId || undefined,
70
- qa: getEnv(sandboxAccountId) === 'qa',
73
+ qa: getConfigAccountEnvironment(sandboxAccountId) === 'qa',
71
74
  });
72
- if (parentAccountId && !getAccountId(parentAccountId)) {
75
+ if (parentAccountId && !getConfigAccountIfExists(parentAccountId)) {
73
76
  uiLogger.log('');
74
77
  uiLogger.error(commands.sandbox.subcommands.delete.failure.noParentPortalAvailable(command, url));
75
78
  uiLogger.log('');
@@ -99,14 +102,14 @@ async function handler(args) {
99
102
  ? commands.sandbox.subcommands.delete.success.deleteDefault(userProvidedAccount || accountPrompt.account, sandboxAccountId)
100
103
  : commands.sandbox.subcommands.delete.success.delete(userProvidedAccount || accountPrompt.account, sandboxAccountId));
101
104
  uiLogger.log('');
102
- const promptDefaultAccount = removeSandboxAccountFromConfig(sandboxAccountId);
103
- if (promptDefaultAccount && !force) {
105
+ removeAccountFromConfig(sandboxAccountId);
106
+ if (isDefaultAccount && !force) {
104
107
  const newDefaultAccount = await selectAccountFromConfig();
105
- updateDefaultAccount(newDefaultAccount);
108
+ setConfigAccountAsDefault(newDefaultAccount);
106
109
  }
107
110
  else if (isDefaultAccount && force) {
108
111
  // If force is specified, skip prompt and set the parent account id as the default account
109
- updateDefaultAccount(parentAccountId);
112
+ setConfigAccountAsDefault(parentAccountId);
110
113
  }
111
114
  process.exit(EXIT_CODES.SUCCESS);
112
115
  }
@@ -135,14 +138,14 @@ async function handler(args) {
135
138
  uiLogger.log('');
136
139
  uiLogger.warn(commands.sandbox.subcommands.delete.failure.objectNotFound(sandboxAccountId));
137
140
  uiLogger.log('');
138
- const promptDefaultAccount = removeSandboxAccountFromConfig(sandboxAccountId);
139
- if (promptDefaultAccount && !force) {
141
+ removeAccountFromConfig(sandboxAccountId);
142
+ if (isDefaultAccount && !force) {
140
143
  const newDefaultAccount = await selectAccountFromConfig();
141
- updateDefaultAccount(newDefaultAccount);
144
+ setConfigAccountAsDefault(newDefaultAccount);
142
145
  }
143
- else {
146
+ else if (isDefaultAccount) {
144
147
  // If force is specified, skip prompt and set the parent account id as the default account
145
- updateDefaultAccount(parentAccountId);
148
+ setConfigAccountAsDefault(parentAccountId);
146
149
  }
147
150
  process.exit(EXIT_CODES.SUCCESS);
148
151
  }
@@ -1,6 +1,7 @@
1
1
  import yargs from 'yargs';
2
2
  import { addAccountOptions, addConfigOptions, addUseEnvironmentOptions, addTestingOptions, addJSONOutputOptions, } from '../../../lib/commonOpts.js';
3
3
  import testAccountCreateCommand from '../create.js';
4
+ import { ACCOUNT_LEVEL_CHOICES } from '../../../lib/constants.js';
4
5
  vi.mock('../../../lib/commonOpts');
5
6
  describe('commands/testAccount/create', () => {
6
7
  const yargsMock = yargs;
@@ -29,5 +30,72 @@ describe('commands/testAccount/create', () => {
29
30
  expect(addJSONOutputOptions).toHaveBeenCalledTimes(1);
30
31
  expect(addJSONOutputOptions).toHaveBeenCalledWith(yargsMock);
31
32
  });
33
+ it('should add account-name option', () => {
34
+ testAccountCreateCommand.builder(yargsMock);
35
+ expect(yargsMock.option).toHaveBeenCalledWith('name', {
36
+ type: 'string',
37
+ description: 'Name for the test account',
38
+ });
39
+ });
40
+ it('should add description option', () => {
41
+ testAccountCreateCommand.builder(yargsMock);
42
+ expect(yargsMock.option).toHaveBeenCalledWith('description', {
43
+ type: 'string',
44
+ description: 'Description for the test account',
45
+ });
46
+ });
47
+ it('should add hub level options', () => {
48
+ testAccountCreateCommand.builder(yargsMock);
49
+ expect(yargsMock.option).toHaveBeenCalledWith('marketing-level', {
50
+ type: 'string',
51
+ description: 'Marketing Hub tier. Options: FREE, STARTER, PROFESSIONAL, ENTERPRISE',
52
+ choices: ACCOUNT_LEVEL_CHOICES,
53
+ });
54
+ expect(yargsMock.option).toHaveBeenCalledWith('ops-level', {
55
+ type: 'string',
56
+ description: 'Operations Hub tier. Options: FREE, STARTER, PROFESSIONAL, ENTERPRISE',
57
+ choices: ACCOUNT_LEVEL_CHOICES,
58
+ });
59
+ expect(yargsMock.option).toHaveBeenCalledWith('service-level', {
60
+ type: 'string',
61
+ description: 'Service Hub tier. Options: FREE, STARTER, PROFESSIONAL, ENTERPRISE',
62
+ choices: ACCOUNT_LEVEL_CHOICES,
63
+ });
64
+ expect(yargsMock.option).toHaveBeenCalledWith('sales-level', {
65
+ type: 'string',
66
+ description: 'Sales Hub tier. Options: FREE, STARTER, PROFESSIONAL, ENTERPRISE',
67
+ choices: ACCOUNT_LEVEL_CHOICES,
68
+ });
69
+ expect(yargsMock.option).toHaveBeenCalledWith('content-level', {
70
+ type: 'string',
71
+ description: 'CMS Hub tier. Options: FREE, STARTER, PROFESSIONAL, ENTERPRISE',
72
+ choices: ACCOUNT_LEVEL_CHOICES,
73
+ });
74
+ });
75
+ it('should add examples for all usage scenarios', () => {
76
+ testAccountCreateCommand.builder(yargsMock);
77
+ expect(yargsMock.example).toHaveBeenCalledWith([
78
+ [
79
+ '$0 test-account create',
80
+ 'Interactive mode - prompts for all options',
81
+ ],
82
+ [
83
+ '$0 test-account create --name "MyTestAccount"',
84
+ 'Provide name via flag, prompt for description and tier selection',
85
+ ],
86
+ [
87
+ '$0 test-account create --name "MyTestAccount" --description "Test account"',
88
+ 'Provide name and description, prompt for tier selection',
89
+ ],
90
+ [
91
+ '$0 test-account create --name "MyTestAccount" --marketing-level PROFESSIONAL',
92
+ 'Specify marketing tier, other tiers default to ENTERPRISE',
93
+ ],
94
+ [
95
+ '$0 test-account create --config-path ./test-account-config.json',
96
+ 'Create from config file (mutually exclusive with other flags)',
97
+ ],
98
+ ]);
99
+ });
32
100
  });
33
101
  });
@@ -1,6 +1,14 @@
1
+ import { AccountLevel } from '@hubspot/local-dev-lib/types/developerTestAccounts.js';
1
2
  import { CommonArgs, ConfigArgs, AccountArgs, TestingArgs, YargsCommandModule, EnvironmentArgs, JSONOutputArgs } from '../../types/Yargs.js';
2
3
  type CreateTestAccountArgs = CommonArgs & AccountArgs & ConfigArgs & TestingArgs & EnvironmentArgs & JSONOutputArgs & {
3
4
  configPath?: string;
5
+ name?: string;
6
+ description?: string;
7
+ marketingLevel?: AccountLevel;
8
+ opsLevel?: AccountLevel;
9
+ serviceLevel?: AccountLevel;
10
+ salesLevel?: AccountLevel;
11
+ contentLevel?: AccountLevel;
4
12
  };
5
13
  declare const createTestAccountCommand: YargsCommandModule<unknown, CreateTestAccountArgs>;
6
14
  export default createTestAccountCommand;