@hubspot/cli 7.5.2-experimental.0 → 7.5.3-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 (413) hide show
  1. package/api/migrate.d.ts +12 -3
  2. package/api/migrate.js +9 -2
  3. package/bin/cli.js +100 -93
  4. package/commands/account/auth.d.ts +8 -0
  5. package/commands/account/auth.js +175 -0
  6. package/commands/account/clean.d.ts +3 -7
  7. package/commands/account/clean.js +54 -14
  8. package/commands/account/createOverride.d.ts +6 -0
  9. package/commands/account/createOverride.js +121 -0
  10. package/commands/account/info.d.ts +3 -7
  11. package/commands/account/info.js +36 -5
  12. package/commands/account/list.d.ts +3 -7
  13. package/commands/account/list.js +38 -15
  14. package/commands/account/remove.d.ts +3 -7
  15. package/commands/account/remove.js +49 -9
  16. package/commands/account/removeOverride.d.ts +6 -0
  17. package/commands/account/removeOverride.js +93 -0
  18. package/commands/account/rename.d.ts +3 -7
  19. package/commands/account/rename.js +16 -9
  20. package/commands/account/use.d.ts +5 -9
  21. package/commands/account/use.js +27 -6
  22. package/commands/account.d.ts +3 -4
  23. package/commands/account.js +33 -53
  24. package/commands/app/migrate.d.ts +5 -6
  25. package/commands/app/migrate.js +60 -44
  26. package/commands/app/secret/add.d.ts +7 -0
  27. package/commands/app/secret/add.js +64 -0
  28. package/commands/app/secret/delete.d.ts +8 -0
  29. package/commands/app/secret/delete.js +87 -0
  30. package/commands/app/secret/list.d.ts +6 -0
  31. package/commands/app/secret/list.js +64 -0
  32. package/commands/app/secret/update.d.ts +7 -0
  33. package/commands/app/secret/update.js +77 -0
  34. package/commands/app/secret.d.ts +3 -0
  35. package/commands/app/secret.js +30 -0
  36. package/commands/app.d.ts +2 -5
  37. package/commands/app.js +10 -10
  38. package/commands/auth.d.ts +5 -7
  39. package/commands/auth.js +37 -33
  40. package/commands/cms/convertFields.d.ts +7 -1
  41. package/commands/cms/convertFields.js +57 -41
  42. package/commands/cms/getReactModule.d.ts +7 -1
  43. package/commands/cms/getReactModule.js +52 -34
  44. package/commands/cms/lighthouseScore.d.ts +8 -1
  45. package/commands/cms/lighthouseScore.js +129 -100
  46. package/commands/cms.d.ts +3 -1
  47. package/commands/cms.js +22 -16
  48. package/commands/completion.d.ts +3 -1
  49. package/commands/completion.js +23 -13
  50. package/commands/config/migrate.d.ts +6 -0
  51. package/commands/config/migrate.js +75 -0
  52. package/commands/config/set.d.ts +10 -1
  53. package/commands/config/set.js +56 -32
  54. package/commands/config.d.ts +3 -1
  55. package/commands/config.js +19 -11
  56. package/commands/create/api-sample.d.ts +3 -1
  57. package/commands/create/api-sample.js +34 -38
  58. package/commands/create/app.d.ts +3 -1
  59. package/commands/create/app.js +9 -7
  60. package/commands/create/function.d.ts +3 -1
  61. package/commands/create/function.js +11 -10
  62. package/commands/create/index.d.ts +5 -1
  63. package/commands/create/index.js +23 -11
  64. package/commands/create/module.d.ts +3 -1
  65. package/commands/create/module.js +14 -13
  66. package/commands/create/react-app.d.ts +3 -1
  67. package/commands/create/react-app.js +10 -7
  68. package/commands/create/template.d.ts +3 -1
  69. package/commands/create/template.js +14 -14
  70. package/commands/create/vue-app.d.ts +3 -1
  71. package/commands/create/vue-app.js +10 -7
  72. package/commands/create/webpack-serverless.d.ts +3 -1
  73. package/commands/create/webpack-serverless.js +10 -7
  74. package/commands/create/website-theme.d.ts +3 -1
  75. package/commands/create/website-theme.js +10 -9
  76. package/commands/create.d.ts +4 -24
  77. package/commands/create.js +62 -75
  78. package/commands/customObject/create.d.ts +4 -9
  79. package/commands/customObject/create.js +17 -10
  80. package/commands/customObject/schema/create.d.ts +4 -9
  81. package/commands/customObject/schema/create.js +18 -11
  82. package/commands/customObject/schema/delete.d.ts +4 -9
  83. package/commands/customObject/schema/delete.js +17 -10
  84. package/commands/customObject/schema/fetch-all.d.ts +4 -9
  85. package/commands/customObject/schema/fetch-all.js +17 -10
  86. package/commands/customObject/schema/fetch.d.ts +4 -9
  87. package/commands/customObject/schema/fetch.js +17 -10
  88. package/commands/customObject/schema/list.d.ts +4 -8
  89. package/commands/customObject/schema/list.js +17 -10
  90. package/commands/customObject/schema/update.d.ts +4 -9
  91. package/commands/customObject/schema/update.js +18 -11
  92. package/commands/customObject/schema.d.ts +3 -5
  93. package/commands/customObject/schema.js +27 -54
  94. package/commands/customObject.d.ts +3 -4
  95. package/commands/customObject.js +20 -48
  96. package/commands/doctor.d.ts +6 -8
  97. package/commands/doctor.js +30 -22
  98. package/commands/feedback.d.ts +4 -1
  99. package/commands/feedback.js +38 -48
  100. package/commands/fetch.d.ts +12 -1
  101. package/commands/fetch.js +49 -34
  102. package/commands/filemanager/fetch.d.ts +4 -9
  103. package/commands/filemanager/fetch.js +18 -11
  104. package/commands/filemanager/upload.d.ts +4 -9
  105. package/commands/filemanager/upload.js +17 -11
  106. package/commands/filemanager.d.ts +3 -4
  107. package/commands/filemanager.js +18 -42
  108. package/commands/function/deploy.d.ts +6 -1
  109. package/commands/function/deploy.js +70 -50
  110. package/commands/function/list.d.ts +6 -1
  111. package/commands/function/list.js +44 -32
  112. package/commands/function/server.d.ts +10 -1
  113. package/commands/function/server.js +49 -38
  114. package/commands/function.d.ts +5 -1
  115. package/commands/function.js +22 -11
  116. package/commands/getStarted.d.ts +9 -0
  117. package/commands/getStarted.js +227 -0
  118. package/commands/hubdb/clear.d.ts +4 -9
  119. package/commands/hubdb/clear.js +21 -15
  120. package/commands/hubdb/create.d.ts +4 -9
  121. package/commands/hubdb/create.js +23 -17
  122. package/commands/hubdb/delete.d.ts +4 -9
  123. package/commands/hubdb/delete.js +24 -16
  124. package/commands/hubdb/fetch.d.ts +4 -9
  125. package/commands/hubdb/fetch.js +20 -14
  126. package/commands/hubdb/list.d.ts +4 -0
  127. package/commands/hubdb/list.js +83 -0
  128. package/commands/hubdb.d.ts +3 -2
  129. package/commands/hubdb.js +24 -47
  130. package/commands/init.d.ts +3 -7
  131. package/commands/init.js +31 -24
  132. package/commands/lint.d.ts +6 -4
  133. package/commands/lint.js +42 -44
  134. package/commands/list.d.ts +3 -7
  135. package/commands/list.js +21 -16
  136. package/commands/logs.d.ts +10 -1
  137. package/commands/logs.js +53 -45
  138. package/commands/mcp/setup.d.ts +7 -0
  139. package/commands/mcp/setup.js +50 -0
  140. package/commands/mcp/start.d.ts +3 -0
  141. package/commands/mcp/start.js +75 -0
  142. package/commands/mcp.d.ts +3 -0
  143. package/commands/mcp.js +26 -0
  144. package/commands/module/marketplace-validate.d.ts +6 -1
  145. package/commands/module/marketplace-validate.js +39 -30
  146. package/commands/module.d.ts +3 -1
  147. package/commands/module.js +23 -12
  148. package/commands/mv.d.ts +3 -7
  149. package/commands/mv.js +20 -15
  150. package/commands/open.d.ts +3 -7
  151. package/commands/open.js +20 -15
  152. package/commands/project/add.d.ts +8 -9
  153. package/commands/project/add.js +53 -85
  154. package/commands/project/cloneApp.d.ts +6 -8
  155. package/commands/project/cloneApp.js +51 -47
  156. package/commands/project/create.d.ts +4 -1
  157. package/commands/project/create.js +132 -81
  158. package/commands/project/deploy.d.ts +5 -6
  159. package/commands/project/deploy.js +93 -37
  160. package/commands/project/dev/deprecatedFlow.d.ts +8 -2
  161. package/commands/project/dev/deprecatedFlow.js +41 -26
  162. package/commands/project/dev/index.d.ts +4 -5
  163. package/commands/project/dev/index.js +103 -33
  164. package/commands/project/dev/unifiedFlow.d.ts +11 -2
  165. package/commands/project/dev/unifiedFlow.js +85 -46
  166. package/commands/project/download.d.ts +3 -7
  167. package/commands/project/download.js +18 -19
  168. package/commands/project/installDeps.d.ts +6 -1
  169. package/commands/project/installDeps.js +48 -32
  170. package/commands/project/listBuilds.d.ts +3 -7
  171. package/commands/project/listBuilds.js +32 -30
  172. package/commands/project/logs.d.ts +10 -1
  173. package/commands/project/logs.js +73 -65
  174. package/commands/project/migrate.d.ts +7 -8
  175. package/commands/project/migrate.js +49 -26
  176. package/commands/project/migrateApp.d.ts +3 -8
  177. package/commands/project/migrateApp.js +23 -20
  178. package/commands/project/open.d.ts +3 -7
  179. package/commands/project/open.js +29 -21
  180. package/commands/project/profile/add.d.ts +7 -0
  181. package/commands/project/profile/add.js +209 -0
  182. package/commands/project/profile/delete.d.ts +6 -0
  183. package/commands/project/profile/delete.js +123 -0
  184. package/commands/project/profile.d.ts +3 -0
  185. package/commands/project/profile.js +25 -0
  186. package/commands/project/upload.d.ts +10 -1
  187. package/commands/project/upload.js +94 -56
  188. package/commands/project/validate.d.ts +6 -0
  189. package/commands/project/validate.js +81 -0
  190. package/commands/project/watch.d.ts +6 -1
  191. package/commands/project/watch.js +95 -61
  192. package/commands/project.d.ts +3 -1
  193. package/commands/project.js +49 -37
  194. package/commands/remove.d.ts +3 -7
  195. package/commands/remove.js +22 -20
  196. package/commands/sandbox/create.d.ts +4 -9
  197. package/commands/sandbox/create.js +27 -21
  198. package/commands/sandbox/delete.d.ts +4 -9
  199. package/commands/sandbox/delete.js +35 -29
  200. package/commands/sandbox.d.ts +3 -4
  201. package/commands/sandbox.js +18 -44
  202. package/commands/secret/addSecret.d.ts +4 -9
  203. package/commands/secret/addSecret.js +21 -15
  204. package/commands/secret/deleteSecret.d.ts +4 -9
  205. package/commands/secret/deleteSecret.js +28 -18
  206. package/commands/secret/listSecret.d.ts +4 -9
  207. package/commands/secret/listSecret.js +19 -13
  208. package/commands/secret/updateSecret.d.ts +4 -9
  209. package/commands/secret/updateSecret.js +25 -17
  210. package/commands/secret.d.ts +3 -4
  211. package/commands/secret.js +23 -49
  212. package/commands/theme/generate-selectors.d.ts +3 -7
  213. package/commands/theme/generate-selectors.js +20 -16
  214. package/commands/theme/marketplace-validate.d.ts +4 -9
  215. package/commands/theme/marketplace-validate.js +22 -18
  216. package/commands/theme/preview.d.ts +4 -9
  217. package/commands/theme/preview.js +36 -30
  218. package/commands/theme.d.ts +3 -4
  219. package/commands/theme.js +22 -48
  220. package/commands/upload.d.ts +12 -1
  221. package/commands/upload.js +116 -135
  222. package/commands/watch.d.ts +14 -1
  223. package/commands/watch.js +74 -76
  224. package/lang/en.d.ts +3218 -0
  225. package/lang/en.js +3075 -3313
  226. package/lang/en.lyaml +96 -228
  227. package/lib/accountTypes.d.ts +1 -0
  228. package/lib/accountTypes.js +11 -0
  229. package/lib/app/migrate.d.ts +33 -4
  230. package/lib/app/migrate.js +172 -91
  231. package/lib/app/migrate_legacy.d.ts +2 -2
  232. package/lib/app/migrate_legacy.js +12 -11
  233. package/lib/app/urls.d.ts +16 -0
  234. package/lib/app/urls.js +16 -0
  235. package/lib/buildAccount.d.ts +1 -2
  236. package/lib/buildAccount.js +11 -10
  237. package/lib/commonOpts.d.ts +4 -7
  238. package/lib/commonOpts.js +47 -19
  239. package/lib/configMigrate.d.ts +2 -0
  240. package/lib/configMigrate.js +83 -0
  241. package/lib/configOptions.d.ts +4 -0
  242. package/lib/configOptions.js +41 -45
  243. package/lib/constants.d.ts +33 -0
  244. package/lib/constants.js +34 -1
  245. package/lib/dependencyManagement.d.ts +0 -5
  246. package/lib/dependencyManagement.js +14 -40
  247. package/lib/doctor/Diagnosis.d.ts +1 -2
  248. package/lib/doctor/Diagnosis.js +19 -16
  249. package/lib/doctor/DiagnosticInfoBuilder.d.ts +2 -1
  250. package/lib/doctor/DiagnosticInfoBuilder.js +10 -9
  251. package/lib/doctor/Doctor.d.ts +1 -0
  252. package/lib/doctor/Doctor.js +60 -46
  253. package/lib/errorHandlers/index.js +13 -7
  254. package/lib/errorHandlers/suppressError.js +18 -26
  255. package/lib/filesystem.d.ts +1 -1
  256. package/lib/generateSelectors.js +3 -6
  257. package/lib/hasFeature.d.ts +3 -1
  258. package/lib/interpolation.d.ts +2 -3
  259. package/lib/lang.d.ts +2 -3
  260. package/lib/marketplaceValidate.d.ts +12 -2
  261. package/lib/marketplaceValidate.js +22 -29
  262. package/lib/mcp/setup.d.ts +12 -0
  263. package/lib/mcp/setup.js +216 -0
  264. package/lib/middleware/__test__/yargsChecksMiddleware.test.js +3 -3
  265. package/lib/middleware/autoUpdateMiddleware.d.ts +1 -0
  266. package/lib/middleware/autoUpdateMiddleware.js +89 -0
  267. package/lib/middleware/configMiddleware.js +37 -3
  268. package/lib/middleware/fireAlarmMiddleware.d.ts +4 -0
  269. package/lib/middleware/fireAlarmMiddleware.js +125 -0
  270. package/lib/middleware/yargsChecksMiddleware.js +2 -2
  271. package/lib/npm.d.ts +9 -0
  272. package/lib/npm.js +36 -0
  273. package/lib/oauth.js +1 -2
  274. package/lib/process.js +1 -2
  275. package/lib/projectProfiles.d.ts +7 -0
  276. package/lib/projectProfiles.js +83 -0
  277. package/lib/projects/ProjectLogsManager.d.ts +1 -1
  278. package/lib/projects/ProjectLogsManager.js +16 -21
  279. package/lib/projects/add/legacyAddComponent.d.ts +5 -0
  280. package/lib/projects/add/legacyAddComponent.js +48 -0
  281. package/lib/projects/add/v3AddComponent.d.ts +8 -0
  282. package/lib/projects/add/v3AddComponent.js +85 -0
  283. package/lib/projects/buildAndDeploy.js +46 -42
  284. package/lib/projects/components.d.ts +2 -0
  285. package/lib/projects/components.js +82 -0
  286. package/lib/projects/config.d.ts +9 -0
  287. package/lib/projects/config.js +79 -0
  288. package/lib/projects/create/index.d.ts +23 -0
  289. package/lib/projects/create/index.js +33 -0
  290. package/lib/projects/create/legacy.d.ts +6 -0
  291. package/lib/projects/{create.js → create/legacy.js} +23 -15
  292. package/lib/projects/create/v3.d.ts +27 -0
  293. package/lib/projects/create/v3.js +158 -0
  294. package/lib/projects/ensureProjectExists.d.ts +11 -0
  295. package/lib/projects/ensureProjectExists.js +97 -0
  296. package/lib/projects/localDev/AppDevModeInterface.d.ts +30 -0
  297. package/lib/projects/localDev/AppDevModeInterface.js +214 -0
  298. package/lib/{DevServerManager.d.ts → projects/localDev/DevServerManager.d.ts} +1 -1
  299. package/lib/{DevServerManager.js → projects/localDev/DevServerManager.js} +6 -6
  300. package/lib/projects/localDev/DevServerManagerV2.d.ts +22 -0
  301. package/lib/{DevServerManagerV2.js → projects/localDev/DevServerManagerV2.js} +22 -19
  302. package/lib/projects/localDev/LocalDevLogger.d.ts +30 -0
  303. package/lib/projects/localDev/LocalDevLogger.js +159 -0
  304. package/lib/{LocalDevManager.d.ts → projects/localDev/LocalDevManager.d.ts} +1 -1
  305. package/lib/{LocalDevManager.js → projects/localDev/LocalDevManager.js} +57 -83
  306. package/lib/projects/localDev/LocalDevProcess.d.ts +34 -0
  307. package/lib/projects/localDev/LocalDevProcess.js +201 -0
  308. package/lib/projects/localDev/LocalDevState.d.ts +50 -0
  309. package/lib/projects/localDev/LocalDevState.js +119 -0
  310. package/lib/projects/localDev/LocalDevWatcher.d.ts +10 -0
  311. package/lib/projects/localDev/LocalDevWatcher.js +53 -0
  312. package/lib/projects/localDev/LocalDevWebsocketServer.d.ts +20 -0
  313. package/lib/projects/localDev/LocalDevWebsocketServer.js +131 -0
  314. package/lib/{localDev.d.ts → projects/localDev/helpers.d.ts} +6 -4
  315. package/lib/{localDev.js → projects/localDev/helpers.js} +127 -114
  316. package/lib/projects/ui.d.ts +1 -0
  317. package/lib/projects/ui.js +15 -0
  318. package/lib/projects/upload.d.ts +17 -2
  319. package/lib/projects/upload.js +74 -50
  320. package/lib/projects/urls.d.ts +4 -0
  321. package/lib/projects/urls.js +23 -1
  322. package/lib/projects/watch.d.ts +1 -1
  323. package/lib/projects/watch.js +21 -18
  324. package/lib/prompts/accountNamePrompt.js +16 -13
  325. package/lib/prompts/accountsPrompt.js +1 -2
  326. package/lib/prompts/cmsFieldPrompt.js +1 -2
  327. package/lib/prompts/createApiSamplePrompt.d.ts +2 -10
  328. package/lib/prompts/createApiSamplePrompt.js +4 -5
  329. package/lib/prompts/createFunctionPrompt.js +13 -14
  330. package/lib/prompts/createModulePrompt.js +8 -9
  331. package/lib/prompts/createProjectPrompt.d.ts +20 -4
  332. package/lib/prompts/createProjectPrompt.js +43 -13
  333. package/lib/prompts/createTemplatePrompt.d.ts +22 -4
  334. package/lib/prompts/createTemplatePrompt.js +1 -2
  335. package/lib/prompts/downloadProjectPrompt.js +3 -4
  336. package/lib/prompts/installAppPrompt.d.ts +2 -0
  337. package/lib/prompts/installAppPrompt.js +45 -0
  338. package/lib/prompts/personalAccessKeyPrompt.js +35 -25
  339. package/lib/prompts/previewPrompt.js +5 -6
  340. package/lib/prompts/projectAddPrompt.d.ts +5 -1
  341. package/lib/prompts/projectAddPrompt.js +35 -8
  342. package/lib/prompts/projectDevTargetAccountPrompt.d.ts +6 -1
  343. package/lib/prompts/projectDevTargetAccountPrompt.js +15 -16
  344. package/lib/prompts/projectNamePrompt.js +5 -6
  345. package/lib/prompts/projectsLogsPrompt.js +3 -2
  346. package/lib/prompts/promptUtils.d.ts +4 -2
  347. package/lib/prompts/promptUtils.js +3 -1
  348. package/lib/prompts/sandboxesPrompt.js +5 -6
  349. package/lib/prompts/secretPrompt.js +2 -3
  350. package/lib/prompts/selectAppPrompt.d.ts +2 -0
  351. package/lib/prompts/selectAppPrompt.js +40 -0
  352. package/lib/prompts/selectHubDBTablePrompt.js +11 -8
  353. package/lib/prompts/{selectPublicAppPrompt.d.ts → selectPublicAppForMigrationPrompt.d.ts} +1 -1
  354. package/lib/prompts/{selectPublicAppPrompt.js → selectPublicAppForMigrationPrompt.js} +8 -9
  355. package/lib/prompts/setAsDefaultAccountPrompt.js +11 -2
  356. package/lib/prompts/uploadPrompt.js +4 -5
  357. package/lib/sandboxSync.js +15 -14
  358. package/lib/sandboxes.js +12 -13
  359. package/lib/serverlessLogs.js +4 -6
  360. package/lib/testUtils.d.ts +3 -3
  361. package/lib/testUtils.js +8 -9
  362. package/lib/ui/boxen.d.ts +5 -0
  363. package/lib/ui/boxen.js +30 -0
  364. package/lib/ui/git.js +8 -9
  365. package/lib/ui/index.d.ts +4 -2
  366. package/lib/ui/index.js +20 -17
  367. package/lib/ui/logger.d.ts +10 -0
  368. package/lib/ui/logger.js +15 -0
  369. package/lib/ui/serverlessFunctionLogs.js +2 -3
  370. package/lib/upload.d.ts +1 -1
  371. package/lib/validation.js +4 -5
  372. package/lib/yargsUtils.d.ts +5 -1
  373. package/lib/yargsUtils.js +6 -0
  374. package/mcp-server/server.d.ts +1 -0
  375. package/mcp-server/server.js +18 -0
  376. package/mcp-server/tools/index.d.ts +2 -0
  377. package/mcp-server/tools/index.js +17 -0
  378. package/mcp-server/tools/project/AddFeatureToProject.d.ts +29 -0
  379. package/mcp-server/tools/project/AddFeatureToProject.js +85 -0
  380. package/mcp-server/tools/project/CreateProjectTool.d.ts +35 -0
  381. package/mcp-server/tools/project/CreateProjectTool.js +100 -0
  382. package/mcp-server/tools/project/DeployProject.d.ts +20 -0
  383. package/mcp-server/tools/project/DeployProject.js +50 -0
  384. package/mcp-server/tools/project/GuidedWalkthroughTool.d.ts +17 -0
  385. package/mcp-server/tools/project/GuidedWalkthroughTool.js +58 -0
  386. package/mcp-server/tools/project/UploadProjectTools.d.ts +17 -0
  387. package/mcp-server/tools/project/UploadProjectTools.js +35 -0
  388. package/mcp-server/tools/project/constants.d.ts +3 -0
  389. package/mcp-server/tools/project/constants.js +13 -0
  390. package/mcp-server/types.d.ts +14 -0
  391. package/mcp-server/types.js +17 -0
  392. package/mcp-server/utils/command.d.ts +3 -0
  393. package/mcp-server/utils/command.js +16 -0
  394. package/mcp-server/utils/content.d.ts +3 -0
  395. package/mcp-server/utils/content.js +21 -0
  396. package/mcp-server/utils/project.d.ts +5 -0
  397. package/mcp-server/utils/project.js +17 -0
  398. package/package.json +19 -11
  399. package/types/Cms.d.ts +30 -0
  400. package/types/Cms.js +2 -0
  401. package/types/LocalDev.d.ts +35 -0
  402. package/types/LocalDev.js +2 -0
  403. package/types/Projects.d.ts +19 -2
  404. package/types/Prompts.d.ts +0 -7
  405. package/types/Yargs.d.ts +14 -14
  406. package/lib/DevServerManagerV2.d.ts +0 -33
  407. package/lib/LocalDevManagerV2.d.ts +0 -64
  408. package/lib/LocalDevManagerV2.js +0 -377
  409. package/lib/projects/create.d.ts +0 -5
  410. package/lib/projects/index.d.ts +0 -21
  411. package/lib/projects/index.js +0 -194
  412. package/lib/prompts/installPublicAppPrompt.d.ts +0 -1
  413. package/lib/prompts/installPublicAppPrompt.js +0 -40
