@hubspot/cli 8.0.10-experimental.6 → 8.0.10-experimental.7
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/migrate.d.ts +77 -0
- package/api/migrate.js +55 -0
- package/bin/cli.d.ts +2 -0
- package/bin/cli.js +136 -0
- package/bin/hs.d.ts +2 -0
- package/bin/hscms.d.ts +2 -0
- package/bin/silenceErrors.d.ts +2 -0
- package/bin/silenceErrors.js +11 -0
- package/commands/account/auth.d.ts +8 -0
- package/commands/account/auth.js +102 -0
- package/commands/account/clean.d.ts +6 -0
- package/commands/account/clean.js +125 -0
- package/commands/account/createOverride.d.ts +6 -0
- package/commands/account/createOverride.js +93 -0
- package/commands/account/info.d.ts +4 -0
- package/commands/account/info.js +75 -0
- package/commands/account/list.d.ts +4 -0
- package/commands/account/list.js +107 -0
- package/commands/account/remove.d.ts +6 -0
- package/commands/account/remove.js +87 -0
- package/commands/account/removeOverride.d.ts +6 -0
- package/commands/account/removeOverride.js +71 -0
- package/commands/account/rename.d.ts +7 -0
- package/commands/account/rename.js +51 -0
- package/commands/account/use.d.ts +6 -0
- package/commands/account/use.js +93 -0
- package/commands/account.d.ts +3 -0
- package/commands/account.js +35 -0
- package/commands/app/migrate.d.ts +6 -0
- package/commands/app/migrate.js +96 -0
- package/commands/app/secret/add.d.ts +7 -0
- package/commands/app/secret/add.js +63 -0
- package/commands/app/secret/delete.d.ts +8 -0
- package/commands/app/secret/delete.js +86 -0
- package/commands/app/secret/list.d.ts +6 -0
- package/commands/app/secret/list.js +63 -0
- package/commands/app/secret/update.d.ts +7 -0
- package/commands/app/secret/update.js +76 -0
- package/commands/app/secret.d.ts +3 -0
- package/commands/app/secret.js +26 -0
- package/commands/app.d.ts +3 -0
- package/commands/app.js +18 -0
- package/commands/auth.d.ts +9 -0
- package/commands/auth.js +190 -0
- package/commands/cms/app/create.d.ts +9 -0
- package/commands/cms/app/create.js +81 -0
- package/commands/cms/app.d.ts +3 -0
- package/commands/cms/app.js +17 -0
- package/commands/cms/convertFields.d.ts +7 -0
- package/commands/cms/convertFields.js +97 -0
- package/commands/cms/delete.d.ts +6 -0
- package/commands/cms/delete.js +43 -0
- package/commands/cms/fetch.d.ts +12 -0
- package/commands/cms/fetch.js +80 -0
- package/commands/cms/function/create.d.ts +12 -0
- package/commands/cms/function/create.js +84 -0
- package/commands/cms/function/deploy.d.ts +6 -0
- package/commands/cms/function/deploy.js +89 -0
- package/commands/cms/function/list.d.ts +6 -0
- package/commands/cms/function/list.js +59 -0
- package/commands/cms/function/logs.d.ts +10 -0
- package/commands/cms/function/logs.js +136 -0
- package/commands/cms/function/server.d.ts +10 -0
- package/commands/cms/function/server.js +69 -0
- package/commands/cms/function.d.ts +3 -0
- package/commands/cms/function.js +27 -0
- package/commands/cms/getReactModule.d.ts +7 -0
- package/commands/cms/getReactModule.js +77 -0
- package/commands/cms/lighthouseScore.d.ts +8 -0
- package/commands/cms/lighthouseScore.js +281 -0
- package/commands/cms/lint.d.ts +6 -0
- package/commands/cms/lint.js +83 -0
- package/commands/cms/list.d.ts +6 -0
- package/commands/cms/list.js +96 -0
- package/commands/cms/module/create.d.ts +11 -0
- package/commands/cms/module/create.js +84 -0
- package/commands/cms/module/marketplace-validate.d.ts +6 -0
- package/commands/cms/module/marketplace-validate.js +62 -0
- package/commands/cms/module.d.ts +3 -0
- package/commands/cms/module.js +21 -0
- package/commands/cms/mv.d.ts +7 -0
- package/commands/cms/mv.js +60 -0
- package/commands/cms/template/create.d.ts +9 -0
- package/commands/cms/template/create.js +72 -0
- package/commands/cms/template.d.ts +3 -0
- package/commands/cms/template.js +17 -0
- package/commands/cms/theme/create.d.ts +6 -0
- package/commands/cms/theme/create.js +58 -0
- package/commands/cms/theme/generate-selectors.d.ts +6 -0
- package/commands/cms/theme/generate-selectors.js +171 -0
- package/commands/cms/theme/marketplace-validate.d.ts +6 -0
- package/commands/cms/theme/marketplace-validate.js +64 -0
- package/commands/cms/theme/preview.d.ts +11 -0
- package/commands/cms/theme/preview.js +126 -0
- package/commands/cms/theme.d.ts +3 -0
- package/commands/cms/theme.js +25 -0
- package/commands/cms/upload.d.ts +12 -0
- package/commands/cms/upload.js +212 -0
- package/commands/cms/watch.d.ts +13 -0
- package/commands/cms/watch.js +132 -0
- package/commands/cms/webpack/create.d.ts +6 -0
- package/commands/cms/webpack/create.js +58 -0
- package/commands/cms/webpack.d.ts +3 -0
- package/commands/cms/webpack.js +17 -0
- package/commands/cms.d.ts +3 -0
- package/commands/cms.js +49 -0
- package/commands/completion.d.ts +3 -0
- package/commands/completion.js +27 -0
- package/commands/config/migrate.d.ts +6 -0
- package/commands/config/migrate.js +70 -0
- package/commands/config/set.d.ts +11 -0
- package/commands/config/set.js +141 -0
- package/commands/config.d.ts +3 -0
- package/commands/config.js +18 -0
- package/commands/customObject/create.d.ts +7 -0
- package/commands/customObject/create.js +64 -0
- package/commands/customObject/createSchema.d.ts +6 -0
- package/commands/customObject/createSchema.js +55 -0
- package/commands/customObject/deleteSchema.d.ts +7 -0
- package/commands/customObject/deleteSchema.js +69 -0
- package/commands/customObject/fetchAllSchemas.d.ts +6 -0
- package/commands/customObject/fetchAllSchemas.js +57 -0
- package/commands/customObject/fetchSchema.d.ts +7 -0
- package/commands/customObject/fetchSchema.js +67 -0
- package/commands/customObject/listSchemas.d.ts +4 -0
- package/commands/customObject/listSchemas.js +35 -0
- package/commands/customObject/updateSchema.d.ts +7 -0
- package/commands/customObject/updateSchema.js +70 -0
- package/commands/customObject.d.ts +3 -0
- package/commands/customObject.js +38 -0
- package/commands/doctor.d.ts +6 -0
- package/commands/doctor.js +70 -0
- package/commands/feedback.d.ts +4 -0
- package/commands/feedback.js +32 -0
- package/commands/filemanager/fetch.d.ts +8 -0
- package/commands/filemanager/fetch.js +58 -0
- package/commands/filemanager/upload.d.ts +7 -0
- package/commands/filemanager/upload.js +97 -0
- package/commands/filemanager.d.ts +3 -0
- package/commands/filemanager.js +18 -0
- package/commands/getStarted.d.ts +8 -0
- package/commands/getStarted.js +322 -0
- package/commands/hubdb/clear.d.ts +7 -0
- package/commands/hubdb/clear.js +58 -0
- package/commands/hubdb/create.d.ts +6 -0
- package/commands/hubdb/create.js +74 -0
- package/commands/hubdb/delete.d.ts +6 -0
- package/commands/hubdb/delete.js +68 -0
- package/commands/hubdb/fetch.d.ts +7 -0
- package/commands/hubdb/fetch.js +55 -0
- package/commands/hubdb/list.d.ts +4 -0
- package/commands/hubdb/list.js +79 -0
- package/commands/hubdb.d.ts +5 -0
- package/commands/hubdb.js +27 -0
- package/commands/init.d.ts +8 -0
- package/commands/init.js +200 -0
- package/commands/mcp/setup.d.ts +6 -0
- package/commands/mcp/setup.js +36 -0
- package/commands/mcp/start.d.ts +6 -0
- package/commands/mcp/start.js +72 -0
- package/commands/mcp.d.ts +3 -0
- package/commands/mcp.js +20 -0
- package/commands/open.d.ts +7 -0
- package/commands/open.js +70 -0
- package/commands/project/add.d.ts +10 -0
- package/commands/project/add.js +79 -0
- package/commands/project/cloneApp.d.ts +1 -0
- package/commands/project/cloneApp.js +1 -0
- package/commands/project/create.d.ts +4 -0
- package/commands/project/create.js +175 -0
- package/commands/project/deploy.d.ts +11 -0
- package/commands/project/deploy.js +196 -0
- package/commands/project/dev/deprecatedFlow.d.ts +11 -0
- package/commands/project/dev/deprecatedFlow.js +135 -0
- package/commands/project/dev/index.d.ts +5 -0
- package/commands/project/dev/index.js +174 -0
- package/commands/project/dev/unifiedFlow.d.ts +14 -0
- package/commands/project/dev/unifiedFlow.js +162 -0
- package/commands/project/download.d.ts +8 -0
- package/commands/project/download.js +95 -0
- package/commands/project/installDeps.d.ts +6 -0
- package/commands/project/installDeps.js +80 -0
- package/commands/project/lint.d.ts +6 -0
- package/commands/project/lint.js +178 -0
- package/commands/project/list.d.ts +4 -0
- package/commands/project/list.js +62 -0
- package/commands/project/listBuilds.d.ts +7 -0
- package/commands/project/listBuilds.js +120 -0
- package/commands/project/logs.d.ts +10 -0
- package/commands/project/logs.js +119 -0
- package/commands/project/migrate.d.ts +7 -0
- package/commands/project/migrate.js +91 -0
- package/commands/project/open.d.ts +6 -0
- package/commands/project/open.js +61 -0
- package/commands/project/profile/add.d.ts +7 -0
- package/commands/project/profile/add.js +203 -0
- package/commands/project/profile/delete.d.ts +6 -0
- package/commands/project/profile/delete.js +129 -0
- package/commands/project/profile.d.ts +3 -0
- package/commands/project/profile.js +19 -0
- package/commands/project/updateDeps.d.ts +6 -0
- package/commands/project/updateDeps.js +80 -0
- package/commands/project/upload.d.ts +10 -0
- package/commands/project/upload.js +145 -0
- package/commands/project/validate.d.ts +6 -0
- package/commands/project/validate.js +156 -0
- package/commands/project/watch.d.ts +6 -0
- package/commands/project/watch.js +152 -0
- package/commands/project.d.ts +3 -0
- package/commands/project.js +72 -0
- package/commands/sandbox/create.d.ts +8 -0
- package/commands/sandbox/create.js +156 -0
- package/commands/sandbox/delete.d.ts +7 -0
- package/commands/sandbox/delete.js +189 -0
- package/commands/sandbox.d.ts +3 -0
- package/commands/sandbox.js +19 -0
- package/commands/secret/addSecret.d.ts +6 -0
- package/commands/secret/addSecret.js +58 -0
- package/commands/secret/deleteSecret.d.ts +7 -0
- package/commands/secret/deleteSecret.js +71 -0
- package/commands/secret/listSecret.d.ts +4 -0
- package/commands/secret/listSecret.js +43 -0
- package/commands/secret/updateSecret.d.ts +6 -0
- package/commands/secret/updateSecret.js +57 -0
- package/commands/secret.d.ts +3 -0
- package/commands/secret.js +25 -0
- package/commands/testAccount/create.d.ts +15 -0
- package/commands/testAccount/create.js +232 -0
- package/commands/testAccount/createConfig.d.ts +8 -0
- package/commands/testAccount/createConfig.js +92 -0
- package/commands/testAccount/delete.d.ts +7 -0
- package/commands/testAccount/delete.js +188 -0
- package/commands/testAccount/importData.d.ts +9 -0
- package/commands/testAccount/importData.js +61 -0
- package/commands/testAccount.d.ts +3 -0
- package/commands/testAccount.js +25 -0
- package/commands/upgrade.d.ts +8 -0
- package/commands/upgrade.js +119 -0
- package/lang/en.d.ts +3990 -0
- package/lang/en.js +4013 -0
- package/lib/CLIWebSocketServer.d.ts +28 -0
- package/lib/CLIWebSocketServer.js +91 -0
- package/lib/accountAuth.d.ts +10 -0
- package/lib/accountAuth.js +109 -0
- package/lib/accountTypes.d.ts +9 -0
- package/lib/accountTypes.js +41 -0
- package/lib/app/migrate.d.ts +44 -0
- package/lib/app/migrate.js +389 -0
- package/lib/app/urls.d.ts +17 -0
- package/lib/app/urls.js +16 -0
- package/lib/buildAccount.d.ts +15 -0
- package/lib/buildAccount.js +184 -0
- package/lib/cliUpgradeUtils.d.ts +22 -0
- package/lib/cliUpgradeUtils.js +62 -0
- package/lib/cmsAssets/api-sample.d.ts +3 -0
- package/lib/cmsAssets/api-sample.js +60 -0
- package/lib/cmsAssets/app.d.ts +3 -0
- package/lib/cmsAssets/app.js +12 -0
- package/lib/cmsAssets/function.d.ts +3 -0
- package/lib/cmsAssets/function.js +11 -0
- package/lib/cmsAssets/index.d.ts +5 -0
- package/lib/cmsAssets/index.js +21 -0
- package/lib/cmsAssets/module.d.ts +3 -0
- package/lib/cmsAssets/module.js +20 -0
- package/lib/cmsAssets/react-app.d.ts +3 -0
- package/lib/cmsAssets/react-app.js +12 -0
- package/lib/cmsAssets/template.d.ts +3 -0
- package/lib/cmsAssets/template.js +20 -0
- package/lib/cmsAssets/vue-app.d.ts +3 -0
- package/lib/cmsAssets/vue-app.js +12 -0
- package/lib/cmsAssets/webpack-serverless.d.ts +3 -0
- package/lib/cmsAssets/webpack-serverless.js +12 -0
- package/lib/cmsAssets/website-theme.d.ts +3 -0
- package/lib/cmsAssets/website-theme.js +19 -0
- package/lib/commandSuggestion.d.ts +3 -0
- package/lib/commandSuggestion.js +39 -0
- package/lib/commonOpts.d.ts +25 -0
- package/lib/commonOpts.js +181 -0
- package/lib/configMigrate.d.ts +2 -0
- package/lib/configMigrate.js +182 -0
- package/lib/configOptions.d.ts +21 -0
- package/lib/configOptions.js +111 -0
- package/lib/constants.d.ts +145 -0
- package/lib/constants.js +146 -0
- package/lib/customObject.d.ts +3 -0
- package/lib/customObject.js +11 -0
- package/lib/dependencyManagement.d.ts +21 -0
- package/lib/dependencyManagement.js +243 -0
- package/lib/developerTestAccounts.d.ts +6 -0
- package/lib/developerTestAccounts.js +66 -0
- package/lib/doctor/Diagnosis.d.ts +27 -0
- package/lib/doctor/Diagnosis.js +113 -0
- package/lib/doctor/DiagnosticInfoBuilder.d.ts +69 -0
- package/lib/doctor/DiagnosticInfoBuilder.js +169 -0
- package/lib/doctor/Doctor.d.ts +35 -0
- package/lib/doctor/Doctor.js +566 -0
- package/lib/enums/exitCodes.d.ts +5 -0
- package/lib/enums/exitCodes.js +10 -0
- package/lib/errorHandlers/index.d.ts +19 -0
- package/lib/errorHandlers/index.js +99 -0
- package/lib/errorHandlers/suppressError.d.ts +2 -0
- package/lib/errorHandlers/suppressError.js +53 -0
- package/lib/errors/ProjectErrors.d.ts +15 -0
- package/lib/errors/ProjectErrors.js +30 -0
- package/lib/errors/ProjectValidationError.d.ts +4 -0
- package/lib/errors/ProjectValidationError.js +9 -0
- package/lib/errors/PromptExitError.d.ts +4 -0
- package/lib/errors/PromptExitError.js +8 -0
- package/lib/filesystem.d.ts +2 -0
- package/lib/filesystem.js +19 -0
- package/lib/generateSelectors.d.ts +20 -0
- package/lib/generateSelectors.js +110 -0
- package/lib/getStarted/getStartedV2.d.ts +7 -0
- package/lib/getStarted/getStartedV2.js +18 -0
- package/lib/getStartedV2Actions.d.ts +50 -0
- package/lib/getStartedV2Actions.js +199 -0
- package/lib/hasFeature.d.ts +4 -0
- package/lib/hasFeature.js +18 -0
- package/lib/http.d.ts +1 -0
- package/lib/http.js +28 -0
- package/lib/importData.d.ts +3 -0
- package/lib/importData.js +51 -0
- package/lib/interpolation.d.ts +7 -0
- package/lib/interpolation.js +84 -0
- package/lib/jsonLoader.d.ts +14 -0
- package/lib/jsonLoader.js +60 -0
- package/lib/links.d.ts +11 -0
- package/lib/links.js +107 -0
- package/lib/marketplaceValidate.d.ts +16 -0
- package/lib/marketplaceValidate.js +88 -0
- package/lib/mcp/setup.d.ts +17 -0
- package/lib/mcp/setup.js +345 -0
- package/lib/middleware/autoUpdateMiddleware.d.ts +4 -0
- package/lib/middleware/autoUpdateMiddleware.js +105 -0
- package/lib/middleware/commandTargetingUtils.d.ts +8 -0
- package/lib/middleware/commandTargetingUtils.js +76 -0
- package/lib/middleware/configMiddleware.d.ts +15 -0
- package/lib/middleware/configMiddleware.js +93 -0
- package/lib/middleware/fireAlarmMiddleware.d.ts +4 -0
- package/lib/middleware/fireAlarmMiddleware.js +118 -0
- package/lib/middleware/gitMiddleware.d.ts +2 -0
- package/lib/middleware/gitMiddleware.js +21 -0
- package/lib/middleware/requestMiddleware.d.ts +1 -0
- package/lib/middleware/requestMiddleware.js +5 -0
- package/lib/middleware/spinniesMiddleware.d.ts +1 -0
- package/lib/middleware/spinniesMiddleware.js +4 -0
- package/lib/middleware/usageTrackingMiddleware.d.ts +13 -0
- package/lib/middleware/usageTrackingMiddleware.js +16 -0
- package/lib/middleware/yargsChecksMiddleware.d.ts +4 -0
- package/lib/middleware/yargsChecksMiddleware.js +18 -0
- package/lib/npm/npmCli.d.ts +17 -0
- package/lib/npm/npmCli.js +59 -0
- package/lib/npm/packageJson.d.ts +24 -0
- package/lib/npm/packageJson.js +102 -0
- package/lib/npm/workspaces.d.ts +12 -0
- package/lib/npm/workspaces.js +48 -0
- package/lib/oauth.d.ts +2 -0
- package/lib/oauth.js +93 -0
- package/lib/parsing.d.ts +1 -0
- package/lib/parsing.js +8 -0
- package/lib/polling.d.ts +21 -0
- package/lib/polling.js +48 -0
- package/lib/process.d.ts +13 -0
- package/lib/process.js +56 -0
- package/lib/projects/ProjectLogsManager.d.ts +29 -0
- package/lib/projects/ProjectLogsManager.js +155 -0
- package/lib/projects/add/legacyAddComponent.d.ts +5 -0
- package/lib/projects/add/legacyAddComponent.js +46 -0
- package/lib/projects/add/v2AddComponent.d.ts +9 -0
- package/lib/projects/add/v2AddComponent.js +111 -0
- package/lib/projects/components.d.ts +16 -0
- package/lib/projects/components.js +252 -0
- package/lib/projects/config.d.ts +9 -0
- package/lib/projects/config.js +73 -0
- package/lib/projects/create/index.d.ts +24 -0
- package/lib/projects/create/index.js +33 -0
- package/lib/projects/create/legacy.d.ts +6 -0
- package/lib/projects/create/legacy.js +48 -0
- package/lib/projects/create/v2.d.ts +26 -0
- package/lib/projects/create/v2.js +158 -0
- package/lib/projects/deploy.d.ts +13 -0
- package/lib/projects/deploy.js +76 -0
- package/lib/projects/ensureProjectExists.d.ts +11 -0
- package/lib/projects/ensureProjectExists.js +89 -0
- package/lib/projects/localDev/AppDevModeInterface.d.ts +41 -0
- package/lib/projects/localDev/AppDevModeInterface.js +337 -0
- package/lib/projects/localDev/DevServerManager.d.ts +21 -0
- package/lib/projects/localDev/DevServerManager.js +64 -0
- package/lib/projects/localDev/DevServerManager_DEPRECATED.d.ts +40 -0
- package/lib/projects/localDev/DevServerManager_DEPRECATED.js +128 -0
- package/lib/projects/localDev/DevSessionManager.d.ts +18 -0
- package/lib/projects/localDev/DevSessionManager.js +95 -0
- package/lib/projects/localDev/LocalDevLogger.d.ts +34 -0
- package/lib/projects/localDev/LocalDevLogger.js +178 -0
- package/lib/projects/localDev/LocalDevManager_DEPRECATED.d.ts +59 -0
- package/lib/projects/localDev/LocalDevManager_DEPRECATED.js +387 -0
- package/lib/projects/localDev/LocalDevProcess.d.ts +39 -0
- package/lib/projects/localDev/LocalDevProcess.js +277 -0
- package/lib/projects/localDev/LocalDevState.d.ts +63 -0
- package/lib/projects/localDev/LocalDevState.js +139 -0
- package/lib/projects/localDev/LocalDevWatcher.d.ts +10 -0
- package/lib/projects/localDev/LocalDevWatcher.js +48 -0
- package/lib/projects/localDev/LocalDevWebsocketServer.d.ts +21 -0
- package/lib/projects/localDev/LocalDevWebsocketServer.js +169 -0
- package/lib/projects/localDev/UIExtensionsDevModeInterface.d.ts +13 -0
- package/lib/projects/localDev/UIExtensionsDevModeInterface.js +37 -0
- package/lib/projects/localDev/helpers/account.d.ts +14 -0
- package/lib/projects/localDev/helpers/account.js +222 -0
- package/lib/projects/localDev/helpers/devSessionsApi.d.ts +9 -0
- package/lib/projects/localDev/helpers/devSessionsApi.js +19 -0
- package/lib/projects/localDev/helpers/process.d.ts +1 -0
- package/lib/projects/localDev/helpers/process.js +17 -0
- package/lib/projects/localDev/helpers/project.d.ts +16 -0
- package/lib/projects/localDev/helpers/project.js +216 -0
- package/lib/projects/localDev/localDevWebsocketServerUtils.d.ts +8 -0
- package/lib/projects/localDev/localDevWebsocketServerUtils.js +19 -0
- package/lib/projects/platformVersion.d.ts +9 -0
- package/lib/projects/platformVersion.js +39 -0
- package/lib/projects/pollProjectBuildAndDeploy.d.ts +10 -0
- package/lib/projects/pollProjectBuildAndDeploy.js +344 -0
- package/lib/projects/projectProfiles.d.ts +17 -0
- package/lib/projects/projectProfiles.js +140 -0
- package/lib/projects/structure.d.ts +18 -0
- package/lib/projects/structure.js +130 -0
- package/lib/projects/ui.d.ts +1 -0
- package/lib/projects/ui.js +12 -0
- package/lib/projects/uieLinting.d.ts +33 -0
- package/lib/projects/uieLinting.js +220 -0
- package/lib/projects/upload.d.ts +33 -0
- package/lib/projects/upload.js +147 -0
- package/lib/projects/urls.d.ts +10 -0
- package/lib/projects/urls.js +42 -0
- package/lib/projects/watch.d.ts +5 -0
- package/lib/projects/watch.js +168 -0
- package/lib/prompts/accountNamePrompt.d.ts +11 -0
- package/lib/prompts/accountNamePrompt.js +64 -0
- package/lib/prompts/accountsPrompt.d.ts +2 -0
- package/lib/prompts/accountsPrompt.js +33 -0
- package/lib/prompts/cmsFieldPrompt.d.ts +1 -0
- package/lib/prompts/cmsFieldPrompt.js +40 -0
- package/lib/prompts/confirmImportDataPrompt.d.ts +1 -0
- package/lib/prompts/confirmImportDataPrompt.js +12 -0
- package/lib/prompts/createApiSamplePrompt.d.ts +10 -0
- package/lib/prompts/createApiSamplePrompt.js +58 -0
- package/lib/prompts/createDeveloperTestAccountConfigPrompt.d.ts +25 -0
- package/lib/prompts/createDeveloperTestAccountConfigPrompt.js +162 -0
- package/lib/prompts/createFunctionPrompt.d.ts +9 -0
- package/lib/prompts/createFunctionPrompt.js +94 -0
- package/lib/prompts/createModulePrompt.d.ts +10 -0
- package/lib/prompts/createModulePrompt.js +116 -0
- package/lib/prompts/createTemplatePrompt.d.ts +6 -0
- package/lib/prompts/createTemplatePrompt.js +29 -0
- package/lib/prompts/downloadProjectPrompt.d.ts +10 -0
- package/lib/prompts/downloadProjectPrompt.js +53 -0
- package/lib/prompts/importDataFilePathPrompt.d.ts +1 -0
- package/lib/prompts/importDataFilePathPrompt.js +26 -0
- package/lib/prompts/importDataTestAccountSelectPrompt.d.ts +3 -0
- package/lib/prompts/importDataTestAccountSelectPrompt.js +28 -0
- package/lib/prompts/installAppPrompt.d.ts +2 -0
- package/lib/prompts/installAppPrompt.js +39 -0
- package/lib/prompts/personalAccessKeyPrompt.d.ts +29 -0
- package/lib/prompts/personalAccessKeyPrompt.js +135 -0
- package/lib/prompts/previewPrompt.d.ts +15 -0
- package/lib/prompts/previewPrompt.js +48 -0
- package/lib/prompts/projectAddPrompt.d.ts +15 -0
- package/lib/prompts/projectAddPrompt.js +82 -0
- package/lib/prompts/projectDevTargetAccountPrompt.d.ts +12 -0
- package/lib/prompts/projectDevTargetAccountPrompt.js +166 -0
- package/lib/prompts/projectNameAndDestPrompt.d.ts +3 -0
- package/lib/prompts/projectNameAndDestPrompt.js +53 -0
- package/lib/prompts/projectNamePrompt.d.ts +6 -0
- package/lib/prompts/projectNamePrompt.js +27 -0
- package/lib/prompts/projectsLogsPrompt.d.ts +12 -0
- package/lib/prompts/projectsLogsPrompt.js +20 -0
- package/lib/prompts/promptUtils.d.ts +32 -0
- package/lib/prompts/promptUtils.js +222 -0
- package/lib/prompts/sandboxesPrompt.d.ts +10 -0
- package/lib/prompts/sandboxesPrompt.js +63 -0
- package/lib/prompts/secretPrompt.d.ts +13 -0
- package/lib/prompts/secretPrompt.js +31 -0
- package/lib/prompts/selectAppPrompt.d.ts +2 -0
- package/lib/prompts/selectAppPrompt.js +37 -0
- package/lib/prompts/selectHubDBTablePrompt.d.ts +12 -0
- package/lib/prompts/selectHubDBTablePrompt.js +66 -0
- package/lib/prompts/selectProjectTemplatePrompt.d.ts +27 -0
- package/lib/prompts/selectProjectTemplatePrompt.js +75 -0
- package/lib/prompts/selectPublicAppForMigrationPrompt.d.ts +9 -0
- package/lib/prompts/selectPublicAppForMigrationPrompt.js +68 -0
- package/lib/prompts/setAsDefaultAccountPrompt.d.ts +1 -0
- package/lib/prompts/setAsDefaultAccountPrompt.js +26 -0
- package/lib/prompts/uploadPrompt.d.ts +9 -0
- package/lib/prompts/uploadPrompt.js +32 -0
- package/lib/sandboxes.d.ts +14 -0
- package/lib/sandboxes.js +105 -0
- package/lib/schema.d.ts +3 -0
- package/lib/schema.js +27 -0
- package/lib/serverlessLogs.d.ts +4 -0
- package/lib/serverlessLogs.js +154 -0
- package/lib/testUtils.d.ts +14 -0
- package/lib/testUtils.js +18 -0
- package/lib/theme/cmsDevServerProcess.d.ts +12 -0
- package/lib/theme/cmsDevServerProcess.js +148 -0
- package/lib/theme/cmsDevServerRunner.d.ts +14 -0
- package/lib/theme/cmsDevServerRunner.js +90 -0
- package/lib/theme/migrate.d.ts +13 -0
- package/lib/theme/migrate.js +85 -0
- package/lib/ui/SpinniesManager.d.ts +39 -0
- package/lib/ui/SpinniesManager.js +259 -0
- package/lib/ui/git.d.ts +1 -0
- package/lib/ui/git.js +25 -0
- package/lib/ui/index.d.ts +31 -0
- package/lib/ui/index.js +150 -0
- package/lib/ui/logger.d.ts +11 -0
- package/lib/ui/logger.js +13 -0
- package/lib/ui/removeAnsiCodes.d.ts +1 -0
- package/lib/ui/removeAnsiCodes.js +4 -0
- package/lib/ui/serverlessFunctionLogs.d.ts +9 -0
- package/lib/ui/serverlessFunctionLogs.js +88 -0
- package/lib/ui/spinniesUtils.d.ts +32 -0
- package/lib/ui/spinniesUtils.js +151 -0
- package/lib/ui/supportHyperlinks.d.ts +7 -0
- package/lib/ui/supportHyperlinks.js +59 -0
- package/lib/ui/supportsColor.d.ts +17 -0
- package/lib/ui/supportsColor.js +97 -0
- package/lib/ui/uiMessages.d.ts +73 -0
- package/lib/ui/uiMessages.js +76 -0
- package/lib/upload.d.ts +1 -0
- package/lib/upload.js +49 -0
- package/lib/usageTracking.d.ts +32 -0
- package/lib/usageTracking.js +174 -0
- package/lib/utils/hasFlag.d.ts +1 -0
- package/lib/utils/hasFlag.js +9 -0
- package/lib/validation.d.ts +13 -0
- package/lib/validation.js +142 -0
- package/lib/yargsUtils.d.ts +16 -0
- package/lib/yargsUtils.js +49 -0
- package/mcp-server/server.d.ts +1 -0
- package/mcp-server/server.js +13 -0
- package/mcp-server/tools/cms/HsCreateFunctionTool.d.ts +24 -0
- package/mcp-server/tools/cms/HsCreateFunctionTool.js +105 -0
- package/mcp-server/tools/cms/HsCreateModuleTool.d.ts +20 -0
- package/mcp-server/tools/cms/HsCreateModuleTool.js +127 -0
- package/mcp-server/tools/cms/HsCreateTemplateTool.d.ts +25 -0
- package/mcp-server/tools/cms/HsCreateTemplateTool.js +84 -0
- package/mcp-server/tools/cms/HsFunctionLogsTool.d.ts +18 -0
- package/mcp-server/tools/cms/HsFunctionLogsTool.js +75 -0
- package/mcp-server/tools/cms/HsListFunctionsTool.d.ts +15 -0
- package/mcp-server/tools/cms/HsListFunctionsTool.js +64 -0
- package/mcp-server/tools/cms/HsListTool.d.ts +15 -0
- package/mcp-server/tools/cms/HsListTool.js +64 -0
- package/mcp-server/tools/index.d.ts +3 -0
- package/mcp-server/tools/index.js +48 -0
- package/mcp-server/tools/project/AddFeatureToProjectTool.d.ts +36 -0
- package/mcp-server/tools/project/AddFeatureToProjectTool.js +82 -0
- package/mcp-server/tools/project/CreateProjectTool.d.ts +40 -0
- package/mcp-server/tools/project/CreateProjectTool.js +98 -0
- package/mcp-server/tools/project/CreateTestAccountTool.d.ts +51 -0
- package/mcp-server/tools/project/CreateTestAccountTool.js +170 -0
- package/mcp-server/tools/project/DeployProjectTool.d.ts +15 -0
- package/mcp-server/tools/project/DeployProjectTool.js +58 -0
- package/mcp-server/tools/project/DocFetchTool.d.ts +14 -0
- package/mcp-server/tools/project/DocFetchTool.js +57 -0
- package/mcp-server/tools/project/DocsSearchTool.d.ts +23 -0
- package/mcp-server/tools/project/DocsSearchTool.js +69 -0
- package/mcp-server/tools/project/GetApiUsagePatternsByAppIdTool.d.ts +16 -0
- package/mcp-server/tools/project/GetApiUsagePatternsByAppIdTool.js +73 -0
- package/mcp-server/tools/project/GetApplicationInfoTool.d.ts +13 -0
- package/mcp-server/tools/project/GetApplicationInfoTool.js +56 -0
- package/mcp-server/tools/project/GetBuildLogsTool.d.ts +21 -0
- package/mcp-server/tools/project/GetBuildLogsTool.js +124 -0
- package/mcp-server/tools/project/GetBuildStatusTool.d.ts +16 -0
- package/mcp-server/tools/project/GetBuildStatusTool.js +165 -0
- package/mcp-server/tools/project/GetConfigValuesTool.d.ts +15 -0
- package/mcp-server/tools/project/GetConfigValuesTool.js +65 -0
- package/mcp-server/tools/project/GuidedWalkthroughTool.d.ts +19 -0
- package/mcp-server/tools/project/GuidedWalkthroughTool.js +50 -0
- package/mcp-server/tools/project/UploadProjectTools.d.ts +16 -0
- package/mcp-server/tools/project/UploadProjectTools.js +83 -0
- package/mcp-server/tools/project/ValidateProjectTool.d.ts +14 -0
- package/mcp-server/tools/project/ValidateProjectTool.js +42 -0
- package/mcp-server/tools/project/constants.d.ts +18 -0
- package/mcp-server/tools/project/constants.js +29 -0
- package/mcp-server/types.d.ts +14 -0
- package/mcp-server/types.js +13 -0
- package/mcp-server/utils/command.d.ts +8 -0
- package/mcp-server/utils/command.js +33 -0
- package/mcp-server/utils/config.d.ts +1 -0
- package/mcp-server/utils/config.js +10 -0
- package/mcp-server/utils/content.d.ts +3 -0
- package/mcp-server/utils/content.js +24 -0
- package/mcp-server/utils/feedbackTracking.d.ts +1 -0
- package/mcp-server/utils/feedbackTracking.js +26 -0
- package/mcp-server/utils/toolUsageTracking.d.ts +3 -0
- package/mcp-server/utils/toolUsageTracking.js +24 -0
- package/package.json +2 -1
- package/types/Cms.d.ts +46 -0
- package/types/Cms.js +27 -0
- package/types/LocalDev.d.ts +47 -0
- package/types/LocalDev.js +1 -0
- package/types/PackageJson.d.ts +10 -0
- package/types/PackageJson.js +1 -0
- package/types/ProjectComponents.d.ts +23 -0
- package/types/ProjectComponents.js +2 -0
- package/types/Projects.d.ts +130 -0
- package/types/Projects.js +6 -0
- package/types/Prompts.d.ts +28 -0
- package/types/Prompts.js +1 -0
- package/types/Sandboxes.d.ts +5 -0
- package/types/Sandboxes.js +1 -0
- package/types/Yargs.d.ts +46 -0
- package/types/Yargs.js +1 -0
- package/ui/components/ActionSection.d.ts +12 -0
- package/ui/components/ActionSection.js +25 -0
- package/ui/components/BoxWithTitle.d.ts +11 -0
- package/ui/components/BoxWithTitle.js +9 -0
- package/ui/components/FullScreen.d.ts +6 -0
- package/ui/components/FullScreen.js +13 -0
- package/ui/components/HorizontalSelectPrompt.d.ts +8 -0
- package/ui/components/HorizontalSelectPrompt.js +30 -0
- package/ui/components/InputField.d.ts +10 -0
- package/ui/components/InputField.js +10 -0
- package/ui/components/SelectInput.d.ts +11 -0
- package/ui/components/SelectInput.js +59 -0
- package/ui/components/StatusIcon.d.ts +9 -0
- package/ui/components/StatusIcon.js +17 -0
- package/ui/components/StatusMessageBoxes.d.ts +13 -0
- package/ui/components/StatusMessageBoxes.js +31 -0
- package/ui/components/Table.d.ts +89 -0
- package/ui/components/Table.js +246 -0
- package/ui/components/getStarted/GetStartedFlow.d.ts +8 -0
- package/ui/components/getStarted/GetStartedFlow.js +213 -0
- package/ui/components/getStarted/reducer.d.ts +79 -0
- package/ui/components/getStarted/reducer.js +108 -0
- package/ui/components/getStarted/screens/InstallationScreen.d.ts +7 -0
- package/ui/components/getStarted/screens/InstallationScreen.js +16 -0
- package/ui/components/getStarted/screens/ProjectSetupScreen.d.ts +16 -0
- package/ui/components/getStarted/screens/ProjectSetupScreen.js +40 -0
- package/ui/components/getStarted/screens/UploadScreen.d.ts +7 -0
- package/ui/components/getStarted/screens/UploadScreen.js +43 -0
- package/ui/components/getStarted/selectors.d.ts +2 -0
- package/ui/components/getStarted/selectors.js +1 -0
- package/ui/constants.d.ts +6 -0
- package/ui/constants.js +6 -0
- package/ui/lib/constants.d.ts +17 -0
- package/ui/lib/constants.js +17 -0
- package/ui/lib/table.d.ts +2 -0
- package/ui/lib/table.js +11 -0
- package/ui/lib/useTerminalSize.d.ts +13 -0
- package/ui/lib/useTerminalSize.js +31 -0
- package/ui/playground/Playground.d.ts +5 -0
- package/ui/playground/Playground.js +25 -0
- package/ui/playground/fixtures.d.ts +9 -0
- package/ui/playground/fixtures.js +126 -0
- package/ui/render.d.ts +23 -0
- package/ui/render.js +75 -0
- package/ui/styles.d.ts +21 -0
- package/ui/styles.js +21 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { fetchFireAlarms } from '@hubspot/local-dev-lib/api/fireAlarm';
|
|
3
|
+
import { debugError } from '../errorHandlers/index.js';
|
|
4
|
+
import { pkg } from '../jsonLoader.js';
|
|
5
|
+
import { renderInline } from '../../ui/render.js';
|
|
6
|
+
import { getWarningBox } from '../../ui/components/StatusMessageBoxes.js';
|
|
7
|
+
/*
|
|
8
|
+
* Versions can be formatted like this:
|
|
9
|
+
* =7.2.2 -> targets the exact version 7.2.2
|
|
10
|
+
* =7.2.* -> targets all versions with a major of 7 and a minor of 2
|
|
11
|
+
* =7.* -> targets all versions with a major of 7
|
|
12
|
+
* =* -> targets all versions
|
|
13
|
+
* <=7.2.2 -> targets all versions equal to or less than 7.2.2
|
|
14
|
+
* <=7.2.* -> targets all versions equal to or less than 7.2
|
|
15
|
+
*/
|
|
16
|
+
const WILDCARD = '*';
|
|
17
|
+
function isVersionTargeted(version, targetVersionString) {
|
|
18
|
+
// Assume we're targeting no versions if no version string is found
|
|
19
|
+
// Target all versions using the * wildcard
|
|
20
|
+
if (!targetVersionString) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
// Only support version targeting for the <= or = operator
|
|
24
|
+
if (!targetVersionString.startsWith('<=') &&
|
|
25
|
+
!targetVersionString.startsWith('=')) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
const targetVersion = targetVersionString.substring(targetVersionString.indexOf('=') + 1);
|
|
29
|
+
// Only allow exact version matching for tagged CLI releases (like -beta)
|
|
30
|
+
if (version.includes('-') || targetVersionString.includes('-')) {
|
|
31
|
+
if (!targetVersionString.startsWith('=')) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
return version === targetVersion;
|
|
35
|
+
}
|
|
36
|
+
const targetVersionParts = targetVersion.split('.');
|
|
37
|
+
const versionParts = version.split('.');
|
|
38
|
+
// Require the wildcard to be explicitly set to target all versions
|
|
39
|
+
if (versionParts.length < 3 &&
|
|
40
|
+
versionParts[versionParts.length - 1] !== WILDCARD) {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
// Don't allow the less than or equal to operator to be used with the wildcard
|
|
44
|
+
// in the major version part (e.g. <=*)
|
|
45
|
+
if (targetVersionString.startsWith('<=') && versionParts[0] === WILDCARD) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
let targetAnyVersion = false;
|
|
49
|
+
return targetVersionParts.every((targetPart, i) => {
|
|
50
|
+
const versionPart = versionParts[i];
|
|
51
|
+
// Support generic version targeting (like 1.2.*)
|
|
52
|
+
if (targetPart === WILDCARD || targetAnyVersion) {
|
|
53
|
+
targetAnyVersion = true;
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
// Double check that the target part is a number
|
|
57
|
+
if (isNaN(Number(targetPart))) {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
return targetVersionString.startsWith('<=')
|
|
61
|
+
? Number(versionPart) <= Number(targetPart)
|
|
62
|
+
: Number(versionPart) === Number(targetPart);
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
function isCommandTargeted(command, targetCommandsString) {
|
|
66
|
+
// Require the wildcard to be explicitly set to target all commands
|
|
67
|
+
if (!targetCommandsString) {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
if (targetCommandsString === WILDCARD) {
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
const targetCommands = targetCommandsString.split(',');
|
|
74
|
+
return targetCommands.some(cmd => command.startsWith(cmd));
|
|
75
|
+
}
|
|
76
|
+
function filterFireAlarm(fireAlarm, command, version) {
|
|
77
|
+
const commandIsTargeted = isCommandTargeted(command, fireAlarm.querySelector);
|
|
78
|
+
const versionIsTargeted = isVersionTargeted(version, fireAlarm.urlRegexPattern);
|
|
79
|
+
return commandIsTargeted && versionIsTargeted;
|
|
80
|
+
}
|
|
81
|
+
async function getFireAlarms(accountId, command, version) {
|
|
82
|
+
let relevantAlarms = [];
|
|
83
|
+
try {
|
|
84
|
+
const { data: fireAlarms } = await fetchFireAlarms(accountId);
|
|
85
|
+
relevantAlarms = fireAlarms.filter(fireAlarm => filterFireAlarm(fireAlarm, command, version));
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
debugError(error);
|
|
89
|
+
}
|
|
90
|
+
return relevantAlarms;
|
|
91
|
+
}
|
|
92
|
+
async function logFireAlarms(accountId, command, version) {
|
|
93
|
+
const alarms = await getFireAlarms(accountId, command, version);
|
|
94
|
+
if (alarms.length > 0) {
|
|
95
|
+
const notifications = alarms.reduce((acc, alarm) => {
|
|
96
|
+
if (alarm.title && alarm.message) {
|
|
97
|
+
return (acc +
|
|
98
|
+
`${acc.length > 0 ? '\n\n' : ''}${chalk.bold(alarm.title)}\n${alarm.message}`);
|
|
99
|
+
}
|
|
100
|
+
return acc;
|
|
101
|
+
}, '');
|
|
102
|
+
await renderInline(getWarningBox({
|
|
103
|
+
title: 'Notifications',
|
|
104
|
+
message: notifications,
|
|
105
|
+
}));
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
export async function checkFireAlarms(argv) {
|
|
109
|
+
const { derivedAccountId } = argv;
|
|
110
|
+
try {
|
|
111
|
+
if (derivedAccountId) {
|
|
112
|
+
await logFireAlarms(derivedAccountId, argv._.join(' '), pkg.version);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
debugError(error);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { getConfigFilePath, globalConfigFileExists, } from '@hubspot/local-dev-lib/config';
|
|
2
|
+
import { ENVIRONMENT_VARIABLES } from '@hubspot/local-dev-lib/constants/config';
|
|
3
|
+
import { checkAndWarnGitInclusion } from '../ui/git.js';
|
|
4
|
+
import { debugError } from '../errorHandlers/index.js';
|
|
5
|
+
export function checkAndWarnGitInclusionMiddleware(argv) {
|
|
6
|
+
// Skip this when no command is provided or if using environment config
|
|
7
|
+
if (argv._.length &&
|
|
8
|
+
!process.env[ENVIRONMENT_VARIABLES.USE_ENVIRONMENT_HUBSPOT_CONFIG]) {
|
|
9
|
+
// Skip if using global config
|
|
10
|
+
if (globalConfigFileExists()) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
try {
|
|
14
|
+
const configPath = getConfigFilePath();
|
|
15
|
+
checkAndWarnGitInclusion(configPath);
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
debugError(error);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function setRequestHeaders(): void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function initializeSpinniesManager(): void;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Arguments } from 'yargs';
|
|
2
|
+
/**
|
|
3
|
+
* Middleware to handle the --disable-usage-tracking flag
|
|
4
|
+
* Sets an environment variable that can be checked by tracking functions
|
|
5
|
+
*/
|
|
6
|
+
export declare function handleDisableUsageTracking(argv: Arguments<{
|
|
7
|
+
disableUsageTracking?: boolean;
|
|
8
|
+
}>): void;
|
|
9
|
+
/**
|
|
10
|
+
* Helper function to check if usage tracking is disabled
|
|
11
|
+
* @returns true if usage tracking is disabled via environment variable
|
|
12
|
+
*/
|
|
13
|
+
export declare function isUsageTrackingDisableFlagSet(): boolean;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Middleware to handle the --disable-usage-tracking flag
|
|
3
|
+
* Sets an environment variable that can be checked by tracking functions
|
|
4
|
+
*/
|
|
5
|
+
export function handleDisableUsageTracking(argv) {
|
|
6
|
+
if (argv.disableUsageTracking) {
|
|
7
|
+
process.env.DISABLE_USAGE_TRACKING = 'true';
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Helper function to check if usage tracking is disabled
|
|
12
|
+
* @returns true if usage tracking is disabled via environment variable
|
|
13
|
+
*/
|
|
14
|
+
export function isUsageTrackingDisableFlagSet() {
|
|
15
|
+
return process.env.DISABLE_USAGE_TRACKING === 'true';
|
|
16
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { uiLogger } from '../ui/logger.js';
|
|
2
|
+
import { EXIT_CODES } from '../enums/exitCodes.js';
|
|
3
|
+
import { commands } from '../../lang/en.js';
|
|
4
|
+
import { getIsInProject } from '../projects/config.js';
|
|
5
|
+
import { isTargetedCommand } from './commandTargetingUtils.js';
|
|
6
|
+
const UPLOAD_AND_WATCH_COMMANDS = {
|
|
7
|
+
upload: true,
|
|
8
|
+
watch: true,
|
|
9
|
+
};
|
|
10
|
+
export function performChecks(argv) {
|
|
11
|
+
// Require "project" command when running upload/watch inside of a project
|
|
12
|
+
if (isTargetedCommand(argv._, UPLOAD_AND_WATCH_COMMANDS) &&
|
|
13
|
+
getIsInProject(argv.src)) {
|
|
14
|
+
uiLogger.error(commands.generalErrors.srcIsProject(argv.src || './', argv._.join(' ')));
|
|
15
|
+
process.exit(EXIT_CODES.ERROR);
|
|
16
|
+
}
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare const DEFAULT_PACKAGE_MANAGER = "npm";
|
|
2
|
+
export declare function isGloballyInstalled(packageName: string): Promise<boolean>;
|
|
3
|
+
export declare function getLatestPackageVersion(packageName: string): Promise<{
|
|
4
|
+
latest: string | null;
|
|
5
|
+
next: string | null;
|
|
6
|
+
}>;
|
|
7
|
+
export declare function executeInstall(packages?: string[], flags?: string | null, options?: {
|
|
8
|
+
cwd?: string;
|
|
9
|
+
}): Promise<void>;
|
|
10
|
+
export declare function executeUpdate(packages?: string[], flags?: string | null, options?: {
|
|
11
|
+
cwd?: string;
|
|
12
|
+
}): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* Check if a package is installed globally via npm
|
|
15
|
+
* This verifies that npm can see the package in its global packages list
|
|
16
|
+
*/
|
|
17
|
+
export declare function isInstalledGloballyWithNPM(packageName: string): Promise<boolean>;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { exec as execAsync } from 'node:child_process';
|
|
2
|
+
import util from 'util';
|
|
3
|
+
import { uiLogger } from '../ui/logger.js';
|
|
4
|
+
export const DEFAULT_PACKAGE_MANAGER = 'npm';
|
|
5
|
+
export async function isGloballyInstalled(packageName) {
|
|
6
|
+
const exec = util.promisify(execAsync);
|
|
7
|
+
try {
|
|
8
|
+
await exec(`${packageName} --version`);
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
catch (e) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export async function getLatestPackageVersion(packageName) {
|
|
16
|
+
try {
|
|
17
|
+
const exec = util.promisify(execAsync);
|
|
18
|
+
const { stdout } = await exec(`npm info ${packageName} dist-tags --json`);
|
|
19
|
+
const { latest, next } = JSON.parse(stdout);
|
|
20
|
+
return { latest, next };
|
|
21
|
+
}
|
|
22
|
+
catch (e) {
|
|
23
|
+
return { latest: null, next: null };
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export async function executeInstall(packages = [], flags, options) {
|
|
27
|
+
const installCommand = `${DEFAULT_PACKAGE_MANAGER} install${flags ? ` ${flags}` : ''} ${packages.join(' ')}`;
|
|
28
|
+
uiLogger.debug('Running', installCommand);
|
|
29
|
+
const exec = util.promisify(execAsync);
|
|
30
|
+
await exec(installCommand, options);
|
|
31
|
+
}
|
|
32
|
+
export async function executeUpdate(packages = [], flags, options) {
|
|
33
|
+
const updateCommand = `${DEFAULT_PACKAGE_MANAGER} update${flags ? ` ${flags}` : ''} ${packages.join(' ')}`;
|
|
34
|
+
uiLogger.debug('Running', updateCommand);
|
|
35
|
+
const exec = util.promisify(execAsync);
|
|
36
|
+
await exec(updateCommand, options);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Check if a package is installed globally via npm
|
|
40
|
+
* This verifies that npm can see the package in its global packages list
|
|
41
|
+
*/
|
|
42
|
+
export async function isInstalledGloballyWithNPM(packageName) {
|
|
43
|
+
// First check if npm is available
|
|
44
|
+
const isNpmGloballyInstalled = await isGloballyInstalled(DEFAULT_PACKAGE_MANAGER);
|
|
45
|
+
if (!isNpmGloballyInstalled) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
// Then verify that npm can see the package in its global installation
|
|
49
|
+
// This definitively proves it was installed via npm
|
|
50
|
+
const exec = util.promisify(execAsync);
|
|
51
|
+
try {
|
|
52
|
+
await exec(`npm list -g ${packageName} --depth=0`);
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
catch (e) {
|
|
56
|
+
// npm list fails if the package isn't installed globally via npm
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { PackageJson } from '../../types/PackageJson.js';
|
|
2
|
+
export interface PackageJsonWithMetadata {
|
|
3
|
+
packageJsonFilename: string;
|
|
4
|
+
packageRootDirectory: string;
|
|
5
|
+
packageJson: PackageJson;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Reads and parses a package.json file, with caching.
|
|
9
|
+
*
|
|
10
|
+
* @param packageJsonPath - Absolute path to the package.json file
|
|
11
|
+
* @returns The parsed PackageJson object, or null if the file doesn't exist or is invalid
|
|
12
|
+
*/
|
|
13
|
+
export declare const safeGetPackageJsonCached: (packageJsonPath: string) => PackageJson | null;
|
|
14
|
+
/**
|
|
15
|
+
* Clears all cached package.json data and file paths.
|
|
16
|
+
* Use this when package.json files may have been modified externally.
|
|
17
|
+
*/
|
|
18
|
+
export declare const clearPackageJsonCache: () => void;
|
|
19
|
+
/**
|
|
20
|
+
* Finds all package.json files in the project, with caching.
|
|
21
|
+
*
|
|
22
|
+
* @returns Array of absolute paths to package.json files in the project
|
|
23
|
+
*/
|
|
24
|
+
export declare function findAllPackageJsonFilesInProjectCached(): Promise<string[]>;
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import { walk } from '@hubspot/local-dev-lib/fs';
|
|
4
|
+
import { getProjectConfig } from '../projects/config.js';
|
|
5
|
+
const packageJsonCache = new Map();
|
|
6
|
+
const packageJsonFilesCache = new Map();
|
|
7
|
+
const safeReadTextFile = (filePath) => {
|
|
8
|
+
try {
|
|
9
|
+
return fs.readFileSync(filePath, 'utf-8');
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
const safeReadJsonFile = (filePath) => {
|
|
16
|
+
const text = safeReadTextFile(filePath);
|
|
17
|
+
if (text === null) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
try {
|
|
21
|
+
return JSON.parse(text);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
const safeReadPackageJsonWithMetadataUncached = (packageJsonPath) => {
|
|
28
|
+
const manifest = safeReadJsonFile(packageJsonPath);
|
|
29
|
+
if (!manifest) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
packageJsonFilename: packageJsonPath,
|
|
34
|
+
packageRootDirectory: path.dirname(packageJsonPath),
|
|
35
|
+
packageJson: manifest,
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
const safeReadPackageJsonWithMetadataCached = (packageJsonPath) => {
|
|
39
|
+
const maybeCachedPackageJsonWithMetadata = packageJsonCache.get(packageJsonPath);
|
|
40
|
+
if (maybeCachedPackageJsonWithMetadata !== undefined) {
|
|
41
|
+
return maybeCachedPackageJsonWithMetadata;
|
|
42
|
+
}
|
|
43
|
+
// If not cached, read the package.json file and cache the result.
|
|
44
|
+
const packageJsonWithMetadata = safeReadPackageJsonWithMetadataUncached(packageJsonPath);
|
|
45
|
+
packageJsonCache.set(packageJsonPath, packageJsonWithMetadata);
|
|
46
|
+
return packageJsonWithMetadata;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Reads and parses a package.json file, with caching.
|
|
50
|
+
*
|
|
51
|
+
* @param packageJsonPath - Absolute path to the package.json file
|
|
52
|
+
* @returns The parsed PackageJson object, or null if the file doesn't exist or is invalid
|
|
53
|
+
*/
|
|
54
|
+
export const safeGetPackageJsonCached = (packageJsonPath) => {
|
|
55
|
+
const maybePackageJsonWithMetadata = safeReadPackageJsonWithMetadataCached(packageJsonPath);
|
|
56
|
+
return maybePackageJsonWithMetadata?.packageJson || null;
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Clears all cached package.json data and file paths.
|
|
60
|
+
* Use this when package.json files may have been modified externally.
|
|
61
|
+
*/
|
|
62
|
+
export const clearPackageJsonCache = () => {
|
|
63
|
+
packageJsonCache.clear();
|
|
64
|
+
packageJsonFilesCache.clear();
|
|
65
|
+
};
|
|
66
|
+
const findAllPackageJsonFilesInDirectoryUncached = async (directory) => {
|
|
67
|
+
const packageJsonFiles = (await walk(directory)).filter(file => file.includes('package.json') &&
|
|
68
|
+
!file.includes('node_modules') &&
|
|
69
|
+
!file.includes('.vite'));
|
|
70
|
+
return packageJsonFiles;
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* Finds all package.json files in a directory recursively, with caching.
|
|
74
|
+
* Excludes files in node_modules and .vite directories.
|
|
75
|
+
*
|
|
76
|
+
* @param directory - Root directory to search from
|
|
77
|
+
* @returns Array of absolute paths to package.json files
|
|
78
|
+
*/
|
|
79
|
+
const findAllPackageJsonFilesInDirectoryCached = async (directory) => {
|
|
80
|
+
const maybeCachedPackageJsonFiles = packageJsonFilesCache.get(directory);
|
|
81
|
+
if (maybeCachedPackageJsonFiles) {
|
|
82
|
+
return maybeCachedPackageJsonFiles;
|
|
83
|
+
}
|
|
84
|
+
// If not cached, find all package.json files in the directory and cache the result.
|
|
85
|
+
const packageJsonFiles = await findAllPackageJsonFilesInDirectoryUncached(directory);
|
|
86
|
+
packageJsonFilesCache.set(directory, packageJsonFiles);
|
|
87
|
+
return packageJsonFiles;
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* Finds all package.json files in the project, with caching.
|
|
91
|
+
*
|
|
92
|
+
* @returns Array of absolute paths to package.json files in the project
|
|
93
|
+
*/
|
|
94
|
+
export async function findAllPackageJsonFilesInProjectCached() {
|
|
95
|
+
const projectConfig = await getProjectConfig();
|
|
96
|
+
const { projectDir } = projectConfig;
|
|
97
|
+
if (!projectDir) {
|
|
98
|
+
return [];
|
|
99
|
+
}
|
|
100
|
+
const packageJsonFiles = await findAllPackageJsonFilesInDirectoryCached(projectDir);
|
|
101
|
+
return packageJsonFiles;
|
|
102
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Finds the npm workspace root directory that contains the given package location, with caching.
|
|
3
|
+
*
|
|
4
|
+
* Searches through all package.json files in the project to find one that defines
|
|
5
|
+
* workspaces (via the "workspaces" field) and includes the specified directory
|
|
6
|
+
* within those workspace patterns.
|
|
7
|
+
*
|
|
8
|
+
* @param targetPackageDirectory - The absolute path to the package directory to find the workspace root for
|
|
9
|
+
* @returns The absolute path to the workspace root directory, or null if the package is not part of any workspace
|
|
10
|
+
*
|
|
11
|
+
*/
|
|
12
|
+
export declare const getNpmWorkspaceDirectoryForPackageAtLocationCached: (targetPackageDirectory: string) => Promise<string | null>;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { minimatch } from 'minimatch';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { safeGetPackageJsonCached, findAllPackageJsonFilesInProjectCached, } from './packageJson.js';
|
|
4
|
+
/**
|
|
5
|
+
* Checks if a package directory matches any of the workspace glob patterns.
|
|
6
|
+
*
|
|
7
|
+
* @param directory - The absolute path to the package directory to check
|
|
8
|
+
* @param workspaceRoot - The absolute path to the workspace root directory
|
|
9
|
+
* @param workspaces - Array of glob patterns defining workspace locations (e.g., ['packages/*', 'apps/*'])
|
|
10
|
+
* @returns True if the directory matches any workspace pattern, false otherwise
|
|
11
|
+
*/
|
|
12
|
+
const isPackageLocationInWorkspaces = (directory, workspaceRoot, workspaces) => {
|
|
13
|
+
const relativePath = path.relative(workspaceRoot, directory);
|
|
14
|
+
return workspaces.some(workspace => minimatch(relativePath, workspace));
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Finds the npm workspace root directory that contains the given package location, with caching.
|
|
18
|
+
*
|
|
19
|
+
* Searches through all package.json files in the project to find one that defines
|
|
20
|
+
* workspaces (via the "workspaces" field) and includes the specified directory
|
|
21
|
+
* within those workspace patterns.
|
|
22
|
+
*
|
|
23
|
+
* @param targetPackageDirectory - The absolute path to the package directory to find the workspace root for
|
|
24
|
+
* @returns The absolute path to the workspace root directory, or null if the package is not part of any workspace
|
|
25
|
+
*
|
|
26
|
+
*/
|
|
27
|
+
export const getNpmWorkspaceDirectoryForPackageAtLocationCached = async (targetPackageDirectory) => {
|
|
28
|
+
const allPackageJsonFilesInProject = await findAllPackageJsonFilesInProjectCached();
|
|
29
|
+
if (allPackageJsonFilesInProject.length === 0) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
for (const currentPackageJsonFile of allPackageJsonFilesInProject) {
|
|
33
|
+
const packageJson = safeGetPackageJsonCached(currentPackageJsonFile);
|
|
34
|
+
const workspaces = packageJson?.workspaces;
|
|
35
|
+
if (!Array.isArray(workspaces) || workspaces.length === 0) {
|
|
36
|
+
// If the package.json file does not define any workspaces, skip it, since
|
|
37
|
+
// it cannot be an npm workspace root.
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
// We found a package.json file that defines workspaces, so we can now check if the given
|
|
41
|
+
// directory is part of any of the workspace patterns.
|
|
42
|
+
const currentPackageDirectory = path.dirname(currentPackageJsonFile);
|
|
43
|
+
if (isPackageLocationInWorkspaces(targetPackageDirectory, currentPackageDirectory, workspaces)) {
|
|
44
|
+
return currentPackageDirectory;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
};
|
package/lib/oauth.d.ts
ADDED
package/lib/oauth.js
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import express from 'express';
|
|
2
|
+
import open from 'open';
|
|
3
|
+
import { OAuth2Manager } from '@hubspot/local-dev-lib/models/OAuth2Manager';
|
|
4
|
+
import { getConfigAccountById } from '@hubspot/local-dev-lib/config';
|
|
5
|
+
import { addOauthToAccountConfig } from '@hubspot/local-dev-lib/oauth';
|
|
6
|
+
import { getHubSpotWebsiteOrigin } from '@hubspot/local-dev-lib/urls';
|
|
7
|
+
import { uiLogger } from './ui/logger.js';
|
|
8
|
+
import { ENVIRONMENTS } from '@hubspot/local-dev-lib/constants/environments';
|
|
9
|
+
import { DEFAULT_OAUTH_SCOPES } from '@hubspot/local-dev-lib/constants/auth';
|
|
10
|
+
import { handleExit } from './process.js';
|
|
11
|
+
import { lib } from '../lang/en.js';
|
|
12
|
+
const PORT = 3000;
|
|
13
|
+
const redirectUri = `http://localhost:${PORT}/oauth-callback`;
|
|
14
|
+
function buildAuthUrl(oauthManager) {
|
|
15
|
+
const { env: accountEnv, auth } = oauthManager.account;
|
|
16
|
+
const env = accountEnv || ENVIRONMENTS.PROD;
|
|
17
|
+
const scopes = auth.scopes.length > 0 ? auth.scopes : DEFAULT_OAUTH_SCOPES;
|
|
18
|
+
if (!auth.clientId) {
|
|
19
|
+
throw new Error(lib.oauth.missingClientId);
|
|
20
|
+
}
|
|
21
|
+
return (`${getHubSpotWebsiteOrigin(env)}/oauth/${oauthManager.account.accountId}/authorize` +
|
|
22
|
+
`?client_id=${encodeURIComponent(auth.clientId)}` + // app's client ID
|
|
23
|
+
`&scope=${encodeURIComponent(scopes.join(' '))}` + // scopes being requested by the app
|
|
24
|
+
`&redirect_uri=${encodeURIComponent(redirectUri)}` // where to send the user after the consent page
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
function handleServerOnProcessEnd(server) {
|
|
28
|
+
const shutdownServerIfRunning = () => {
|
|
29
|
+
server?.close();
|
|
30
|
+
};
|
|
31
|
+
handleExit(shutdownServerIfRunning);
|
|
32
|
+
}
|
|
33
|
+
async function authorize(oauthManager) {
|
|
34
|
+
if (process.env.BROWSER !== 'none') {
|
|
35
|
+
open(buildAuthUrl(oauthManager), { url: true });
|
|
36
|
+
}
|
|
37
|
+
// eslint-disable-next-line no-async-promise-executor
|
|
38
|
+
return new Promise(async (resolve, reject) => {
|
|
39
|
+
let server;
|
|
40
|
+
const app = express();
|
|
41
|
+
app.get('/oauth-callback', async (req, res) => {
|
|
42
|
+
if (req.query.code) {
|
|
43
|
+
const authCodeProof = {
|
|
44
|
+
grant_type: 'authorization_code',
|
|
45
|
+
client_id: oauthManager.account.auth.clientId,
|
|
46
|
+
client_secret: oauthManager.account.auth.clientSecret,
|
|
47
|
+
redirect_uri: redirectUri,
|
|
48
|
+
code: req.query.code,
|
|
49
|
+
};
|
|
50
|
+
try {
|
|
51
|
+
await oauthManager.exchangeForTokens(authCodeProof);
|
|
52
|
+
res.send(`
|
|
53
|
+
<body>
|
|
54
|
+
<h2>Authorization succeeded (you can close this page)</h2>
|
|
55
|
+
</body>
|
|
56
|
+
`);
|
|
57
|
+
}
|
|
58
|
+
catch (e) {
|
|
59
|
+
res.send(`
|
|
60
|
+
<body>
|
|
61
|
+
<h2>Authorization failed (you can close this page)</h2>
|
|
62
|
+
</body>
|
|
63
|
+
`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (server) {
|
|
67
|
+
server.close();
|
|
68
|
+
server = null;
|
|
69
|
+
}
|
|
70
|
+
if (req.query.code) {
|
|
71
|
+
resolve();
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
reject();
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
server = app.listen(PORT, () => uiLogger.log(`Waiting for authorization...`));
|
|
78
|
+
handleServerOnProcessEnd(server);
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
function setupOauth(accountConfig) {
|
|
82
|
+
const config = getConfigAccountById(accountConfig.accountId);
|
|
83
|
+
return new OAuth2Manager({
|
|
84
|
+
...accountConfig,
|
|
85
|
+
env: accountConfig.env || config?.env || ENVIRONMENTS.PROD,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
export async function authenticateWithOauth(accountConfig) {
|
|
89
|
+
const oauthManager = setupOauth(accountConfig);
|
|
90
|
+
uiLogger.log('Authorizing');
|
|
91
|
+
await authorize(oauthManager);
|
|
92
|
+
addOauthToAccountConfig(oauthManager);
|
|
93
|
+
}
|
package/lib/parsing.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function parseStringToNumber(maybeNumber: string): number;
|
package/lib/parsing.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { lib } from '../lang/en.js';
|
|
2
|
+
export function parseStringToNumber(maybeNumber) {
|
|
3
|
+
const result = parseInt(maybeNumber, 10);
|
|
4
|
+
if (Number.isNaN(result) || !/^-?\d+$/.test(maybeNumber)) {
|
|
5
|
+
throw new Error(lib.parsing.unableToParseStringToNumber);
|
|
6
|
+
}
|
|
7
|
+
return result;
|
|
8
|
+
}
|
package/lib/polling.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { HubSpotPromise } from '@hubspot/local-dev-lib/types/Http';
|
|
2
|
+
export declare const DEFAULT_POLLING_STATES: {
|
|
3
|
+
readonly STARTED: "STARTED";
|
|
4
|
+
readonly SUCCESS: "SUCCESS";
|
|
5
|
+
readonly ERROR: "ERROR";
|
|
6
|
+
readonly REVERTED: "REVERTED";
|
|
7
|
+
readonly FAILURE: "FAILURE";
|
|
8
|
+
};
|
|
9
|
+
export declare const DEFAULT_POLLING_STATUS_LOOKUP: {
|
|
10
|
+
successStates: "SUCCESS"[];
|
|
11
|
+
errorStates: ("FAILURE" | "ERROR" | "REVERTED")[];
|
|
12
|
+
};
|
|
13
|
+
type GenericPollingResponse = {
|
|
14
|
+
status: string;
|
|
15
|
+
};
|
|
16
|
+
type PollingCallback<T extends GenericPollingResponse> = () => HubSpotPromise<T>;
|
|
17
|
+
export declare function poll<T extends GenericPollingResponse>(callback: PollingCallback<T>, statusLookup?: {
|
|
18
|
+
successStates: string[];
|
|
19
|
+
errorStates: string[];
|
|
20
|
+
}, timeoutMs?: number): Promise<T>;
|
|
21
|
+
export {};
|
package/lib/polling.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { DEFAULT_POLLING_DELAY } from './constants.js';
|
|
2
|
+
import { lib } from '../lang/en.js';
|
|
3
|
+
export const DEFAULT_POLLING_STATES = {
|
|
4
|
+
STARTED: 'STARTED',
|
|
5
|
+
SUCCESS: 'SUCCESS',
|
|
6
|
+
ERROR: 'ERROR',
|
|
7
|
+
REVERTED: 'REVERTED',
|
|
8
|
+
FAILURE: 'FAILURE',
|
|
9
|
+
};
|
|
10
|
+
export const DEFAULT_POLLING_STATUS_LOOKUP = {
|
|
11
|
+
successStates: [DEFAULT_POLLING_STATES.SUCCESS],
|
|
12
|
+
errorStates: [
|
|
13
|
+
DEFAULT_POLLING_STATES.ERROR,
|
|
14
|
+
DEFAULT_POLLING_STATES.REVERTED,
|
|
15
|
+
DEFAULT_POLLING_STATES.FAILURE,
|
|
16
|
+
],
|
|
17
|
+
};
|
|
18
|
+
export function poll(callback, statusLookup = DEFAULT_POLLING_STATUS_LOOKUP, timeoutMs = 60000 // Default 60 second timeout
|
|
19
|
+
) {
|
|
20
|
+
return new Promise((resolve, reject) => {
|
|
21
|
+
const pollInterval = setInterval(async () => {
|
|
22
|
+
try {
|
|
23
|
+
const { data: pollResp } = await callback();
|
|
24
|
+
const { status } = pollResp;
|
|
25
|
+
if (statusLookup.successStates.includes(status)) {
|
|
26
|
+
clearInterval(pollInterval);
|
|
27
|
+
clearTimeout(timeoutId);
|
|
28
|
+
resolve(pollResp);
|
|
29
|
+
}
|
|
30
|
+
else if (statusLookup.errorStates.includes(status)) {
|
|
31
|
+
clearInterval(pollInterval);
|
|
32
|
+
clearTimeout(timeoutId);
|
|
33
|
+
reject(pollResp);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
clearInterval(pollInterval);
|
|
38
|
+
clearTimeout(timeoutId);
|
|
39
|
+
reject(error);
|
|
40
|
+
}
|
|
41
|
+
}, DEFAULT_POLLING_DELAY);
|
|
42
|
+
// Set a timeout to stop polling after specified duration
|
|
43
|
+
const timeoutId = setTimeout(() => {
|
|
44
|
+
clearInterval(pollInterval);
|
|
45
|
+
reject(new Error(lib.polling.timeoutError(timeoutMs)));
|
|
46
|
+
}, timeoutMs);
|
|
47
|
+
});
|
|
48
|
+
}
|