@hubspot/cli 7.8.12-experimental.1 → 7.9.0-beta.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 (272) hide show
  1. package/commands/__tests__/cms.test.js +44 -1
  2. package/commands/__tests__/customObject.test.js +22 -1
  3. package/commands/__tests__/project.test.js +2 -0
  4. package/commands/account/auth.js +1 -0
  5. package/commands/auth.js +1 -0
  6. package/commands/{__tests__/remove.test.js → cms/__tests__/delete.test.js} +8 -8
  7. package/commands/{__tests__ → cms/__tests__}/fetch.test.js +3 -3
  8. package/commands/{__tests__ → cms/__tests__}/function.test.js +7 -3
  9. package/commands/{__tests__ → cms/__tests__}/lint.test.js +3 -3
  10. package/commands/{__tests__ → cms/__tests__}/list.test.js +3 -3
  11. package/commands/{__tests__ → cms/__tests__}/mv.test.js +3 -3
  12. package/commands/{__tests__ → cms/__tests__}/theme.test.js +9 -2
  13. package/commands/cms/app/create.d.ts +9 -0
  14. package/commands/cms/app/create.js +82 -0
  15. package/commands/cms/app.d.ts +3 -0
  16. package/commands/cms/app.js +17 -0
  17. package/commands/cms/delete.d.ts +6 -0
  18. package/commands/cms/delete.js +43 -0
  19. package/commands/cms/fetch.d.ts +12 -0
  20. package/commands/cms/fetch.js +79 -0
  21. package/commands/{__tests__ → cms/function/__tests__}/logs.test.js +4 -5
  22. package/commands/cms/function/create.d.ts +12 -0
  23. package/commands/cms/function/create.js +84 -0
  24. package/commands/cms/function/deploy.d.ts +6 -0
  25. package/commands/cms/function/deploy.js +89 -0
  26. package/commands/cms/function/list.d.ts +6 -0
  27. package/commands/cms/function/list.js +60 -0
  28. package/commands/cms/function/logs.d.ts +10 -0
  29. package/commands/cms/function/logs.js +135 -0
  30. package/commands/cms/function/server.d.ts +10 -0
  31. package/commands/cms/function/server.js +69 -0
  32. package/commands/cms/function.d.ts +3 -0
  33. package/commands/cms/function.js +27 -0
  34. package/commands/cms/lint.d.ts +6 -0
  35. package/commands/cms/lint.js +83 -0
  36. package/commands/cms/list.d.ts +6 -0
  37. package/commands/cms/list.js +96 -0
  38. package/commands/cms/module/create.d.ts +11 -0
  39. package/commands/cms/module/create.js +84 -0
  40. package/commands/cms/module/marketplace-validate.d.ts +6 -0
  41. package/commands/cms/module/marketplace-validate.js +45 -0
  42. package/commands/cms/module.d.ts +3 -0
  43. package/commands/cms/module.js +17 -0
  44. package/commands/cms/mv.d.ts +7 -0
  45. package/commands/cms/mv.js +60 -0
  46. package/commands/cms/template/create.d.ts +9 -0
  47. package/commands/cms/template/create.js +72 -0
  48. package/commands/cms/template.d.ts +3 -0
  49. package/commands/cms/template.js +17 -0
  50. package/commands/{theme → cms/theme}/__tests__/marketplace-validate.test.js +2 -2
  51. package/commands/{theme → cms/theme}/__tests__/preview.test.js +2 -2
  52. package/commands/cms/theme/create.d.ts +6 -0
  53. package/commands/cms/theme/create.js +58 -0
  54. package/commands/cms/theme/generate-selectors.d.ts +6 -0
  55. package/commands/cms/theme/generate-selectors.js +171 -0
  56. package/commands/cms/theme/marketplace-validate.d.ts +6 -0
  57. package/commands/cms/theme/marketplace-validate.js +46 -0
  58. package/commands/cms/theme/preview.d.ts +12 -0
  59. package/commands/cms/theme/preview.js +224 -0
  60. package/commands/cms/theme.d.ts +3 -0
  61. package/commands/cms/theme.js +25 -0
  62. package/commands/cms/upload.d.ts +12 -0
  63. package/commands/cms/upload.js +212 -0
  64. package/commands/cms/watch.d.ts +14 -0
  65. package/commands/cms/watch.js +138 -0
  66. package/commands/cms/webpack/create.d.ts +6 -0
  67. package/commands/cms/webpack/create.js +58 -0
  68. package/commands/cms/webpack.d.ts +3 -0
  69. package/commands/cms/webpack.js +17 -0
  70. package/commands/cms.js +26 -0
  71. package/commands/create.js +4 -2
  72. package/commands/customObject/{schema/__tests__/create.test.js → __tests__/createSchema.test.js} +5 -5
  73. package/commands/customObject/{schema/__tests__/delete.test.js → __tests__/deleteSchema.test.js} +5 -5
  74. package/commands/customObject/{schema/__tests__/fetch-all.test.js → __tests__/fetch-all-schemas.test.js} +5 -5
  75. package/commands/customObject/{schema/__tests__/fetch.test.js → __tests__/fetchSchema.test.js} +5 -5
  76. package/commands/customObject/{schema/__tests__/list.test.js → __tests__/listSchemas.test.js} +5 -5
  77. package/commands/customObject/{schema/__tests__/update.test.js → __tests__/updateSchema.test.js} +5 -5
  78. package/commands/customObject/createSchema.d.ts +6 -0
  79. package/commands/customObject/createSchema.js +56 -0
  80. package/commands/customObject/deleteSchema.d.ts +7 -0
  81. package/commands/customObject/deleteSchema.js +69 -0
  82. package/commands/customObject/fetchAllSchemas.d.ts +6 -0
  83. package/commands/customObject/fetchAllSchemas.js +57 -0
  84. package/commands/customObject/fetchSchema.d.ts +7 -0
  85. package/commands/customObject/fetchSchema.js +67 -0
  86. package/commands/customObject/listSchemas.d.ts +4 -0
  87. package/commands/customObject/listSchemas.js +35 -0
  88. package/commands/customObject/schema/create.d.ts +4 -6
  89. package/commands/customObject/schema/create.js +13 -36
  90. package/commands/customObject/schema/delete.d.ts +4 -7
  91. package/commands/customObject/schema/delete.js +15 -50
  92. package/commands/customObject/schema/fetch-all.d.ts +4 -6
  93. package/commands/customObject/schema/fetch-all.js +14 -41
  94. package/commands/customObject/schema/fetch.d.ts +4 -7
  95. package/commands/customObject/schema/fetch.js +14 -49
  96. package/commands/customObject/schema/list.d.ts +4 -4
  97. package/commands/customObject/schema/list.js +10 -19
  98. package/commands/customObject/schema/update.d.ts +4 -7
  99. package/commands/customObject/schema/update.js +15 -50
  100. package/commands/customObject/schema.js +4 -2
  101. package/commands/customObject/updateSchema.d.ts +7 -0
  102. package/commands/customObject/updateSchema.js +71 -0
  103. package/commands/customObject.js +16 -1
  104. package/commands/feedback.js +1 -1
  105. package/commands/fetch.d.ts +4 -12
  106. package/commands/fetch.js +19 -46
  107. package/commands/function/deploy.d.ts +4 -6
  108. package/commands/function/deploy.js +14 -71
  109. package/commands/function/list.d.ts +4 -6
  110. package/commands/function/list.js +14 -40
  111. package/commands/function/server.d.ts +4 -10
  112. package/commands/function/server.js +22 -29
  113. package/commands/function.d.ts +2 -4
  114. package/commands/function.js +25 -14
  115. package/commands/lint.d.ts +4 -6
  116. package/commands/lint.js +13 -65
  117. package/commands/list.d.ts +4 -6
  118. package/commands/list.js +13 -74
  119. package/commands/logs.d.ts +4 -10
  120. package/commands/logs.js +24 -87
  121. package/commands/module/marketplace-validate.d.ts +4 -6
  122. package/commands/module/marketplace-validate.js +15 -27
  123. package/commands/module.d.ts +2 -2
  124. package/commands/module.js +17 -15
  125. package/commands/mv.d.ts +4 -7
  126. package/commands/mv.js +13 -39
  127. package/commands/project/__tests__/add.test.js +12 -12
  128. package/commands/project/__tests__/devUnifiedFlow.test.js +32 -0
  129. package/commands/project/__tests__/list.test.js +31 -0
  130. package/commands/project/__tests__/migrate.test.js +1 -0
  131. package/commands/project/add.d.ts +2 -2
  132. package/commands/project/add.js +3 -2
  133. package/commands/project/create.js +1 -1
  134. package/commands/project/dev/deprecatedFlow.js +2 -2
  135. package/commands/project/dev/index.js +5 -5
  136. package/commands/project/dev/unifiedFlow.js +8 -3
  137. package/commands/project/download.js +5 -2
  138. package/commands/project/installDeps.d.ts +2 -2
  139. package/commands/project/installDeps.js +1 -0
  140. package/commands/project/list.d.ts +4 -0
  141. package/commands/project/list.js +62 -0
  142. package/commands/project/migrate.js +5 -2
  143. package/commands/project.js +2 -0
  144. package/commands/remove.d.ts +4 -6
  145. package/commands/remove.js +12 -24
  146. package/commands/testAccount/create.js +2 -2
  147. package/commands/testAccount/delete.js +1 -1
  148. package/commands/theme/generate-selectors.d.ts +4 -6
  149. package/commands/theme/generate-selectors.js +14 -152
  150. package/commands/theme/marketplace-validate.d.ts +4 -6
  151. package/commands/theme/marketplace-validate.js +14 -25
  152. package/commands/theme/preview.d.ts +4 -12
  153. package/commands/theme/preview.js +18 -180
  154. package/commands/theme.d.ts +2 -2
  155. package/commands/theme.js +19 -13
  156. package/commands/upload.d.ts +4 -12
  157. package/commands/upload.js +19 -169
  158. package/commands/watch.d.ts +4 -14
  159. package/commands/watch.js +23 -88
  160. package/lang/en.d.ts +560 -425
  161. package/lang/en.js +562 -427
  162. package/lang/en.lyaml +2 -2
  163. package/lib/__tests__/buildAccount.test.js +2 -2
  164. package/lib/buildAccount.d.ts +2 -2
  165. package/lib/buildAccount.js +7 -7
  166. package/lib/configMigrate.js +88 -9
  167. package/lib/constants.d.ts +9 -0
  168. package/lib/constants.js +9 -0
  169. package/lib/generateSelectors.js +1 -1
  170. package/lib/middleware/autoUpdateMiddleware.d.ts +2 -1
  171. package/lib/middleware/autoUpdateMiddleware.js +12 -2
  172. package/lib/middleware/commandTargetingUtils.d.ts +1 -1
  173. package/lib/middleware/commandTargetingUtils.js +16 -20
  174. package/lib/projects/__tests__/AppDevModeInterface.test.js +95 -109
  175. package/lib/projects/__tests__/DevServerManager.test.js +183 -0
  176. package/lib/projects/__tests__/LocalDevProcess.test.js +6 -5
  177. package/lib/projects/__tests__/LocalDevWebsocketServer.test.js +6 -6
  178. package/lib/projects/__tests__/UIExtensionsDevModeInterface.test.d.ts +1 -0
  179. package/lib/projects/__tests__/UIExtensionsDevModeInterface.test.js +161 -0
  180. package/lib/projects/__tests__/deploy.test.js +9 -9
  181. package/lib/projects/__tests__/upload.test.js +2 -2
  182. package/lib/projects/add/__tests__/v2AddComponent.test.d.ts +1 -0
  183. package/lib/projects/add/__tests__/{v3AddComponent.test.js → v2AddComponent.test.js} +35 -35
  184. package/lib/projects/add/{v3AddComponent.d.ts → v2AddComponent.d.ts} +1 -1
  185. package/lib/projects/add/{v3AddComponent.js → v2AddComponent.js} +5 -5
  186. package/lib/projects/create/__tests__/v2.test.d.ts +1 -0
  187. package/lib/projects/create/__tests__/{v3.test.js → v2.test.js} +2 -2
  188. package/lib/projects/create/index.js +2 -2
  189. package/lib/projects/create/{v3.d.ts → v2.d.ts} +3 -3
  190. package/lib/projects/create/{v3.js → v2.js} +3 -3
  191. package/lib/projects/deploy.d.ts +1 -1
  192. package/lib/projects/deploy.js +2 -2
  193. package/lib/projects/localDev/AppDevModeInterface.d.ts +9 -3
  194. package/lib/projects/localDev/AppDevModeInterface.js +116 -105
  195. package/lib/projects/localDev/DevServerManager.d.ts +10 -29
  196. package/lib/projects/localDev/DevServerManager.js +20 -76
  197. package/lib/projects/localDev/DevServerManager_DEPRECATED.d.ts +40 -0
  198. package/lib/projects/localDev/DevServerManager_DEPRECATED.js +120 -0
  199. package/lib/projects/localDev/{LocalDevManager.js → LocalDevManager_DEPRECATED.js} +6 -6
  200. package/lib/projects/localDev/LocalDevProcess.js +3 -2
  201. package/lib/projects/localDev/LocalDevState.d.ts +3 -0
  202. package/lib/projects/localDev/LocalDevState.js +9 -0
  203. package/lib/projects/localDev/LocalDevWebsocketServer.d.ts +4 -0
  204. package/lib/projects/localDev/LocalDevWebsocketServer.js +39 -6
  205. package/lib/projects/localDev/UIExtensionsDevModeInterface.d.ts +13 -0
  206. package/lib/projects/localDev/UIExtensionsDevModeInterface.js +37 -0
  207. package/lib/projects/localDev/helpers/account.d.ts +1 -1
  208. package/lib/projects/localDev/helpers/account.js +2 -2
  209. package/lib/projects/localDev/helpers/process.d.ts +1 -0
  210. package/lib/projects/localDev/helpers/process.js +15 -0
  211. package/lib/projects/localDev/helpers/project.js +2 -3
  212. package/lib/projects/localDev/localDevWebsocketServerUtils.d.ts +3 -0
  213. package/lib/projects/localDev/localDevWebsocketServerUtils.js +9 -0
  214. package/lib/projects/urls.d.ts +0 -1
  215. package/lib/projects/urls.js +0 -3
  216. package/lib/prompts/__tests__/projectAddPrompt.test.js +10 -10
  217. package/lib/prompts/installAppPrompt.d.ts +1 -6
  218. package/lib/prompts/installAppPrompt.js +1 -6
  219. package/lib/prompts/projectAddPrompt.d.ts +2 -2
  220. package/lib/prompts/projectAddPrompt.js +1 -1
  221. package/lib/theme/__tests__/migrate.test.js +4 -4
  222. package/lib/ui/index.d.ts +2 -0
  223. package/lib/ui/index.js +8 -0
  224. package/lib/ui/uiMessages.d.ts +5 -0
  225. package/lib/ui/uiMessages.js +5 -0
  226. package/mcp-server/tools/cms/HsCreateModuleTool.d.ts +2 -2
  227. package/mcp-server/tools/project/__tests__/CreateProjectTool.test.js +1 -1
  228. package/package.json +6 -5
  229. package/types/Cms.d.ts +6 -6
  230. package/lib/projects/localDev/DevServerManagerV2.d.ts +0 -22
  231. package/lib/projects/localDev/DevServerManagerV2.js +0 -81
  232. /package/commands/{customObject/schema → cms}/__tests__/delete.test.d.ts +0 -0
  233. /package/commands/{__tests__ → cms/__tests__}/fetch.test.d.ts +0 -0
  234. /package/commands/{__tests__ → cms/__tests__}/function.test.d.ts +0 -0
  235. /package/commands/{__tests__ → cms/__tests__}/lint.test.d.ts +0 -0
  236. /package/commands/{__tests__ → cms/__tests__}/list.test.d.ts +0 -0
  237. /package/commands/{__tests__ → cms/__tests__}/mv.test.d.ts +0 -0
  238. /package/commands/{__tests__ → cms/__tests__}/theme.test.d.ts +0 -0
  239. /package/commands/{__tests__ → cms/function/__tests__}/logs.test.d.ts +0 -0
  240. /package/commands/{theme → cms/theme}/__tests__/generate-selectors.test.d.ts +0 -0
  241. /package/commands/{theme → cms/theme}/__tests__/generate-selectors.test.js +0 -0
  242. /package/commands/{theme → cms/theme}/__tests__/marketplace-validate.test.d.ts +0 -0
  243. /package/commands/{theme → cms/theme}/__tests__/preview.test.d.ts +0 -0
  244. /package/commands/{__tests__/remove.test.d.ts → customObject/__tests__/createSchema.test.d.ts} +0 -0
  245. /package/commands/customObject/{schema/__tests__/create.test.d.ts → __tests__/deleteSchema.test.d.ts} +0 -0
  246. /package/commands/customObject/{schema/__tests__/fetch-all.test.d.ts → __tests__/fetch-all-schemas.test.d.ts} +0 -0
  247. /package/commands/customObject/{schema/__tests__/fetch.test.d.ts → __tests__/fetchSchema.test.d.ts} +0 -0
  248. /package/commands/customObject/{schema/__tests__/list.test.d.ts → __tests__/listSchemas.test.d.ts} +0 -0
  249. /package/commands/customObject/{schema/__tests__/update.test.d.ts → __tests__/updateSchema.test.d.ts} +0 -0
  250. /package/{lib/projects/add/__tests__/v3AddComponent.test.d.ts → commands/project/__tests__/list.test.d.ts} +0 -0
  251. /package/{commands/create → lib/cmsAssets}/api-sample.d.ts +0 -0
  252. /package/{commands/create → lib/cmsAssets}/api-sample.js +0 -0
  253. /package/{commands/create → lib/cmsAssets}/app.d.ts +0 -0
  254. /package/{commands/create → lib/cmsAssets}/app.js +0 -0
  255. /package/{commands/create → lib/cmsAssets}/function.d.ts +0 -0
  256. /package/{commands/create → lib/cmsAssets}/function.js +0 -0
  257. /package/{commands/create → lib/cmsAssets}/index.d.ts +0 -0
  258. /package/{commands/create → lib/cmsAssets}/index.js +0 -0
  259. /package/{commands/create → lib/cmsAssets}/module.d.ts +0 -0
  260. /package/{commands/create → lib/cmsAssets}/module.js +0 -0
  261. /package/{commands/create → lib/cmsAssets}/react-app.d.ts +0 -0
  262. /package/{commands/create → lib/cmsAssets}/react-app.js +0 -0
  263. /package/{commands/create → lib/cmsAssets}/template.d.ts +0 -0
  264. /package/{commands/create → lib/cmsAssets}/template.js +0 -0
  265. /package/{commands/create → lib/cmsAssets}/vue-app.d.ts +0 -0
  266. /package/{commands/create → lib/cmsAssets}/vue-app.js +0 -0
  267. /package/{commands/create → lib/cmsAssets}/webpack-serverless.d.ts +0 -0
  268. /package/{commands/create → lib/cmsAssets}/webpack-serverless.js +0 -0
  269. /package/{commands/create → lib/cmsAssets}/website-theme.d.ts +0 -0
  270. /package/{commands/create → lib/cmsAssets}/website-theme.js +0 -0
  271. /package/lib/projects/{create/__tests__/v3.test.d.ts → __tests__/DevServerManager.test.d.ts} +0 -0
  272. /package/lib/projects/localDev/{LocalDevManager.d.ts → LocalDevManager_DEPRECATED.d.ts} +0 -0
