@hubspot/cli 7.5.4-experimental.0 → 7.5.4

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 +14 -4
  2. package/api/migrate.js +16 -2
  3. package/bin/cli.js +100 -95
  4. package/commands/account/auth.d.ts +5 -7
  5. package/commands/account/auth.js +87 -80
  6. package/commands/account/clean.d.ts +3 -7
  7. package/commands/account/clean.js +16 -9
  8. package/commands/account/createOverride.d.ts +3 -7
  9. package/commands/account/createOverride.js +23 -6
  10. package/commands/account/info.d.ts +3 -7
  11. package/commands/account/info.js +13 -5
  12. package/commands/account/list.d.ts +3 -7
  13. package/commands/account/list.js +15 -8
  14. package/commands/account/remove.d.ts +3 -7
  15. package/commands/account/remove.js +21 -9
  16. package/commands/account/removeOverride.d.ts +3 -7
  17. package/commands/account/removeOverride.js +23 -6
  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 +14 -6
  22. package/commands/account.d.ts +3 -4
  23. package/commands/account.js +33 -58
  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 +35 -35
  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 +3 -7
  51. package/commands/config/migrate.js +37 -46
  52. package/commands/config/set.d.ts +5 -6
  53. package/commands/config/set.js +38 -14
  54. package/commands/config.d.ts +3 -4
  55. package/commands/config.js +18 -44
  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 +25 -17
  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 -0
  175. package/commands/project/migrate.js +71 -0
  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 +82 -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 -35
  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 +3217 -0
  225. package/lang/en.js +3074 -3318
  226. package/lang/en.lyaml +41 -246
  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 +232 -99
  231. package/lib/app/migrate_legacy.d.ts +2 -2
  232. package/lib/app/migrate_legacy.js +16 -13
  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 -2
  240. package/lib/configMigrate.js +39 -60
  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.js +10 -11
  248. package/lib/doctor/DiagnosticInfoBuilder.d.ts +1 -1
  249. package/lib/doctor/DiagnosticInfoBuilder.js +10 -10
  250. package/lib/doctor/Doctor.js +45 -49
  251. package/lib/errorHandlers/index.js +13 -7
  252. package/lib/errorHandlers/suppressError.js +18 -26
  253. package/lib/filesystem.d.ts +1 -1
  254. package/lib/generateSelectors.js +3 -6
  255. package/lib/hasFeature.d.ts +3 -1
  256. package/lib/interpolation.d.ts +2 -3
  257. package/lib/lang.d.ts +2 -3
  258. package/lib/marketplaceValidate.d.ts +12 -2
  259. package/lib/marketplaceValidate.js +22 -29
  260. package/lib/mcp/setup.d.ts +21 -0
  261. package/lib/mcp/setup.js +218 -0
  262. package/lib/middleware/__test__/yargsChecksMiddleware.test.js +3 -3
  263. package/lib/middleware/autoUpdateMiddleware.d.ts +1 -0
  264. package/lib/middleware/autoUpdateMiddleware.js +89 -0
  265. package/lib/middleware/configMiddleware.js +32 -2
  266. package/lib/middleware/fireAlarmMiddleware.d.ts +2 -2
  267. package/lib/middleware/fireAlarmMiddleware.js +12 -24
  268. package/lib/middleware/yargsChecksMiddleware.js +2 -2
  269. package/lib/npm.d.ts +9 -0
  270. package/lib/npm.js +36 -0
  271. package/lib/oauth.js +1 -2
  272. package/lib/process.js +1 -2
  273. package/lib/projectProfiles.d.ts +7 -0
  274. package/lib/projectProfiles.js +83 -0
  275. package/lib/projects/ProjectLogsManager.d.ts +1 -1
  276. package/lib/projects/ProjectLogsManager.js +16 -21
  277. package/lib/projects/add/legacyAddComponent.d.ts +5 -0
  278. package/lib/projects/add/legacyAddComponent.js +48 -0
  279. package/lib/projects/add/v3AddComponent.d.ts +8 -0
  280. package/lib/projects/add/v3AddComponent.js +85 -0
  281. package/lib/projects/buildAndDeploy.js +46 -42
  282. package/lib/projects/components.d.ts +2 -0
  283. package/lib/projects/components.js +82 -0
  284. package/lib/projects/config.d.ts +9 -0
  285. package/lib/projects/config.js +79 -0
  286. package/lib/projects/create/index.d.ts +23 -0
  287. package/lib/projects/create/index.js +33 -0
  288. package/lib/projects/create/legacy.d.ts +6 -0
  289. package/lib/projects/{create.js → create/legacy.js} +23 -15
  290. package/lib/projects/create/v3.d.ts +27 -0
  291. package/lib/projects/create/v3.js +158 -0
  292. package/lib/projects/ensureProjectExists.d.ts +11 -0
  293. package/lib/projects/ensureProjectExists.js +97 -0
  294. package/lib/projects/localDev/AppDevModeInterface.d.ts +30 -0
  295. package/lib/projects/localDev/AppDevModeInterface.js +215 -0
  296. package/lib/{DevServerManager.d.ts → projects/localDev/DevServerManager.d.ts} +1 -1
  297. package/lib/{DevServerManager.js → projects/localDev/DevServerManager.js} +6 -6
  298. package/lib/projects/localDev/DevServerManagerV2.d.ts +22 -0
  299. package/lib/{DevServerManagerV2.js → projects/localDev/DevServerManagerV2.js} +22 -19
  300. package/lib/projects/localDev/LocalDevLogger.d.ts +30 -0
  301. package/lib/projects/localDev/LocalDevLogger.js +159 -0
  302. package/lib/{LocalDevManager.d.ts → projects/localDev/LocalDevManager.d.ts} +1 -1
  303. package/lib/{LocalDevManager.js → projects/localDev/LocalDevManager.js} +57 -83
  304. package/lib/projects/localDev/LocalDevProcess.d.ts +34 -0
  305. package/lib/projects/localDev/LocalDevProcess.js +201 -0
  306. package/lib/projects/localDev/LocalDevState.d.ts +50 -0
  307. package/lib/projects/localDev/LocalDevState.js +119 -0
  308. package/lib/projects/localDev/LocalDevWatcher.d.ts +10 -0
  309. package/lib/projects/localDev/LocalDevWatcher.js +53 -0
  310. package/lib/projects/localDev/LocalDevWebsocketServer.d.ts +20 -0
  311. package/lib/projects/localDev/LocalDevWebsocketServer.js +131 -0
  312. package/lib/{localDev.d.ts → projects/localDev/helpers.d.ts} +6 -4
  313. package/lib/{localDev.js → projects/localDev/helpers.js} +127 -114
  314. package/lib/projects/ui.d.ts +1 -0
  315. package/lib/projects/ui.js +15 -0
  316. package/lib/projects/upload.d.ts +17 -2
  317. package/lib/projects/upload.js +74 -50
  318. package/lib/projects/urls.d.ts +4 -0
  319. package/lib/projects/urls.js +23 -1
  320. package/lib/projects/watch.d.ts +1 -1
  321. package/lib/projects/watch.js +21 -18
  322. package/lib/prompts/accountNamePrompt.js +16 -13
  323. package/lib/prompts/accountsPrompt.js +1 -2
  324. package/lib/prompts/cmsFieldPrompt.js +1 -2
  325. package/lib/prompts/createApiSamplePrompt.d.ts +2 -10
  326. package/lib/prompts/createApiSamplePrompt.js +4 -5
  327. package/lib/prompts/createFunctionPrompt.js +13 -14
  328. package/lib/prompts/createModulePrompt.js +8 -9
  329. package/lib/prompts/createProjectPrompt.d.ts +20 -4
  330. package/lib/prompts/createProjectPrompt.js +43 -13
  331. package/lib/prompts/createTemplatePrompt.d.ts +22 -4
  332. package/lib/prompts/createTemplatePrompt.js +1 -2
  333. package/lib/prompts/downloadProjectPrompt.js +3 -4
  334. package/lib/prompts/installAppPrompt.d.ts +2 -0
  335. package/lib/prompts/installAppPrompt.js +45 -0
  336. package/lib/prompts/personalAccessKeyPrompt.js +35 -25
  337. package/lib/prompts/previewPrompt.js +5 -6
  338. package/lib/prompts/projectAddPrompt.d.ts +5 -1
  339. package/lib/prompts/projectAddPrompt.js +35 -8
  340. package/lib/prompts/projectDevTargetAccountPrompt.d.ts +6 -1
  341. package/lib/prompts/projectDevTargetAccountPrompt.js +15 -16
  342. package/lib/prompts/projectNamePrompt.js +5 -6
  343. package/lib/prompts/projectsLogsPrompt.js +3 -2
  344. package/lib/prompts/promptUtils.d.ts +4 -2
  345. package/lib/prompts/promptUtils.js +3 -1
  346. package/lib/prompts/sandboxesPrompt.js +5 -6
  347. package/lib/prompts/secretPrompt.js +2 -3
  348. package/lib/prompts/selectAppPrompt.d.ts +2 -0
  349. package/lib/prompts/selectAppPrompt.js +40 -0
  350. package/lib/prompts/selectHubDBTablePrompt.js +11 -8
  351. package/lib/prompts/{selectPublicAppPrompt.d.ts → selectPublicAppForMigrationPrompt.d.ts} +1 -1
  352. package/lib/prompts/{selectPublicAppPrompt.js → selectPublicAppForMigrationPrompt.js} +8 -9
  353. package/lib/prompts/setAsDefaultAccountPrompt.js +11 -2
  354. package/lib/prompts/uploadPrompt.js +4 -5
  355. package/lib/sandboxSync.js +15 -14
  356. package/lib/sandboxes.js +12 -13
  357. package/lib/serverlessLogs.js +4 -6
  358. package/lib/testUtils.d.ts +3 -3
  359. package/lib/testUtils.js +8 -9
  360. package/lib/ui/boxen.d.ts +5 -0
  361. package/lib/ui/boxen.js +30 -0
  362. package/lib/ui/git.js +8 -9
  363. package/lib/ui/index.d.ts +3 -2
  364. package/lib/ui/index.js +15 -17
  365. package/lib/ui/logger.d.ts +10 -0
  366. package/lib/ui/logger.js +15 -0
  367. package/lib/ui/serverlessFunctionLogs.js +2 -3
  368. package/lib/upload.d.ts +1 -1
  369. package/lib/validation.js +4 -5
  370. package/lib/yargsUtils.d.ts +5 -1
  371. package/lib/yargsUtils.js +6 -0
  372. package/mcp-server/server.d.ts +1 -0
  373. package/mcp-server/server.js +18 -0
  374. package/mcp-server/tools/index.d.ts +2 -0
  375. package/mcp-server/tools/index.js +19 -0
  376. package/mcp-server/tools/project/AddFeatureToProject.d.ts +29 -0
  377. package/mcp-server/tools/project/AddFeatureToProject.js +85 -0
  378. package/mcp-server/tools/project/CreateProjectTool.d.ts +35 -0
  379. package/mcp-server/tools/project/CreateProjectTool.js +104 -0
  380. package/mcp-server/tools/project/DeployProject.d.ts +20 -0
  381. package/mcp-server/tools/project/DeployProject.js +50 -0
  382. package/mcp-server/tools/project/GuidedWalkthroughTool.d.ts +17 -0
  383. package/mcp-server/tools/project/GuidedWalkthroughTool.js +58 -0
  384. package/mcp-server/tools/project/UploadProjectTools.d.ts +17 -0
  385. package/mcp-server/tools/project/UploadProjectTools.js +35 -0
  386. package/mcp-server/tools/project/ValidateProjectTool.d.ts +17 -0
  387. package/mcp-server/tools/project/ValidateProjectTool.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 +25 -17
  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 -11
  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 -20
  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
