import installApp from "../../hw/installApp";
import installAppWithRestore from "../../hw/installAppWithRestore";
import uninstallApp from "../../hw/uninstallApp";
import uninstallAppWithBackup from "../../hw/uninstallAppWithBackup";
/**
 * ExecWithTransport
 * @param transport - The transport object used to communicate with the Ledger device.
 * @param appsBackupEnabled - Whether apps backup is enabled (feature flagged)
 * @returns An observable that emits the progress of the execution.
 */
export const execWithTransport = (transport, appsBackupEnabled = false) => args => {
    const { appOp, targetId, app, modelId, storage, skipAppDataBackup } = args;
    // if appsBackupEnabled is true, we will use the data backup/restore flow
    // modelId & storage are required for the new flow, but can still be
    // undefined for the old flow, so we need to check if they are defined
    if (appsBackupEnabled && modelId && storage) {
        const fn = appOp.type === "install" ? installAppWithRestore : uninstallAppWithBackup;
        return fn(transport, targetId, app, modelId, storage, skipAppDataBackup);
    }
    const fn = appOp.type === "install" ? installApp : uninstallApp;
    return fn(transport, targetId, app);
};
//# sourceMappingURL=execWithTransport.js.map