@hubspot/cli 7.5.3-experimental.0 → 7.5.3

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 +179 -88
  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 +215 -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
@@ -1,377 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const path_1 = __importDefault(require("path"));
7
- const chokidar_1 = __importDefault(require("chokidar"));
8
- const chalk_1 = __importDefault(require("chalk"));
9
- const logger_1 = require("@hubspot/local-dev-lib/logger");
10
- const localDevAuth_1 = require("@hubspot/local-dev-lib/api/localDevAuth");
11
- const appsDev_1 = require("@hubspot/local-dev-lib/api/appsDev");
12
- const config_1 = require("@hubspot/local-dev-lib/config");
13
- const project_parsing_lib_1 = require("@hubspot/project-parsing-lib");
14
- const constants_1 = require("./constants");
15
- const SpinniesManager_1 = __importDefault(require("./ui/SpinniesManager"));
16
- const DevServerManagerV2_1 = __importDefault(require("./DevServerManagerV2"));
17
- const exitCodes_1 = require("./enums/exitCodes");
18
- const urls_1 = require("./projects/urls");
19
- const structure_1 = require("./projects/structure");
20
- const ui_1 = require("./ui");
21
- const index_1 = require("./errorHandlers/index");
22
- const installPublicAppPrompt_1 = require("./prompts/installPublicAppPrompt");
23
- const promptUtils_1 = require("./prompts/promptUtils");
24
- const lang_1 = require("./lang");
25
- const process_1 = require("./process");
26
- const WATCH_EVENTS = {
27
- add: 'add',
28
- change: 'change',
29
- unlink: 'unlink',
30
- unlinkDir: 'unlinkDir',
31
- };
32
- const i18nKey = 'lib.LocalDevManager';
33
- class LocalDevManagerV2 {
34
- targetProjectAccountId;
35
- targetTestingAccountId;
36
- projectConfig;
37
- projectDir;
38
- projectId;
39
- debug;
40
- deployedBuild;
41
- isGithubLinked;
42
- watcher;
43
- uploadWarnings;
44
- projectNodes;
45
- activeApp;
46
- activePublicAppData;
47
- env;
48
- publicAppActiveInstalls;
49
- projectSourceDir;
50
- mostRecentUploadWarning;
51
- constructor(options) {
52
- this.targetProjectAccountId = options.targetProjectAccountId;
53
- this.targetTestingAccountId = options.targetTestingAccountId;
54
- this.projectConfig = options.projectConfig;
55
- this.projectDir = options.projectDir;
56
- this.projectId = options.projectId;
57
- this.debug = options.debug || false;
58
- this.deployedBuild = options.deployedBuild;
59
- this.isGithubLinked = options.isGithubLinked;
60
- this.watcher = null;
61
- this.uploadWarnings = {};
62
- this.projectNodes = options.projectNodes;
63
- this.activeApp = null;
64
- this.activePublicAppData = null;
65
- this.env = options.env;
66
- this.publicAppActiveInstalls = null;
67
- this.mostRecentUploadWarning = null;
68
- this.projectSourceDir = path_1.default.join(this.projectDir, this.projectConfig.srcDir);
69
- if (!this.targetProjectAccountId ||
70
- !this.projectConfig ||
71
- !this.projectDir) {
72
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.failedToInitialize`));
73
- process.exit(exitCodes_1.EXIT_CODES.ERROR);
74
- }
75
- }
76
- async setActiveApp(appUid) {
77
- if (!appUid) {
78
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.missingUid`, {
79
- devCommand: (0, ui_1.uiCommandReference)('hs project dev'),
80
- }));
81
- process.exit(exitCodes_1.EXIT_CODES.ERROR);
82
- }
83
- const app = Object.values(this.projectNodes).find(component => component.uid === appUid) || null;
84
- if (app && (0, structure_1.isAppIRNode)(app)) {
85
- this.activeApp = app;
86
- if (app.config.distribution === constants_1.APP_DISTRIBUTION_TYPES.MARKETPLACE) {
87
- try {
88
- await this.setActivePublicAppData();
89
- await this.checkActivePublicAppInstalls();
90
- await this.checkPublicAppInstallation();
91
- }
92
- catch (e) {
93
- (0, index_1.logError)(e);
94
- }
95
- }
96
- }
97
- return;
98
- }
99
- async setActivePublicAppData() {
100
- const { data: { results: portalPublicApps }, } = await (0, appsDev_1.fetchPublicAppsForPortal)(this.targetProjectAccountId);
101
- const activePublicAppData = portalPublicApps.find(({ sourceId }) => sourceId === this.activeApp?.uid);
102
- if (!activePublicAppData) {
103
- return;
104
- }
105
- const { data: { uniquePortalInstallCount }, } = await (0, appsDev_1.fetchPublicAppProductionInstallCounts)(activePublicAppData.id, this.targetProjectAccountId);
106
- this.activePublicAppData = activePublicAppData;
107
- this.publicAppActiveInstalls = uniquePortalInstallCount;
108
- }
109
- async checkActivePublicAppInstalls() {
110
- if (!this.activePublicAppData ||
111
- !this.publicAppActiveInstalls ||
112
- this.publicAppActiveInstalls < 1) {
113
- return;
114
- }
115
- (0, ui_1.uiLine)();
116
- logger_1.logger.warn((0, lang_1.i18n)(`${i18nKey}.activeInstallWarning.installCount`, {
117
- appName: this.activePublicAppData.name,
118
- installCount: this.publicAppActiveInstalls,
119
- accountText: this.publicAppActiveInstalls === 1 ? 'account' : 'accounts',
120
- }));
121
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.activeInstallWarning.explanation`));
122
- (0, ui_1.uiLine)();
123
- const proceed = await (0, promptUtils_1.confirmPrompt)((0, lang_1.i18n)(`${i18nKey}.activeInstallWarning.confirmationPrompt`), { defaultAnswer: false });
124
- if (!proceed) {
125
- process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
126
- }
127
- }
128
- async start() {
129
- SpinniesManager_1.default.stopAll();
130
- SpinniesManager_1.default.init();
131
- // Local dev currently relies on the existence of a deployed build in the target account
132
- if (!this.deployedBuild) {
133
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.noDeployedBuild`, {
134
- projectName: this.projectConfig.name,
135
- accountIdentifier: (0, ui_1.uiAccountDescription)(this.targetProjectAccountId),
136
- uploadCommand: this.getUploadCommand(),
137
- }));
138
- logger_1.logger.log();
139
- process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
140
- }
141
- const setupSucceeded = await this.devServerSetup();
142
- if (!setupSucceeded) {
143
- process.exit(exitCodes_1.EXIT_CODES.ERROR);
144
- }
145
- else if (!this.debug) {
146
- console.clear();
147
- }
148
- (0, ui_1.uiBetaTag)((0, lang_1.i18n)(`${i18nKey}.betaMessage`));
149
- logger_1.logger.log((0, ui_1.uiLink)((0, lang_1.i18n)(`${i18nKey}.learnMoreLocalDevServer`), 'https://developers.hubspot.com/docs/platform/project-cli-commands#start-a-local-development-server'));
150
- logger_1.logger.log();
151
- logger_1.logger.log(chalk_1.default.hex(ui_1.UI_COLORS.SORBET)((0, lang_1.i18n)(`${i18nKey}.running`, {
152
- accountIdentifier: (0, ui_1.uiAccountDescription)(this.targetProjectAccountId),
153
- projectName: this.projectConfig.name,
154
- })));
155
- logger_1.logger.log((0, ui_1.uiLink)((0, lang_1.i18n)(`${i18nKey}.viewProjectLink`), (0, urls_1.getProjectDetailUrl)(this.projectConfig.name, this.targetProjectAccountId) || ''));
156
- logger_1.logger.log();
157
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.quitHelper`));
158
- (0, ui_1.uiLine)();
159
- logger_1.logger.log();
160
- await this.devServerStart();
161
- // Initialize project file watcher to detect configuration file changes
162
- this.startWatching();
163
- this.updateKeypressListeners();
164
- this.monitorConsoleOutput();
165
- // Verify that there are no mismatches between components in the local project
166
- // and components in the deployed build of the project.
167
- this.compareLocalProjectToDeployed();
168
- }
169
- async stop(showProgress = true) {
170
- if (showProgress) {
171
- SpinniesManager_1.default.add('cleanupMessage', {
172
- text: (0, lang_1.i18n)(`${i18nKey}.exitingStart`),
173
- });
174
- }
175
- await this.stopWatching();
176
- const cleanupSucceeded = await this.devServerCleanup();
177
- if (!cleanupSucceeded) {
178
- if (showProgress) {
179
- SpinniesManager_1.default.fail('cleanupMessage', {
180
- text: (0, lang_1.i18n)(`${i18nKey}.exitingFail`),
181
- });
182
- }
183
- process.exit(exitCodes_1.EXIT_CODES.ERROR);
184
- }
185
- if (showProgress) {
186
- SpinniesManager_1.default.succeed('cleanupMessage', {
187
- text: (0, lang_1.i18n)(`${i18nKey}.exitingSucceed`),
188
- });
189
- }
190
- process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
191
- }
192
- async checkPublicAppInstallation() {
193
- if (!this.activeApp || !this.activePublicAppData) {
194
- return;
195
- }
196
- const { data: { isInstalledWithScopeGroups, previouslyAuthorizedScopeGroups }, } = await (0, localDevAuth_1.fetchAppInstallationData)(this.targetTestingAccountId, this.projectId, this.activeApp.uid, this.activeApp.config.auth.requiredScopes, this.activeApp.config.auth.optionalScopes);
197
- const isReinstall = previouslyAuthorizedScopeGroups.length > 0;
198
- if (!isInstalledWithScopeGroups) {
199
- await (0, installPublicAppPrompt_1.installPublicAppPrompt)(this.env, this.targetTestingAccountId, this.activePublicAppData.clientId, this.activeApp.config.auth.requiredScopes, this.activeApp.config.auth.redirectUrls, isReinstall);
200
- }
201
- }
202
- updateKeypressListeners() {
203
- (0, process_1.handleKeypress)(async (key) => {
204
- if ((key.ctrl && key.name === 'c') || key.name === 'q') {
205
- this.stop();
206
- }
207
- });
208
- }
209
- getUploadCommand() {
210
- const currentDefaultAccount = (0, config_1.getConfigDefaultAccount)() || undefined;
211
- return this.targetProjectAccountId !== (0, config_1.getAccountId)(currentDefaultAccount)
212
- ? (0, ui_1.uiCommandReference)(`hs project upload --account=${this.targetProjectAccountId}`)
213
- : (0, ui_1.uiCommandReference)('hs project upload');
214
- }
215
- logUploadWarning(reason) {
216
- let warning = reason;
217
- if (!warning) {
218
- warning =
219
- this.publicAppActiveInstalls && this.publicAppActiveInstalls > 0
220
- ? (0, lang_1.i18n)(`${i18nKey}.uploadWarning.defaultMarketplaceAppWarning`, {
221
- installCount: this.publicAppActiveInstalls,
222
- accountText: this.publicAppActiveInstalls === 1 ? 'account' : 'accounts',
223
- })
224
- : (0, lang_1.i18n)(`${i18nKey}.uploadWarning.defaultWarning`);
225
- }
226
- // Avoid logging the warning to the console if it is currently the most
227
- // recently logged warning. We do not want to spam the console with the same message.
228
- if (!this.uploadWarnings[warning]) {
229
- logger_1.logger.log();
230
- logger_1.logger.warn((0, lang_1.i18n)(`${i18nKey}.uploadWarning.header`, { warning }));
231
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.uploadWarning.stopDev`, {
232
- command: (0, ui_1.uiCommandReference)('hs project dev'),
233
- }));
234
- if (this.isGithubLinked) {
235
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.uploadWarning.pushToGithub`));
236
- }
237
- else {
238
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.uploadWarning.runUpload`, {
239
- command: this.getUploadCommand(),
240
- }));
241
- }
242
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.uploadWarning.restartDev`, {
243
- command: (0, ui_1.uiCommandReference)('hs project dev'),
244
- }));
245
- this.mostRecentUploadWarning = warning;
246
- this.uploadWarnings[warning] = true;
247
- }
248
- }
249
- monitorConsoleOutput() {
250
- const originalStdoutWrite = process.stdout.write.bind(process.stdout);
251
- function customStdoutWrite(chunk, encoding, callback) {
252
- // Reset the most recently logged warning
253
- if (this.mostRecentUploadWarning &&
254
- this.uploadWarnings[this.mostRecentUploadWarning]) {
255
- delete this.uploadWarnings[this.mostRecentUploadWarning];
256
- }
257
- if (typeof encoding === 'function') {
258
- return originalStdoutWrite(chunk, callback);
259
- }
260
- return originalStdoutWrite(chunk, encoding, callback);
261
- }
262
- customStdoutWrite.bind(this);
263
- process.stdout.write = customStdoutWrite;
264
- }
265
- compareLocalProjectToDeployed() {
266
- const deployedComponentNames = this.deployedBuild.subbuildStatuses.map(subbuildStatus => subbuildStatus.buildName);
267
- const missingProjectNodes = [];
268
- Object.values(this.projectNodes).forEach(node => {
269
- if (!deployedComponentNames.includes(node.uid)) {
270
- const userFriendlyName = (0, project_parsing_lib_1.mapToUserFriendlyName)(node.componentType);
271
- const label = userFriendlyName ? `[${userFriendlyName}] ` : '';
272
- missingProjectNodes.push(`${label}${node.uid}`);
273
- }
274
- });
275
- if (missingProjectNodes.length) {
276
- this.logUploadWarning((0, lang_1.i18n)(`${i18nKey}.uploadWarning.missingComponents`, {
277
- missingComponents: missingProjectNodes.join(', '),
278
- }));
279
- }
280
- }
281
- startWatching() {
282
- this.watcher = chokidar_1.default.watch(this.projectDir, {
283
- ignoreInitial: true,
284
- });
285
- const configPaths = Object.values(this.projectNodes).map(component => component.localDev.componentConfigPath);
286
- const projectConfigPath = path_1.default.join(this.projectDir, constants_1.PROJECT_CONFIG_FILE);
287
- configPaths.push(projectConfigPath);
288
- this.watcher.on('add', filePath => {
289
- this.handleWatchEvent(filePath, WATCH_EVENTS.add, configPaths);
290
- });
291
- this.watcher.on('change', filePath => {
292
- this.handleWatchEvent(filePath, WATCH_EVENTS.change, configPaths);
293
- });
294
- this.watcher.on('unlink', filePath => {
295
- this.handleWatchEvent(filePath, WATCH_EVENTS.unlink, configPaths);
296
- });
297
- this.watcher.on('unlinkDir', filePath => {
298
- this.handleWatchEvent(filePath, WATCH_EVENTS.unlinkDir, configPaths);
299
- });
300
- }
301
- async stopWatching() {
302
- await this.watcher?.close();
303
- }
304
- handleWatchEvent(filePath, event, configPaths) {
305
- if (configPaths.includes(filePath)) {
306
- this.logUploadWarning();
307
- }
308
- else {
309
- this.devServerFileChange(filePath, event);
310
- }
311
- }
312
- async devServerSetup() {
313
- try {
314
- await DevServerManagerV2_1.default.setup({
315
- projectNodes: this.projectNodes,
316
- accountId: this.targetTestingAccountId,
317
- setActiveApp: this.setActiveApp.bind(this),
318
- });
319
- return true;
320
- }
321
- catch (e) {
322
- if (this.debug) {
323
- logger_1.logger.error(e);
324
- }
325
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.devServer.setupError`, {
326
- message: e instanceof Error ? e.message : '',
327
- }));
328
- return false;
329
- }
330
- }
331
- async devServerStart() {
332
- try {
333
- await DevServerManagerV2_1.default.start({
334
- accountId: this.targetTestingAccountId,
335
- projectConfig: this.projectConfig,
336
- });
337
- }
338
- catch (e) {
339
- if (this.debug) {
340
- logger_1.logger.error(e);
341
- }
342
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.devServer.startError`, {
343
- message: e instanceof Error ? e.message : '',
344
- }));
345
- process.exit(exitCodes_1.EXIT_CODES.ERROR);
346
- }
347
- }
348
- devServerFileChange(filePath, event) {
349
- try {
350
- DevServerManagerV2_1.default.fileChange({ filePath, event });
351
- }
352
- catch (e) {
353
- if (this.debug) {
354
- logger_1.logger.error(e);
355
- }
356
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.devServer.fileChangeError`, {
357
- message: e instanceof Error ? e.message : '',
358
- }));
359
- }
360
- }
361
- async devServerCleanup() {
362
- try {
363
- await DevServerManagerV2_1.default.cleanup();
364
- return true;
365
- }
366
- catch (e) {
367
- if (this.debug) {
368
- logger_1.logger.error(e);
369
- }
370
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.devServer.cleanupError`, {
371
- message: e instanceof Error ? e.message : '',
372
- }));
373
- return false;
374
- }
375
- }
376
- }
377
- exports.default = LocalDevManagerV2;
@@ -1,5 +0,0 @@
1
- import { RepoPath } from '@hubspot/local-dev-lib/types/Github';
2
- import { ProjectTemplate, ComponentTemplate } from '../../types/Projects';
3
- export declare const EMPTY_PROJECT_TEMPLATE_NAME = "no-template";
4
- export declare function getProjectComponentListFromRepo(githubRef: string): Promise<ComponentTemplate[]>;
5
- export declare function getProjectTemplateListFromRepo(templateSource: RepoPath, githubRef: string): Promise<ProjectTemplate[]>;
@@ -1,21 +0,0 @@
1
- import { Project } from '@hubspot/local-dev-lib/types/Project';
2
- import { ProjectConfig } from '../../types/Projects';
3
- export declare function writeProjectConfig(configPath: string, config: ProjectConfig): boolean;
4
- export declare function getIsInProject(dir?: string): boolean;
5
- export interface LoadedProjectConfig {
6
- projectDir: string | null;
7
- projectConfig: ProjectConfig | null;
8
- }
9
- export declare function getProjectConfig(dir?: string): Promise<LoadedProjectConfig>;
10
- export declare function validateProjectConfig(projectConfig: ProjectConfig | null, projectDir: string | null): void;
11
- export declare function ensureProjectExists(accountId: number, projectName: string, { forceCreate, allowCreate, noLogs, withPolling, uploadCommand, }?: {
12
- forceCreate?: boolean | undefined;
13
- allowCreate?: boolean | undefined;
14
- noLogs?: boolean | undefined;
15
- withPolling?: boolean | undefined;
16
- uploadCommand?: boolean | undefined;
17
- }): Promise<{
18
- projectExists: boolean;
19
- project?: Project;
20
- }>;
21
- export declare function logFeedbackMessage(buildId: number): void;
@@ -1,194 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.writeProjectConfig = writeProjectConfig;
7
- exports.getIsInProject = getIsInProject;
8
- exports.getProjectConfig = getProjectConfig;
9
- exports.validateProjectConfig = validateProjectConfig;
10
- exports.ensureProjectExists = ensureProjectExists;
11
- exports.logFeedbackMessage = logFeedbackMessage;
12
- const fs_extra_1 = __importDefault(require("fs-extra"));
13
- const path_1 = __importDefault(require("path"));
14
- const findup_sync_1 = __importDefault(require("findup-sync"));
15
- const logger_1 = require("@hubspot/local-dev-lib/logger");
16
- const projects_1 = require("@hubspot/local-dev-lib/api/projects");
17
- const index_1 = require("@hubspot/local-dev-lib/errors/index");
18
- const path_2 = require("@hubspot/local-dev-lib/path");
19
- const constants_1 = require("../constants");
20
- const promptUtils_1 = require("../prompts/promptUtils");
21
- const exitCodes_1 = require("../enums/exitCodes");
22
- const ui_1 = require("../ui");
23
- const lang_1 = require("../lang");
24
- const SpinniesManager_1 = __importDefault(require("../ui/SpinniesManager"));
25
- const index_2 = require("../errorHandlers/index");
26
- const i18nKey = 'lib.projects';
27
- function writeProjectConfig(configPath, config) {
28
- try {
29
- fs_extra_1.default.ensureFileSync(configPath);
30
- fs_extra_1.default.writeFileSync(configPath, JSON.stringify(config, null, 2));
31
- logger_1.logger.debug(`Wrote project config at ${configPath}`);
32
- }
33
- catch (e) {
34
- logger_1.logger.debug(e);
35
- return false;
36
- }
37
- return true;
38
- }
39
- function getIsInProject(dir) {
40
- const configPath = getProjectConfigPath(dir);
41
- return !!configPath;
42
- }
43
- function getProjectConfigPath(dir) {
44
- const projectDir = dir ? (0, path_2.getAbsoluteFilePath)(dir) : (0, path_2.getCwd)();
45
- const configPath = (0, findup_sync_1.default)(constants_1.PROJECT_CONFIG_FILE, {
46
- cwd: projectDir,
47
- nocase: true,
48
- });
49
- return configPath;
50
- }
51
- async function getProjectConfig(dir) {
52
- const configPath = getProjectConfigPath(dir);
53
- if (!configPath) {
54
- return { projectConfig: null, projectDir: null };
55
- }
56
- try {
57
- const config = fs_extra_1.default.readFileSync(configPath);
58
- const projectConfig = JSON.parse(config.toString());
59
- return {
60
- projectDir: path_1.default.dirname(configPath),
61
- projectConfig,
62
- };
63
- }
64
- catch (e) {
65
- logger_1.logger.error('Could not read from project config');
66
- return { projectConfig: null, projectDir: null };
67
- }
68
- }
69
- function validateProjectConfig(projectConfig, projectDir) {
70
- if (!projectConfig || !projectDir) {
71
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.validateProjectConfig.configNotFound`, {
72
- createCommand: (0, ui_1.uiCommandReference)('hs project create'),
73
- }));
74
- return process.exit(exitCodes_1.EXIT_CODES.ERROR);
75
- }
76
- if (!projectConfig.name || !projectConfig.srcDir) {
77
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.validateProjectConfig.configMissingFields`));
78
- return process.exit(exitCodes_1.EXIT_CODES.ERROR);
79
- }
80
- const resolvedPath = path_1.default.resolve(projectDir, projectConfig.srcDir);
81
- if (!resolvedPath.startsWith(projectDir)) {
82
- const projectConfigFile = path_1.default.relative('.', path_1.default.join(projectDir, constants_1.PROJECT_CONFIG_FILE));
83
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.validateProjectConfig.srcOutsideProjectDir`, {
84
- srcDir: projectConfig.srcDir,
85
- projectConfig: projectConfigFile,
86
- }));
87
- return process.exit(exitCodes_1.EXIT_CODES.ERROR);
88
- }
89
- if (!fs_extra_1.default.existsSync(resolvedPath)) {
90
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.validateProjectConfig.srcDirNotFound`, {
91
- srcDir: projectConfig.srcDir,
92
- projectDir: projectDir,
93
- }));
94
- return process.exit(exitCodes_1.EXIT_CODES.ERROR);
95
- }
96
- }
97
- async function pollFetchProject(accountId, projectName) {
98
- // Temporary solution for gating slowness. Retry on 403 statusCode
99
- return new Promise((resolve, reject) => {
100
- let pollCount = 0;
101
- SpinniesManager_1.default.init();
102
- SpinniesManager_1.default.add('pollFetchProject', {
103
- text: (0, lang_1.i18n)(`${i18nKey}.pollFetchProject.checkingProject`, {
104
- accountIdentifier: (0, ui_1.uiAccountDescription)(accountId),
105
- }),
106
- });
107
- const pollInterval = setInterval(async () => {
108
- try {
109
- const response = await (0, projects_1.fetchProject)(accountId, projectName);
110
- if (response && response.data) {
111
- SpinniesManager_1.default.remove('pollFetchProject');
112
- clearInterval(pollInterval);
113
- resolve(response);
114
- }
115
- }
116
- catch (err) {
117
- if ((0, index_1.isSpecifiedError)(err, {
118
- statusCode: 403,
119
- category: 'GATED',
120
- subCategory: 'BuildPipelineErrorType.PORTAL_GATED',
121
- }) &&
122
- pollCount < 15) {
123
- pollCount += 1;
124
- }
125
- else {
126
- SpinniesManager_1.default.remove('pollFetchProject');
127
- clearInterval(pollInterval);
128
- reject(err);
129
- }
130
- }
131
- }, constants_1.DEFAULT_POLLING_DELAY);
132
- });
133
- }
134
- async function ensureProjectExists(accountId, projectName, { forceCreate = false, allowCreate = true, noLogs = false, withPolling = false, uploadCommand = false, } = {}) {
135
- const accountIdentifier = (0, ui_1.uiAccountDescription)(accountId);
136
- try {
137
- const { data: project } = withPolling
138
- ? await pollFetchProject(accountId, projectName)
139
- : await (0, projects_1.fetchProject)(accountId, projectName);
140
- return { projectExists: !!project, project };
141
- }
142
- catch (err) {
143
- if ((0, index_1.isSpecifiedError)(err, { statusCode: 404 })) {
144
- let shouldCreateProject = forceCreate;
145
- if (allowCreate && !shouldCreateProject) {
146
- const promptKey = uploadCommand ? 'createPromptUpload' : 'createPrompt';
147
- const promptResult = await (0, promptUtils_1.promptUser)([
148
- {
149
- name: 'shouldCreateProject',
150
- message: (0, lang_1.i18n)(`${i18nKey}.ensureProjectExists.${promptKey}`, {
151
- projectName,
152
- accountIdentifier,
153
- }),
154
- type: 'confirm',
155
- },
156
- ]);
157
- shouldCreateProject = promptResult.shouldCreateProject;
158
- }
159
- if (shouldCreateProject) {
160
- try {
161
- const { data: project } = await (0, projects_1.createProject)(accountId, projectName);
162
- logger_1.logger.success((0, lang_1.i18n)(`${i18nKey}.ensureProjectExists.createSuccess`, {
163
- projectName,
164
- accountIdentifier,
165
- }));
166
- return { projectExists: true, project };
167
- }
168
- catch (err) {
169
- (0, index_2.logError)(err, new index_2.ApiErrorContext({ accountId }));
170
- return { projectExists: false };
171
- }
172
- }
173
- else {
174
- if (!noLogs) {
175
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.ensureProjectExists.notFound`, {
176
- projectName,
177
- accountIdentifier,
178
- }));
179
- }
180
- return { projectExists: false };
181
- }
182
- }
183
- (0, index_2.logError)(err, new index_2.ApiErrorContext({ accountId }));
184
- process.exit(exitCodes_1.EXIT_CODES.ERROR);
185
- }
186
- }
187
- function logFeedbackMessage(buildId) {
188
- if (buildId > 0 && buildId % constants_1.FEEDBACK_INTERVAL === 0) {
189
- (0, ui_1.uiLine)();
190
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.logFeedbackMessage.feedbackHeader`));
191
- (0, ui_1.uiLine)();
192
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.logFeedbackMessage.feedbackMessage`));
193
- }
194
- }
@@ -1 +0,0 @@
1
- export declare function installPublicAppPrompt(env: string, targetAccountId: number, clientId: string, scopes: string[], redirectUrls: string[], isReinstall?: boolean): Promise<void>;
@@ -1,40 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.installPublicAppPrompt = installPublicAppPrompt;
7
- const open_1 = __importDefault(require("open"));
8
- const urls_1 = require("@hubspot/local-dev-lib/urls");
9
- const logger_1 = require("@hubspot/local-dev-lib/logger");
10
- const promptUtils_1 = require("./promptUtils");
11
- const lang_1 = require("../lang");
12
- const exitCodes_1 = require("../enums/exitCodes");
13
- const i18nKey = 'lib.prompts.installPublicAppPrompt';
14
- async function installPublicAppPrompt(env, targetAccountId, clientId, scopes, redirectUrls, isReinstall = false) {
15
- logger_1.logger.log('');
16
- if (isReinstall) {
17
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.reinstallExplanation`));
18
- }
19
- else {
20
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.explanation`));
21
- }
22
- const { shouldOpenBrowser } = await (0, promptUtils_1.promptUser)({
23
- name: 'shouldOpenBrowser',
24
- type: 'confirm',
25
- message: (0, lang_1.i18n)(isReinstall ? `${i18nKey}.reinstallPrompt` : `${i18nKey}.prompt`),
26
- });
27
- if (!isReinstall && !shouldOpenBrowser) {
28
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.decline`));
29
- process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
30
- }
31
- else if (!shouldOpenBrowser) {
32
- return;
33
- }
34
- const websiteOrigin = (0, urls_1.getHubSpotWebsiteOrigin)(env);
35
- const url = `${websiteOrigin}/oauth/${targetAccountId}/authorize` +
36
- `?client_id=${encodeURIComponent(clientId)}` +
37
- `&scope=${encodeURIComponent(scopes.join(' '))}` +
38
- `&redirect_uri=${encodeURIComponent(redirectUrls[0])}`;
39
- (0, open_1.default)(url);
40
- }