@@ -14,7 +14,8 @@ exports.useExistingDevTestAccount = useExistingDevTestAccount;
14
14
  exports.createNewProjectForLocalDev = createNewProjectForLocalDev;
15
15
  exports.createInitialBuildForNewProject = createInitialBuildForNewProject;
16
16
  exports.getAccountHomeUrl = getAccountHomeUrl;
17
- const logger_1 = require("@hubspot/local-dev-lib/logger");
17
+ exports.hasSandboxes = hasSandboxes;
18
+ exports.selectAccountTypePrompt = selectAccountTypePrompt;
18
19
  const config_1 = require("@hubspot/local-dev-lib/constants/config");
19
20
  const index_1 = require("@hubspot/local-dev-lib/errors/index");
20
21
  const urls_1 = require("@hubspot/local-dev-lib/urls");
@@ -23,70 +24,59 @@ const projects_1 = require("@hubspot/local-dev-lib/api/projects");
23
24
  const environments_1 = require("@hubspot/local-dev-lib/constants/environments");
24
25
  const auth_1 = require("@hubspot/local-dev-lib/constants/auth");
25
26
  const getAccountIdentifier_1 = require("@hubspot/local-dev-lib/config/getAccountIdentifier");
26
- const projectDevTargetAccountPrompt_1 = require("./prompts/projectDevTargetAccountPrompt");
27
- const promptUtils_1 = require("./prompts/promptUtils");
28
- const sandboxes_1 = require("./sandboxes");
29
- const sandboxSync_1 = require("./sandboxSync");
30
- const developerTestAccounts_1 = require("./developerTestAccounts");
31
- const ui_1 = require("./ui");
32
- const SpinniesManager_1 = __importDefault(require("./ui/SpinniesManager"));
33
- const lang_1 = require("./lang");
34
- const exitCodes_1 = require("./enums/exitCodes");
35
- const usageTracking_1 = require("./usageTracking");
36
- const accountTypes_1 = require("./accountTypes");
37
- const upload_1 = require("./projects/upload");
38
- const buildAndDeploy_1 = require("./projects/buildAndDeploy");
39
- const constants_1 = require("./constants");
40
- const index_2 = require("./errorHandlers/index");
41
- const buildAccount_1 = require("./buildAccount");
42
- const accountNamePrompt_1 = require("./prompts/accountNamePrompt");
43
- const i18nKey = 'lib.localDev';
27
+ const sandboxHubs_1 = require("@hubspot/local-dev-lib/api/sandboxHubs");
28
+ const projectDevTargetAccountPrompt_1 = require("../../prompts/projectDevTargetAccountPrompt");
29
+ const promptUtils_1 = require("../../prompts/promptUtils");
30
+ const sandboxes_1 = require("../../sandboxes");
31
+ const sandboxSync_1 = require("../../sandboxSync");
32
+ const developerTestAccounts_1 = require("../../developerTestAccounts");
33
+ const ui_1 = require("../../ui");
34
+ const SpinniesManager_1 = __importDefault(require("../../ui/SpinniesManager"));
35
+ const exitCodes_1 = require("../../enums/exitCodes");
36
+ const usageTracking_1 = require("../../usageTracking");
37
+ const accountTypes_1 = require("../../accountTypes");
38
+ const upload_1 = require("../../projects/upload");
39
+ const buildAndDeploy_1 = require("../../projects/buildAndDeploy");
40
+ const constants_1 = require("../../constants");
41
+ const index_2 = require("../../errorHandlers/index");
42
+ const buildAccount_1 = require("../../buildAccount");
43
+ const accountNamePrompt_1 = require("../../prompts/accountNamePrompt");
44
+ const en_1 = require("../../../lang/en");
45
+ const logger_1 = require("../../ui/logger");
44
46
  // If the user passed in the --account flag, confirm they want to use that account as
