npm package diff

Package: @forge/cli

Versions: 11.1.0 - 11.2.0-next.17-experimental-26b1489

File: package/out/deploy/deployer/deployer.js

Index: package/out/deploy/deployer/deployer.js
===================================================================
--- package/out/deploy/deployer/deployer.js
+++ package/out/deploy/deployer/deployer.js
@@ -1,7 +1,7 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
-exports.ArtifactDeployer = exports.ManifestValidationFailedError = exports.HostedResourceDeploymentFailedError = exports.AppSnapshotFailedError = exports.AppDeploymentFailedError = void 0;
+exports.ArtifactDeployer = exports.ExistingInstallationsError = exports.ManifestValidationFailedError = exports.HostedResourceDeploymentFailedError = exports.AppSnapshotFailedError = exports.AppDeploymentFailedError = void 0;
 const cli_shared_1 = require("@forge/cli-shared");
 const DEPLOYMENT_EVENT_POLL_INTERVAL = 500;
 class AppDeploymentFailedError extends cli_shared_1.BaseError {
     userError;
@@ -41,8 +41,19 @@
         super(`${message} (requestId: ${requestId || 'unknown'})`, requestId);
     }
 }
 exports.ManifestValidationFailedError = ManifestValidationFailedError;
+class ExistingInstallationsError extends cli_shared_1.BaseError {
+    userError;
+    constructor(userError = false, requestId, message) {
+        super(requestId, `${message} (requestId: ${requestId || 'unknown'})`);
+        this.userError = userError;
+    }
+    isUserError() {
+        return this.userError;
+    }
+}
+exports.ExistingInstallationsError = ExistingInstallationsError;
 function isTransitionEvent(event) {
     return event.__typename === 'AppDeploymentTransitionEvent';
 }
 function isSnapshotLogEvent(event) {
@@ -65,10 +76,10 @@
         this.ui = ui;
     }
     async deploy(environmentKey, artifactUrl, hostedResourceUploadId, majorVersion) {
         const { id } = await this.getConfiguredApp();
-        const deploymentId = await this.doDeploy(id, environmentKey, artifactUrl, hostedResourceUploadId, majorVersion);
-        await this.monitorDeployment(id, environmentKey, deploymentId);
+        const { deploymentId, requestId } = await this.doDeploy(id, environmentKey, artifactUrl, hostedResourceUploadId, majorVersion);
+        await this.monitorDeployment(id, environmentKey, deploymentId, requestId);
     }
     async doDeploy(appId, environmentKey, artifactUrl, hostedResourceUploadId, majorVersion) {
         return await this.deployClient.deploy({
             appId,
@@ -77,10 +88,10 @@
             hostedResourceUploadId,
             majorVersion
         });
     }
-    async pollAndCheckEvents(appId, environmentKey, deploymentId, totalStreamed) {
-        const { stages, status, errorDetails, requestId } = await this.deployMonitorClient.getDeployment({
+    async pollAndCheckEvents(appId, environmentKey, deploymentId, totalStreamed, requestId) {
+        const { stages, status, errorDetails } = await this.deployMonitorClient.getDeployment({
             appId,
             environmentKey,
             deploymentId
         });
@@ -99,13 +110,13 @@
             status,
             totalStreamed
         };
     }
-    async monitorDeployment(appId, environmentKey, deploymentId) {
+    async monitorDeployment(appId, environmentKey, deploymentId, requestId) {
         let totalStreamed = 0;
         let status = cli_shared_1.AppDeploymentStatus.InProgress;
         while (status !== cli_shared_1.AppDeploymentStatus.Done) {
-            const checks = await this.pollAndCheckEvents(appId, environmentKey, deploymentId, totalStreamed);
+            const checks = await this.pollAndCheckEvents(appId, environmentKey, deploymentId, totalStreamed, requestId);
             totalStreamed = checks.totalStreamed;
             status = checks.status;
             await this.pause(DEPLOYMENT_EVENT_POLL_INTERVAL);
         }
@@ -168,8 +179,11 @@
                     const causeMessage = errorDetails?.fields?.validationResult.message.replace(/Upsert.*Error message: /, '');
                     if (causeMessage?.toLowerCase().includes('egress')) {
                         throw new AppDeploymentFailedError(true, requestId, cli_shared_1.Text.deploy.egressURL.error(causeMessage));
                     }
+                    if (causeMessage?.toLowerCase().includes('existing installations')) {
+                        throw new ExistingInstallationsError(true, requestId, cli_shared_1.Text.deploy.crossContext.error);
+                    }
                     break;
                 }
                 case 'HOSTED_RESOURCE_TOO_MANY_FILES':
                 case 'HOSTED_RESOURCE_ZIP_TOO_BIG':