@hubspot/cli 8.0.11-experimental.0 → 8.0.11-experimental.2

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 (595) hide show
  1. package/api/migrate.js +3 -3
  2. package/bin/cli.js +5 -0
  3. package/commands/account/auth.js +12 -22
  4. package/commands/account/clean.js +5 -6
  5. package/commands/account/createOverride.js +7 -7
  6. package/commands/account/info.js +2 -1
  7. package/commands/account/list.js +3 -5
  8. package/commands/account/remove.js +2 -3
  9. package/commands/account/removeOverride.js +8 -10
  10. package/commands/account/rename.js +5 -6
  11. package/commands/account/use.js +8 -19
  12. package/commands/api.d.ts +10 -0
  13. package/commands/api.js +164 -0
  14. package/commands/app/migrate.js +12 -12
  15. package/commands/app/secret/add.js +6 -7
  16. package/commands/app/secret/delete.js +9 -10
  17. package/commands/app/secret/list.js +6 -7
  18. package/commands/app/secret/update.js +8 -9
  19. package/commands/auth.js +12 -12
  20. package/commands/cms/app/create.js +9 -5
  21. package/commands/cms/convertFields.js +8 -8
  22. package/commands/cms/delete.js +2 -3
  23. package/commands/cms/fetch.js +7 -7
  24. package/commands/cms/function/create.js +9 -5
  25. package/commands/cms/function/deploy.js +2 -3
  26. package/commands/cms/function/list.js +11 -7
  27. package/commands/cms/function/logs.js +17 -23
  28. package/commands/cms/function/server.js +2 -3
  29. package/commands/cms/getReactModule.js +7 -8
  30. package/commands/cms/lighthouseScore.js +25 -24
  31. package/commands/cms/lint.js +4 -5
  32. package/commands/cms/list.js +5 -6
  33. package/commands/cms/module/create.js +9 -5
  34. package/commands/cms/module/marketplace-validate.js +7 -8
  35. package/commands/cms/mv.js +2 -3
  36. package/commands/cms/template/create.js +10 -6
  37. package/commands/cms/theme/create.js +5 -5
  38. package/commands/cms/theme/generate-selectors.js +5 -4
  39. package/commands/cms/theme/marketplace-validate.js +8 -9
  40. package/commands/cms/theme/preview.js +16 -8
  41. package/commands/cms/upload.js +15 -12
  42. package/commands/cms/watch.js +5 -5
  43. package/commands/cms/webpack/create.js +5 -5
  44. package/commands/completion.js +3 -5
  45. package/commands/config/migrate.js +6 -7
  46. package/commands/config/set.js +5 -6
  47. package/commands/customObject/create.js +4 -5
  48. package/commands/customObject/createSchema.js +4 -5
  49. package/commands/customObject/deleteSchema.js +4 -5
  50. package/commands/customObject/fetchAllSchemas.js +2 -3
  51. package/commands/customObject/fetchSchema.js +2 -3
  52. package/commands/customObject/listSchemas.js +2 -3
  53. package/commands/customObject/updateSchema.js +4 -5
  54. package/commands/doctor.js +8 -8
  55. package/commands/feedback.js +6 -4
  56. package/commands/filemanager/fetch.js +5 -6
  57. package/commands/filemanager/upload.js +5 -5
  58. package/commands/getStarted.js +16 -18
  59. package/commands/hubdb/clear.js +5 -6
  60. package/commands/hubdb/create.js +4 -5
  61. package/commands/hubdb/delete.js +8 -9
  62. package/commands/hubdb/fetch.js +5 -6
  63. package/commands/hubdb/list.js +16 -14
  64. package/commands/init.js +14 -17
  65. package/commands/mcp/setup.js +5 -6
  66. package/commands/mcp/start.js +2 -3
  67. package/commands/open.js +4 -5
  68. package/commands/project/add.js +13 -8
  69. package/commands/project/create.js +20 -17
  70. package/commands/project/delete.d.ts +7 -0
  71. package/commands/project/delete.js +74 -0
  72. package/commands/project/deploy.js +39 -36
  73. package/commands/project/dev/deprecatedFlow.js +42 -15
  74. package/commands/project/dev/index.d.ts +3 -3
  75. package/commands/project/dev/index.js +29 -34
  76. package/commands/project/dev/unifiedFlow.js +37 -14
  77. package/commands/project/download.js +10 -11
  78. package/commands/project/info.js +19 -19
  79. package/commands/project/installDeps.js +9 -6
  80. package/commands/project/lint.js +11 -8
  81. package/commands/project/list.js +14 -14
  82. package/commands/project/listBuilds.js +8 -6
  83. package/commands/project/logs.js +5 -6
  84. package/commands/project/migrate.js +13 -13
  85. package/commands/project/open.js +5 -6
  86. package/commands/project/profile/add.js +12 -8
  87. package/commands/project/profile/delete.js +15 -11
  88. package/commands/project/updateDeps.js +9 -6
  89. package/commands/project/upload.js +33 -19
  90. package/commands/project/validate.js +12 -12
  91. package/commands/project/watch.js +22 -22
  92. package/commands/project.js +8 -3
  93. package/commands/sandbox/create.js +15 -15
  94. package/commands/sandbox/delete.js +13 -14
  95. package/commands/secret/addSecret.js +6 -7
  96. package/commands/secret/deleteSecret.js +5 -6
  97. package/commands/secret/listSecret.js +2 -3
  98. package/commands/secret/updateSecret.js +4 -5
  99. package/commands/testAccount/create.d.ts +1 -1
  100. package/commands/testAccount/create.js +24 -20
  101. package/commands/testAccount/createConfig.js +7 -8
  102. package/commands/testAccount/delete.js +27 -18
  103. package/commands/testAccount/importData.js +6 -7
  104. package/commands/upgrade.js +9 -10
  105. package/lang/en.d.ts +95 -7
  106. package/lang/en.js +98 -13
  107. package/lib/accountAuth.js +2 -2
  108. package/lib/app/migrate.js +7 -0
  109. package/lib/buildAccount.js +3 -3
  110. package/lib/constants.d.ts +0 -1
  111. package/lib/constants.js +0 -1
  112. package/lib/doctor/Diagnosis.js +5 -5
  113. package/lib/doctor/Doctor.js +2 -2
  114. package/lib/errorHandlers/index.js +4 -3
  115. package/lib/errorHandlers/suppressError.js +4 -0
  116. package/lib/errors/PromptExitError.d.ts +4 -2
  117. package/lib/errors/PromptExitError.js +3 -0
  118. package/lib/getStartedV2Actions.js +2 -2
  119. package/lib/hasFeature.js +1 -2
  120. package/lib/middleware/autoUpdateMiddleware.js +6 -3
  121. package/lib/process.d.ts +1 -1
  122. package/lib/process.js +10 -3
  123. package/lib/projects/ProjectLogsManager.js +2 -2
  124. package/lib/projects/create/index.js +2 -2
  125. package/lib/projects/create/legacy.js +2 -2
  126. package/lib/projects/create/v2.js +3 -4
  127. package/lib/projects/delete.d.ts +13 -0
  128. package/lib/projects/delete.js +193 -0
  129. package/lib/projects/deploy.d.ts +1 -1
  130. package/lib/projects/deploy.js +2 -2
  131. package/lib/projects/localDev/AppDevModeInterface.js +11 -11
  132. package/lib/projects/localDev/DevServerManager_DEPRECATED.d.ts +3 -1
  133. package/lib/projects/localDev/DevServerManager_DEPRECATED.js +2 -2
  134. package/lib/projects/localDev/DevSessionManager.d.ts +6 -3
  135. package/lib/projects/localDev/DevSessionManager.js +31 -19
  136. package/lib/projects/localDev/LocalDevManager_DEPRECATED.d.ts +3 -0
  137. package/lib/projects/localDev/LocalDevManager_DEPRECATED.js +16 -12
  138. package/lib/projects/localDev/LocalDevProcess.js +6 -5
  139. package/lib/projects/localDev/LocalDevState.d.ts +3 -2
  140. package/lib/projects/localDev/LocalDevState.js +3 -1
  141. package/lib/projects/localDev/helpers/account.d.ts +4 -3
  142. package/lib/projects/localDev/helpers/account.js +16 -19
  143. package/lib/projects/localDev/helpers/process.d.ts +1 -1
  144. package/lib/projects/localDev/helpers/process.js +4 -10
  145. package/lib/projects/localDev/helpers/project.d.ts +4 -3
  146. package/lib/projects/localDev/helpers/project.js +31 -15
  147. package/lib/projects/projectInfo.d.ts +3 -20
  148. package/lib/projects/projectInfo.js +32 -54
  149. package/lib/projects/projectProfiles.d.ts +1 -2
  150. package/lib/projects/projectProfiles.js +5 -17
  151. package/lib/projects/upload.js +22 -3
  152. package/lib/projects/workspaces.d.ts +42 -0
  153. package/lib/projects/workspaces.js +350 -0
  154. package/lib/prompts/createApiSamplePrompt.js +4 -0
  155. package/lib/prompts/projectProfilePrompt.d.ts +2 -0
  156. package/lib/prompts/projectProfilePrompt.js +46 -0
  157. package/lib/prompts/promptUtils.js +3 -2
  158. package/lib/prompts/selectHubDBTablePrompt.js +2 -2
  159. package/lib/prompts/selectPublicAppForMigrationPrompt.js +2 -2
  160. package/lib/theme/cmsDevServerProcess.d.ts +2 -0
  161. package/lib/theme/cmsDevServerProcess.js +8 -7
  162. package/lib/ui/SpinniesManager.d.ts +1 -0
  163. package/lib/ui/SpinniesManager.js +20 -6
  164. package/lib/ui/spinniesUtils.d.ts +0 -1
  165. package/lib/ui/spinniesUtils.js +6 -16
  166. package/lib/usageTracking.d.ts +3 -4
  167. package/lib/yargs/makeYargsBuilder.d.ts +13 -0
  168. package/lib/yargs/makeYargsBuilder.js +33 -0
  169. package/lib/yargs/makeYargsHandlerWithUsageTracking.d.ts +3 -0
  170. package/lib/yargs/makeYargsHandlerWithUsageTracking.js +95 -0
  171. package/lib/yargs/strictEnforceBoolean.d.ts +1 -0
  172. package/lib/yargs/strictEnforceBoolean.js +13 -0
  173. package/lib/yargsUtils.d.ts +3 -16
  174. package/lib/yargsUtils.js +3 -48
  175. package/mcp-server/Tool.d.ts +15 -0
  176. package/mcp-server/Tool.js +53 -0
  177. package/mcp-server/server.js +5 -3
  178. package/mcp-server/tools/cms/HsCreateFunctionTool.d.ts +4 -2
  179. package/mcp-server/tools/cms/HsCreateFunctionTool.js +8 -6
  180. package/mcp-server/tools/cms/HsCreateModuleTool.d.ts +4 -2
  181. package/mcp-server/tools/cms/HsCreateModuleTool.js +8 -6
  182. package/mcp-server/tools/cms/HsCreateTemplateTool.d.ts +5 -3
  183. package/mcp-server/tools/cms/HsCreateTemplateTool.js +8 -6
  184. package/mcp-server/tools/cms/HsFunctionLogsTool.d.ts +4 -2
  185. package/mcp-server/tools/cms/HsFunctionLogsTool.js +8 -6
  186. package/mcp-server/tools/cms/HsListFunctionsTool.d.ts +4 -2
  187. package/mcp-server/tools/cms/HsListFunctionsTool.js +8 -6
  188. package/mcp-server/tools/cms/HsListTool.d.ts +4 -2
  189. package/mcp-server/tools/cms/HsListTool.js +8 -6
  190. package/mcp-server/tools/index.d.ts +3 -2
  191. package/mcp-server/tools/index.js +22 -22
  192. package/mcp-server/tools/project/AddFeatureToProjectTool.d.ts +6 -4
  193. package/mcp-server/tools/project/AddFeatureToProjectTool.js +8 -6
  194. package/mcp-server/tools/project/CreateProjectTool.d.ts +6 -4
  195. package/mcp-server/tools/project/CreateProjectTool.js +9 -7
  196. package/mcp-server/tools/project/CreateTestAccountTool.d.ts +4 -2
  197. package/mcp-server/tools/project/CreateTestAccountTool.js +20 -8
  198. package/mcp-server/tools/project/DeployProjectTool.d.ts +4 -2
  199. package/mcp-server/tools/project/DeployProjectTool.js +4 -6
  200. package/mcp-server/tools/project/DocFetchTool.d.ts +4 -2
  201. package/mcp-server/tools/project/DocFetchTool.js +8 -6
  202. package/mcp-server/tools/project/DocsSearchTool.d.ts +9 -3
  203. package/mcp-server/tools/project/DocsSearchTool.js +32 -9
  204. package/mcp-server/tools/project/GetApiUsagePatternsByAppIdTool.d.ts +4 -2
  205. package/mcp-server/tools/project/GetApiUsagePatternsByAppIdTool.js +8 -6
  206. package/mcp-server/tools/project/GetApplicationInfoTool.d.ts +4 -2
  207. package/mcp-server/tools/project/GetApplicationInfoTool.js +8 -6
  208. package/mcp-server/tools/project/GetBuildLogsTool.d.ts +4 -2
  209. package/mcp-server/tools/project/GetBuildLogsTool.js +8 -6
  210. package/mcp-server/tools/project/GetBuildStatusTool.d.ts +4 -2
  211. package/mcp-server/tools/project/GetBuildStatusTool.js +8 -6
  212. package/mcp-server/tools/project/GetConfigValuesTool.d.ts +4 -2
  213. package/mcp-server/tools/project/GetConfigValuesTool.js +12 -7
  214. package/mcp-server/tools/project/GuidedWalkthroughTool.d.ts +4 -2
  215. package/mcp-server/tools/project/GuidedWalkthroughTool.js +4 -6
  216. package/mcp-server/tools/project/UploadProjectTools.d.ts +4 -2
  217. package/mcp-server/tools/project/UploadProjectTools.js +9 -7
  218. package/mcp-server/tools/project/ValidateProjectTool.d.ts +4 -2
  219. package/mcp-server/tools/project/ValidateProjectTool.js +8 -6
  220. package/mcp-server/tools/project/constants.d.ts +2 -2
  221. package/mcp-server/types.d.ts +0 -7
  222. package/mcp-server/types.js +1 -13
  223. package/mcp-server/utils/logger.d.ts +10 -0
  224. package/mcp-server/utils/logger.js +29 -0
  225. package/mcp-server/utils/toolUsageTracking.js +0 -2
  226. package/package.json +12 -7
  227. package/types/LocalDev.d.ts +5 -0
  228. package/types/Projects.d.ts +19 -0
  229. package/types/Yargs.d.ts +18 -1
  230. package/api/__tests__/migrate.test.d.ts +0 -1
  231. package/api/__tests__/migrate.test.js +0 -199
  232. package/commands/__tests__/account.test.d.ts +0 -1
  233. package/commands/__tests__/account.test.js +0 -69
  234. package/commands/__tests__/auth.test.d.ts +0 -1
  235. package/commands/__tests__/auth.test.js +0 -43
  236. package/commands/__tests__/cms.test.d.ts +0 -1
  237. package/commands/__tests__/cms.test.js +0 -87
  238. package/commands/__tests__/config.test.d.ts +0 -1
  239. package/commands/__tests__/config.test.js +0 -44
  240. package/commands/__tests__/customObject.test.d.ts +0 -1
  241. package/commands/__tests__/customObject.test.js +0 -68
  242. package/commands/__tests__/doctor.test.d.ts +0 -1
  243. package/commands/__tests__/doctor.test.js +0 -132
  244. package/commands/__tests__/feedback.test.d.ts +0 -1
  245. package/commands/__tests__/feedback.test.js +0 -24
  246. package/commands/__tests__/filemanager.test.d.ts +0 -1
  247. package/commands/__tests__/filemanager.test.js +0 -45
  248. package/commands/__tests__/getStarted.test.d.ts +0 -1
  249. package/commands/__tests__/getStarted.test.js +0 -173
  250. package/commands/__tests__/hubdb.test.d.ts +0 -1
  251. package/commands/__tests__/hubdb.test.js +0 -50
  252. package/commands/__tests__/init.test.d.ts +0 -1
  253. package/commands/__tests__/init.test.js +0 -42
  254. package/commands/__tests__/mcp.test.d.ts +0 -1
  255. package/commands/__tests__/mcp.test.js +0 -46
  256. package/commands/__tests__/open.test.d.ts +0 -1
  257. package/commands/__tests__/open.test.js +0 -58
  258. package/commands/__tests__/project.test.d.ts +0 -1
  259. package/commands/__tests__/project.test.js +0 -125
  260. package/commands/__tests__/sandbox.test.d.ts +0 -1
  261. package/commands/__tests__/sandbox.test.js +0 -44
  262. package/commands/__tests__/secret.test.d.ts +0 -1
  263. package/commands/__tests__/secret.test.js +0 -49
  264. package/commands/__tests__/testAccount.test.d.ts +0 -1
  265. package/commands/__tests__/testAccount.test.js +0 -57
  266. package/commands/__tests__/upgrade.test.d.ts +0 -1
  267. package/commands/__tests__/upgrade.test.js +0 -309
  268. package/commands/account/__tests__/auth.test.d.ts +0 -1
  269. package/commands/account/__tests__/auth.test.js +0 -206
  270. package/commands/account/__tests__/clean.test.d.ts +0 -1
  271. package/commands/account/__tests__/clean.test.js +0 -28
  272. package/commands/account/__tests__/createOverride.test.d.ts +0 -1
  273. package/commands/account/__tests__/createOverride.test.js +0 -32
  274. package/commands/account/__tests__/info.test.d.ts +0 -1
  275. package/commands/account/__tests__/info.test.js +0 -28
  276. package/commands/account/__tests__/list.test.d.ts +0 -1
  277. package/commands/account/__tests__/list.test.js +0 -153
  278. package/commands/account/__tests__/remove.test.d.ts +0 -1
  279. package/commands/account/__tests__/remove.test.js +0 -36
  280. package/commands/account/__tests__/removeOverride.d.ts +0 -1
  281. package/commands/account/__tests__/removeOverride.js +0 -25
  282. package/commands/account/__tests__/rename.test.d.ts +0 -1
  283. package/commands/account/__tests__/rename.test.js +0 -82
  284. package/commands/account/__tests__/use.test.d.ts +0 -1
  285. package/commands/account/__tests__/use.test.js +0 -170
  286. package/commands/app/__tests__/migrate.test.d.ts +0 -1
  287. package/commands/app/__tests__/migrate.test.js +0 -111
  288. package/commands/app/secret/__tests__/add.test.d.ts +0 -1
  289. package/commands/app/secret/__tests__/add.test.js +0 -140
  290. package/commands/app/secret/__tests__/delete.test.d.ts +0 -1
  291. package/commands/app/secret/__tests__/delete.test.js +0 -28
  292. package/commands/app/secret/__tests__/list.test.d.ts +0 -1
  293. package/commands/app/secret/__tests__/list.test.js +0 -25
  294. package/commands/app/secret/__tests__/update.test.d.ts +0 -1
  295. package/commands/app/secret/__tests__/update.test.js +0 -28
  296. package/commands/cms/__tests__/delete.test.d.ts +0 -1
  297. package/commands/cms/__tests__/delete.test.js +0 -39
  298. package/commands/cms/__tests__/fetch.test.d.ts +0 -1
  299. package/commands/cms/__tests__/fetch.test.js +0 -156
  300. package/commands/cms/__tests__/function.test.d.ts +0 -1
  301. package/commands/cms/__tests__/function.test.js +0 -50
  302. package/commands/cms/__tests__/lint.test.d.ts +0 -1
  303. package/commands/cms/__tests__/lint.test.js +0 -33
  304. package/commands/cms/__tests__/list.test.d.ts +0 -1
  305. package/commands/cms/__tests__/list.test.js +0 -42
  306. package/commands/cms/__tests__/module.test.d.ts +0 -1
  307. package/commands/cms/__tests__/module.test.js +0 -45
  308. package/commands/cms/__tests__/mv.test.d.ts +0 -1
  309. package/commands/cms/__tests__/mv.test.js +0 -46
  310. package/commands/cms/__tests__/theme.test.d.ts +0 -1
  311. package/commands/cms/__tests__/theme.test.js +0 -54
  312. package/commands/cms/__tests__/upload.test.d.ts +0 -1
  313. package/commands/cms/__tests__/upload.test.js +0 -312
  314. package/commands/cms/__tests__/watch.test.d.ts +0 -1
  315. package/commands/cms/__tests__/watch.test.js +0 -204
  316. package/commands/cms/function/__tests__/logs.test.d.ts +0 -1
  317. package/commands/cms/function/__tests__/logs.test.js +0 -70
  318. package/commands/cms/theme/__tests__/generate-selectors.test.d.ts +0 -1
  319. package/commands/cms/theme/__tests__/generate-selectors.test.js +0 -28
  320. package/commands/cms/theme/__tests__/marketplace-validate.test.d.ts +0 -1
  321. package/commands/cms/theme/__tests__/marketplace-validate.test.js +0 -36
  322. package/commands/cms/theme/__tests__/preview.test.d.ts +0 -1
  323. package/commands/cms/theme/__tests__/preview.test.js +0 -54
  324. package/commands/customObject/__tests__/create.test.d.ts +0 -1
  325. package/commands/customObject/__tests__/create.test.js +0 -40
  326. package/commands/customObject/__tests__/createSchema.test.d.ts +0 -1
  327. package/commands/customObject/__tests__/createSchema.test.js +0 -28
  328. package/commands/customObject/__tests__/deleteSchema.test.d.ts +0 -1
  329. package/commands/customObject/__tests__/deleteSchema.test.js +0 -42
  330. package/commands/customObject/__tests__/fetch-all-schemas.test.d.ts +0 -1
  331. package/commands/customObject/__tests__/fetch-all-schemas.test.js +0 -41
  332. package/commands/customObject/__tests__/fetchSchema.test.d.ts +0 -1
  333. package/commands/customObject/__tests__/fetchSchema.test.js +0 -45
  334. package/commands/customObject/__tests__/listSchemas.test.d.ts +0 -1
  335. package/commands/customObject/__tests__/listSchemas.test.js +0 -29
  336. package/commands/customObject/__tests__/updateSchema.test.d.ts +0 -1
  337. package/commands/customObject/__tests__/updateSchema.test.js +0 -40
  338. package/commands/filemanager/__tests__/fetch.test.d.ts +0 -1
  339. package/commands/filemanager/__tests__/fetch.test.js +0 -32
  340. package/commands/filemanager/__tests__/upload.test.d.ts +0 -1
  341. package/commands/filemanager/__tests__/upload.test.js +0 -191
  342. package/commands/hubdb/__tests__/clear.test.d.ts +0 -1
  343. package/commands/hubdb/__tests__/clear.test.js +0 -28
  344. package/commands/hubdb/__tests__/create.test.d.ts +0 -1
  345. package/commands/hubdb/__tests__/create.test.js +0 -28
  346. package/commands/hubdb/__tests__/delete.test.d.ts +0 -1
  347. package/commands/hubdb/__tests__/delete.test.js +0 -28
  348. package/commands/hubdb/__tests__/fetch.test.d.ts +0 -1
  349. package/commands/hubdb/__tests__/fetch.test.js +0 -28
  350. package/commands/hubdb/__tests__/list.test.d.ts +0 -1
  351. package/commands/hubdb/__tests__/list.test.js +0 -88
  352. package/commands/mcp/__tests__/setup.test.d.ts +0 -1
  353. package/commands/mcp/__tests__/setup.test.js +0 -26
  354. package/commands/mcp/__tests__/start.test.d.ts +0 -1
  355. package/commands/mcp/__tests__/start.test.js +0 -144
  356. package/commands/project/__tests__/add.test.d.ts +0 -1
  357. package/commands/project/__tests__/add.test.js +0 -107
  358. package/commands/project/__tests__/create.test.d.ts +0 -1
  359. package/commands/project/__tests__/create.test.js +0 -97
  360. package/commands/project/__tests__/deploy.test.d.ts +0 -1
  361. package/commands/project/__tests__/deploy.test.js +0 -307
  362. package/commands/project/__tests__/dev.test.d.ts +0 -1
  363. package/commands/project/__tests__/dev.test.js +0 -273
  364. package/commands/project/__tests__/devUnifiedFlow.test.d.ts +0 -1
  365. package/commands/project/__tests__/devUnifiedFlow.test.js +0 -434
  366. package/commands/project/__tests__/download.test.d.ts +0 -1
  367. package/commands/project/__tests__/download.test.js +0 -39
  368. package/commands/project/__tests__/info.test.d.ts +0 -1
  369. package/commands/project/__tests__/info.test.js +0 -145
  370. package/commands/project/__tests__/installDeps.test.d.ts +0 -1
  371. package/commands/project/__tests__/installDeps.test.js +0 -140
  372. package/commands/project/__tests__/lint.test.d.ts +0 -1
  373. package/commands/project/__tests__/lint.test.js +0 -704
  374. package/commands/project/__tests__/list.test.d.ts +0 -1
  375. package/commands/project/__tests__/list.test.js +0 -31
  376. package/commands/project/__tests__/listBuilds.test.d.ts +0 -1
  377. package/commands/project/__tests__/listBuilds.test.js +0 -38
  378. package/commands/project/__tests__/logs.test.d.ts +0 -1
  379. package/commands/project/__tests__/logs.test.js +0 -202
  380. package/commands/project/__tests__/migrate.test.d.ts +0 -1
  381. package/commands/project/__tests__/migrate.test.js +0 -106
  382. package/commands/project/__tests__/open.test.d.ts +0 -1
  383. package/commands/project/__tests__/open.test.js +0 -39
  384. package/commands/project/__tests__/profile.test.d.ts +0 -1
  385. package/commands/project/__tests__/profile.test.js +0 -42
  386. package/commands/project/__tests__/updateDeps.test.d.ts +0 -1
  387. package/commands/project/__tests__/updateDeps.test.js +0 -140
  388. package/commands/project/__tests__/upload.test.d.ts +0 -1
  389. package/commands/project/__tests__/upload.test.js +0 -234
  390. package/commands/project/__tests__/validate.test.d.ts +0 -1
  391. package/commands/project/__tests__/validate.test.js +0 -381
  392. package/commands/project/__tests__/watch.test.d.ts +0 -1
  393. package/commands/project/__tests__/watch.test.js +0 -35
  394. package/commands/sandbox/__tests__/create.test.d.ts +0 -1
  395. package/commands/sandbox/__tests__/create.test.js +0 -198
  396. package/commands/sandbox/__tests__/delete.test.d.ts +0 -1
  397. package/commands/sandbox/__tests__/delete.test.js +0 -31
  398. package/commands/secret/__tests__/addSecret.test.d.ts +0 -1
  399. package/commands/secret/__tests__/addSecret.test.js +0 -162
  400. package/commands/secret/__tests__/deleteSecret.test.d.ts +0 -1
  401. package/commands/secret/__tests__/deleteSecret.test.js +0 -41
  402. package/commands/secret/__tests__/listSecret.test.d.ts +0 -1
  403. package/commands/secret/__tests__/listSecret.test.js +0 -29
  404. package/commands/secret/__tests__/updateSecret.test.d.ts +0 -1
  405. package/commands/secret/__tests__/updateSecret.test.js +0 -29
  406. package/commands/testAccount/__tests__/create.test.d.ts +0 -1
  407. package/commands/testAccount/__tests__/create.test.js +0 -106
  408. package/commands/testAccount/__tests__/createConfig.test.d.ts +0 -1
  409. package/commands/testAccount/__tests__/createConfig.test.js +0 -32
  410. package/commands/testAccount/__tests__/delete.test.d.ts +0 -1
  411. package/commands/testAccount/__tests__/delete.test.js +0 -29
  412. package/commands/testAccount/__tests__/importData.test.d.ts +0 -1
  413. package/commands/testAccount/__tests__/importData.test.js +0 -92
  414. package/lib/__tests__/CLIWebSocketServer.test.d.ts +0 -1
  415. package/lib/__tests__/CLIWebSocketServer.test.js +0 -252
  416. package/lib/__tests__/accountAuth.test.d.ts +0 -1
  417. package/lib/__tests__/accountAuth.test.js +0 -258
  418. package/lib/__tests__/accountTypes.test.d.ts +0 -1
  419. package/lib/__tests__/accountTypes.test.js +0 -98
  420. package/lib/__tests__/buildAccount.test.d.ts +0 -1
  421. package/lib/__tests__/buildAccount.test.js +0 -211
  422. package/lib/__tests__/cliUpgradeUtils.test.d.ts +0 -1
  423. package/lib/__tests__/cliUpgradeUtils.test.js +0 -131
  424. package/lib/__tests__/commandSuggestion.test.d.ts +0 -1
  425. package/lib/__tests__/commandSuggestion.test.js +0 -121
  426. package/lib/__tests__/commonOpts.test.d.ts +0 -1
  427. package/lib/__tests__/commonOpts.test.js +0 -80
  428. package/lib/__tests__/dependencyManagement.test.d.ts +0 -1
  429. package/lib/__tests__/dependencyManagement.test.js +0 -1067
  430. package/lib/__tests__/developerTestAccounts.test.d.ts +0 -1
  431. package/lib/__tests__/developerTestAccounts.test.js +0 -156
  432. package/lib/__tests__/hasFeature.test.d.ts +0 -1
  433. package/lib/__tests__/hasFeature.test.js +0 -167
  434. package/lib/__tests__/http.test.d.ts +0 -1
  435. package/lib/__tests__/http.test.js +0 -40
  436. package/lib/__tests__/importData.test.d.ts +0 -1
  437. package/lib/__tests__/importData.test.js +0 -98
  438. package/lib/__tests__/npmCli.test.d.ts +0 -1
  439. package/lib/__tests__/npmCli.test.js +0 -84
  440. package/lib/__tests__/oauth.test.d.ts +0 -1
  441. package/lib/__tests__/oauth.test.js +0 -109
  442. package/lib/__tests__/parsing.test.d.ts +0 -1
  443. package/lib/__tests__/parsing.test.js +0 -34
  444. package/lib/__tests__/polling.test.d.ts +0 -1
  445. package/lib/__tests__/polling.test.js +0 -76
  446. package/lib/__tests__/process.test.d.ts +0 -1
  447. package/lib/__tests__/process.test.js +0 -89
  448. package/lib/__tests__/sandboxes.test.d.ts +0 -1
  449. package/lib/__tests__/sandboxes.test.js +0 -128
  450. package/lib/__tests__/serverlessLogs.test.d.ts +0 -1
  451. package/lib/__tests__/serverlessLogs.test.js +0 -163
  452. package/lib/__tests__/usageTracking.test.d.ts +0 -1
  453. package/lib/__tests__/usageTracking.test.js +0 -197
  454. package/lib/__tests__/validation.test.d.ts +0 -1
  455. package/lib/__tests__/validation.test.js +0 -143
  456. package/lib/__tests__/yargsUtils.test.d.ts +0 -1
  457. package/lib/__tests__/yargsUtils.test.js +0 -124
  458. package/lib/app/__tests__/migrate.test.d.ts +0 -1
  459. package/lib/app/__tests__/migrate.test.js +0 -638
  460. package/lib/doctor/__tests__/Diagnosis.test.d.ts +0 -1
  461. package/lib/doctor/__tests__/Diagnosis.test.js +0 -84
  462. package/lib/doctor/__tests__/DiagnosticInfoBuilder.test.d.ts +0 -1
  463. package/lib/doctor/__tests__/DiagnosticInfoBuilder.test.js +0 -177
  464. package/lib/doctor/__tests__/Doctor.test.d.ts +0 -1
  465. package/lib/doctor/__tests__/Doctor.test.js +0 -560
  466. package/lib/errorHandlers/__tests__/index.test.d.ts +0 -1
  467. package/lib/errorHandlers/__tests__/index.test.js +0 -278
  468. package/lib/mcp/__tests__/setup.test.d.ts +0 -1
  469. package/lib/mcp/__tests__/setup.test.js +0 -523
  470. package/lib/middleware/__tests__/commandTargetingUtils.test.d.ts +0 -1
  471. package/lib/middleware/__tests__/commandTargetingUtils.test.js +0 -99
  472. package/lib/middleware/__tests__/configMiddleware.test.d.ts +0 -1
  473. package/lib/middleware/__tests__/configMiddleware.test.js +0 -118
  474. package/lib/middleware/__tests__/gitMiddleware.test.d.ts +0 -1
  475. package/lib/middleware/__tests__/gitMiddleware.test.js +0 -43
  476. package/lib/middleware/__tests__/requestMiddleware.test.d.ts +0 -1
  477. package/lib/middleware/__tests__/requestMiddleware.test.js +0 -15
  478. package/lib/middleware/__tests__/usageTrackingMiddleware.test.d.ts +0 -1
  479. package/lib/middleware/__tests__/usageTrackingMiddleware.test.js +0 -44
  480. package/lib/middleware/__tests__/yargsChecksMiddleware.test.d.ts +0 -1
  481. package/lib/middleware/__tests__/yargsChecksMiddleware.test.js +0 -39
  482. package/lib/projects/__tests__/AppDevModeInterface.test.d.ts +0 -1
  483. package/lib/projects/__tests__/AppDevModeInterface.test.js +0 -541
  484. package/lib/projects/__tests__/DevServerManager.test.d.ts +0 -1
  485. package/lib/projects/__tests__/DevServerManager.test.js +0 -185
  486. package/lib/projects/__tests__/DevSessionManager.test.d.ts +0 -1
  487. package/lib/projects/__tests__/DevSessionManager.test.js +0 -250
  488. package/lib/projects/__tests__/LocalDevProcess.test.d.ts +0 -1
  489. package/lib/projects/__tests__/LocalDevProcess.test.js +0 -481
  490. package/lib/projects/__tests__/LocalDevWebsocketServer.test.d.ts +0 -1
  491. package/lib/projects/__tests__/LocalDevWebsocketServer.test.js +0 -231
  492. package/lib/projects/__tests__/ProjectLogsManager.test.d.ts +0 -1
  493. package/lib/projects/__tests__/ProjectLogsManager.test.js +0 -302
  494. package/lib/projects/__tests__/UIExtensionsDevModeInterface.test.d.ts +0 -1
  495. package/lib/projects/__tests__/UIExtensionsDevModeInterface.test.js +0 -160
  496. package/lib/projects/__tests__/components.test.d.ts +0 -1
  497. package/lib/projects/__tests__/components.test.js +0 -440
  498. package/lib/projects/__tests__/deploy.test.d.ts +0 -1
  499. package/lib/projects/__tests__/deploy.test.js +0 -231
  500. package/lib/projects/__tests__/localDevProjectHelpers.test.d.ts +0 -1
  501. package/lib/projects/__tests__/localDevProjectHelpers.test.js +0 -120
  502. package/lib/projects/__tests__/platformVersion.test.d.ts +0 -1
  503. package/lib/projects/__tests__/platformVersion.test.js +0 -63
  504. package/lib/projects/__tests__/pollProjectBuildAndDeploy.test.d.ts +0 -1
  505. package/lib/projects/__tests__/pollProjectBuildAndDeploy.test.js +0 -328
  506. package/lib/projects/__tests__/projectInfo.test.d.ts +0 -1
  507. package/lib/projects/__tests__/projectInfo.test.js +0 -114
  508. package/lib/projects/__tests__/projectProfiles.test.d.ts +0 -1
  509. package/lib/projects/__tests__/projectProfiles.test.js +0 -441
  510. package/lib/projects/__tests__/projects.test.d.ts +0 -1
  511. package/lib/projects/__tests__/projects.test.js +0 -58
  512. package/lib/projects/__tests__/structure.test.d.ts +0 -1
  513. package/lib/projects/__tests__/structure.test.js +0 -210
  514. package/lib/projects/__tests__/uieLinting.test.d.ts +0 -1
  515. package/lib/projects/__tests__/uieLinting.test.js +0 -631
  516. package/lib/projects/__tests__/upload.test.d.ts +0 -1
  517. package/lib/projects/__tests__/upload.test.js +0 -183
  518. package/lib/projects/add/__tests__/legacyAddComponent.test.d.ts +0 -1
  519. package/lib/projects/add/__tests__/legacyAddComponent.test.js +0 -245
  520. package/lib/projects/add/__tests__/v2AddComponent.test.d.ts +0 -1
  521. package/lib/projects/add/__tests__/v2AddComponent.test.js +0 -343
  522. package/lib/projects/create/__tests__/legacy.test.d.ts +0 -1
  523. package/lib/projects/create/__tests__/legacy.test.js +0 -72
  524. package/lib/projects/create/__tests__/v2.test.d.ts +0 -1
  525. package/lib/projects/create/__tests__/v2.test.js +0 -257
  526. package/lib/projects/platformVersion.d.ts +0 -9
  527. package/lib/projects/platformVersion.js +0 -39
  528. package/lib/prompts/__tests__/createDeveloperTestAccountConfigPrompt.test.d.ts +0 -1
  529. package/lib/prompts/__tests__/createDeveloperTestAccountConfigPrompt.test.js +0 -157
  530. package/lib/prompts/__tests__/createFunctionPrompt.test.d.ts +0 -1
  531. package/lib/prompts/__tests__/createFunctionPrompt.test.js +0 -129
  532. package/lib/prompts/__tests__/createModulePrompt.test.d.ts +0 -1
  533. package/lib/prompts/__tests__/createModulePrompt.test.js +0 -187
  534. package/lib/prompts/__tests__/createTemplatePrompt.test.d.ts +0 -1
  535. package/lib/prompts/__tests__/createTemplatePrompt.test.js +0 -102
  536. package/lib/prompts/__tests__/downloadProjectPrompt.test.d.ts +0 -1
  537. package/lib/prompts/__tests__/downloadProjectPrompt.test.js +0 -31
  538. package/lib/prompts/__tests__/projectAddPrompt.test.d.ts +0 -1
  539. package/lib/prompts/__tests__/projectAddPrompt.test.js +0 -143
  540. package/lib/prompts/__tests__/projectsLogsPrompt.test.d.ts +0 -1
  541. package/lib/prompts/__tests__/projectsLogsPrompt.test.js +0 -37
  542. package/lib/prompts/__tests__/selectProjectTemplatePrompt.test.d.ts +0 -1
  543. package/lib/prompts/__tests__/selectProjectTemplatePrompt.test.js +0 -160
  544. package/lib/theme/__tests__/migrate.test.d.ts +0 -1
  545. package/lib/theme/__tests__/migrate.test.js +0 -247
  546. package/lib/ui/__tests__/SpinniesManager.test.d.ts +0 -1
  547. package/lib/ui/__tests__/SpinniesManager.test.js +0 -488
  548. package/lib/ui/__tests__/removeAnsiCodes.test.d.ts +0 -1
  549. package/lib/ui/__tests__/removeAnsiCodes.test.js +0 -84
  550. package/mcp-server/tools/cms/__tests__/HsCreateFunctionTool.test.d.ts +0 -1
  551. package/mcp-server/tools/cms/__tests__/HsCreateFunctionTool.test.js +0 -254
  552. package/mcp-server/tools/cms/__tests__/HsCreateModuleTool.test.d.ts +0 -1
  553. package/mcp-server/tools/cms/__tests__/HsCreateModuleTool.test.js +0 -227
  554. package/mcp-server/tools/cms/__tests__/HsCreateTemplateTool.test.d.ts +0 -1
  555. package/mcp-server/tools/cms/__tests__/HsCreateTemplateTool.test.js +0 -208
  556. package/mcp-server/tools/cms/__tests__/HsFunctionLogsTool.test.d.ts +0 -1
  557. package/mcp-server/tools/cms/__tests__/HsFunctionLogsTool.test.js +0 -186
  558. package/mcp-server/tools/cms/__tests__/HsListFunctionsTool.test.d.ts +0 -1
  559. package/mcp-server/tools/cms/__tests__/HsListFunctionsTool.test.js +0 -124
  560. package/mcp-server/tools/cms/__tests__/HsListTool.test.d.ts +0 -1
  561. package/mcp-server/tools/cms/__tests__/HsListTool.test.js +0 -124
  562. package/mcp-server/tools/project/__tests__/AddFeatureToProjectTool.test.d.ts +0 -1
  563. package/mcp-server/tools/project/__tests__/AddFeatureToProjectTool.test.js +0 -157
  564. package/mcp-server/tools/project/__tests__/CreateProjectTool.test.d.ts +0 -1
  565. package/mcp-server/tools/project/__tests__/CreateProjectTool.test.js +0 -131
  566. package/mcp-server/tools/project/__tests__/CreateTestAccountTool.test.d.ts +0 -1
  567. package/mcp-server/tools/project/__tests__/CreateTestAccountTool.test.js +0 -461
  568. package/mcp-server/tools/project/__tests__/DeployProjectTool.test.d.ts +0 -1
  569. package/mcp-server/tools/project/__tests__/DeployProjectTool.test.js +0 -125
  570. package/mcp-server/tools/project/__tests__/DocFetchTool.test.d.ts +0 -1
  571. package/mcp-server/tools/project/__tests__/DocFetchTool.test.js +0 -125
  572. package/mcp-server/tools/project/__tests__/DocsSearchTool.test.d.ts +0 -1
  573. package/mcp-server/tools/project/__tests__/DocsSearchTool.test.js +0 -210
  574. package/mcp-server/tools/project/__tests__/GetApiUsagePatternsByAppIdTool.test.d.ts +0 -1
  575. package/mcp-server/tools/project/__tests__/GetApiUsagePatternsByAppIdTool.test.js +0 -146
  576. package/mcp-server/tools/project/__tests__/GetApplicationInfoTool.test.d.ts +0 -1
  577. package/mcp-server/tools/project/__tests__/GetApplicationInfoTool.test.js +0 -124
  578. package/mcp-server/tools/project/__tests__/GetBuildLogsTool.test.d.ts +0 -1
  579. package/mcp-server/tools/project/__tests__/GetBuildLogsTool.test.js +0 -307
  580. package/mcp-server/tools/project/__tests__/GetBuildStatusTool.test.d.ts +0 -1
  581. package/mcp-server/tools/project/__tests__/GetBuildStatusTool.test.js +0 -242
  582. package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.d.ts +0 -1
  583. package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.js +0 -209
  584. package/mcp-server/tools/project/__tests__/GuidedWalkthroughTool.test.d.ts +0 -1
  585. package/mcp-server/tools/project/__tests__/GuidedWalkthroughTool.test.js +0 -158
  586. package/mcp-server/tools/project/__tests__/UploadProjectTools.test.d.ts +0 -1
  587. package/mcp-server/tools/project/__tests__/UploadProjectTools.test.js +0 -187
  588. package/mcp-server/tools/project/__tests__/ValidateProjectTool.test.d.ts +0 -1
  589. package/mcp-server/tools/project/__tests__/ValidateProjectTool.test.js +0 -118
  590. package/mcp-server/utils/__tests__/command.test.d.ts +0 -1
  591. package/mcp-server/utils/__tests__/command.test.js +0 -275
  592. package/mcp-server/utils/__tests__/content.test.d.ts +0 -1
  593. package/mcp-server/utils/__tests__/content.test.js +0 -164
  594. package/mcp-server/utils/__tests__/feedbackTracking.test.d.ts +0 -1
  595. package/mcp-server/utils/__tests__/feedbackTracking.test.js +0 -69