45
47
  // their target account, otherwise exit
46
48
  async function confirmDefaultAccountIsTarget(accountConfig) {
47
49
  if (!accountConfig.name || !accountConfig.accountType) {
48
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.confirmDefaultAccountIsTarget.configError`, {
49
- authCommand: (0, ui_1.uiCommandReference)('hs auth'),
50
- }));
50
+ logger_1.uiLogger.error(en_1.lib.localDevHelpers.confirmDefaultAccountIsTarget.configError);
51
51
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
52
52
  }
53
- logger_1.logger.log();
53
+ logger_1.uiLogger.log('');
54
54
  const useDefaultAccount = await (0, projectDevTargetAccountPrompt_1.confirmDefaultAccountPrompt)(accountConfig.name, config_1.HUBSPOT_ACCOUNT_TYPE_STRINGS[accountConfig.accountType]);
55
55
  if (!useDefaultAccount) {
56
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.confirmDefaultAccountIsTarget.declineDefaultAccountExplanation`, {
57
- useCommand: (0, ui_1.uiCommandReference)('hs accounts use'),
58
- devCommand: (0, ui_1.uiCommandReference)('hs project dev'),
59
- }));
56
+ logger_1.uiLogger.log(en_1.lib.localDevHelpers.confirmDefaultAccountIsTarget
57
+ .declineDefaultAccountExplanation);
60
58
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
61
59
  }
62
60
  }
63
61
  // Confirm the default account is supported for the type of apps being developed
64
- function checkIfDefaultAccountIsSupported(accountConfig, hasPublicApps) {
62
+ async function checkIfDefaultAccountIsSupported(accountConfig, hasPublicApps) {
63
+ const defaultAccountIsUnified = await (0, accountTypes_1.isUnifiedAccount)(accountConfig);
65
64
  if (hasPublicApps &&
66
65
  !((0, accountTypes_1.isAppDeveloperAccount)(accountConfig) ||
67
- (0, accountTypes_1.isDeveloperTestAccount)(accountConfig))) {
68
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.checkIfDefaultAccountIsSupported.publicApp`, {
69
- useCommand: (0, ui_1.uiCommandReference)('hs accounts use'),
70
- authCommand: (0, ui_1.uiCommandReference)('hs auth'),
71
- }));
66
+ (0, accountTypes_1.isDeveloperTestAccount)(accountConfig) ||
67
+ defaultAccountIsUnified)) {
68
+ logger_1.uiLogger.error(en_1.lib.localDevHelpers.checkIfDefaultAccountIsSupported.publicApp);
72
69
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
73
70
  }
74
71
  else if (!hasPublicApps && (0, accountTypes_1.isAppDeveloperAccount)(accountConfig)) {
75
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.checkIfDefaultAccountIsSupported.privateApp`, {
76
- useCommand: (0, ui_1.uiCommandReference)('hs accounts use'),
77
- authCommand: (0, ui_1.uiCommandReference)('hs auth'),
78
- }));
72
+ logger_1.uiLogger.error(en_1.lib.localDevHelpers.checkIfDefaultAccountIsSupported.privateApp);
79
73
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
80
74
  }
81
75
  }