package/lang/en.js CHANGED
@@ -4,7 +4,7 @@ import { PLATFORM_VERSIONS } from '@hubspot/local-dev-lib/constants/projects';
4
4
  import { PERSONAL_ACCESS_KEY_AUTH_METHOD } from '@hubspot/local-dev-lib/constants/auth';
5
5
  import { ARCHIVED_HUBSPOT_CONFIG_YAML_FILE_NAME, GLOBAL_CONFIG_PATH, DEFAULT_HUBSPOT_CONFIG_YAML_FILE_NAME, } from '@hubspot/local-dev-lib/constants/config';
6
6
  import { uiAccountDescription, uiBetaTag, uiCommandReference, uiLink, UI_COLORS, uiAuthCommandReference, } from '../lib/ui/index.js';
7
- import { getProjectDetailUrl, getProjectSettingsUrl, getLocalDevUiUrl, getAppAllowlistUrl, } from '../lib/projects/urls.js';
7
+ import { getProjectDetailUrl, getProjectSettingsUrl, getLocalDevUiUrl, } from '../lib/projects/urls.js';
8
8
  import { getProductUpdatesUrl } from '../lib/links.js';
9
9
  import { APP_DISTRIBUTION_TYPES, APP_AUTH_TYPES, PROJECT_CONFIG_FILE, PROJECT_WITH_APP, LEGACY_PUBLIC_APP_FILE, } from '../lib/constants.js';