@@ -1,461 +0,0 @@
1
- import { CreateTestAccountTool, } from '../CreateTestAccountTool.js';
2
- import { runCommandInDir } from '../../../utils/command.js';
3
- import { addFlag } from '../../../utils/command.js';
4
- import { mcpFeedbackRequest } from '../../../utils/feedbackTracking.js';
5
- import { trackToolUsage } from '../../../utils/toolUsageTracking.js';
6
- import fs from 'fs';
7
- import * as config from '@hubspot/local-dev-lib/config';
8
- vi.mock('@modelcontextprotocol/sdk/server/mcp.js');
9
- vi.mock('../../../utils/command');
10
- vi.mock('../../../utils/toolUsageTracking');
11
- vi.mock('../../../utils/feedbackTracking');
12
- vi.mock('fs');
13
- vi.mock('@hubspot/local-dev-lib/config');
14
- const mockTrackToolUsage = trackToolUsage;
15
- const mockMcpFeedbackRequest = mcpFeedbackRequest;
16
- const mockRunCommandInDir = runCommandInDir;
17
- const mockAddFlag = addFlag;
18
- const mockReadFileSync = fs.readFileSync;
19
- const mockGetConfigAccountByName = vi.spyOn(config, 'getConfigAccountByName');
20
- describe('mcp-server/tools/project/CreateTestAccountTool', () => {
21
- let mockMcpServer;
22
- let tool;
23
- let mockRegisteredTool;
24
- beforeEach(() => {
25
- // @ts-expect-error Not mocking the whole server
26
- mockMcpServer = {
27
- registerTool: vi.fn(),
28
- };
29
- mockRegisteredTool = {};
30
- mockMcpServer.registerTool.mockReturnValue(mockRegisteredTool);
31
- mockMcpFeedbackRequest.mockResolvedValue('');
32
- mockTrackToolUsage.mockResolvedValue(undefined);
33
- tool = new CreateTestAccountTool(mockMcpServer);
34
- // Mock addFlag to simulate command building
35
- mockAddFlag.mockImplementation((command, flag, value) => `${command} --${flag} "${value}"`);
36
- // Mock fs.readFileSync for config file tests
37
- mockReadFileSync.mockReturnValue(JSON.stringify({
38
- accountName: 'TestAccountFromConfig',
39
- description: 'Test description',
40
- marketingLevel: 'PROFESSIONAL',
41
- }));
42
- // @ts-expect-error breaking things
43
- mockGetConfigAccountByName.mockReturnValue(undefined);
44
- });
45
- describe('register', () => {
46
- it('should register tool with correct parameters', () => {
47
- const result = tool.register();
48
- expect(mockMcpServer.registerTool).toHaveBeenCalledWith('create-test-account', expect.objectContaining({
49
- title: 'Create HubSpot Test Account',
50
- description: expect.stringContaining('Creates a HubSpot developer test account'),
51
- inputSchema: expect.any(Object),
52
- }), expect.any(Function));
53
- expect(result).toBe(mockRegisteredTool);
54
- });
55
- });
56
- describe('handler', () => {
57
- describe('config file approach', () => {
58
- const baseInput = {
59
- absoluteCurrentWorkingDirectory: '/test/workspace',
60
- configPath: './test-account.json',
61
- description: 'Test account',
62
- marketingLevel: 'ENTERPRISE',
63
- opsLevel: 'ENTERPRISE',
64
- serviceLevel: 'ENTERPRISE',
65
- salesLevel: 'ENTERPRISE',
66
- contentLevel: 'ENTERPRISE',
67
- commerceLevel: 'ENTERPRISE',
68
- };
69
- it('should create test account with config path', async () => {
70
- mockRunCommandInDir.mockResolvedValue({
71
- stdout: 'Test account created successfully\nAccount ID: 12345678',
72
- stderr: '',
73
- });
74
- const result = await tool.handler(baseInput);
75
- expect(mockAddFlag).toHaveBeenCalledWith('hs test-account create', 'config-path', './test-account.json');
76
- expect(mockRunCommandInDir).toHaveBeenCalledWith('/test/workspace', 'hs test-account create --config-path "./test-account.json"');
77
- expect(result).toEqual({
78
- content: [
79
- { type: 'text', text: '/test/workspace' },
80
- {
81
- type: 'text',
82
- text: 'Test account created successfully\nAccount ID: 12345678',
83
- },
84
- { type: 'text', text: '' },
85
- ],
86
- });
87
- });
88
- it('should handle absolute config path', async () => {
89
- mockRunCommandInDir.mockResolvedValue({
90
- stdout: 'Account created',
91
- stderr: '',
92
- });
93
- const input = {
94
- absoluteCurrentWorkingDirectory: '/test/workspace',
95
- configPath: '/absolute/path/to/config.json',
96
- description: 'Test account',
97
- marketingLevel: 'ENTERPRISE',
98
- opsLevel: 'ENTERPRISE',
99
- serviceLevel: 'ENTERPRISE',
100
- salesLevel: 'ENTERPRISE',
101
- contentLevel: 'ENTERPRISE',
102
- commerceLevel: 'ENTERPRISE',
103
- };
104
- await tool.handler(input);
105
- expect(mockAddFlag).toHaveBeenCalledWith('hs test-account create', 'config-path', '/absolute/path/to/config.json');
106
- expect(mockRunCommandInDir).toHaveBeenCalledWith('/test/workspace', 'hs test-account create --config-path "/absolute/path/to/config.json"');
107
- });
108
- it('should prioritize config path over flags', async () => {
109
- mockRunCommandInDir.mockResolvedValue({
110
- stdout: 'Account created',
111
- stderr: '',
112
- });
113
- const input = {
114
- absoluteCurrentWorkingDirectory: '/test/workspace',
115
- configPath: './test-account.json',
116
- name: 'FlagAccount',
117
- description: 'This should be ignored',
118
- marketingLevel: 'ENTERPRISE',
119
- opsLevel: 'ENTERPRISE',
120
- serviceLevel: 'ENTERPRISE',
121
- salesLevel: 'ENTERPRISE',
122
- contentLevel: 'ENTERPRISE',
123
- commerceLevel: 'ENTERPRISE',
124
- };
125
- await tool.handler(input);
126
- expect(mockAddFlag).toHaveBeenCalledWith('hs test-account create', 'config-path', './test-account.json');
127
- // Should not call addFlag for name or description
128
- expect(mockAddFlag).not.toHaveBeenCalledWith(expect.anything(), 'name', expect.anything());
129
- });
130
- it('should return helpful error when config file does not exist', async () => {
131
- mockReadFileSync.mockImplementation(() => {
132
- throw new Error("ENOENT: no such file or directory, open './missing-config.json'");
133
- });
134
- const input = {
135
- absoluteCurrentWorkingDirectory: '/test/workspace',
136
- configPath: './missing-config.json',
137
- };
138
- const result = await tool.handler(input);
139
- expect(mockRunCommandInDir).not.toHaveBeenCalled();
140
- expect(result).toEqual({
141
- content: [
142
- {
143
- type: 'text',
144
- text: expect.stringContaining('Failed to read or parse config file at "./missing-config.json"'),
145
- },
146
- ],
147
- });
148
- expect(result.content[0]).toHaveProperty('text', expect.stringContaining('Please ensure the file exists and contains valid JSON'));
149
- });
150
- it('should return helpful error when config file contains invalid JSON', async () => {
151
- mockReadFileSync.mockReturnValue('{ invalid json }');
152
- const input = {
153
- absoluteCurrentWorkingDirectory: '/test/workspace',
154
- configPath: './invalid-config.json',
155
- };
156
- const result = await tool.handler(input);
157
- expect(mockRunCommandInDir).not.toHaveBeenCalled();
158
- expect(result).toEqual({
159
- content: [
160
- {
161
- type: 'text',
162
- text: expect.stringContaining('Failed to read or parse config file at "./invalid-config.json"'),
163
- },
164
- ],
165
- });
166
- });
167
- });
168
- describe('flag-based approach', () => {
169
- it('should create test account with name and all defaults', async () => {
170
- mockRunCommandInDir.mockResolvedValue({
171
- stdout: 'Test account created successfully',
172
- stderr: '',
173
- });
174
- const input = {
175
- absoluteCurrentWorkingDirectory: '/test/workspace',
176
- name: 'MyTestAccount',
177
- description: '',
178
- marketingLevel: 'ENTERPRISE',
179
- opsLevel: 'ENTERPRISE',
180
- serviceLevel: 'ENTERPRISE',
181
- salesLevel: 'ENTERPRISE',
182
- contentLevel: 'ENTERPRISE',
183
- commerceLevel: 'ENTERPRISE',
184
- };
185
- await tool.handler(input);
186
- expect(mockAddFlag).toHaveBeenCalledWith('hs test-account create', 'name', 'MyTestAccount');
187
- });
188
- it('should add all flags with defaults when only name is provided', async () => {
189
- mockRunCommandInDir.mockResolvedValue({
190
- stdout: 'Test account created successfully',
191
- stderr: '',
192
- });
193
- const input = {
194
- absoluteCurrentWorkingDirectory: '/test/workspace',
195
- name: 'MyTestAccount',
196
- };
197
- await tool.handler(input);
198
- expect(mockAddFlag).toHaveBeenCalledWith('hs test-account create', 'name', 'MyTestAccount');
199
- // Implementation uses name as fallback for description, and adds all hub levels with ENTERPRISE defaults
200
- expect(mockAddFlag).toHaveBeenCalledTimes(8);
201
- expect(mockRunCommandInDir).toHaveBeenCalled();
202
- });
203
- it('should create test account with account name and description', async () => {
204
- mockRunCommandInDir.mockResolvedValue({
205
- stdout: 'Test account created',
206
- stderr: '',
207
- });
208
- const input = {
209
- absoluteCurrentWorkingDirectory: '/test/workspace',
210
- name: 'MyTestAccount',
211
- description: 'Test account for development',
212
- marketingLevel: 'ENTERPRISE',
213
- opsLevel: 'ENTERPRISE',
214
- serviceLevel: 'ENTERPRISE',
215
- salesLevel: 'ENTERPRISE',
216
- contentLevel: 'ENTERPRISE',
217
- commerceLevel: 'ENTERPRISE',
218
- };
219
- await tool.handler(input);
220
- expect(mockAddFlag).toHaveBeenCalledWith('hs test-account create', 'name', 'MyTestAccount');
221
- expect(mockAddFlag).toHaveBeenCalledWith(expect.stringContaining('name'), 'description', 'Test account for development');
222
- });
223
- it('should create test account with specific hub levels', async () => {
224
- mockRunCommandInDir.mockResolvedValue({
225
- stdout: 'Test account created',
226
- stderr: '',
227
- });
228
- const input = {
229
- absoluteCurrentWorkingDirectory: '/test/workspace',
230
- name: 'MixedTierAccount',
231
- description: 'Test account',
232
- marketingLevel: 'PROFESSIONAL',
233
- salesLevel: 'STARTER',
234
- contentLevel: 'FREE',
235
- commerceLevel: 'FREE',
236
- serviceLevel: 'ENTERPRISE',
237
- opsLevel: 'ENTERPRISE',
238
- };
239
- await tool.handler(input);
240
- expect(mockAddFlag).toHaveBeenCalledWith('hs test-account create', 'name', 'MixedTierAccount');
241
- expect(mockAddFlag).toHaveBeenCalledWith(expect.stringContaining('name'), 'marketing-level', 'PROFESSIONAL');
242
- expect(mockAddFlag).toHaveBeenCalledWith(expect.stringContaining('marketing-level'), 'sales-level', 'STARTER');
243
- expect(mockAddFlag).toHaveBeenCalledWith(expect.stringContaining('sales-level'), 'content-level', 'FREE');
244
- });
245
- it('should create test account with all hub levels specified', async () => {
246
- mockRunCommandInDir.mockResolvedValue({
247
- stdout: 'Test account created',
248
- stderr: '',
249
- });
250
- const input = {
251
- absoluteCurrentWorkingDirectory: '/test/workspace',
252
- name: 'AllHubsAccount',
253
- description: 'Full configuration',
254
- marketingLevel: 'ENTERPRISE',
255
- opsLevel: 'PROFESSIONAL',
256
- serviceLevel: 'STARTER',
257
- salesLevel: 'ENTERPRISE',
258
- contentLevel: 'PROFESSIONAL',
259
- commerceLevel: 'FREE',
260
- };
261
- await tool.handler(input);
262
- expect(mockAddFlag).toHaveBeenCalledWith('hs test-account create', 'name', 'AllHubsAccount');
263
- expect(mockAddFlag).toHaveBeenCalledWith(expect.any(String), 'description', 'Full configuration');
264
- expect(mockAddFlag).toHaveBeenCalledWith(expect.any(String), 'marketing-level', 'ENTERPRISE');
265
- expect(mockAddFlag).toHaveBeenCalledWith(expect.any(String), 'ops-level', 'PROFESSIONAL');
266
- expect(mockAddFlag).toHaveBeenCalledWith(expect.any(String), 'service-level', 'STARTER');
267
- expect(mockAddFlag).toHaveBeenCalledWith(expect.any(String), 'sales-level', 'ENTERPRISE');
268
- expect(mockAddFlag).toHaveBeenCalledWith(expect.any(String), 'content-level', 'PROFESSIONAL');
269
- expect(mockAddFlag).toHaveBeenCalledWith(expect.any(String), 'commerce-level', 'FREE');
270
- });
271
- });
272
- describe('handler defaults', () => {
273
- it('should use ENTERPRISE defaults for all hub levels when not specified', async () => {
274
- mockRunCommandInDir.mockResolvedValue({
275
- stdout: 'Test account created',
276
- stderr: '',
277
- });
278
- const input = {
279
- absoluteCurrentWorkingDirectory: '/test/workspace',
280
- name: 'DefaultLevelsAccount',
281
- description: '',
282
- marketingLevel: 'ENTERPRISE',
283
- opsLevel: 'ENTERPRISE',
284
- serviceLevel: 'ENTERPRISE',
285
- salesLevel: 'ENTERPRISE',
286
- contentLevel: 'ENTERPRISE',
287
- commerceLevel: 'ENTERPRISE',
288
- };
289
- await tool.handler(input);
290
- expect(mockAddFlag).toHaveBeenCalledWith('hs test-account create', 'name', 'DefaultLevelsAccount');
291
- expect(mockAddFlag).toHaveBeenCalledWith(expect.any(String), 'marketing-level', 'ENTERPRISE');
292
- expect(mockAddFlag).toHaveBeenCalledWith(expect.any(String), 'ops-level', 'ENTERPRISE');
293
- expect(mockAddFlag).toHaveBeenCalledWith(expect.any(String), 'service-level', 'ENTERPRISE');
294
- expect(mockAddFlag).toHaveBeenCalledWith(expect.any(String), 'sales-level', 'ENTERPRISE');
295
- expect(mockAddFlag).toHaveBeenCalledWith(expect.any(String), 'content-level', 'ENTERPRISE');
296
- expect(mockAddFlag).toHaveBeenCalledWith(expect.any(String), 'commerce-level', 'ENTERPRISE');
297
- });
298
- it('should use name as fallback for description when description is empty', async () => {
299
- mockRunCommandInDir.mockResolvedValue({
300
- stdout: 'Test account created',
301
- stderr: '',
302
- });
303
- const input = {
304
- absoluteCurrentWorkingDirectory: '/test/workspace',
305
- name: 'NoDescriptionAccount',
306
- description: '',
307
- marketingLevel: 'ENTERPRISE',
308
- opsLevel: 'ENTERPRISE',
309
- serviceLevel: 'ENTERPRISE',
310
- salesLevel: 'ENTERPRISE',
311
- contentLevel: 'ENTERPRISE',
312
- commerceLevel: 'ENTERPRISE',
313
- };
314
- await tool.handler(input);
315
- expect(mockAddFlag).toHaveBeenCalledWith('hs test-account create', 'name', 'NoDescriptionAccount');
316
- // Implementation uses name as fallback for description
317
- expect(mockAddFlag).toHaveBeenCalledWith(expect.any(String), 'description', 'NoDescriptionAccount');
318
- });
319
- it('should use defaults for some hub levels while respecting explicit values', async () => {
320
- mockRunCommandInDir.mockResolvedValue({
321
- stdout: 'Test account created',
322
- stderr: '',
323
- });
324
- const input = {
325
- absoluteCurrentWorkingDirectory: '/test/workspace',
326
- name: 'PartialLevelsAccount',
327
- description: '',
328
- marketingLevel: 'FREE',
329
- salesLevel: 'STARTER',
330
- opsLevel: 'ENTERPRISE',
331
- serviceLevel: 'ENTERPRISE',
332
- contentLevel: 'ENTERPRISE',
333
- commerceLevel: 'ENTERPRISE',
334
- };
335
- await tool.handler(input);
336
- expect(mockAddFlag).toHaveBeenCalledWith('hs test-account create', 'name', 'PartialLevelsAccount');
337
- expect(mockAddFlag).toHaveBeenCalledWith(expect.any(String), 'marketing-level', 'FREE');
338
- expect(mockAddFlag).toHaveBeenCalledWith(expect.any(String), 'sales-level', 'STARTER');
339
- expect(mockAddFlag).toHaveBeenCalledWith(expect.any(String), 'ops-level', 'ENTERPRISE');
340
- expect(mockAddFlag).toHaveBeenCalledWith(expect.any(String), 'service-level', 'ENTERPRISE');
341
- expect(mockAddFlag).toHaveBeenCalledWith(expect.any(String), 'content-level', 'ENTERPRISE');
342
- expect(mockAddFlag).toHaveBeenCalledWith(expect.any(String), 'commerce-level', 'ENTERPRISE');
343
- });
344
- it('should add all hub level flags when defaults are applied', async () => {
345
- mockRunCommandInDir.mockResolvedValue({
346
- stdout: 'Test account created with defaults',
347
- stderr: '',
348
- });
349
- const input = {
350
- absoluteCurrentWorkingDirectory: '/test/workspace',
351
- name: 'MinimalAccount',
352
- description: '',
353
- marketingLevel: 'ENTERPRISE',
354
- opsLevel: 'ENTERPRISE',
355
- serviceLevel: 'ENTERPRISE',
356
- salesLevel: 'ENTERPRISE',
357
- contentLevel: 'ENTERPRISE',
358
- commerceLevel: 'ENTERPRISE',
359
- };
360
- const result = await tool.handler(input);
361
- expect(mockRunCommandInDir).toHaveBeenCalled();
362
- expect(mockAddFlag).toHaveBeenCalledTimes(8);
363
- expect(result.content[1]).toEqual({
364
- type: 'text',
365
- text: 'Test account created with defaults',
366
- });
367
- });
368
- it('should use ENTERPRISE defaults when values are undefined', async () => {
369
- mockRunCommandInDir.mockResolvedValue({
370
- stdout: 'Test account created',
371
- stderr: '',
372
- });
373
- const input = {
374
- absoluteCurrentWorkingDirectory: '/test/workspace',
375
- name: 'BypassedDefaultsAccount',
376
- };
377
- await tool.handler(input);
378
- expect(mockAddFlag).toHaveBeenCalledWith('hs test-account create', 'name', 'BypassedDefaultsAccount');
379
- expect(mockAddFlag).toHaveBeenCalledTimes(8);
380
- });
381
- });
382
- describe('interactive mode', () => {
383
- it('should ask for parameters when neither config nor name provided', async () => {
384
- const input = {
385
- absoluteCurrentWorkingDirectory: '/test/workspace',
386
- description: 'Test account',
387
- marketingLevel: 'ENTERPRISE',
388
- opsLevel: 'ENTERPRISE',
389
- serviceLevel: 'ENTERPRISE',
390
- salesLevel: 'ENTERPRISE',
391
- contentLevel: 'ENTERPRISE',
392
- commerceLevel: 'ENTERPRISE',
393
- };
394
- const result = await tool.handler(input);
395
- // Should NOT run the command
396
- expect(mockRunCommandInDir).not.toHaveBeenCalled();
397
- // Should return a message asking for information
398
- expect(result).toEqual({
399
- content: [
400
- {
401
- type: 'text',
402
- text: 'Ask the user for the account config JSON path or the name of the test account to create.',
403
- },
404
- ],
405
- });
406
- });
407
- });
408
- describe('error handling', () => {
409
- it('should handle command output with stderr warnings', async () => {
410
- mockRunCommandInDir.mockResolvedValue({
411
- stdout: 'Test account created successfully',
412
- stderr: 'Warning: Some non-critical warning message',
413
- });
414
- const input = {
415
- absoluteCurrentWorkingDirectory: '/test/workspace',
416
- configPath: './test-account.json',
417
- description: 'Test account',
418
- marketingLevel: 'ENTERPRISE',
419
- opsLevel: 'ENTERPRISE',
420
- serviceLevel: 'ENTERPRISE',
421
- salesLevel: 'ENTERPRISE',
422
- contentLevel: 'ENTERPRISE',
423
- commerceLevel: 'ENTERPRISE',
424
- };
425
- const result = await tool.handler(input);
426
- expect(result).toEqual({
427
- content: [
428
- { type: 'text', text: '/test/workspace' },
429
- { type: 'text', text: 'Test account created successfully' },
430
- {
431
- type: 'text',
432
- text: 'Warning: Some non-critical warning message',
433
- },
434
- ],
435
- });
436
- });
437
- it('should handle command execution errors', async () => {
438
- const error = new Error('Failed to create test account');
439
- mockRunCommandInDir.mockRejectedValue(error);
440
- const input = {
441
- absoluteCurrentWorkingDirectory: '/test/workspace',
442
- configPath: './test-account.json',
443
- description: 'Test account',
444
- marketingLevel: 'ENTERPRISE',
445
- opsLevel: 'ENTERPRISE',
446
- serviceLevel: 'ENTERPRISE',
447
- salesLevel: 'ENTERPRISE',
448
- contentLevel: 'ENTERPRISE',
449
- commerceLevel: 'ENTERPRISE',
450
- };
451
- const result = await tool.handler(input);
452
- expect(result).toEqual({
453
- content: [
454
- { type: 'text', text: '/test/workspace' },
455
- { type: 'text', text: 'Failed to create test account' },
456
- ],
457
- });
458
- });
459
- });
460
- });
461
- });
@@ -1,125 +0,0 @@
1
- import { DeployProjectTool } from '../DeployProjectTool.js';
2
- import { runCommandInDir } from '../../../utils/command.js';
3
- import { addFlag } from '../../../utils/command.js';
4
- import { mcpFeedbackRequest } from '../../../utils/feedbackTracking.js';
5
- import { trackToolUsage } from '../../../utils/toolUsageTracking.js';
6
- vi.mock('@modelcontextprotocol/sdk/server/mcp.js');
7
- vi.mock('../../../utils/command');
8
- vi.mock('../../../utils/toolUsageTracking');
9
- vi.mock('../../../utils/feedbackTracking');
10
- const mockTrackToolUsage = trackToolUsage;
11
- const mockMcpFeedbackRequest = mcpFeedbackRequest;
12
- const mockRunCommandInDir = runCommandInDir;
13
- const mockAddFlag = addFlag;
14
- describe('mcp-server/tools/project/DeployProject', () => {
15
- let mockMcpServer;
16
- let tool;
17
- let mockRegisteredTool;
18
- beforeEach(() => {
19
- // @ts-expect-error Not mocking the whole server
20
- mockMcpServer = {
21
- registerTool: vi.fn(),
22
- };
23
- mockRegisteredTool = {};
24
- mockMcpServer.registerTool.mockReturnValue(mockRegisteredTool);
25
- mockMcpFeedbackRequest.mockResolvedValue('');
26
- mockTrackToolUsage.mockResolvedValue(undefined);
27
- tool = new DeployProjectTool(mockMcpServer);
28
- // Mock addFlag to simulate command building
29
- mockAddFlag.mockImplementation((command, flag, value) => `${command} --${flag} "${value}"`);
30
- });
31
- describe('register', () => {
32
- it('should register tool with correct parameters', () => {
33
- const result = tool.register();
34
- expect(mockMcpServer.registerTool).toHaveBeenCalledWith('deploy-project', expect.objectContaining({
35
- title: 'Deploy a build of HubSpot Project',
36
- description: expect.stringContaining('Takes a build number and a project name and deploys that build of the project'),
37
- inputSchema: expect.any(Object),
38
- }), expect.any(Function));
39
- expect(result).toBe(mockRegisteredTool);
40
- });
41
- });
42
- describe('handler', () => {
43
- const baseInput = {
44
- absoluteCurrentWorkingDirectory: '/test/dir',
45
- absoluteProjectPath: '/test/project',
46
- };
47
- it('should deploy project with specified build number', async () => {
48
- mockRunCommandInDir.mockResolvedValue({
49
- stdout: 'Project deployed successfully',
50
- stderr: '',
51
- });
52
- const input = {
53
- ...baseInput,
54
- buildNumber: 123,
55
- };
56
- const result = await tool.handler(input);
57
- expect(mockAddFlag).toHaveBeenCalledWith('hs project deploy', 'build', 123);
58
- expect(mockRunCommandInDir).toHaveBeenCalledWith('/test/project', expect.stringContaining('--build "123"'));
59
- expect(result).toEqual({
60
- content: [
61
- { type: 'text', text: 'Project deployed successfully' },
62
- { type: 'text', text: '' },
63
- ],
64
- });
65
- });
66
- it('should prompt for build number when not provided', async () => {
67
- mockRunCommandInDir.mockResolvedValue({
68
- stdout: 'Build 1: Created 2023-01-01\nBuild 2: Created 2023-01-02',
69
- stderr: '',
70
- });
71
- const result = await tool.handler(baseInput);
72
- expect(mockRunCommandInDir).toHaveBeenCalledWith('/test/project', 'hs project list-builds --limit 100');
73
- expect(result.content).toEqual([
74
- {
75
- type: 'text',
76
- text: expect.stringContaining('Ask the user which build number they would like to deploy?'),
77
- },
78
- ]);
79
- expect(result.content[0].text).toContain('Build 1: Created 2023-01-01');
80
- });
81
- it('should handle deployment with stderr', async () => {
82
- mockRunCommandInDir.mockResolvedValue({
83
- stdout: 'Deployed successfully',
84
- stderr: 'Warning: deprecated feature used',
85
- });
86
- const input = {
87
- ...baseInput,
88
- buildNumber: 456,
89
- };
90
- const result = await tool.handler(input);
91
- expect(result.content).toEqual([
92
- { type: 'text', text: 'Deployed successfully' },
93
- { type: 'text', text: 'Warning: deprecated feature used' },
94
- ]);
95
- });
96
- it('should handle errors during list-builds command', async () => {
97
- const error = new Error('Failed to list builds');
98
- mockRunCommandInDir.mockRejectedValue(error);
99
- // The error would be thrown and caught by the calling code
100
- await expect(tool.handler(baseInput)).rejects.toThrow('Failed to list builds');
101
- });
102
- it('should handle errors during deploy command', async () => {
103
- const error = new Error('Deployment failed');
104
- mockRunCommandInDir.mockRejectedValue(error);
105
- const input = {
106
- ...baseInput,
107
- buildNumber: 789,
108
- };
109
- await expect(tool.handler(input)).rejects.toThrow('Deployment failed');
110
- });
111
- it('should prompt for build when buildNumber is 0 (falsy)', async () => {
112
- mockRunCommandInDir.mockResolvedValue({
113
- stdout: 'Build 0: Initial build\nBuild 1: Latest build',
114
- stderr: '',
115
- });
116
- const input = {
117
- ...baseInput,
118
- buildNumber: 0, // This is falsy, so it will prompt
119
- };
120
- const result = await tool.handler(input);
121
- expect(mockRunCommandInDir).toHaveBeenCalledWith('/test/project', 'hs project list-builds --limit 100');
122
- expect(result.content[0].text).toContain('Ask the user which build number they would like to deploy?');
123
- });
124
- });
125
- });