82
76
  function checkIfParentAccountIsAuthed(accountConfig) {
83
77
  if (!accountConfig.parentAccountId ||
84
78
  !(0, config_2.getAccountConfig)(accountConfig.parentAccountId)) {
85
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.checkIfParentAccountIsAuthed.notAuthedError`, {
86
- accountId: accountConfig.parentAccountId || '',
87
- accountIdentifier: (0, ui_1.uiAccountDescription)((0, getAccountIdentifier_1.getAccountIdentifier)(accountConfig)),
88
- authCommand: (0, ui_1.uiCommandReference)(`hs auth --account=${accountConfig.parentAccountId}`),
89
- }));
79
+ logger_1.uiLogger.error(en_1.lib.localDevHelpers.checkIfParentAccountIsAuthed.notAuthedError(accountConfig.parentAccountId || '', (0, ui_1.uiAccountDescription)((0, getAccountIdentifier_1.getAccountIdentifier)(accountConfig))));
90
80
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
91
81
  }
92
82
  }
@@ -94,34 +84,30 @@ function checkIfParentAccountIsAuthed(accountConfig) {
94
84
  function checkIfAccountFlagIsSupported(accountConfig, hasPublicApps) {
95
85
  if (hasPublicApps) {
96
86
  if (!(0, accountTypes_1.isDeveloperTestAccount)(accountConfig)) {
97
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.validateAccountOption.invalidPublicAppAccount`, {
98
- useCommand: (0, ui_1.uiCommandReference)('hs accounts use'),
99
- devCommand: (0, ui_1.uiCommandReference)('hs project dev'),
100
- }));
87
+ logger_1.uiLogger.error(en_1.lib.localDevHelpers.validateAccountOption.invalidPublicAppAccount);
101
88
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
102
89
  }
103
90
  checkIfParentAccountIsAuthed(accountConfig);
104
91
  }
105
92
  else if ((0, accountTypes_1.isAppDeveloperAccount)(accountConfig)) {
106
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.validateAccountOption.invalidPrivateAppAccount`, {
107
- useCommand: (0, ui_1.uiCommandReference)('hs accounts use'),
108
- }));
93
+ logger_1.uiLogger.error(en_1.lib.localDevHelpers.validateAccountOption.invalidPrivateAppAccount);
109
94
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
110
95
  }
111
96
  }
112
97
  // If the user isn't using the recommended account type, prompt them to use or create one
113
98
  async function suggestRecommendedNestedAccount(accounts, accountConfig, hasPublicApps) {
114
- logger_1.logger.log();
99
+ logger_1.uiLogger.log('');
115
100
  (0, ui_1.uiLine)();
116
101
  if (hasPublicApps) {
117
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.validateAccountOption.publicAppNonDeveloperTestAccountWarning`));
102
+ logger_1.uiLogger.log(en_1.lib.localDevHelpers.validateAccountOption
103
+ .publicAppNonDeveloperTestAccountWarning);
118
104
  }
119
105
  else {
120
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.validateAccountOption.nonSandboxWarning`));
106
+ logger_1.uiLogger.log(en_1.lib.localDevHelpers.validateAccountOption.nonSandboxWarning);
121
107
  }
122
108
  (0, ui_1.uiLine)();
123
- logger_1.logger.log();
124
- const targetAccountPrompt = (0, accountTypes_1.isAppDeveloperAccount)(accountConfig)
109
+ logger_1.uiLogger.log('');
110
+ const targetAccountPrompt = hasPublicApps
125
111
  ? projectDevTargetAccountPrompt_1.selectDeveloperTestTargetAccountPrompt
126
112
  : projectDevTargetAccountPrompt_1.selectSandboxTargetAccountPrompt;
127
113
  return targetAccountPrompt(accounts, accountConfig);
@@ -133,15 +119,10 @@ async function createSandboxForLocalDev(accountId, accountConfig, env) {
133
119
  }
134
120
  catch (err) {
135
121
  if ((0, index_1.isMissingScopeError)(err)) {
136
- logger_1.logger.error((0, lang_1.i18n)('lib.sandbox.create.failure.scopes.message', {
137
- accountName: accountConfig.name || accountId,
138
- }));
122
+ logger_1.uiLogger.error(en_1.lib.sandbox.create.developer.failure.scopes.message);
139
123
  const websiteOrigin = (0, urls_1.getHubSpotWebsiteOrigin)(env);
140
124
  const url = `${websiteOrigin}/personal-access-key/${accountId}`;
141
- logger_1.logger.info((0, lang_1.i18n)('lib.sandbox.create.failure.scopes.instructions', {
142
- accountName: accountConfig.name || accountId,
143
- url,
144
- }));
125
+ logger_1.uiLogger.info(en_1.lib.sandbox.create.developer.failure.scopes.instructions(accountConfig.name || accountId, url));
145
126
  }
146
127
  else {
147
128
  (0, index_2.logError)(err);
@@ -157,7 +138,7 @@ async function createSandboxForLocalDev(accountId, accountConfig, env) {
157
138
  const targetAccountId = result.sandbox.sandboxHubId;
158
139
  const sandboxAccountConfig = (0, config_2.getAccountConfig)(result.sandbox.sandboxHubId);
159
140
  if (!sandboxAccountConfig) {
160
- logger_1.logger.error((0, lang_1.i18n)('lib.sandbox.create.failure.generic'));
141
+ logger_1.uiLogger.error(en_1.lib.sandbox.create.developer.failure.generic);
161
142
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
162
143
  }
163
144
  const syncTasks = await (0, sandboxes_1.getAvailableSyncTypes)(accountConfig, sandboxAccountConfig);
@@ -185,15 +166,10 @@ async function createDeveloperTestAccountForLocalDev(accountId, accountConfig, e
185
166
  }
186
167
  catch (err) {
187
168
  if ((0, index_1.isMissingScopeError)(err)) {
188
- logger_1.logger.error((0, lang_1.i18n)('lib.developerTestAccount.create.failure.scopes.message', {
189
- accountName: accountConfig.name || accountId,
190
- }));
169
+ logger_1.uiLogger.error(en_1.lib.developerTestAccount.create.failure.scopes.message);
191
170
  const websiteOrigin = (0, urls_1.getHubSpotWebsiteOrigin)(env);
192
171
  const url = `${websiteOrigin}/personal-access-key/${accountId}`;
193
- logger_1.logger.info((0, lang_1.i18n)('lib.developerTestAccount.create.failure.scopes.instructions', {
194
- accountName: accountConfig.name || accountId,
195
- url,
196
- }));
172
+ logger_1.uiLogger.info(en_1.lib.developerTestAccount.create.failure.scopes.instructions(accountConfig.name || accountId, url));
197
173
  }
198
174
  else {
199
175
  (0, index_2.logError)(err);
@@ -207,7 +183,7 @@ async function createDeveloperTestAccountForLocalDev(accountId, accountConfig, e
207
183
  });
208
184
  (0, usageTracking_1.trackCommandMetadataUsage)('developer-test-account-create', { step: 'project-dev' }, accountId);
209
185
  const result = await (0, buildAccount_1.buildDeveloperTestAccount)(name, accountConfig, env, maxTestPortals);
210
- return result.id;
186
+ return result;
211
187
  }
212
188
  catch (err) {
213
189
  (0, index_2.logError)(err);
@@ -218,91 +194,86 @@ async function createDeveloperTestAccountForLocalDev(accountId, accountConfig, e
218
194
  async function useExistingDevTestAccount(env, account) {
219
195
  const useExistingDevTestAcct = await (0, projectDevTargetAccountPrompt_1.confirmUseExistingDeveloperTestAccountPrompt)(account);
220
196
  if (!useExistingDevTestAcct) {
221
- logger_1.logger.log('');
222
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.confirmDefaultAccountIsTarget.declineDefaultAccountExplanation`, {
223
- useCommand: (0, ui_1.uiCommandReference)('hs accounts use'),
224
- devCommand: (0, ui_1.uiCommandReference)('hs project dev'),
225
- }));
226
- logger_1.logger.log('');
197
+ logger_1.uiLogger.log('');
198
+ logger_1.uiLogger.log(en_1.lib.localDevHelpers.confirmDefaultAccountIsTarget
199
+ .declineDefaultAccountExplanation);
200
+ logger_1.uiLogger.log('');
227
201
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
228
202
  }
