UNPKG

@salesforce/packaging

Version:

Packaging library for the Salesforce packaging platform

167 lines 8.65 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PackageBundleUninstall = void 0; /* * Copyright 2026, Salesforce, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ const core_1 = require("@salesforce/core"); const kit_1 = require("@salesforce/kit"); const interfaces_1 = require("../interfaces"); const bundleUtils_1 = require("../utils/bundleUtils"); core_1.Messages.importMessagesDirectory(__dirname); const messages = core_1.Messages.loadMessages('@salesforce/packaging', 'bundle_uninstall'); const installMessages = core_1.Messages.loadMessages('@salesforce/packaging', 'bundle_install'); class PackageBundleUninstall { static async getUninstallStatus(uninstallRequestId, connection) { try { const query = 'SELECT Id, UninstallStatus, PackageBundleVersionId, InstalledPkgBundleVersionId, ValidationError, ' + 'CreatedDate, CreatedById ' + `FROM PkgBundleVerUninstallReq WHERE Id = '${uninstallRequestId}'`; const queryResult = await connection.autoFetchQuery(query, { tooling: true, }); if (!queryResult.records || queryResult.records.length === 0) { throw new Error(messages.getMessage('failedToGetPackageBundleUninstallStatus')); } const record = queryResult.records[0]; return { Id: record.Id, UninstallStatus: record.UninstallStatus, PackageBundleVersionId: record.PackageBundleVersionId ?? '', InstalledPkgBundleVersionId: record.InstalledPkgBundleVersionId ?? '', ValidationError: record.ValidationError ?? '', CreatedDate: record.CreatedDate ?? '', CreatedById: record.CreatedById ?? '', Error: record.Error, }; } catch (err) { const error = err instanceof Error ? err : new Error(messages.getMessage('failedToGetPackageBundleUninstallStatus')); throw core_1.SfError.wrap((0, bundleUtils_1.massageErrorMessage)(error)); } } static async getUninstallStatuses(connection, status, createdLastDays) { let query = 'SELECT Id, UninstallStatus, PackageBundleVersionId, InstalledPkgBundleVersionId, ValidationError, ' + 'CreatedDate, CreatedById ' + 'FROM PkgBundleVerUninstallReq'; if (status && createdLastDays) { query += ` WHERE UninstallStatus = '${status}' AND CreatedDate = LAST_N_DAYS: ${createdLastDays}`; } else if (status) { query += ` WHERE UninstallStatus = '${status}'`; } else if (createdLastDays) { query += ` WHERE CreatedDate = LAST_N_DAYS: ${createdLastDays}`; } const queryResult = await connection.autoFetchQuery(query, { tooling: true, }); return queryResult.records.map((record) => ({ Id: record.Id, UninstallStatus: record.UninstallStatus, PackageBundleVersionId: record.PackageBundleVersionId ?? '', InstalledPkgBundleVersionId: record.InstalledPkgBundleVersionId ?? '', ValidationError: record.ValidationError ?? '', CreatedDate: record.CreatedDate ?? '', CreatedById: record.CreatedById ?? '', Error: record.Error, })); } static async uninstallBundle(connection, project, options) { const packageBundleVersionId = PackageBundleUninstall.parsePackageBundleVersionId(options.PackageBundleVersion, project); const request = { PackageBundleVersionId: packageBundleVersionId, }; let uninstallResult; try { uninstallResult = await connection.tooling.sobject('PkgBundleVerUninstallReq').create(request); } catch (err) { const error = err instanceof Error ? err : new Error(typeof err === 'string' ? err : messages.getMessage('failedToUninstallPackageBundle')); throw core_1.SfError.wrap((0, bundleUtils_1.massageErrorMessage)(error)); } if (!uninstallResult?.success) { throw core_1.SfError.wrap((0, bundleUtils_1.massageErrorMessage)(new Error(messages.getMessage('failedToUninstallPackageBundle')))); } if (options.polling) { return PackageBundleUninstall.pollUninstallStatus(uninstallResult.id, connection, options.polling); } // When not polling, query the actual status from the server to get accurate information return PackageBundleUninstall.getUninstallStatus(uninstallResult.id, connection); } static parsePackageBundleVersionId(packageBundleVersion, project) { // Check if it's already an ID (starts with appropriate prefix) if (/^1Q8.{15}$/.test(packageBundleVersion)) { return packageBundleVersion; } // Otherwise, treat it as an alias and resolve it from sfdx-project.json const packageBundleVersionId = project.getPackageBundleIdFromAlias(packageBundleVersion); if (!packageBundleVersionId) { throw new core_1.SfError(installMessages.getMessage('noPackageBundleVersionFoundWithAlias', [packageBundleVersion])); } return packageBundleVersionId; } static async pollUninstallStatus(uninstallRequestId, connection, polling) { if (polling.timeout?.milliseconds <= 0) { return PackageBundleUninstall.getUninstallStatus(uninstallRequestId, connection); } let remainingWaitTime = polling.timeout; const pollingClient = await core_1.PollingClient.create({ poll: async () => { const report = await PackageBundleUninstall.getUninstallStatus(uninstallRequestId, connection); switch (report.UninstallStatus) { case interfaces_1.BundleSObjects.PkgBundleVersionUninstallReqStatus.queued: case interfaces_1.BundleSObjects.PkgBundleVersionUninstallReqStatus.inProgress: // Emit progress event for UI updates await core_1.Lifecycle.getInstance().emit('bundle-uninstall-progress', { ...report, remainingWaitTime }); remainingWaitTime = kit_1.Duration.seconds(remainingWaitTime.seconds - polling.frequency.seconds); return { completed: false, payload: report, }; case interfaces_1.BundleSObjects.PkgBundleVersionUninstallReqStatus.success: return { completed: true, payload: report }; case interfaces_1.BundleSObjects.PkgBundleVersionUninstallReqStatus.error: return { completed: true, payload: report }; default: await core_1.Lifecycle.getInstance().emit('bundle-uninstall-progress', { ...report, remainingWaitTime }); remainingWaitTime = kit_1.Duration.seconds(remainingWaitTime.seconds - polling.frequency.seconds); return { completed: false, payload: report, }; } }, frequency: polling.frequency, timeout: polling.timeout, }); try { return await pollingClient.subscribe(); } catch (err) { const report = await PackageBundleUninstall.getUninstallStatus(uninstallRequestId, connection); if (err instanceof Error) { const timeoutError = new core_1.SfError(messages.getMessage('uninstallTimedOut', [uninstallRequestId]), 'BundleUninstallTimeout'); timeoutError.setData({ UninstallRequestId: uninstallRequestId, ...report }); throw timeoutError; } throw err; } } } exports.PackageBundleUninstall = PackageBundleUninstall; //# sourceMappingURL=packageBundleUninstall.js.map