10
10
  import { getAccountIdentifier } from '@hubspot/local-dev-lib/config/getAccountIdentifier';
@@ -329,8 +329,299 @@ export const commands = {
329
329
  },
330
330
  },
331
331
  cms: {
332
- describe: 'Commands for working with the CMS.',
332
+ describe: 'Commands for managing CMS assets.',
333
333
  subcommands: {
334
+ template: {
335
+ describe: 'Commands for managing templates.',
336
+ subcommands: {
337
+ create: {
338
+ describe: 'Create a new CMS template.',
339
+ errors: {
340
+ unusablePath: (path) => `The "${path}" is not a usable path to a directory.`,
341
+ },
342
+ positionals: {
343
+ name: 'Name of the new template.',
344
+ dest: 'Destination folder for the new template.',
345
+ },
346
+ options: {
347
+ templateType: 'Template type for template creation.',
348
+ },
349
+ },
350
+ },
351
+ },
352
+ webpack: {
353
+ describe: 'Commands for managing webpack.',
354
+ subcommands: {
355
+ create: {
356
+ describe: 'Create a new webpack bundle.',
357
+ errors: {
358
+ unusablePath: (path) => `The "${path}" is not a usable path to a directory.`,
359
+ },
360
+ positionals: {
361
+ dest: 'Destination folder for the new webpack bundle.',
362
+ },
363
+ },
364
+ },
365
+ },
366
+ theme: {
367
+ describe: 'Commands for managing themes.',
368
+ subcommands: {
369
+ create: {
370
+ describe: 'Create a new theme.',
371
+ errors: {
372
+ unusablePath: (path) => `The "${path}" is not a usable path to a directory.`,
373
+ },
374
+ positionals: {
375
+ dest: 'Destination folder for the new theme.',
376
+ },
377
+ },
378
+ generateSelectors: {
379
+ describe: 'Automatically generates an editor-preview.json file for the given theme. The selectors this command generates are not perfect, so please edit editor-preview.json after running.',
380
+ errors: {
381
+ invalidPath: (themePath) => `Could not find directory "${themePath}"`,
382
+ fieldsNotFound: "Unable to find theme's fields.json.",
383
+ noSelectorsFound: 'No selectors found.',
384
+ },
385
+ success: (themePath, selectorsPath) => `Selectors generated for ${themePath}, please double check the selectors generated at ${selectorsPath} before uploading the theme.`,
386
+ positionals: {
387
+ path: "The path of the theme you'd like to generate an editor-preview.json for.",
388
+ },
389
+ },
390
+ marketplaceValidate: {
391
+ describe: 'Validate a theme for the marketplace.',
392
+ errors: {
393
+ invalidPath: (path) => `The path "${path}" is not a path to a folder in the Design Manager`,
394
+ },
395
+ logs: {
396
+ validatingTheme: (path) => `Validating theme "${path}" \n`,
397
+ },
398
+ results: {
399
+ required: 'Required validation results:',
400
+ recommended: 'Recommended validation results:',
401
+ warnings: {
402
+ file: (file) => `File: ${file}`,
403
+ lineNumber: (line) => `Line number: ${line}`,
404
+ },
405
+ noErrors: 'No errors',
406
+ },
407
+ positionals: {
408
+ path: {
409
+ describe: 'Path to the theme within the Design Manager.',
410
+ },
411
+ },
412
+ },
413
+ preview: {
414
+ describe: 'Upload and watch a theme directory on your computer for changes and start a local development server to preview theme changes on a site.',
415
+ errors: {
416
+ invalidPath: (path) => `The path "${path}" is not a path to a directory`,
417
+ noThemeComponents: 'Your project has no theme components available to preview.',
418
+ uploadFailed: (src, dest) => `Uploading file "${src}" to "${dest}" failed`,
419
+ },
420
+ positionals: {
421
+ src: 'Path to the local directory your theme is in, relative to your current working directory',
422
+ dest: 'Path in HubSpot Design Tools. Can be a net new path. If you wish to preview a site page using your theme changes it must match the path of the theme used by the site.',
423
+ },
424
+ options: {
425
+ notify: 'Log to specified file when a watch task is triggered and after workers have gone idle. Ex. --notify path/to/file',
426
+ noSsl: 'Disable HTTPS',
427
+ port: 'The port on which to start the local server',
428
+ },
429
+ initialUploadProgressBar: {
430
+ start: 'Starting...',
431
+ uploading: 'Uploading...',
432
+ finish: 'Complete!',
433
+ },
434
+ logs: {
435
+ processExited: 'Stopping dev server...',
436
+ },
437
+ },
438
+ },
439
+ },
440
+ app: {
441
+ describe: 'Commands for managing CMS apps.',
442
+ subcommands: {
443
+ create: {
444
+ describe: 'Create a new CMS app.',
445
+ errors: {
446
+ unsupportedAssetType: (assetType, supportedAssetTypes) => `The asset type ${assetType} is not supported. Supported asset types are ${supportedAssetTypes}.`,
447
+ unusablePath: (path) => `The "${path}" is not a usable path to a directory.`,
448
+ },
449
+ positionals: {
450
+ type: 'Type of the new app.',
451
+ name: 'Name of the new app.',
452
+ dest: 'Destination folder for the new app.',
453
+ },
454
+ },
455
+ },
456
+ },
457
+ list: {
458
+ describe: 'List remote contents of a directory in the HubSpot CMS.',
459
+ gettingPathContents: (path) => `Getting contents of ${path}.`,
460
+ noFilesFoundAtPath: (path) => `No files found in ${path}.`,
461
+ positionals: {
462
+ path: {
463
+ describe: 'Remote directory to list contents',
464
+ },
465
+ },
466
+ },
467
+ module: {
468
+ describe: 'Commands for working with modules, including marketplace validation with the marketplace-validate subcommand.',
469
+ subcommands: {
470
+ create: {
471
+ describe: 'Create a new CMS module.',
472
+ errors: {
473
+ unusablePath: (path) => `The "${path}" is not a usable path to a directory.`,
474
+ },
475
+ positionals: {
476
+ name: 'Name of the new module.',
477
+ dest: 'Destination folder for the new module.',
478
+ },
479
+ options: {
480
+ moduleLabel: 'Label for the new module.',
481
+ reactType: 'Whether to create a React module.',
482
+ contentTypes: (contentTypes) => `Content types where the module can be used (${contentTypes.join(', ')}).`,
483
+ global: 'Whether to create a global module.',
484
+ availableForNewContent: 'Whether to create a module available for new content.',
485
+ },
486
+ },
487
+ marketplaceValidate: {
488
+ describe: 'Validate a module for the marketplace. Make sure to include the suffix .module in the path to the module within the Design Manager.',
489
+ errors: {
490
+ invalidPath: (path) => `The path "${path}" is not a path to a module within the Design Manager.`,
491
+ },
492
+ logs: {
493
+ validatingModule: (path) => `Validating module "${path}" \n`,
494
+ },
495
+ results: {
496
+ required: 'Required validation results:',
497
+ recommended: 'Recommended validation results:',
498
+ warnings: {
499
+ file: (file) => `File: ${file}`,
500
+ lineNumber: (line) => `Line number: ${line}`,
501
+ },
502
+ noErrors: 'No errors',
503
+ },
504
+ positionals: {
505
+ src: 'Path to the module within the Design Manager.',
506
+ },
507
+ },
508
+ },
509
+ },
510
+ upload: {
511
+ describe: 'Upload a folder or file from your computer to the HubSpot CMS.',
512
+ errors: {
513
+ destinationRequired: 'A destination path needs to be passed',
514
+ fileIgnored: (path) => `The file "${path}" is being ignored via an .hsignore rule`,
515
+ invalidPath: (path) => `The path "${path}" is not a path to a file or folder`,
516
+ uploadFailed: (src, dest) => `Uploading file "${src}" to "${dest}" failed`,
517
+ someFilesFailed: (dest) => `One or more files failed to upload to "${dest}" in the Design Manager`,
518
+ deleteFailed: (path, accountId) => `Deleting "${path}" from account ${uiAccountDescription(accountId)} failed`,
519
+ },
520
+ options: {
521
+ options: 'Options to pass to javascript fields files',
522
+ saveOutput: "If true, saves all output from javascript fields files as 'fields.output.json'.",
523
+ convertFields: 'If true, converts any javascript fields files contained in module folder or project root.',
524
+ clean: 'Will delete the destination directory and its contents before uploading. This will also clear the global content associated with any global partial templates and modules.',
525
+ force: 'Skips confirmation prompts when doing a clean upload.',
526
+ },
527
+ previewUrl: (previewUrl) => `To preview this theme, visit: ${previewUrl}`,
528
+ positionals: {
529
+ src: 'Path to the local file, relative to your current working directory.',
530
+ dest: 'Path in HubSpot Design Tools, can be a net new path.',
531
+ },
532
+ success: {
533
+ fileUploaded: (src, dest, accountId) => `Uploaded file from "${src}" to "${dest}" in the Design Manager of account ${uiAccountDescription(accountId)}`,
534
+ uploadComplete: (dest) => `Uploading files to "${dest}" in the Design Manager is complete`,
535
+ },
536
+ uploading: (src, dest, accountId) => `Uploading files from "${src}" to "${dest}" in the Design Manager of account ${uiAccountDescription(accountId)}`,
537
+ notUploaded: (src) => `There was an error processing "${src}". The file has not been uploaded.`,
538
+ cleaning: (filePath, accountId) => `Removing "${filePath}" from account ${uiAccountDescription(accountId)} and uploading local...`,
539
+ confirmCleanUpload: (filePath, accountId) => `You are about to delete the directory "${filePath}" and its contents on HubSpot account ${uiAccountDescription(accountId)} before uploading. This will also clear the global content associated with any global partial templates and modules. Are you sure you want to do this?`,
540
+ },
541
+ delete: {
542
+ describe: 'Delete a file or folder from the HubSpot CMS.',
543
+ deleted: (path, accountId) => `Deleted "${path}" from account ${uiAccountDescription(accountId)}`,
544
+ errors: {
545
+ deleteFailed: (path, accountId) => `Deleting "${path}" from account ${uiAccountDescription(accountId)} failed`,
546
+ },
547
+ positionals: {
548
+ path: 'Remote hubspot path',
549
+ },
550
+ },
551
+ watch: {
552
+ describe: 'Watch a directory on your computer for changes and upload the changed files to the HubSpot CMS.',
553
+ errors: {
554
+ folderFailed: (src, dest, accountId) => `Initial uploading of folder "${src}" to "${dest}" in account ${uiAccountDescription(accountId)} had failures`,
555
+ fileFailed: (file, dest, accountId) => `Upload of file "${file}" to "${dest}" in account ${uiAccountDescription(accountId)} failed`,
556
+ destinationRequired: 'A destination directory needs to be passed',
557
+ invalidPath: (path) => `The "${path}" is not a path to a directory`,
558
+ },
559
+ options: {
560
+ disableInitial: 'Disable the initial upload when watching a directory (default)',
561
+ initialUpload: 'Upload directory before watching for updates',
562
+ notify: 'Log to specified file when a watch task is triggered and after workers have gone idle. Ex. --notify path/to/file',
563
+ remove: 'Will cause watch to delete files in your HubSpot account that are not found locally.',
564
+ convertFields: 'If true, converts any javascript fields files contained in module folder or project root.',
565
+ saveOutput: "If true, saves all output from javascript fields files as 'fields.output.json'.",
566
+ options: 'Options to pass to javascript fields files',
567
+ },
568
+ positionals: {
569
+ src: 'Path to the local directory your files are in, relative to your current working directory',
570
+ dest: 'Path in HubSpot Design Tools. Can be a net new path',
571
+ },
572
+ warnings: {
573
+ disableInitial: `Passing the "${chalk.bold('--disable-initial')}" option is no longer necessary. Running "${uiCommandReference('hs watch')}" no longer uploads the watched directory by default.`,
574
+ initialUpload: `To upload the directory run "${uiCommandReference('hs upload')}" beforehand or add the "${chalk.bold('--initial-upload')}" option when running "${uiCommandReference('hs watch')}".`,
575
+ notUploaded: (path) => `The "${uiCommandReference('hs watch')}" command no longer uploads the watched directory when started. The directory "${path}" was not uploaded.`,
576
+ },
577
+ },
578
+ fetch: {
579
+ describe: 'Fetch a file, directory or module from HubSpot and write to a path on your computer.',
580
+ errors: {
581
+ sourceRequired: 'A source to fetch is required.',
582
+ },
583
+ options: {
584
+ staging: {
585
+ describe: 'Retrieve staged changes for project',
586
+ },
587
+ assetVersion: {
588
+ describe: 'Specify what version of a default asset to fetch',
589
+ },
590
+ },
591
+ positionals: {
592
+ dest: {
593
+ describe: 'Local directory you would like the files to be placed in, relative to your current working directory',
594
+ },
595
+ src: {
596
+ describe: 'Path in HubSpot Design Tools',
597
+ },
598
+ },
599
+ },
600
+ lint: {
601
+ issuesFound: (count) => `${count} issues found.`,
602
+ groupName: (path) => `Linting ${path}`,
603
+ positionals: {
604
+ path: {
605
+ describe: 'Local folder to lint',
606
+ },
607
+ },
608
+ },
609
+ mv: {
610
+ describe: 'Move a remote file or folder in HubSpot. This feature is currently in beta and the CLI contract is subject to change.',
611
+ errors: {
612
+ sourcePathExists: (srcPath, destPath) => `The folder "${srcPath}" already exists in "${destPath}".`,
613
+ moveFailed: (srcPath, destPath, accountId) => `Moving "${srcPath}" to "${destPath}" in account ${accountId} failed`,
614
+ },
615
+ move: (srcPath, destPath, accountId) => `Moved "${srcPath}" to "${destPath}" in account ${accountId}`,
616
+ positionals: {
617
+ srcPath: {
618
+ describe: 'Remote hubspot path',
619
+ },
620
+ destPath: {
621
+ describe: 'Remote hubspot path',
622
+ },
623
+ },
624
+ },
334
625
  lighthouseScore: {
335
626
  describe: 'Score a theme using Google lighthouse.',
336
627
  examples: {
@@ -387,6 +678,124 @@ export const commands = {
387
678
  invalidName: 'Module not found with that name, please check the spelling of the module you are trying to download.',
388
679
  },
389
680
  },
681
+ function: {
682
+ describe: 'Commands for managing CMS serverless functions.',
683
+ subcommands: {
684
+ create: {
685
+ describe: 'Create a new CMS serverless function.',
686
+ errors: {
687
+ unusablePath: (path) => `The "${path}" is not a usable path to a directory.`,
688
+ },
689
+ positionals: {
690
+ name: 'Name of the function',
691
+ dest: 'Destination folder for the function',
692
+ },
693
+ options: {
694
+ functionsFolder: 'Folder to create functions in',
695
+ filename: 'Filename for the function',
696
+ endpointMethod: 'HTTP method for the function endpoint',
697
+ endpointPath: 'API endpoint path for the function',
698
+ },
699
+ },
700
+ logs: {
701
+ describe: 'View logs for a CMS serverless function.',
702
+ errors: {
703
+ noLogsFound: (functionPath, accountId) => `No logs were found for the function path "${functionPath}" in account "${accountId}".`,
704
+ },
705
+ examples: {
706
+ default: 'Get 5 most recent logs for function residing at /_hcms/api/my-endpoint',
707
+ follow: 'Poll for and output logs for function residing at /_hcms/api/my-endpoint immediately upon new execution',
708
+ limit: 'Get 10 most recent logs for function residing at /_hcms/api/my-endpoint',
709
+ },
710
+ endpointPrompt: 'Enter a serverless function endpoint:',
711
+ gettingLogs: (latest, functionPath) => `Getting ${latest ? 'latest ' : ''}logs for function with path: ${functionPath}.`,
712
+ options: {
713
+ compact: {
714
+ describe: 'output compact logs',
715
+ },
716
+ follow: {
717
+ describe: 'follow logs',
718
+ },
719
+ latest: {
720
+ describe: 'retrieve most recent log only',
721
+ },
722
+ limit: {
723
+ describe: 'limit the number of logs to output',
724
+ },
725
+ },
726
+ positionals: {
727
+ endpoint: {
728
+ describe: 'Serverless function endpoint',
729
+ },
730
+ },
731
+ tailLogs: (functionPath, accountId) => `Waiting for log entries for "${functionPath}" on account "${accountId}".\n`,
732
+ },
733
+ deploy: {
734
+ debug: {
735
+ startingBuildAndDeploy: (functionPath) => `Starting build and deploy for .functions folder with path: ${functionPath}`,
736
+ },
737
+ errors: {
738
+ buildError: (details) => `Build error: ${details}`,
739
+ noPackageJson: (functionPath) => `Unable to find package.json for function ${functionPath}.`,
740
+ notFunctionsFolder: (functionPath) => `Specified path ${functionPath} is not a .functions folder.`,
741
+ },
742
+ examples: {
743
+ default: 'Build and deploy a new bundle for all functions within the myFunctionFolder.functions folder',
744
+ },
745
+ loading: (functionPath, account) => `Building and deploying bundle for "${functionPath}" on ${account}`,
746
+ loadingFailed: (functionPath, account) => `Failed to build and deploy bundle for "${functionPath}" on ${account}`,
747
+ positionals: {
748
+ path: {
749
+ describe: 'Path to the ".functions" folder',
750
+ },
751
+ },
752
+ success: {
753
+ deployed: (functionPath, accountId, buildTimeSeconds) => `Built and deployed bundle from package.json for ${functionPath} on account ${accountId} in ${buildTimeSeconds}s.`,
754
+ },
755
+ },
756
+ list: {
757
+ debug: {
758
+ gettingFunctions: 'Getting currently deployed functions',
759
+ },
760
+ describe: 'List the currently deployed CMS serverless functions.',
761
+ info: {
762
+ noFunctions: 'No functions found',
763
+ },
764
+ options: {
765
+ json: {
766
+ describe: 'output raw json data',
767
+ },
768
+ },
769
+ },
770
+ server: {
771
+ debug: {
772
+ startingServer: (functionPath) => `Starting local test server for .functions folder with path: ${functionPath}`,
773
+ },
774
+ examples: {
775
+ default: 'Run a local function test server.',
776
+ },
777
+ options: {
778
+ contact: {
779
+ describe: 'Pass contact data to the test function',
780
+ },
781
+ logOutput: {
782
+ describe: 'Output the response body from the serverless function execution (It is suggested not to use this in production environments as it can reveal any secure data returned by the function in logs)',
783
+ },
784
+ port: {
785
+ describe: 'Port to run the test server on',
786
+ },
787
+ watch: {
788
+ describe: 'Watch the specified .functions folder for changes and restart the server',
789
+ },
790
+ },
791
+ positionals: {
792
+ path: {
793
+ describe: 'Path to local .functions folder',
794
+ },
795
+ },
796
+ },
797
+ },
798
+ },
390
799
  },
391
800
  },
392
801
  create: {
@@ -470,6 +879,9 @@ export const commands = {
470
879
  describe: 'Commands for managing custom objects.',
471
880
  seeMoreLink: `${uiLink('View our docs to find out more', 'https://developers.hubspot.com/docs/api-reference/crm-custom-objects-v3/guide#custom-objects-api-guide')}`,
472
881
  subcommands: {
882
+ schema: {
883
+ describe: 'Commands for managing custom object schemas.',
884
+ },
473
885
  create: {
474
886
  describe: 'Create custom object instances.',
475
887
  errors: {
@@ -492,122 +904,117 @@ export const commands = {
492
904
  inputName: "[--name] Enter the name of the schema for the custom object(s) you'd like to create:",
493
905
  inputPath: '[--path] Enter the path to the JSON file containing the object definitions:',
494
906
  },
495
- schema: {
496
- describe: 'Commands for managing custom object schemas.',
497
- subcommands: {
498
- create: {
499
- describe: 'Create a custom object schema.',
500
- errors: {
501
- invalidSchema: 'The schema definition is invalid. Please check the schema and try again.',
502
- creationFailed: (definition) => `Schema creation from ${definition} failed`,
503
- },
504
- options: {
505
- definition: {
506
- describe: 'Local path to the JSON file containing the schema definition',
507
- },
508
- },
509
- success: {
510
- schemaCreated: (accountId) => `Your schema has been created in account "${accountId}"`,
511
- schemaViewable: (url) => `Schema can be viewed at ${url}`,
512
- },
907
+ createSchema: {
908
+ describe: 'Create a custom object schema.',
909
+ errors: {
910
+ invalidSchema: 'The schema definition is invalid. Please check the schema and try again.',
911
+ creationFailed: (definition) => `Schema creation from ${definition} failed`,
912
+ },
913
+ options: {
914
+ definition: {
915
+ describe: 'Local path to the JSON file containing the schema definition',
513
916
  },
514
- delete: {
515
- describe: 'Delete a custom object schema.',
516
- errors: {
517
- delete: (name) => `Unable to delete ${name}`,
518
- },
519
- examples: {
520
- default: 'Delete "schemaName" schema',
521
- },
522
- positionals: {
523
- name: {
524
- describe: 'Name of the target schema',
525
- },
526
- },
527
- options: {
528
- force: {
529
- describe: 'Force the deletion of the schema.',
530
- },
531
- },
532
- success: {
533
- delete: (name) => `Successfully initiated deletion of ${name}`,
534
- },
535
- confirmDelete: (name) => `Are you sure you want to delete the schema "${name}"?`,
536
- deleteCancelled: (name) => `Deletion of schema "${name}" cancelled.`,
537
- selectSchema: 'Which schema would you like to delete?',
917
+ },
918
+ success: {
919
+ schemaCreated: (accountId) => `Your schema has been created in account "${accountId}"`,
920
+ schemaViewable: (url) => `Schema can be viewed at ${url}`,
921
+ },
922
+ },
923
+ deleteSchema: {
924
+ describe: 'Delete a custom object schema.',
925
+ errors: {
926
+ delete: (name) => `Unable to delete ${name}`,
927
+ },
928
+ examples: {
929
+ default: 'Delete "schemaName" schema',
930
+ },
931
+ positionals: {
932
+ name: {
933
+ describe: 'Name of the target schema',
538
934
  },
539
- fetchAll: {
540
- describe: 'Fetch all custom object schemas for an account.',
541
- errors: {
542
- fetch: 'Unable to fetch schemas',
543
- },
544
- examples: {
545
- default: 'Fetch all schemas for an account and put them in the current working directory',
546
- specifyPath: 'Fetch all schemas for an account and put them in a directory named my/folder',
547
- },
548
- positionals: {
549
- dest: {
550
- describe: 'Local folder where schemas will be written',
551
- },
552
- },
553
- success: {
554
- fetch: (path) => `Saved schemas to ${path}`,
555
- },
556
- inputDest: 'Where would you like to save the schemas?',
935
+ },
936
+ options: {
937
+ force: {
938
+ describe: 'Force the deletion of the schema.',
557
939
  },
558
- fetch: {
559
- describe: 'Fetch a custom object schema.',
560
- errors: {
561
- fetch: (name) => `Unable to fetch ${name}`,
562
- },
563
- examples: {
564
- default: 'Fetch "schemaId" schema and put it in the current working directory',
565
- specifyPath: 'Fetch "schemaId" schema and put it in a directory named my/folder',
566
- },
567
- positionals: {
568
- dest: {
569
- describe: 'Local folder where schema will be written',
570
- },
571
- name: {
572
- describe: 'Name of the target schema',
573
- },
574
- },
575
- selectSchema: 'Which schema would you like to fetch?',
576
- inputDest: 'What would you like to name the destination file?',
577
- success: {
578
- save: (name, path) => `The schema "${name}" has been saved to "${path}"`,
579
- savedToPath: (path) => `Saved schema to ${path}`,
580
- },
940
+ },
941
+ success: {
942
+ delete: (name) => `Successfully initiated deletion of ${name}`,
943
+ },
944
+ confirmDelete: (name) => `Are you sure you want to delete the schema "${name}"?`,
945
+ deleteCancelled: (name) => `Deletion of schema "${name}" cancelled.`,
946
+ selectSchema: 'Which schema would you like to delete?',
947
+ },
948
+ fetchAllSchemas: {
949
+ describe: 'Fetch all custom object schemas for an account.',
950
+ errors: {
951
+ fetch: 'Unable to fetch schemas',
952
+ },
953
+ examples: {
954
+ default: 'Fetch all schemas for an account and put them in the current working directory',
955
+ specifyPath: 'Fetch all schemas for an account and put them in a directory named my/folder',
956
+ },
957
+ positionals: {
958
+ dest: {
959
+ describe: 'Local folder where schemas will be written',
581
960
  },
582
- list: {
583
- describe: 'List custom object schemas.',
584
- errors: {
585
- list: 'Unable to list schemas',
586
- },
961
+ },
962
+ success: {
963
+ fetch: (path) => `Saved schemas to ${path}`,
964
+ },
965
+ inputDest: 'Where would you like to save the schemas?',
966
+ },
967
+ fetchSchema: {
968
+ describe: 'Fetch a custom object schema.',
969
+ errors: {
970
+ fetch: (name) => `Unable to fetch ${name}`,
971
+ },
972
+ examples: {
973
+ default: 'Fetch "schemaId" schema and put it in the current working directory',
974
+ specifyPath: 'Fetch "schemaId" schema and put it in a directory named my/folder',
975
+ },
976
+ positionals: {
977
+ dest: {
978
+ describe: 'Local folder where schema will be written',
587
979
  },
588
- update: {
589
- describe: 'Update an existing custom object schema.',
590
- errors: {
591
- invalidSchema: 'The schema definition is invalid. Please check the schema and try again.',
592
- update: (definition) => `Schema update from ${definition} failed`,
593
- },
594
- options: {
595
- path: {
596
- describe: 'Local path to the JSON file containing the schema definition',
597
- },
598
- },
599
- positionals: {
600
- name: {
601
- describe: 'Name of the target schema',
602
- },
603
- },
604
- success: {
605
- update: (accountId) => `Your schema has been updated in account "${accountId}"`,
606
- viewAtUrl: (url) => `Schema can be viewed at ${url}`,
607
- },
608
- selectSchema: 'Which schema would you like to update?',
980
+ name: {
981
+ describe: 'Name of the target schema',
982
+ },
983
+ },
984
+ selectSchema: 'Which schema would you like to fetch?',
985
+ inputDest: 'What would you like to name the destination file?',
986
+ success: {
987
+ save: (name, path) => `The schema "${name}" has been saved to "${path}"`,
988
+ savedToPath: (path) => `Saved schema to ${path}`,
989
+ },
990
+ },
991
+ listSchemas: {
992
+ describe: 'List custom object schemas.',
993
+ errors: {
994
+ list: 'Unable to list schemas',
995
+ },
996
+ },
997
+ updateSchema: {
998
+ describe: 'Update an existing custom object schema.',
999
+ errors: {
1000
+ invalidSchema: 'The schema definition is invalid. Please check the schema and try again.',
1001
+ update: (definition) => `Schema update from ${definition} failed`,
1002
+ },
1003
+ options: {
1004
+ path: {
1005
+ describe: 'Local path to the JSON file containing the schema definition',
1006
+ },
1007
+ },
1008
+ positionals: {
1009
+ name: {
1010
+ describe: 'Name of the target schema',
609
1011
  },
610
1012
  },
1013
+ success: {
1014
+ update: (accountId) => `Your schema has been updated in account "${accountId}"`,
1015
+ viewAtUrl: (url) => `Schema can be viewed at ${url}`,
1016
+ },
1017
+ selectSchema: 'Which schema would you like to update?',
611
1018
  },
612
1019
  },
613
1020
  },
@@ -622,28 +1029,6 @@ export const commands = {
622
1029
  },
623
1030
  outputWritten: (filename) => `Output written to ${chalk.bold(filename)}`,
624
1031
  },
625
- fetch: {
626
- describe: 'Fetch a file, directory or module from HubSpot and write to a path on your computer.',
627
- errors: {
628
- sourceRequired: 'A source to fetch is required.',
629
- },
630
- options: {
631
- staging: {
632
- describe: 'Retrieve staged changes for project',
633
- },
634
- assetVersion: {
635
- describe: 'Specify what version of a default asset to fetch',
636
- },
637
- },
638
- positionals: {
639
- dest: {
640
- describe: 'Local directory you would like the files to be placed in, relative to your current working directory',
641
- },
642
- src: {
643
- describe: 'Path in HubSpot Design Tools',
644
- },
645
- },
646
- },
647
1032
  filemanager: {
648
1033
  describe: 'Commands for managing files in the File Manager.',
649
1034
  subcommands: {
@@ -693,75 +1078,6 @@ export const commands = {
693
1078
  },
694
1079
  },
695
1080
  },
696
- function: {
697
- describe: 'Commands for managing CMS serverless functions.',
698
- subcommands: {
699
- deploy: {
700
- debug: {
701
- startingBuildAndDeploy: (functionPath) => `Starting build and deploy for .functions folder with path: ${functionPath}`,
702
- },
703
- errors: {
704
- buildError: (details) => `Build error: ${details}`,
705
- noPackageJson: (functionPath) => `Unable to find package.json for function ${functionPath}.`,
706
- notFunctionsFolder: (functionPath) => `Specified path ${functionPath} is not a .functions folder.`,
707
- },
708
- examples: {
709
- default: 'Build and deploy a new bundle for all functions within the myFunctionFolder.functions folder',
710
- },
711
- loading: (functionPath, account) => `Building and deploying bundle for "${functionPath}" on ${account}`,
712
- loadingFailed: (functionPath, account) => `Failed to build and deploy bundle for "${functionPath}" on ${account}`,
713
- positionals: {
714
- path: {
715
- describe: 'Path to the ".functions" folder',
716
- },
717
- },
718
- success: {
719
- deployed: (functionPath, accountId, buildTimeSeconds) => `Built and deployed bundle from package.json for ${functionPath} on account ${accountId} in ${buildTimeSeconds}s.`,
720
- },
721
- },
722
- list: {
723
- debug: {
724
- gettingFunctions: 'Getting currently deployed functions',
725
- },
726
- describe: 'List the currently deployed CMS serverless functions.',
727
- info: {
728
- noFunctions: 'No functions found',
729
- },
730
- options: {
731
- json: {
732
- describe: 'output raw json data',
733
- },
734
- },
735
- },
736
- server: {
737
- debug: {
738
- startingServer: (functionPath) => `Starting local test server for .functions folder with path: ${functionPath}`,
739
- },
740
- examples: {
741
- default: 'Run a local function test server.',
742
- },
743
- options: {
744
- contact: {
745
- describe: 'Pass contact data to the test function',
746
- },
747
- logOutput: {
748
- describe: 'Output the response body from the serverless function execution (It is suggested not to use this in production environments as it can reveal any secure data returned by the function in logs)',
749
- },
750
- port: {
751
- describe: 'Port to run the test server on',
752
- },
753
- watch: {
754
- describe: 'Watch the specified .functions folder for changes and restart the server',
755
- },
756
- },
757
- positionals: {
758
- path: {
759
- describe: 'Path to local .functions folder',
760
- },
761
- },
762
- },
763
- },
764
- },
765
1081
  hubdb: {
766
1082
  describe: 'Commands for managing HubDB tables.',
767
1083
  subcommands: {
@@ -877,58 +1193,6 @@ export const commands = {
877
1193
  globalConfigFileExists: `You are using our new global configuration for account management, which is not compatible with this command. Please use ${uiCommandReference('hs account auth')} instead.`,
878
1194
  },
879
1195
  },
880
- lint: {
881
- issuesFound: (count) => `${count} issues found.`,
882
- groupName: (path) => `Linting ${path}`,
883
- positionals: {
884
- path: {
885
- describe: 'Local folder to lint',
886
- },
887
- },
888
- },
889
- list: {
890
- describe: 'List remote contents of a directory.',
891
- gettingPathContents: (path) => `Getting contents of ${path}.`,
892
- noFilesFoundAtPath: (path) => `No files found in ${path}.`,
893
- positionals: {
894
- path: {
895
- describe: 'Remote directory to list contents',
896
- },
897
- },
898
- },
899
- logs: {
900
- describe: 'View logs for a CMS serverless function.',
901
- errors: {
902
- noLogsFound: (functionPath, accountId) => `No logs were found for the function path "${functionPath}" in account "${accountId}".`,
903
- },
904
- examples: {
905
- default: 'Get 5 most recent logs for function residing at /_hcms/api/my-endpoint',
906
- follow: 'Poll for and output logs for function residing at /_hcms/api/my-endpoint immediately upon new execution',
907
- limit: 'Get 10 most recent logs for function residing at /_hcms/api/my-endpoint',
908
- },
909
- endpointPrompt: 'Enter a serverless function endpoint:',
910
- gettingLogs: (latest, functionPath) => `Getting ${latest ? 'latest ' : ''}logs for function with path: ${functionPath}.`,
911
- options: {
912
- compact: {
913
- describe: 'output compact logs',
914
- },
915
- follow: {
916
- describe: 'follow logs',
917
- },
918
- latest: {
919
- describe: 'retrieve most recent log only',
920
- },
921
- limit: {
922
- describe: 'limit the number of logs to output',
923
- },
924
- },
925
- positionals: {
926
- endpoint: {
927
- describe: 'Serverless function endpoint',
928
- },
929
- },
930
- tailLogs: (functionPath, accountId) => `Waiting for log entries for "${functionPath}" on account "${accountId}".\n`,
931
- },
932
1196
  mcp: {
933
1197
  describe: 'Commands for managing HubSpot MCP servers.',
934
1198
  setup: {
@@ -988,14 +1252,6 @@ export const commands = {
988
1252
  shuttingDown: 'Shutting down MCP server...',
989
1253
  },
990
1254
  },
991
- mv: {
992
- describe: 'Move a remote file or folder in HubSpot. This feature is currently in beta and the CLI contract is subject to change.',
993
- errors: {
994
- sourcePathExists: (srcPath, destPath) => `The folder "${srcPath}" already exists in "${destPath}".`,
995
- moveFailed: (srcPath, destPath, accountId) => `Moving "${srcPath}" to "${destPath}" in account ${accountId} failed`,
996
- },
997
- move: (srcPath, destPath, accountId) => `Moved "${srcPath}" to "${destPath}" in account ${accountId}`,
998
- },
999
1255
  open: {
1000
1256
  describe: 'Open a HubSpot page in your browser.',
1001
1257
  options: {
@@ -1083,7 +1339,7 @@ export const commands = {
1083
1339
  header: 'HubSpot projects local development',
1084
1340
  placeholderAccountSelection: 'Using default account as target account (for now)',
1085
1341
  accountTypeInformation: 'Testing in a developer test account is strongly recommended, but you can use a sandbox account if your plan allows you to create one.',
1086
- learnMoreMessageV3: `Learn more about ${uiLink('HubSpot projects local dev', 'https://developers.hubspot.com/docs/developer-tooling/local-development/hubspot-cli/project-commands#start-a-local-development-server')} | ${uiLink('HubSpot account types', 'https://developers.hubspot.com/docs/getting-started/account-types')}`,
1342
+ learnMoreMessageV2: `Learn more about ${uiLink('HubSpot projects local dev', 'https://developers.hubspot.com/docs/developer-tooling/local-development/hubspot-cli/project-commands#start-a-local-development-server')} | ${uiLink('HubSpot account types', 'https://developers.hubspot.com/docs/getting-started/account-types')}`,
1087
1343
  learnMoreMessageLegacy: uiLink('Learn more about the projects local dev server', 'https://developers.hubspot.com/docs/developer-tooling/local-development/hubspot-cli/project-commands#start-a-local-development-server'),
1088
1344
  profileProjectAccountExplanation: (accountId, profileName) => `Using account ${uiAccountDescription(accountId)} from profile ${chalk.bold(profileName)} for project upload`,
1089
1345
  defaultProjectAccountExplanation: (accountId) => `Using default account ${uiAccountDescription(accountId)} for project upload`,
@@ -1100,7 +1356,8 @@ export const commands = {
1100
1356
  noRunnableComponents: `No supported components were found in this project. Run ${uiCommandReference('hs project add')} to see a list of available components and add one to your project.`,
1101
1357
  accountNotCombined: `\nLocal development of unified apps is currently only compatible with accounts that are opted into the unified apps beta. Make sure that this account is opted in or switch accounts using ${uiCommandReference('hs account use')}.`,
1102
1358
  unsupportedAccountFlagLegacy: 'The --project-account and --testing-account flags are not supported for projects with platform versions earlier than 2025.2.',
1103
- unsupportedAccountFlagV3: 'The --account flag is is not supported supported for projects with platform versions 2025.2 and newer. Use --testing-account and --project-account flags to specify accounts to use for local dev',
1359
+ unsupportedAccountFlagV2: 'The --account flag is is not supported supported for projects with platform versions 2025.2 and newer. Use --testing-account and --project-account flags to specify accounts to use for local dev',
1360
+ localDevAlreadyRunning: `Another ${uiCommandReference('hs project dev')} process is already running. To proceed with local development of this project, stop the existing process and re-run ${uiCommandReference('hs project dev')}.`,
1104
1361
  },
1105
1362
  examples: {
1106
1363
  default: 'Start local dev for the current project',
@@ -1442,7 +1699,7 @@ export const commands = {
1442
1699
  uploadFailed: (remotePath, filePath) => `Failed to upload file "${filePath}" to "${remotePath}"`,
1443
1700
  deleteFileFailed: (remotePath) => `Failed to delete file "${remotePath}"`,
1444
1701
  deleteFolderFailed: (remotePath) => `Failed to delete folder "${remotePath}"`,
1445
- v3ApiError: (platformVersion) => `${uiCommandReference('hs project watch')} is not supported for platform version '${platformVersion}' use ${uiCommandReference('hs project dev')} instead to develop locally. ${uiLink('How to develop locally', 'https://developers.hubspot.com/docs/guides/crm/ui-extensions/local-development')}`,
1702
+ v2ApiError: (platformVersion) => `${uiCommandReference('hs project watch')} is not supported for platform version '${platformVersion}' use ${uiCommandReference('hs project dev')} instead to develop locally. ${uiLink('How to develop locally', 'https://developers.hubspot.com/docs/guides/crm/ui-extensions/local-development')}`,
1446
1703
  },
1447
1704
  },
1448
1705
  download: {
@@ -1523,15 +1780,16 @@ export const commands = {
1523
1780
  },
1524
1781
  },
1525
1782
  },
1526
- },
1527
- remove: {
1528
- describe: 'Delete a file or folder from the HubSpot CMS.',
1529
- deleted: (path, accountId) => `Deleted "${path}" from account ${uiAccountDescription(accountId)}`,
1530
- errors: {
1531
- deleteFailed: (path, accountId) => `Deleting "${path}" from account ${uiAccountDescription(accountId)} failed`,
1532
- },
1533
- positionals: {
1534
- path: 'Remote hubspot path',
1783
+ list: {
1784
+ describe: 'List uploaded projects that exist in the current target account',
1785
+ projects: `${chalk.bold('Projects')}:`,
1786
+ labels: {
1787
+ name: 'Name',
1788
+ platformVersion: 'Platform Version',
1789
+ },
1790
+ errors: {
1791
+ noProjectsFound: (accountId) => `No projects found for account ${uiAccountDescription(accountId)}`,
1792
+ },
1535
1793
  },
1536
1794
  },
1537
1795
  sandbox: {
@@ -1791,155 +2049,6 @@ export const commands = {
1791
2049
  },
1792
2050
  },
1793
2051
  },
1794
- theme: {
1795
- describe: 'Commands for managing themes.',
1796
- subcommands: {
1797
- generateSelectors: {
1798
- describe: 'Automatically generates an editor-preview.json file for the given theme. The selectors this command generates are not perfect, so please edit editor-preview.json after running.',
1799
- errors: {
1800
- invalidPath: (themePath) => `Could not find directory "${themePath}"`,
1801
- fieldsNotFound: "Unable to find theme's fields.json.",
1802
- noSelectorsFound: 'No selectors found.',
1803
- },
1804
- success: (themePath, selectorsPath) => `Selectors generated for ${themePath}, please double check the selectors generated at ${selectorsPath} before uploading the theme.`,
1805
- positionals: {
1806
- path: "The path of the theme you'd like to generate an editor-preview.json for.",
1807
- },
1808
- },
1809
- marketplaceValidate: {
1810
- describe: 'Validate a theme for the marketplace.',
1811
- errors: {
1812
- invalidPath: (path) => `The path "${path}" is not a path to a folder in the Design Manager`,
1813
- },
1814
- logs: {
1815
- validatingTheme: (path) => `Validating theme "${path}" \n`,
1816
- },
1817
- results: {
1818
- required: 'Required validation results:',
1819
- recommended: 'Recommended validation results:',
1820
- warnings: {
1821
- file: (file) => `File: ${file}`,
1822
- lineNumber: (line) => `Line number: ${line}`,
1823
- },
1824
- noErrors: 'No errors',
1825
- },
1826
- positionals: {
1827
- path: {
1828
- describe: 'Path to the theme within the Design Manager.',
1829
- },
1830
- },
1831
- },
1832
- preview: {
1833
- describe: 'Upload and watch a theme directory on your computer for changes and start a local development server to preview theme changes on a site.',
1834
- errors: {
1835
- invalidPath: (path) => `The path "${path}" is not a path to a directory`,
1836
- noThemeComponents: 'Your project has no theme components available to preview.',
1837
- uploadFailed: (src, dest) => `Uploading file "${src}" to "${dest}" failed`,
1838
- },
1839
- positionals: {
1840
- src: 'Path to the local directory your theme is in, relative to your current working directory',
1841
- dest: 'Path in HubSpot Design Tools. Can be a net new path. If you wish to preview a site page using your theme changes it must match the path of the theme used by the site.',
1842
- },
1843
- options: {
1844
- notify: 'Log to specified file when a watch task is triggered and after workers have gone idle. Ex. --notify path/to/file',
1845
- noSsl: 'Disable HTTPS',
1846
- port: 'The port on which to start the local server',
1847
- },
1848
- initialUploadProgressBar: {
1849
- start: 'Starting...',
1850
- uploading: 'Uploading...',
1851
- finish: 'Complete!',
1852
- },
1853
- logs: {
1854
- processExited: 'Stopping dev server...',
1855
- },
1856
- },
1857
- },
1858
- },
1859
- module: {
1860
- describe: 'Commands for working with modules, including marketplace validation with the marketplace-validate subcommand.',
1861
- subcommands: {
1862
- marketplaceValidate: {
1863
- describe: 'Validate a module for the marketplace. Make sure to include the suffix .module in the path to the module within the Design Manager.',
1864
- errors: {
1865
- invalidPath: (path) => `The path "${path}" is not a path to a module within the Design Manager.`,
1866
- },
1867
- logs: {
1868
- validatingModule: (path) => `Validating module "${path}" \n`,
1869
- },
1870
- results: {
1871
- required: 'Required validation results:',
1872
- recommended: 'Recommended validation results:',
1873
- warnings: {
1874
- file: (file) => `File: ${file}`,
1875
- lineNumber: (line) => `Line number: ${line}`,
1876
- },
1877
- noErrors: 'No errors',
1878
- },
1879
- positionals: {
1880
- src: 'Path to the module within the Design Manager.',
1881
- },
1882
- },
1883
- },
1884
- },
1885
- upload: {
1886
- describe: 'Upload a folder or file from your computer to the HubSpot CMS.',
1887
- errors: {
1888
- destinationRequired: 'A destination path needs to be passed',
1889
- fileIgnored: (path) => `The file "${path}" is being ignored via an .hsignore rule`,
1890
- invalidPath: (path) => `The path "${path}" is not a path to a file or folder`,
1891
- uploadFailed: (src, dest) => `Uploading file "${src}" to "${dest}" failed`,
1892
- someFilesFailed: (dest) => `One or more files failed to upload to "${dest}" in the Design Manager`,
1893
- deleteFailed: (path, accountId) => `Deleting "${path}" from account ${uiAccountDescription(accountId)} failed`,
1894
- },
1895
- options: {
1896
- options: 'Options to pass to javascript fields files',
1897
- saveOutput: "If true, saves all output from javascript fields files as 'fields.output.json'.",
1898
- convertFields: 'If true, converts any javascript fields files contained in module folder or project root.',
1899
- clean: 'Will delete the destination directory and its contents before uploading. This will also clear the global content associated with any global partial templates and modules.',
1900
- force: 'Skips confirmation prompts when doing a clean upload.',
1901
- },
1902
- previewUrl: (previewUrl) => `To preview this theme, visit: ${previewUrl}`,
1903
- positionals: {
1904
- src: 'Path to the local file, relative to your current working directory.',
1905
- dest: 'Path in HubSpot Design Tools, can be a net new path.',
1906
- },
1907
- success: {
1908
- fileUploaded: (src, dest, accountId) => `Uploaded file from "${src}" to "${dest}" in the Design Manager of account ${uiAccountDescription(accountId)}`,
1909
- uploadComplete: (dest) => `Uploading files to "${dest}" in the Design Manager is complete`,
1910
- },
1911
- uploading: (src, dest, accountId) => `Uploading files from "${src}" to "${dest}" in the Design Manager of account ${uiAccountDescription(accountId)}`,
1912
- notUploaded: (src) => `There was an error processing "${src}". The file has not been uploaded.`,
1913
- cleaning: (filePath, accountId) => `Removing "${filePath}" from account ${uiAccountDescription(accountId)} and uploading local...`,
1914
- confirmCleanUpload: (filePath, accountId) => `You are about to delete the directory "${filePath}" and its contents on HubSpot account ${uiAccountDescription(accountId)} before uploading. This will also clear the global content associated with any global partial templates and modules. Are you sure you want to do this?`,
1915
- },
1916
- watch: {
1917
- describe: 'Watch a directory on your computer for changes and upload the changed files to the HubSpot CMS.',
1918
- errors: {
1919
- folderFailed: (src, dest, accountId) => `Initial uploading of folder "${src}" to "${dest}" in account ${uiAccountDescription(accountId)} had failures`,
1920
- fileFailed: (file, dest, accountId) => `Upload of file "${file}" to "${dest}" in account ${uiAccountDescription(accountId)} failed`,
1921
- destinationRequired: 'A destination directory needs to be passed',
1922
- invalidPath: (path) => `The "${path}" is not a path to a directory`,
1923
- },
1924
- options: {
1925
- disableInitial: 'Disable the initial upload when watching a directory (default)',
1926
- initialUpload: 'Upload directory before watching for updates',
1927
- notify: 'Log to specified file when a watch task is triggered and after workers have gone idle. Ex. --notify path/to/file',
1928
- remove: 'Will cause watch to delete files in your HubSpot account that are not found locally.',
1929
- convertFields: 'If true, converts any javascript fields files contained in module folder or project root.',
1930
- saveOutput: "If true, saves all output from javascript fields files as 'fields.output.json'.",
1931
- options: 'Options to pass to javascript fields files',
1932
- },
1933
- positionals: {
1934
- src: 'Path to the local directory your files are in, relative to your current working directory',
1935
- dest: 'Path in HubSpot Design Tools. Can be a net new path',
1936
- },
1937
- warnings: {
1938
- disableInitial: `Passing the "${chalk.bold('--disable-initial')}" option is no longer necessary. Running "${uiCommandReference('hs watch')}" no longer uploads the watched directory by default.`,
1939
- initialUpload: `To upload the directory run "${uiCommandReference('hs upload')}" beforehand or add the "${chalk.bold('--initial-upload')}" option when running "${uiCommandReference('hs watch')}".`,
1940
- notUploaded: (path) => `The "${uiCommandReference('hs watch')}" command no longer uploads the watched directory when started. The directory "${path}" was not uploaded.`,
1941
- },
1942
- },
1943
2052
  convertFields: {
1944
2053
  describe: 'Converts a specific JavaScript fields file of a module or theme to JSON.',
1945
2054
  positionals: {
@@ -2041,6 +2150,7 @@ export const commands = {
2041
2150
  options: {
2042
2151
  name: 'The name of the test account (in your CLI config) to delete',
2043
2152
  id: 'The id of the test account',
2153
+ force: 'Skips all confirmation prompts when deleting a test account.',
2044
2154
  },
2045
2155
  examples: {
2046
2156
  withPositionalID: (testAccountToDelete) => `Delete a test account with id "${testAccountToDelete}" using positional argument`,
@@ -2695,10 +2805,14 @@ export const lib = {
2695
2805
  },
2696
2806
  },
2697
2807
  AppDevModeInterface: {
2808
+ autoInstallStaticAuthApp: {
2809
+ installing: (appName, targetTestAccountId) => `Installing ${chalk.bold(appName)} on account ${uiAccountDescription(targetTestAccountId)}...`,
2810
+ success: (appName, targetTestAccountId) => `Successfully installed ${chalk.bold(appName)} on account ${uiAccountDescription(targetTestAccountId)}\n`,
2811
+ error: (appName, targetTestAccountId) => `Error installing ${chalk.bold(appName)} on account ${uiAccountDescription(targetTestAccountId)}. You may still be able to install your app in your browser.`,
2812
+ },
2698
2813
  defaultMarketplaceAppWarning: (installCount) => `Your marketplace app is currently installed in ${chalk.bold(`${installCount} ${installCount === 1 ? 'account' : 'accounts'}`)}. Any uploaded changes will impact your app's users. We strongly recommend creating a copy of this app to test your changes before proceeding.`,
2699
2814
  autoInstallDeclined: 'You must install your app on your target test account to proceed with local development.',
2700
2815
  autoInstallSuccess: (appName, targetTestAccountId) => `Successfully installed app ${appName} on account ${uiAccountDescription(targetTestAccountId)}\n`,
2701
- autoInstallError: (appName, targetTestAccountId) => `Error installing app ${appName} on account ${uiAccountDescription(targetTestAccountId)}. You may still be able to install your app in your browser.`,
2702
2816
  fetchAppData: {
2703
2817
  checking: (appName) => `Checking installations for your app ${chalk.bold(appName)}...`,
2704
2818
  success: (appName, accountId) => `Your app ${chalk.bold(appName)} is installed on account ${uiAccountDescription(accountId, false)}`,
@@ -2708,6 +2822,13 @@ export const lib = {
2708
2822
  },
2709
2823
  distributionChanged: `Your app's distribution type has been changed from ${APP_DISTRIBUTION_TYPES.PRIVATE} to ${APP_DISTRIBUTION_TYPES.MARKETPLACE}. Once uploaded, this change cannot be reversed. Before uploading your project, confirm that you want to ${chalk.bold('permanantly')} change your app's distribution type. This will uninstall your app from all accounts.`,
2710
2824
  authTypeChanged: `Your app's auth type has been changed from ${APP_AUTH_TYPES.STATIC} to ${APP_AUTH_TYPES.OAUTH}. Once uploaded, this change cannot be reversed. Before uploading your project, confirm that you want to ${chalk.bold('permanantly')} change your app's auth type. This will uninstall your app from all accounts.`,
2825
+ installationFailed: 'An error occured while installing your app. Your app must be installed in your target test account to proceed with local development.',
2826
+ waitUntilAppIsInstalled: {
2827
+ link: (installUrl) => `${uiLink('Install your app', installUrl)} to proceed with local development\n`,
2828
+ waiting: 'Waiting for your app to be installed...',
2829
+ success: (appName, accountId) => `Your app ${chalk.bold(appName)} has been installed successfully on account ${uiAccountDescription(accountId)}\n`,
2830
+ },
2831
+ appDataNotFound: 'An error occurred while fetching data for your app.',
2711
2832
  },
2712
2833
  LocalDevWebsocketServer: {
2713
2834
  errors: {
@@ -2791,7 +2912,7 @@ export const lib = {
2791
2912
  },
2792
2913
  middleware: {
2793
2914
  updateNotification: {
2794
- notifyTitle: chalk.bold('Update available'),
2915
+ notifyTitle: chalk.bold('CLI update available'),
2795
2916
  cmsUpdateNotification: (packageName) => `${chalk.bold('The CMS CLI is now the HubSpot CLI')}\n\nTo upgrade, uninstall ${chalk.bold(packageName)}\nand then run ${uiCommandReference('{updateCommand}')}`,
2796
2917
  cliUpdateNotification: `HubSpot CLI version ${chalk.cyan(chalk.bold('{currentVersion}'))} is outdated.\nRun ${uiCommandReference('{updateCommand}')} to upgrade to version ${chalk.cyan(chalk.bold('{latestVersion}'))}`,
2797
2918
  },
@@ -3011,7 +3132,7 @@ export const lib = {
3011
3132
  },
3012
3133
  },
3013
3134
  buildAccount: {
3014
- createDeveloperTestAccountV3: {
3135
+ createDeveloperTestAccountV2: {
3015
3136
  syncFailure: 'Failed to sync developer test account',
3016
3137
  pakFailure: 'Failed to generate personal access key for developer test account',
3017
3138
  },
@@ -3075,6 +3196,21 @@ export const lib = {
3075
3196
  mergeConflictMessage: (count, propertyList) => `Conflict${count > 1 ? 's' : ''} detected for ${chalk.bold(propertyList)}.`,
3076
3197
  mergeConfigConflictPrompt: (property, newValue, oldValue) => `Change ${property} from ${newValue} to ${oldValue}?`,
3077
3198
  },
3199
+ handleAccountNameConflicts: {
3200
+ warnings: {
3201
+ accountNameConflictMessage: (count) => `${count} account name conflict${count > 1 ? 's' : ''} detected.`,
3202
+ forceFlagDetected: (count, renameDetails) => `Force flag detected. Automatically renaming ${count} account${count > 1 ? 's' : ''} with duplicate name${count > 1 ? 's' : ''}:\n${renameDetails}`,
3203
+ },
3204
+ prompts: {
3205
+ renameOrOmitAccountPrompt: (accountName, accountId) => `Local account name="${accountName}" (ID: ${accountId}) conflicts with an existing global account.\nRename the local account to include it in the merge? If not, it will be skipped.`,
3206
+ newAccountNamePrompt: (accountName, portalId) => `Enter a new name for the local account [ID: ${portalId}] (currently named "${accountName}"):`,
3207
+ },
3208
+ errors: {
3209
+ nameRequired: 'The name may not be blank. Please add a name for the config.',
3210
+ sameName: 'The new account name must be different from the current name.',
3211
+ nameAlreadyInConfig: (name) => `The name "${name}" is already used by another account.`,
3212
+ },
3213
+ },
3078
3214
  handleMerge: {
3079
3215
  description: (archivedConfigName) => `We will automatically merge the contents of your deprecated config file into your global configuration file. This will merge the configured accounts and settings into the global config. Then it will archive the deprecated config as ${archivedConfigName} for you to manually cleanup at your convenience.`,
3080
3216
  confirmPrompt: 'Merge the deprecated config into your global config?',
@@ -3320,7 +3456,6 @@ export const lib = {
3320
3456
  installAppPrompt: {
3321
3457
  explanation: 'Local development requires this app to be installed in the target test account.',
3322
3458
  reinstallExplanation: "This app's required scopes have been updated since it was last installed on the target test account. To avoid issues with local development, we recommend reinstalling the app with the updated scopes.",
3323
- staticAuthExplanation: (projectAccountId, testingAccountId, projectName, appUid) => `To install this static auth app, your testing account ${uiAccountDescription(testingAccountId)} must be on ${uiLink("this app's allowlist", getAppAllowlistUrl(projectAccountId, projectName, appUid))}.`,
3324
3459
  prompt: 'Open HubSpot to install this app?',
3325
3460
  autoPrompt: 'Install this app in your target test account?',
3326
3461
  reinstallPrompt: 'Open HubSpot to reinstall this app?',