229
203
  const devTestAcctConfigName = await (0, buildAccount_1.saveAccountToConfig)(account.id, account.accountName, env);
230
- logger_1.logger.success((0, lang_1.i18n)(`lib.developerTestAccount.create.success.configFileUpdated`, {
231
- accountName: devTestAcctConfigName,
232
- authType: auth_1.PERSONAL_ACCESS_KEY_AUTH_METHOD.name,
233
- }));
204
+ logger_1.uiLogger.success(en_1.lib.developerTestAccount.create.success.configFileUpdated(devTestAcctConfigName, auth_1.PERSONAL_ACCESS_KEY_AUTH_METHOD.name));
234
205
  }
235
206
  // Prompt the user to create a new project if one doesn't exist on their target account
236
207
  async function createNewProjectForLocalDev(projectConfig, targetAccountId, shouldCreateWithoutConfirmation, hasPublicApps) {
237
208
  // Create the project without prompting if this is a newly created sandbox
238
209
  let shouldCreateProject = shouldCreateWithoutConfirmation;
239
210
  if (!shouldCreateProject) {
240
- const explanationString = (0, lang_1.i18n)(hasPublicApps
241
- ? `${i18nKey}.createNewProjectForLocalDev.publicAppProjectMustExistExplanation`
242
- : `${i18nKey}.createNewProjectForLocalDev.projectMustExistExplanation`, {
243
- accountIdentifier: (0, ui_1.uiAccountDescription)(targetAccountId),
244
- projectName: projectConfig.name,
245
- });
246
- logger_1.logger.log();
211
+ const explanationLangFunction = hasPublicApps
212
+ ? en_1.lib.localDevHelpers.createNewProjectForLocalDev
213
+ .publicAppProjectMustExistExplanation
214
+ : en_1.lib.localDevHelpers.createNewProjectForLocalDev
215
+ .projectMustExistExplanation;
216
+ const explanationString = explanationLangFunction(projectConfig.name, targetAccountId);
217
+ logger_1.uiLogger.log('');
247
218
  (0, ui_1.uiLine)();
248
- logger_1.logger.log(explanationString);
219
+ logger_1.uiLogger.log(explanationString);
249
220
  (0, ui_1.uiLine)();
250
- shouldCreateProject = await (0, promptUtils_1.confirmPrompt)((0, lang_1.i18n)(`${i18nKey}.createNewProjectForLocalDev.createProject`, {
251
- accountIdentifier: (0, ui_1.uiAccountDescription)(targetAccountId),
252
- projectName: projectConfig.name,
253
- }));
221
+ shouldCreateProject = await (0, promptUtils_1.confirmPrompt)(en_1.lib.localDevHelpers.createNewProjectForLocalDev.createProject(projectConfig.name, (0, ui_1.uiAccountDescription)(targetAccountId)));
254
222
  }
255
223
  if (shouldCreateProject) {
256
224
  SpinniesManager_1.default.add('createProject', {
257
- text: (0, lang_1.i18n)(`${i18nKey}.createNewProjectForLocalDev.creatingProject`, {
258
- accountIdentifier: (0, ui_1.uiAccountDescription)(targetAccountId),
259
- projectName: projectConfig.name,
260
- }),
225
+ text: en_1.lib.localDevHelpers.createNewProjectForLocalDev.creatingProject(projectConfig.name, (0, ui_1.uiAccountDescription)(targetAccountId)),
261
226
  });
262
227
  try {
263
228
  const { data: project } = await (0, projects_1.createProject)(targetAccountId, projectConfig.name);
264
229
  SpinniesManager_1.default.succeed('createProject', {
265
- text: (0, lang_1.i18n)(`${i18nKey}.createNewProjectForLocalDev.createdProject`, {
266
- accountIdentifier: (0, ui_1.uiAccountDescription)(targetAccountId),
267
- projectName: projectConfig.name,
268
- }),
230
+ text: en_1.lib.localDevHelpers.createNewProjectForLocalDev.createdProject(projectConfig.name, (0, ui_1.uiAccountDescription)(targetAccountId)),
269
231
  succeedColor: 'white',
270
232
  });
271
233
  return project;
272
234
  }
273
235
  catch (err) {
274
236
  SpinniesManager_1.default.fail('createProject');
275
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.createNewProjectForLocalDev.failedToCreateProject`));
237
+ logger_1.uiLogger.log(en_1.lib.localDevHelpers.createNewProjectForLocalDev.failedToCreateProject);
276
238
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
277
239
  }
278
240
  }
279
241
  else {
280
242
  // We cannot continue if the project does not exist in the target account
281
- logger_1.logger.log();
282
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.createNewProjectForLocalDev.choseNotToCreateProject`));
243
+ logger_1.uiLogger.log('');
244
+ logger_1.uiLogger.log(en_1.lib.localDevHelpers.createNewProjectForLocalDev.choseNotToCreateProject);
283
245
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
284
246
  }
285
247
  }
