npm package diff

Package: @forge/cli

Versions: 10.13.6 - 11.0.0-next.18

Removed: package/out/installations/site-translation/cloudid-products.js

Removed: package/out/installations/site-translation/cloudid-products.d.ts.map

Removed: package/out/installations/site-translation/cloudid-products.d.ts

Added: package/out/version/graphql-client.js

Added: package/out/command-line/register-version-commands.js

Added: package/out/installations/site-translation/sited-products.js

Added: package/out/command-line/controller/version-controller.js

Added: package/out/service/version-service.js

Added: package/out/command-line/view/version-view.js

Added: package/out/version/graphql-client.d.ts.map

Added: package/out/command-line/register-version-commands.d.ts.map

Added: package/out/installations/site-translation/sited-products.d.ts.map

Added: package/out/command-line/controller/version-controller.d.ts.map

Added: package/out/service/version-service.d.ts.map

Added: package/out/command-line/view/version-view.d.ts.map

Added: package/out/version/graphql-client.d.ts

Added: package/out/command-line/register-version-commands.d.ts

Added: package/out/installations/site-translation/sited-products.d.ts

Added: package/out/command-line/controller/version-controller.d.ts

Added: package/out/service/version-service.d.ts

Added: package/out/command-line/view/version-view.d.ts

Added: package/LICENSE.txt

Modified: package/out/installations/site-translation/bitbucket.js