@@ -3,9 +3,19 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getUnmigratableReason = getUnmigratableReason;
7
+ exports.generateFilterAppsByProjectNameFunction = generateFilterAppsByProjectNameFunction;
8
+ exports.buildErrorMessageFromMigrationStatus = buildErrorMessageFromMigrationStatus;
9
+ exports.fetchMigrationApps = fetchMigrationApps;
10
+ exports.promptForAppToMigrate = promptForAppToMigrate;
11
+ exports.selectAppToMigrate = selectAppToMigrate;
12
+ exports.handleMigrationSetup = handleMigrationSetup;
13
+ exports.beginMigration = beginMigration;
14
+ exports.pollMigrationStatus = pollMigrationStatus;
15
+ exports.finalizeMigration = finalizeMigration;
16
+ exports.downloadProjectFiles = downloadProjectFiles;
6
17
  exports.migrateApp2025_2 = migrateApp2025_2;
7
18
  exports.logInvalidAccountError = logInvalidAccountError;
8
- const logger_1 = require("@hubspot/local-dev-lib/logger");
9
19
  const path_1 = __importDefault(require("path"));
10
20
  const path_2 = require("@hubspot/local-dev-lib/path");
11
21
  const archive_1 = require("@hubspot/local-dev-lib/archive");
@@ -15,63 +25,88 @@ const projects_1 = require("@hubspot/local-dev-lib/constants/projects");
15
25
  const transform_1 = require("@hubspot/project-parsing-lib/src/lib/transform");