286
248
  function projectUploadCallback(accountId, projectConfig, tempFile, buildId) {
287
249
  if (!buildId) {
288
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.createInitialBuildForNewProject.initialUploadMessage`, {
289
- uploadCommand: (0, ui_1.uiCommandReference)('hs project upload'),
290
- }));
250
+ logger_1.uiLogger.error(en_1.lib.localDevHelpers.createInitialBuildForNewProject.genericError);
291
251
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
292
252
  }
293
253
  return (0, buildAndDeploy_1.pollProjectBuildAndDeploy)(accountId, projectConfig, tempFile, buildId, true);
294
254
  }
295
255
  // Create an initial build if the project was newly created in the account
296
256
  // Return the newly deployed build
297
- async function createInitialBuildForNewProject(projectConfig, projectDir, targetAccountId, sendIr) {
298
- const { result: initialUploadResult, uploadError } = await (0, upload_1.handleProjectUpload)(targetAccountId, projectConfig, projectDir, projectUploadCallback, (0, lang_1.i18n)(`${i18nKey}.createInitialBuildForNewProject.initialUploadMessage`), sendIr);
257
+ async function createInitialBuildForNewProject(projectConfig, projectDir, targetAccountId, sendIR, profile) {
258
+ const { result: initialUploadResult, uploadError } = await (0, upload_1.handleProjectUpload)({
259
+ accountId: targetAccountId,
260
+ projectConfig,
261
+ projectDir,
262
+ callbackFunc: projectUploadCallback,
263
+ uploadMessage: en_1.lib.localDevHelpers.createInitialBuildForNewProject
264
+ .initialUploadMessage,
265
+ forceCreate: true,
266
+ skipValidation: true,
267
+ sendIR,
268
+ profile,
269
+ });
299
270
  if (uploadError) {
300
271
  if ((0, index_1.isSpecifiedError)(uploadError, {
301
272
  subCategory: constants_1.PROJECT_ERROR_TYPES.PROJECT_LOCKED,
302
273
  })) {
303
- logger_1.logger.log();
304
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.createInitialBuildForNewProject.projectLockedError`));
305
- logger_1.logger.log();
274
+ logger_1.uiLogger.log('');
275
+ logger_1.uiLogger.error(en_1.lib.localDevHelpers.createInitialBuildForNewProject.projectLockedError);
276
+ logger_1.uiLogger.log('');
306
277
  }