Index: package/out/installations/site-translation/bitbucket.js
===================================================================
--- package/out/installations/site-translation/bitbucket.js
+++ package/out/installations/site-translation/bitbucket.js
@@ -93,9 +93,9 @@
     extractWorkspaceName(workspaceURL) {
         if (workspaceURL.hostname !== BITBUCKET_URL.hostname) {
             throw new InvalidWorkspaceError(workspaceURL);
         }
-        const pathnames = workspaceURL.pathname.substr(1).split('/');
+        const pathnames = workspaceURL.pathname.substring(1).split('/');
         if (!pathnames.length) {
             throw new InvalidWorkspaceError(workspaceURL);
         }
         return pathnames[0];

Modified: package/out/command-line/command.js

Index: package/out/command-line/command.js
===================================================================
--- package/out/command-line/command.js
+++ package/out/command-line/command.js
@@ -1,7 +1,7 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
-exports.getAutocompleteConfig = exports.Command = exports.WrapperError = void 0;
+exports.validateContext = exports.getAutocompleteConfig = exports.Command = exports.WrapperError = void 0;
 const tslib_1 = require("tslib");
 const commander_1 = tslib_1.__importStar(require("commander"));
 const semver_1 = tslib_1.__importDefault(require("semver"));
 const cli_shared_1 = require("@forge/cli-shared");
@@ -35,8 +35,9 @@
     cliDetails;
     credentialStore;
     defaultEnvironmentController;
     featureFlagService;
+    supportedProductsService;
     get verbose() {
         return this.cmd.opts().verbose;
     }
     static isError = (cmdError) => {
@@ -62,20 +63,21 @@
     requiresAuthentication;
     requiresAnalyticsConsent;
     requiredOptionFlags = [];
     preconditionFn = [];
-    static program(ui, analyticsClient, preCommandController, cliDetails, credentialStore, defaultEnvironmentController, featureFlagService) {
-        const cmd = new Command(ui, analyticsClient, preCommandController, cliDetails, credentialStore, defaultEnvironmentController, featureFlagService, {});
+    static program(ui, analyticsClient, preCommandController, cliDetails, credentialStore, defaultEnvironmentController, featureFlagService, supportedProductsService) {
+        const cmd = new Command(ui, analyticsClient, preCommandController, cliDetails, credentialStore, defaultEnvironmentController, featureFlagService, supportedProductsService, {});
         return cmd.version(cliDetails?.version ?? 'unknown', '--version').option('--verbose', cli_shared_1.Text.optionVerbose);
     }
-    constructor(ui, analyticsClient, preCommandController, cliDetails, credentialStore, defaultEnvironmentController, featureFlagService, { cmd, analyticsName, requiresAuthentication, requiresAnalyticsConsent, requiredOptionFlags, preconditionFn }) {
+    constructor(ui, analyticsClient, preCommandController, cliDetails, credentialStore, defaultEnvironmentController, featureFlagService, supportedProductsService, { cmd, analyticsName, requiresAuthentication, requiresAnalyticsConsent, requiredOptionFlags, preconditionFn }) {
         this.ui = ui;
         this.analyticsClient = analyticsClient;
         this.preCommandController = preCommandController;
         this.cliDetails = cliDetails;
         this.credentialStore = credentialStore;
         this.defaultEnvironmentController = defaultEnvironmentController;
         this.featureFlagService = featureFlagService;
+        this.supportedProductsService = supportedProductsService;
         this.cmd = cmd || new commander_1.default.Command();
         this.analyticsName = analyticsName;
         this.requiresAuthentication = requiresAuthentication ?? true;
         this.requiresAnalyticsConsent = requiresAnalyticsConsent ?? true;
@@ -89,9 +91,9 @@
         });
         this.cmd.configureHelp({ sortSubcommands: true });
     }
     clone(overrides) {
-        return new Command(this.ui, this.analyticsClient, this.preCommandController, this.cliDetails, this.credentialStore, this.defaultEnvironmentController, this.featureFlagService, {
+        return new Command(this.ui, this.analyticsClient, this.preCommandController, this.cliDetails, this.credentialStore, this.defaultEnvironmentController, this.featureFlagService, this.supportedProductsService, {
             cmd: this.cmd,
             analyticsName: this.analyticsName,
             requiresAuthentication: this.requiresAuthentication,
             requiresAnalyticsConsent: this.requiresAnalyticsConsent,
@@ -108,9 +110,9 @@
         const cmd = this.cmd
             .command(name, opts)
             .allowUnknownOption(false)
             .allowExcessArguments(false);
-        const subCommand = new Command(this.ui, this.analyticsClient, this.preCommandController, this.cliDetails, this.credentialStore, this.defaultEnvironmentController, this.featureFlagService, {
+        const subCommand = new Command(this.ui, this.analyticsClient, this.preCommandController, this.cliDetails, this.credentialStore, this.defaultEnvironmentController, this.featureFlagService, this.supportedProductsService, {
             cmd,
             analyticsName: Command.concatenateNames(this.analyticsName, cmd.name())
         }).option('--verbose', cli_shared_1.Text.optionVerbose);
         return subCommand;
@@ -175,8 +177,17 @@
             const environment = environmentArg || (await this.defaultEnvironmentController.run(nonInteractive));
             return { environment: (0, environment_1.checkEnvironmentOption)(environment) };
         });
     }
+    contextOption(supportedProducts) {
+        const supportedProductsService = this.supportedProductsService;
+        return this.option('-s, --site [site]', cli_shared_1.Text.optionSite)
+            .option('-p, --product [product]', cli_shared_1.Text.optionProduct(supportedProducts))
+            .precondition(async (...args) => {
+            const { site, product } = last(args);
+            return await validateContext({ supportedProductsService, site, product });
+        });
+    }
     jsonOption() {
         return this.option('--json', cli_shared_1.Text.optionJson, false);
     }
     requireNoAuthentication() {
@@ -415,4 +426,16 @@
     const options = getOptionsData(cmd);
     return { commands, options };
 }
 exports.getAutocompleteConfig = getAutocompleteConfig;
+async function validateContext({ supportedProductsService, site, product }) {
+    let maybeSupportedProduct = undefined;
+    let maybeSiteUrl = undefined;
+    if (product !== undefined) {
+        maybeSupportedProduct = await supportedProductsService.validateSupportedProduct(product);
+    }
+    if (site) {
+        maybeSiteUrl = await supportedProductsService.validateSite(site, maybeSupportedProduct);
+    }
+    return { site: maybeSiteUrl, product: maybeSupportedProduct };
+}
+exports.validateContext = validateContext;

Modified: package/out/command-line/dependency-injection.js

Index: package/out/command-line/dependency-injection.js
===================================================================
--- package/out/command-line/dependency-injection.js
+++ package/out/command-line/dependency-injection.js
@@ -68,8 +68,12 @@
 const graphql_client_8 = require("../eligibility/graphql-client");
 const roa_service_1 = require("../service/roa-service");
 const eligibility_controller_1 = require("./controller/eligibility-controller");
 const eligibility_view_1 = require("./view/eligibility-view");
+const version_controller_1 = require("./controller/version-controller");
+const version_service_1 = require("../service/version-service");
+const version_view_1 = require("./view/version-view");
+const graphql_client_9 = require("../version/graphql-client");
 const getDependencies = async (cliDetails) => {
     let cmd;
     const ui = new cli_shared_1.CommandLineUI(() => cmd.verbose);
     const cachedConf = cli_shared_1.CachedConf.getCache(cli_shared_1.CONFIG_PROJECT_NAME);
@@ -92,8 +96,9 @@
     const userRepository = new cli_shared_1.UserRepositoryImpl(createGraphQLClient, ui);
     const credentialStore = (0, cli_shared_1.getCredentialStore)(ui, userRepository);
     const featureFlagService = new cli_shared_1.FeatureFlagService(ui, cliDetails, credentialStore, appConfigReader);
     const statsigService = new cli_shared_1.StatsigService(ui, cliDetails, credentialStore, appConfigReader);
+    const supportedProductsService = new cli_shared_1.SupportedProductsService(statsigService);
     const settingsView = new settings_view_1.SettingsView(ui);
     const settingsController = new settings_controller_1.SettingsController(settingsView, cachedConfigService, assertiveAppConfigReader);
     const liteLintView = new lite_lint_view_1.LiteLintView(ui);
     const liteLintService = new lite_lint_service_1.LiteLintService();
@@ -138,9 +143,9 @@
     const entitiesClient = new graphql_client_4.EntitiesGraphqlClient(graphQLClient);
     const customEntitiesService = new custom_entities_service_1.CustomEntitiesService(assertiveAppConfigReader, appOauthClientGraphql, entitiesClient);
     const listEntitiesIndexesCommand = new list_indexes_1.ListEntitiesIndexesCommand(customEntitiesService);
     const bitbucketTranslation = new site_translation_1.BitbucketTranslator();
-    const cloudProductTranslation = new site_translation_1.CloudIdTranslator(graphQLClient);
+    const cloudProductTranslation = new site_translation_1.SitedProductTranslator(graphQLClient);
     const installationsClient = new graphql_client_6.InstallationsGraphqlClient(graphQLClient, cloudProductTranslation, bitbucketTranslation, cli_shared_1.pause);
     const installAppSiteCommand = new install_app_site_1.InstallAppSiteCommand(assertiveAppConfigReader, installationsClient);
     const uninstallAppCommand = new uninstall_app_1.UninstallAppCommand(assertiveAppConfigReader, installationsClient);
     const deployMonitorClient = new deploy_1.DeployMonitorGraphqlClient(graphQLClient);
@@ -158,13 +163,14 @@
     const sandboxAppPackager = new deploy_1.AppPackager(sandboxRuntimeBundler, nativeUiBundler, ui);
     const nodeAppPackager = new deploy_1.AppPackager(nodeRuntimeBundler, nativeUiBundler, ui);
     const getWebTriggerURLCommand = new get_webtrigger_url_1.GetWebTriggerURLCommand(assertiveAppConfigReader, installationsClient, appEnvironmentClient, webTriggerGraphqlClient);
     const autocompleteController = new autocomplete_controller_1.AutocompleteController(ui);
-    const installationsService = new installation_service_1.InstallationService(assertiveAppConfigReader, installationsClient, installationsClient);
+    const installationsService = new installation_service_1.InstallationService(assertiveAppConfigReader, installationsClient, installationsClient, installationsClient);
     const installView = new install_view_1.InstallView(ui);
-    const installController = new install_controller_1.InstallController(assertiveAppConfigReader, configFile, ui, installAppSiteCommand, installationsService, installView, statsigService);
+    const installController = new install_controller_1.InstallController(assertiveAppConfigReader, configFile, ui, installAppSiteCommand, installationsService, installView, supportedProductsService);
     const feedbackController = new feedback_controller_1.FeedbackController(credentialStore, feedbackPostClient);
     const eligibilityController = new eligibility_controller_1.EligibilityController(new roa_service_1.RoaService(assertiveAppConfigReader, new graphql_client_8.RoaEligibilityClient(graphQLClient)), new eligibility_view_1.EligibilityView(ui));
+    const versionController = new version_controller_1.VersionController(new version_service_1.VersionService(assertiveAppConfigReader, new graphql_client_9.AppVersionDetailsClient(graphQLClient)), new version_view_1.VersionView(ui));
     const lintService = new lint_service_1.LintService(configFile, fileReader);
     const lintView = new lint_view_1.LintView(ui);
     const lintController = new lint_controller_1.LintController(lintService, lintView);
     const deployView = new deploy_view_1.DeployView(ui);
@@ -191,9 +197,9 @@
     const tunnelController = new tunnel_controller_1.TunnelController(tunnelAnalyticsService, nodeTunnelService, localTunnelService, dockerTunnelService, tunnelView, configFile, credentialStore);
     const stubController = new stubController_1.StubController();
     const prerequisitesController = new prerequisites_controller_1.PrerequisitesController(ui, cliDetails);
     const defaultEnvironmentController = new default_environment_controller_1.DefaultEnvironmentController(ui, credentialStore, cachedConfigService, assertiveAppConfigReader, userRepository, createEnvironmentCommand, listEnvironmentCommand, getAppOwnerQuery);
-    cmd = command_1.Command.program(ui, analyticsClientReporter, preCommandController, cliDetails, credentialStore, defaultEnvironmentController, featureFlagService);
+    cmd = command_1.Command.program(ui, analyticsClientReporter, preCommandController, cliDetails, credentialStore, defaultEnvironmentController, featureFlagService, supportedProductsService);
     return {
         ui,
         cmd,
         configFile,
@@ -227,9 +233,10 @@
             installationsService,
             migrationKeysService,
             customEntitiesService,
             credentialStore,
-            userRepository
+            userRepository,
+            supportedProductsService
         },
         controllers: {
             autocompleteController,
             deployController,
@@ -241,9 +248,10 @@
             tunnelController,
             settingsController,
             stubController,
             prerequisitesController,
-            defaultEnvironmentController
+            defaultEnvironmentController,
+            versionController
         }
     };
 };
 exports.getDependencies = getDependencies;

Modified: package/out/command-line/controller/deploy-controller.js

Index: package/out/command-line/controller/deploy-controller.js
===================================================================
--- package/out/command-line/controller/deploy-controller.js
+++ package/out/command-line/controller/deploy-controller.js
@@ -202,17 +202,14 @@
             }
         }
         const handlers = await this.configFile.getAppHandlers();
         const resources = await this.configFile.getResources();
-        let hasProdInstallations = false;
+        let hasNoInstallationsForEnv = true;
         try {
-            const prodInstallations = await this.installationsService.listAppInstallations({
-                environment: 'production'
-            });
-            hasProdInstallations = !prodInstallations.installations.length;
+            hasNoInstallationsForEnv = await this.installationsService.hasNoAppInstallationsForEnv(appDetails.environmentType);
         }
         catch (err) {
-            this.deployView.displayListAppInstallationsError();
+            this.deployView.displayHasNoAppInstallationsForEnvError();
             if (verify) {
                 throw err;
             }
         }
@@ -220,9 +217,9 @@
             ? this.nodePackageUploadDeployCommand
             : this.sandboxPackageUploadDeployCommand;
         const config = await this.configFile.readConfig();
         const packageConfig = config.app?.package;
-        const analytics = await this.deployView.reportDeploymentProgress(appDetails, hasProdInstallations, () => deployCommand.execute({
+        const analytics = await this.deployView.reportDeploymentProgress(appDetails, hasNoInstallationsForEnv, () => deployCommand.execute({
             handlers,
             resources,
             environmentKey: environment,
             packageConfig,

Modified: package/out/command-line/view/deploy-view.js

Index: package/out/command-line/view/deploy-view.js
===================================================================
--- package/out/command-line/view/deploy-view.js
+++ package/out/command-line/view/deploy-view.js
@@ -14,10 +14,10 @@
     }
     displayStart(environment, environmentType) {
         this.ui.info(cli_shared_1.Text.deploy.cmd.start1(environment, environmentType));
     }
-    displayListAppInstallationsError() {
-        this.ui.info(cli_shared_1.Text.deploy.taskListInstallation.listInstallationError);
+    displayHasNoAppInstallationsForEnvError() {
+        this.ui.info(cli_shared_1.Text.deploy.hasNoAppInstallationsForEnv.hasNoAppInstallationsForEnvError);
     }
     displayLintRunning() {
         this.ui.info(cli_shared_1.Text.lint.running);
     }

Modified: package/out/environment/graphql-client.js

Index: package/out/environment/graphql-client.js
===================================================================
--- package/out/environment/graphql-client.js
+++ package/out/environment/graphql-client.js
@@ -58,8 +58,9 @@
             createdAt
             versions(first: 1) {
               nodes {
                 updatedAt
+                primaryProduct
               }
             }
           }
         }
@@ -74,9 +75,10 @@
         return app.environments.map((environment) => {
             return {
                 type: environment.type,
                 key: environment.key,
-                lastDeployedAt: environment.versions?.nodes?.[0]?.updatedAt || environment.createdAt
+                lastDeployedAt: environment.versions?.nodes?.[0]?.updatedAt || environment.createdAt,
+                primaryProduct: environment.versions?.nodes?.[0]?.primaryProduct || undefined
             };
         });
     }
     async deleteEnvironments(details) {

Modified: package/out/installations/graphql-client.js

Index: package/out/installations/graphql-client.js
===================================================================
--- package/out/installations/graphql-client.js
+++ package/out/installations/graphql-client.js
@@ -72,9 +72,9 @@
 }
 exports.InstallationNotFoundError = InstallationNotFoundError;
 class InstallationsGraphqlClient {
     graphqlClient;
-    cloudIdTranslator;
+    sitedProductTranslator;
     bitbucketTranslator;
     pause;
     SITE_RESOURCE_TYPE = 'site';
     WORKSPACE_RESOURCE_TYPE = 'workspace';
@@ -85,11 +85,11 @@
             resourceId: resourceId
         });
         return ari.toString();
     }
-    constructor(graphqlClient, cloudIdTranslator, bitbucketTranslator, pause) {
+    constructor(graphqlClient, sitedProductTranslator, bitbucketTranslator, pause) {
         this.graphqlClient = graphqlClient;
-        this.cloudIdTranslator = cloudIdTranslator;
+        this.sitedProductTranslator = sitedProductTranslator;
         this.bitbucketTranslator = bitbucketTranslator;
         this.pause = pause;
     }
     async buildInstallationContext(product, site) {
@@ -99,9 +99,9 @@
     getProductTranslation(product) {
         if (product && (0, cli_shared_1.isBitbucketProduct)(product)) {
             return this.bitbucketTranslator;
         }
-        return this.cloudIdTranslator;
+        return this.sitedProductTranslator;
     }
     async installAppIntoSite({ environmentKey, site, product, appId, licenseOverride, overrides }) {
         const workspaceAri = await this.buildInstallationContext(product, site);
         const query = `
@@ -259,8 +259,34 @@
             return matchedInstallation;
         }
         throw new InstallationNotFoundError(cli_shared_1.Text.installationId.errors.notFound(installationId));
     }
+    async hasNoAppInstallationsForEnv(appId, appEnv) {
+        const query = `
+      query forge_cli_hasNoAppInstallationsForEnv($filter: AppInstallationsByAppFilter!) {
+        ecosystem {
+          appInstallationsByApp(filter: $filter, first: 1) {
+            totalCount
+          }
+        }
+      }
+    `;
+        const result = (await this.graphqlClient.query(query, {
+            filter: {
+                apps: {
+                    ids: [appId]
+                },
+                appEnvironments: {
+                    types: [appEnv]
+                }
+            }
+        }));
+        const totalCount = result?.ecosystem?.appInstallationsByApp?.totalCount ?? -1;
+        if (totalCount < 0) {
+            throw new MissingAppError();
+        }
+        return totalCount === 0;
+    }
     async getAppInstallationTask(taskId) {
         const query = `
       query forge_cli_getInstallationTask($id: ID!) {
         appInstallationTask(id: $id) {
@@ -314,11 +340,13 @@
         return [...new Set(installationContexts.filter((context) => condition(context)))];
     }
     async getCombinedHostnameMap(installationContexts) {
         const bitbucketAris = this.getResourceArisForProduct(installationContexts, this.bitbucketTranslator.ariBelongsToProduct);
-        const bbWorkspaceAriToHostname = await this.bitbucketTranslator.getSitesForResourceAris(bitbucketAris);
-        const cloudIdAris = this.getResourceArisForProduct(installationContexts, this.cloudIdTranslator.ariBelongsToProduct);
-        const siteAriToHostname = await this.cloudIdTranslator.getSitesForResourceAris(cloudIdAris);
+        const cloudIdAris = this.getResourceArisForProduct(installationContexts, this.sitedProductTranslator.ariBelongsToProduct);
+        const [siteAriToHostname, bbWorkspaceAriToHostname] = await Promise.all([
+            this.sitedProductTranslator.getSitesForResourceAris(cloudIdAris),
+            this.bitbucketTranslator.getSitesForResourceAris(bitbucketAris)
+        ]);
         const combinedAriToHostname = {
             ...siteAriToHostname,
             ...bbWorkspaceAriToHostname
         };
@@ -332,14 +360,21 @@
         const combinedAriToHostname = await this.getCombinedHostnameMap(installationContexts);
         return installationContexts.map((context, i) => {
             const { environment, environmentType, installation } = installations[i];
             const site = combinedAriToHostname[context.toString()];
+            const secondaryProducts = (installation.secondaryInstallationContexts ?? [])
+                .map((context) => (0, cli_shared_1.parseInstallationContext)(context))
+                .map((context) => context.resourceOwner);
             return {
                 id: installation.id,
+                ...(secondaryProducts.length > 0 ? { secondaryProducts } : {}),
                 product: context.resourceOwner,
                 environmentKey: environment,
                 environmentType,
                 context: installation.installationContext,
+                ...(installation.secondaryInstallationContexts?.length
+                    ? { secondaryContexts: installation.secondaryInstallationContexts }
+                    : {}),
                 site,
                 version: installation.appEnvironmentVersion || {
                     isLatest: false,
                     version: '1.0.0'
@@ -354,8 +389,9 @@
           appInstallationsByApp(filter: $filter, first: $first, after: $after) {
             nodes {
               id
               installationContext
+              secondaryInstallationContexts
               appEnvironment {
                 key
                 type
               }
@@ -413,8 +449,9 @@
           environmentByKey(key: $environmentKey) {
             type
             versions(first: $firstN) {
               nodes {
+                primaryProduct
                 permissions {
                   egress {
                     addresses
                   }

Modified: package/out/command-line/index.js

Index: package/out/command-line/index.js
===================================================================
--- package/out/command-line/index.js
+++ package/out/command-line/index.js
@@ -19,25 +19,27 @@
 const register_providers_commands_1 = require("./register-providers-commands");
 const register_environments_commands_1 = require("./register-environments-commands");
 const register_storage_commands_1 = require("./register-storage-commands");
 const register_eligibility_commands_1 = require("./register-eligibility-commands");
-function registerCommands(deps) {
+const register_version_commands_1 = require("./register-version-commands");
+async function registerCommands(deps) {
     (0, register_autocomplete_commands_1.registerCommands)(deps);
     (0, register_authentication_command_1.registerCommands)(deps);
     (0, register_app_commands_1.registerCommands)(deps);
     (0, register_deployment_commands_1.registerCommands)(deps);
-    (0, register_installation_commands_1.registerCommands)(deps);
+    await (0, register_installation_commands_1.registerCommands)(deps);
     (0, register_environments_commands_1.registerCommands)(deps);
     (0, register_environment_variables_commands_1.registerCommands)(deps);
     (0, register_lint_command_1.registerCommands)(deps);
     (0, register_log_commands_1.registerCommands)(deps);
     (0, register_tunnel_commands_1.registerCommands)(deps);
-    (0, register_webtrigger_commands_1.registerCommands)(deps);
+    await (0, register_webtrigger_commands_1.registerCommands)(deps);
     (0, register_feedback_commands_1.registerCommands)(deps);
     (0, register_settings_commands_1.registerCommands)(deps);
     (0, register_providers_commands_1.registerCommands)(deps);
     (0, register_storage_commands_1.registerCommands)(deps);
     (0, register_eligibility_commands_1.registerCommands)(deps);
+    (0, register_version_commands_1.registerCommands)(deps);
 }
 exports.registerCommands = registerCommands;
 const registerEvents = ({ ui }) => {
     process.on('unhandledRejection', async (reason) => {
@@ -47,9 +49,9 @@
 const main = async () => {
     const cliDetails = (0, version_info_1.getCLIDetails)();
     const deps = await (0, dependency_injection_1.getDependencies)(cliDetails);
     registerEvents(deps);
-    registerCommands(deps);
+    await registerCommands(deps);
     await deps.controllers.prerequisitesController.check();
     await deps.cmd.parse(process.argv);
 };
 exports.main = main;

Modified: package/out/installations/site-translation/index.js

Index: package/out/installations/site-translation/index.js
===================================================================
--- package/out/installations/site-translation/index.js
+++ package/out/installations/site-translation/index.js
@@ -1,6 +1,6 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
 const tslib_1 = require("tslib");
 tslib_1.__exportStar(require("./bitbucket"), exports);
-tslib_1.__exportStar(require("./cloudid-products"), exports);
+tslib_1.__exportStar(require("./sited-products"), exports);
 tslib_1.__exportStar(require("./site-translation"), exports);

Modified: package/out/command-line/controller/install-controller.js

Index: package/out/command-line/controller/install-controller.js
===================================================================
--- package/out/command-line/controller/install-controller.js
+++ package/out/command-line/controller/install-controller.js
@@ -15,17 +15,17 @@
     ui;
     installAppSiteCommand;
     installationService;
     installView;
-    statsigService;
-    constructor(appConfigProvider, configFile, ui, installAppSiteCommand, installationService, installView, statsigService) {
+    supportedProductsService;
+    constructor(appConfigProvider, configFile, ui, installAppSiteCommand, installationService, installView, supportedProductsService) {
         this.appConfigProvider = appConfigProvider;
         this.configFile = configFile;
         this.ui = ui;
         this.installAppSiteCommand = installAppSiteCommand;
         this.installationService = installationService;
         this.installView = installView;
-        this.statsigService = statsigService;
+        this.supportedProductsService = supportedProductsService;
     }
     async securityPrompt(site) {
         this.ui.info(cli_shared_1.Text.install.security.banner(site.host));
         let isTrustedApp = true;
@@ -42,8 +42,9 @@
             }
         }
     }
     async installOrUpgrade(upgrade, environment, environmentType, site, product, appId, text, license, overrides) {
+        const isWorkspaceProduct = !!product && (await this.supportedProductsService.isWorkspaceProduct(product));
         return this.ui.displayProgress(async () => {
             if (upgrade) {
                 const isAlreadyUpdated = await this.installationService.upgradeInstallation(site, product, environment, appId);
                 return isAlreadyUpdated;
@@ -59,9 +60,9 @@
                 return false;
             }
         }, text.cmd.start(environment, environmentType), (alreadyUpdated) => {
             if (alreadyUpdated) {
-                return product && (0, cli_shared_1.isWorkspaceProduct)(product)
+                return isWorkspaceProduct
                     ? cli_shared_1.Text.upgrade.alreadyUpdated.spinnerWorkspace
                     : cli_shared_1.Text.upgrade.alreadyUpdated.spinnerSite;
             }
             else {
@@ -70,13 +71,12 @@
         });
     }
     async promptForProduct() {
         this.ui.info(cli_shared_1.Text.installationContext.overviewProduct);
-        const enableAtlas = await this.statsigService.isAtlasProductSupported();
-        return await this.ui.promptForList(cli_shared_1.Text.installationContext.promptProduct, (0, cli_shared_1.getSupportedProducts)({ enableAtlas }));
+        return await this.ui.promptForList(cli_shared_1.Text.installationContext.promptProduct, await this.supportedProductsService.getSupportedProducts());
     }
     async promptForSite(product) {
-        const isWorkspaceBased = product && (0, cli_shared_1.isWorkspaceProduct)(product);
+        const isWorkspaceBased = product && (await this.supportedProductsService.isWorkspaceProduct(product));
         const overviewText = isWorkspaceBased
             ? cli_shared_1.Text.installationContext.overviewWorkspace
             : cli_shared_1.Text.installationContext.overviewSite;
         this.ui.info(overviewText);
@@ -87,20 +87,21 @@
         const invalidText = isWorkspaceBased ? cli_shared_1.Text.error.invalidWorkspace : cli_shared_1.Text.error.invalidSite;
         if (!trySite) {
             throw new cli_shared_1.ValidationError(invalidText);
         }
-        return (0, cli_shared_1.validateSite)(trySite, product);
+        return this.supportedProductsService.validateSite(trySite, product);
     }
     async promptForUpgrade(siteOption, productOption, environmentOption) {
         const { installations } = await this.installationService.listNonTechnicalAppInstallations({
-            site: siteOption?.host,
+            site: siteOption,
             product: productOption,
             environment: environmentOption
         });
         const { site, product, environmentKey, environmentType } = await this.installView.promptForUpgrade(installations);
+        const productName = (0, cli_shared_1.productDisplayName)(product);
         return {
-            site: (0, cli_shared_1.validateSite)(site, product),
-            product: (0, cli_shared_1.productDisplayName)(product),
+            site: await this.supportedProductsService.validateSite(site, productName),
+            product: productName,
             environment: environmentKey,
             environmentType
         };
     }
@@ -154,9 +155,11 @@
             product = upgradeResult.product;
         }
         product = product ? product : await this.promptForProduct();
         site = site ? site : await this.promptForSite(product);
-        const bannerText = product && (0, cli_shared_1.isWorkspaceProduct)(product) ? text.bannerWorkspace : text.bannerSite;
+        const bannerText = product && (await this.supportedProductsService.isWorkspaceProduct(product))
+            ? text.bannerWorkspace
+            : text.bannerSite;
         this.ui.info(bannerText);
         if ((0, cli_shared_1.isSecureSite)(site)) {
             await this.securityPrompt(site);
         }
@@ -192,9 +195,9 @@
             const uniqueProductsFromScopes = this.getUniqueInstallationProductsFromScopes(environmentScopes);
             if (!uniqueProductsFromScopes || uniqueProductsFromScopes.length <= 1)
                 return;
             const { installations } = await this.installationService.listNonTechnicalAppInstallations({
-                site: site.host,
+                site,
                 environment
             });
             const productsToUpgrade = installations
                 .filter((installation) => !installation.version.isLatest)

Modified: package/out/installations/installation-helper.js

Index: package/out/installations/installation-helper.js
===================================================================
--- package/out/installations/installation-helper.js
+++ package/out/installations/installation-helper.js
@@ -18,9 +18,9 @@
     const installationIndex = await ui.promptForSingleChoiceTable(installationTablePrompt, installationTableOverview, ['Environment', 'Site', 'Product', 'Version', 'Major Version'], installations.map(({ id, environmentKey, product, site, version }) => ({
         names: [
             (0, cli_shared_1.environmentToOption)(environmentKey),
             site,
-            (0, cli_shared_1.capitalise)(product),
+            (0, cli_shared_1.productDisplayName)(product),
             cli_shared_1.Text.install.booleanToScope(version.isLatest),
             (0, semver_1.major)(version.version).toString()
         ],
         value: id,

Modified: package/out/service/installation-service.js

Index: package/out/service/installation-service.js
===================================================================
--- package/out/service/installation-service.js
+++ package/out/service/installation-service.js
@@ -1,44 +1,75 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
-exports.InstallationService = void 0;
+exports.InstallationService = exports.MultipleMatchingInstallationsError = void 0;
 const cli_shared_1 = require("@forge/cli-shared");
 const egress_1 = require("@forge/egress");
 const lodash_1 = require("lodash");
 const graphql_client_1 = require("../installations/graphql-client");
 const IDENTITY_PRODUCT_NAME = 'identity';
+const BITBUCKET_PRODUCT_NAME = 'bitbucket';
 const JIRA_SERVICE_DESK_PRODUCT_NAME = 'jira-servicedesk';
+class MultipleMatchingInstallationsError extends cli_shared_1.BaseError {
+    constructor() {
+        super(cli_shared_1.Text.error.multipleMatchingInstallations);
+    }
+}
+exports.MultipleMatchingInstallationsError = MultipleMatchingInstallationsError;
 class InstallationService {
     getAppConfig;
     listInstallationsClient;
     upgradeAppInstallationsClient;
-    constructor(getAppConfig, listInstallationsClient, upgradeAppInstallationsClient) {
+    hasNoAppInstallationsForEnvClient;
+    constructor(getAppConfig, listInstallationsClient, upgradeAppInstallationsClient, hasNoAppInstallationsForEnvClient) {
         this.getAppConfig = getAppConfig;
         this.listInstallationsClient = listInstallationsClient;
         this.upgradeAppInstallationsClient = upgradeAppInstallationsClient;
+        this.hasNoAppInstallationsForEnvClient = hasNoAppInstallationsForEnvClient;
     }
+    comparePossibleInstallations(url1, url2) {
+        const trimmedUrl1 = url1.replace(/\/+$/, '');
+        const trimmedUrl2 = url2.replace(/\/+$/, '');
+        return trimmedUrl1 === trimmedUrl2;
+    }
+    matchSiteForProduct(filterSite, installationSite, installationProduct) {
+        if (installationProduct === BITBUCKET_PRODUCT_NAME) {
+            return this.comparePossibleInstallations(filterSite.href, installationSite);
+        }
+        return this.comparePossibleInstallations(filterSite.host, installationSite);
+    }
     filterInstallations(installations, { site: filterSite, product: filterProduct, environment: filterEnvironment }) {
-        const isDefaultEnvironment = (env) => env === (0, cli_shared_1.optionToEnvironment)(cli_shared_1.DEFAULT_ENVIRONMENT_OPTION);
         return installations.filter(({ product, site, environmentKey }) => {
             const matchProduct = !filterProduct || filterProduct === (0, cli_shared_1.productDisplayName)(product);
-            const matchSite = !filterSite || filterSite === site;
-            const matchEnvironment = filterEnvironment
-                ? isDefaultEnvironment(filterEnvironment) || filterEnvironment === (0, cli_shared_1.environmentToOption)(environmentKey)
-                : true;
+            const matchSite = !filterSite || this.matchSiteForProduct(filterSite, site, product);
+            const matchEnvironment = !filterEnvironment || filterEnvironment === (0, cli_shared_1.optionToEnvironment)(environmentKey);
             return matchProduct && matchSite && matchEnvironment;
         });
     }
     async listAppInstallations(filter) {
         const { id: appId } = await this.getAppConfig();
         const installations = await this.listInstallationsClient.listInstallations(appId);
         return { installations: this.filterInstallations(installations, { ...filter }) };
     }
+    async hasNoAppInstallationsForEnv(appEnv) {
+        const { id: appId } = await this.getAppConfig();
+        return this.hasNoAppInstallationsForEnvClient.hasNoAppInstallationsForEnv(appId, appEnv);
+    }
     async listNonTechnicalAppInstallations(filter) {
         const { installations } = await this.listAppInstallations(filter);
         return {
             installations: installations.filter(({ product }) => product !== IDENTITY_PRODUCT_NAME && product !== JIRA_SERVICE_DESK_PRODUCT_NAME)
         };
     }
+    async findOnlyMatchingInstallation(filter) {
+        const filterInstalls = await this.listNonTechnicalAppInstallations(filter);
+        if (!filterInstalls.installations.length) {
+            throw new cli_shared_1.UserError(cli_shared_1.Text.error.invalidInstallationContext);
+        }
+        if (filterInstalls.installations.length !== 1) {
+            throw new MultipleMatchingInstallationsError();
+        }
+        return filterInstalls.installations[0];
+    }
     async hasOutdatedProductInstallation(environment) {
         const { installations } = await this.listNonTechnicalAppInstallations({
             environment
         });
@@ -64,25 +95,27 @@
         }
     }
     getPermissionsFromAppEnvironmentVersion(appEnvironmentVersion) {
         const permissions = appEnvironmentVersion?.permissions[0];
+        const primaryProduct = appEnvironmentVersion?.primaryProduct ?? undefined;
         if (!permissions) {
-            return { scopes: [], egressAddresses: [] };
+            return { scopes: [], egressAddresses: [], primaryProduct };
         }
         const scopes = permissions.scopes.map((s) => s.key);
         const egressAddresses = permissions?.egress ? (0, cli_shared_1.flatMap)(permissions.egress, ({ addresses }) => addresses ?? []) : [];
-        return { scopes, egressAddresses };
+        return { scopes, egressAddresses, primaryProduct };
     }
     async getAppEnvironmentPermissions(appId, environmentKey) {
         const versionDetails = await this.listInstallationsClient.getVersions(appId, environmentKey, 2);
         const versions = versionDetails?.nodes;
         if (!versions || versions.length === 0)
             return;
-        const [{ scopes, egressAddresses }, oldVersion] = versions.map((appEnvironmentVersion) => this.getPermissionsFromAppEnvironmentVersion(appEnvironmentVersion));
+        const [{ scopes, egressAddresses, primaryProduct }, oldVersion] = versions.map((appEnvironmentVersion) => this.getPermissionsFromAppEnvironmentVersion(appEnvironmentVersion));
         const groupedEgressAddresses = (0, egress_1.sortAndGroupEgressPermissionsByDomain)(egressAddresses);
         if (!oldVersion) {
             return {
                 scopes,
+                primaryProduct,
                 hasDeployments: false,
                 egressAddresses: groupedEgressAddresses,
                 addedScopes: scopes,
                 environmentType: versionDetails.environmentType
@@ -91,8 +124,9 @@
         const { scopes: oldScopes } = oldVersion;
         const addedScopes = (0, lodash_1.difference)(scopes, oldScopes);
         return {
             scopes,
+            primaryProduct,
             hasDeployments: true,
             egressAddresses: groupedEgressAddresses,
             addedScopes,
             environmentType: versionDetails.environmentType

Modified: package/out/command-line/register-app-commands.js

Index: package/out/command-line/register-app-commands.js
===================================================================
--- package/out/command-line/register-app-commands.js
+++ package/out/command-line/register-app-commands.js
@@ -12,9 +12,17 @@
     TemplateCategory["UI_KIT_2"] = "UI Kit";
     TemplateCategory["CUSTOM_UI"] = "Custom UI";
     TemplateCategory["BACKEND"] = "Triggers and Validators";
 })(TemplateCategory || (TemplateCategory = {}));
-const PRODUCT_OPTIONS = ['show-all', 'bitbucket', 'compass', 'confluence', 'jira', 'jira-service-management'];
+const PRODUCT_OPTIONS = [
+    'show-all',
+    'bitbucket',
+    'compass',
+    'confluence',
+    'jira',
+    'jira-service-management',
+    'teamwork-graph'
+];
 const MAX_NAME_LENGTH = 60;
 function formatProduct(product) {
     return product
         .split('-')

Modified: package/out/command-line/register-installation-commands.js

Index: package/out/command-line/register-installation-commands.js
===================================================================
--- package/out/command-line/register-installation-commands.js
+++ package/out/command-line/register-installation-commands.js
@@ -1,41 +1,29 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
-exports.registerCommands = exports.performMultipleUninstalls = exports.performSingleUninstall = exports.validateContext = void 0;
+exports.registerCommands = exports.performMultipleUninstalls = exports.performSingleUninstall = exports.registerListInstallationsCommand = void 0;
 const cli_shared_1 = require("@forge/cli-shared");
 const shared_1 = require("../installations/shared");
 const errors_1 = require("./errors");
 const semver_1 = require("semver");
 const COMMAND_NAME = 'install';
-async function validateContext({ site, product }) {
-    if (product) {
-        product = (0, cli_shared_1.productDisplayName)(product);
-        if (!(0, cli_shared_1.isSupportedProduct)(product)) {
-            throw new cli_shared_1.ValidationError(cli_shared_1.Text.error.invalidProduct);
-        }
-    }
-    const siteURL = site ? (0, cli_shared_1.validateSite)(site, product) : undefined;
-    return { siteURL, product };
-}
-exports.validateContext = validateContext;
-const registerInstallAppCommand = ({ cmd, controllers: { installController } }) => {
+const registerInstallAppCommand = async ({ cmd, controllers: { installController }, services: { supportedProductsService } }) => {
+    const supportedProducts = await supportedProductsService.getSupportedProducts();
     cmd
         .requireAppId()
         .environmentOption()
-        .option('-s, --site [site]', cli_shared_1.Text.optionSite)
-        .option('-p, --product [product]', cli_shared_1.Text.optionProduct((0, cli_shared_1.getSupportedProducts)()))
-        .precondition(validateContext)
+        .contextOption(supportedProducts)
         .option('--upgrade', cli_shared_1.Text.install.optionUpgrade, false)
         .option('--confirm-scopes', cli_shared_1.Text.install.optionConfirmScopes, false)
         .option('-l, --license [license]', cli_shared_1.Text.install.optionLicense)
         .option('--license-modes [licenseModes...]', cli_shared_1.Text.install.optionLicenseModes)
         .option('--users-with-access [user...]', cli_shared_1.Text.install.optionUsersWithAccess)
         .nonInteractiveOption('--site', '--product', '--environment')
         .description(cli_shared_1.Text.install.cmd.description)
-        .action(async ({ environment, siteURL, product, upgrade, confirmScopes, license, licenseModes, usersWithAccess, nonInteractive }) => {
+        .action(async ({ environment, site, product, upgrade, confirmScopes, license, licenseModes, usersWithAccess, nonInteractive }) => {
         await installController.run({
             environment,
-            site: siteURL,
+            site,
             product,
             upgrade,
             confirmScopes,
             license,
@@ -53,20 +41,21 @@
         .jsonOption()
         .description(cli_shared_1.Text.installList.cmd)
         .action(async ({ json }) => {
         const { installations } = await installationsService.listAppInstallations();
+        const hasSecondaryInstallations = installations.some(({ secondaryProducts }) => secondaryProducts?.length);
         ui.table([
             ['id', 'Installation ID'],
             ['environment', 'Environment'],
             ['site', 'Site'],
-            ['product', 'Product'],
+            ['product', hasSecondaryInstallations ? 'Product(s)' : 'Product'],
             ['version', 'Version'],
             ['majorVersion', 'Major Version']
-        ], installations.map(({ id, environmentKey, product, site, version: { isLatest, version } }) => ({
+        ], installations.map(({ id, environmentKey, product, secondaryProducts, site, version: { isLatest, version } }) => ({
             id,
             environment: (0, cli_shared_1.environmentToOption)(environmentKey),
             site,
-            product: (0, cli_shared_1.productDisplayName)(product),
+            product: (0, cli_shared_1.productsDisplayName)(product, secondaryProducts),
             version: cli_shared_1.Text.install.booleanToScope(isLatest),
             majorVersion: (0, semver_1.major)(version).toString()
         })), {
             json,
@@ -74,8 +63,9 @@
             preMessage: cli_shared_1.Text.installList.banner
         });
     });
 };
+exports.registerListInstallationsCommand = registerListInstallationsCommand;
 const performSingleUninstall = async (installId, { ui, commands: { uninstallAppCommand } }) => {
     const installation = await ui.displayProgress(() => uninstallAppCommand.execute(installId), cli_shared_1.Text.uninstall.cmd.start, (result) => ({
         successful: !!result.successful,
         message: cli_shared_1.Text.uninstall.cmd.success(false)
@@ -120,26 +110,33 @@
         ui.info(cli_shared_1.Text.uninstall.interactive.done);
     }
 };
 exports.performMultipleUninstalls = performMultipleUninstalls;
-const registerUninstallCommand = (deps) => {
-    const { cmd, ui, services: { installationsService } } = deps;
+const registerUninstallCommand = async (deps) => {
+    const { cmd, ui, services: { installationsService, supportedProductsService } } = deps;
+    const supportedProducts = await supportedProductsService.getSupportedProducts();
     cmd
-        .command('uninstall [installationId]')
+        .command('uninstall')
+        .contextOption(supportedProducts)
+        .environmentOption()
         .requireAppId()
         .description(cli_shared_1.Text.uninstall.cmd.desc)
-        .action(async (installationId) => {
+        .action(async ({ site, environment, product }) => {
         const { installations } = await installationsService.listAppInstallations();
         if (!installations.length) {
             ui.info(cli_shared_1.Text.installList.noInstallations);
             return;
         }
-        const installId = installationId?.trim();
-        if (installId && installId.length > 0) {
+        if (site && product) {
+            const installation = await installationsService.findOnlyMatchingInstallation({
+                site,
+                product,
+                environment
+            });
             ui.info(cli_shared_1.Text.uninstall.info);
             ui.info(cli_shared_1.Text.ctrlC);
             ui.emptyLine();
-            await (0, exports.performSingleUninstall)(installId, deps);
+            await (0, exports.performSingleUninstall)(installation.id, deps);
         }
         else {
             const filteredInstallations = installations.filter((install) => install.product !== 'identity' && install.product !== 'jira-servicedesk');
             const selectedSitesIndexes = await ui.promptForTable(cli_shared_1.Text.uninstall.interactive.desc, cli_shared_1.Text.uninstall.interactive.progressInfo, ['Environment', 'Site', 'Product'], filteredInstallations.map(({ id, environmentKey, product, site }) => ({
@@ -159,12 +156,12 @@
         }
     });
 };
 const DEPRECATED_LIST_COMMAND = 'install:list';
-const registerCommands = ({ cmd, ...deps }) => {
+const registerCommands = async ({ cmd, ...deps }) => {
     const install = cmd.command(COMMAND_NAME).description(cli_shared_1.Text.variables.description);
-    registerUninstallCommand({ cmd, ...deps });
+    await registerUninstallCommand({ cmd, ...deps });
     cmd.deprecatedCommand(DEPRECATED_LIST_COMMAND, `${COMMAND_NAME} ${LIST_COMMAND_NAME}`, deps.controllers.stubController);
-    registerInstallAppCommand({ cmd: install, ...deps });
-    registerListInstallationsCommand({ cmd: install, ...deps });
+    await registerInstallAppCommand({ cmd: install, ...deps });
+    (0, exports.registerListInstallationsCommand)({ cmd: install, ...deps });
 };
 exports.registerCommands = registerCommands;

Modified: package/out/command-line/register-webtrigger-commands.js

Index: package/out/command-line/register-webtrigger-commands.js
===================================================================
--- package/out/command-line/register-webtrigger-commands.js
+++ package/out/command-line/register-webtrigger-commands.js
@@ -25,9 +25,9 @@
     return async () => {
         await getValidWebtriggers(configFile);
     };
 }
-const registerCommands = ({ cmd, ui, graphqlGateway, configFile, services: { installationsService }, commands: { getWebTriggerURLCommand } }) => {
+const registerCommands = async ({ cmd, ui, configFile, services: { installationsService, supportedProductsService }, commands: { getWebTriggerURLCommand } }) => {
     const validateWebtriggerKey = async (functionKey) => {
         const availableWebTriggers = await getValidWebtriggers(configFile);
         if (functionKey) {
             if (!availableWebTriggers.has(functionKey)) {
@@ -39,19 +39,27 @@
             const options = [...availableWebTriggers.keys()];
             return await ui.promptForList(cli_shared_1.Text.webtrigger.promptFuncKey, options);
         }
     };
+    const supportedProducts = await supportedProductsService.getSupportedProducts();
     cmd
-        .command('webtrigger [installationId]')
+        .command('webtrigger')
         .requireAppId()
         .description(cli_shared_1.Text.webtrigger.cmd)
         .option('-f, --functionKey [function]', cli_shared_1.Text.webtrigger.optionFuncKey)
+        .contextOption(supportedProducts)
+        .environmentOption()
         .precondition(manifestDefinesTriggers(configFile))
-        .action(async (argInstallationId, { functionKey }) => {
+        .action(async ({ functionKey, site, environment, product }) => {
         let selectedInstallationId = '';
-        if (argInstallationId) {
+        if (site && product) {
             ui.info(cli_shared_1.Text.webtrigger.overviewFuncKey);
-            selectedInstallationId = (0, installation_helper_1.validateInstallationId)(argInstallationId);
+            const installation = await installationsService.findOnlyMatchingInstallation({
+                site,
+                environment,
+                product
+            });
+            selectedInstallationId = (0, installation_helper_1.validateInstallationId)(installation?.id);
         }
         else {
             const appInstallation = await installationsService.listNonTechnicalAppInstallations();
             const installation = await (0, installation_helper_1.selectSingleInstallation)(ui, appInstallation.installations, cli_shared_1.Text.webtrigger.promptInstallationTable, cli_shared_1.Text.webtrigger.overViewInstallationTable);

Modified: package/out/service/tunnel-service.js

Index: package/out/service/tunnel-service.js
===================================================================
--- package/out/service/tunnel-service.js
+++ package/out/service/tunnel-service.js
@@ -239,9 +239,9 @@
         const options = [`-v=${process.cwd()}:/app:cached`];
         if (process.env.FORGE_DEV_DOCKER_TUNNEL) {
             const monorepoRoot = (0, path_1.join)(__dirname, '../../../..');
             options.push(`-v=${monorepoRoot}:/monorepo:cached`);
-            options.push(`-v=${monorepoRoot}/node_modules/@koterpillar/cloudflared/docker-bin:/monorepo/node_modules/@koterpillar/cloudflared/bin`);
+            options.push(`-v=${monorepoRoot}/node_modules/cloudflared/docker-bin:/monorepo/node_modules/cloudflared/bin`);
         }
         if (process.env.FORGE_TUNNEL_MOUNT_DIRECTORIES) {
             const mounts = process.env.FORGE_TUNNEL_MOUNT_DIRECTORIES.split(',');
             mounts.forEach((mount) => {

Modified: package/out/autocomplete/autocomplete-config.json

Index: package/out/autocomplete/autocomplete-config.json
===================================================================
--- package/out/autocomplete/autocomplete-config.json
+++ package/out/autocomplete/autocomplete-config.json
@@ -121,8 +121,17 @@
     "uninstall": {
       "--verbose": {
         "requireUserArg": false
       },
+      "--site": {
+        "requireUserArg": true
+      },
+      "--product": {
+        "requireUserArg": true
+      },
+      "--environment": {
+        "requireUserArg": true
+      },
       "--help": {
         "requireUserArg": false
       }
     },
@@ -205,8 +214,17 @@
       },
       "--functionKey": {
         "requireUserArg": true
       },
+      "--site": {
+        "requireUserArg": true
+      },
+      "--product": {
+        "requireUserArg": true
+      },
+      "--environment": {
+        "requireUserArg": true
+      },
       "--help": {
         "requireUserArg": false
       }
     },
@@ -257,8 +275,16 @@
       },
       "--help": {
         "requireUserArg": false
       }
+    },
+    "version": {
+      "--verbose": {
+        "requireUserArg": false
+      },
+      "--help": {
+        "requireUserArg": false
+      }
     }
   },
   "options": {
     "--version": {

Modified: package/npm-shrinkwrap.json

Large diffs are not rendered by default.

Modified: package/package.json

Index: package/package.json
===================================================================
--- package/package.json
+++ package/package.json
@@ -1,10 +1,10 @@
 {
   "name": "@forge/cli",
-  "version": "10.13.6",
+  "version": "11.0.0-next.18",
   "description": "A command line interface for managing Atlassian-hosted apps",
   "author": "Atlassian",
-  "license": "UNLICENSED",
+  "license": "SEE LICENSE IN LICENSE.txt",
   "bin": {
     "forge": "out/bin/cli.js"
   },
   "homepage": "https://developer.atlassian.com/platform/forge",
@@ -17,18 +17,18 @@
     "postbuild": "chmod +x out/bin/*.js && ts-node scripts/configureAutocomplete.ts",
     "postinstall": "node -e \"fs.existsSync('./out/bin/postinstall.js') && require('./out/bin/postinstall.js')\""
   },
   "dependencies": {
-    "@forge/bundler": "4.20.7",
-    "@forge/cli-shared": "6.5.4",
-    "@forge/egress": "1.3.0",
-    "@forge/lint": "5.6.7",
-    "@forge/manifest": "8.6.0",
-    "@forge/runtime": "5.10.4",
-    "@forge/tunnel": "5.9.1",
-    "@forge/util": "1.4.6",
+    "@forge/bundler": "4.20.8-next.13",
+    "@forge/cli-shared": "6.6.0-next.11",
+    "@forge/egress": "1.3.1-next.0",
+    "@forge/lint": "5.7.0-next.13",
+    "@forge/manifest": "8.6.1-next.4",
+    "@forge/runtime": "5.10.5-next.2",
+    "@forge/tunnel": "5.9.2-next.15",
+    "@forge/util": "1.4.7-next.2",
     "@sentry/node": "7.106.0",
-    "@forge/i18n": "0.0.2",
+    "@forge/i18n": "0.0.3-next.2",
     "ajv": "^8.12.0",
     "archiver": "^6.0.2",
     "case": "^1.6.3",
     "chalk": "^4.1.2",
@@ -38,8 +38,9 @@
     "commander": "^11.1.0",
     "cross-spawn": "^7.0.3",
     "dayjs": "^1.11.10",
     "didyoumean": "^1.2.2",
+    "diff": "^7.0.0",
     "env-paths": "^2.2.1",
     "exponential-backoff": "^3.1.1",
     "form-data": "^4.0.0",
     "fs-extra": "^11.2.0",
@@ -62,8 +63,9 @@
     "@types/cheerio": "^0.22.35",
     "@types/command-exists": "^1.2.3",
     "@types/cross-spawn": "^6.0.6",
     "@types/didyoumean": "^1.2.2",
+    "@types/diff": "^6.0.0",
     "@types/fs-extra": "^11.0.4",
     "@types/hidefile": "^3.0.3",
     "@types/inquirer": "^8.2.10",
     "@types/jest": "^29.5.12",

Modified: package/out/installations/site-translation/bitbucket.d.ts.map

Index: package/out/installations/site-translation/bitbucket.d.ts.map
===================================================================
--- package/out/installations/site-translation/bitbucket.d.ts.map
+++ package/out/installations/site-translation/bitbucket.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"bitbucket.d.ts","sourceRoot":"","sources":["../../../src/installations/site-translation/bitbucket.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAU,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,WAAW,EAA0B,MAAM,mBAAmB,CAAC;AAExE,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,GAAG,EAAE,GAAG;CAGrB;AAOD,eAAO,MAAM,oBAAoB,QAAO,MAEvC,CAAC;AAEF,qBAAa,mBAAoB,YAAW,cAAc;IACjD,mBAAmB,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO;IAIxC,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAUlE,uBAAuB,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAc5E,cAAc;IAwBf,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IAsBtE,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,iBAAiB;CAG1B"}
\ No newline at end of file
+{"version":3,"file":"bitbucket.d.ts","sourceRoot":"","sources":["../../../src/installations/site-translation/bitbucket.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAGvD,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,GAAG,EAAE,GAAG;CAGrB;AAOD,eAAO,MAAM,oBAAoB,QAAO,MAEvC,CAAC;AAEF,qBAAa,mBAAoB,YAAW,cAAc;IACjD,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAInC,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAUlE,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAcvE,cAAc;IAwBf,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IAsBtE,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,iBAAiB;CAG1B"}
\ No newline at end of file

Modified: package/out/command-line/command.d.ts.map

Index: package/out/command-line/command.d.ts.map
===================================================================
--- package/out/command-line/command.d.ts.map
+++ package/out/command-line/command.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/command-line/command.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/command-line/command.ts"],"names":[],"mappings":"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"}
\ No newline at end of file

Modified: package/out/command-line/dependency-injection.d.ts.map

Index: package/out/command-line/dependency-injection.d.ts.map
===================================================================
--- package/out/command-line/dependency-injection.d.ts.map
+++ package/out/command-line/dependency-injection.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"dependency-injection.d.ts","sourceRoot":"","sources":["../../src/command-line/dependency-injection.ts"],"names":[],"mappings":"AAIA,OAAO,EASL,UAAU,EACV,aAAa,EAEb,UAAU,EAGV,gBAAgB,EAGhB,kBAAkB,EAGlB,gBAAgB,EAQhB,YAAY,EACZ,aAAa,EAOb,kBAAkB,EAIlB,kBAAkB,EAElB,kBAAkB,EAKnB,MAAM,mBAAmB,CAAC;AAc3B,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAE/E,OAAO,EAML,0BAA0B,EAG3B,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,gCAAgC,EAAE,MAAM,sDAAsD,CAAC;AAExG,OAAO,EAAE,+BAA+B,EAAE,MAAM,qDAAqD,CAAC;AACtG,OAAO,EAAE,6BAA6B,EAAE,MAAM,mDAAmD,CAAC;AAIlG,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAG3E,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAEtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAM7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAIrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAQtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAI3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAG3E,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAUlE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAGhF,OAAO,EAAE,4BAA4B,EAAE,MAAM,6CAA6C,CAAC;AAG3F,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAG5E,eAAO,MAAM,eAAe,eAAsB,UAAU,GAAG,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmXvE,CAAC;AAGF,aAAK,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAC7D,oBAAY,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC,CAAC"}
\ No newline at end of file
+{"version":3,"file":"dependency-injection.d.ts","sourceRoot":"","sources":["../../src/command-line/dependency-injection.ts"],"names":[],"mappings":"AAIA,OAAO,EASL,UAAU,EACV,aAAa,EAEb,UAAU,EAGV,gBAAgB,EAGhB,kBAAkB,EAGlB,gBAAgB,EAQhB,YAAY,EACZ,aAAa,EAOb,kBAAkB,EAIlB,kBAAkB,EAElB,kBAAkB,EAKlB,wBAAwB,EACzB,MAAM,mBAAmB,CAAC;AAc3B,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAE/E,OAAO,EAML,0BAA0B,EAG3B,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,gCAAgC,EAAE,MAAM,sDAAsD,CAAC;AAExG,OAAO,EAAE,+BAA+B,EAAE,MAAM,qDAAqD,CAAC;AACtG,OAAO,EAAE,6BAA6B,EAAE,MAAM,mDAAmD,CAAC;AAIlG,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAG3E,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAEtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAM7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAIrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAQtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAI3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAG3E,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAUlE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAGhF,OAAO,EAAE,4BAA4B,EAAE,MAAM,6CAA6C,CAAC;AAG3F,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAE5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAKpE,eAAO,MAAM,eAAe,eAAsB,UAAU,GAAG,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8XvE,CAAC;AAGF,aAAK,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAC7D,oBAAY,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC,CAAC"}
\ No newline at end of file

Modified: package/out/command-line/controller/deploy-controller.d.ts.map

Index: package/out/command-line/controller/deploy-controller.d.ts.map
===================================================================
--- package/out/command-line/controller/deploy-controller.d.ts.map
+++ package/out/command-line/controller/deploy-controller.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"deploy-controller.d.ts","sourceRoot":"","sources":["../../../src/command-line/controller/deploy-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EAGpB,UAAU,EACV,cAAc,EAEd,WAAW,EAIZ,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAA+B,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AACzG,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAEhF,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEvD,UAAU,aAAa;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,sBAAuB,SAAQ,WAAW;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM,EAAE;IAItC,aAAa,IAAI,cAAc;IAM/B,WAAW,IAAI,OAAO;CAG9B;AAED,qBAAa,sBAAuB,SAAQ,WAAW;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAGpC,aAAa,IAAI,cAAc;IAM/B,WAAW,IAAI,OAAO;CAG9B;AAED,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACtC,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,iCAAiC;IAClD,OAAO,CAAC,QAAQ,CAAC,8BAA8B;IAC/C,OAAO,CAAC,QAAQ,CAAC,wBAAwB;gBAXxB,iBAAiB,EAAE,iBAAiB,EACpC,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,oBAAoB,EAAE,mBAAmB,EACzC,UAAU,EAAE,UAAU,EACtB,oBAAoB,EAAE,oBAAoB,EAC1C,qBAAqB,EAAE,qBAAqB,EAC5C,oBAAoB,EAAE,oBAAoB,EAC1C,UAAU,EAAE,UAAU,EACtB,iCAAiC,EAAE,0BAA0B,EAC7D,8BAA8B,EAAE,0BAA0B,EAC1D,wBAAwB,EAAE,wBAAwB;IAGrE,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,6BAA6B;YAWvB,wBAAwB;YA2BxB,mBAAmB;YAmCnB,oBAAoB;YA4BpB,2BAA2B;YAe3B,wBAAwB;IAkBzB,GAAG,CAAC,EACf,WAAW,EACX,MAAM,EACN,cAAc,EACd,YAAY,EACb,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;CAkFpD"}
\ No newline at end of file
+{"version":3,"file":"deploy-controller.d.ts","sourceRoot":"","sources":["../../../src/command-line/controller/deploy-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EAGpB,UAAU,EACV,cAAc,EAEd,WAAW,EAIZ,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAA+B,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AACzG,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAEhF,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEvD,UAAU,aAAa;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,sBAAuB,SAAQ,WAAW;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM,EAAE;IAItC,aAAa,IAAI,cAAc;IAM/B,WAAW,IAAI,OAAO;CAG9B;AAED,qBAAa,sBAAuB,SAAQ,WAAW;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAGpC,aAAa,IAAI,cAAc;IAM/B,WAAW,IAAI,OAAO;CAG9B;AAED,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACtC,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,iCAAiC;IAClD,OAAO,CAAC,QAAQ,CAAC,8BAA8B;IAC/C,OAAO,CAAC,QAAQ,CAAC,wBAAwB;gBAXxB,iBAAiB,EAAE,iBAAiB,EACpC,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,oBAAoB,EAAE,mBAAmB,EACzC,UAAU,EAAE,UAAU,EACtB,oBAAoB,EAAE,oBAAoB,EAC1C,qBAAqB,EAAE,qBAAqB,EAC5C,oBAAoB,EAAE,oBAAoB,EAC1C,UAAU,EAAE,UAAU,EACtB,iCAAiC,EAAE,0BAA0B,EAC7D,8BAA8B,EAAE,0BAA0B,EAC1D,wBAAwB,EAAE,wBAAwB;IAGrE,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,6BAA6B;YAWvB,wBAAwB;YA2BxB,mBAAmB;YAmCnB,oBAAoB;YA4BpB,2BAA2B;YAe3B,wBAAwB;IAkBzB,GAAG,CAAC,EACf,WAAW,EACX,MAAM,EACN,cAAc,EACd,YAAY,EACb,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;CAiFpD"}
\ No newline at end of file

Modified: package/out/command-line/view/deploy-view.d.ts.map

Index: package/out/command-line/view/deploy-view.d.ts.map
===================================================================
--- package/out/command-line/view/deploy-view.d.ts.map
+++ package/out/command-line/view/deploy-view.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"deploy-view.d.ts","sourceRoot":"","sources":["../../../src/command-line/view/deploy-view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAkB,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAClG,OAAO,EAAE,UAAU,EAAqB,MAAM,aAAa,CAAC;AAE5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,qBAAa,UAAU;IACT,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,EAAE;IAE5B,SAAS,IAAI,EAAE;IAIf,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,eAAe,EAAE,kBAAkB,GAAG,IAAI;IAI5E,gCAAgC,IAAI,IAAI;IAIxC,kBAAkB,IAAI,IAAI;IAI1B,mCAAmC,IAAI,IAAI;IAK3C,mCAAmC,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAK1G,mCAAmC,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAK1G,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAKjD,iBAAiB,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,IAAI;IAKlD,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAI3C,qBAAqB,IAAI,IAAI;IAI7B,8BAA8B,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAInG,8BAA8B,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAIzD,mCAAmC,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAIjF,0CAA0C,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;IAIrF,iCAAiC,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAM5D,wCAAwC,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAK7D,kCAAkC,IAAI,OAAO,CAAC,OAAO,CAAC;IAI5D,wCAAwC,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAI9D,kCAAkC,IAAI,OAAO,CAAC,OAAO,CAAC;IAItD,kCAAkC,IAAI,OAAO,CAAC,OAAO,CAAC;IAItD,yBAAyB,IAAI,OAAO,CAAC,OAAO,CAAC;IAM7C,yCAAyC,IAAI,OAAO,CAAC,OAAO,CAAC;IAKnE,0CAA0C,IAAI,IAAI;IAKlD,+BAA+B,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAMlD,wBAAwB,CACnC,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,eAAe,EAAE,EAAE,qBAAqB,EACxE,wBAAwB,EAAE,OAAO,EACjC,cAAc,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,GAC9C,OAAO,CAAC,gBAAgB,CAAC;CAY7B"}
\ No newline at end of file
+{"version":3,"file":"deploy-view.d.ts","sourceRoot":"","sources":["../../../src/command-line/view/deploy-view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAkB,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAClG,OAAO,EAAE,UAAU,EAAqB,MAAM,aAAa,CAAC;AAE5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,qBAAa,UAAU;IACT,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,EAAE;IAE5B,SAAS,IAAI,EAAE;IAIf,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,eAAe,EAAE,kBAAkB,GAAG,IAAI;IAI5E,uCAAuC,IAAI,IAAI;IAI/C,kBAAkB,IAAI,IAAI;IAI1B,mCAAmC,IAAI,IAAI;IAK3C,mCAAmC,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAK1G,mCAAmC,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAK1G,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAKjD,iBAAiB,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,IAAI;IAKlD,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAI3C,qBAAqB,IAAI,IAAI;IAI7B,8BAA8B,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAInG,8BAA8B,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAIzD,mCAAmC,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAIjF,0CAA0C,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;IAIrF,iCAAiC,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAM5D,wCAAwC,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAK7D,kCAAkC,IAAI,OAAO,CAAC,OAAO,CAAC;IAI5D,wCAAwC,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAI9D,kCAAkC,IAAI,OAAO,CAAC,OAAO,CAAC;IAItD,kCAAkC,IAAI,OAAO,CAAC,OAAO,CAAC;IAItD,yBAAyB,IAAI,OAAO,CAAC,OAAO,CAAC;IAM7C,yCAAyC,IAAI,OAAO,CAAC,OAAO,CAAC;IAKnE,0CAA0C,IAAI,IAAI;IAKlD,+BAA+B,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAMlD,wBAAwB,CACnC,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,eAAe,EAAE,EAAE,qBAAqB,EACxE,wBAAwB,EAAE,OAAO,EACjC,cAAc,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,GAC9C,OAAO,CAAC,gBAAgB,CAAC;CAY7B"}
\ No newline at end of file

Modified: package/out/environment/graphql-client.d.ts.map

Index: package/out/environment/graphql-client.d.ts.map
===================================================================
--- package/out/environment/graphql-client.d.ts.map
+++ package/out/environment/graphql-client.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"graphql-client.d.ts","sourceRoot":"","sources":["../../src/environment/graphql-client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAIlB,aAAa,EAIb,SAAS,EACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EACL,6BAA6B,EAC7B,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACxB,MAAM,sBAAsB,CAAC;AAE9B,eAAO,MAAM,0BAA0B,0BAA0B,CAAC;AAElE,qBAAa,eAAgB,SAAQ,SAAS;CAAG;AAEjD,qBAAa,aAAc,YAAW,uBAAuB,EAAE,qBAAqB,EAAE,uBAAuB;IAC/F,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAAb,aAAa,EAAE,aAAa;IAE5C,iBAAiB,CAAC,OAAO,EAAE,qBAAqB;IAgDhD,eAAe,CAAC,OAAO,EAAE,sBAAsB;;;;;IAmC/C,kBAAkB,CAAC,OAAO,EAAE,6BAA6B;IAkBzD,iBAAiB,CAAC,OAAO,EAAE,wBAAwB;CAuDjE"}
\ No newline at end of file
+{"version":3,"file":"graphql-client.d.ts","sourceRoot":"","sources":["../../src/environment/graphql-client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAIlB,aAAa,EAIb,SAAS,EACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EACL,6BAA6B,EAC7B,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACxB,MAAM,sBAAsB,CAAC;AAE9B,eAAO,MAAM,0BAA0B,0BAA0B,CAAC;AAElE,qBAAa,eAAgB,SAAQ,SAAS;CAAG;AAEjD,qBAAa,aAAc,YAAW,uBAAuB,EAAE,qBAAqB,EAAE,uBAAuB;IAC/F,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAAb,aAAa,EAAE,aAAa;IAE5C,iBAAiB,CAAC,OAAO,EAAE,qBAAqB;IAgDhD,eAAe,CAAC,OAAO,EAAE,sBAAsB;;;;;;IAqC/C,kBAAkB,CAAC,OAAO,EAAE,6BAA6B;IAkBzD,iBAAiB,CAAC,OAAO,EAAE,wBAAwB;CAuDjE"}
\ No newline at end of file

Modified: package/out/installations/graphql-client.d.ts.map

Index: package/out/installations/graphql-client.d.ts.map
===================================================================
--- package/out/installations/graphql-client.d.ts.map
+++ package/out/installations/graphql-client.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"graphql-client.d.ts","sourceRoot":"","sources":["../../src/installations/graphql-client.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"graphql-client.d.ts","sourceRoot":"","sources":["../../src/installations/graphql-client.ts"],"names":[],"mappings":"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"}
\ No newline at end of file

Modified: package/out/command-line/index.d.ts.map

Index: package/out/command-line/index.d.ts.map
===================================================================
--- package/out/command-line/index.d.ts.map
+++ package/out/command-line/index.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/command-line/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAoBvE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,QAiBlD;AAQD,eAAO,MAAM,IAAI,QAAa,QAAQ,IAAI,CAUzC,CAAC"}
\ No newline at end of file
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/command-line/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAqBvE,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,YAAY,iBAkBxD;AAQD,eAAO,MAAM,IAAI,QAAa,QAAQ,IAAI,CAUzC,CAAC"}
\ No newline at end of file

Modified: package/out/installations/site-translation/index.d.ts.map

Index: package/out/installations/site-translation/index.d.ts.map
===================================================================
--- package/out/installations/site-translation/index.d.ts.map
+++ package/out/installations/site-translation/index.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/installations/site-translation/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC"}
\ No newline at end of file
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/installations/site-translation/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC"}
\ No newline at end of file

Modified: package/out/command-line/controller/install-controller.d.ts.map

Index: package/out/command-line/controller/install-controller.d.ts.map
===================================================================
--- package/out/command-line/controller/install-controller.d.ts.map
+++ package/out/command-line/controller/install-controller.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"install-controller.d.ts","sourceRoot":"","sources":["../../../src/command-line/controller/install-controller.ts"],"names":[],"mappings":";AAAA,OAAO,EAEL,iBAAiB,EAEjB,UAAU,EAEV,EAAE,EAcF,cAAc,EAEf,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAA6B,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACpG,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,UAAU,gBAAgB;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAYD,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,WAAW,EAAE,MAAM;CAGhC;AASD,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACtC,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,cAAc;gBANd,iBAAiB,EAAE,iBAAiB,EACpC,UAAU,EAAE,UAAU,EACtB,EAAE,EAAE,EAAE,EACN,qBAAqB,EAAE,qBAAqB,EAC5C,mBAAmB,EAAE,mBAAmB,EACxC,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,cAAc;YAGnC,cAAc;YAmBd,gBAAgB;YA6ChB,gBAAgB;YAMhB,aAAa;YAsBb,gBAAgB;IAqB9B,OAAO,CAAC,uCAAuC;IAY/C,OAAO,CAAC,cAAc;IAGtB,OAAO,CAAC,qBAAqB;IAgB7B,OAAO,CAAC,qBAAqB,CAK3B;IAEW,GAAG,CAAC,EACf,WAAW,EACX,IAAI,EACJ,OAAO,EACP,OAAO,EACP,aAAa,EACb,OAAO,EACP,YAAY,EACZ,eAAe,EACf,cAAc,EACf,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;YA+GrB,kBAAkB;IAUhC,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,oBAAoB;IA8B5B,OAAO,CAAC,uBAAuB;YAoBjB,8CAA8C;CAW7D"}
\ No newline at end of file
+{"version":3,"file":"install-controller.d.ts","sourceRoot":"","sources":["../../../src/command-line/controller/install-controller.ts"],"names":[],"mappings":";AAAA,OAAO,EAEL,iBAAiB,EAEjB,UAAU,EAEV,EAAE,EAYF,wBAAwB,EAEzB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAA6B,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACpG,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,UAAU,gBAAgB;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAYD,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,WAAW,EAAE,MAAM;CAGhC;AASD,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACtC,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,wBAAwB;gBANxB,iBAAiB,EAAE,iBAAiB,EACpC,UAAU,EAAE,UAAU,EACtB,EAAE,EAAE,EAAE,EACN,qBAAqB,EAAE,qBAAqB,EAC5C,mBAAmB,EAAE,mBAAmB,EACxC,WAAW,EAAE,WAAW,EACxB,wBAAwB,EAAE,wBAAwB;YAGvD,cAAc;YAmBd,gBAAgB;YA8ChB,gBAAgB;YAQhB,aAAa;YAsBb,gBAAgB;IAwB9B,OAAO,CAAC,uCAAuC;IAY/C,OAAO,CAAC,cAAc;IAGtB,OAAO,CAAC,qBAAqB;IAgB7B,OAAO,CAAC,qBAAqB,CAK3B;IAEW,GAAG,CAAC,EACf,WAAW,EACX,IAAI,EACJ,OAAO,EACP,OAAO,EACP,aAAa,EACb,OAAO,EACP,YAAY,EACZ,eAAe,EACf,cAAc,EACf,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;YAkHrB,kBAAkB;IAUhC,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,oBAAoB;IA8B5B,OAAO,CAAC,uBAAuB;YAoBjB,8CAA8C;CAW7D"}
\ No newline at end of file

Modified: package/out/installations/installation-helper.d.ts.map

Index: package/out/installations/installation-helper.d.ts.map
===================================================================
--- package/out/installations/installation-helper.d.ts.map
+++ package/out/installations/installation-helper.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"installation-helper.d.ts","sourceRoot":"","sources":["../../src/installations/installation-helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAE/D,OAAO,EAAyC,EAAE,EAAmB,MAAM,mBAAmB,CAAC;AAE/F,wBAAgB,sBAAsB,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAWtE;AAED,wBAAsB,wBAAwB,CAC5C,EAAE,EAAE,EAAE,EACN,aAAa,EAAE,YAAY,EAAE,EAC7B,uBAAuB,EAAE,MAAM,EAC/B,yBAAyB,EAAE,MAAM,GAChC,OAAO,CAAC,YAAY,CAAC,CAmBvB"}
\ No newline at end of file
+{"version":3,"file":"installation-helper.d.ts","sourceRoot":"","sources":["../../src/installations/installation-helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAE/D,OAAO,EAAiD,EAAE,EAAmB,MAAM,mBAAmB,CAAC;AAEvG,wBAAgB,sBAAsB,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAWtE;AAED,wBAAsB,wBAAwB,CAC5C,EAAE,EAAE,EAAE,EACN,aAAa,EAAE,YAAY,EAAE,EAC7B,uBAAuB,EAAE,MAAM,EAC/B,yBAAyB,EAAE,MAAM,GAChC,OAAO,CAAC,YAAY,CAAC,CAmBvB"}
\ No newline at end of file

Modified: package/out/service/installation-service.d.ts.map

Index: package/out/service/installation-service.d.ts.map
===================================================================
--- package/out/service/installation-service.d.ts.map
+++ package/out/service/installation-service.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"installation-service.d.ts","sourceRoot":"","sources":["../../src/service/installation-service.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EAKrB,KAAK,EAEN,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAG1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,kBAAkB,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE;QACP,QAAQ,EAAE,OAAO,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,YAAY,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,gCAAgC;IAC/C,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,yBAA0B,SAAQ,gCAAgC;IACjF,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,EAAE,kBAAkB,CAAC;IACpC,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,UAAU,yBAAyB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,GAAG,IAAI,CAAC;IACnD,eAAe,EAAE,kBAAkB,CAAC;CACrC;AAED,MAAM,WAAW,0BAA0B;IACzC,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC1D,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;CACxG;AAED,MAAM,WAAW,6BAA6B;IAC5C,mBAAmB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrG;AAKD,qBAAa,mBAAmB;IAE5B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,uBAAuB;IACxC,OAAO,CAAC,QAAQ,CAAC,6BAA6B;gBAF7B,YAAY,EAAE,iBAAiB,EAC/B,uBAAuB,EAAE,0BAA0B,EACnD,6BAA6B,EAAE,6BAA6B;IAG/E,OAAO,CAAC,mBAAmB;IAiBd,oBAAoB,CAAC,MAAM,CAAC,EAAE,yBAAyB,GAAG,OAAO,CAAC,eAAe,CAAC;IAOlF,gCAAgC,CAAC,MAAM,CAAC,EAAE,yBAAyB,GAAG,OAAO,CAAC,eAAe,CAAC;IAU9F,8BAA8B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAOrE,mBAAmB,CAC9B,IAAI,EAAE,GAAG,EACT,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,OAAO,CAAC;IAkBnB,OAAO,CAAC,uCAAuC;IAgBlC,4BAA4B,CACvC,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,yBAAyB,GAAG,SAAS,CAAC;CAiClD"}
\ No newline at end of file
+{"version":3,"file":"installation-service.d.ts","sourceRoot":"","sources":["../../src/service/installation-service.ts"],"names":[],"mappings":"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"}
\ No newline at end of file

Modified: package/out/environment/list-environment.d.ts.map

Index: package/out/environment/list-environment.d.ts.map
===================================================================
--- package/out/environment/list-environment.d.ts.map
+++ package/out/environment/list-environment.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"list-environment.d.ts","sourceRoot":"","sources":["../../src/environment/list-environment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEtE,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAsB,SAAQ,IAAI,CAAC,cAAc,EAAE,KAAK,GAAG,MAAM,CAAC;IACjF,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC;CACpF;AAED,qBAAa,sBAAsB;IAE/B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY;gBADZ,MAAM,EAAE,qBAAqB,EAC7B,YAAY,EAAE,iBAAiB;IAGrC,OAAO;CAMrB"}
\ No newline at end of file
+{"version":3,"file":"list-environment.d.ts","sourceRoot":"","sources":["../../src/environment/list-environment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEtE,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAsB,SAAQ,IAAI,CAAC,cAAc,EAAE,KAAK,GAAG,MAAM,CAAC;IACjF,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IACpC,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC;CACpF;AAED,qBAAa,sBAAsB;IAE/B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY;gBADZ,MAAM,EAAE,qBAAqB,EAC7B,YAAY,EAAE,iBAAiB;IAGrC,OAAO;CAMrB"}
\ No newline at end of file

Modified: package/out/command-line/register-app-commands.d.ts.map

Index: package/out/command-line/register-app-commands.d.ts.map
===================================================================
--- package/out/command-line/register-app-commands.d.ts.map
+++ package/out/command-line/register-app-commands.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"register-app-commands.d.ts","sourceRoot":"","sources":["../../src/command-line/register-app-commands.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAqB,aAAa,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAG/G,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAetD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKrD;AA6CD,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,GAC1B,OAAO,CAQT;AAED,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAW7E;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,aAAa,EACjB,gBAAgB,EAAE,gBAAgB,EAClC,IAAI,EAAE,MAAM,EACZ,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,2BAA2B,GACnD,OAAO,CAAC,sBAAsB,CAAC,CAuBjC;AAuJD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,QAGlD"}
\ No newline at end of file
+{"version":3,"file":"register-app-commands.d.ts","sourceRoot":"","sources":["../../src/command-line/register-app-commands.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAqB,aAAa,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAG/G,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAuBtD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKrD;AA6CD,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,GAC1B,OAAO,CAQT;AAED,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAW7E;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,aAAa,EACjB,gBAAgB,EAAE,gBAAgB,EAClC,IAAI,EAAE,MAAM,EACZ,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,2BAA2B,GACnD,OAAO,CAAC,sBAAsB,CAAC,CAuBjC;AAuJD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,QAGlD"}
\ No newline at end of file

Modified: package/out/command-line/register-installation-commands.d.ts.map

Index: package/out/command-line/register-installation-commands.d.ts.map
===================================================================
--- package/out/command-line/register-installation-commands.d.ts.map
+++ package/out/command-line/register-installation-commands.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"register-installation-commands.d.ts","sourceRoot":"","sources":["../../src/command-line/register-installation-commands.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAY1B,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAM/D,wBAAsB,eAAe,CAAC,EACpC,IAAI,EACJ,OAAO,EACR,EAAE;IACD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC;IAAE,OAAO,CAAC,EAAE,GAAG,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAW/C;AA+ED,eAAO,MAAM,sBAAsB,cACtB,MAAM,6CAC0B,YAAY,kBAuBxD,CAAC;AAEF,eAAO,MAAM,yBAAyB,oBACnB,YAAY,EAAE,6CACY,YAAY,kBA8CxD,CAAC;AAgEF,eAAO,MAAM,gBAAgB,qBAAsB,YAAY,KAAG,IAejE,CAAC"}
\ No newline at end of file
+{"version":3,"file":"register-installation-commands.d.ts","sourceRoot":"","sources":["../../src/command-line/register-installation-commands.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAqD/D,eAAO,MAAM,gCAAgC,oDAAqD,YAAY,SAmC7G,CAAC;AAEF,eAAO,MAAM,sBAAsB,cACtB,MAAM,6CAC0B,YAAY,kBAuBxD,CAAC;AAEF,eAAO,MAAM,yBAAyB,oBACnB,YAAY,EAAE,6CACY,YAAY,kBA8CxD,CAAC;AAsEF,eAAO,MAAM,gBAAgB,qBAA4B,YAAY,KAAG,QAAQ,IAAI,CAenF,CAAC"}
\ No newline at end of file

Modified: package/out/command-line/register-webtrigger-commands.d.ts.map

Index: package/out/command-line/register-webtrigger-commands.d.ts.map
===================================================================
--- package/out/command-line/register-webtrigger-commands.d.ts.map
+++ package/out/command-line/register-webtrigger-commands.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"register-webtrigger-commands.d.ts","sourceRoot":"","sources":["../../src/command-line/register-webtrigger-commands.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAgCtD,eAAO,MAAM,gBAAgB,uHAO1B,YAAY,SA6Cd,CAAC"}
\ No newline at end of file
+{"version":3,"file":"register-webtrigger-commands.d.ts","sourceRoot":"","sources":["../../src/command-line/register-webtrigger-commands.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAgCtD,eAAO,MAAM,gBAAgB,iIAM1B,YAAY,kBAyDd,CAAC"}
\ No newline at end of file

Modified: package/out/installations/site-translation/site-translation.d.ts.map

Index: package/out/installations/site-translation/site-translation.d.ts.map
===================================================================
--- package/out/installations/site-translation/site-translation.d.ts.map
+++ package/out/installations/site-translation/site-translation.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"site-translation.d.ts","sourceRoot":"","sources":["../../../src/installations/site-translation/site-translation.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B,wBAAwB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IAEvE,uBAAuB,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACjF,mBAAmB,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC;CACpD"}
\ No newline at end of file
+{"version":3,"file":"site-translation.d.ts","sourceRoot":"","sources":["../../../src/installations/site-translation/site-translation.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,WAAW,cAAc;IAC7B,wBAAwB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IAEvE,uBAAuB,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5E,mBAAmB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;CAC/C"}
\ No newline at end of file

Modified: package/out/service/tunnel-service.d.ts.map

Index: package/out/service/tunnel-service.d.ts.map
===================================================================
--- package/out/service/tunnel-service.d.ts.map
+++ package/out/service/tunnel-service.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"tunnel-service.d.ts","sourceRoot":"","sources":["../../src/service/tunnel-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAOpC,OAAO,EAKL,sBAAsB,EACtB,+BAA+B,EAG/B,aAAa,EACb,EAAE,EACF,SAAS,EACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAIpE,eAAO,MAAM,cAAc,QAAuC,CAAC;AAcnE,eAAO,MAAM,UAAU,QAEuB,CAAC;AAE/C,oBAAY,aAAa,GAAG;IAC1B,GAAG,CACD,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,+BAA+B,EACtC,YAAY,EAAE,OAAO,EACrB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,GACtC,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB,CAAC;AAEF,qBAAa,wCAAyC,SAAQ,SAAS;;CAItE;AAED,qBAAa,8BAA+B,SAAQ,SAAS;gBAC/C,IAAI,EAAE,MAAM;CAGzB;AAED,uBAAe,iBAAkB,YAAW,aAAa;IAC3C,SAAS,CAAC,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB;gBAAxC,mBAAmB,EAAE,mBAAmB;aAEvD,GAAG,CACjB,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,+BAA+B,EACtC,YAAY,EAAE,OAAO,EACrB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,GACtC,OAAO,CAAC,IAAI,CAAC;CACjB;AAaD,qBAAa,sBAAuB,SAAQ,iBAAiB;IAEzD,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,4BAA4B;IAE7C,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBALhB,EAAE,EAAE,EAAE,EACN,kBAAkB,EAAE,kBAAkB,EACtC,gBAAgB,EAAE,gBAAgB,EAClC,4BAA4B,EAAE,4BAA4B,EAC3E,mBAAmB,EAAE,mBAAmB,EACvB,gBAAgB,EAAE,sBAAsB;IAK9C,GAAG,CACd,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,+BAA+B,EACtC,YAAY,EAAE,OAAO,EACrB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,GACtC,OAAO,CAAC,IAAI,CAAC;CAsBjB;AAED,UAAU,mBAAmB;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,uBAAe,wBAAyB,SAAQ,iBAAiB;IAE7D,SAAS,CAAC,QAAQ,CAAC,4BAA4B,EAAE,4BAA4B;IAC7E,SAAS,CAAC,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB;gBADxC,4BAA4B,EAAE,4BAA4B,EAC1D,mBAAmB,EAAE,mBAAmB;IAKhD,2BAA2B,CACtC,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,OAAO,EACrB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,sBAAsB,EACxC,IAAI,EAAE,MAAM,EACZ,eAAe,EAAE,MAAM,GAAG,SAAS,EACnC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACpC,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAmBjC,OAAO,CAAC,2BAA2B;IAInC,OAAO,CAAC,6BAA6B;IAOrC,OAAO,CAAC,0BAA0B;IAIlC,OAAO,CAAC,2BAA2B;CASpC;AAED,qBAAa,kBAAmB,SAAQ,wBAAwB;IACjD,GAAG,CACd,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,+BAA+B,EACtC,YAAY,EAAE,OAAO,EACrB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,GACtC,OAAO,CAAC,IAAI,CAAC;IA2BhB,OAAO,CAAC,uBAAuB;CAUhC;AAED,qBAAa,mBAAoB,SAAQ,wBAAwB;IAI7D,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAHjC,4BAA4B,EAAE,4BAA4B,EAC1D,mBAAmB,EAAE,mBAAmB,EACvB,aAAa,EAAE,aAAa,EAC5B,gBAAgB,EAAE,sBAAsB;IAK9C,GAAG,CACd,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,+BAA+B,EACtC,YAAY,EAAE,OAAO,GACpB,OAAO,CAAC,IAAI,CAAC;IA4DH,eAAe,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,KAAK,CAAC,GAAG,SAAS,CAAC;YAO/D,qBAAqB;IAMnC,OAAO,CAAC,oBAAoB;IAqB5B,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,qBAAqB;YAQf,gBAAgB;YAsBhB,gBAAgB;CAG/B"}
\ No newline at end of file
+{"version":3,"file":"tunnel-service.d.ts","sourceRoot":"","sources":["../../src/service/tunnel-service.ts"],"names":[],"mappings":"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"}
\ No newline at end of file

Modified: package/CHANGELOG.md

Large diffs are not rendered by default.

Modified: package/out/installations/site-translation/bitbucket.d.ts

Index: package/out/installations/site-translation/bitbucket.d.ts
===================================================================
--- package/out/installations/site-translation/bitbucket.d.ts
+++ package/out/installations/site-translation/bitbucket.d.ts
@@ -1,17 +1,16 @@
 /// <reference types="node" />
 import { SiteTranslator } from './site-translation';
 import { URL } from 'url';
-import { Ari } from '@forge/util/packages/ari';
-import { EnrichedAri } from '@forge/cli-shared';
+import { Ari, AnyAri } from '@forge/util/packages/ari';
 export declare class InvalidWorkspaceError extends Error {
     constructor(url: URL);
 }
 export declare const getBitbucketEndpoint: () => string;
 export declare class BitbucketTranslator implements SiteTranslator {
-    ariBelongsToProduct(ari: EnrichedAri): boolean;
+    ariBelongsToProduct(ari: AnyAri): boolean;
     buildInstallationContext(product: string, site: URL): Promise<Ari>;
-    getSitesForResourceAris(aris: EnrichedAri[]): Promise<Record<string, string>>;
+    getSitesForResourceAris(aris: AnyAri[]): Promise<Record<string, string>>;
     private getWorkspaceId;
     getWorkspaceUrl(workspaceId: string): Promise<URL | null>;
     private decorateWorkspaceId;
     private extractWorkspaceId;

Modified: package/out/command-line/command.d.ts

Index: package/out/command-line/command.d.ts
===================================================================
--- package/out/command-line/command.d.ts
+++ package/out/command-line/command.d.ts
@@ -1,8 +1,8 @@
 import commander, { CommanderError } from 'commander';
 import { CamelCase } from 'type-fest';
 import { AnalyticsClientReporter } from '../analytics-client/analytics-client';
-import { Logger, CLIDetails, CredentialGetter, PersonalApiCredentialsValidated, ErrorWithAnalytics, ErrorAnalytics, FeatureFlagService } from '@forge/cli-shared';
+import { Logger, CLIDetails, CredentialGetter, PersonalApiCredentialsValidated, ErrorWithAnalytics, ErrorAnalytics, FeatureFlagService, SupportedProduct, SupportedProductsService } from '@forge/cli-shared';
 import { PreCommandController } from './controller/pre-command-controller';
 import * as autocomplete from '../autocomplete/types';
 import { StubController } from './controller/stubController';
 import { DefaultEnvironmentController } from './controller/default-environment-controller';
@@ -46,8 +46,9 @@
     private readonly cliDetails;
     private readonly credentialStore;
     private readonly defaultEnvironmentController;
     private readonly featureFlagService;
+    private readonly supportedProductsService;
     get verbose(): boolean;
     private static isError;
     private static isHelpTriggered;
     private static isVersionTriggered;
@@ -59,9 +60,9 @@
     private readonly requiresAuthentication;
     private readonly requiresAnalyticsConsent;
     private readonly requiredOptionFlags;
     private readonly preconditionFn;
-    static program(ui: Logger, analyticsClient: AnalyticsClientReporter, preCommandController: PreCommandController, cliDetails: CLIDetails | undefined, credentialStore: CredentialGetter, defaultEnvironmentController: DefaultEnvironmentController, featureFlagService: FeatureFlagService): Command<[], DefaultOpts>;
+    static program(ui: Logger, analyticsClient: AnalyticsClientReporter, preCommandController: PreCommandController, cliDetails: CLIDetails | undefined, credentialStore: CredentialGetter, defaultEnvironmentController: DefaultEnvironmentController, featureFlagService: FeatureFlagService, supportedProductsService: SupportedProductsService): Command<[], DefaultOpts>;
     private constructor();
     private clone;
     version(str: string, flags?: string): Command<Args, Opts>;
     command<ArgsStr extends string>(name: ArgsStr, opts?: commander.CommandOptions): Command<ParseArgs<ArgsStr>, DefaultOpts>;
@@ -79,8 +80,12 @@
     parse(argv: string[]): Promise<void>;
     environmentOption(): Command<Args, Opts & {
         environment: string;
     }>;
+    contextOption(supportedProducts: SupportedProduct[]): Command<Args, Opts & {
+        site?: URL;
+        product?: SupportedProduct;
+    }>;
     jsonOption(): Command<Args, Opts & {
         json: boolean;
     }>;
     requireNoAuthentication(): Command<Args, Opts>;
@@ -98,6 +103,14 @@
     private assertValidArgs;
     getAutocompleteConfig(): autocomplete.AutocompleteConfig;
 }
 export declare function getAutocompleteConfig(cmd: commander.Command): autocomplete.AutocompleteConfig;
+export declare function validateContext({ supportedProductsService, site, product }: {
+    supportedProductsService: SupportedProductsService;
+    site?: string;
+    product?: string;
+}): Promise<{
+    site?: URL;
+    product?: SupportedProduct;
+}>;
 export {};
 //# sourceMappingURL=command.d.ts.map
\ No newline at end of file

Modified: package/out/command-line/dependency-injection.d.ts

Index: package/out/command-line/dependency-injection.d.ts
===================================================================
--- package/out/command-line/dependency-injection.d.ts
+++ package/out/command-line/dependency-injection.d.ts
@@ -1,5 +1,5 @@
-import { CLIDetails, CommandLineUI, ConfigFile, CreateAppCommand, FeatureFlagService, GetAppOwnerQuery, LoginCommand, LogoutCommand, RegisterAppCommand, ViewAppLogsCommand, UserRepositoryImpl } from '@forge/cli-shared';
+import { CLIDetails, CommandLineUI, ConfigFile, CreateAppCommand, FeatureFlagService, GetAppOwnerQuery, LoginCommand, LogoutCommand, RegisterAppCommand, ViewAppLogsCommand, UserRepositoryImpl, SupportedProductsService } from '@forge/cli-shared';
 import { AnalyticsClientReporter } from '../analytics-client/analytics-client';
 import { PackageUploadDeployCommand } from '../deploy';
 import { DeleteEnvironmentVariableCommand } from '../environment-variables/delete-environment-variable';
 import { ListEnvironmentVariablesCommand } from '../environment-variables/list-environment-variables';
@@ -28,8 +28,9 @@
 import { StubController } from './controller/stubController';
 import { PrerequisitesController } from './controller/prerequisites-controller';
 import { DefaultEnvironmentController } from './controller/default-environment-controller';
 import { EligibilityController } from './controller/eligibility-controller';
+import { VersionController } from './controller/version-controller';
 export declare const getDependencies: (cliDetails: CLIDetails | undefined) => Promise<{
     ui: CommandLineUI;
     cmd: Command<[], import("./command").DefaultOpts>;
     configFile: ConfigFile;
@@ -64,8 +65,9 @@
         migrationKeysService: MigrationKeysService;
         customEntitiesService: CustomEntitiesService;
         credentialStore: import("@forge/cli-shared").CredentialStore;
         userRepository: UserRepositoryImpl;
+        supportedProductsService: SupportedProductsService;
     };
     controllers: {
         autocompleteController: AutocompleteController;
         deployController: DeployController;
@@ -78,8 +80,9 @@
         settingsController: SettingsController;
         stubController: StubController;
         prerequisitesController: PrerequisitesController;
         defaultEnvironmentController: DefaultEnvironmentController;
+        versionController: VersionController;
     };
 }>;
 declare type PromiseType<T> = T extends Promise<infer R> ? R : never;
 export declare type Dependencies = PromiseType<ReturnType<typeof getDependencies>>;

Modified: package/out/command-line/view/deploy-view.d.ts

Index: package/out/command-line/view/deploy-view.d.ts
===================================================================
--- package/out/command-line/view/deploy-view.d.ts
+++ package/out/command-line/view/deploy-view.d.ts
@@ -5,9 +5,9 @@
     private readonly ui;
     constructor(ui: UI);
     getLogger(): UI;
     displayStart(environment: string, environmentType: AppEnvironmentType): void;
-    displayListAppInstallationsError(): void;
+    displayHasNoAppInstallationsForEnvError(): void;
     displayLintRunning(): void;
     displayOutdatedInstallationsMessage(): void;
     displayRoaEligibilityFailureMessage(appVersion: string, envKey: string, envType: AppEnvironmentType): void;
     displayRoaEligibilitySuccessMessage(appVersion: string, envKey: string, envType: AppEnvironmentType): void;

Modified: package/out/environment/graphql-client.d.ts

Index: package/out/environment/graphql-client.d.ts
===================================================================
--- package/out/environment/graphql-client.d.ts
+++ package/out/environment/graphql-client.d.ts
@@ -12,8 +12,9 @@
     listEnvironment(details: ListEnvironmentDetails): Promise<{
         type: AppEnvironmentType;
         key: string;
         lastDeployedAt: string;
+        primaryProduct: import("@forge/cli-shared").EcosystemPrimaryProduct | undefined;
     }[]>;
     deleteEnvironments(details: BatchDeleteEnvironmentDetails): Promise<DeleteEnvironmentOutput[]>;
     deleteEnvironment(details: DeleteEnvironmentDetails): Promise<true>;
 }

Modified: package/out/installations/graphql-client.d.ts

Index: package/out/installations/graphql-client.d.ts
===================================================================
--- package/out/installations/graphql-client.d.ts
+++ package/out/installations/graphql-client.d.ts
@@ -1,7 +1,7 @@
-import { AppUninstallationInput, GraphQLClient, GraphQlMutationError, Pause, BaseError, UserError } from '@forge/cli-shared';
+import { AppEnvironmentType, AppUninstallationInput, GraphQLClient, GraphQlMutationError, Pause, BaseError, UserError } from '@forge/cli-shared';
 import { AppInstallSiteDetails, InstallAppClient } from './install-app-site';
-import { AppEnvironmentVersionData, Installation, ListAppInstallationsClient, UpgradeAppInstallationsClient } from '../service/installation-service';
+import { AppEnvironmentVersionData, HasNoAppInstallationsForEnvClient, Installation, ListAppInstallationsClient, UpgradeAppInstallationsClient } from '../service/installation-service';
 import { UninstallAppClient, UninstallAppOutput } from './uninstall-app';
 import { SiteTranslator } from './site-translation';
 export declare const UNINSTALLATION_EVENT_POLL_INTERVAL = 500;
 export declare const ALREADY_UPGRADED_CODE = "INSTALLATION_ALREADY_UPGRADED";
@@ -43,17 +43,17 @@
 export declare class MissingAppUninstallTask extends Error {
 }
 export declare class InstallationNotFoundError extends UserError {
 }
-export declare class InstallationsGraphqlClient implements InstallAppClient, ListAppInstallationsClient, UninstallAppClient, UpgradeAppInstallationsClient {
+export declare class InstallationsGraphqlClient implements InstallAppClient, ListAppInstallationsClient, UninstallAppClient, UpgradeAppInstallationsClient, HasNoAppInstallationsForEnvClient {
     private readonly graphqlClient;
-    private readonly cloudIdTranslator;
+    private readonly sitedProductTranslator;
     private readonly bitbucketTranslator;
     private readonly pause;
     SITE_RESOURCE_TYPE: string;
     WORKSPACE_RESOURCE_TYPE: string;
     static buildInstallationContext(product: string, resourceId: string, resourceType: string): string;
-    constructor(graphqlClient: GraphQLClient, cloudIdTranslator: SiteTranslator, bitbucketTranslator: SiteTranslator, pause: Pause);
+    constructor(graphqlClient: GraphQLClient, sitedProductTranslator: SiteTranslator, bitbucketTranslator: SiteTranslator, pause: Pause);
     private buildInstallationContext;
     private getProductTranslation;
     installAppIntoSite({ environmentKey, site, product, appId, licenseOverride, overrides }: AppInstallSiteDetails): Promise<void>;
     upgradeInstallation({ site, product, environmentKey, appId }: AppInstallSiteDetails): Promise<void>;
@@ -61,8 +61,9 @@
     uninstallApp(input: AppUninstallationInput): Promise<boolean>;
     uninstallMultipleApps(apps: AppUninstallationInput[]): Promise<Partial<UninstallAppOutput>[]>;
     listInstallations(appId: string): Promise<Installation[]>;
     getInstallation(appId: string, installationId: string): Promise<Installation>;
+    hasNoAppInstallationsForEnv(appId: string, appEnv: AppEnvironmentType): Promise<boolean>;
     private getAppInstallationTask;
     private getAppInstallationTaskRetry;
     private monitorUninstallApp;
     private getResourceArisForProduct;

Modified: package/out/command-line/index.d.ts

Index: package/out/command-line/index.d.ts
===================================================================
--- package/out/command-line/index.d.ts
+++ package/out/command-line/index.d.ts
@@ -1,4 +1,4 @@
 import { Dependencies } from './dependency-injection';
-export declare function registerCommands(deps: Dependencies): void;
+export declare function registerCommands(deps: Dependencies): Promise<void>;
 export declare const main: () => Promise<void>;
 //# sourceMappingURL=index.d.ts.map
\ No newline at end of file

Modified: package/out/installations/site-translation/index.d.ts

Index: package/out/installations/site-translation/index.d.ts
===================================================================
--- package/out/installations/site-translation/index.d.ts
+++ package/out/installations/site-translation/index.d.ts
@@ -1,4 +1,4 @@
 export * from './bitbucket';
-export * from './cloudid-products';
+export * from './sited-products';
 export * from './site-translation';
 //# sourceMappingURL=index.d.ts.map
\ No newline at end of file

Modified: package/out/command-line/controller/install-controller.d.ts

Index: package/out/command-line/controller/install-controller.d.ts
===================================================================
--- package/out/command-line/controller/install-controller.d.ts
+++ package/out/command-line/controller/install-controller.d.ts
@@ -1,6 +1,6 @@
 /// <reference types="node" />
-import { AppConfigProvider, ConfigFile, UI, StatsigService } from '@forge/cli-shared';
+import { AppConfigProvider, ConfigFile, UI, SupportedProductsService } from '@forge/cli-shared';
 import { URL } from 'url';
 import { InstallAppSiteCommand } from '../../installations/install-app-site';
 import { InstallationService } from '../../service/installation-service';
 import { InstallView } from '../view/install-view';
@@ -24,10 +24,10 @@
     private readonly ui;
     private readonly installAppSiteCommand;
     private readonly installationService;
     private readonly installView;
-    private readonly statsigService;
-    constructor(appConfigProvider: AppConfigProvider, configFile: ConfigFile, ui: UI, installAppSiteCommand: InstallAppSiteCommand, installationService: InstallationService, installView: InstallView, statsigService: StatsigService);
+    private readonly supportedProductsService;
+    constructor(appConfigProvider: AppConfigProvider, configFile: ConfigFile, ui: UI, installAppSiteCommand: InstallAppSiteCommand, installationService: InstallationService, installView: InstallView, supportedProductsService: SupportedProductsService);
     private securityPrompt;
     private installOrUpgrade;
     private promptForProduct;
     private promptForSite;

Modified: package/out/service/installation-service.d.ts

Index: package/out/service/installation-service.d.ts
===================================================================
--- package/out/service/installation-service.d.ts
+++ package/out/service/installation-service.d.ts
@@ -1,15 +1,17 @@
 /// <reference types="node" />
-import { AppConfigProvider, AppEnvironmentType, AppEnvironmentVersion, Maybe } from '@forge/cli-shared';
+import { AppConfigProvider, AppEnvironmentType, AppEnvironmentVersion, Maybe, SupportedProduct, BaseError } from '@forge/cli-shared';
 import { URL } from 'url';
 import { AppInstallSiteDetails } from '../installations/install-app-site';
 export interface Installation {
     id: string;
     product: string;
+    secondaryProducts?: string[];
     site: string;
     environmentKey: string;
     environmentType: AppEnvironmentType;
     context: string;
+    secondaryContexts?: string[];
     version: {
         isLatest: boolean;
         version: string;
     };
@@ -19,17 +21,18 @@
 }
 export interface AppEnvironmentVersionPermissions {
     scopes: string[];
     egressAddresses: string[];
+    primaryProduct?: string;
 }
 export interface AppEnvironmentPermissions extends AppEnvironmentVersionPermissions {
     addedScopes: string[];
     environmentType: AppEnvironmentType;
     hasDeployments: boolean;
 }
 interface InstallationFilterOptions {
-    site?: string;
-    product?: 'Jira' | 'Confluence';
+    site?: URL;
+    product?: SupportedProduct;
     environment?: string;
 }
 export interface AppEnvironmentVersionData {
     nodes?: Array<Maybe<AppEnvironmentVersion>> | null;
@@ -41,16 +44,27 @@
 }
 export interface UpgradeAppInstallationsClient {
     upgradeInstallation({ site, product, environmentKey, appId }: AppInstallSiteDetails): Promise<void>;
 }
+export interface HasNoAppInstallationsForEnvClient {
+    hasNoAppInstallationsForEnv(appId: string, appEnv: AppEnvironmentType): Promise<boolean>;
+}
+export declare class MultipleMatchingInstallationsError extends BaseError {
+    constructor();
+}
 export declare class InstallationService {
     private readonly getAppConfig;
     private readonly listInstallationsClient;
     private readonly upgradeAppInstallationsClient;
-    constructor(getAppConfig: AppConfigProvider, listInstallationsClient: ListAppInstallationsClient, upgradeAppInstallationsClient: UpgradeAppInstallationsClient);
+    private readonly hasNoAppInstallationsForEnvClient;
+    constructor(getAppConfig: AppConfigProvider, listInstallationsClient: ListAppInstallationsClient, upgradeAppInstallationsClient: UpgradeAppInstallationsClient, hasNoAppInstallationsForEnvClient: HasNoAppInstallationsForEnvClient);
+    private comparePossibleInstallations;
+    private matchSiteForProduct;
     private filterInstallations;
     listAppInstallations(filter?: InstallationFilterOptions): Promise<AppInstallation>;
+    hasNoAppInstallationsForEnv(appEnv: AppEnvironmentType): Promise<boolean>;
     listNonTechnicalAppInstallations(filter?: InstallationFilterOptions): Promise<AppInstallation>;
+    findOnlyMatchingInstallation(filter: InstallationFilterOptions): Promise<Installation>;
     hasOutdatedProductInstallation(environment: string): Promise<boolean>;
     upgradeInstallation(site: URL, product: string, environmentKey: string, appId: string): Promise<boolean>;
     private getPermissionsFromAppEnvironmentVersion;
     getAppEnvironmentPermissions(appId: string, environmentKey: string): Promise<AppEnvironmentPermissions | undefined>;

Modified: package/out/environment/list-environment.d.ts

Index: package/out/environment/list-environment.d.ts
===================================================================
--- package/out/environment/list-environment.d.ts
+++ package/out/environment/list-environment.d.ts
@@ -3,8 +3,9 @@
     appId: string;
 }
 export interface ListEnvironmentOutput extends Pick<AppEnvironment, 'key' | 'type'> {
     lastDeployedAt: string;
+    primaryProduct?: string;
 }
 export interface ListEnvironmentClient {
     listEnvironment(details: ListEnvironmentDetails): Promise<ListEnvironmentOutput[]>;
 }

Modified: package/out/command-line/register-installation-commands.d.ts

Index: package/out/command-line/register-installation-commands.d.ts
===================================================================
--- package/out/command-line/register-installation-commands.d.ts
+++ package/out/command-line/register-installation-commands.d.ts
@@ -1,15 +1,7 @@
-/// <reference types="node" />
-import { URL } from 'url';
 import { Dependencies } from './dependency-injection';
 import { Installation } from '../service/installation-service';
-export declare function validateContext({ site, product }: {
-    site?: string;
-    product?: string;
-}): Promise<{
-    siteURL?: URL;
-    product?: string;
-}>;
+export declare const registerListInstallationsCommand: ({ cmd, ui, services: { installationsService } }: Dependencies) => void;
 export declare const performSingleUninstall: (installId: string, { ui, commands: { uninstallAppCommand } }: Dependencies) => Promise<void>;
 export declare const performMultipleUninstalls: (appsToUninstall: Installation[], { ui, commands: { uninstallAppCommand } }: Dependencies) => Promise<void>;
-export declare const registerCommands: ({ cmd, ...deps }: Dependencies) => void;
+export declare const registerCommands: ({ cmd, ...deps }: Dependencies) => Promise<void>;
 //# sourceMappingURL=register-installation-commands.d.ts.map
\ No newline at end of file

Modified: package/out/command-line/register-webtrigger-commands.d.ts

Index: package/out/command-line/register-webtrigger-commands.d.ts
===================================================================
--- package/out/command-line/register-webtrigger-commands.d.ts
+++ package/out/command-line/register-webtrigger-commands.d.ts
@@ -1,3 +1,3 @@
 import { Dependencies } from './dependency-injection';
-export declare const registerCommands: ({ cmd, ui, graphqlGateway, configFile, services: { installationsService }, commands: { getWebTriggerURLCommand } }: Dependencies) => void;
+export declare const registerCommands: ({ cmd, ui, configFile, services: { installationsService, supportedProductsService }, commands: { getWebTriggerURLCommand } }: Dependencies) => Promise<void>;
 //# sourceMappingURL=register-webtrigger-commands.d.ts.map
\ No newline at end of file

Modified: package/out/installations/site-translation/site-translation.d.ts

Index: package/out/installations/site-translation/site-translation.d.ts
===================================================================
--- package/out/installations/site-translation/site-translation.d.ts
+++ package/out/installations/site-translation/site-translation.d.ts
@@ -1,10 +1,9 @@
 /// <reference types="node" />
 import { URL } from 'url';
-import { Ari } from '@forge/util/packages/ari';
-import { EnrichedAri } from '@forge/cli-shared';
+import { AnyAri, Ari } from '@forge/util/packages/ari';
 export interface SiteTranslator {
     buildInstallationContext: (product: string, site: URL) => Promise<Ari>;
-    getSitesForResourceAris: (ari: EnrichedAri[]) => Promise<Record<string, string>>;
-    ariBelongsToProduct: (ari: EnrichedAri) => boolean;
+    getSitesForResourceAris: (ari: AnyAri[]) => Promise<Record<string, string>>;
+    ariBelongsToProduct: (ari: AnyAri) => boolean;
 }
 //# sourceMappingURL=site-translation.d.ts.map
\ No newline at end of file