npm package diff

Package: @forge/cli

Versions: 10.12.1-next.2 - 10.13.0-next.18

File: 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
@@ -41,9 +41,9 @@
                 return;
             }
         }
     }
-    async installOrUpgrade(upgrade, environment, environmentType, site, product, appId, text, license) {
+    async installOrUpgrade(upgrade, environment, environmentType, site, product, appId, text, license, overrides) {
         return this.ui.displayProgress(async () => {
             if (upgrade) {
                 const isAlreadyUpdated = await this.installationService.upgradeInstallation(site, product, environment, appId);
                 return isAlreadyUpdated;
@@ -52,9 +52,10 @@
                 await this.installAppSiteCommand.execute({
                     environmentKey: environment,
                     site,
                     product,
-                    licenseOverride: license
+                    licenseOverride: license,
+                    overrides
                 });
                 return false;
             }
         }, text.cmd.start(environment, environmentType), (alreadyUpdated) => {
@@ -134,12 +135,13 @@
             throw new cli_shared_1.UserError(cli_shared_1.Text.error.licenseOverrideErrors.prodSupport);
         }
         return upperCaseLicense;
     }
-    async run({ environment, site, product, upgrade, confirmScopes, license, nonInteractive }) {
+    async run({ environment, site, product, upgrade, confirmScopes, license, licenseModes, usersWithAccess, nonInteractive }) {
         const { id } = await this.appConfigProvider();
         const text = upgrade ? cli_shared_1.Text.upgrade : cli_shared_1.Text.install;
         const validLicense = this.validateLicenseOption(license, environment);
+        const overrides = await this.validateEcosystemAppInstallationOverridesInput(licenseModes, usersWithAccess, environment);
         if (upgrade && (!site || !product)) {
             const upgradeResult = await this.promptForUpgrade(site, product, environment);
             environment = upgradeResult.environment;
             site = upgradeResult.site;
@@ -170,9 +172,9 @@
         const addedScopes = await this.extractAddedScopes(environmentPermissions);
         const scopesConfirmationResult = await this.installView.promptForPermissionsConfirmation(environmentPermissions, addedScopes, [...manifestScopes], manifestEgressAddresses, environment, confirmScopes, !!nonInteractive, text);
         if (!scopesConfirmationResult)
             return;
-        const isAlreadyUpdated = await this.installOrUpgrade(upgrade, environment, environmentType, site, product, id, text, validLicense);
+        const isAlreadyUpdated = await this.installOrUpgrade(upgrade, environment, environmentType, site, product, id, text, validLicense, overrides);
         if (isAlreadyUpdated) {
             this.ui.info(cli_shared_1.Text.upgrade.alreadyUpdated.banner(environment, product, site.host));
         }
         else {
@@ -201,6 +203,55 @@
             name: scope,
             requiresInteractiveConsent: scopesWithInteractiveConsent.has(scope)
         }));
     }
+    isValidLicenseMode(value) {
+        return Object.values(cli_shared_1.EcosystemLicenseMode).includes(value);
+    }
+    validateLicenseModes(licenseModes, usersWithAccess, environment) {
+        if (licenseModes === undefined) {
+            return undefined;
+        }
+        if (usersWithAccess === undefined) {
+            throw new cli_shared_1.UserError(cli_shared_1.Text.error.licenseModesOverrideErrors.userWithAccessRequired);
+        }
+        if (environment === cli_shared_1.PRODUCTION_ENVIRONMENT_KEY) {
+            throw new cli_shared_1.UserError(cli_shared_1.Text.error.licenseModesOverrideErrors.prodEnvNotSupported);
+        }
+        if (!Array.isArray(licenseModes) || licenseModes.length === 0) {
+            throw new cli_shared_1.UserError(cli_shared_1.Text.error.licenseModesOverrideErrors.empty);
+        }
+        const ecosystemLicenseModes = new Set();
+        for (const licenseMode of licenseModes) {
+            const upperCaseLicenseMode = licenseMode.toUpperCase();
+            if (!this.isValidLicenseMode(upperCaseLicenseMode)) {
+                throw new cli_shared_1.UserError(cli_shared_1.Text.error.licenseModesOverrideErrors.invalid);
+            }
+            ecosystemLicenseModes.add(upperCaseLicenseMode);
+        }
+        return Array.from(ecosystemLicenseModes);
+    }
+    validateUsersWithAccess(licenseModes, usersWithAccess, environment) {
+        if (usersWithAccess === undefined)
+            return;
+        if (licenseModes === undefined) {
+            throw new cli_shared_1.UserError(cli_shared_1.Text.error.userWithAccessOverrideErrors.licenseModeRequired);
+        }
+        if (environment === cli_shared_1.PRODUCTION_ENVIRONMENT_KEY) {
+            throw new cli_shared_1.UserError(cli_shared_1.Text.error.userWithAccessOverrideErrors.prodEnvNotSupported);
+        }
+        if (!Array.isArray(usersWithAccess) || usersWithAccess.length === 0) {
+            throw new cli_shared_1.UserError(cli_shared_1.Text.error.userWithAccessOverrideErrors.empty);
+        }
+        if (usersWithAccess.length > cli_shared_1.Text.maxSizeOfUsersWithAccess) {
+            throw new cli_shared_1.UserError(cli_shared_1.Text.error.userWithAccessOverrideErrors.countSize(cli_shared_1.Text.maxSizeOfUsersWithAccess));
+        }
+    }
+    async validateEcosystemAppInstallationOverridesInput(licenseModes, usersWithAccess, environment) {
+        const ecosystemLicenseModes = this.validateLicenseModes(licenseModes, usersWithAccess, environment);
+        this.validateUsersWithAccess(ecosystemLicenseModes, usersWithAccess, environment);
+        return ecosystemLicenseModes && usersWithAccess
+            ? { licenseModes: ecosystemLicenseModes, usersWithAccess }
+            : undefined;
+    }
 }
 exports.InstallController = InstallController;