@hubspot/cli 7.6.0-beta.4 → 7.6.0-beta.6
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.
- package/api/__tests__/migrate.test.js +27 -29
- package/api/migrate.d.ts +7 -0
- package/api/migrate.js +22 -22
- package/bin/cli.js +92 -97
- package/bin/hs +2 -2
- package/bin/hscms +2 -2
- package/bin/silenceErrors.js +1 -2
- package/commands/__tests__/account.test.js +29 -34
- package/commands/__tests__/auth.test.js +11 -16
- package/commands/__tests__/cms.test.js +15 -20
- package/commands/__tests__/config.test.js +14 -19
- package/commands/__tests__/create.test.js +10 -15
- package/commands/__tests__/customObject.test.js +14 -19
- package/commands/__tests__/doctor.test.js +43 -48
- package/commands/__tests__/feedback.test.js +7 -45
- package/commands/__tests__/fetch.test.js +29 -28
- package/commands/__tests__/filemanager.test.js +14 -19
- package/commands/__tests__/function.test.js +16 -21
- package/commands/__tests__/getStarted.test.js +45 -60
- package/commands/__tests__/hubdb.test.js +17 -22
- package/commands/__tests__/init.test.js +12 -17
- package/commands/__tests__/lint.test.js +13 -18
- package/commands/__tests__/list.test.js +18 -23
- package/commands/__tests__/logs.test.js +28 -27
- package/commands/__tests__/mcp.test.js +14 -19
- package/commands/__tests__/mv.test.js +14 -52
- package/commands/__tests__/open.test.js +13 -51
- package/commands/__tests__/project.test.js +44 -49
- package/commands/__tests__/remove.test.js +13 -51
- package/commands/__tests__/sandbox.test.js +14 -19
- package/commands/__tests__/secret.test.js +16 -21
- package/commands/__tests__/testAccount.test.js +16 -21
- package/commands/__tests__/theme.test.js +15 -20
- package/commands/account/__tests__/auth.test.js +11 -16
- package/commands/account/__tests__/clean.test.js +12 -17
- package/commands/account/__tests__/createOverride.test.js +10 -15
- package/commands/account/__tests__/info.test.js +11 -16
- package/commands/account/__tests__/list.test.js +11 -16
- package/commands/account/__tests__/remove.test.js +13 -18
- package/commands/account/__tests__/removeOverride.js +8 -13
- package/commands/account/__tests__/rename.test.js +15 -20
- package/commands/account/__tests__/use.test.js +10 -15
- package/commands/account/auth.d.ts +1 -1
- package/commands/account/auth.js +78 -69
- package/commands/account/clean.d.ts +1 -1
- package/commands/account/clean.js +55 -60
- package/commands/account/createOverride.d.ts +1 -1
- package/commands/account/createOverride.js +52 -57
- package/commands/account/info.d.ts +1 -1
- package/commands/account/info.js +33 -35
- package/commands/account/list.d.ts +1 -1
- package/commands/account/list.js +43 -45
- package/commands/account/remove.d.ts +1 -1
- package/commands/account/remove.js +37 -42
- package/commands/account/removeOverride.d.ts +1 -1
- package/commands/account/removeOverride.js +38 -43
- package/commands/account/rename.d.ts +1 -1
- package/commands/account/rename.js +18 -20
- package/commands/account/use.d.ts +1 -1
- package/commands/account/use.js +29 -31
- package/commands/account.d.ts +1 -1
- package/commands/account.js +23 -28
- package/commands/app/__tests__/migrate.test.js +29 -34
- package/commands/app/migrate.d.ts +2 -2
- package/commands/app/migrate.js +40 -43
- package/commands/app/secret/__tests__/add.test.js +6 -11
- package/commands/app/secret/__tests__/delete.test.js +6 -11
- package/commands/app/secret/__tests__/list.test.js +6 -11
- package/commands/app/secret/__tests__/update.test.js +6 -11
- package/commands/app/secret/add.d.ts +1 -1
- package/commands/app/secret/add.js +28 -30
- package/commands/app/secret/delete.d.ts +1 -1
- package/commands/app/secret/delete.js +34 -36
- package/commands/app/secret/list.d.ts +1 -1
- package/commands/app/secret/list.js +25 -27
- package/commands/app/secret/update.d.ts +1 -1
- package/commands/app/secret/update.js +32 -34
- package/commands/app/secret.d.ts +1 -1
- package/commands/app/secret.js +12 -17
- package/commands/app.d.ts +1 -1
- package/commands/app.js +6 -11
- package/commands/auth.d.ts +1 -1
- package/commands/auth.js +70 -72
- package/commands/cms/convertFields.d.ts +1 -1
- package/commands/cms/convertFields.js +34 -39
- package/commands/cms/getReactModule.d.ts +1 -1
- package/commands/cms/getReactModule.js +32 -37
- package/commands/cms/lighthouseScore.d.ts +1 -1
- package/commands/cms/lighthouseScore.js +67 -72
- package/commands/cms.d.ts +1 -1
- package/commands/cms.js +11 -16
- package/commands/completion.d.ts +1 -1
- package/commands/completion.js +10 -15
- package/commands/config/migrate.d.ts +1 -1
- package/commands/config/migrate.js +27 -32
- package/commands/config/set.d.ts +2 -1
- package/commands/config/set.js +40 -32
- package/commands/config.d.ts +1 -1
- package/commands/config.js +8 -13
- package/commands/create/api-sample.d.ts +1 -1
- package/commands/create/api-sample.js +28 -33
- package/commands/create/app.d.ts +1 -1
- package/commands/create/app.js +3 -5
- package/commands/create/function.d.ts +1 -1
- package/commands/create/function.js +9 -11
- package/commands/create/index.d.ts +1 -1
- package/commands/create/index.js +19 -24
- package/commands/create/module.d.ts +1 -1
- package/commands/create/module.js +12 -14
- package/commands/create/react-app.d.ts +1 -1
- package/commands/create/react-app.js +3 -5
- package/commands/create/template.d.ts +1 -1
- package/commands/create/template.js +12 -14
- package/commands/create/vue-app.d.ts +1 -1
- package/commands/create/vue-app.js +3 -5
- package/commands/create/webpack-serverless.d.ts +1 -1
- package/commands/create/webpack-serverless.js +3 -5
- package/commands/create/website-theme.d.ts +1 -1
- package/commands/create/website-theme.js +5 -7
- package/commands/create.d.ts +2 -2
- package/commands/create.js +30 -35
- package/commands/customObject/__tests__/create.test.js +13 -18
- package/commands/customObject/__tests__/schema.test.js +18 -23
- package/commands/customObject/create.d.ts +1 -1
- package/commands/customObject/create.js +28 -30
- package/commands/customObject/schema/__tests__/create.test.js +13 -18
- package/commands/customObject/schema/__tests__/delete.test.js +13 -18
- package/commands/customObject/schema/__tests__/fetch-all.test.js +13 -18
- package/commands/customObject/schema/__tests__/fetch.test.js +13 -18
- package/commands/customObject/schema/__tests__/list.test.js +13 -18
- package/commands/customObject/schema/__tests__/update.test.js +13 -18
- package/commands/customObject/schema/create.d.ts +1 -1
- package/commands/customObject/schema/create.js +28 -30
- package/commands/customObject/schema/delete.d.ts +1 -1
- package/commands/customObject/schema/delete.js +24 -26
- package/commands/customObject/schema/fetch-all.d.ts +1 -1
- package/commands/customObject/schema/fetch-all.js +22 -24
- package/commands/customObject/schema/fetch.d.ts +1 -1
- package/commands/customObject/schema/fetch.js +24 -26
- package/commands/customObject/schema/list.d.ts +1 -1
- package/commands/customObject/schema/list.js +13 -15
- package/commands/customObject/schema/update.d.ts +1 -1
- package/commands/customObject/schema/update.js +32 -34
- package/commands/customObject/schema.d.ts +1 -1
- package/commands/customObject/schema.js +17 -22
- package/commands/customObject.d.ts +1 -1
- package/commands/customObject.js +13 -18
- package/commands/doctor.d.ts +1 -1
- package/commands/doctor.js +28 -33
- package/commands/feedback.d.ts +1 -1
- package/commands/feedback.js +19 -24
- package/commands/fetch.d.ts +1 -1
- package/commands/fetch.js +28 -30
- package/commands/filemanager/__tests__/fetch.test.js +17 -22
- package/commands/filemanager/__tests__/upload.test.js +15 -20
- package/commands/filemanager/fetch.d.ts +1 -1
- package/commands/filemanager/fetch.js +23 -25
- package/commands/filemanager/upload.d.ts +1 -1
- package/commands/filemanager/upload.js +39 -44
- package/commands/filemanager.d.ts +1 -1
- package/commands/filemanager.js +8 -13
- package/commands/function/deploy.d.ts +1 -1
- package/commands/function/deploy.js +35 -40
- package/commands/function/list.d.ts +1 -1
- package/commands/function/list.js +24 -29
- package/commands/function/server.d.ts +1 -1
- package/commands/function/server.js +15 -17
- package/commands/function.d.ts +1 -1
- package/commands/function.js +12 -18
- package/commands/getStarted.d.ts +1 -1
- package/commands/getStarted.js +125 -146
- package/commands/hubdb/__tests__/clear.test.js +13 -18
- package/commands/hubdb/__tests__/create.test.js +13 -18
- package/commands/hubdb/__tests__/delete.test.js +13 -18
- package/commands/hubdb/__tests__/fetch.test.js +13 -18
- package/commands/hubdb/__tests__/list.test.js +23 -28
- package/commands/hubdb/clear.d.ts +1 -1
- package/commands/hubdb/clear.js +20 -22
- package/commands/hubdb/create.d.ts +1 -1
- package/commands/hubdb/create.js +30 -35
- package/commands/hubdb/delete.d.ts +1 -1
- package/commands/hubdb/delete.js +24 -26
- package/commands/hubdb/fetch.d.ts +1 -1
- package/commands/hubdb/fetch.js +17 -19
- package/commands/hubdb/list.d.ts +1 -1
- package/commands/hubdb/list.js +33 -35
- package/commands/hubdb.d.ts +1 -1
- package/commands/hubdb.js +18 -24
- package/commands/init.d.ts +1 -1
- package/commands/init.js +83 -88
- package/commands/lint.d.ts +1 -1
- package/commands/lint.js +24 -26
- package/commands/list.d.ts +1 -1
- package/commands/list.js +32 -37
- package/commands/logs.d.ts +1 -1
- package/commands/logs.js +35 -37
- package/commands/mcp/__tests__/setup.test.js +7 -12
- package/commands/mcp/__tests__/start.test.js +7 -12
- package/commands/mcp/setup.d.ts +1 -1
- package/commands/mcp/setup.js +17 -19
- package/commands/mcp/start.d.ts +1 -1
- package/commands/mcp/start.js +32 -34
- package/commands/mcp.d.ts +1 -1
- package/commands/mcp.js +7 -12
- package/commands/module/marketplace-validate.d.ts +1 -1
- package/commands/module/marketplace-validate.js +21 -26
- package/commands/module.d.ts +1 -1
- package/commands/module.js +7 -13
- package/commands/mv.d.ts +1 -1
- package/commands/mv.js +20 -22
- package/commands/open.d.ts +1 -1
- package/commands/open.js +19 -21
- package/commands/project/__tests__/add.test.js +10 -15
- package/commands/project/__tests__/create.test.js +14 -19
- package/commands/project/__tests__/deploy.test.js +99 -141
- package/commands/project/__tests__/devUnifiedFlow.test.js +151 -155
- package/commands/project/__tests__/download.test.js +14 -19
- package/commands/project/__tests__/installDeps.test.js +32 -70
- package/commands/project/__tests__/listBuilds.test.js +14 -19
- package/commands/project/__tests__/logs.test.js +56 -94
- package/commands/project/__tests__/migrate.test.js +25 -30
- package/commands/project/__tests__/migrateApp.test.js +17 -22
- package/commands/project/__tests__/open.test.js +16 -21
- package/commands/project/__tests__/profile.test.js +14 -19
- package/commands/project/__tests__/upload.test.js +18 -23
- package/commands/project/__tests__/watch.test.js +14 -19
- package/commands/project/add.d.ts +1 -1
- package/commands/project/add.js +34 -36
- package/commands/project/cloneApp.d.ts +1 -1
- package/commands/project/cloneApp.js +67 -72
- package/commands/project/create.d.ts +2 -2
- package/commands/project/create.js +63 -68
- package/commands/project/deploy.d.ts +2 -2
- package/commands/project/deploy.js +83 -90
- package/commands/project/dev/deprecatedFlow.d.ts +2 -2
- package/commands/project/dev/deprecatedFlow.js +52 -58
- package/commands/project/dev/index.d.ts +1 -1
- package/commands/project/dev/index.js +44 -47
- package/commands/project/dev/unifiedFlow.d.ts +3 -3
- package/commands/project/dev/unifiedFlow.js +69 -76
- package/commands/project/download.d.ts +1 -1
- package/commands/project/download.js +35 -40
- package/commands/project/installDeps.d.ts +1 -1
- package/commands/project/installDeps.js +29 -34
- package/commands/project/listBuilds.d.ts +1 -1
- package/commands/project/listBuilds.js +40 -45
- package/commands/project/logs.d.ts +1 -1
- package/commands/project/logs.js +52 -54
- package/commands/project/migrate.d.ts +1 -1
- package/commands/project/migrate.js +24 -26
- package/commands/project/migrateApp.d.ts +2 -2
- package/commands/project/migrateApp.js +18 -20
- package/commands/project/open.d.ts +1 -1
- package/commands/project/open.js +25 -30
- package/commands/project/profile/add.d.ts +1 -1
- package/commands/project/profile/add.js +68 -73
- package/commands/project/profile/delete.d.ts +1 -1
- package/commands/project/profile/delete.js +68 -61
- package/commands/project/profile.d.ts +1 -1
- package/commands/project/profile.js +9 -14
- package/commands/project/upload.d.ts +1 -1
- package/commands/project/upload.js +50 -55
- package/commands/project/validate.d.ts +1 -1
- package/commands/project/validate.js +36 -40
- package/commands/project/watch.d.ts +1 -1
- package/commands/project/watch.js +59 -61
- package/commands/project.d.ts +1 -1
- package/commands/project.js +38 -43
- package/commands/remove.d.ts +1 -1
- package/commands/remove.js +15 -17
- package/commands/sandbox/__tests__/create.test.js +222 -20
- package/commands/sandbox/__tests__/delete.test.js +15 -20
- package/commands/sandbox/create.d.ts +2 -2
- package/commands/sandbox/create.js +92 -79
- package/commands/sandbox/delete.d.ts +1 -1
- package/commands/sandbox/delete.js +94 -96
- package/commands/sandbox.d.ts +1 -1
- package/commands/sandbox.js +9 -14
- package/commands/secret/__tests__/addSecret.test.js +13 -18
- package/commands/secret/__tests__/deleteSecret.test.js +13 -18
- package/commands/secret/__tests__/listSecret.test.js +13 -18
- package/commands/secret/__tests__/updateSecret.test.js +13 -18
- package/commands/secret/addSecret.d.ts +1 -1
- package/commands/secret/addSecret.js +26 -28
- package/commands/secret/deleteSecret.d.ts +1 -1
- package/commands/secret/deleteSecret.js +27 -29
- package/commands/secret/listSecret.d.ts +1 -1
- package/commands/secret/listSecret.js +19 -21
- package/commands/secret/updateSecret.d.ts +1 -1
- package/commands/secret/updateSecret.js +25 -27
- package/commands/secret.d.ts +1 -1
- package/commands/secret.js +13 -18
- package/commands/testAccount/__tests__/create.test.js +17 -22
- package/commands/testAccount/__tests__/createConfig.test.js +6 -11
- package/commands/testAccount/__tests__/delete.test.js +15 -20
- package/commands/testAccount/create.d.ts +1 -1
- package/commands/testAccount/create.js +63 -84
- package/commands/testAccount/createConfig.d.ts +1 -1
- package/commands/testAccount/createConfig.js +36 -41
- package/commands/testAccount/delete.d.ts +1 -1
- package/commands/testAccount/delete.js +17 -19
- package/commands/testAccount.d.ts +1 -1
- package/commands/testAccount.js +10 -15
- package/commands/theme/__tests__/generate-selectors.test.js +7 -12
- package/commands/theme/__tests__/marketplace-validate.test.js +14 -19
- package/commands/theme/__tests__/preview.test.js +12 -17
- package/commands/theme/generate-selectors.d.ts +1 -1
- package/commands/theme/generate-selectors.js +23 -28
- package/commands/theme/marketplace-validate.d.ts +1 -1
- package/commands/theme/marketplace-validate.js +19 -24
- package/commands/theme/preview.d.ts +1 -1
- package/commands/theme/preview.js +60 -65
- package/commands/theme.d.ts +1 -1
- package/commands/theme.js +11 -16
- package/commands/upload.d.ts +1 -1
- package/commands/upload.js +77 -82
- package/commands/watch.d.ts +1 -1
- package/commands/watch.js +45 -51
- package/lang/en.d.ts +52 -25
- package/lang/en.js +421 -397
- package/lang/en.lyaml +4 -28
- package/lib/__tests__/accountTypes.test.js +20 -22
- package/lib/__tests__/buildAccount.test.js +115 -64
- package/lib/__tests__/commonOpts.test.js +20 -22
- package/lib/__tests__/dependencyManagement.test.js +46 -51
- package/lib/__tests__/developerTestAccounts.test.js +27 -62
- package/lib/__tests__/hasFeature.test.js +6 -8
- package/lib/__tests__/npm.test.js +15 -20
- package/lib/__tests__/oauth.test.js +23 -28
- package/lib/__tests__/parsing.test.js +18 -20
- package/lib/__tests__/polling.test.js +24 -26
- package/lib/__tests__/process.test.js +14 -19
- package/lib/__tests__/projectProfiles.test.js +34 -39
- package/lib/__tests__/sandboxSync.test.js +30 -35
- package/lib/__tests__/sandboxes.test.js +29 -31
- package/lib/__tests__/serverlessLogs.test.js +8 -13
- package/lib/__tests__/usageTracking.test.js +33 -34
- package/lib/__tests__/validation.test.js +18 -20
- package/lib/__tests__/yargsUtils.test.js +17 -41
- package/lib/accountTypes.js +24 -34
- package/lib/app/__tests__/migrate.test.js +117 -109
- package/lib/app/__tests__/migrate_legacy.test.js +29 -31
- package/lib/app/migrate.d.ts +18 -4
- package/lib/app/migrate.js +152 -148
- package/lib/app/migrate_legacy.d.ts +1 -1
- package/lib/app/migrate_legacy.js +72 -78
- package/lib/app/urls.js +5 -9
- package/lib/buildAccount.d.ts +12 -3
- package/lib/buildAccount.js +165 -69
- package/lib/commonOpts.d.ts +1 -1
- package/lib/commonOpts.js +67 -59
- package/lib/configMigrate.js +34 -38
- package/lib/configOptions.d.ts +5 -0
- package/lib/configOptions.js +44 -40
- package/lib/constants.d.ts +8 -0
- package/lib/constants.js +39 -34
- package/lib/customObject.js +2 -6
- package/lib/dependencyManagement.js +37 -45
- package/lib/developerTestAccounts.d.ts +1 -1
- package/lib/developerTestAccounts.js +34 -39
- package/lib/doctor/Diagnosis.d.ts +1 -1
- package/lib/doctor/Diagnosis.js +25 -29
- package/lib/doctor/DiagnosticInfoBuilder.d.ts +1 -1
- package/lib/doctor/DiagnosticInfoBuilder.js +30 -37
- package/lib/doctor/Doctor.d.ts +1 -1
- package/lib/doctor/Doctor.js +94 -101
- package/lib/doctor/__tests__/Diagnosis.test.js +9 -14
- package/lib/doctor/__tests__/DiagnosticInfoBuilder.test.js +29 -34
- package/lib/doctor/__tests__/Doctor.test.js +24 -26
- package/lib/enums/exitCodes.js +1 -4
- package/lib/errorHandlers/index.js +33 -52
- package/lib/errorHandlers/suppressError.d.ts +1 -1
- package/lib/errorHandlers/suppressError.js +28 -31
- package/lib/errors/ProjectValidationError.d.ts +4 -0
- package/lib/errors/ProjectValidationError.js +9 -0
- package/lib/filesystem.js +8 -15
- package/lib/generateSelectors.js +18 -29
- package/lib/hasFeature.d.ts +1 -1
- package/lib/hasFeature.js +3 -6
- package/lib/interpolation.js +11 -18
- package/lib/lang.d.ts +1 -1
- package/lib/lang.js +22 -27
- package/lib/links.js +16 -24
- package/lib/marketplaceValidate.js +29 -39
- package/lib/mcp/setup.d.ts +4 -0
- package/lib/mcp/setup.js +106 -82
- package/lib/middleware/__test__/configMiddleware.test.js +20 -55
- package/lib/middleware/__test__/gitMiddleware.test.js +7 -42
- package/lib/middleware/__test__/notificationsMiddleware.test.js +2 -4
- package/lib/middleware/__test__/requestMiddleware.test.js +6 -11
- package/lib/middleware/__test__/utils.test.js +9 -11
- package/lib/middleware/__test__/yargsChecksMiddleware.test.js +9 -44
- package/lib/middleware/autoUpdateMiddleware.js +33 -40
- package/lib/middleware/configMiddleware.js +36 -42
- package/lib/middleware/fireAlarmMiddleware.js +12 -18
- package/lib/middleware/gitMiddleware.js +5 -8
- package/lib/middleware/notificationsMiddleware.js +16 -23
- package/lib/middleware/requestMiddleware.js +4 -10
- package/lib/middleware/utils.js +1 -4
- package/lib/middleware/yargsChecksMiddleware.js +10 -13
- package/lib/npm.js +14 -23
- package/lib/oauth.js +29 -35
- package/lib/parsing.js +3 -6
- package/lib/polling.js +11 -15
- package/lib/process.js +11 -19
- package/lib/projectProfiles.d.ts +2 -2
- package/lib/projectProfiles.js +32 -42
- package/lib/projects/ProjectLogsManager.js +18 -21
- package/lib/projects/__tests__/AppDevModeInterface.test.js +140 -145
- package/lib/projects/__tests__/LocalDevProcess.test.js +100 -140
- package/lib/projects/__tests__/LocalDevWebsocketServer.test.js +201 -37
- package/lib/projects/__tests__/ProjectLogsManager.test.js +56 -58
- package/lib/projects/__tests__/buildAndDeploy.test.js +7 -9
- package/lib/projects/__tests__/components.test.js +9 -14
- package/lib/projects/__tests__/localDevHelpers.test.js +117 -0
- package/lib/projects/__tests__/projects.test.js +35 -40
- package/lib/projects/__tests__/structure.test.js +43 -81
- package/lib/projects/add/__tests__/legacyAddComponent.test.js +26 -28
- package/lib/projects/add/__tests__/v3AddComponent.test.js +25 -30
- package/lib/projects/add/legacyAddComponent.d.ts +1 -1
- package/lib/projects/add/legacyAddComponent.js +24 -30
- package/lib/projects/add/v3AddComponent.d.ts +1 -1
- package/lib/projects/add/v3AddComponent.js +37 -42
- package/lib/projects/buildAndDeploy.d.ts +1 -1
- package/lib/projects/buildAndDeploy.js +88 -97
- package/lib/projects/components.js +19 -25
- package/lib/projects/config.d.ts +1 -1
- package/lib/projects/config.js +32 -41
- package/lib/projects/create/__tests__/legacy.test.js +22 -57
- package/lib/projects/create/__tests__/v3.test.js +5 -7
- package/lib/projects/create/index.d.ts +3 -3
- package/lib/projects/create/index.js +19 -22
- package/lib/projects/create/legacy.d.ts +1 -1
- package/lib/projects/create/legacy.js +25 -31
- package/lib/projects/create/v3.d.ts +3 -5
- package/lib/projects/create/v3.js +47 -59
- package/lib/projects/ensureProjectExists.js +31 -37
- package/lib/projects/localDev/AppDevModeInterface.d.ts +3 -3
- package/lib/projects/localDev/AppDevModeInterface.js +58 -60
- package/lib/projects/localDev/DevServerManager.d.ts +1 -1
- package/lib/projects/localDev/DevServerManager.js +22 -26
- package/lib/projects/localDev/DevServerManagerV2.d.ts +2 -2
- package/lib/projects/localDev/DevServerManagerV2.js +15 -22
- package/lib/projects/localDev/LocalDevLogger.d.ts +1 -2
- package/lib/projects/localDev/LocalDevLogger.js +66 -66
- package/lib/projects/localDev/LocalDevManager.d.ts +1 -1
- package/lib/projects/localDev/LocalDevManager.js +106 -111
- package/lib/projects/localDev/LocalDevProcess.d.ts +6 -5
- package/lib/projects/localDev/LocalDevProcess.js +37 -50
- package/lib/projects/localDev/LocalDevState.d.ts +5 -7
- package/lib/projects/localDev/LocalDevState.js +9 -11
- package/lib/projects/localDev/LocalDevWatcher.d.ts +1 -1
- package/lib/projects/localDev/LocalDevWatcher.js +6 -11
- package/lib/projects/localDev/LocalDevWebsocketServer.d.ts +3 -3
- package/lib/projects/localDev/LocalDevWebsocketServer.js +63 -55
- package/lib/projects/localDev/helpers.d.ts +11 -4
- package/lib/projects/localDev/helpers.js +211 -174
- package/lib/projects/structure.d.ts +3 -3
- package/lib/projects/structure.js +32 -78
- package/lib/projects/ui.js +10 -13
- package/lib/projects/upload.d.ts +1 -1
- package/lib/projects/upload.js +57 -73
- package/lib/projects/urls.d.ts +1 -1
- package/lib/projects/urls.js +15 -25
- package/lib/projects/watch.d.ts +1 -1
- package/lib/projects/watch.js +48 -54
- package/lib/prompts/__tests__/downloadProjectPrompt.test.js +9 -11
- package/lib/prompts/__tests__/projectsLogsPrompt.test.js +11 -16
- package/lib/prompts/accountNamePrompt.d.ts +1 -1
- package/lib/prompts/accountNamePrompt.js +26 -31
- package/lib/prompts/accountsPrompt.js +12 -15
- package/lib/prompts/cmsFieldPrompt.js +13 -19
- package/lib/prompts/createApiSamplePrompt.d.ts +1 -1
- package/lib/prompts/createApiSamplePrompt.js +9 -12
- package/lib/prompts/createDeveloperTestAccountConfigPrompt.d.ts +2 -2
- package/lib/prompts/createDeveloperTestAccountConfigPrompt.js +27 -31
- package/lib/prompts/createFunctionPrompt.js +17 -20
- package/lib/prompts/createModulePrompt.js +12 -15
- package/lib/prompts/createTemplatePrompt.js +5 -8
- package/lib/prompts/downloadProjectPrompt.js +17 -20
- package/lib/prompts/installAppPrompt.js +19 -26
- package/lib/prompts/personalAccessKeyPrompt.d.ts +2 -2
- package/lib/prompts/personalAccessKeyPrompt.js +40 -47
- package/lib/prompts/previewPrompt.js +15 -22
- package/lib/prompts/projectAddPrompt.d.ts +1 -1
- package/lib/prompts/projectAddPrompt.js +14 -18
- package/lib/prompts/projectDevTargetAccountPrompt.d.ts +1 -1
- package/lib/prompts/projectDevTargetAccountPrompt.js +48 -54
- package/lib/prompts/projectNameAndDestPrompt.d.ts +1 -1
- package/lib/prompts/projectNameAndDestPrompt.js +22 -29
- package/lib/prompts/projectNamePrompt.js +11 -14
- package/lib/prompts/projectsLogsPrompt.js +5 -8
- package/lib/prompts/promptUtils.d.ts +1 -1
- package/lib/prompts/promptUtils.js +80 -77
- package/lib/prompts/sandboxesPrompt.d.ts +1 -1
- package/lib/prompts/sandboxesPrompt.js +26 -30
- package/lib/prompts/secretPrompt.js +10 -15
- package/lib/prompts/selectAppPrompt.js +11 -14
- package/lib/prompts/selectHubDBTablePrompt.js +24 -30
- package/lib/prompts/selectProjectTemplatePrompt.d.ts +1 -1
- package/lib/prompts/selectProjectTemplatePrompt.js +10 -13
- package/lib/prompts/selectPublicAppForMigrationPrompt.js +22 -25
- package/lib/prompts/setAsDefaultAccountPrompt.js +13 -16
- package/lib/prompts/uploadPrompt.js +11 -17
- package/lib/sandboxSync.d.ts +1 -1
- package/lib/sandboxSync.js +58 -65
- package/lib/sandboxes.d.ts +5 -1
- package/lib/sandboxes.js +72 -76
- package/lib/schema.js +13 -20
- package/lib/serverlessLogs.js +45 -52
- package/lib/testUtils.js +4 -8
- package/lib/ui/SpinniesManager.d.ts +1 -1
- package/lib/ui/SpinniesManager.js +29 -34
- package/lib/ui/boxen.js +11 -14
- package/lib/ui/git.js +14 -20
- package/lib/ui/index.d.ts +6 -0
- package/lib/ui/index.js +56 -76
- package/lib/ui/logger.js +10 -13
- package/lib/ui/serverlessFunctionLogs.js +14 -20
- package/lib/ui/spinniesUtils.js +24 -39
- package/lib/ui/supportHyperlinks.js +3 -6
- package/lib/ui/supportsColor.js +11 -17
- package/lib/ui/table.js +6 -13
- package/lib/upload.js +15 -21
- package/lib/usageTracking.js +35 -44
- package/lib/utils/__tests__/isDeepEqual.test.js +269 -0
- package/lib/utils/hasFlag.js +2 -8
- package/lib/utils/isDeepEqual.d.ts +1 -0
- package/lib/utils/isDeepEqual.js +31 -0
- package/lib/validation.js +48 -87
- package/lib/yargsUtils.d.ts +2 -1
- package/lib/yargsUtils.js +19 -16
- package/mcp-server/server.js +6 -8
- package/mcp-server/tools/index.js +15 -16
- package/mcp-server/tools/project/{AddFeatureToProject.d.ts → AddFeatureToProjectTool.d.ts} +5 -5
- package/mcp-server/tools/project/AddFeatureToProjectTool.js +76 -0
- package/mcp-server/tools/project/CreateProjectTool.d.ts +4 -4
- package/mcp-server/tools/project/CreateProjectTool.js +40 -54
- package/mcp-server/tools/project/{DeployProject.d.ts → DeployProjectTool.d.ts} +2 -2
- package/mcp-server/tools/project/DeployProjectTool.js +49 -0
- package/mcp-server/tools/project/GetConfigValuesTool.d.ts +20 -0
- package/mcp-server/tools/project/GetConfigValuesTool.js +51 -0
- package/mcp-server/tools/project/GuidedWalkthroughTool.d.ts +1 -1
- package/mcp-server/tools/project/GuidedWalkthroughTool.js +21 -25
- package/mcp-server/tools/project/UploadProjectTools.d.ts +1 -1
- package/mcp-server/tools/project/UploadProjectTools.js +12 -19
- package/mcp-server/tools/project/ValidateProjectTool.d.ts +1 -1
- package/mcp-server/tools/project/ValidateProjectTool.js +13 -17
- package/mcp-server/tools/project/__tests__/AddFeatureToProjectTool.test.d.ts +1 -0
- package/mcp-server/tools/project/__tests__/{AddFeatureToProject.test.js → AddFeatureToProjectTool.test.js} +15 -17
- package/mcp-server/tools/project/__tests__/CreateProjectTool.test.js +12 -15
- package/mcp-server/tools/project/__tests__/DeployProjectTool.test.d.ts +1 -0
- package/mcp-server/tools/project/__tests__/{DeployProject.test.js → DeployProjectTool.test.js} +6 -8
- package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.d.ts +1 -0
- package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.js +198 -0
- package/mcp-server/tools/project/__tests__/GuidedWalkthroughTool.test.js +4 -6
- package/mcp-server/tools/project/__tests__/UploadProjectTools.test.js +4 -6
- package/mcp-server/tools/project/__tests__/ValidateProjectTool.test.js +4 -6
- package/mcp-server/tools/project/constants.d.ts +1 -0
- package/mcp-server/tools/project/constants.js +14 -9
- package/mcp-server/types.js +1 -5
- package/mcp-server/utils/__tests__/command.test.js +9 -11
- package/mcp-server/utils/__tests__/project.test.js +12 -17
- package/mcp-server/utils/command.d.ts +1 -1
- package/mcp-server/utils/command.js +4 -11
- package/mcp-server/utils/content.d.ts +1 -1
- package/mcp-server/utils/content.js +2 -6
- package/mcp-server/utils/project.js +8 -14
- package/mcp-server/utils/toolUsageTracking.js +11 -14
- package/package.json +22 -15
- package/types/Cms.d.ts +1 -1
- package/types/Cms.js +1 -2
- package/types/LocalDev.d.ts +4 -6
- package/types/LocalDev.js +1 -2
- package/types/ProjectComponents.d.ts +2 -2
- package/types/ProjectComponents.js +1 -2
- package/types/Projects.d.ts +1 -1
- package/types/Projects.js +2 -5
- package/types/Prompts.js +1 -2
- package/types/Sandboxes.js +1 -2
- package/types/Yargs.js +1 -2
- package/ui/index.d.ts +1 -0
- package/ui/index.js +6 -0
- package/mcp-server/tools/project/AddFeatureToProject.js +0 -88
- package/mcp-server/tools/project/DeployProject.js +0 -53
- /package/{mcp-server/tools/project/__tests__/AddFeatureToProject.test.d.ts → lib/projects/__tests__/localDevHelpers.test.d.ts} +0 -0
- /package/{mcp-server/tools/project/__tests__/DeployProject.test.d.ts → lib/utils/__tests__/isDeepEqual.test.d.ts} +0 -0
package/lib/validation.js
CHANGED
|
@@ -1,152 +1,113 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.validateAccount = validateAccount;
|
|
37
|
-
exports.validateCmsPublishMode = validateCmsPublishMode;
|
|
38
|
-
exports.fileExists = fileExists;
|
|
39
|
-
exports.checkAndConvertToJson = checkAndConvertToJson;
|
|
40
|
-
const fs = __importStar(require("fs"));
|
|
41
|
-
const path = __importStar(require("path"));
|
|
42
|
-
const logger_1 = require("@hubspot/local-dev-lib/logger");
|
|
43
|
-
const files_1 = require("@hubspot/local-dev-lib/constants/files");
|
|
44
|
-
const auth_1 = require("@hubspot/local-dev-lib/constants/auth");
|
|
45
|
-
const text_1 = require("@hubspot/local-dev-lib/text");
|
|
46
|
-
const config_1 = require("@hubspot/local-dev-lib/config");
|
|
47
|
-
const oauth_1 = require("@hubspot/local-dev-lib/oauth");
|
|
48
|
-
const personalAccessKey_1 = require("@hubspot/local-dev-lib/personalAccessKey");
|
|
49
|
-
const path_1 = require("@hubspot/local-dev-lib/path");
|
|
50
|
-
const commonOpts_1 = require("./commonOpts");
|
|
51
|
-
const index_1 = require("./errorHandlers/index");
|
|
52
|
-
async function validateAccount(options) {
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { logger } from '@hubspot/local-dev-lib/logger';
|
|
4
|
+
import { CMS_PUBLISH_MODE } from '@hubspot/local-dev-lib/constants/files';
|
|
5
|
+
import { API_KEY_AUTH_METHOD, OAUTH_AUTH_METHOD, PERSONAL_ACCESS_KEY_AUTH_METHOD, } from '@hubspot/local-dev-lib/constants/auth';
|
|
6
|
+
import { commaSeparatedValues } from '@hubspot/local-dev-lib/text';
|
|
7
|
+
import { getConfigPath, getAccountConfig, getAccountId, loadConfigFromEnvironment, } from '@hubspot/local-dev-lib/config';
|
|
8
|
+
import { getOauthManager } from '@hubspot/local-dev-lib/oauth';
|
|
9
|
+
import { accessTokenForPersonalAccessKey } from '@hubspot/local-dev-lib/personalAccessKey';
|
|
10
|
+
import { getAbsoluteFilePath, getCwd, getExt, } from '@hubspot/local-dev-lib/path';
|
|
11
|
+
import { getCmsPublishMode } from './commonOpts.js';
|
|
12
|
+
import { logError } from './errorHandlers/index.js';
|
|
13
|
+
export async function validateAccount(options) {
|
|
53
14
|
const { derivedAccountId, userProvidedAccount } = options;
|
|
54
|
-
const accountId =
|
|
15
|
+
const accountId = getAccountId(derivedAccountId);
|
|
55
16
|
if (!accountId) {
|
|
56
17
|
if (userProvidedAccount) {
|
|
57
|
-
|
|
18
|
+
logger.error(`The account "${userProvidedAccount}" could not be found in the config`);
|
|
58
19
|
}
|
|
59
20
|
else {
|
|
60
|
-
|
|
21
|
+
logger.error('An account needs to be supplied either via "--account" or through setting a "defaultPortal"');
|
|
61
22
|
}
|
|
62
23
|
return false;
|
|
63
24
|
}
|
|
64
|
-
if (userProvidedAccount &&
|
|
25
|
+
if (userProvidedAccount && loadConfigFromEnvironment()) {
|
|
65
26
|
throw new Error('Cannot specify an account when environment variables are supplied. Please unset the environment variables or do not use the "--account" flag.');
|
|
66
27
|
}
|
|
67
|
-
const accountConfig =
|
|
28
|
+
const accountConfig = getAccountConfig(accountId);
|
|
68
29
|
if (!accountConfig) {
|
|
69
|
-
|
|
30
|
+
logger.error(`The account ${accountId} has not been configured`);
|
|
70
31
|
return false;
|
|
71
32
|
}
|
|
72
33
|
const { authType, auth, apiKey, personalAccessKey } = accountConfig;
|
|
73
34
|
if (typeof authType === 'string' && authType !== authType.toLowerCase()) {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
35
|
+
logger.error(`Invalid "authType" value "${authType}" for account "${accountId}" in config file: ${getConfigPath()}. Valid values are ${commaSeparatedValues([
|
|
36
|
+
PERSONAL_ACCESS_KEY_AUTH_METHOD,
|
|
37
|
+
OAUTH_AUTH_METHOD,
|
|
38
|
+
API_KEY_AUTH_METHOD,
|
|
78
39
|
].map(method => method.value))}.`);
|
|
79
40
|
}
|
|
80
41
|
if (authType === 'oauth2') {
|
|
81
42
|
if (typeof auth !== 'object') {
|
|
82
|
-
|
|
43
|
+
logger.error(`The OAuth2 auth configuration for account ${accountId} is missing`);
|
|
83
44
|
return false;
|
|
84
45
|
}
|
|
85
46
|
const { clientId, clientSecret, tokenInfo } = auth;
|
|
86
47
|
if (!clientId || !clientSecret || !tokenInfo || !tokenInfo.refreshToken) {
|
|
87
|
-
|
|
88
|
-
|
|
48
|
+
logger.error(`The OAuth2 configuration for account ${accountId} is incorrect`);
|
|
49
|
+
logger.error('Run "hs auth --type=oauth2" to reauthenticate');
|
|
89
50
|
return false;
|
|
90
51
|
}
|
|
91
|
-
const oauth =
|
|
52
|
+
const oauth = getOauthManager(accountId, accountConfig);
|
|
92
53
|
try {
|
|
93
54
|
let accessToken;
|
|
94
55
|
if (oauth) {
|
|
95
56
|
accessToken = await oauth.accessToken();
|
|
96
57
|
}
|
|
97
58
|
if (!accessToken) {
|
|
98
|
-
|
|
59
|
+
logger.error(`The OAuth2 access token could not be found for accountId ${accountId}`);
|
|
99
60
|
return false;
|
|
100
61
|
}
|
|
101
62
|
}
|
|
102
63
|
catch (e) {
|
|
103
|
-
|
|
64
|
+
logError(e);
|
|
104
65
|
return false;
|
|
105
66
|
}
|
|
106
67
|
}
|
|
107
68
|
else if (authType === 'personalaccesskey') {
|
|
108
69
|
if (!personalAccessKey) {
|
|
109
|
-
|
|
70
|
+
logger.error(`The account "${accountId}" is configured to use a access key for authentication and is missing a "personalAccessKey" in the configuration file`);
|
|
110
71
|
return false;
|
|
111
72
|
}
|
|
112
73
|
try {
|
|
113
|
-
const accessToken = await
|
|
74
|
+
const accessToken = await accessTokenForPersonalAccessKey(accountId);
|
|
114
75
|
if (!accessToken) {
|
|
115
|
-
|
|
76
|
+
logger.error(`An OAuth2 access token for account "${accountId} could not be retrieved using the "personalAccessKey" provided`);
|
|
116
77
|
return false;
|
|
117
78
|
}
|
|
118
79
|
}
|
|
119
80
|
catch (e) {
|
|
120
|
-
|
|
81
|
+
logError(e);
|
|
121
82
|
return false;
|
|
122
83
|
}
|
|
123
84
|
}
|
|
124
85
|
else if (!apiKey) {
|
|
125
|
-
|
|
86
|
+
logger.error(`The accountId ${accountId} is missing authentication configuration`);
|
|
126
87
|
return false;
|
|
127
88
|
}
|
|
128
89
|
return true;
|
|
129
90
|
}
|
|
130
|
-
function validateCmsPublishMode(options) {
|
|
131
|
-
const cmsPublishMode =
|
|
132
|
-
if (
|
|
91
|
+
export function validateCmsPublishMode(options) {
|
|
92
|
+
const cmsPublishMode = getCmsPublishMode(options);
|
|
93
|
+
if (CMS_PUBLISH_MODE[cmsPublishMode]) {
|
|
133
94
|
return true;
|
|
134
95
|
}
|
|
135
|
-
const modesMessage = `Available CMS publish modes are: ${Object.values(
|
|
96
|
+
const modesMessage = `Available CMS publish modes are: ${Object.values(CMS_PUBLISH_MODE).join(', ')}.`;
|
|
136
97
|
if (cmsPublishMode != null) {
|
|
137
|
-
|
|
98
|
+
logger.error([
|
|
138
99
|
`The CMS publish mode "${cmsPublishMode}" is invalid.`,
|
|
139
100
|
modesMessage,
|
|
140
101
|
].join(' '));
|
|
141
102
|
}
|
|
142
103
|
else {
|
|
143
|
-
|
|
104
|
+
logger.error(['The CMS publish mode option is missing.', modesMessage].join(' '));
|
|
144
105
|
}
|
|
145
106
|
return false;
|
|
146
107
|
}
|
|
147
|
-
function fileExists(_path) {
|
|
108
|
+
export function fileExists(_path) {
|
|
148
109
|
try {
|
|
149
|
-
const absoluteSrcPath = path.resolve(
|
|
110
|
+
const absoluteSrcPath = path.resolve(getCwd(), _path);
|
|
150
111
|
if (!absoluteSrcPath)
|
|
151
112
|
return false;
|
|
152
113
|
const stats = fs.statSync(absoluteSrcPath);
|
|
@@ -160,14 +121,14 @@ function fileExists(_path) {
|
|
|
160
121
|
}
|
|
161
122
|
return true;
|
|
162
123
|
}
|
|
163
|
-
function checkAndConvertToJson(_path) {
|
|
164
|
-
const filePath =
|
|
124
|
+
export function checkAndConvertToJson(_path) {
|
|
125
|
+
const filePath = getAbsoluteFilePath(_path);
|
|
165
126
|
if (!fileExists(filePath)) {
|
|
166
|
-
|
|
127
|
+
logger.error(`The path "${_path}" is not a path to a file`);
|
|
167
128
|
return null;
|
|
168
129
|
}
|
|
169
|
-
if (
|
|
170
|
-
|
|
130
|
+
if (getExt(_path) !== 'json') {
|
|
131
|
+
logger.error(`The file "${_path}" must be a valid JSON file`);
|
|
171
132
|
return null;
|
|
172
133
|
}
|
|
173
134
|
let result;
|
|
@@ -175,7 +136,7 @@ function checkAndConvertToJson(_path) {
|
|
|
175
136
|
result = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
|
|
176
137
|
}
|
|
177
138
|
catch (e) {
|
|
178
|
-
|
|
139
|
+
logger.error(`The file "${_path}" contains invalid JSON`);
|
|
179
140
|
result = null;
|
|
180
141
|
}
|
|
181
142
|
return result;
|
package/lib/yargsUtils.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Argv } from 'yargs';
|
|
2
|
-
import { hasFlag } from './utils/hasFlag';
|
|
2
|
+
import { hasFlag } from './utils/hasFlag.js';
|
|
3
3
|
export { hasFlag };
|
|
4
4
|
export declare function makeYargsBuilder<T>(callback: (yargs: Argv) => Argv<T>, command: string | string[], describe?: string, options?: {
|
|
5
5
|
useGlobalOptions?: boolean;
|
|
@@ -13,3 +13,4 @@ export declare function makeYargsBuilder<T>(callback: (yargs: Argv) => Argv<T>,
|
|
|
13
13
|
};
|
|
14
14
|
useJSONOutputOptions?: boolean;
|
|
15
15
|
}): (yargs: Argv) => Promise<Argv<T>>;
|
|
16
|
+
export declare function getExclusiveConflicts(options: string[]): Record<string, string[]>;
|
package/lib/yargsUtils.js
CHANGED
|
@@ -1,39 +1,42 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const hasFlag_1 = require("./utils/hasFlag");
|
|
7
|
-
Object.defineProperty(exports, "hasFlag", { enumerable: true, get: function () { return hasFlag_1.hasFlag; } });
|
|
8
|
-
function makeYargsBuilder(callback, command, describe, options = {}) {
|
|
1
|
+
import { addCustomHelpOutput, addTestingOptions, addAccountOptions, addConfigOptions, addGlobalOptions, addUseEnvironmentOptions, addCmsPublishModeOptions, addJSONOutputOptions, } from './commonOpts.js';
|
|
2
|
+
import { hasFlag } from './utils/hasFlag.js';
|
|
3
|
+
// Re-export for backwards compatibility
|
|
4
|
+
export { hasFlag };
|
|
5
|
+
export function makeYargsBuilder(callback, command, describe, options = {}) {
|
|
9
6
|
return async function (yargs) {
|
|
10
7
|
if (options.useGlobalOptions) {
|
|
11
|
-
|
|
8
|
+
addGlobalOptions(yargs);
|
|
12
9
|
}
|
|
13
10
|
if (options.useAccountOptions) {
|
|
14
|
-
|
|
11
|
+
addAccountOptions(yargs);
|
|
15
12
|
}
|
|
16
13
|
if (options.useConfigOptions) {
|
|
17
|
-
|
|
14
|
+
addConfigOptions(yargs);
|
|
18
15
|
}
|
|
19
16
|
if (options.useEnvironmentOptions) {
|
|
20
|
-
|
|
17
|
+
addUseEnvironmentOptions(yargs);
|
|
21
18
|
}
|
|
22
19
|
if (options.useTestingOptions) {
|
|
23
|
-
|
|
20
|
+
addTestingOptions(yargs);
|
|
24
21
|
}
|
|
25
22
|
if (options.useJSONOutputOptions) {
|
|
26
|
-
|
|
23
|
+
addJSONOutputOptions(yargs);
|
|
27
24
|
}
|
|
28
25
|
if (options.useCmsPublishModeOptions) {
|
|
29
26
|
const opts = typeof options.useCmsPublishModeOptions === 'object'
|
|
30
27
|
? options.useCmsPublishModeOptions
|
|
31
28
|
: { write: true };
|
|
32
|
-
|
|
29
|
+
addCmsPublishModeOptions(yargs, opts);
|
|
33
30
|
}
|
|
34
31
|
const result = callback(yargs);
|
|
35
32
|
// Must go last to pick up available options
|
|
36
|
-
await
|
|
33
|
+
await addCustomHelpOutput(result, command, describe);
|
|
37
34
|
return result;
|
|
38
35
|
};
|
|
39
36
|
}
|
|
37
|
+
export function getExclusiveConflicts(options) {
|
|
38
|
+
return options.reduce((acc, curr) => {
|
|
39
|
+
acc[curr] = options.filter(s => s !== curr);
|
|
40
|
+
return acc;
|
|
41
|
+
}, {});
|
|
42
|
+
}
|
package/mcp-server/server.js
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
const tools_1 = require("./tools");
|
|
6
|
-
const server = new mcp_js_1.McpServer({
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
3
|
+
import { registerProjectTools } from './tools/index.js';
|
|
4
|
+
const server = new McpServer({
|
|
7
5
|
name: 'HubSpot CLI MCP Server',
|
|
8
6
|
version: '0.0.1',
|
|
9
7
|
description: 'Helps perform tasks for local development of HubSpot projects.',
|
|
@@ -12,7 +10,7 @@ const server = new mcp_js_1.McpServer({
|
|
|
12
10
|
prompts: {},
|
|
13
11
|
},
|
|
14
12
|
});
|
|
15
|
-
|
|
13
|
+
registerProjectTools(server);
|
|
16
14
|
// Start receiving messages on stdin and sending messages on stdout
|
|
17
|
-
const transport = new
|
|
15
|
+
const transport = new StdioServerTransport();
|
|
18
16
|
server.connect(transport);
|
|
@@ -1,19 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const ValidateProjectTool_1 = require("./project/ValidateProjectTool");
|
|
10
|
-
function registerProjectTools(mcpServer) {
|
|
1
|
+
import { UploadProjectTools } from './project/UploadProjectTools.js';
|
|
2
|
+
import { CreateProjectTool } from './project/CreateProjectTool.js';
|
|
3
|
+
import { GuidedWalkthroughTool } from './project/GuidedWalkthroughTool.js';
|
|
4
|
+
import { DeployProjectTool } from './project/DeployProjectTool.js';
|
|
5
|
+
import { AddFeatureToProjectTool } from './project/AddFeatureToProjectTool.js';
|
|
6
|
+
import { ValidateProjectTool } from './project/ValidateProjectTool.js';
|
|
7
|
+
import { GetConfigValuesTool } from './project/GetConfigValuesTool.js';
|
|
8
|
+
export function registerProjectTools(mcpServer) {
|
|
11
9
|
return [
|
|
12
|
-
new
|
|
13
|
-
new
|
|
14
|
-
new
|
|
15
|
-
new
|
|
16
|
-
new
|
|
17
|
-
new
|
|
10
|
+
new UploadProjectTools(mcpServer).register(),
|
|
11
|
+
new CreateProjectTool(mcpServer).register(),
|
|
12
|
+
new GuidedWalkthroughTool(mcpServer).register(),
|
|
13
|
+
new DeployProjectTool(mcpServer).register(),
|
|
14
|
+
new AddFeatureToProjectTool(mcpServer).register(),
|
|
15
|
+
new ValidateProjectTool(mcpServer).register(),
|
|
16
|
+
new GetConfigValuesTool(mcpServer).register(),
|
|
18
17
|
];
|
|
19
18
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TextContentResponse, Tool } from '../../types';
|
|
1
|
+
import { TextContentResponse, Tool } from '../../types.js';
|
|
2
2
|
import { McpServer, RegisteredTool } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
declare const inputSchemaZodObject: z.ZodObject<{
|
|
@@ -6,22 +6,22 @@ declare const inputSchemaZodObject: z.ZodObject<{
|
|
|
6
6
|
addApp: z.ZodBoolean;
|
|
7
7
|
distribution: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<"marketplace">, z.ZodLiteral<"private">]>>;
|
|
8
8
|
auth: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<"static">, z.ZodLiteral<"oauth">]>>;
|
|
9
|
-
features: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodLiteral<"card">, z.ZodLiteral<"settings">, z.ZodLiteral<"app-function">, z.ZodLiteral<"webhooks">]>, "many">>;
|
|
9
|
+
features: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodLiteral<"card">, z.ZodLiteral<"settings">, z.ZodLiteral<"app-function">, z.ZodLiteral<"webhooks">, z.ZodLiteral<"workflow-action">]>, "many">>;
|
|
10
10
|
}, "strip", z.ZodTypeAny, {
|
|
11
11
|
absoluteProjectPath: string;
|
|
12
12
|
addApp: boolean;
|
|
13
13
|
auth?: "oauth" | "static" | undefined;
|
|
14
14
|
distribution?: "marketplace" | "private" | undefined;
|
|
15
|
-
features?: ("card" | "settings" | "app-function" | "webhooks")[] | undefined;
|
|
15
|
+
features?: ("card" | "settings" | "app-function" | "webhooks" | "workflow-action")[] | undefined;
|
|
16
16
|
}, {
|
|
17
17
|
absoluteProjectPath: string;
|
|
18
18
|
addApp: boolean;
|
|
19
19
|
auth?: "oauth" | "static" | undefined;
|
|
20
20
|
distribution?: "marketplace" | "private" | undefined;
|
|
21
|
-
features?: ("card" | "settings" | "app-function" | "webhooks")[] | undefined;
|
|
21
|
+
features?: ("card" | "settings" | "app-function" | "webhooks" | "workflow-action")[] | undefined;
|
|
22
22
|
}>;
|
|
23
23
|
export type AddFeatureInputSchema = z.infer<typeof inputSchemaZodObject>;
|
|
24
|
-
export declare class
|
|
24
|
+
export declare class AddFeatureToProjectTool extends Tool<AddFeatureInputSchema> {
|
|
25
25
|
constructor(mcpServer: McpServer);
|
|
26
26
|
handler({ absoluteProjectPath, distribution, auth, features, addApp, }: AddFeatureInputSchema): Promise<TextContentResponse>;
|
|
27
27
|
register(): RegisteredTool;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { Tool } from '../../types.js';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { APP_AUTH_TYPES, APP_DISTRIBUTION_TYPES, } from '../../../lib/constants.js';
|
|
4
|
+
import { addFlag } from '../../utils/command.js';
|
|
5
|
+
import { absoluteProjectPath, features } from './constants.js';
|
|
6
|
+
import { runCommandInDir } from '../../utils/project.js';
|
|
7
|
+
import { formatTextContents, formatTextContent } from '../../utils/content.js';
|
|
8
|
+
import { trackToolUsage } from '../../utils/toolUsageTracking.js';
|
|
9
|
+
const inputSchema = {
|
|
10
|
+
absoluteProjectPath,
|
|
11
|
+
addApp: z
|
|
12
|
+
.boolean()
|
|
13
|
+
.describe('Should an app be added? If there is no app in the project, an app must be added to add a feature'),
|
|
14
|
+
distribution: z
|
|
15
|
+
.optional(z.union([
|
|
16
|
+
z.literal(APP_DISTRIBUTION_TYPES.MARKETPLACE),
|
|
17
|
+
z.literal(APP_DISTRIBUTION_TYPES.PRIVATE),
|
|
18
|
+
]))
|
|
19
|
+
.describe('Private is used if you do not wish to distribute your application on the HubSpot marketplace. If not specified by the user, do not choose for them. This cannot be changed after a project is uploaded.'),
|
|
20
|
+
auth: z
|
|
21
|
+
.optional(z.union([
|
|
22
|
+
z.literal(APP_AUTH_TYPES.STATIC),
|
|
23
|
+
z.literal(APP_AUTH_TYPES.OAUTH),
|
|
24
|
+
]))
|
|
25
|
+
.describe('Static uses a static non changing authentication token, and is only available for private distribution. If not specified by the user, do not choose for them. This cannot be changed after a project is uploaded.'),
|
|
26
|
+
features,
|
|
27
|
+
};
|
|
28
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
29
|
+
const inputSchemaZodObject = z.object({
|
|
30
|
+
...inputSchema,
|
|
31
|
+
});
|
|
32
|
+
const toolName = 'add-feature-to-hubspot-project';
|
|
33
|
+
export class AddFeatureToProjectTool extends Tool {
|
|
34
|
+
constructor(mcpServer) {
|
|
35
|
+
super(mcpServer);
|
|
36
|
+
}
|
|
37
|
+
async handler({ absoluteProjectPath, distribution, auth, features, addApp, }) {
|
|
38
|
+
try {
|
|
39
|
+
await trackToolUsage(toolName);
|
|
40
|
+
let command = `hs project add`;
|
|
41
|
+
const content = [];
|
|
42
|
+
if (distribution) {
|
|
43
|
+
command = addFlag(command, 'distribution', distribution);
|
|
44
|
+
}
|
|
45
|
+
else if (addApp) {
|
|
46
|
+
content.push(formatTextContent(`Ask the user how they would you like to distribute the application. Options are ${APP_DISTRIBUTION_TYPES.MARKETPLACE} and ${APP_DISTRIBUTION_TYPES.PRIVATE}`));
|
|
47
|
+
}
|
|
48
|
+
if (auth) {
|
|
49
|
+
command = addFlag(command, 'auth', auth);
|
|
50
|
+
}
|
|
51
|
+
else if (addApp) {
|
|
52
|
+
content.push(formatTextContent(`Ask the user which auth type they would like to use. Options are ${APP_AUTH_TYPES.STATIC} and ${APP_AUTH_TYPES.OAUTH}`));
|
|
53
|
+
}
|
|
54
|
+
if (content.length > 0) {
|
|
55
|
+
return {
|
|
56
|
+
content,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
// If features isn't provided, pass an empty array to bypass the prompt
|
|
60
|
+
command = addFlag(command, 'features', features || []);
|
|
61
|
+
const { stdout, stderr } = await runCommandInDir(absoluteProjectPath, command);
|
|
62
|
+
return formatTextContents(stdout, stderr);
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
return formatTextContents(error instanceof Error ? error.message : `${error}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
register() {
|
|
69
|
+
return this.mcpServer.registerTool(toolName, {
|
|
70
|
+
title: 'Add feature to HubSpot Project',
|
|
71
|
+
description: `Adds a feature to an existing HubSpot project.
|
|
72
|
+
Only works for projects with platformVersion '2025.2' and beyond`,
|
|
73
|
+
inputSchema,
|
|
74
|
+
}, this.handler);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TextContentResponse, Tool } from '../../types';
|
|
1
|
+
import { TextContentResponse, Tool } from '../../types.js';
|
|
2
2
|
import { McpServer, RegisteredTool } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
declare const inputSchemaZodObject: z.ZodObject<{
|
|
@@ -8,7 +8,7 @@ declare const inputSchemaZodObject: z.ZodObject<{
|
|
|
8
8
|
projectBase: z.ZodUnion<[z.ZodLiteral<"empty">, z.ZodLiteral<"app">]>;
|
|
9
9
|
distribution: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<"marketplace">, z.ZodLiteral<"private">]>>;
|
|
10
10
|
auth: z.ZodOptional<z.ZodOptional<z.ZodUnion<[z.ZodLiteral<"static">, z.ZodLiteral<"oauth">]>>>;
|
|
11
|
-
features: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodLiteral<"card">, z.ZodLiteral<"settings">, z.ZodLiteral<"app-function">, z.ZodLiteral<"webhooks">]>, "many">>;
|
|
11
|
+
features: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodLiteral<"card">, z.ZodLiteral<"settings">, z.ZodLiteral<"app-function">, z.ZodLiteral<"webhooks">, z.ZodLiteral<"workflow-action">]>, "many">>;
|
|
12
12
|
}, "strip", z.ZodTypeAny, {
|
|
13
13
|
projectBase: "app" | "empty";
|
|
14
14
|
absoluteCurrentWorkingDirectory: string;
|
|
@@ -16,7 +16,7 @@ declare const inputSchemaZodObject: z.ZodObject<{
|
|
|
16
16
|
name?: string | undefined;
|
|
17
17
|
auth?: "oauth" | "static" | undefined;
|
|
18
18
|
distribution?: "marketplace" | "private" | undefined;
|
|
19
|
-
features?: ("card" | "settings" | "app-function" | "webhooks")[] | undefined;
|
|
19
|
+
features?: ("card" | "settings" | "app-function" | "webhooks" | "workflow-action")[] | undefined;
|
|
20
20
|
}, {
|
|
21
21
|
projectBase: "app" | "empty";
|
|
22
22
|
absoluteCurrentWorkingDirectory: string;
|
|
@@ -24,7 +24,7 @@ declare const inputSchemaZodObject: z.ZodObject<{
|
|
|
24
24
|
name?: string | undefined;
|
|
25
25
|
auth?: "oauth" | "static" | undefined;
|
|
26
26
|
distribution?: "marketplace" | "private" | undefined;
|
|
27
|
-
features?: ("card" | "settings" | "app-function" | "webhooks")[] | undefined;
|
|
27
|
+
features?: ("card" | "settings" | "app-function" | "webhooks" | "workflow-action")[] | undefined;
|
|
28
28
|
}>;
|
|
29
29
|
export type CreateProjectInputSchema = z.infer<typeof inputSchemaZodObject>;
|
|
30
30
|
export declare class CreateProjectTool extends Tool<CreateProjectInputSchema> {
|