16
26
  const Migration_1 = require("@hubspot/local-dev-lib/types/Migration");
17
27
  const projects_2 = require("@hubspot/local-dev-lib/api/projects");
28
+ const inquirer = require('inquirer');
18
29
  const promptUtils_1 = require("../prompts/promptUtils");
19
30
  const ui_1 = require("../ui");
20
- const lang_1 = require("../lang");
21
- const projects_3 = require("../projects");
31
+ const ensureProjectExists_1 = require("../projects/ensureProjectExists");
22
32
  const SpinniesManager_1 = __importDefault(require("../ui/SpinniesManager"));
23
33
  const polling_1 = require("../polling");
24
34
  const migrate_1 = require("../../api/migrate");
25
35
  const fs_1 = __importDefault(require("fs"));
26
- function getUnmigratableReason(reasonCode) {
36
+ const en_1 = require("../../lang/en");
37
+ const hasFeature_1 = require("../hasFeature");
38
+ const constants_1 = require("../constants");
39
+ const urls_1 = require("../projects/urls");
40
+ const logger_1 = require("../ui/logger");
41
+ function getUnmigratableReason(reasonCode, projectName, accountId) {
27
42
  switch (reasonCode) {
28
43
  case projects_1.UNMIGRATABLE_REASONS.UP_TO_DATE:
29
- return (0, lang_1.i18n)('commands.project.subcommands.migrateApp.unmigratableReasons.upToDate');
44
+ return en_1.lib.migrate.errors.unmigratableReasons.upToDate;
30
45
  case projects_1.UNMIGRATABLE_REASONS.IS_A_PRIVATE_APP:
31
- return (0, lang_1.i18n)('commands.project.subcommands.migrateApp.unmigratableReasons.isPrivateApp');
46
+ return en_1.lib.migrate.errors.unmigratableReasons.isPrivateApp;
32
47
  case projects_1.UNMIGRATABLE_REASONS.LISTED_IN_MARKETPLACE:
33
- return (0, lang_1.i18n)('commands.project.subcommands.migrateApp.unmigratableReasons.listedInMarketplace');
48
+ return en_1.lib.migrate.errors.unmigratableReasons.listedInMarketplace;
49
+ case projects_1.UNMIGRATABLE_REASONS.PROJECT_CONNECTED_TO_GITHUB:
50
+ return en_1.lib.migrate.errors.unmigratableReasons.projectConnectedToGitHub(projectName, accountId);
51
+ case migrate_1.CLI_UNMIGRATABLE_REASONS.PART_OF_PROJECT_ALREADY:
52
+ return en_1.lib.migrate.errors.unmigratableReasons.partOfProjectAlready;
34
53
  default:
35
- return (0, lang_1.i18n)('commands.project.subcommands.migrateApp.unmigratableReasons.generic', {
36
- reasonCode,
37
- });
54
+ return en_1.lib.migrate.errors.unmigratableReasons.generic(reasonCode);
38
55
  }
39
56
  }
40
- function filterAppsByProjectName(projectConfig) {
57
+ function generateFilterAppsByProjectNameFunction(projectConfig) {
41
58
  return (app) => {
42
59
  if (projectConfig) {
43
60
  return app.projectName === projectConfig?.projectConfig?.name;
44
61
  }
45
- return !app.projectName;
62
+ return true;
46
63
  };
47
64
  }
48
- async function handleMigrationSetup(derivedAccountId, options, projectConfig) {
49
- const { name, dest, appId } = options;
50
- const { data: { migratableApps, unmigratableApps }, } = await (0, migrate_1.listAppsForMigration)(derivedAccountId);
51
- const filteredMigratableApps = migratableApps.filter(filterAppsByProjectName(projectConfig));
52
- const filteredUnmigratableApps = unmigratableApps.filter(filterAppsByProjectName(projectConfig));
65
+ function buildErrorMessageFromMigrationStatus(error) {
66
+ const { componentErrors, projectErrorDetail } = error;
67
+ if (!componentErrors || !componentErrors.length) {
68
+ return projectErrorDetail;
69
+ }
70
+ return `${projectErrorDetail}: \n\t- ${componentErrors
71
+ .map(componentError => {
72
+ const { componentType, errorMessage, developerSymbol: uid, } = componentError;
73
+ return `${componentType}${uid ? ` (${uid})` : ''}: ${errorMessage}`;
74
+ })
75
+ .join('\n\t- ')}`;
76
+ }
77
+ async function fetchMigrationApps(appId, derivedAccountId, platformVersion, projectConfig) {
78
+ const { data: { migratableApps, unmigratableApps }, } = await (0, migrate_1.listAppsForMigration)(derivedAccountId, platformVersion);
79
+ const filteredMigratableApps = migratableApps.filter(generateFilterAppsByProjectNameFunction(projectConfig));
80
+ const filteredUnmigratableApps = unmigratableApps.filter(generateFilterAppsByProjectNameFunction(projectConfig));
53
81
  const allApps = [...filteredMigratableApps, ...filteredUnmigratableApps];
54
82
  if (allApps.length > 1 && projectConfig) {
55
- throw new Error('Multiple apps found in project, this is not allowed in the new system');
83
+ throw new Error(en_1.lib.migrate.errors.project.multipleApps);
56
84
  }
57
- if (allApps.length === 0) {
58
- const reasons = filteredUnmigratableApps.map(app => `${chalk_1.default.bold(app.appName)}: ${getUnmigratableReason(app.unmigratableReason)}`);
59
- if (projectConfig) {
60
- // TODO: i18n, get copy from UX
61
- throw new Error('No migratable apps in project');
62
- }
63
- throw new Error(`${(0, lang_1.i18n)(`commands.project.subcommands.migrateApp.errors.noAppsEligible`, {
64
- accountId: (0, ui_1.uiAccountDescription)(derivedAccountId),
65
- })}${reasons.length ? `\n - ${reasons.join('\n - ')}` : ''}`);
85
+ if (!projectConfig?.projectConfig) {
86
+ allApps.forEach(app => {
87
+ if (app.projectName) {
88
+ app.isMigratable = false;
89
+ app.unmigratableReason =
90
+ migrate_1.CLI_UNMIGRATABLE_REASONS.PART_OF_PROJECT_ALREADY;
91
+ }
92
+ });
93
+ }
94
+ if (allApps.length === 0 && projectConfig) {
95
+ throw new Error(en_1.lib.migrate.errors.noAppsForProject(projectConfig?.projectConfig?.name || ''));
96
+ }
97
+ if (allApps.length === 0 || !allApps.some(app => app.isMigratable)) {
98
+ const reasons = filteredUnmigratableApps.map(app => `${chalk_1.default.bold(app.appName)}: ${getUnmigratableReason(app.unmigratableReason, app.projectName, derivedAccountId)}`);
99
+ throw new Error(en_1.lib.migrate.errors.noAppsEligible((0, ui_1.uiAccountDescription)(derivedAccountId), reasons));
66
100
  }
67
101
  if (appId &&
68
102
  !allApps.some(app => {
69
103
  return app.appId === appId;
70
104
  })) {
71
- throw new Error((0, lang_1.i18n)('commands.project.subcommands.migrateApp.prompt.chooseApp', {
72
- appId,
73
- }));
105
+ throw new Error(en_1.lib.migrate.errors.appWithAppIdNotFound(appId));
74
106
  }
107
+ return allApps;
108
+ }
109
+ async function promptForAppToMigrate(allApps, derivedAccountId) {
75
110
  const appChoices = allApps.map(app => ({
76
111
  name: app.isMigratable
77
112
  ? app.appName
@@ -79,80 +114,120 @@ async function handleMigrationSetup(derivedAccountId, options, projectConfig) {
79
114
  value: app,
80
115
  disabled: app.isMigratable
81
116
  ? false
82
- : getUnmigratableReason(app.unmigratableReason),
117
+ : getUnmigratableReason(app.unmigratableReason, app.projectName, derivedAccountId),
83
118
  }));
119
+ const enabledChoices = appChoices.filter(app => !app.disabled);
120
+ const disabledChoices = appChoices.filter(app => app.disabled);
121
+ const { appId: selectedAppId } = await (0, promptUtils_1.listPrompt)(en_1.lib.migrate.prompt.chooseApp, {
122
+ choices: [
123
+ ...enabledChoices,
124
+ new inquirer.Separator(),
125
+ ...disabledChoices,
126
+ ],
127
+ });
128
+ return selectedAppId;
129
+ }
130
+ async function selectAppToMigrate(allApps, derivedAccountId, appId) {
131
+ if (appId &&
132
+ !allApps.some(app => {
133
+ return app.appId === appId;
134
+ })) {
135
+ throw new Error(en_1.lib.migrate.errors.appWithAppIdNotFound(appId));
136
+ }
84
137
  let appIdToMigrate = appId;
85
138
  if (!appIdToMigrate) {
86
- const { appId: selectedAppId } = await (0, promptUtils_1.listPrompt)((0, lang_1.i18n)('commands.project.subcommands.migrateApp.prompt.chooseApp'), {
87
- choices: appChoices,
88
- });
89
- appIdToMigrate = selectedAppId;
139
+ appIdToMigrate = await promptForAppToMigrate(allApps, derivedAccountId);
90
140
  }
91
141
  const selectedApp = allApps.find(app => app.appId === appIdToMigrate);
92
- const migratableComponents = [];
93
- const unmigratableComponents = [];
142
+ const migratableComponents = new Set();
143
+ const unmigratableComponents = new Set();
94
144
  selectedApp?.migrationComponents.forEach(component => {
95
145
  if (component.isSupported) {
96
- migratableComponents.push((0, transform_1.mapToUserFacingType)(component.componentType));
146
+ migratableComponents.add((0, transform_1.mapToUserFacingType)(component.componentType));
97
147
  }
98
148
  else {
99
- unmigratableComponents.push((0, transform_1.mapToUserFacingType)(component.componentType));
149
+ unmigratableComponents.add((0, transform_1.mapToUserFacingType)(component.componentType));
100
150
  }
101
151
  });
102
- if (migratableComponents.length !== 0) {
103
- logger_1.logger.log((0, lang_1.i18n)('commands.project.subcommands.migrateApp.componentsToBeMigrated', {
104
- components: `\n - ${migratableComponents.join('\n - ')}`,
105
- }));
152
+ if (migratableComponents.size !== 0) {
153
+ logger_1.uiLogger.log(en_1.lib.migrate.componentsToBeMigrated(`\n - ${[...migratableComponents].join('\n - ')}`));
106
154
  }
107
- if (unmigratableComponents.length !== 0) {
108
- logger_1.logger.log((0, lang_1.i18n)('commands.project.subcommands.migrateApp.componentsThatWillNotBeMigrated', {
109
- components: `\n - ${unmigratableComponents.join('\n - ')}`,
110
- }));
155
+ if (unmigratableComponents.size !== 0) {
156
+ logger_1.uiLogger.log(en_1.lib.migrate.componentsThatWillNotBeMigrated(`\n - ${[...unmigratableComponents].join('\n - ')}`));
111
157
  }
112
- logger_1.logger.log();
113
- const proceed = await (0, promptUtils_1.confirmPrompt)((0, lang_1.i18n)('commands.project.subcommands.migrateApp.prompt.proceed'));
158
+ logger_1.uiLogger.log('');
159
+ const proceed = await (0, promptUtils_1.confirmPrompt)(en_1.lib.migrate.prompt.proceed, {
160
+ defaultAnswer: false,
161
+ });
162
+ return {
163
+ proceed,
164
+ appIdToMigrate,
165
+ };
166
+ }
167
+ async function handleMigrationSetup(derivedAccountId, options, projectConfig) {
168
+ const { name, dest, appId } = options;
169
+ const allApps = await fetchMigrationApps(appId, derivedAccountId, options.platformVersion, projectConfig);
170
+ const { proceed, appIdToMigrate } = await selectAppToMigrate(allApps, derivedAccountId, appId);
114
171
  if (!proceed) {
115
172
  return {};
116
173
  }
117
- const projectName = projectConfig?.projectConfig?.name ||
118
- name ||
119
- (await (0, promptUtils_1.inputPrompt)((0, lang_1.i18n)('commands.project.subcommands.migrateApp.prompt.inputName')));
120
- const { projectExists } = await (0, projects_3.ensureProjectExists)(derivedAccountId, projectName, { allowCreate: false, noLogs: true });
121
174
  // If it's a project we don't want to prompt for dest and name, so just return early
122
175
  if (projectConfig &&
123
176
  projectConfig?.projectConfig &&
124
177
  projectConfig?.projectDir) {
125
- if (!projectExists) {
126
- throw new Error('The project you are trying to migrate does not exist');
127
- }
128
178
  return {
129
179
  appIdToMigrate,
130
180
  projectName: projectConfig.projectConfig.name,
131
181
  projectDest: projectConfig.projectDir,
132
182
  };
133
183
  }
134
- if (projectExists) {
135
- throw new Error((0, lang_1.i18n)('commands.project.subcommands.migrateApp.errors.projectAlreadyExists', {
136
- projectName,
184
+ const projectName = name ||
185
+ (await (0, promptUtils_1.inputPrompt)(en_1.lib.migrate.prompt.inputName, {
186
+ validate: async (input) => {
187
+ const { projectExists } = await (0, ensureProjectExists_1.ensureProjectExists)(derivedAccountId, input, { allowCreate: false, noLogs: true });
188
+ if (projectExists) {
189
+ return en_1.lib.migrate.errors.project.alreadyExists(input);
190
+ }
191
+ return true;
192
+ },
137
193
  }));
194
+ const { projectExists } = await (0, ensureProjectExists_1.ensureProjectExists)(derivedAccountId, projectName, { allowCreate: false, noLogs: true });
195
+ if (projectExists) {
196
+ throw new Error(en_1.lib.migrate.errors.project.alreadyExists(projectName));
138
197
  }
139
198
  const projectDest = dest ||
140
- (await (0, promptUtils_1.inputPrompt)((0, lang_1.i18n)('commands.project.subcommands.migrateApp.prompt.inputDest'), {
199
+ (await (0, promptUtils_1.inputPrompt)(en_1.lib.migrate.prompt.inputDest, {
141
200
  defaultAnswer: path_1.default.resolve((0, path_2.getCwd)(), (0, path_2.sanitizeFileName)(projectName)),
142
201
  }));
143
202
  return { appIdToMigrate, projectName, projectDest };
144
203
  }
145
204
  async function beginMigration(derivedAccountId, appId, platformVersion) {
146
205
  SpinniesManager_1.default.add('beginningMigration', {
147
- text: (0, lang_1.i18n)('commands.project.subcommands.migrateApp.spinners.beginningMigration'),
206
+ text: en_1.lib.migrate.spinners.beginningMigration,
148
207
  });
149
208
  const uidMap = {};
150
209
  const { data } = await (0, migrate_1.initializeMigration)(derivedAccountId, appId, platformVersion);
151
210
  const { migrationId } = data;
152
- const pollResponse = await pollMigrationStatus(derivedAccountId, migrationId, [Migration_1.MIGRATION_STATUS.INPUT_REQUIRED]);
211
+ let pollResponse;
212
+ try {
213
+ pollResponse = await pollMigrationStatus(derivedAccountId, migrationId, [
214
+ Migration_1.MIGRATION_STATUS.INPUT_REQUIRED,
215
+ ]);
216
+ }
217
+ catch (error) {
218
+ SpinniesManager_1.default.fail('beginningMigration', {
219
+ text: en_1.lib.migrate.spinners.unableToStartMigration,
220
+ });
221
+ if ((0, migrate_1.isMigrationStatus)(error) && error.status === Migration_1.MIGRATION_STATUS.FAILURE) {
222
+ throw new Error(buildErrorMessageFromMigrationStatus(error));
223
+ }
224
+ throw new Error(en_1.lib.migrate.errors.migrationFailed, {
225
+ cause: error,
226
+ });
227
+ }
153
228
  if (pollResponse.status !== Migration_1.MIGRATION_STATUS.INPUT_REQUIRED) {
154
229
  SpinniesManager_1.default.fail('beginningMigration', {
155
- text: (0, lang_1.i18n)('commands.project.subcommands.migrateApp.spinners.unableToStartMigration'),
230
+ text: en_1.lib.migrate.spinners.unableToStartMigration,
156
231
  });
157
232
  return;
158
233
  }
@@ -161,18 +236,16 @@ async function beginMigration(derivedAccountId, appId, platformVersion) {
161
236
  if (Object.values(componentsRequiringUids).length !== 0) {
162
237
  for (const [componentId, component] of Object.entries(componentsRequiringUids)) {
163
238
  const { componentHint, componentType } = component;
164
- uidMap[componentId] = await (0, promptUtils_1.inputPrompt)((0, lang_1.i18n)('commands.project.subcommands.migrateApp.prompt.uidForComponent', {
165
- componentName: componentHint
166
- ? `${(0, transform_1.mapToUserFacingType)(componentType)} '${componentHint}'`
167
- : (0, transform_1.mapToUserFacingType)(componentType),
168
- }), {
239
+ uidMap[componentId] = await (0, promptUtils_1.inputPrompt)(en_1.lib.migrate.prompt.uidForComponent(componentHint
240
+ ? `${(0, transform_1.mapToUserFacingType)(componentType)} '${componentHint}'`
241
+ : (0, transform_1.mapToUserFacingType)(componentType)), {
169
242
  validate: (uid) => {
170
243
  const result = (0, project_parsing_lib_1.validateUid)(uid);
171
244
  return result === undefined ? true : result;
172
245
  },
173
- defaultAnswer: (componentHint || '')
174
- .toLowerCase()
175
- .replace(/[^a-z0-9_]/g, ''),
246
+ defaultAnswer: componentHint
247
+ ? componentHint.replace(/[^A-Za-z0-9_\-.]/g, '')
248
+ : undefined,
176
249
  });
177
250
  }
178
251
  }
@@ -188,7 +261,7 @@ async function finalizeMigration(derivedAccountId, migrationId, uidMap, projectN
188
261
  let pollResponse;
189
262
  try {
190
263
  SpinniesManager_1.default.add('finishingMigration', {
191
- text: (0, lang_1.i18n)(`commands.project.subcommands.migrateApp.spinners.finishingMigration`),
264
+ text: en_1.lib.migrate.spinners.finishingMigration,
192
265
  });
193
266
  await (0, migrate_1.continueMigration)(derivedAccountId, migrationId, uidMap, projectName);
194
267
  pollResponse = await pollMigrationStatus(derivedAccountId, migrationId, [
@@ -197,21 +270,21 @@ async function finalizeMigration(derivedAccountId, migrationId, uidMap, projectN
197
270
  }
198
271
  catch (error) {
199
272
  SpinniesManager_1.default.fail('finishingMigration', {
200
- text: (0, lang_1.i18n)(`commands.project.subcommands.migrateApp.spinners.migrationFailed`),
273
+ text: en_1.lib.migrate.spinners.migrationFailed,
201
274
  });
202
275
  if ((0, migrate_1.isMigrationStatus)(error) && error.status === Migration_1.MIGRATION_STATUS.FAILURE) {
203
- throw new Error(error.projectErrorDetail);
276
+ throw new Error(buildErrorMessageFromMigrationStatus(error));
204
277
  }
205
- throw new Error((0, lang_1.i18n)('commands.project.subcommands.migrateApp.errors.migrationFailed'), {
278
+ throw new Error(en_1.lib.migrate.errors.migrationFailed, {
206
279
  cause: error,
207
280
  });
208
281
  }
209
282
  if (pollResponse.status !== Migration_1.MIGRATION_STATUS.SUCCESS) {
210
- throw new Error((0, lang_1.i18n)('commands.project.subcommands.migrateApp.errors.migrationFailed'));
283
+ throw new Error(en_1.lib.migrate.errors.migrationFailed);
211
284
  }
212
285
  if (pollResponse.status === Migration_1.MIGRATION_STATUS.SUCCESS) {
213
286
  SpinniesManager_1.default.succeed('finishingMigration', {
214
- text: (0, lang_1.i18n)(`commands.project.subcommands.migrateApp.spinners.migrationComplete`),
287
+ text: en_1.lib.migrate.spinners.migrationComplete,
215
288
  });
216
289
  }
217
290
  return pollResponse.buildId;
@@ -219,7 +292,7 @@ async function finalizeMigration(derivedAccountId, migrationId, uidMap, projectN
219
292
  async function downloadProjectFiles(derivedAccountId, projectName, buildId, projectDest, projectConfig) {
220
293
  try {
221
294
  SpinniesManager_1.default.add('fetchingMigratedProject', {
222
- text: (0, lang_1.i18n)(`commands.project.subcommands.migrateApp.spinners.downloadingProjectContents`),
295
+ text: en_1.lib.migrate.spinners.downloadingProjectContents,
223
296
  });
224
297
  const { data: zippedProject } = await (0, projects_2.downloadProject)(derivedAccountId, projectName, buildId);
225
298
  let absoluteDestPath;
@@ -230,6 +303,7 @@ async function downloadProjectFiles(derivedAccountId, projectName, buildId, proj
230
303
  const archiveDest = path_1.default.join(projectDir, 'archive');
231
304
  // Move the existing source directory to archive
232
305
  fs_1.default.renameSync(path_1.default.join(projectDir, srcDir), archiveDest);
306
+ logger_1.uiLogger.info(en_1.lib.migrate.sourceContentsMoved(archiveDest));
233
307
  }
234
308
  else {
235
309
  absoluteDestPath = projectDest
@@ -241,23 +315,31 @@ async function downloadProjectFiles(derivedAccountId, projectName, buildId, proj
241
315
  hideLogs: true,
242
316
  });
243
317
  SpinniesManager_1.default.succeed('fetchingMigratedProject', {
244
- text: (0, lang_1.i18n)(`commands.project.subcommands.migrateApp.spinners.downloadingProjectContentsComplete`),
318
+ text: en_1.lib.migrate.spinners.downloadingProjectContentsComplete,
245
319
  });
246
- logger_1.logger.success(`Saved ${projectName} to ${projectDest}`);
320
+ logger_1.uiLogger.success(`Saved ${projectName} to ${projectDest}`);
247
321
  }
248
322
  catch (error) {
249
323
  SpinniesManager_1.default.fail('fetchingMigratedProject', {
250
- text: (0, lang_1.i18n)(`commands.project.subcommands.migrateApp.spinners.downloadingProjectContentsFailed`),
324
+ text: en_1.lib.migrate.spinners.downloadingProjectContentsFailed,
251
325
  });
252
326
  throw error;
253
327
  }
254
328
  }
255
329
  async function migrateApp2025_2(derivedAccountId, options, projectConfig) {
256
330
  SpinniesManager_1.default.init();
257
- if (projectConfig &&
258
- (!projectConfig?.projectConfig || !projectConfig?.projectDir)) {
259
- // TODO: i18n
260
- throw new Error('Invalid project config');
331
+ const ungatedForUnifiedApps = await (0, hasFeature_1.hasFeature)(derivedAccountId, constants_1.FEATURES.UNIFIED_APPS);
332
+ if (!ungatedForUnifiedApps) {
333
+ throw new Error(en_1.lib.migrate.errors.notUngatedForUnifiedApps((0, ui_1.uiAccountDescription)(derivedAccountId)));
334
+ }
335
+ if (projectConfig) {
336
+ if (!projectConfig?.projectConfig || !projectConfig?.projectDir) {
337
+ throw new Error(en_1.lib.migrate.errors.project.invalidConfig);
338
+ }
339
+ const { projectExists } = await (0, ensureProjectExists_1.ensureProjectExists)(derivedAccountId, projectConfig.projectConfig.name, { allowCreate: false, noLogs: true });
340
+ if (!projectExists) {
341
+ throw new Error(en_1.lib.migrate.errors.project.doesNotExist(derivedAccountId));
342
+ }
261
343
  }
262
344
  const { appIdToMigrate, projectName, projectDest } = await handleMigrationSetup(derivedAccountId, options, projectConfig);
263
345
  if (!appIdToMigrate || !projectName || !projectDest) {
@@ -270,13 +352,12 @@ async function migrateApp2025_2(derivedAccountId, options, projectConfig) {
270
352
  const { migrationId, uidMap } = migrationInProgress;
271
353
  const buildId = await finalizeMigration(derivedAccountId, migrationId, uidMap, projectConfig?.projectConfig?.name || projectName);
272
354
  await downloadProjectFiles(derivedAccountId, projectName, buildId, projectDest, projectConfig);
355
+ logger_1.uiLogger.log((0, ui_1.uiLink)('Project Details', (0, urls_1.getProjectDetailUrl)(projectName, derivedAccountId)));
356
+ logger_1.uiLogger.log((0, ui_1.uiLink)('Build Details', (0, urls_1.getProjectBuildDetailUrl)(projectName, buildId, derivedAccountId)));
273
357
  }
274
- function logInvalidAccountError(i18nKey) {
358
+ function logInvalidAccountError() {
275
359
  (0, ui_1.uiLine)();
276
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.invalidAccountTypeTitle`));
277
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.errors.invalidAccountTypeDescription`, {
278
- useCommand: (0, ui_1.uiCommandReference)('hs accounts use'),
279
- authCommand: (0, ui_1.uiCommandReference)('hs auth'),
280
- }));
360
+ logger_1.uiLogger.error(en_1.lib.migrate.errors.invalidAccountTypeTitle);
361
+ logger_1.uiLogger.log(en_1.lib.migrate.errors.invalidAccountTypeDescription((0, ui_1.uiCommandReference)('hs account use'), (0, ui_1.uiCommandReference)('hs auth')));
281
362
  (0, ui_1.uiLine)();
282
363
  }
@@ -1,4 +1,4 @@
1
1
  import { CLIAccount } from '@hubspot/local-dev-lib/types/Accounts';
2
2
  import { ArgumentsCamelCase } from 'yargs';
3
- import { MigrateAppOptions } from '../../types/Yargs';
4
- export declare function migrateApp2023_2(derivedAccountId: number, options: ArgumentsCamelCase<MigrateAppOptions>, accountConfig: CLIAccount): Promise<void>;
3
+ import { MigrateAppArgs } from './migrate';
4
+ export declare function migrateApp2023_2(derivedAccountId: number, options: ArgumentsCamelCase<MigrateAppArgs>, accountConfig: CLIAccount): Promise<void>;
@@ -17,9 +17,9 @@ const exitCodes_1 = require("../enums/exitCodes");
17
17
  const ui_1 = require("../ui");
18
18
  const lang_1 = require("../lang");
19
19
  const accountTypes_1 = require("../accountTypes");
20
- const selectPublicAppPrompt_1 = require("../prompts/selectPublicAppPrompt");
20
+ const selectPublicAppForMigrationPrompt_1 = require("../prompts/selectPublicAppForMigrationPrompt");
21
21
  const createProjectPrompt_1 = require("../prompts/createProjectPrompt");
22
- const projects_2 = require("../projects");
22
+ const ensureProjectExists_1 = require("../projects/ensureProjectExists");
23
23
  const usageTracking_1 = require("../usageTracking");
24
24
  const SpinniesManager_1 = __importDefault(require("../ui/SpinniesManager"));
25
25
  const process_1 = require("../process");
@@ -27,13 +27,14 @@ const polling_1 = require("../polling");
27
27
  const migrate_1 = require("./migrate");
28
28
  async function migrateApp2023_2(derivedAccountId, options, accountConfig) {
29
29
  const accountName = (0, ui_1.uiAccountDescription)(derivedAccountId);
30
- if (!(0, accountTypes_1.isAppDeveloperAccount)(accountConfig)) {
31
- (0, migrate_1.logInvalidAccountError)('commands.project.subcommands.migrateApp');
32
- process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
30
+ const defaultAccountIsUnified = await (0, accountTypes_1.isUnifiedAccount)(accountConfig);
31
+ if (!(0, accountTypes_1.isAppDeveloperAccount)(accountConfig) && !defaultAccountIsUnified) {
32
+ (0, migrate_1.logInvalidAccountError)();
33
+ return process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
33
34
  }
34
35
  let appId = options.appId;
35
36
  if (!appId) {
36
- const { appId: selectAppId } = await (0, selectPublicAppPrompt_1.selectPublicAppPrompt)({
37
+ const { appId: selectAppId } = await (0, selectPublicAppForMigrationPrompt_1.selectPublicAppForMigrationPrompt)({
37
38
  accountId: derivedAccountId,
38
39
  accountName,
39
40
  isMigratingApp: true,
@@ -50,16 +51,16 @@ async function migrateApp2023_2(derivedAccountId, options, accountConfig) {
50
51
  logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.migrateApp.errors.invalidApp`, {
51
52
  appId,
52
53
  }));
53
- process.exit(exitCodes_1.EXIT_CODES.ERROR);
54
+ return process.exit(exitCodes_1.EXIT_CODES.ERROR);
54
55
  }
55
56
  }
56
57
  catch (error) {
57
58
  (0, errorHandlers_1.logError)(error, new errorHandlers_1.ApiErrorContext({ accountId: derivedAccountId }));
58
- process.exit(exitCodes_1.EXIT_CODES.ERROR);
59
+ return process.exit(exitCodes_1.EXIT_CODES.ERROR);
59
60
  }
60
61
  const createProjectPromptResponse = await (0, createProjectPrompt_1.createProjectPrompt)(options);
61
62
  const { name: projectName, dest: projectDest } = createProjectPromptResponse;
62
- const { projectExists } = await (0, projects_2.ensureProjectExists)(derivedAccountId, projectName, {
63
+ const { projectExists } = await (0, ensureProjectExists_1.ensureProjectExists)(derivedAccountId, projectName, {
63
64
  allowCreate: false,
64
65
  noLogs: true,
65
66
  });
@@ -85,7 +86,7 @@ async function migrateApp2023_2(derivedAccountId, options, accountConfig) {
85
86
  });
86
87
  process.stdin.resume();
87
88
  if (!shouldCreateApp) {
88
- process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
89
+ return process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
89
90
  }
90
91
  try {
91
92
  SpinniesManager_1.default.init();
@@ -96,7 +97,7 @@ async function migrateApp2023_2(derivedAccountId, options, accountConfig) {
96
97
  if ((key.ctrl && key.name === 'c') || key.name === 'q') {
97
98
  SpinniesManager_1.default.remove('migrateApp');
98
99
  logger_1.logger.log((0, lang_1.i18n)(`commands.project.subcommands.migrateApp.migrationInterrupted`));
99
- process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
100
+ return process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
100
101
  }
101
102
  });
102
103
  const { data: migrateResponse } = await (0, projects_1.migrateApp)(derivedAccountId, appId, projectName);
@@ -0,0 +1,16 @@
1
+ import { Environment } from '@hubspot/local-dev-lib/types/Config';
2
+ type PrivateAppInstallUrlArgs = {
3
+ targetAccountId: number;
4
+ env: Environment;
5
+ appId: string;
6
+ };
7
+ type PublicAppInstallUrlArgs = {
8
+ targetAccountId: number;
9
+ env: Environment;
10
+ clientId: string;
11
+ scopes: string[];
12
+ redirectUrls: string[];
13
+ };
14
+ export declare function getOauthAppInstallUrl({ targetAccountId, env, clientId, scopes, redirectUrls, }: PublicAppInstallUrlArgs): string;
15
+ export declare function getStaticAuthAppInstallUrl({ targetAccountId, env, appId, }: PrivateAppInstallUrlArgs): string;
16
+ export {};
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getOauthAppInstallUrl = getOauthAppInstallUrl;
4
+ exports.getStaticAuthAppInstallUrl = getStaticAuthAppInstallUrl;
5
+ const urls_1 = require("@hubspot/local-dev-lib/urls");
6
+ function getOauthAppInstallUrl({ targetAccountId, env, clientId, scopes, redirectUrls, }) {
7
+ const websiteOrigin = (0, urls_1.getHubSpotWebsiteOrigin)(env);
8
+ return (`${websiteOrigin}/oauth/${targetAccountId}/authorize` +
9
+ `?client_id=${encodeURIComponent(clientId)}` +
10
+ `&scope=${encodeURIComponent(scopes.join(' '))}` +
11
+ `&redirect_uri=${encodeURIComponent(redirectUrls[0])}`);
12
+ }
13
+ function getStaticAuthAppInstallUrl({ targetAccountId, env, appId, }) {
14
+ const websiteOrigin = (0, urls_1.getHubSpotWebsiteOrigin)(env);
15
+ return `${websiteOrigin}/static-token/${targetAccountId}/authorize?appId=${appId}`;
16
+ }
@@ -1,10 +1,9 @@
1
1
  import { Environment } from '@hubspot/local-dev-lib/types/Config';
2
2
  import { CLIAccount } from '@hubspot/local-dev-lib/types/Accounts';
3
- import { DeveloperTestAccount } from '@hubspot/local-dev-lib/types/developerTestAccounts';
4
3
  import { SandboxResponse } from '@hubspot/local-dev-lib/types/Sandbox';
5
4
  import { SandboxAccountType } from '../types/Sandboxes';
6
5
  export declare function saveAccountToConfig(accountId: number | undefined, accountName: string, env: Environment, personalAccessKey?: string, force?: boolean): Promise<string>;
7
- export declare function buildDeveloperTestAccount(testAccountName: string, parentAccountConfig: CLIAccount, env: Environment, portalLimit: number): Promise<DeveloperTestAccount>;
6
+ export declare function buildDeveloperTestAccount(testAccountName: string, parentAccountConfig: CLIAccount, env: Environment, portalLimit: number): Promise<number>;
8
7
  type SandboxAccount = SandboxResponse & {
9
8
  name: string;
10
9
  };
@@ -61,49 +61,50 @@ async function saveAccountToConfig(accountId, accountName, env, personalAccessKe
61
61
  return validName;
62
62
  }
63
63
  async function buildDeveloperTestAccount(testAccountName, parentAccountConfig, env, portalLimit) {
64
- const i18nKey = 'lib.developerTestAccount.create.loading';
65
64
  const id = (0, getAccountIdentifier_1.getAccountIdentifier)(parentAccountConfig);
66
65
  const parentAccountId = (0, config_1.getAccountId)(id);
67
66
  if (!parentAccountId) {
68
- throw new Error((0, lang_1.i18n)(`${i18nKey}.fail`));
67
+ throw new Error((0, lang_1.i18n)(`lib.developerTestAccount.create.loading.fail`));
69
68
  }
70
69
  SpinniesManager_1.default.init({
71
70
  succeedColor: 'white',
72
71
  });
73
72
  logger_1.logger.log('');
74
73
  SpinniesManager_1.default.add('buildDeveloperTestAccount', {
75
- text: (0, lang_1.i18n)(`${i18nKey}.add`, {
74
+ text: (0, lang_1.i18n)(`lib.developerTestAccount.create.loading.add`, {
76
75
  accountName: testAccountName,
77
76
  }),
78
77
  });
79
- let developerTestAccount;
78
+ let developerTestAccountId;
79
+ let developerTestAccountPersonalAccessKey;
80
80
  try {
81
81
  const { data } = await (0, developerTestAccounts_1.createDeveloperTestAccount)(parentAccountId, testAccountName);
82
- developerTestAccount = data;
82
+ developerTestAccountId = data.id;
83
+ developerTestAccountPersonalAccessKey = data.personalAccessKey;
83
84
  SpinniesManager_1.default.succeed('buildDeveloperTestAccount', {
84
- text: (0, lang_1.i18n)(`${i18nKey}.succeed`, {
85
+ text: (0, lang_1.i18n)(`lib.developerTestAccount.create.loading.succeed`, {
85
86
  accountName: testAccountName,
86
- accountId: developerTestAccount.id,
87
+ accountId: developerTestAccountId,
87
88
  }),
88
89
  });
89
90
  }
90
91
  catch (e) {
91
92
  (0, index_1.debugError)(e);
92
93
  SpinniesManager_1.default.fail('buildDeveloperTestAccount', {
93
- text: (0, lang_1.i18n)(`${i18nKey}.fail`, {
94
+ text: (0, lang_1.i18n)(`lib.developerTestAccount.create.loading.fail`, {
94
95
  accountName: testAccountName,
95
96
  }),
96
97
  });
97
98
  (0, developerTestAccounts_2.handleDeveloperTestAccountCreateError)(e, parentAccountId, env, portalLimit);
98
99
  }
99
100
  try {
100
- await saveAccountToConfig(developerTestAccount.id, testAccountName, env);
101
+ await saveAccountToConfig(developerTestAccountId, testAccountName, env, developerTestAccountPersonalAccessKey);
101
102
  }
102
103
  catch (err) {
103
104
  (0, index_1.logError)(err);
104
105
  throw err;
105
106
  }
106
- return developerTestAccount;
107
+ return developerTestAccountId;
107
108
  }
108
109
  async function buildSandbox(sandboxName, parentAccountConfig, sandboxType, env, force = false) {
109
110
  let i18nKey;
@@ -1,9 +1,7 @@
1
1
  import { Argv, Arguments } from 'yargs';
2
2
  import { CmsPublishMode } from '@hubspot/local-dev-lib/types/Files';
3
3
  import { ConfigArgs } from '../types/Yargs';
4
- export declare function addGlobalOptions(yargs: Argv): Argv<{
5
- debug: boolean;
6
- }>;
4
+ export declare function addGlobalOptions(yargs: Argv): Argv<{}>;
7
5
  export declare function addAccountOptions(yargs: Argv): Argv;
8
6
  export declare function addConfigOptions(yargs: Argv): Argv<ConfigArgs>;
9
7
  export declare function addOverwriteOptions(yargs: Argv): Argv;
@@ -13,13 +11,12 @@ export declare function addCmsPublishModeOptions(yargs: Argv, { read, write }: {
13
11
  }): Argv;
14
12
  export declare function addTestingOptions(yargs: Argv): Argv;
15
13
  export declare function addUseEnvironmentOptions(yargs: Argv): Argv;
16
- export declare function addCustomHelpOutput(yargs: Argv, command: string, describe: string): Promise<void>;
14
+ export declare function addCustomHelpOutput(yargs: Argv, command: string | string[], describe?: string): Promise<void>;
17
15
  export declare function setLogLevel(options: Arguments<{
18
16
  debug?: boolean;
17
+ networkDebug?: boolean;
19
18
  }>): void;
20
- export declare function getCommandName(argv: Arguments<{
21
- _?: string[];
22
- }>): string;
19
+ export declare function getCommandName(argv: Arguments): string;
23
20
  export declare function getCmsPublishMode(options: Arguments<{
24
21
  cmsPublishMode?: CmsPublishMode;
25
22
  derivedAccountId?: number;