@hubspot/cli 7.7.21-experimental.1 → 7.7.22-experimental.0
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.js +14 -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 -50
- 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 +65 -67
- 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 -16
- 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 +1 -1
- package/commands/config/set.js +23 -25
- 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 +119 -125
- 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 +29 -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 +96 -134
- package/commands/project/__tests__/devUnifiedFlow.test.js +133 -139
- 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 +1 -1
- package/commands/project/deploy.js +67 -69
- 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 +62 -68
- 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 +51 -56
- 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 +35 -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 +15 -20
- package/commands/sandbox/__tests__/delete.test.js +15 -20
- package/commands/sandbox/create.d.ts +1 -1
- package/commands/sandbox/create.js +67 -69
- 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 +45 -53
- 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 +0 -22
- package/lang/en.js +371 -399
- package/lib/__tests__/accountTypes.test.js +20 -22
- package/lib/__tests__/buildAccount.test.js +28 -63
- 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 +6 -41
- package/lib/accountTypes.js +24 -34
- package/lib/app/__tests__/migrate.test.js +94 -99
- package/lib/app/__tests__/migrate_legacy.test.js +29 -31
- package/lib/app/migrate.d.ts +3 -3
- package/lib/app/migrate.js +127 -145
- 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 +1 -1
- package/lib/buildAccount.js +71 -80
- package/lib/commonOpts.d.ts +1 -1
- package/lib/commonOpts.js +42 -59
- package/lib/configMigrate.js +34 -38
- package/lib/configOptions.js +34 -40
- package/lib/constants.js +31 -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 +32 -41
- package/lib/errorHandlers/suppressError.d.ts +1 -1
- package/lib/errorHandlers/suppressError.js +28 -31
- 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.js +70 -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 +68 -73
- package/lib/projects/__tests__/LocalDevWebsocketServer.test.js +32 -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__/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 +36 -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 -3
- package/lib/projects/create/v3.js +49 -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 -24
- package/lib/projects/localDev/DevServerManagerV2.d.ts +2 -2
- package/lib/projects/localDev/DevServerManagerV2.js +15 -20
- package/lib/projects/localDev/LocalDevLogger.d.ts +1 -1
- package/lib/projects/localDev/LocalDevLogger.js +59 -64
- package/lib/projects/localDev/LocalDevManager.d.ts +1 -1
- package/lib/projects/localDev/LocalDevManager.js +106 -111
- package/lib/projects/localDev/LocalDevProcess.d.ts +4 -4
- package/lib/projects/localDev/LocalDevProcess.js +25 -30
- package/lib/projects/localDev/LocalDevState.d.ts +3 -3
- package/lib/projects/localDev/LocalDevState.js +3 -5
- package/lib/projects/localDev/LocalDevWatcher.d.ts +1 -1
- package/lib/projects/localDev/LocalDevWatcher.js +6 -11
- package/lib/projects/localDev/LocalDevWebsocketServer.d.ts +1 -1
- package/lib/projects/localDev/LocalDevWebsocketServer.js +25 -27
- package/lib/projects/localDev/helpers.d.ts +3 -3
- package/lib/projects/localDev/helpers.js +156 -174
- package/lib/projects/structure.d.ts +4 -4
- package/lib/projects/structure.js +32 -78
- package/lib/projects/ui.js +10 -13
- package/lib/projects/upload.d.ts +2 -3
- package/lib/projects/upload.js +55 -65
- package/lib/projects/urls.js +14 -24
- 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 +1 -1
- package/lib/prompts/createDeveloperTestAccountConfigPrompt.js +23 -26
- 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 +17 -24
- 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 +1 -1
- package/lib/sandboxes.js +68 -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.js +55 -73
- 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/hasFlag.js +2 -8
- package/lib/validation.js +48 -87
- package/lib/yargsUtils.d.ts +1 -1
- package/lib/yargsUtils.js +13 -16
- package/mcp-server/server.js +6 -8
- package/mcp-server/tools/index.js +13 -16
- package/mcp-server/tools/project/AddFeatureToProject.d.ts +1 -1
- package/mcp-server/tools/project/AddFeatureToProject.js +35 -39
- package/mcp-server/tools/project/CreateProjectTool.d.ts +1 -1
- package/mcp-server/tools/project/CreateProjectTool.js +46 -50
- package/mcp-server/tools/project/DeployProject.d.ts +1 -1
- package/mcp-server/tools/project/DeployProject.js +18 -22
- 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__/AddFeatureToProject.test.js +12 -14
- package/mcp-server/tools/project/__tests__/CreateProjectTool.test.js +13 -15
- package/mcp-server/tools/project/__tests__/DeployProject.test.js +6 -8
- 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.js +3 -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 +15 -11
- package/types/Cms.d.ts +1 -1
- package/types/Cms.js +1 -2
- package/types/LocalDev.d.ts +4 -4
- 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/commands/app/__tests__/install.test.d.ts +0 -1
- package/commands/app/__tests__/install.test.js +0 -52
- package/commands/app/install.d.ts +0 -8
- package/commands/app/install.js +0 -127
|
@@ -1,47 +1,42 @@
|
|
|
1
|
-
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const vitest_1 = require("vitest");
|
|
1
|
+
import { vi } from 'vitest';
|
|
7
2
|
// Mock the ui-extensions-dev-server module
|
|
8
|
-
|
|
3
|
+
vi.mock('@hubspot/ui-extensions-dev-server', () => {
|
|
9
4
|
return {
|
|
10
5
|
DevModeUnifiedInterface: {
|
|
11
|
-
setup:
|
|
12
|
-
start:
|
|
13
|
-
fileChange:
|
|
14
|
-
cleanup:
|
|
6
|
+
setup: vi.fn().mockResolvedValue(undefined),
|
|
7
|
+
start: vi.fn().mockResolvedValue(undefined),
|
|
8
|
+
fileChange: vi.fn().mockResolvedValue(undefined),
|
|
9
|
+
cleanup: vi.fn().mockResolvedValue(undefined),
|
|
15
10
|
},
|
|
16
11
|
};
|
|
17
12
|
});
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
13
|
+
import { fetchAppInstallationData } from '@hubspot/local-dev-lib/api/localDevAuth';
|
|
14
|
+
import { fetchPublicAppsForPortal, fetchPublicAppProductionInstallCounts, installStaticAuthAppOnTestAccount, } from '@hubspot/local-dev-lib/api/appsDev';
|
|
15
|
+
import { DevModeUnifiedInterface as UIEDevModeInterface } from '@hubspot/ui-extensions-dev-server';
|
|
16
|
+
import { requestPorts } from '@hubspot/local-dev-lib/portManager';
|
|
17
|
+
import { getAccountConfig } from '@hubspot/local-dev-lib/config';
|
|
18
|
+
import AppDevModeInterface from '../localDev/AppDevModeInterface.js';
|
|
19
|
+
import LocalDevState from '../localDev/LocalDevState.js';
|
|
20
|
+
import LocalDevLogger from '../localDev/LocalDevLogger.js';
|
|
21
|
+
import { installAppAutoPrompt, installAppBrowserPrompt, } from '../../prompts/installAppPrompt.js';
|
|
22
|
+
import { confirmPrompt } from '../../prompts/promptUtils.js';
|
|
23
|
+
import { getOauthAppInstallUrl, getStaticAuthAppInstallUrl, } from '../../app/urls.js';
|
|
24
|
+
import { isDeveloperTestAccount, isSandbox } from '../../accountTypes.js';
|
|
25
|
+
import { logError } from '../../errorHandlers/index.js';
|
|
26
|
+
import { APP_AUTH_TYPES, APP_DISTRIBUTION_TYPES, APP_INSTALLATION_STATES, LOCAL_DEV_SERVER_MESSAGE_TYPES, } from '../../constants.js';
|
|
27
|
+
import { ENVIRONMENTS } from '@hubspot/local-dev-lib/constants/environments';
|
|
28
|
+
vi.mock('@hubspot/local-dev-lib/api/localDevAuth');
|
|
29
|
+
vi.mock('@hubspot/local-dev-lib/api/appsDev');
|
|
30
|
+
vi.mock('@hubspot/local-dev-lib/portManager');
|
|
31
|
+
vi.mock('@hubspot/local-dev-lib/config');
|
|
32
|
+
vi.mock('../../prompts/installAppPrompt');
|
|
33
|
+
vi.mock('../../prompts/promptUtils');
|
|
34
|
+
vi.mock('../../app/urls');
|
|
35
|
+
vi.mock('../../accountTypes');
|
|
36
|
+
vi.mock('../../ui/logger');
|
|
37
|
+
vi.mock('../../errorHandlers/index');
|
|
38
|
+
vi.mock('../localDev/LocalDevState');
|
|
39
|
+
vi.mock('../localDev/LocalDevLogger');
|
|
45
40
|
describe('AppDevModeInterface', () => {
|
|
46
41
|
let appDevModeInterface;
|
|
47
42
|
let mockLocalDevState;
|
|
@@ -59,13 +54,13 @@ describe('AppDevModeInterface', () => {
|
|
|
59
54
|
description: 'Test app description',
|
|
60
55
|
logo: 'logo.png',
|
|
61
56
|
auth: {
|
|
62
|
-
type:
|
|
57
|
+
type: APP_AUTH_TYPES.STATIC,
|
|
63
58
|
requiredScopes: ['test-scope'],
|
|
64
59
|
optionalScopes: [],
|
|
65
60
|
conditionallyRequiredScopes: [],
|
|
66
61
|
redirectUrls: ['http://localhost:3000'],
|
|
67
62
|
},
|
|
68
|
-
distribution:
|
|
63
|
+
distribution: APP_DISTRIBUTION_TYPES.PRIVATE,
|
|
69
64
|
},
|
|
70
65
|
localDev: {
|
|
71
66
|
componentRoot: '/test/path',
|
|
@@ -80,7 +75,7 @@ describe('AppDevModeInterface', () => {
|
|
|
80
75
|
id: 123,
|
|
81
76
|
clientId: 'test-client-id',
|
|
82
77
|
name: 'Test App',
|
|
83
|
-
installationState:
|
|
78
|
+
installationState: APP_INSTALLATION_STATES.NOT_INSTALLED,
|
|
84
79
|
scopeGroupIds: [1, 2, 3],
|
|
85
80
|
};
|
|
86
81
|
const mockPublicApp = {
|
|
@@ -91,61 +86,61 @@ describe('AppDevModeInterface', () => {
|
|
|
91
86
|
scopeGroupIds: [1, 2, 3],
|
|
92
87
|
};
|
|
93
88
|
beforeEach(() => {
|
|
94
|
-
|
|
89
|
+
vi.clearAllMocks();
|
|
95
90
|
mockLocalDevState = {
|
|
96
91
|
targetProjectAccountId: 12345,
|
|
97
92
|
targetTestingAccountId: 67890,
|
|
98
93
|
projectConfig: mockProjectConfig,
|
|
99
94
|
projectDir: '/test/project',
|
|
100
95
|
projectId: 999,
|
|
101
|
-
env:
|
|
96
|
+
env: ENVIRONMENTS.PROD,
|
|
102
97
|
projectNodes: { [mockAppNode.uid]: mockAppNode },
|
|
103
|
-
getAppDataByUid:
|
|
104
|
-
setAppDataForUid:
|
|
105
|
-
addListener:
|
|
98
|
+
getAppDataByUid: vi.fn(),
|
|
99
|
+
setAppDataForUid: vi.fn(),
|
|
100
|
+
addListener: vi.fn(),
|
|
106
101
|
};
|
|
107
102
|
mockLocalDevLogger = {
|
|
108
|
-
addUploadWarning:
|
|
103
|
+
addUploadWarning: vi.fn(),
|
|
109
104
|
};
|
|
110
105
|
// Mock constructors
|
|
111
|
-
|
|
112
|
-
|
|
106
|
+
LocalDevState.mockImplementation(() => mockLocalDevState);
|
|
107
|
+
LocalDevLogger.mockImplementation(() => mockLocalDevLogger);
|
|
113
108
|
// Mock external dependencies
|
|
114
|
-
|
|
109
|
+
fetchPublicAppsForPortal.mockResolvedValue({
|
|
115
110
|
data: { results: [mockPublicApp] },
|
|
116
111
|
});
|
|
117
|
-
|
|
112
|
+
fetchPublicAppProductionInstallCounts.mockResolvedValue({
|
|
118
113
|
data: { uniquePortalInstallCount: 5 },
|
|
119
114
|
});
|
|
120
|
-
|
|
115
|
+
fetchAppInstallationData.mockResolvedValue({
|
|
121
116
|
data: {
|
|
122
117
|
isInstalledWithScopeGroups: true,
|
|
123
118
|
previouslyAuthorizedScopeGroups: [],
|
|
124
119
|
},
|
|
125
120
|
});
|
|
126
|
-
|
|
121
|
+
getAccountConfig.mockReturnValue({
|
|
127
122
|
parentAccountId: 12345,
|
|
128
123
|
});
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
124
|
+
isDeveloperTestAccount.mockReturnValue(true);
|
|
125
|
+
isSandbox.mockReturnValue(false);
|
|
126
|
+
getOauthAppInstallUrl.mockReturnValue('http://oauth-install-url');
|
|
127
|
+
getStaticAuthAppInstallUrl.mockReturnValue('http://static-install-url');
|
|
128
|
+
installAppAutoPrompt.mockResolvedValue(true);
|
|
129
|
+
installAppBrowserPrompt.mockResolvedValue(undefined);
|
|
130
|
+
confirmPrompt.mockResolvedValue(true);
|
|
131
|
+
installStaticAuthAppOnTestAccount.mockResolvedValue(undefined);
|
|
137
132
|
// Mock process.exit
|
|
138
|
-
|
|
133
|
+
vi.spyOn(global.process, 'exit').mockImplementation((code) => {
|
|
139
134
|
throw new Error(`Process.exit called with code ${code}`);
|
|
140
135
|
});
|
|
141
|
-
appDevModeInterface = new
|
|
136
|
+
appDevModeInterface = new AppDevModeInterface({
|
|
142
137
|
localDevState: mockLocalDevState,
|
|
143
138
|
localDevLogger: mockLocalDevLogger,
|
|
144
139
|
});
|
|
145
140
|
});
|
|
146
141
|
describe('constructor', () => {
|
|
147
142
|
it('should initialize with valid state', () => {
|
|
148
|
-
expect(appDevModeInterface).toBeInstanceOf(
|
|
143
|
+
expect(appDevModeInterface).toBeInstanceOf(AppDevModeInterface);
|
|
149
144
|
expect(appDevModeInterface.localDevState).toBe(mockLocalDevState);
|
|
150
145
|
expect(appDevModeInterface.localDevLogger).toBe(mockLocalDevLogger);
|
|
151
146
|
});
|
|
@@ -155,7 +150,7 @@ describe('AppDevModeInterface', () => {
|
|
|
155
150
|
targetProjectAccountId: null,
|
|
156
151
|
};
|
|
157
152
|
expect(() => {
|
|
158
|
-
new
|
|
153
|
+
new AppDevModeInterface({
|
|
159
154
|
localDevState: mockLocalDevStateWithoutAccountId,
|
|
160
155
|
localDevLogger: mockLocalDevLogger,
|
|
161
156
|
});
|
|
@@ -167,7 +162,7 @@ describe('AppDevModeInterface', () => {
|
|
|
167
162
|
projectConfig: null,
|
|
168
163
|
};
|
|
169
164
|
expect(() => {
|
|
170
|
-
new
|
|
165
|
+
new AppDevModeInterface({
|
|
171
166
|
localDevState: mockLocalDevStateWithoutConfig,
|
|
172
167
|
localDevLogger: mockLocalDevLogger,
|
|
173
168
|
});
|
|
@@ -179,7 +174,7 @@ describe('AppDevModeInterface', () => {
|
|
|
179
174
|
projectDir: null,
|
|
180
175
|
};
|
|
181
176
|
expect(() => {
|
|
182
|
-
new
|
|
177
|
+
new AppDevModeInterface({
|
|
183
178
|
localDevState: mockLocalDevStateWithoutDir,
|
|
184
179
|
localDevLogger: mockLocalDevLogger,
|
|
185
180
|
});
|
|
@@ -193,29 +188,29 @@ describe('AppDevModeInterface', () => {
|
|
|
193
188
|
it('should return early if no app node exists', async () => {
|
|
194
189
|
mockLocalDevState.projectNodes = {};
|
|
195
190
|
await appDevModeInterface.setup({});
|
|
196
|
-
expect(
|
|
197
|
-
expect(
|
|
191
|
+
expect(fetchPublicAppsForPortal).not.toHaveBeenCalled();
|
|
192
|
+
expect(UIEDevModeInterface.setup).not.toHaveBeenCalled();
|
|
198
193
|
});
|
|
199
194
|
it('should setup successfully with private app', async () => {
|
|
200
195
|
await appDevModeInterface.setup({});
|
|
201
|
-
expect(
|
|
202
|
-
expect(
|
|
203
|
-
expect(
|
|
204
|
-
expect(
|
|
196
|
+
expect(fetchPublicAppsForPortal).toHaveBeenCalledWith(12345);
|
|
197
|
+
expect(fetchPublicAppProductionInstallCounts).toHaveBeenCalledWith(123, 12345);
|
|
198
|
+
expect(fetchAppInstallationData).toHaveBeenCalledWith(67890, 999, 'test-app-uid', ['test-scope'], []);
|
|
199
|
+
expect(UIEDevModeInterface.setup).toHaveBeenCalled();
|
|
205
200
|
});
|
|
206
201
|
it('should show marketplace warning for marketplace apps', async () => {
|
|
207
202
|
const marketplaceAppNode = {
|
|
208
203
|
...mockAppNode,
|
|
209
204
|
config: {
|
|
210
205
|
...mockAppNode.config,
|
|
211
|
-
distribution:
|
|
206
|
+
distribution: APP_DISTRIBUTION_TYPES.MARKETPLACE,
|
|
212
207
|
},
|
|
213
208
|
};
|
|
214
209
|
mockLocalDevState.projectNodes = {
|
|
215
210
|
[marketplaceAppNode.uid]: marketplaceAppNode,
|
|
216
211
|
};
|
|
217
212
|
await appDevModeInterface.setup({});
|
|
218
|
-
expect(
|
|
213
|
+
expect(confirmPrompt).toHaveBeenCalled();
|
|
219
214
|
expect(mockLocalDevLogger.addUploadWarning).toHaveBeenCalled();
|
|
220
215
|
});
|
|
221
216
|
it('should exit if user declines marketplace warning', async () => {
|
|
@@ -223,20 +218,20 @@ describe('AppDevModeInterface', () => {
|
|
|
223
218
|
...mockAppNode,
|
|
224
219
|
config: {
|
|
225
220
|
...mockAppNode.config,
|
|
226
|
-
distribution:
|
|
221
|
+
distribution: APP_DISTRIBUTION_TYPES.MARKETPLACE,
|
|
227
222
|
},
|
|
228
223
|
};
|
|
229
224
|
mockLocalDevState.projectNodes = {
|
|
230
225
|
[marketplaceAppNode.uid]: marketplaceAppNode,
|
|
231
226
|
};
|
|
232
227
|
// Set up conditions to trigger marketplace warning
|
|
233
|
-
|
|
228
|
+
fetchPublicAppProductionInstallCounts.mockResolvedValue({
|
|
234
229
|
data: { uniquePortalInstallCount: 5 },
|
|
235
230
|
});
|
|
236
231
|
mockLocalDevState.getAppDataByUid.mockReturnValue(mockAppData);
|
|
237
|
-
|
|
232
|
+
confirmPrompt.mockResolvedValue(false);
|
|
238
233
|
// Create a new instance to trigger the exit during setup
|
|
239
|
-
const newAppDevModeInterface = new
|
|
234
|
+
const newAppDevModeInterface = new AppDevModeInterface({
|
|
240
235
|
localDevState: mockLocalDevState,
|
|
241
236
|
localDevLogger: mockLocalDevLogger,
|
|
242
237
|
});
|
|
@@ -245,14 +240,14 @@ describe('AppDevModeInterface', () => {
|
|
|
245
240
|
expect(process.exit).toHaveBeenCalledWith(0);
|
|
246
241
|
});
|
|
247
242
|
it('should auto-install static auth app on test account', async () => {
|
|
248
|
-
|
|
243
|
+
fetchAppInstallationData.mockResolvedValue({
|
|
249
244
|
data: {
|
|
250
245
|
isInstalledWithScopeGroups: false,
|
|
251
246
|
previouslyAuthorizedScopeGroups: [],
|
|
252
247
|
},
|
|
253
248
|
});
|
|
254
249
|
await appDevModeInterface.setup({});
|
|
255
|
-
expect(
|
|
250
|
+
expect(installStaticAuthAppOnTestAccount).toHaveBeenCalledWith(123, 67890, [1, 2, 3]);
|
|
256
251
|
});
|
|
257
252
|
it('should open browser for OAuth app installation', async () => {
|
|
258
253
|
const oauthAppNode = {
|
|
@@ -261,50 +256,50 @@ describe('AppDevModeInterface', () => {
|
|
|
261
256
|
...mockAppNode.config,
|
|
262
257
|
auth: {
|
|
263
258
|
...mockAppNode.config.auth,
|
|
264
|
-
type:
|
|
259
|
+
type: APP_AUTH_TYPES.OAUTH,
|
|
265
260
|
},
|
|
266
261
|
},
|
|
267
262
|
};
|
|
268
263
|
mockLocalDevState.projectNodes = { [oauthAppNode.uid]: oauthAppNode };
|
|
269
|
-
|
|
264
|
+
fetchAppInstallationData.mockResolvedValue({
|
|
270
265
|
data: {
|
|
271
266
|
isInstalledWithScopeGroups: false,
|
|
272
267
|
previouslyAuthorizedScopeGroups: [],
|
|
273
268
|
},
|
|
274
269
|
});
|
|
275
270
|
await appDevModeInterface.setup({});
|
|
276
|
-
expect(
|
|
271
|
+
expect(getOauthAppInstallUrl).toHaveBeenCalledWith({
|
|
277
272
|
targetAccountId: 67890,
|
|
278
|
-
env:
|
|
273
|
+
env: ENVIRONMENTS.PROD,
|
|
279
274
|
clientId: 'test-client-id',
|
|
280
275
|
scopes: ['test-scope'],
|
|
281
276
|
redirectUrls: ['http://localhost:3000'],
|
|
282
277
|
});
|
|
283
|
-
expect(
|
|
278
|
+
expect(installAppBrowserPrompt).toHaveBeenCalled();
|
|
284
279
|
});
|
|
285
280
|
it('should handle app reinstallation', async () => {
|
|
286
281
|
// Set up conditions for non-automatic installation
|
|
287
|
-
|
|
288
|
-
|
|
282
|
+
getAccountConfig.mockReturnValue(null);
|
|
283
|
+
fetchAppInstallationData.mockResolvedValue({
|
|
289
284
|
data: {
|
|
290
285
|
isInstalledWithScopeGroups: false,
|
|
291
286
|
previouslyAuthorizedScopeGroups: ['old-scope'],
|
|
292
287
|
},
|
|
293
288
|
});
|
|
294
289
|
await appDevModeInterface.setup({});
|
|
295
|
-
expect(
|
|
290
|
+
expect(installAppBrowserPrompt).toHaveBeenCalledWith('http://static-install-url', true);
|
|
296
291
|
});
|
|
297
292
|
it('should handle errors during setup', async () => {
|
|
298
293
|
const error = new Error('Setup failed');
|
|
299
|
-
|
|
294
|
+
fetchPublicAppsForPortal.mockRejectedValue(error);
|
|
300
295
|
await appDevModeInterface.setup({});
|
|
301
|
-
expect(
|
|
296
|
+
expect(logError).toHaveBeenCalledWith(error);
|
|
302
297
|
});
|
|
303
298
|
it('should exit if app not found in portal', async () => {
|
|
304
299
|
// Set up conditions for non-automatic installation to force getAppInstallUrl call
|
|
305
|
-
|
|
300
|
+
getAccountConfig.mockReturnValue(null);
|
|
306
301
|
// First call for fetchAppData succeeds
|
|
307
|
-
|
|
302
|
+
fetchPublicAppsForPortal
|
|
308
303
|
.mockResolvedValueOnce({
|
|
309
304
|
data: { results: [mockPublicApp] },
|
|
310
305
|
})
|
|
@@ -312,7 +307,7 @@ describe('AppDevModeInterface', () => {
|
|
|
312
307
|
.mockResolvedValueOnce({
|
|
313
308
|
data: { results: [] },
|
|
314
309
|
});
|
|
315
|
-
|
|
310
|
+
fetchAppInstallationData.mockResolvedValue({
|
|
316
311
|
data: {
|
|
317
312
|
isInstalledWithScopeGroups: false,
|
|
318
313
|
previouslyAuthorizedScopeGroups: [],
|
|
@@ -324,19 +319,19 @@ describe('AppDevModeInterface', () => {
|
|
|
324
319
|
});
|
|
325
320
|
it('should exit if user declines auto-install', async () => {
|
|
326
321
|
// Set up conditions for automatic installation
|
|
327
|
-
|
|
322
|
+
getAccountConfig.mockReturnValue({
|
|
328
323
|
parentAccountId: 12345, // matches targetProjectAccountId
|
|
329
324
|
});
|
|
330
|
-
|
|
331
|
-
|
|
325
|
+
isDeveloperTestAccount.mockReturnValue(true);
|
|
326
|
+
fetchAppInstallationData.mockResolvedValue({
|
|
332
327
|
data: {
|
|
333
328
|
isInstalledWithScopeGroups: false,
|
|
334
329
|
previouslyAuthorizedScopeGroups: [],
|
|
335
330
|
},
|
|
336
331
|
});
|
|
337
|
-
|
|
332
|
+
installAppAutoPrompt.mockResolvedValue(false);
|
|
338
333
|
// Create a new instance to trigger the exit during setup
|
|
339
|
-
const newAppDevModeInterface = new
|
|
334
|
+
const newAppDevModeInterface = new AppDevModeInterface({
|
|
340
335
|
localDevState: mockLocalDevState,
|
|
341
336
|
localDevLogger: mockLocalDevLogger,
|
|
342
337
|
});
|
|
@@ -345,29 +340,29 @@ describe('AppDevModeInterface', () => {
|
|
|
345
340
|
expect(process.exit).toHaveBeenCalledWith(0);
|
|
346
341
|
});
|
|
347
342
|
it('should fallback to browser install if auto-install fails', async () => {
|
|
348
|
-
|
|
343
|
+
fetchAppInstallationData.mockResolvedValue({
|
|
349
344
|
data: {
|
|
350
345
|
isInstalledWithScopeGroups: false,
|
|
351
346
|
previouslyAuthorizedScopeGroups: [],
|
|
352
347
|
},
|
|
353
348
|
});
|
|
354
|
-
|
|
349
|
+
installStaticAuthAppOnTestAccount.mockRejectedValue(new Error('Install failed'));
|
|
355
350
|
await appDevModeInterface.setup({});
|
|
356
|
-
expect(
|
|
351
|
+
expect(installAppBrowserPrompt).toHaveBeenCalledWith('http://static-install-url', false);
|
|
357
352
|
});
|
|
358
353
|
});
|
|
359
354
|
describe('start()', () => {
|
|
360
355
|
it('should return early if no app node exists', async () => {
|
|
361
356
|
mockLocalDevState.projectNodes = {};
|
|
362
357
|
await appDevModeInterface.start();
|
|
363
|
-
expect(
|
|
358
|
+
expect(UIEDevModeInterface.start).not.toHaveBeenCalled();
|
|
364
359
|
});
|
|
365
360
|
it('should start UIE dev mode interface', async () => {
|
|
366
361
|
await appDevModeInterface.start();
|
|
367
|
-
expect(
|
|
362
|
+
expect(UIEDevModeInterface.start).toHaveBeenCalledWith({
|
|
368
363
|
accountId: 67890,
|
|
369
364
|
projectConfig: mockProjectConfig,
|
|
370
|
-
requestPorts
|
|
365
|
+
requestPorts,
|
|
371
366
|
});
|
|
372
367
|
});
|
|
373
368
|
});
|
|
@@ -375,22 +370,22 @@ describe('AppDevModeInterface', () => {
|
|
|
375
370
|
it('should return early if no app node exists', async () => {
|
|
376
371
|
mockLocalDevState.projectNodes = {};
|
|
377
372
|
await appDevModeInterface.fileChange('test.js', 'change');
|
|
378
|
-
expect(
|
|
373
|
+
expect(UIEDevModeInterface.fileChange).not.toHaveBeenCalled();
|
|
379
374
|
});
|
|
380
375
|
it('should forward file change to UIE dev mode interface', async () => {
|
|
381
376
|
await appDevModeInterface.fileChange('test.js', 'change');
|
|
382
|
-
expect(
|
|
377
|
+
expect(UIEDevModeInterface.fileChange).toHaveBeenCalledWith('test.js', 'change');
|
|
383
378
|
});
|
|
384
379
|
});
|
|
385
380
|
describe('cleanup()', () => {
|
|
386
381
|
it('should return early if no app node exists', async () => {
|
|
387
382
|
mockLocalDevState.projectNodes = {};
|
|
388
383
|
await appDevModeInterface.cleanup();
|
|
389
|
-
expect(
|
|
384
|
+
expect(UIEDevModeInterface.cleanup).not.toHaveBeenCalled();
|
|
390
385
|
});
|
|
391
386
|
it('should cleanup UIE dev mode interface', async () => {
|
|
392
387
|
await appDevModeInterface.cleanup();
|
|
393
|
-
expect(
|
|
388
|
+
expect(UIEDevModeInterface.cleanup).toHaveBeenCalled();
|
|
394
389
|
});
|
|
395
390
|
});
|
|
396
391
|
describe('isAutomaticallyInstallable()', () => {
|
|
@@ -400,106 +395,106 @@ describe('AppDevModeInterface', () => {
|
|
|
400
395
|
});
|
|
401
396
|
it('should return false if target account config is missing', async () => {
|
|
402
397
|
// Reset mocks to ensure clean state
|
|
403
|
-
|
|
398
|
+
vi.clearAllMocks();
|
|
404
399
|
// Set up basic mocks
|
|
405
|
-
|
|
400
|
+
fetchPublicAppsForPortal.mockResolvedValue({
|
|
406
401
|
data: { results: [mockPublicApp] },
|
|
407
402
|
});
|
|
408
|
-
|
|
403
|
+
fetchPublicAppProductionInstallCounts.mockResolvedValue({
|
|
409
404
|
data: { uniquePortalInstallCount: 5 },
|
|
410
405
|
});
|
|
411
|
-
|
|
412
|
-
|
|
406
|
+
getStaticAuthAppInstallUrl.mockReturnValue('http://static-install-url');
|
|
407
|
+
installAppBrowserPrompt.mockResolvedValue(undefined);
|
|
413
408
|
// Reset the mock LocalDevState
|
|
414
|
-
mockLocalDevState.getAppDataByUid =
|
|
415
|
-
mockLocalDevState.setAppDataForUid =
|
|
416
|
-
mockLocalDevState.addListener =
|
|
409
|
+
mockLocalDevState.getAppDataByUid = vi.fn().mockReturnValue(mockAppData);
|
|
410
|
+
mockLocalDevState.setAppDataForUid = vi.fn();
|
|
411
|
+
mockLocalDevState.addListener = vi.fn();
|
|
417
412
|
// Target account config is missing
|
|
418
|
-
|
|
413
|
+
getAccountConfig.mockReturnValue(null);
|
|
419
414
|
// App is not installed
|
|
420
|
-
|
|
415
|
+
fetchAppInstallationData.mockResolvedValue({
|
|
421
416
|
data: {
|
|
422
417
|
isInstalledWithScopeGroups: false,
|
|
423
418
|
previouslyAuthorizedScopeGroups: [],
|
|
424
419
|
},
|
|
425
420
|
});
|
|
426
421
|
// Create a new instance to avoid interference from previous test setup
|
|
427
|
-
const newAppDevModeInterface = new
|
|
422
|
+
const newAppDevModeInterface = new AppDevModeInterface({
|
|
428
423
|
localDevState: mockLocalDevState,
|
|
429
424
|
localDevLogger: mockLocalDevLogger,
|
|
430
425
|
});
|
|
431
426
|
await newAppDevModeInterface.setup({});
|
|
432
|
-
expect(
|
|
427
|
+
expect(installAppBrowserPrompt).toHaveBeenCalled();
|
|
433
428
|
});
|
|
434
429
|
it('should return false for OAuth app', async () => {
|
|
435
430
|
// Reset mocks to ensure clean state
|
|
436
|
-
|
|
431
|
+
vi.clearAllMocks();
|
|
437
432
|
// Set up basic mocks
|
|
438
|
-
|
|
433
|
+
fetchPublicAppsForPortal.mockResolvedValue({
|
|
439
434
|
data: { results: [mockPublicApp] },
|
|
440
435
|
});
|
|
441
|
-
|
|
436
|
+
fetchPublicAppProductionInstallCounts.mockResolvedValue({
|
|
442
437
|
data: { uniquePortalInstallCount: 5 },
|
|
443
438
|
});
|
|
444
|
-
|
|
445
|
-
|
|
439
|
+
getOauthAppInstallUrl.mockReturnValue('http://oauth-install-url');
|
|
440
|
+
installAppBrowserPrompt.mockResolvedValue(undefined);
|
|
446
441
|
// Reset the mock LocalDevState
|
|
447
|
-
mockLocalDevState.getAppDataByUid =
|
|
448
|
-
mockLocalDevState.setAppDataForUid =
|
|
449
|
-
mockLocalDevState.addListener =
|
|
442
|
+
mockLocalDevState.getAppDataByUid = vi.fn().mockReturnValue(mockAppData);
|
|
443
|
+
mockLocalDevState.setAppDataForUid = vi.fn();
|
|
444
|
+
mockLocalDevState.addListener = vi.fn();
|
|
450
445
|
const oauthAppNode = {
|
|
451
446
|
...mockAppNode,
|
|
452
447
|
config: {
|
|
453
448
|
...mockAppNode.config,
|
|
454
449
|
auth: {
|
|
455
450
|
...mockAppNode.config.auth,
|
|
456
|
-
type:
|
|
451
|
+
type: APP_AUTH_TYPES.OAUTH,
|
|
457
452
|
},
|
|
458
453
|
},
|
|
459
454
|
};
|
|
460
455
|
mockLocalDevState.projectNodes = { [oauthAppNode.uid]: oauthAppNode };
|
|
461
456
|
// App is not installed
|
|
462
|
-
|
|
457
|
+
fetchAppInstallationData.mockResolvedValue({
|
|
463
458
|
data: {
|
|
464
459
|
isInstalledWithScopeGroups: false,
|
|
465
460
|
previouslyAuthorizedScopeGroups: [],
|
|
466
461
|
},
|
|
467
462
|
});
|
|
468
463
|
// Create a new instance to avoid interference from previous test setup
|
|
469
|
-
const newAppDevModeInterface = new
|
|
464
|
+
const newAppDevModeInterface = new AppDevModeInterface({
|
|
470
465
|
localDevState: mockLocalDevState,
|
|
471
466
|
localDevLogger: mockLocalDevLogger,
|
|
472
467
|
});
|
|
473
468
|
await newAppDevModeInterface.setup({});
|
|
474
|
-
expect(
|
|
469
|
+
expect(installAppBrowserPrompt).toHaveBeenCalled();
|
|
475
470
|
});
|
|
476
471
|
});
|
|
477
472
|
describe('websocket server message handling', () => {
|
|
478
473
|
it('should check app installation when websocket server connects', async () => {
|
|
479
474
|
// Reset mocks to ensure clean state
|
|
480
|
-
|
|
475
|
+
vi.clearAllMocks();
|
|
481
476
|
// Set up basic mocks
|
|
482
|
-
|
|
477
|
+
fetchPublicAppsForPortal.mockResolvedValue({
|
|
483
478
|
data: { results: [mockPublicApp] },
|
|
484
479
|
});
|
|
485
|
-
|
|
480
|
+
fetchPublicAppProductionInstallCounts.mockResolvedValue({
|
|
486
481
|
data: { uniquePortalInstallCount: 5 },
|
|
487
482
|
});
|
|
488
|
-
|
|
489
|
-
|
|
483
|
+
getStaticAuthAppInstallUrl.mockReturnValue('http://static-install-url');
|
|
484
|
+
installAppBrowserPrompt.mockResolvedValue(undefined);
|
|
490
485
|
// Reset the mock LocalDevState
|
|
491
|
-
mockLocalDevState.getAppDataByUid =
|
|
492
|
-
mockLocalDevState.setAppDataForUid =
|
|
493
|
-
mockLocalDevState.addListener =
|
|
486
|
+
mockLocalDevState.getAppDataByUid = vi.fn().mockReturnValue(mockAppData);
|
|
487
|
+
mockLocalDevState.setAppDataForUid = vi.fn();
|
|
488
|
+
mockLocalDevState.addListener = vi.fn();
|
|
494
489
|
// App is not installed so fetchAppInstallationData will be called
|
|
495
|
-
|
|
490
|
+
fetchAppInstallationData.mockResolvedValue({
|
|
496
491
|
data: {
|
|
497
492
|
isInstalledWithScopeGroups: false,
|
|
498
493
|
previouslyAuthorizedScopeGroups: [],
|
|
499
494
|
},
|
|
500
495
|
});
|
|
501
496
|
// Create a new instance to avoid interference from previous test setup
|
|
502
|
-
const newAppDevModeInterface = new
|
|
497
|
+
const newAppDevModeInterface = new AppDevModeInterface({
|
|
503
498
|
localDevState: mockLocalDevState,
|
|
504
499
|
localDevLogger: mockLocalDevLogger,
|
|
505
500
|
});
|
|
@@ -510,8 +505,8 @@ describe('AppDevModeInterface', () => {
|
|
|
510
505
|
const [eventType, callback] = addListenerCall;
|
|
511
506
|
expect(eventType).toBe('devServerMessage');
|
|
512
507
|
// Call the callback with websocket connection message
|
|
513
|
-
await callback(
|
|
514
|
-
expect(
|
|
508
|
+
await callback(LOCAL_DEV_SERVER_MESSAGE_TYPES.WEBSOCKET_SERVER_CONNECTED);
|
|
509
|
+
expect(fetchAppInstallationData).toHaveBeenCalledTimes(2); // Once in setup, once in listener
|
|
515
510
|
});
|
|
516
511
|
});
|
|
517
512
|
});
|