307
278
  else {
308
279
  (0, index_2.logError)(uploadError, new index_2.ApiErrorContext({
@@ -323,11 +294,11 @@ async function createInitialBuildForNewProject(projectConfig, projectDir, target
323
294
  initialUploadResult.deployResult[constants_1.PROJECT_DEPLOY_TEXT.SUBTASK_KEY];
324
295
  }
325
296
  const failedSubTasks = subTasks.filter(task => task.status === 'FAILURE');
326
- logger_1.logger.log();
297
+ logger_1.uiLogger.log('');
327
298
  failedSubTasks.forEach(failedSubTask => {
328
- logger_1.logger.error(failedSubTask.errorMessage);
299
+ logger_1.uiLogger.error(failedSubTask.errorMessage);
329
300
  });
330
- logger_1.logger.log();
301
+ logger_1.uiLogger.log('');
331
302
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
332
303
  }
333
304
  return initialUploadResult.buildResult;
@@ -336,3 +307,45 @@ function getAccountHomeUrl(accountId) {
336
307
  const baseUrl = (0, urls_1.getHubSpotWebsiteOrigin)((0, config_2.getEnv)(accountId) === 'qa' ? environments_1.ENVIRONMENTS.QA : environments_1.ENVIRONMENTS.PROD);
337
308
  return `${baseUrl}/home?portalId=${accountId}`;
338
309
  }
310
+ async function hasSandboxes(account) {
311
+ const accountId = (0, getAccountIdentifier_1.getAccountIdentifier)(account);
312
+ if (!accountId) {
313
+ return false;
314
+ }
315
+ try {
316
+ const { data: { usage }, } = await (0, sandboxHubs_1.getSandboxUsageLimits)(accountId);
317
+ return usage.STANDARD.limit > 0 || usage.DEVELOPER.limit > 0;
318
+ }
319
+ catch (e) {
320
+ (0, index_2.debugError)(e);
321
+ return false;
322
+ }
323
+ }
324
+ // Top level prompt to choose the type of account to test on
325
+ async function selectAccountTypePrompt(accountConfig) {
326
+ const hasAccessToSandboxes = await hasSandboxes(accountConfig);
327
+ const result = await (0, promptUtils_1.listPrompt)(en_1.lib.localDevHelpers.selectAccountTypePrompt.message, {
328
+ choices: [
329
+ {
330
+ name: en_1.lib.localDevHelpers.selectAccountTypePrompt
331
+ .developerTestAccountOption,
332
+ value: config_1.HUBSPOT_ACCOUNT_TYPES.DEVELOPER_TEST,
333
+ },
334
+ {
335
+ name: en_1.lib.localDevHelpers.selectAccountTypePrompt
336
+ .sandboxAccountOption,
337
+ value: config_1.HUBSPOT_ACCOUNT_TYPES.DEVELOPMENT_SANDBOX,
338
+ disabled: !hasAccessToSandboxes
339
+ ? en_1.lib.localDevHelpers.selectAccountTypePrompt
340
+ .sandboxAccountOptionDisabled
341
+ : false,
342
+ },
343
+ {
344
+ name: en_1.lib.localDevHelpers.selectAccountTypePrompt
345
+ .productionAccountOption,
346
+ value: null,
347
+ },
348
+ ],
349
+ });
350
+ return result;
351
+ }
@@ -0,0 +1 @@
1
+ export declare function logFeedbackMessage(buildId: number): void;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.logFeedbackMessage = logFeedbackMessage;
4
+ const logger_1 = require("../ui/logger");
5
+ const constants_1 = require("../constants");
6
+ const ui_1 = require("../ui");
7
+ const en_1 = require("../../lang/en");
8
+ function logFeedbackMessage(buildId) {
9
+ if (buildId > 0 && buildId % constants_1.FEEDBACK_INTERVAL === 0) {
10
+ (0, ui_1.uiLine)();
11
+ logger_1.uiLogger.log(en_1.lib.projects.logFeedbackMessage.feedbackHeader);
12
+ (0, ui_1.uiLine)();
13
+ logger_1.uiLogger.log(en_1.lib.projects.logFeedbackMessage.feedbackMessage);
14
+ }
15
+ }
@@ -1,9 +1,24 @@
1
1
  import { FileResult } from 'tmp';
2
2
  import { ProjectConfig } from '../../types/Projects';
3
- type ProjectUploadCallbackFunction<T> = (accountId: number, projectConfig: ProjectConfig, tempFile: FileResult, buildId?: number) => Promise<T>;
3
+ type ProjectUploadCallbackFunction<T> = (accountId: number, projectConfig: ProjectConfig, tempFile: FileResult, buildId: number) => Promise<T>;
4
4
  type ProjectUploadResult<T> = {
5
5
  result?: T;
6
6
  uploadError?: unknown;
7
7
  };
8
- export declare function handleProjectUpload<T>(accountId: number, projectConfig: ProjectConfig, projectDir: string, callbackFunc: ProjectUploadCallbackFunction<T>, uploadMessage: string, sendIR?: boolean, skipValidation?: boolean): Promise<ProjectUploadResult<T>>;
8
+ type HandleProjectUploadArg<T> = {
9
+ accountId: number;
10
+ projectConfig: ProjectConfig;
11
+ projectDir: string;
12
+ callbackFunc: ProjectUploadCallbackFunction<T>;
13
+ uploadMessage?: string;
14
+ forceCreate?: boolean;
15
+ isUploadCommand?: boolean;
16
+ sendIR?: boolean;
17
+ skipValidation?: boolean;
18
+ profile?: string;
19
+ };
20
+ export declare function handleProjectUpload<T>({ accountId, projectConfig, projectDir, callbackFunc, profile, uploadMessage, forceCreate, isUploadCommand, sendIR, skipValidation, }: HandleProjectUploadArg<T>): Promise<ProjectUploadResult<T>>;
21
+ export declare function validateSourceDirectory(srcDir: string, projectConfig: ProjectConfig): void;
22
+ export declare function validateNoHSMetaMismatch(srcDir: string, projectConfig: ProjectConfig): Promise<void>;
23
+ export declare function handleTranslate(projectDir: string, projectConfig: ProjectConfig, accountId: number, skipValidation: boolean, profile: string | undefined): Promise<unknown>;
9
24
  export {};
@@ -4,29 +4,30 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.handleProjectUpload = handleProjectUpload;
7
+ exports.validateSourceDirectory = validateSourceDirectory;
8
+ exports.validateNoHSMetaMismatch = validateNoHSMetaMismatch;
9
+ exports.handleTranslate = handleTranslate;
7
10
  const archiver_1 = __importDefault(require("archiver"));
8
11
  const tmp_1 = __importDefault(require("tmp"));
9
12
  const fs_extra_1 = __importDefault(require("fs-extra"));
10
13
  const path_1 = __importDefault(require("path"));
11
14
  const projects_1 = require("@hubspot/local-dev-lib/api/projects");
12
15
  const ignoreRules_1 = require("@hubspot/local-dev-lib/ignoreRules");
13
- const logger_1 = require("@hubspot/local-dev-lib/logger");
16
+ const project_parsing_lib_1 = require("@hubspot/project-parsing-lib");
14
17
  const SpinniesManager_1 = __importDefault(require("../ui/SpinniesManager"));
15
18
  const ui_1 = require("../ui");
16
- const lang_1 = require("../lang");
17
- const exitCodes_1 = require("../enums/exitCodes");
18
- const project_parsing_lib_1 = require("@hubspot/project-parsing-lib");
19
19
  const errorHandlers_1 = require("../errorHandlers");
20
20
  const node_util_1 = __importDefault(require("node:util"));
21
- const i18nKey = 'lib.projectUpload';
21
+ const en_1 = require("../../lang/en");
22
+ const ensureProjectExists_1 = require("./ensureProjectExists");
23
+ const logger_1 = require("../ui/logger");
24
+ const buildAndDeploy_1 = require("./buildAndDeploy");
25
+ const exitCodes_1 = require("../enums/exitCodes");
22
26
  async function uploadProjectFiles(accountId, projectName, filePath, uploadMessage, platformVersion, intermediateRepresentation) {
23
27
  SpinniesManager_1.default.init({});
24
28
  const accountIdentifier = (0, ui_1.uiAccountDescription)(accountId);
25
29
  SpinniesManager_1.default.add('upload', {
26
- text: (0, lang_1.i18n)(`${i18nKey}.uploadProjectFiles.add`, {
27
- accountIdentifier,
28
- projectName,
29
- }),
30
+ text: en_1.lib.projectUpload.uploadProjectFiles.add(projectName, accountIdentifier),
30
31
  succeedColor: 'white',
31
32
  });
32
33
  let buildId;
@@ -35,68 +36,56 @@ async function uploadProjectFiles(accountId, projectName, filePath, uploadMessag
35
36
  const { data: upload } = await (0, projects_1.uploadProject)(accountId, projectName, filePath, uploadMessage, platformVersion, intermediateRepresentation);
36
37
  buildId = upload.buildId;
37
38
  SpinniesManager_1.default.succeed('upload', {
38
- text: (0, lang_1.i18n)(`${i18nKey}.uploadProjectFiles.succeed`, {
39
- accountIdentifier,
40
- projectName,
41
- }),
39
+ text: en_1.lib.projectUpload.uploadProjectFiles.succeed(projectName, accountIdentifier),
42
40
  });
43
41
  if (buildId) {
44
- logger_1.logger.debug((0, lang_1.i18n)(`${i18nKey}.uploadProjectFiles.buildCreated`, {
45
- buildId,
46
- projectName,
47
- }));
42
+ logger_1.uiLogger.debug(en_1.lib.projectUpload.uploadProjectFiles.buildCreated(projectName, buildId));
48
43
  }
49
44
  }
50
45
  catch (err) {
51
46
  SpinniesManager_1.default.fail('upload', {
52
- text: (0, lang_1.i18n)(`${i18nKey}.uploadProjectFiles.fail`, {
53
- accountIdentifier,
54
- projectName,
55
- }),
47
+ text: en_1.lib.projectUpload.uploadProjectFiles.fail(projectName, accountIdentifier),
56
48
  });
57
49
  error = err;
58
50
  }
59
51
  return { buildId, error };
60
52
  }
61
- async function handleProjectUpload(accountId, projectConfig, projectDir, callbackFunc, uploadMessage, sendIR = false, skipValidation = false) {
53
+ async function handleProjectUpload({ accountId, projectConfig, projectDir, callbackFunc, profile, uploadMessage = '', forceCreate = false, isUploadCommand = false, sendIR = false, skipValidation = false, }) {
62
54
  const srcDir = path_1.default.resolve(projectDir, projectConfig.srcDir);
63
- const filenames = fs_extra_1.default.readdirSync(srcDir);
64
- if (!filenames || filenames.length === 0) {
65
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.handleProjectUpload.emptySource`, {
66
- srcDir: projectConfig.srcDir,
67
- }));
68
- process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
55
+ try {
56
+ validateSourceDirectory(srcDir, projectConfig);
57
+ }
58
+ catch (e) {
59
+ (0, errorHandlers_1.logError)(e);
60
+ process.exit(exitCodes_1.EXIT_CODES.ERROR);
61
+ }
62
+ try {
63
+ await validateNoHSMetaMismatch(srcDir, projectConfig);
64
+ }
65
+ catch (e) {
66
+ (0, errorHandlers_1.logError)(e);
67
+ process.exit(exitCodes_1.EXIT_CODES.ERROR);
69
68
  }
70
69
  const tempFile = tmp_1.default.fileSync({ postfix: '.zip' });
71
- logger_1.logger.debug((0, lang_1.i18n)(`${i18nKey}.handleProjectUpload.compressing`, {
72
- path: tempFile.name,
73
- }));
70
+ logger_1.uiLogger.debug(en_1.lib.projectUpload.handleProjectUpload.compressing(tempFile.name));
74
71
  const output = fs_extra_1.default.createWriteStream(tempFile.name);
75
72
  const archive = (0, archiver_1.default)('zip');
76
73
  const result = new Promise(resolve => output.on('close', async function () {
77
- logger_1.logger.debug((0, lang_1.i18n)(`${i18nKey}.handleProjectUpload.compressed`, {
78
- byteCount: archive.pointer(),
79
- }));
74
+ logger_1.uiLogger.debug(en_1.lib.projectUpload.handleProjectUpload.compressed(archive.pointer()));
80
75
  let intermediateRepresentation;
81
76
  if (sendIR) {
82
77
  try {
83
- intermediateRepresentation = await (0, project_parsing_lib_1.translate)({
84
- projectSourceDir: path_1.default.join(projectDir, projectConfig.srcDir),
85
- platformVersion: projectConfig.platformVersion,
86
- accountId,
87
- }, { skipValidation });
88
- logger_1.logger.debug(node_util_1.default.inspect(intermediateRepresentation, false, null, true));
78
+ intermediateRepresentation = await handleTranslate(projectDir, projectConfig, accountId, skipValidation, profile);
89
79
  }
90
80
  catch (e) {
91
- if ((0, project_parsing_lib_1.isTranslationError)(e)) {
92
- logger_1.logger.error(e.toString());
93
- }
94
- else {
95
- (0, errorHandlers_1.logError)(e);
96
- }
97
- return process.exit(exitCodes_1.EXIT_CODES.ERROR);
81
+ (0, errorHandlers_1.logError)(e);
82
+ process.exit(exitCodes_1.EXIT_CODES.ERROR);
98
83
  }
99
84
  }
85
+ await (0, ensureProjectExists_1.ensureProjectExists)(accountId, projectConfig.name, {
86
+ forceCreate,
87
+ uploadCommand: isUploadCommand,
88
+ });
100
89
  const { buildId, error } = await uploadProjectFiles(accountId, projectConfig.name, tempFile.name, uploadMessage, projectConfig.platformVersion, intermediateRepresentation);
101
90
  if (error) {
102
91
  resolve({ uploadError: error });
@@ -113,9 +102,7 @@ async function handleProjectUpload(accountId, projectConfig, projectDir, callbac
113
102
  if (ignored) {
114
103
  const isNodeModule = file.name.includes('node_modules');
115
104
  if (!isNodeModule || !loggedIgnoredNodeModule) {
116
- logger_1.logger.debug((0, lang_1.i18n)(`${i18nKey}.handleProjectUpload.fileFiltered`, {
117
- filename: file.name,
118
- }));
105
+ logger_1.uiLogger.debug(en_1.lib.projectUpload.handleProjectUpload.fileFiltered(file.name));
119
106
  }
120
107
  if (isNodeModule && !loggedIgnoredNodeModule) {
121
108
  loggedIgnoredNodeModule = true;
@@ -126,3 +113,40 @@ async function handleProjectUpload(accountId, projectConfig, projectDir, callbac
126
113
  archive.finalize();
127
114
  return result;
128
115
  }
116
+ function validateSourceDirectory(srcDir, projectConfig) {
117
+ const filenames = fs_extra_1.default.readdirSync(srcDir);
118
+ if (!filenames || filenames.length === 0) {
119
+ const validationError = new Error(en_1.lib.projectUpload.handleProjectUpload.emptySource(projectConfig.srcDir));
120
+ validationError.name = 'ProjectValidationError';
121
+ throw validationError;
122
+ }
123
+ }
124
+ async function validateNoHSMetaMismatch(srcDir, projectConfig) {
125
+ const hasHsMetaFiles = await (0, project_parsing_lib_1.projectContainsHsMetaFiles)(srcDir);
126
+ if (!(0, buildAndDeploy_1.useV3Api)(projectConfig.platformVersion) && hasHsMetaFiles) {
127
+ const validationError = new Error(en_1.lib.projectUpload.wrongPlatformVersionMetaFiles);
128
+ validationError.name = 'ProjectValidationError';
129
+ throw validationError;
130
+ }
131
+ }
132
+ async function handleTranslate(projectDir, projectConfig, accountId, skipValidation, profile) {
133
+ try {
134
+ const intermediateRepresentation = await (0, project_parsing_lib_1.translate)({
135
+ projectSourceDir: path_1.default.join(projectDir, projectConfig.srcDir),
136
+ platformVersion: projectConfig.platformVersion,
137
+ accountId,
138
+ }, { skipValidation, profile });
139
+ logger_1.uiLogger.debug(node_util_1.default.inspect(intermediateRepresentation, false, null, true));
140
+ return intermediateRepresentation;
141
+ }
142
+ catch (e) {
143
+ if ((0, project_parsing_lib_1.isTranslationError)(e)) {
144
+ const validationError = new Error(e.toString());
145
+ validationError.name = 'ProjectValidationError';
146
+ throw validationError;
147
+ }
148
+ else {
149
+ (0, errorHandlers_1.logError)(e);
150
+ }
151
+ }
152
+ }
@@ -1,4 +1,8 @@
1
+ export declare function getProjectComponentDistributionUrl(projectName: string, componentName: string, accountId: number): string;
2
+ export declare function getDeveloperOverviewUrl(accountId: number): string;
1
3
  export declare function getProjectDetailUrl(projectName: string, accountId: number): string | undefined;
4
+ export declare function getProjectSettingsUrl(projectName: string, accountId: number): string | undefined;
2
5
  export declare function getProjectActivityUrl(projectName: string, accountId: number): string;
3
6
  export declare function getProjectBuildDetailUrl(projectName: string, buildId: number, accountId: number): string;
4
7
  export declare function getProjectDeployDetailUrl(projectName: string, deployId: number, accountId: number): string;
8
+ export declare function getLocalDevUiUrl(accountId: number): string;