@ledgerhq/dmk-ledger-wallet 0.7.0 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -36,7 +36,7 @@
36
36
  "license": "Apache-2.0",
37
37
  "name": "@ledgerhq/dmk-ledger-wallet",
38
38
  "peerDependencies": {
39
- "@ledgerhq/device-management-kit": "workspace:^"
39
+ "@ledgerhq/device-management-kit": "^1.11.0"
40
40
  },
41
41
  "private": false,
42
42
  "repository": {
@@ -59,5 +59,5 @@
59
59
  "watch:builds": "pnpm ldmk-tool watch --entryPoints src/index.ts,src/**/*.ts --tsconfig tsconfig.prod.json",
60
60
  "watch:types": "concurrently \"tsc --watch -p tsconfig.prod.json\" \"tsc-alias --watch -p tsconfig.prod.json\""
61
61
  },
62
- "version": "0.7.0"
62
+ "version": "0.7.1"
63
63
  }
@@ -1,2 +1,2 @@
1
- import{hexaStringToBuffer as m,isDashboardName as h,LANGUAGE_ID_TO_LANGUAGE as D,RefusedByUserDAError as f,UserInteractionRequired as c,XStateDeviceAction as R}from"@ledgerhq/device-management-kit";import{Left as E,Right as C}from"purify-ts";import{assign as a,fromPromise as k,setup as I}from"xstate";import{isMasterConsentSupported as v}from"../../../../command/OsUpdate/Restore/RequestMasterConsentCommand";import{isCustomLockScreenSupported as L}from"../../../../customLockScreenUtils/screenSpecs";import{getIsOnboarded as b}from"../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/GetIsOnboarded";import{installLanguagePackage as y}from"../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/InstallLanguagePackage";import{installOrUpdateApps as x}from"../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/InstallOrUpdateApps";import{requestMasterConsent as B}from"../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/RequestMasterConsent";import{restoreAppsStorage as V}from"../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/RestoreAppsStorage";import{uploadCustomLockScreenDevice as O}from"../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/UploadCustomLockScreen";import{RequestMasterConsentResult as T,RestoreBackupSteps as s}from"../../../../device-action/OsUpdate/Restore/RestoreBackup/types";import{goToDashboard as U}from"../../../../device-action/OsUpdate/Shared/Substeps/GoToDashboard";import{waitForAppAndVersion as F}from"../../../../device-action/OsUpdate/Shared/Substeps/WaitForAppAndVersion";const S="english",g=n=>n===void 0?void 0:D[n],l=n=>{const r=g(n);return r!==void 0&&r!==S},d=n=>n instanceof f,M=(n,r)=>n?.map(p=>{const o=r.find(e=>e.appName===p.appName);return o?{...p,restoredAppStorage:o.restoredAppStorage}:p});class Y extends R{makeStateMachine(r){const{backup:p,unlockTimeout:o}=this.input;return I({types:{input:{},output:{},context:{}},actors:{waitForAppAndVersion:F(r,o),goToDashboard:U(r,o),getIsOnboarded:k(b(r)),requestMasterConsent:k(B(r)),installLanguagePackage:y(r,o,g(p.languageId)??S),installOrUpdateApps:x(r,o,p.installedApps.map(e=>({name:e.appName}))),restoreAppsStorage:V(r,o),uploadCustomLockScreen:O(r,o,m(p.clsHexImage??"")??new Uint8Array(0))},guards:{isDeviceOnDashboard:({context:e})=>h(e._internalState.currentApp),isDeviceOnboarded:({context:e})=>e._internalState.isDeviceOnboarded,isMasterConsentFeatureSupported:()=>v(r.getDeviceModel().id),hasBackedUpNonEnglishLanguage:({context:e})=>l(e.input.backup.languageId),hasAppsToReinstall:({context:e})=>e.input.backup.installedApps.length>0,isCustomLockScreenFeatureSupported:()=>L(r.getDeviceModel().id),hasBackedUpCustomLockScreen:({context:e})=>e.input.backup.clsHexImage!==void 0,hasError:({context:e})=>e._internalState.error!==null},actions:{assignErrorFromEvent:a({_internalState:e=>({...e.context._internalState,error:e.event.error})})}}).createMachine({id:"RestoreBackupDeviceAction",initial:"WaitForAppAndVersion",context:({input:e})=>({input:{backup:e.backup,unlockTimeout:e.unlockTimeout},intermediateValue:{requiredUserInteraction:c.None,step:s.Idle},_internalState:{error:null,currentApp:null,isDeviceOnboarded:!1,isMasterConsentGranted:!1,restoredLanguage:l(e.backup.languageId)?!1:void 0,restoredCLS:e.backup.clsHexImage!==void 0?!1:void 0,restoredApps:e.backup.installedApps.length>0?e.backup.installedApps.map(t=>({appName:t.appName,restoredApp:!1,restoredAppStorage:t.data!==void 0?!1:void 0})):void 0,appsToRestoreStorage:[]}}),states:{WaitForAppAndVersion:{entry:a({intermediateValue:e=>({...e.context.intermediateValue,step:s.WaitForAppAndVersion})}),invoke:{src:"waitForAppAndVersion",input:({context:e})=>({unlockTimeout:e.input.unlockTimeout}),onSnapshot:{actions:a({intermediateValue:e=>({...e.event.snapshot.context.intermediateValue,step:e.context.intermediateValue.step})})},onDone:{actions:a({_internalState:e=>e.event.output.caseOf({Left:t=>({...e.context._internalState,error:t}),Right:t=>({...e.context._internalState,currentApp:t.name})})}),target:"CheckIfDeviceIsOnDashboard"},onError:{actions:"assignErrorFromEvent",target:"Error"}}},CheckIfDeviceIsOnDashboard:{always:[{guard:"hasError",target:"Error"},{guard:"isDeviceOnDashboard",target:"GetIsOnboarded"},{target:"GoToDashboard"}]},GoToDashboard:{entry:a({intermediateValue:e=>({...e.context.intermediateValue,step:s.GoToDashboard})}),invoke:{src:"goToDashboard",input:({context:e})=>({unlockTimeout:e.input.unlockTimeout}),onSnapshot:{actions:a({intermediateValue:e=>({...e.event.snapshot.context.intermediateValue,step:e.context.intermediateValue.step})})},onDone:{actions:a({_internalState:e=>e.event.output.caseOf({Left:t=>({...e.context._internalState,error:t}),Right:()=>e.context._internalState})}),target:"CheckGoToDashboard"},onError:{actions:"assignErrorFromEvent",target:"Error"}}},CheckGoToDashboard:{always:[{guard:"hasError",target:"Error"},{target:"WaitForAppAndVersion"}]},GetIsOnboarded:{entry:a({intermediateValue:e=>({...e.context.intermediateValue,step:s.GetIsOnboarded})}),invoke:{src:"getIsOnboarded",onDone:{actions:a({_internalState:e=>e.event.output.caseOf({Left:t=>({...e.context._internalState,error:t}),Right:({isDeviceOnboarded:t})=>({...e.context._internalState,isDeviceOnboarded:t})})}),target:"CheckGetIsOnboarded"},onError:{actions:"assignErrorFromEvent",target:"Error"}}},CheckGetIsOnboarded:{always:[{guard:"hasError",target:"Error"},{guard:"isMasterConsentFeatureSupported",target:"RequestMasterConsent"},{target:"CheckBackedUpLanguage"}]},RequestMasterConsent:{entry:a({intermediateValue:e=>({...e.context.intermediateValue,step:s.RequestMasterConsent,requiredUserInteraction:c.GrantConsent})}),exit:a({intermediateValue:e=>({...e.context.intermediateValue,requiredUserInteraction:c.None})}),invoke:{src:"requestMasterConsent",input:({context:e})=>{const{backup:t}=e.input;return{languagePackConsentEnabled:!l(t.languageId),lockScreenPictureConsentEnabled:t.clsHexImage===void 0,appNumber:t.installedApps.length,appStorageNumber:t.installedApps.filter(u=>u.data===void 0).length}},onDone:[{guard:({event:e})=>e.output.isLeft(),actions:a({_internalState:({event:e,context:t})=>({...t._internalState,error:e.output.extract()})}),target:"Error"},{guard:({event:e})=>e.output.extract()===T.REJECTED,actions:a({_internalState:({context:e})=>({...e._internalState,isMasterConsentGranted:!1})}),target:"Success"},{actions:a({_internalState:({context:e})=>({...e._internalState,isMasterConsentGranted:!0})}),target:"CheckBackedUpLanguage"}],onError:{actions:"assignErrorFromEvent",target:"Error"}}},CheckBackedUpLanguage:{always:[{guard:"hasBackedUpNonEnglishLanguage",target:"InstallLanguagePackage"},{target:"CheckIfDeviceIsOnboarded"}]},InstallLanguagePackage:{entry:a({intermediateValue:e=>({...e.context.intermediateValue,step:s.InstallLanguagePackage})}),invoke:{src:"installLanguagePackage",input:({context:e})=>({unlockTimeout:e.input.unlockTimeout,language:g(e.input.backup.languageId)}),onSnapshot:{actions:a({intermediateValue:e=>({...e.event.snapshot.context.intermediateValue,step:e.context.intermediateValue.step})})},onDone:{actions:a({_internalState:e=>e.event.output.caseOf({Left:t=>d(t)?e.context._internalState:{...e.context._internalState,error:t},Right:()=>({...e.context._internalState,restoredLanguage:!0})})}),target:"CheckIfDeviceIsOnboarded"},onError:{actions:"assignErrorFromEvent",target:"Error"}}},CheckIfDeviceIsOnboarded:{always:[{guard:"hasError",target:"Error"},{guard:"isDeviceOnboarded",target:"CheckAppsToReinstall"},{target:"Success"}]},CheckAppsToReinstall:{always:[{guard:"hasAppsToReinstall",target:"InstallOrUpdateApps"},{target:"CheckIfDeviceSupportCustomLockScreenFeature"}]},InstallOrUpdateApps:{entry:a({intermediateValue:e=>({...e.context.intermediateValue,step:s.InstallOrUpdateApps})}),invoke:{src:"installOrUpdateApps",input:({context:e})=>({unlockTimeout:e.input.unlockTimeout,applications:e.input.backup.installedApps.map(t=>({name:t.appName})),allowMissingApplication:!0}),onSnapshot:{actions:a({intermediateValue:e=>({...e.event.snapshot.context.intermediateValue,step:e.context.intermediateValue.step})})},onDone:{actions:a({_internalState:e=>e.event.output.caseOf({Left:t=>d(t)?{...e.context._internalState,appsToRestoreStorage:[]}:{...e.context._internalState,error:t},Right:t=>{const u=new Set([...t.successfullyInstalled.map(i=>i.versionName),...t.alreadyInstalled]),{backup:A}=e.context.input;return{...e.context._internalState,restoredApps:e.context._internalState.restoredApps?.map(i=>({...i,restoredApp:u.has(i.appName)})),appsToRestoreStorage:A.installedApps.filter(i=>u.has(i.appName)&&i.data!==void 0)}}})}),target:"CheckInstallOrUpdateApps"},onError:{actions:"assignErrorFromEvent",target:"Error"}}},CheckInstallOrUpdateApps:{always:[{guard:"hasError",target:"Error"},{target:"RestoreAppsStorage"}]},RestoreAppsStorage:{entry:a({intermediateValue:e=>({...e.context.intermediateValue,step:s.RestoreAppsStorage})}),invoke:{src:"restoreAppsStorage",input:({context:e})=>({backupApps:e._internalState.appsToRestoreStorage,isMasterConsentGranted:e._internalState.isMasterConsentGranted,unlockTimeout:e.input.unlockTimeout}),onSnapshot:{actions:a({intermediateValue:e=>({...e.event.snapshot.context.intermediateValue,step:e.context.intermediateValue.step})})},onDone:{actions:a({_internalState:e=>e.event.output.caseOf({Left:t=>({...e.context._internalState,error:t}),Right:t=>({...e.context._internalState,restoredApps:M(e.context._internalState.restoredApps,t)})})}),target:"CheckRestoreAppsStorage"},onError:{actions:"assignErrorFromEvent",target:"Error"}}},CheckRestoreAppsStorage:{always:[{guard:"hasError",target:"Error"},{target:"CheckIfDeviceSupportCustomLockScreenFeature"}]},CheckIfDeviceSupportCustomLockScreenFeature:{always:[{guard:"isCustomLockScreenFeatureSupported",target:"CheckBackedUpCustomLockScreen"},{target:"Success"}]},CheckBackedUpCustomLockScreen:{always:[{guard:"hasBackedUpCustomLockScreen",target:"UploadCustomLockScreen"},{target:"Success"}]},UploadCustomLockScreen:{entry:a({intermediateValue:e=>({...e.context.intermediateValue,step:s.UploadCustomLockScreen})}),invoke:{src:"uploadCustomLockScreen",input:({context:e})=>({unlockTimeout:e.input.unlockTimeout,imageData:m(e.input.backup.clsHexImage)}),onSnapshot:{actions:a({intermediateValue:e=>({...e.event.snapshot.context.intermediateValue,step:e.context.intermediateValue.step})})},onDone:{actions:a({_internalState:e=>e.event.output.caseOf({Left:t=>d(t)?e.context._internalState:{...e.context._internalState,error:t},Right:()=>({...e.context._internalState,restoredCLS:!0})})}),target:"CheckUploadCustomLockScreen"},onError:{actions:"assignErrorFromEvent",target:"Error"}}},CheckUploadCustomLockScreen:{always:[{guard:"hasError",target:"Error"},{target:"Success"}]},Success:{type:"final"},Error:{type:"final"}},output:({context:e})=>e._internalState.error!==null?E(e._internalState.error):C({restoredLanguage:e._internalState.restoredLanguage,restoredCLS:e._internalState.restoredCLS,restoredApps:e._internalState.restoredApps})})}}export{Y as RestoreBackupDeviceAction};
1
+ import{hexaStringToBuffer as m,isDashboardName as h,LANGUAGE_ID_TO_LANGUAGE as f,RefusedByUserDAError as D,UserInteractionRequired as c,XStateDeviceAction as R}from"@ledgerhq/device-management-kit";import{Left as C,Right as E}from"purify-ts";import{assign as a,fromPromise as k,setup as I}from"xstate";import{isMasterConsentSupported as v}from"../../../../command/OsUpdate/Restore/RequestMasterConsentCommand";import{isCustomLockScreenSupported as L}from"../../../../customLockScreenUtils/screenSpecs";import{getIsOnboarded as b}from"../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/GetIsOnboarded";import{installLanguagePackage as y}from"../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/InstallLanguagePackage";import{installOrUpdateApps as x}from"../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/InstallOrUpdateApps";import{requestMasterConsent as B}from"../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/RequestMasterConsent";import{restoreAppsStorage as V}from"../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/RestoreAppsStorage";import{uploadCustomLockScreenDevice as O}from"../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/UploadCustomLockScreen";import{RequestMasterConsentResult as T,RestoreBackupSteps as s}from"../../../../device-action/OsUpdate/Restore/RestoreBackup/types";import{goToDashboard as U}from"../../../../device-action/OsUpdate/Shared/Substeps/GoToDashboard";import{waitForAppAndVersion as M}from"../../../../device-action/OsUpdate/Shared/Substeps/WaitForAppAndVersion";const S="english",g=n=>n===void 0?void 0:f[n],l=n=>{const r=g(n);return r!==void 0&&r!==S},d=n=>n instanceof D,F=(n,r)=>n?.map(i=>{const o=r.find(e=>e.appName===i.appName);return o?{...i,restoredAppStorage:o.restoredAppStorage}:i});class Y extends R{makeStateMachine(r){const{backup:i,unlockTimeout:o}=this.input;return I({types:{input:{},output:{},context:{}},actors:{waitForAppAndVersion:M(r,o),goToDashboard:U(r,o),getIsOnboarded:k(b(r)),requestMasterConsent:k(B(r)),installLanguagePackage:y(r,o,g(i.languageId)??S),installOrUpdateApps:x(r,o,i.installedApps.map(e=>({name:e.appName}))),restoreAppsStorage:V(r,o),uploadCustomLockScreen:O(r,o,m(i.clsHexImage??"")??new Uint8Array(0))},guards:{isDeviceOnDashboard:({context:e})=>h(e._internalState.currentApp),isDeviceOnboarded:({context:e})=>e._internalState.isDeviceOnboarded,isMasterConsentFeatureSupported:()=>v(r.getDeviceModel().id),hasBackedUpNonEnglishLanguage:({context:e})=>l(e.input.backup.languageId),hasAppsToReinstall:({context:e})=>e.input.backup.installedApps.length>0,isCustomLockScreenFeatureSupported:()=>L(r.getDeviceModel().id),hasBackedUpCustomLockScreen:({context:e})=>e.input.backup.clsHexImage!==void 0,hasError:({context:e})=>e._internalState.error!==null},actions:{assignErrorFromEvent:a({_internalState:e=>({...e.context._internalState,error:e.event.error})})}}).createMachine({id:"RestoreBackupDeviceAction",initial:"WaitForAppAndVersion",context:({input:e})=>({input:{backup:e.backup,unlockTimeout:e.unlockTimeout},intermediateValue:{requiredUserInteraction:c.None,step:s.Idle},_internalState:{error:null,currentApp:null,isDeviceOnboarded:!1,isMasterConsentGranted:!1,restoredLanguage:l(e.backup.languageId)?!1:void 0,restoredCLS:e.backup.clsHexImage!==void 0?!1:void 0,restoredApps:e.backup.installedApps.length>0?e.backup.installedApps.map(t=>({appName:t.appName,restoredApp:!1,restoredAppStorage:t.data!==void 0?!1:void 0})):void 0,appsToRestoreStorage:[]}}),states:{WaitForAppAndVersion:{entry:a({intermediateValue:e=>({...e.context.intermediateValue,step:s.WaitForAppAndVersion})}),invoke:{src:"waitForAppAndVersion",input:({context:e})=>({unlockTimeout:e.input.unlockTimeout}),onSnapshot:{actions:a({intermediateValue:e=>({...e.event.snapshot.context.intermediateValue,step:e.context.intermediateValue.step})})},onDone:{actions:a({_internalState:e=>e.event.output.caseOf({Left:t=>({...e.context._internalState,error:t}),Right:t=>({...e.context._internalState,currentApp:t.name})})}),target:"CheckIfDeviceIsOnDashboard"},onError:{actions:"assignErrorFromEvent",target:"Error"}}},CheckIfDeviceIsOnDashboard:{always:[{guard:"hasError",target:"Error"},{guard:"isDeviceOnDashboard",target:"GetIsOnboarded"},{target:"GoToDashboard"}]},GoToDashboard:{entry:a({intermediateValue:e=>({...e.context.intermediateValue,step:s.GoToDashboard})}),invoke:{src:"goToDashboard",input:({context:e})=>({unlockTimeout:e.input.unlockTimeout}),onSnapshot:{actions:a({intermediateValue:e=>({...e.event.snapshot.context.intermediateValue,step:e.context.intermediateValue.step})})},onDone:{actions:a({_internalState:e=>e.event.output.caseOf({Left:t=>({...e.context._internalState,error:t}),Right:()=>e.context._internalState})}),target:"CheckGoToDashboard"},onError:{actions:"assignErrorFromEvent",target:"Error"}}},CheckGoToDashboard:{always:[{guard:"hasError",target:"Error"},{target:"WaitForAppAndVersion"}]},GetIsOnboarded:{entry:a({intermediateValue:e=>({...e.context.intermediateValue,step:s.GetIsOnboarded})}),invoke:{src:"getIsOnboarded",onDone:{actions:a({_internalState:e=>e.event.output.caseOf({Left:t=>({...e.context._internalState,error:t}),Right:({isDeviceOnboarded:t})=>({...e.context._internalState,isDeviceOnboarded:t})})}),target:"CheckGetIsOnboarded"},onError:{actions:"assignErrorFromEvent",target:"Error"}}},CheckGetIsOnboarded:{always:[{guard:"hasError",target:"Error"},{guard:"isMasterConsentFeatureSupported",target:"RequestMasterConsent"},{target:"CheckBackedUpLanguage"}]},RequestMasterConsent:{entry:a({intermediateValue:e=>({...e.context.intermediateValue,step:s.RequestMasterConsent,requiredUserInteraction:c.GrantConsent})}),exit:a({intermediateValue:e=>({...e.context.intermediateValue,requiredUserInteraction:c.None})}),invoke:{src:"requestMasterConsent",input:({context:e})=>{const{backup:t}=e.input;return{languagePackConsentEnabled:!l(t.languageId),lockScreenPictureConsentEnabled:t.clsHexImage===void 0,appNumber:t.installedApps.length,appStorageNumber:t.installedApps.filter(u=>u.data===void 0).length}},onDone:[{guard:({event:e})=>e.output.isLeft(),actions:a({_internalState:({event:e,context:t})=>({...t._internalState,error:e.output.extract()})}),target:"Error"},{guard:({event:e})=>e.output.extract()===T.REJECTED,actions:a({_internalState:({context:e})=>({...e._internalState,isMasterConsentGranted:!1})}),target:"Success"},{actions:a({_internalState:({context:e})=>({...e._internalState,isMasterConsentGranted:!0})}),target:"CheckBackedUpLanguage"}],onError:{actions:"assignErrorFromEvent",target:"Error"}}},CheckBackedUpLanguage:{always:[{guard:"hasBackedUpNonEnglishLanguage",target:"InstallLanguagePackage"},{target:"CheckIfDeviceIsOnboarded"}]},InstallLanguagePackage:{entry:a({intermediateValue:e=>({...e.context.intermediateValue,step:s.InstallLanguagePackage})}),invoke:{src:"installLanguagePackage",input:({context:e})=>({unlockTimeout:e.input.unlockTimeout,language:g(e.input.backup.languageId)}),onSnapshot:{actions:a({intermediateValue:e=>({...e.event.snapshot.context.intermediateValue,step:e.context.intermediateValue.step})})},onDone:{actions:a({_internalState:e=>e.event.output.caseOf({Left:t=>d(t)?e.context._internalState:{...e.context._internalState,error:t},Right:()=>({...e.context._internalState,restoredLanguage:!0})})}),target:"CheckIfDeviceIsOnboarded"},onError:{actions:"assignErrorFromEvent",target:"Error"}}},CheckIfDeviceIsOnboarded:{always:[{guard:"hasError",target:"Error"},{guard:"isDeviceOnboarded",target:"CheckAppsToReinstall"},{target:"Success"}]},CheckAppsToReinstall:{always:[{guard:"hasAppsToReinstall",target:"InstallOrUpdateApps"},{target:"CheckIfDeviceSupportCustomLockScreenFeature"}]},InstallOrUpdateApps:{entry:a({intermediateValue:e=>({...e.context.intermediateValue,step:s.InstallOrUpdateApps})}),invoke:{src:"installOrUpdateApps",input:({context:e})=>({unlockTimeout:e.input.unlockTimeout,applications:e.input.backup.installedApps.map(t=>({name:t.appName})),allowMissingApplication:!0}),onSnapshot:{actions:a({intermediateValue:e=>({...e.event.snapshot.context.intermediateValue,step:e.context.intermediateValue.step})})},onDone:{actions:a({_internalState:e=>e.event.output.caseOf({Left:t=>d(t)?{...e.context._internalState,appsToRestoreStorage:[]}:{...e.context._internalState,error:t},Right:t=>{const u=new Set([...t.successfullyInstalled.map(p=>p.versionName),...t.alreadyInstalled]),{backup:A}=e.context.input;return{...e.context._internalState,restoredApps:e.context._internalState.restoredApps?.map(p=>({...p,restoredApp:u.has(p.appName)})),appsToRestoreStorage:A.installedApps.filter(p=>u.has(p.appName)&&p.data!==void 0)}}})}),target:"CheckInstallOrUpdateApps"},onError:{actions:"assignErrorFromEvent",target:"Error"}}},CheckInstallOrUpdateApps:{always:[{guard:"hasError",target:"Error"},{target:"RestoreAppsStorage"}]},RestoreAppsStorage:{entry:a({intermediateValue:e=>({...e.context.intermediateValue,step:s.RestoreAppsStorage})}),invoke:{src:"restoreAppsStorage",input:({context:e})=>({backupApps:e._internalState.appsToRestoreStorage,isMasterConsentGranted:e._internalState.isMasterConsentGranted,unlockTimeout:e.input.unlockTimeout}),onSnapshot:{actions:a({intermediateValue:e=>({...e.event.snapshot.context.intermediateValue,step:e.context.intermediateValue.step})})},onDone:{actions:a({_internalState:e=>e.event.output.caseOf({Left:t=>({...e.context._internalState,error:t}),Right:t=>({...e.context._internalState,restoredApps:F(e.context._internalState.restoredApps,t)})})}),target:"CheckRestoreAppsStorage"},onError:{actions:"assignErrorFromEvent",target:"Error"}}},CheckRestoreAppsStorage:{always:[{guard:"hasError",target:"Error"},{target:"CheckIfDeviceSupportCustomLockScreenFeature"}]},CheckIfDeviceSupportCustomLockScreenFeature:{always:[{guard:"isCustomLockScreenFeatureSupported",target:"CheckBackedUpCustomLockScreen"},{target:"Success"}]},CheckBackedUpCustomLockScreen:{always:[{guard:"hasBackedUpCustomLockScreen",target:"UploadCustomLockScreen"},{target:"Success"}]},UploadCustomLockScreen:{entry:a({intermediateValue:e=>({...e.context.intermediateValue,step:s.UploadCustomLockScreen})}),invoke:{src:"uploadCustomLockScreen",input:({context:e})=>({unlockTimeout:e.input.unlockTimeout,imageData:m(e.input.backup.clsHexImage)}),onSnapshot:{actions:a({intermediateValue:e=>{const{intermediateValue:t}=e.event.snapshot.context,u=e.context._internalState.isMasterConsentGranted&&(t.requiredUserInteraction===c.ConfirmLoadImage||t.requiredUserInteraction===c.ConfirmCommitImage);return{...t,...u?{requiredUserInteraction:c.None}:{},step:e.context.intermediateValue.step}}})},onDone:{actions:a({_internalState:e=>e.event.output.caseOf({Left:t=>d(t)?e.context._internalState:{...e.context._internalState,error:t},Right:()=>({...e.context._internalState,restoredCLS:!0})})}),target:"CheckUploadCustomLockScreen"},onError:{actions:"assignErrorFromEvent",target:"Error"}}},CheckUploadCustomLockScreen:{always:[{guard:"hasError",target:"Error"},{target:"Success"}]},Success:{type:"final"},Error:{type:"final"}},output:({context:e})=>e._internalState.error!==null?C(e._internalState.error):E({restoredLanguage:e._internalState.restoredLanguage,restoredCLS:e._internalState.restoredCLS,restoredApps:e._internalState.restoredApps})})}}export{Y as RestoreBackupDeviceAction};
2
2
  //# sourceMappingURL=RestoreBackupDeviceAction.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../src/api/device-action/OsUpdate/Restore/RestoreBackup/RestoreBackupDeviceAction.ts"],
4
- "sourcesContent": ["import {\n type ApplicationDependency,\n type DeviceActionStateMachine,\n hexaStringToBuffer,\n type InternalApi,\n isDashboardName,\n type Language,\n LANGUAGE_ID_TO_LANGUAGE,\n RefusedByUserDAError,\n type StateMachineTypes,\n UserInteractionRequired,\n XStateDeviceAction,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { assign, fromPromise, setup } from \"xstate\";\n\nimport { isMasterConsentSupported } from \"@api/command/OsUpdate/Restore/RequestMasterConsentCommand\";\nimport { isCustomLockScreenSupported } from \"@api/customLockScreenUtils/screenSpecs\";\nimport { type BackupApp } from \"@api/device-action/OsUpdate/Backup/types\";\nimport { type RestoreAppStorageResult } from \"@api/device-action/OsUpdate/Restore/RestoreAppsStorage/types\";\nimport { getIsOnboarded } from \"@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/GetIsOnboarded\";\nimport { installLanguagePackage } from \"@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/InstallLanguagePackage\";\nimport { installOrUpdateApps } from \"@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/InstallOrUpdateApps\";\nimport { requestMasterConsent } from \"@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/RequestMasterConsent\";\nimport { restoreAppsStorage } from \"@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/RestoreAppsStorage\";\nimport { uploadCustomLockScreenDevice } from \"@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/UploadCustomLockScreen\";\nimport {\n RequestMasterConsentResult,\n type RestoreAppResult,\n type RestoreBackupDAError,\n type RestoreBackupDAInput,\n type RestoreBackupDAIntermediateValue,\n type RestoreBackupDAInternalState,\n type RestoreBackupDAOutput,\n RestoreBackupSteps,\n} from \"@api/device-action/OsUpdate/Restore/RestoreBackup/types\";\nimport { goToDashboard } from \"@api/device-action/OsUpdate/Shared/Substeps/GoToDashboard\";\nimport { waitForAppAndVersion } from \"@api/device-action/OsUpdate/Shared/Substeps/WaitForAppAndVersion\";\n\nconst DEFAULT_LANGUAGE = \"english\";\n\nconst langIdToLanguage = (\n languageId: number | undefined,\n): Language | undefined =>\n languageId === undefined ? undefined : LANGUAGE_ID_TO_LANGUAGE[languageId];\n\nconst hasBackedUpNonEnglishLanguage = (languageId: number | undefined) => {\n const language = langIdToLanguage(languageId);\n return language !== undefined && language !== DEFAULT_LANGUAGE;\n};\n\nconst isRefusedByUser = (error: unknown): boolean =>\n error instanceof RefusedByUserDAError;\n\nconst mergeAppsStorageResults = (\n restoredApps: RestoreAppResult[] | undefined,\n appsStorageResults: RestoreAppStorageResult[],\n): RestoreAppResult[] | undefined =>\n restoredApps?.map((restoredApp) => {\n const appStorageResult = appsStorageResults.find(\n (storageResult) => storageResult.appName === restoredApp.appName,\n );\n return appStorageResult\n ? {\n ...restoredApp,\n restoredAppStorage: appStorageResult.restoredAppStorage,\n }\n : restoredApp;\n });\n\nexport class RestoreBackupDeviceAction extends XStateDeviceAction<\n RestoreBackupDAOutput,\n RestoreBackupDAInput,\n RestoreBackupDAError,\n RestoreBackupDAIntermediateValue,\n RestoreBackupDAInternalState\n> {\n protected override makeStateMachine(\n internalAPI: InternalApi,\n ): DeviceActionStateMachine<\n RestoreBackupDAOutput,\n RestoreBackupDAInput,\n RestoreBackupDAError,\n RestoreBackupDAIntermediateValue,\n RestoreBackupDAInternalState\n > {\n type types = StateMachineTypes<\n RestoreBackupDAOutput,\n RestoreBackupDAInput,\n RestoreBackupDAError,\n RestoreBackupDAIntermediateValue,\n RestoreBackupDAInternalState\n >;\n\n const { backup, unlockTimeout } = this.input;\n\n return setup({\n types: {\n input: {} as types[\"input\"],\n output: {} as types[\"output\"],\n context: {} as types[\"context\"],\n } as types,\n actors: {\n waitForAppAndVersion: waitForAppAndVersion(internalAPI, unlockTimeout),\n goToDashboard: goToDashboard(internalAPI, unlockTimeout),\n getIsOnboarded: fromPromise(getIsOnboarded(internalAPI)),\n requestMasterConsent: fromPromise(requestMasterConsent(internalAPI)),\n installLanguagePackage: installLanguagePackage(\n internalAPI,\n unlockTimeout,\n langIdToLanguage(backup.languageId) ?? DEFAULT_LANGUAGE,\n ),\n installOrUpdateApps: installOrUpdateApps(\n internalAPI,\n unlockTimeout,\n backup.installedApps.map(\n (app): ApplicationDependency => ({ name: app.appName }),\n ),\n ),\n restoreAppsStorage: restoreAppsStorage(internalAPI, unlockTimeout),\n uploadCustomLockScreen: uploadCustomLockScreenDevice(\n internalAPI,\n unlockTimeout,\n hexaStringToBuffer(backup.clsHexImage ?? \"\") ?? new Uint8Array(0),\n ),\n },\n guards: {\n isDeviceOnDashboard: ({ context }) =>\n isDashboardName(context._internalState.currentApp),\n isDeviceOnboarded: ({ context }) =>\n context._internalState.isDeviceOnboarded,\n isMasterConsentFeatureSupported: () =>\n isMasterConsentSupported(internalAPI.getDeviceModel().id),\n hasBackedUpNonEnglishLanguage: ({ context }) =>\n hasBackedUpNonEnglishLanguage(context.input.backup.languageId),\n hasAppsToReinstall: ({ context }) =>\n context.input.backup.installedApps.length > 0,\n isCustomLockScreenFeatureSupported: () =>\n isCustomLockScreenSupported(internalAPI.getDeviceModel().id),\n hasBackedUpCustomLockScreen: ({ context }) =>\n context.input.backup.clsHexImage !== undefined,\n hasError: ({ context }) => context._internalState.error !== null,\n },\n actions: {\n assignErrorFromEvent: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: _.event[\"error\"], // NOTE: should never happen\n }),\n }),\n },\n }).createMachine({\n id: \"RestoreBackupDeviceAction\",\n initial: \"WaitForAppAndVersion\",\n context: ({ input }) => ({\n input: {\n backup: input.backup,\n unlockTimeout: input.unlockTimeout,\n },\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: RestoreBackupSteps.Idle,\n },\n _internalState: {\n error: null,\n currentApp: null,\n isDeviceOnboarded: false,\n isMasterConsentGranted: false,\n restoredLanguage: hasBackedUpNonEnglishLanguage(\n input.backup.languageId,\n )\n ? false\n : undefined,\n restoredCLS:\n input.backup.clsHexImage !== undefined ? false : undefined,\n restoredApps:\n input.backup.installedApps.length > 0\n ? input.backup.installedApps.map(\n (app): RestoreAppResult => ({\n appName: app.appName,\n restoredApp: false,\n restoredAppStorage:\n app.data !== undefined ? false : undefined,\n }),\n )\n : undefined,\n appsToRestoreStorage: [],\n },\n }),\n states: {\n WaitForAppAndVersion: {\n entry: assign({\n intermediateValue: (_) => ({\n ..._.context.intermediateValue,\n step: RestoreBackupSteps.WaitForAppAndVersion,\n }),\n }),\n invoke: {\n src: \"waitForAppAndVersion\",\n input: ({ context }) => ({\n unlockTimeout: context.input.unlockTimeout,\n }),\n onSnapshot: {\n actions: assign({\n intermediateValue: (_) => ({\n ..._.event.snapshot.context.intermediateValue,\n step: _.context.intermediateValue.step,\n }),\n }),\n },\n onDone: {\n actions: assign({\n _internalState: (_) => {\n return _.event.output.caseOf<RestoreBackupDAInternalState>({\n Left: (error) => ({\n ..._.context._internalState,\n error,\n }),\n Right: (output) => ({\n ..._.context._internalState,\n currentApp: output.name,\n }),\n });\n },\n }),\n target: \"CheckIfDeviceIsOnDashboard\",\n },\n onError: {\n actions: \"assignErrorFromEvent\",\n target: \"Error\",\n },\n },\n },\n CheckIfDeviceIsOnDashboard: {\n always: [\n {\n guard: \"hasError\",\n target: \"Error\",\n },\n {\n guard: \"isDeviceOnDashboard\",\n target: \"GetIsOnboarded\",\n },\n {\n target: \"GoToDashboard\",\n },\n ],\n },\n GoToDashboard: {\n entry: assign({\n intermediateValue: (_) => ({\n ..._.context.intermediateValue,\n step: RestoreBackupSteps.GoToDashboard,\n }),\n }),\n invoke: {\n src: \"goToDashboard\",\n input: ({ context }) => ({\n unlockTimeout: context.input.unlockTimeout,\n }),\n onSnapshot: {\n actions: assign({\n intermediateValue: (_) => ({\n ..._.event.snapshot.context.intermediateValue,\n step: _.context.intermediateValue.step,\n }),\n }),\n },\n onDone: {\n actions: assign({\n _internalState: (_) => {\n return _.event.output.caseOf<RestoreBackupDAInternalState>({\n Left: (error) => ({\n ..._.context._internalState,\n error,\n }),\n Right: () => _.context._internalState,\n });\n },\n }),\n target: \"CheckGoToDashboard\",\n },\n onError: {\n actions: \"assignErrorFromEvent\",\n target: \"Error\",\n },\n },\n },\n CheckGoToDashboard: {\n always: [\n {\n guard: \"hasError\",\n target: \"Error\",\n },\n {\n target: \"WaitForAppAndVersion\",\n },\n ],\n },\n GetIsOnboarded: {\n entry: assign({\n intermediateValue: (_) => ({\n ..._.context.intermediateValue,\n step: RestoreBackupSteps.GetIsOnboarded,\n }),\n }),\n invoke: {\n src: \"getIsOnboarded\",\n onDone: {\n actions: assign({\n _internalState: (_) => {\n return _.event.output.caseOf<RestoreBackupDAInternalState>({\n Left: (error) => ({\n ..._.context._internalState,\n error,\n }),\n Right: ({ isDeviceOnboarded }) => ({\n ..._.context._internalState,\n isDeviceOnboarded,\n }),\n });\n },\n }),\n target: \"CheckGetIsOnboarded\",\n },\n onError: {\n actions: \"assignErrorFromEvent\",\n target: \"Error\",\n },\n },\n },\n CheckGetIsOnboarded: {\n always: [\n {\n guard: \"hasError\",\n target: \"Error\",\n },\n {\n guard: \"isMasterConsentFeatureSupported\",\n target: \"RequestMasterConsent\",\n },\n {\n target: \"CheckBackedUpLanguage\",\n },\n ],\n },\n RequestMasterConsent: {\n entry: assign({\n intermediateValue: (_) => ({\n ..._.context.intermediateValue,\n step: RestoreBackupSteps.RequestMasterConsent,\n requiredUserInteraction: UserInteractionRequired.GrantConsent,\n }),\n }),\n exit: assign({\n intermediateValue: (_) => ({\n ..._.context.intermediateValue,\n requiredUserInteraction: UserInteractionRequired.None,\n }),\n }),\n invoke: {\n src: \"requestMasterConsent\",\n input: ({ context }) => {\n const { backup: contextBackup } = context.input;\n return {\n languagePackConsentEnabled: !hasBackedUpNonEnglishLanguage(\n contextBackup.languageId,\n ),\n lockScreenPictureConsentEnabled:\n contextBackup.clsHexImage === undefined,\n appNumber: contextBackup.installedApps.length,\n appStorageNumber: contextBackup.installedApps.filter(\n (app) => app.data === undefined,\n ).length,\n };\n },\n onDone: [\n {\n guard: ({ event }) => event.output.isLeft(),\n actions: assign({\n _internalState: ({ event, context }) => ({\n ...context._internalState,\n error: event.output.extract() as RestoreBackupDAError,\n }),\n }),\n target: \"Error\",\n },\n {\n guard: ({ event }) =>\n event.output.extract() ===\n RequestMasterConsentResult.REJECTED,\n actions: assign({\n _internalState: ({ context }) => ({\n ...context._internalState,\n isMasterConsentGranted: false,\n }),\n }),\n target: \"Success\",\n },\n {\n actions: assign({\n _internalState: ({ context }) => ({\n ...context._internalState,\n isMasterConsentGranted: true,\n }),\n }),\n target: \"CheckBackedUpLanguage\",\n },\n ],\n onError: {\n actions: \"assignErrorFromEvent\",\n target: \"Error\",\n },\n },\n },\n CheckBackedUpLanguage: {\n always: [\n {\n guard: \"hasBackedUpNonEnglishLanguage\",\n target: \"InstallLanguagePackage\",\n },\n {\n target: \"CheckIfDeviceIsOnboarded\",\n },\n ],\n },\n InstallLanguagePackage: {\n entry: assign({\n intermediateValue: (_) => ({\n ..._.context.intermediateValue,\n step: RestoreBackupSteps.InstallLanguagePackage,\n }),\n }),\n invoke: {\n src: \"installLanguagePackage\",\n input: ({ context }) => ({\n unlockTimeout: context.input.unlockTimeout,\n language: langIdToLanguage(context.input.backup.languageId)!,\n }),\n onSnapshot: {\n actions: assign({\n intermediateValue: (_) => ({\n ..._.event.snapshot.context.intermediateValue,\n step: _.context.intermediateValue.step,\n }),\n }),\n },\n onDone: {\n actions: assign({\n _internalState: (_) => {\n return _.event.output.caseOf<RestoreBackupDAInternalState>({\n Left: (error) =>\n isRefusedByUser(error)\n ? _.context._internalState\n : { ..._.context._internalState, error },\n Right: () => ({\n ..._.context._internalState,\n restoredLanguage: true,\n }),\n });\n },\n }),\n target: \"CheckIfDeviceIsOnboarded\",\n },\n onError: {\n actions: \"assignErrorFromEvent\",\n target: \"Error\",\n },\n },\n },\n CheckIfDeviceIsOnboarded: {\n always: [\n {\n guard: \"hasError\",\n target: \"Error\",\n },\n {\n guard: \"isDeviceOnboarded\",\n target: \"CheckAppsToReinstall\",\n },\n {\n target: \"Success\",\n },\n ],\n },\n CheckAppsToReinstall: {\n always: [\n {\n guard: \"hasAppsToReinstall\",\n target: \"InstallOrUpdateApps\",\n },\n {\n target: \"CheckIfDeviceSupportCustomLockScreenFeature\",\n },\n ],\n },\n InstallOrUpdateApps: {\n entry: assign({\n intermediateValue: (_) => ({\n ..._.context.intermediateValue,\n step: RestoreBackupSteps.InstallOrUpdateApps,\n }),\n }),\n invoke: {\n src: \"installOrUpdateApps\",\n input: ({ context }) => ({\n unlockTimeout: context.input.unlockTimeout,\n applications: context.input.backup.installedApps.map(\n (app): ApplicationDependency => ({ name: app.appName }),\n ),\n allowMissingApplication: true,\n }),\n onSnapshot: {\n actions: assign({\n intermediateValue: (_) => ({\n ..._.event.snapshot.context.intermediateValue,\n step: _.context.intermediateValue.step,\n }),\n }),\n },\n onDone: {\n actions: assign({\n _internalState: (_) => {\n return _.event.output.caseOf<RestoreBackupDAInternalState>({\n Left: (error) =>\n isRefusedByUser(error)\n ? {\n ..._.context._internalState,\n appsToRestoreStorage: [],\n }\n : { ..._.context._internalState, error },\n Right: (output) => {\n const installedAppNames = new Set([\n ...output.successfullyInstalled.map(\n (installedApp) => installedApp.versionName,\n ),\n ...output.alreadyInstalled,\n ]);\n const { backup: contextBackup } = _.context.input;\n return {\n ..._.context._internalState,\n restoredApps:\n _.context._internalState.restoredApps?.map(\n (result): RestoreAppResult => ({\n ...result,\n restoredApp: installedAppNames.has(\n result.appName,\n ),\n }),\n ),\n appsToRestoreStorage:\n contextBackup.installedApps.filter(\n (app: BackupApp) =>\n installedAppNames.has(app.appName) &&\n app.data !== undefined,\n ),\n };\n },\n });\n },\n }),\n target: \"CheckInstallOrUpdateApps\",\n },\n onError: {\n actions: \"assignErrorFromEvent\",\n target: \"Error\",\n },\n },\n },\n CheckInstallOrUpdateApps: {\n always: [\n {\n guard: \"hasError\",\n target: \"Error\",\n },\n {\n target: \"RestoreAppsStorage\",\n },\n ],\n },\n RestoreAppsStorage: {\n entry: assign({\n intermediateValue: (_) => ({\n ..._.context.intermediateValue,\n step: RestoreBackupSteps.RestoreAppsStorage,\n }),\n }),\n invoke: {\n src: \"restoreAppsStorage\",\n input: ({ context }) => ({\n backupApps: context._internalState.appsToRestoreStorage,\n isMasterConsentGranted:\n context._internalState.isMasterConsentGranted,\n unlockTimeout: context.input.unlockTimeout,\n }),\n onSnapshot: {\n actions: assign({\n intermediateValue: (_) => ({\n ..._.event.snapshot.context.intermediateValue,\n step: _.context.intermediateValue.step,\n }),\n }),\n },\n onDone: {\n actions: assign({\n _internalState: (_) => {\n return _.event.output.caseOf<RestoreBackupDAInternalState>({\n Left: (error) => ({\n ..._.context._internalState,\n error,\n }),\n Right: (appsStorageResults) => ({\n ..._.context._internalState,\n restoredApps: mergeAppsStorageResults(\n _.context._internalState.restoredApps,\n appsStorageResults,\n ),\n }),\n });\n },\n }),\n target: \"CheckRestoreAppsStorage\",\n },\n onError: {\n actions: \"assignErrorFromEvent\",\n target: \"Error\",\n },\n },\n },\n CheckRestoreAppsStorage: {\n always: [\n {\n guard: \"hasError\",\n target: \"Error\",\n },\n {\n target: \"CheckIfDeviceSupportCustomLockScreenFeature\",\n },\n ],\n },\n CheckIfDeviceSupportCustomLockScreenFeature: {\n always: [\n {\n guard: \"isCustomLockScreenFeatureSupported\",\n target: \"CheckBackedUpCustomLockScreen\",\n },\n {\n target: \"Success\",\n },\n ],\n },\n CheckBackedUpCustomLockScreen: {\n always: [\n {\n guard: \"hasBackedUpCustomLockScreen\",\n target: \"UploadCustomLockScreen\",\n },\n {\n target: \"Success\",\n },\n ],\n },\n UploadCustomLockScreen: {\n entry: assign({\n intermediateValue: (_) => ({\n ..._.context.intermediateValue,\n step: RestoreBackupSteps.UploadCustomLockScreen,\n }),\n }),\n invoke: {\n src: \"uploadCustomLockScreen\",\n input: ({ context }) => ({\n unlockTimeout: context.input.unlockTimeout,\n imageData: hexaStringToBuffer(context.input.backup.clsHexImage!)!,\n }),\n onSnapshot: {\n actions: assign({\n intermediateValue: (_) => ({\n ..._.event.snapshot.context.intermediateValue,\n step: _.context.intermediateValue.step,\n }),\n }),\n },\n onDone: {\n actions: assign({\n _internalState: (_) => {\n return _.event.output.caseOf<RestoreBackupDAInternalState>({\n Left: (error) =>\n isRefusedByUser(error)\n ? _.context._internalState\n : { ..._.context._internalState, error },\n Right: () => ({\n ..._.context._internalState,\n restoredCLS: true,\n }),\n });\n },\n }),\n target: \"CheckUploadCustomLockScreen\",\n },\n onError: {\n actions: \"assignErrorFromEvent\",\n target: \"Error\",\n },\n },\n },\n CheckUploadCustomLockScreen: {\n always: [\n {\n guard: \"hasError\",\n target: \"Error\",\n },\n {\n target: \"Success\",\n },\n ],\n },\n Success: {\n type: \"final\",\n },\n Error: {\n type: \"final\",\n },\n },\n output: ({ context }) => {\n if (context._internalState.error !== null) {\n return Left(context._internalState.error);\n }\n return Right({\n restoredLanguage: context._internalState.restoredLanguage,\n restoredCLS: context._internalState.restoredCLS,\n restoredApps: context._internalState.restoredApps,\n });\n },\n });\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["hexaStringToBuffer", "isDashboardName", "LANGUAGE_ID_TO_LANGUAGE", "RefusedByUserDAError", "UserInteractionRequired", "XStateDeviceAction", "Left", "Right", "assign", "fromPromise", "setup", "isMasterConsentSupported", "isCustomLockScreenSupported", "getIsOnboarded", "installLanguagePackage", "installOrUpdateApps", "requestMasterConsent", "restoreAppsStorage", "uploadCustomLockScreenDevice", "RequestMasterConsentResult", "RestoreBackupSteps", "goToDashboard", "waitForAppAndVersion", "DEFAULT_LANGUAGE", "langIdToLanguage", "languageId", "hasBackedUpNonEnglishLanguage", "language", "isRefusedByUser", "error", "mergeAppsStorageResults", "restoredApps", "appsStorageResults", "restoredApp", "appStorageResult", "storageResult", "RestoreBackupDeviceAction", "internalAPI", "backup", "unlockTimeout", "app", "context", "_", "input", "output", "isDeviceOnboarded", "contextBackup", "event", "installedAppNames", "installedApp", "result"]
4
+ "sourcesContent": ["import {\n type ApplicationDependency,\n type DeviceActionStateMachine,\n hexaStringToBuffer,\n type InternalApi,\n isDashboardName,\n type Language,\n LANGUAGE_ID_TO_LANGUAGE,\n RefusedByUserDAError,\n type StateMachineTypes,\n UserInteractionRequired,\n XStateDeviceAction,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { assign, fromPromise, setup } from \"xstate\";\n\nimport { isMasterConsentSupported } from \"@api/command/OsUpdate/Restore/RequestMasterConsentCommand\";\nimport { isCustomLockScreenSupported } from \"@api/customLockScreenUtils/screenSpecs\";\nimport { type BackupApp } from \"@api/device-action/OsUpdate/Backup/types\";\nimport { type RestoreAppStorageResult } from \"@api/device-action/OsUpdate/Restore/RestoreAppsStorage/types\";\nimport { getIsOnboarded } from \"@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/GetIsOnboarded\";\nimport { installLanguagePackage } from \"@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/InstallLanguagePackage\";\nimport { installOrUpdateApps } from \"@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/InstallOrUpdateApps\";\nimport { requestMasterConsent } from \"@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/RequestMasterConsent\";\nimport { restoreAppsStorage } from \"@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/RestoreAppsStorage\";\nimport { uploadCustomLockScreenDevice } from \"@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/UploadCustomLockScreen\";\nimport {\n RequestMasterConsentResult,\n type RestoreAppResult,\n type RestoreBackupDAError,\n type RestoreBackupDAInput,\n type RestoreBackupDAIntermediateValue,\n type RestoreBackupDAInternalState,\n type RestoreBackupDAOutput,\n RestoreBackupSteps,\n} from \"@api/device-action/OsUpdate/Restore/RestoreBackup/types\";\nimport { goToDashboard } from \"@api/device-action/OsUpdate/Shared/Substeps/GoToDashboard\";\nimport { waitForAppAndVersion } from \"@api/device-action/OsUpdate/Shared/Substeps/WaitForAppAndVersion\";\n\nconst DEFAULT_LANGUAGE = \"english\";\n\nconst langIdToLanguage = (\n languageId: number | undefined,\n): Language | undefined =>\n languageId === undefined ? undefined : LANGUAGE_ID_TO_LANGUAGE[languageId];\n\nconst hasBackedUpNonEnglishLanguage = (languageId: number | undefined) => {\n const language = langIdToLanguage(languageId);\n return language !== undefined && language !== DEFAULT_LANGUAGE;\n};\n\nconst isRefusedByUser = (error: unknown): boolean =>\n error instanceof RefusedByUserDAError;\n\nconst mergeAppsStorageResults = (\n restoredApps: RestoreAppResult[] | undefined,\n appsStorageResults: RestoreAppStorageResult[],\n): RestoreAppResult[] | undefined =>\n restoredApps?.map((restoredApp) => {\n const appStorageResult = appsStorageResults.find(\n (storageResult) => storageResult.appName === restoredApp.appName,\n );\n return appStorageResult\n ? {\n ...restoredApp,\n restoredAppStorage: appStorageResult.restoredAppStorage,\n }\n : restoredApp;\n });\n\nexport class RestoreBackupDeviceAction extends XStateDeviceAction<\n RestoreBackupDAOutput,\n RestoreBackupDAInput,\n RestoreBackupDAError,\n RestoreBackupDAIntermediateValue,\n RestoreBackupDAInternalState\n> {\n protected override makeStateMachine(\n internalAPI: InternalApi,\n ): DeviceActionStateMachine<\n RestoreBackupDAOutput,\n RestoreBackupDAInput,\n RestoreBackupDAError,\n RestoreBackupDAIntermediateValue,\n RestoreBackupDAInternalState\n > {\n type types = StateMachineTypes<\n RestoreBackupDAOutput,\n RestoreBackupDAInput,\n RestoreBackupDAError,\n RestoreBackupDAIntermediateValue,\n RestoreBackupDAInternalState\n >;\n\n const { backup, unlockTimeout } = this.input;\n\n return setup({\n types: {\n input: {} as types[\"input\"],\n output: {} as types[\"output\"],\n context: {} as types[\"context\"],\n } as types,\n actors: {\n waitForAppAndVersion: waitForAppAndVersion(internalAPI, unlockTimeout),\n goToDashboard: goToDashboard(internalAPI, unlockTimeout),\n getIsOnboarded: fromPromise(getIsOnboarded(internalAPI)),\n requestMasterConsent: fromPromise(requestMasterConsent(internalAPI)),\n installLanguagePackage: installLanguagePackage(\n internalAPI,\n unlockTimeout,\n langIdToLanguage(backup.languageId) ?? DEFAULT_LANGUAGE,\n ),\n installOrUpdateApps: installOrUpdateApps(\n internalAPI,\n unlockTimeout,\n backup.installedApps.map(\n (app): ApplicationDependency => ({ name: app.appName }),\n ),\n ),\n restoreAppsStorage: restoreAppsStorage(internalAPI, unlockTimeout),\n uploadCustomLockScreen: uploadCustomLockScreenDevice(\n internalAPI,\n unlockTimeout,\n hexaStringToBuffer(backup.clsHexImage ?? \"\") ?? new Uint8Array(0),\n ),\n },\n guards: {\n isDeviceOnDashboard: ({ context }) =>\n isDashboardName(context._internalState.currentApp),\n isDeviceOnboarded: ({ context }) =>\n context._internalState.isDeviceOnboarded,\n isMasterConsentFeatureSupported: () =>\n isMasterConsentSupported(internalAPI.getDeviceModel().id),\n hasBackedUpNonEnglishLanguage: ({ context }) =>\n hasBackedUpNonEnglishLanguage(context.input.backup.languageId),\n hasAppsToReinstall: ({ context }) =>\n context.input.backup.installedApps.length > 0,\n isCustomLockScreenFeatureSupported: () =>\n isCustomLockScreenSupported(internalAPI.getDeviceModel().id),\n hasBackedUpCustomLockScreen: ({ context }) =>\n context.input.backup.clsHexImage !== undefined,\n hasError: ({ context }) => context._internalState.error !== null,\n },\n actions: {\n assignErrorFromEvent: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: _.event[\"error\"], // NOTE: should never happen\n }),\n }),\n },\n }).createMachine({\n id: \"RestoreBackupDeviceAction\",\n initial: \"WaitForAppAndVersion\",\n context: ({ input }) => ({\n input: {\n backup: input.backup,\n unlockTimeout: input.unlockTimeout,\n },\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: RestoreBackupSteps.Idle,\n },\n _internalState: {\n error: null,\n currentApp: null,\n isDeviceOnboarded: false,\n isMasterConsentGranted: false,\n restoredLanguage: hasBackedUpNonEnglishLanguage(\n input.backup.languageId,\n )\n ? false\n : undefined,\n restoredCLS:\n input.backup.clsHexImage !== undefined ? false : undefined,\n restoredApps:\n input.backup.installedApps.length > 0\n ? input.backup.installedApps.map(\n (app): RestoreAppResult => ({\n appName: app.appName,\n restoredApp: false,\n restoredAppStorage:\n app.data !== undefined ? false : undefined,\n }),\n )\n : undefined,\n appsToRestoreStorage: [],\n },\n }),\n states: {\n WaitForAppAndVersion: {\n entry: assign({\n intermediateValue: (_) => ({\n ..._.context.intermediateValue,\n step: RestoreBackupSteps.WaitForAppAndVersion,\n }),\n }),\n invoke: {\n src: \"waitForAppAndVersion\",\n input: ({ context }) => ({\n unlockTimeout: context.input.unlockTimeout,\n }),\n onSnapshot: {\n actions: assign({\n intermediateValue: (_) => ({\n ..._.event.snapshot.context.intermediateValue,\n step: _.context.intermediateValue.step,\n }),\n }),\n },\n onDone: {\n actions: assign({\n _internalState: (_) => {\n return _.event.output.caseOf<RestoreBackupDAInternalState>({\n Left: (error) => ({\n ..._.context._internalState,\n error,\n }),\n Right: (output) => ({\n ..._.context._internalState,\n currentApp: output.name,\n }),\n });\n },\n }),\n target: \"CheckIfDeviceIsOnDashboard\",\n },\n onError: {\n actions: \"assignErrorFromEvent\",\n target: \"Error\",\n },\n },\n },\n CheckIfDeviceIsOnDashboard: {\n always: [\n {\n guard: \"hasError\",\n target: \"Error\",\n },\n {\n guard: \"isDeviceOnDashboard\",\n target: \"GetIsOnboarded\",\n },\n {\n target: \"GoToDashboard\",\n },\n ],\n },\n GoToDashboard: {\n entry: assign({\n intermediateValue: (_) => ({\n ..._.context.intermediateValue,\n step: RestoreBackupSteps.GoToDashboard,\n }),\n }),\n invoke: {\n src: \"goToDashboard\",\n input: ({ context }) => ({\n unlockTimeout: context.input.unlockTimeout,\n }),\n onSnapshot: {\n actions: assign({\n intermediateValue: (_) => ({\n ..._.event.snapshot.context.intermediateValue,\n step: _.context.intermediateValue.step,\n }),\n }),\n },\n onDone: {\n actions: assign({\n _internalState: (_) => {\n return _.event.output.caseOf<RestoreBackupDAInternalState>({\n Left: (error) => ({\n ..._.context._internalState,\n error,\n }),\n Right: () => _.context._internalState,\n });\n },\n }),\n target: \"CheckGoToDashboard\",\n },\n onError: {\n actions: \"assignErrorFromEvent\",\n target: \"Error\",\n },\n },\n },\n CheckGoToDashboard: {\n always: [\n {\n guard: \"hasError\",\n target: \"Error\",\n },\n {\n target: \"WaitForAppAndVersion\",\n },\n ],\n },\n GetIsOnboarded: {\n entry: assign({\n intermediateValue: (_) => ({\n ..._.context.intermediateValue,\n step: RestoreBackupSteps.GetIsOnboarded,\n }),\n }),\n invoke: {\n src: \"getIsOnboarded\",\n onDone: {\n actions: assign({\n _internalState: (_) => {\n return _.event.output.caseOf<RestoreBackupDAInternalState>({\n Left: (error) => ({\n ..._.context._internalState,\n error,\n }),\n Right: ({ isDeviceOnboarded }) => ({\n ..._.context._internalState,\n isDeviceOnboarded,\n }),\n });\n },\n }),\n target: \"CheckGetIsOnboarded\",\n },\n onError: {\n actions: \"assignErrorFromEvent\",\n target: \"Error\",\n },\n },\n },\n CheckGetIsOnboarded: {\n always: [\n {\n guard: \"hasError\",\n target: \"Error\",\n },\n {\n guard: \"isMasterConsentFeatureSupported\",\n target: \"RequestMasterConsent\",\n },\n {\n target: \"CheckBackedUpLanguage\",\n },\n ],\n },\n RequestMasterConsent: {\n entry: assign({\n intermediateValue: (_) => ({\n ..._.context.intermediateValue,\n step: RestoreBackupSteps.RequestMasterConsent,\n requiredUserInteraction: UserInteractionRequired.GrantConsent,\n }),\n }),\n exit: assign({\n intermediateValue: (_) => ({\n ..._.context.intermediateValue,\n requiredUserInteraction: UserInteractionRequired.None,\n }),\n }),\n invoke: {\n src: \"requestMasterConsent\",\n input: ({ context }) => {\n const { backup: contextBackup } = context.input;\n return {\n languagePackConsentEnabled: !hasBackedUpNonEnglishLanguage(\n contextBackup.languageId,\n ),\n lockScreenPictureConsentEnabled:\n contextBackup.clsHexImage === undefined,\n appNumber: contextBackup.installedApps.length,\n appStorageNumber: contextBackup.installedApps.filter(\n (app) => app.data === undefined,\n ).length,\n };\n },\n onDone: [\n {\n guard: ({ event }) => event.output.isLeft(),\n actions: assign({\n _internalState: ({ event, context }) => ({\n ...context._internalState,\n error: event.output.extract() as RestoreBackupDAError,\n }),\n }),\n target: \"Error\",\n },\n {\n guard: ({ event }) =>\n event.output.extract() ===\n RequestMasterConsentResult.REJECTED,\n actions: assign({\n _internalState: ({ context }) => ({\n ...context._internalState,\n isMasterConsentGranted: false,\n }),\n }),\n target: \"Success\",\n },\n {\n actions: assign({\n _internalState: ({ context }) => ({\n ...context._internalState,\n isMasterConsentGranted: true,\n }),\n }),\n target: \"CheckBackedUpLanguage\",\n },\n ],\n onError: {\n actions: \"assignErrorFromEvent\",\n target: \"Error\",\n },\n },\n },\n CheckBackedUpLanguage: {\n always: [\n {\n guard: \"hasBackedUpNonEnglishLanguage\",\n target: \"InstallLanguagePackage\",\n },\n {\n target: \"CheckIfDeviceIsOnboarded\",\n },\n ],\n },\n InstallLanguagePackage: {\n entry: assign({\n intermediateValue: (_) => ({\n ..._.context.intermediateValue,\n step: RestoreBackupSteps.InstallLanguagePackage,\n }),\n }),\n invoke: {\n src: \"installLanguagePackage\",\n input: ({ context }) => ({\n unlockTimeout: context.input.unlockTimeout,\n language: langIdToLanguage(context.input.backup.languageId)!,\n }),\n onSnapshot: {\n actions: assign({\n intermediateValue: (_) => ({\n ..._.event.snapshot.context.intermediateValue,\n step: _.context.intermediateValue.step,\n }),\n }),\n },\n onDone: {\n actions: assign({\n _internalState: (_) => {\n return _.event.output.caseOf<RestoreBackupDAInternalState>({\n Left: (error) =>\n isRefusedByUser(error)\n ? _.context._internalState\n : { ..._.context._internalState, error },\n Right: () => ({\n ..._.context._internalState,\n restoredLanguage: true,\n }),\n });\n },\n }),\n target: \"CheckIfDeviceIsOnboarded\",\n },\n onError: {\n actions: \"assignErrorFromEvent\",\n target: \"Error\",\n },\n },\n },\n CheckIfDeviceIsOnboarded: {\n always: [\n {\n guard: \"hasError\",\n target: \"Error\",\n },\n {\n guard: \"isDeviceOnboarded\",\n target: \"CheckAppsToReinstall\",\n },\n {\n target: \"Success\",\n },\n ],\n },\n CheckAppsToReinstall: {\n always: [\n {\n guard: \"hasAppsToReinstall\",\n target: \"InstallOrUpdateApps\",\n },\n {\n target: \"CheckIfDeviceSupportCustomLockScreenFeature\",\n },\n ],\n },\n InstallOrUpdateApps: {\n entry: assign({\n intermediateValue: (_) => ({\n ..._.context.intermediateValue,\n step: RestoreBackupSteps.InstallOrUpdateApps,\n }),\n }),\n invoke: {\n src: \"installOrUpdateApps\",\n input: ({ context }) => ({\n unlockTimeout: context.input.unlockTimeout,\n applications: context.input.backup.installedApps.map(\n (app): ApplicationDependency => ({ name: app.appName }),\n ),\n allowMissingApplication: true,\n }),\n onSnapshot: {\n actions: assign({\n intermediateValue: (_) => ({\n ..._.event.snapshot.context.intermediateValue,\n step: _.context.intermediateValue.step,\n }),\n }),\n },\n onDone: {\n actions: assign({\n _internalState: (_) => {\n return _.event.output.caseOf<RestoreBackupDAInternalState>({\n Left: (error) =>\n isRefusedByUser(error)\n ? {\n ..._.context._internalState,\n appsToRestoreStorage: [],\n }\n : { ..._.context._internalState, error },\n Right: (output) => {\n const installedAppNames = new Set([\n ...output.successfullyInstalled.map(\n (installedApp) => installedApp.versionName,\n ),\n ...output.alreadyInstalled,\n ]);\n const { backup: contextBackup } = _.context.input;\n return {\n ..._.context._internalState,\n restoredApps:\n _.context._internalState.restoredApps?.map(\n (result): RestoreAppResult => ({\n ...result,\n restoredApp: installedAppNames.has(\n result.appName,\n ),\n }),\n ),\n appsToRestoreStorage:\n contextBackup.installedApps.filter(\n (app: BackupApp) =>\n installedAppNames.has(app.appName) &&\n app.data !== undefined,\n ),\n };\n },\n });\n },\n }),\n target: \"CheckInstallOrUpdateApps\",\n },\n onError: {\n actions: \"assignErrorFromEvent\",\n target: \"Error\",\n },\n },\n },\n CheckInstallOrUpdateApps: {\n always: [\n {\n guard: \"hasError\",\n target: \"Error\",\n },\n {\n target: \"RestoreAppsStorage\",\n },\n ],\n },\n RestoreAppsStorage: {\n entry: assign({\n intermediateValue: (_) => ({\n ..._.context.intermediateValue,\n step: RestoreBackupSteps.RestoreAppsStorage,\n }),\n }),\n invoke: {\n src: \"restoreAppsStorage\",\n input: ({ context }) => ({\n backupApps: context._internalState.appsToRestoreStorage,\n isMasterConsentGranted:\n context._internalState.isMasterConsentGranted,\n unlockTimeout: context.input.unlockTimeout,\n }),\n onSnapshot: {\n actions: assign({\n intermediateValue: (_) => ({\n ..._.event.snapshot.context.intermediateValue,\n step: _.context.intermediateValue.step,\n }),\n }),\n },\n onDone: {\n actions: assign({\n _internalState: (_) => {\n return _.event.output.caseOf<RestoreBackupDAInternalState>({\n Left: (error) => ({\n ..._.context._internalState,\n error,\n }),\n Right: (appsStorageResults) => ({\n ..._.context._internalState,\n restoredApps: mergeAppsStorageResults(\n _.context._internalState.restoredApps,\n appsStorageResults,\n ),\n }),\n });\n },\n }),\n target: \"CheckRestoreAppsStorage\",\n },\n onError: {\n actions: \"assignErrorFromEvent\",\n target: \"Error\",\n },\n },\n },\n CheckRestoreAppsStorage: {\n always: [\n {\n guard: \"hasError\",\n target: \"Error\",\n },\n {\n target: \"CheckIfDeviceSupportCustomLockScreenFeature\",\n },\n ],\n },\n CheckIfDeviceSupportCustomLockScreenFeature: {\n always: [\n {\n guard: \"isCustomLockScreenFeatureSupported\",\n target: \"CheckBackedUpCustomLockScreen\",\n },\n {\n target: \"Success\",\n },\n ],\n },\n CheckBackedUpCustomLockScreen: {\n always: [\n {\n guard: \"hasBackedUpCustomLockScreen\",\n target: \"UploadCustomLockScreen\",\n },\n {\n target: \"Success\",\n },\n ],\n },\n UploadCustomLockScreen: {\n entry: assign({\n intermediateValue: (_) => ({\n ..._.context.intermediateValue,\n step: RestoreBackupSteps.UploadCustomLockScreen,\n }),\n }),\n invoke: {\n src: \"uploadCustomLockScreen\",\n input: ({ context }) => ({\n unlockTimeout: context.input.unlockTimeout,\n imageData: hexaStringToBuffer(context.input.backup.clsHexImage!)!,\n }),\n onSnapshot: {\n actions: assign({\n intermediateValue: (_) => {\n const { intermediateValue } = _.event.snapshot.context;\n // With master consent granted, the user already approved the restore:\n // do not forward the hardcoded confirm load/commit image\n // interactions, but keep any other required interaction.\n const shouldHideInteraction =\n _.context._internalState.isMasterConsentGranted &&\n (intermediateValue.requiredUserInteraction ===\n UserInteractionRequired.ConfirmLoadImage ||\n intermediateValue.requiredUserInteraction ===\n UserInteractionRequired.ConfirmCommitImage);\n return {\n ...intermediateValue,\n ...(shouldHideInteraction\n ? {\n requiredUserInteraction: UserInteractionRequired.None,\n }\n : {}),\n step: _.context.intermediateValue.step,\n };\n },\n }),\n },\n onDone: {\n actions: assign({\n _internalState: (_) => {\n return _.event.output.caseOf<RestoreBackupDAInternalState>({\n Left: (error) =>\n isRefusedByUser(error)\n ? _.context._internalState\n : { ..._.context._internalState, error },\n Right: () => ({\n ..._.context._internalState,\n restoredCLS: true,\n }),\n });\n },\n }),\n target: \"CheckUploadCustomLockScreen\",\n },\n onError: {\n actions: \"assignErrorFromEvent\",\n target: \"Error\",\n },\n },\n },\n CheckUploadCustomLockScreen: {\n always: [\n {\n guard: \"hasError\",\n target: \"Error\",\n },\n {\n target: \"Success\",\n },\n ],\n },\n Success: {\n type: \"final\",\n },\n Error: {\n type: \"final\",\n },\n },\n output: ({ context }) => {\n if (context._internalState.error !== null) {\n return Left(context._internalState.error);\n }\n return Right({\n restoredLanguage: context._internalState.restoredLanguage,\n restoredCLS: context._internalState.restoredCLS,\n restoredApps: context._internalState.restoredApps,\n });\n },\n });\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["hexaStringToBuffer", "isDashboardName", "LANGUAGE_ID_TO_LANGUAGE", "RefusedByUserDAError", "UserInteractionRequired", "XStateDeviceAction", "Left", "Right", "assign", "fromPromise", "setup", "isMasterConsentSupported", "isCustomLockScreenSupported", "getIsOnboarded", "installLanguagePackage", "installOrUpdateApps", "requestMasterConsent", "restoreAppsStorage", "uploadCustomLockScreenDevice", "RequestMasterConsentResult", "RestoreBackupSteps", "goToDashboard", "waitForAppAndVersion", "DEFAULT_LANGUAGE", "langIdToLanguage", "languageId", "hasBackedUpNonEnglishLanguage", "language", "isRefusedByUser", "error", "mergeAppsStorageResults", "restoredApps", "appsStorageResults", "restoredApp", "appStorageResult", "storageResult", "RestoreBackupDeviceAction", "internalAPI", "backup", "unlockTimeout", "app", "context", "_", "input", "output", "isDeviceOnboarded", "contextBackup", "event", "installedAppNames", "installedApp", "result", "intermediateValue", "shouldHideInteraction"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{DeviceActionStatus as E,DeviceModelId as A,RefusedByUserDAError as O,UnknownDAError as I,UserInteractionRequired as m}from"@ledgerhq/device-management-kit";import{Left as S,Right as u}from"purify-ts";import{assign as W,createMachine as T}from"xstate";import{makeDeviceActionInternalApiMock as a}from"../../../../device-action/__test-utils__/makeInternalApi";import{testDeviceActionStates as i}from"../../../../device-action/__test-utils__/testDeviceActionStates";import{RestoreBackupDeviceAction as G}from"../../../../device-action/OsUpdate/Restore/RestoreBackup/RestoreBackupDeviceAction";import{GetIsOnboardedError as x,RequestMasterConsentError as M}from"../../../../device-action/OsUpdate/Restore/RestoreBackup/RestoreBackupDeviceActionErrors";import{getIsOnboarded as P}from"../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/GetIsOnboarded";import{installLanguagePackage as q}from"../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/InstallLanguagePackage";import{installOrUpdateApps as N}from"../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/InstallOrUpdateApps";import{requestMasterConsent as X}from"../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/RequestMasterConsent";import{restoreAppsStorage as H}from"../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/RestoreAppsStorage";import{uploadCustomLockScreenDevice as _}from"../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/UploadCustomLockScreen";import{RequestMasterConsentResult as F,RestoreBackupSteps as e}from"../../../../device-action/OsUpdate/Restore/RestoreBackup/types";import{goToDashboard as j}from"../../../../device-action/OsUpdate/Shared/Substeps/GoToDashboard";import{waitForAppAndVersion as V}from"../../../../device-action/OsUpdate/Shared/Substeps/WaitForAppAndVersion";vi.mock("@api/device-action/OsUpdate/Shared/Substeps/WaitForAppAndVersion");vi.mock("@api/device-action/OsUpdate/Shared/Substeps/GoToDashboard");vi.mock("@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/GetIsOnboarded");vi.mock("@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/RequestMasterConsent");vi.mock("@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/InstallLanguagePackage");vi.mock("@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/InstallOrUpdateApps");vi.mock("@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/RestoreAppsStorage");vi.mock("@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/UploadCustomLockScreen");const t=(k,p=m.None)=>({status:E.Pending,intermediateValue:{requiredUserInteraction:p,step:k}}),f=k=>({status:E.Completed,output:k}),w=k=>({status:E.Error,error:k}),y=k=>T({initial:"ready",states:{ready:{after:{0:"done"},entry:W({intermediateValue:()=>({requiredUserInteraction:m.None})})},done:{type:"final"}},output:k}),D=k=>y(()=>k),R=(k={})=>({languageId:void 0,installedApps:[],clsHexImage:void 0,createdAt:new Date,...k});describe("RestoreBackupDeviceAction",()=>{const{getDeviceModel:k}=a();beforeEach(()=>{vi.resetAllMocks()});const p=(o="BOLOS")=>vi.mocked(V).mockReturnValue(D(u({name:o,version:"1.0.0"}))),U=o=>{const r=[...o];vi.mocked(V).mockReturnValue(y(()=>u({name:r.shift()??"BOLOS",version:"1.0.0"})))},B=(o=u(void 0))=>vi.mocked(j).mockReturnValue(D(o)),c=(o=u({isDeviceOnboarded:!0}))=>vi.mocked(P).mockReturnValue(()=>Promise.resolve(o)),g=(o=u(F.GRANTED))=>vi.mocked(X).mockReturnValue(()=>Promise.resolve(o)),b=(o=u(void 0))=>vi.mocked(q).mockReturnValue(D(o)),C=(o=u({successfullyInstalled:[],alreadyInstalled:[],missingApplications:[]}))=>vi.mocked(N).mockReturnValue(D(o)),L=(o=u([]))=>vi.mocked(H).mockReturnValue(D(o)),v=(o=u(void 0))=>vi.mocked(_).mockReturnValue(D(o)),l=o=>k.mockReturnValue({id:o}),d=(o=R())=>new G({input:{backup:o,unlockTimeout:3e4}});describe("Success",()=>{it("should complete the full restore flow when everything succeeds",()=>new Promise((o,r)=>{p(),c(),l(A.STAX),g(),b(),C(u({successfullyInstalled:[{versionName:"App1"}],alreadyInstalled:[],missingApplications:[]})),L(u([{appName:"App1",restoredAppStorage:!0}])),v();const n=R({languageId:1,installedApps:[{appName:"App1",data:"0xaa"}],clsHexImage:"0x0102"}),s=[t(e.WaitForAppAndVersion),t(e.WaitForAppAndVersion),t(e.GetIsOnboarded),t(e.RequestMasterConsent,m.GrantConsent),t(e.InstallLanguagePackage),t(e.InstallLanguagePackage),t(e.InstallOrUpdateApps),t(e.InstallOrUpdateApps),t(e.RestoreAppsStorage),t(e.RestoreAppsStorage),t(e.UploadCustomLockScreen),t(e.UploadCustomLockScreen),f({restoredLanguage:!0,restoredCLS:!0,restoredApps:[{appName:"App1",restoredApp:!0,restoredAppStorage:!0}]})];i(d(n),s,a(),{onDone:o,onError:r})})),it("should go to dashboard and wait for app and version again when an app is open",()=>new Promise((o,r)=>{U(["Bitcoin","BOLOS"]),B(),c(),l(A.NANO_X);const n=[t(e.WaitForAppAndVersion),t(e.WaitForAppAndVersion),t(e.GoToDashboard),t(e.GoToDashboard),t(e.WaitForAppAndVersion),t(e.WaitForAppAndVersion),t(e.GetIsOnboarded),f({restoredLanguage:void 0,restoredCLS:void 0,restoredApps:void 0})];i(d(),n,a(),{onDone:o,onError:r})})),it("should still restore the language pack but skip app/storage/CLS steps when device is not onboarded",()=>new Promise((o,r)=>{p(),c(u({isDeviceOnboarded:!1})),l(A.STAX),g(),b();const n=R({languageId:1,installedApps:[{appName:"App1",data:"0xaa"}],clsHexImage:"0x0102"}),s=[t(e.WaitForAppAndVersion),t(e.WaitForAppAndVersion),t(e.GetIsOnboarded),t(e.RequestMasterConsent,m.GrantConsent),t(e.InstallLanguagePackage),t(e.InstallLanguagePackage),f({restoredLanguage:!0,restoredCLS:!1,restoredApps:[{appName:"App1",restoredApp:!1,restoredAppStorage:!1}]})];i(d(n),s,a(),{onDone:o,onError:r})})),it("should skip RequestMasterConsent when the device does not support the feature",()=>new Promise((o,r)=>{p(),c(),l(A.NANO_X),g();const n=[t(e.WaitForAppAndVersion),t(e.WaitForAppAndVersion),t(e.GetIsOnboarded),f({restoredLanguage:void 0,restoredCLS:void 0,restoredApps:void 0})];i(d(),n,a(),{onDone:o,onError:r})})),it("should stop and complete immediately when master consent is rejected by the user",()=>new Promise((o,r)=>{p(),c(),l(A.STAX),g(u(F.REJECTED)),b();const n=[t(e.WaitForAppAndVersion),t(e.WaitForAppAndVersion),t(e.GetIsOnboarded),t(e.RequestMasterConsent,m.GrantConsent),f({restoredLanguage:void 0,restoredCLS:void 0,restoredApps:void 0})];i(d(),n,a(),{onDone:o,onError:r})})),it("should skip InstallOrUpdateApps and RestoreAppsStorage when the backup has no app",()=>new Promise((o,r)=>{p(),c(),l(A.STAX),g(),v(),C(),L();const n=R({clsHexImage:"0x0102"}),s=[t(e.WaitForAppAndVersion),t(e.WaitForAppAndVersion),t(e.GetIsOnboarded),t(e.RequestMasterConsent,m.GrantConsent),t(e.UploadCustomLockScreen),t(e.UploadCustomLockScreen),f({restoredLanguage:void 0,restoredCLS:!0,restoredApps:void 0})];i(d(n),s,a(),{onDone:o,onError:r})})),it("should skip UploadCustomLockScreen when the device does not support the feature, even if a CLS was backed up",()=>new Promise((o,r)=>{p(),c(),l(A.NANO_X),v();const n=R({clsHexImage:"0x0102"}),s=[t(e.WaitForAppAndVersion),t(e.WaitForAppAndVersion),t(e.GetIsOnboarded),f({restoredLanguage:void 0,restoredCLS:!1,restoredApps:void 0})];i(d(n),s,a(),{onDone:o,onError:r})})),it("should skip UploadCustomLockScreen when no CLS was backed up, even on a supported device",()=>new Promise((o,r)=>{p(),c(),l(A.STAX),g(),v();const n=[t(e.WaitForAppAndVersion),t(e.WaitForAppAndVersion),t(e.GetIsOnboarded),t(e.RequestMasterConsent,m.GrantConsent),f({restoredLanguage:void 0,restoredCLS:void 0,restoredApps:void 0})];i(d(),n,a(),{onDone:o,onError:r})})),it("should not fail and should keep going when the user refuses the language pack, app install, and CLS upload prompts",()=>new Promise((o,r)=>{p(),c(),l(A.STAX),g(),b(S(new O)),C(S(new O)),L(u([])),v(S(new O));const n=R({languageId:1,installedApps:[{appName:"App1",data:"0xaa"}],clsHexImage:"0x0102"}),s=[t(e.WaitForAppAndVersion),t(e.WaitForAppAndVersion),t(e.GetIsOnboarded),t(e.RequestMasterConsent,m.GrantConsent),t(e.InstallLanguagePackage),t(e.InstallLanguagePackage),t(e.InstallOrUpdateApps),t(e.InstallOrUpdateApps),t(e.RestoreAppsStorage),t(e.RestoreAppsStorage),t(e.UploadCustomLockScreen),t(e.UploadCustomLockScreen),f({restoredLanguage:!1,restoredCLS:!1,restoredApps:[{appName:"App1",restoredApp:!1,restoredAppStorage:!1}]})];i(d(n),s,a(),{onDone:o,onError:r})}))}),describe("Error",()=>{it("should go to Error when waitForAppAndVersion returns Left",()=>new Promise((o,r)=>{const n=new I("waitForAppAndVersion failed");vi.mocked(V).mockReturnValue(D(S(n)));const s=[t(e.WaitForAppAndVersion),t(e.WaitForAppAndVersion),w(n)];i(d(),s,a(),{onDone:o,onError:r})})),it("should go to Error when goToDashboard returns Left",()=>new Promise((o,r)=>{p("Bitcoin");const n=new I("goToDashboard failed");B(S(n));const s=[t(e.WaitForAppAndVersion),t(e.WaitForAppAndVersion),t(e.GoToDashboard),t(e.GoToDashboard),w(n)];i(d(),s,a(),{onDone:o,onError:r})})),it("should go to Error when getIsOnboarded returns Left",()=>new Promise((o,r)=>{p();const n=new x(new Error("command failed"));c(S(n));const s=[t(e.WaitForAppAndVersion),t(e.WaitForAppAndVersion),t(e.GetIsOnboarded),w(n)];i(d(),s,a(),{onDone:o,onError:r})})),it("should go to Error when requestMasterConsent fails with a fatal (non-refusal) error",()=>new Promise((o,r)=>{p(),c(),l(A.STAX);const n=new M(new Error("command failed"));g(S(n));const s=[t(e.WaitForAppAndVersion),t(e.WaitForAppAndVersion),t(e.GetIsOnboarded),t(e.RequestMasterConsent,m.GrantConsent),w(n)];i(d(),s,a(),{onDone:o,onError:r})})),it("should go to Error when installLanguagePackage fails with a fatal (non-refusal) error",()=>new Promise((o,r)=>{p(),c(),l(A.STAX),g();const n=new I("installLanguagePackage failed");b(S(n));const s=R({languageId:1}),h=[t(e.WaitForAppAndVersion),t(e.WaitForAppAndVersion),t(e.GetIsOnboarded),t(e.RequestMasterConsent,m.GrantConsent),t(e.InstallLanguagePackage),t(e.InstallLanguagePackage),w(n)];i(d(s),h,a(),{onDone:o,onError:r})})),it("should go to Error when installOrUpdateApps fails with a fatal (non-refusal) error",()=>new Promise((o,r)=>{p(),c(),l(A.STAX),g();const n=new I("installOrUpdateApps failed");C(S(n));const s=R({installedApps:[{appName:"App1",data:"0xaa"}]}),h=[t(e.WaitForAppAndVersion),t(e.WaitForAppAndVersion),t(e.GetIsOnboarded),t(e.RequestMasterConsent,m.GrantConsent),t(e.InstallOrUpdateApps),t(e.InstallOrUpdateApps),w(n)];i(d(s),h,a(),{onDone:o,onError:r})})),it("should go to Error when restoreAppsStorage returns Left",()=>new Promise((o,r)=>{p(),c(),l(A.STAX),g(),C(u({successfullyInstalled:[{versionName:"App1"}],alreadyInstalled:[],missingApplications:[]}));const n=new I("restoreAppsStorage failed");L(S(n));const s=R({installedApps:[{appName:"App1",data:"0xaa"}]}),h=[t(e.WaitForAppAndVersion),t(e.WaitForAppAndVersion),t(e.GetIsOnboarded),t(e.RequestMasterConsent,m.GrantConsent),t(e.InstallOrUpdateApps),t(e.InstallOrUpdateApps),t(e.RestoreAppsStorage),t(e.RestoreAppsStorage),w(n)];i(d(s),h,a(),{onDone:o,onError:r})})),it("should go to Error when uploadCustomLockScreen fails with a fatal (non-refusal) error",()=>new Promise((o,r)=>{p(),c(),l(A.STAX),g();const n=new I("uploadCustomLockScreen failed");v(S(n));const s=R({clsHexImage:"0x0102"}),h=[t(e.WaitForAppAndVersion),t(e.WaitForAppAndVersion),t(e.GetIsOnboarded),t(e.RequestMasterConsent,m.GrantConsent),t(e.UploadCustomLockScreen),t(e.UploadCustomLockScreen),w(n)];i(d(s),h,a(),{onDone:o,onError:r})}))})});
1
+ import{DeviceActionStatus as O,DeviceModelId as m,RefusedByUserDAError as U,UnknownDAError as C,UserInteractionRequired as i}from"@ledgerhq/device-management-kit";import{Left as S,Right as k}from"purify-ts";import{assign as T,createMachine as M}from"xstate";import{makeDeviceActionInternalApiMock as p}from"../../../../device-action/__test-utils__/makeInternalApi";import{testDeviceActionStates as c}from"../../../../device-action/__test-utils__/testDeviceActionStates";import{RestoreBackupDeviceAction as X}from"../../../../device-action/OsUpdate/Restore/RestoreBackup/RestoreBackupDeviceAction";import{GetIsOnboardedError as H,RequestMasterConsentError as _}from"../../../../device-action/OsUpdate/Restore/RestoreBackup/RestoreBackupDeviceActionErrors";import{getIsOnboarded as j}from"../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/GetIsOnboarded";import{installLanguagePackage as $}from"../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/InstallLanguagePackage";import{installOrUpdateApps as J}from"../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/InstallOrUpdateApps";import{requestMasterConsent as z}from"../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/RequestMasterConsent";import{restoreAppsStorage as K}from"../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/RestoreAppsStorage";import{uploadCustomLockScreenDevice as W}from"../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/UploadCustomLockScreen";import{RequestMasterConsentResult as x,RestoreBackupSteps as e}from"../../../../device-action/OsUpdate/Restore/RestoreBackup/types";import{goToDashboard as Q}from"../../../../device-action/OsUpdate/Shared/Substeps/GoToDashboard";import{waitForAppAndVersion as y}from"../../../../device-action/OsUpdate/Shared/Substeps/WaitForAppAndVersion";vi.mock("@api/device-action/OsUpdate/Shared/Substeps/WaitForAppAndVersion");vi.mock("@api/device-action/OsUpdate/Shared/Substeps/GoToDashboard");vi.mock("@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/GetIsOnboarded");vi.mock("@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/RequestMasterConsent");vi.mock("@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/InstallLanguagePackage");vi.mock("@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/InstallOrUpdateApps");vi.mock("@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/RestoreAppsStorage");vi.mock("@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/UploadCustomLockScreen");const t=(u,s=i.None)=>({status:O.Pending,intermediateValue:{requiredUserInteraction:s,step:u}}),w=u=>({status:O.Completed,output:u}),h=u=>({status:O.Error,error:u}),P=u=>M({initial:"ready",states:{ready:{after:{0:"done"},entry:T({intermediateValue:()=>({requiredUserInteraction:i.None})})},done:{type:"final"}},output:u}),v=u=>P(()=>u),Y=(u,s)=>M({initial:"interaction0",states:{...Object.fromEntries(u.map((E,D)=>[`interaction${D}`,{after:{0:D+1<u.length?`interaction${D+1}`:"done"},entry:T({intermediateValue:()=>({requiredUserInteraction:E})})}])),done:{type:"final"}},output:()=>s}),R=(u={})=>({languageId:void 0,installedApps:[],clsHexImage:void 0,createdAt:new Date,...u});describe("RestoreBackupDeviceAction",()=>{const{getDeviceModel:u}=p();beforeEach(()=>{vi.resetAllMocks(),A(m.NANO_X)});const s=(o="BOLOS")=>vi.mocked(y).mockReturnValue(v(k({name:o,version:"1.0.0"}))),E=o=>{const r=[...o];vi.mocked(y).mockReturnValue(P(()=>k({name:r.shift()??"BOLOS",version:"1.0.0"})))},D=(o=k(void 0))=>vi.mocked(Q).mockReturnValue(v(o)),l=(o=k({isDeviceOnboarded:!0}))=>vi.mocked(j).mockReturnValue(()=>Promise.resolve(o)),g=(o=k(x.GRANTED))=>vi.mocked(z).mockReturnValue(()=>Promise.resolve(o)),b=(o=k(void 0))=>vi.mocked($).mockReturnValue(v(o)),L=(o=k({successfullyInstalled:[],alreadyInstalled:[],missingApplications:[]}))=>vi.mocked(J).mockReturnValue(v(o)),V=(o=k([]))=>vi.mocked(K).mockReturnValue(v(o)),I=(o=k(void 0))=>vi.mocked(W).mockReturnValue(v(o)),G=o=>vi.mocked(W).mockReturnValue(Y(o,k(void 0))),A=o=>u.mockReturnValue({id:o}),d=(o=R())=>new X({input:{backup:o,unlockTimeout:3e4}});describe("Success",()=>{it("should complete the full restore flow when everything succeeds",()=>new Promise((o,r)=>{s(),l(),A(m.STAX),g(),b(),L(k({successfullyInstalled:[{versionName:"App1"}],alreadyInstalled:[],missingApplications:[]})),V(k([{appName:"App1",restoredAppStorage:!0}])),I();const n=R({languageId:1,installedApps:[{appName:"App1",data:"0xaa"}],clsHexImage:"0x0102"}),a=[t(e.WaitForAppAndVersion),t(e.WaitForAppAndVersion),t(e.GetIsOnboarded),t(e.RequestMasterConsent,i.GrantConsent),t(e.InstallLanguagePackage),t(e.InstallLanguagePackage),t(e.InstallOrUpdateApps),t(e.InstallOrUpdateApps),t(e.RestoreAppsStorage),t(e.RestoreAppsStorage),t(e.UploadCustomLockScreen),t(e.UploadCustomLockScreen),w({restoredLanguage:!0,restoredCLS:!0,restoredApps:[{appName:"App1",restoredApp:!0,restoredAppStorage:!0}]})];c(d(n),a,p(),{onDone:o,onError:r})})),it("should go to dashboard and wait for app and version again when an app is open",()=>new Promise((o,r)=>{E(["Bitcoin","BOLOS"]),D(),l(),A(m.NANO_X);const n=[t(e.WaitForAppAndVersion),t(e.WaitForAppAndVersion),t(e.GoToDashboard),t(e.GoToDashboard),t(e.WaitForAppAndVersion),t(e.WaitForAppAndVersion),t(e.GetIsOnboarded),w({restoredLanguage:void 0,restoredCLS:void 0,restoredApps:void 0})];c(d(),n,p(),{onDone:o,onError:r})})),it("should still restore the language pack but skip app/storage/CLS steps when device is not onboarded",()=>new Promise((o,r)=>{s(),l(k({isDeviceOnboarded:!1})),A(m.STAX),g(),b();const n=R({languageId:1,installedApps:[{appName:"App1",data:"0xaa"}],clsHexImage:"0x0102"}),a=[t(e.WaitForAppAndVersion),t(e.WaitForAppAndVersion),t(e.GetIsOnboarded),t(e.RequestMasterConsent,i.GrantConsent),t(e.InstallLanguagePackage),t(e.InstallLanguagePackage),w({restoredLanguage:!0,restoredCLS:!1,restoredApps:[{appName:"App1",restoredApp:!1,restoredAppStorage:!1}]})];c(d(n),a,p(),{onDone:o,onError:r})})),it("should skip RequestMasterConsent when the device does not support the feature",()=>new Promise((o,r)=>{s(),l(),A(m.NANO_X),g();const n=[t(e.WaitForAppAndVersion),t(e.WaitForAppAndVersion),t(e.GetIsOnboarded),w({restoredLanguage:void 0,restoredCLS:void 0,restoredApps:void 0})];c(d(),n,p(),{onDone:o,onError:r})})),it("should stop and complete immediately when master consent is rejected by the user",()=>new Promise((o,r)=>{s(),l(),A(m.STAX),g(k(x.REJECTED)),b();const n=[t(e.WaitForAppAndVersion),t(e.WaitForAppAndVersion),t(e.GetIsOnboarded),t(e.RequestMasterConsent,i.GrantConsent),w({restoredLanguage:void 0,restoredCLS:void 0,restoredApps:void 0})];c(d(),n,p(),{onDone:o,onError:r})})),it("should skip InstallOrUpdateApps and RestoreAppsStorage when the backup has no app",()=>new Promise((o,r)=>{s(),l(),A(m.STAX),g(),I(),L(),V();const n=R({clsHexImage:"0x0102"}),a=[t(e.WaitForAppAndVersion),t(e.WaitForAppAndVersion),t(e.GetIsOnboarded),t(e.RequestMasterConsent,i.GrantConsent),t(e.UploadCustomLockScreen),t(e.UploadCustomLockScreen),w({restoredLanguage:void 0,restoredCLS:!0,restoredApps:void 0})];c(d(n),a,p(),{onDone:o,onError:r})})),it("should skip UploadCustomLockScreen when the device does not support the feature, even if a CLS was backed up",()=>new Promise((o,r)=>{s(),l(),A(m.NANO_X),I();const n=R({clsHexImage:"0x0102"}),a=[t(e.WaitForAppAndVersion),t(e.WaitForAppAndVersion),t(e.GetIsOnboarded),w({restoredLanguage:void 0,restoredCLS:!1,restoredApps:void 0})];c(d(n),a,p(),{onDone:o,onError:r})})),it("should skip UploadCustomLockScreen when no CLS was backed up, even on a supported device",()=>new Promise((o,r)=>{s(),l(),A(m.STAX),g(),I();const n=[t(e.WaitForAppAndVersion),t(e.WaitForAppAndVersion),t(e.GetIsOnboarded),t(e.RequestMasterConsent,i.GrantConsent),w({restoredLanguage:void 0,restoredCLS:void 0,restoredApps:void 0})];c(d(),n,p(),{onDone:o,onError:r})})),describe("UploadCustomLockScreen required user interactions",()=>{const o=(n,a)=>new Promise((f,q)=>{s(),l(),A(n),g(),G(a);const F=[],{observable:N}=d(R({clsHexImage:"0x0102"}))._execute(p());N.subscribe({next:B=>{B.status===O.Pending&&B.intermediateValue.step===e.UploadCustomLockScreen&&F.push(B.intermediateValue.requiredUserInteraction)},error:q,complete:()=>f(F)})}),r=[i.UnlockDevice,i.ConfirmLoadImage,i.ConfirmCommitImage];it("should hide confirm load/commit image interactions but keep the others when master consent is granted",async()=>{const n=await o(m.STAX,r);expect(n).toContain(i.UnlockDevice),expect(n).not.toContain(i.ConfirmLoadImage),expect(n).not.toContain(i.ConfirmCommitImage)})}),it("should not fail and should keep going when the user refuses the language pack, app install, and CLS upload prompts",()=>new Promise((o,r)=>{s(),l(),A(m.STAX),g(),b(S(new U)),L(S(new U)),V(k([])),I(S(new U));const n=R({languageId:1,installedApps:[{appName:"App1",data:"0xaa"}],clsHexImage:"0x0102"}),a=[t(e.WaitForAppAndVersion),t(e.WaitForAppAndVersion),t(e.GetIsOnboarded),t(e.RequestMasterConsent,i.GrantConsent),t(e.InstallLanguagePackage),t(e.InstallLanguagePackage),t(e.InstallOrUpdateApps),t(e.InstallOrUpdateApps),t(e.RestoreAppsStorage),t(e.RestoreAppsStorage),t(e.UploadCustomLockScreen),t(e.UploadCustomLockScreen),w({restoredLanguage:!1,restoredCLS:!1,restoredApps:[{appName:"App1",restoredApp:!1,restoredAppStorage:!1}]})];c(d(n),a,p(),{onDone:o,onError:r})}))}),describe("Error",()=>{it("should go to Error when waitForAppAndVersion returns Left",()=>new Promise((o,r)=>{const n=new C("waitForAppAndVersion failed");vi.mocked(y).mockReturnValue(v(S(n)));const a=[t(e.WaitForAppAndVersion),t(e.WaitForAppAndVersion),h(n)];c(d(),a,p(),{onDone:o,onError:r})})),it("should go to Error when goToDashboard returns Left",()=>new Promise((o,r)=>{s("Bitcoin");const n=new C("goToDashboard failed");D(S(n));const a=[t(e.WaitForAppAndVersion),t(e.WaitForAppAndVersion),t(e.GoToDashboard),t(e.GoToDashboard),h(n)];c(d(),a,p(),{onDone:o,onError:r})})),it("should go to Error when getIsOnboarded returns Left",()=>new Promise((o,r)=>{s();const n=new H(new Error("command failed"));l(S(n));const a=[t(e.WaitForAppAndVersion),t(e.WaitForAppAndVersion),t(e.GetIsOnboarded),h(n)];c(d(),a,p(),{onDone:o,onError:r})})),it("should go to Error when requestMasterConsent fails with a fatal (non-refusal) error",()=>new Promise((o,r)=>{s(),l(),A(m.STAX);const n=new _(new Error("command failed"));g(S(n));const a=[t(e.WaitForAppAndVersion),t(e.WaitForAppAndVersion),t(e.GetIsOnboarded),t(e.RequestMasterConsent,i.GrantConsent),h(n)];c(d(),a,p(),{onDone:o,onError:r})})),it("should go to Error when installLanguagePackage fails with a fatal (non-refusal) error",()=>new Promise((o,r)=>{s(),l(),A(m.STAX),g();const n=new C("installLanguagePackage failed");b(S(n));const a=R({languageId:1}),f=[t(e.WaitForAppAndVersion),t(e.WaitForAppAndVersion),t(e.GetIsOnboarded),t(e.RequestMasterConsent,i.GrantConsent),t(e.InstallLanguagePackage),t(e.InstallLanguagePackage),h(n)];c(d(a),f,p(),{onDone:o,onError:r})})),it("should go to Error when installOrUpdateApps fails with a fatal (non-refusal) error",()=>new Promise((o,r)=>{s(),l(),A(m.STAX),g();const n=new C("installOrUpdateApps failed");L(S(n));const a=R({installedApps:[{appName:"App1",data:"0xaa"}]}),f=[t(e.WaitForAppAndVersion),t(e.WaitForAppAndVersion),t(e.GetIsOnboarded),t(e.RequestMasterConsent,i.GrantConsent),t(e.InstallOrUpdateApps),t(e.InstallOrUpdateApps),h(n)];c(d(a),f,p(),{onDone:o,onError:r})})),it("should go to Error when restoreAppsStorage returns Left",()=>new Promise((o,r)=>{s(),l(),A(m.STAX),g(),L(k({successfullyInstalled:[{versionName:"App1"}],alreadyInstalled:[],missingApplications:[]}));const n=new C("restoreAppsStorage failed");V(S(n));const a=R({installedApps:[{appName:"App1",data:"0xaa"}]}),f=[t(e.WaitForAppAndVersion),t(e.WaitForAppAndVersion),t(e.GetIsOnboarded),t(e.RequestMasterConsent,i.GrantConsent),t(e.InstallOrUpdateApps),t(e.InstallOrUpdateApps),t(e.RestoreAppsStorage),t(e.RestoreAppsStorage),h(n)];c(d(a),f,p(),{onDone:o,onError:r})})),it("should go to Error when uploadCustomLockScreen fails with a fatal (non-refusal) error",()=>new Promise((o,r)=>{s(),l(),A(m.STAX),g();const n=new C("uploadCustomLockScreen failed");I(S(n));const a=R({clsHexImage:"0x0102"}),f=[t(e.WaitForAppAndVersion),t(e.WaitForAppAndVersion),t(e.GetIsOnboarded),t(e.RequestMasterConsent,i.GrantConsent),t(e.UploadCustomLockScreen),t(e.UploadCustomLockScreen),h(n)];c(d(a),f,p(),{onDone:o,onError:r})}))})});
2
2
  //# sourceMappingURL=RestoreBackupDeviceAction.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../src/api/device-action/OsUpdate/Restore/RestoreBackup/RestoreBackupDeviceAction.test.ts"],
4
- "sourcesContent": ["import {\n DeviceActionStatus,\n DeviceModelId,\n RefusedByUserDAError,\n type TransportDeviceModel,\n UnknownDAError,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { type Either, Left, Right } from \"purify-ts\";\nimport { assign, createMachine } from \"xstate\";\n\nimport { makeDeviceActionInternalApiMock } from \"@api/device-action/__test-utils__/makeInternalApi\";\nimport { testDeviceActionStates } from \"@api/device-action/__test-utils__/testDeviceActionStates\";\nimport { type Backup } from \"@api/device-action/OsUpdate/Backup/types\";\nimport { RestoreBackupDeviceAction } from \"@api/device-action/OsUpdate/Restore/RestoreBackup/RestoreBackupDeviceAction\";\nimport {\n GetIsOnboardedError,\n RequestMasterConsentError,\n} from \"@api/device-action/OsUpdate/Restore/RestoreBackup/RestoreBackupDeviceActionErrors\";\nimport { getIsOnboarded } from \"@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/GetIsOnboarded\";\nimport { installLanguagePackage } from \"@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/InstallLanguagePackage\";\nimport { installOrUpdateApps } from \"@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/InstallOrUpdateApps\";\nimport { requestMasterConsent } from \"@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/RequestMasterConsent\";\nimport { restoreAppsStorage } from \"@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/RestoreAppsStorage\";\nimport { uploadCustomLockScreenDevice } from \"@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/UploadCustomLockScreen\";\nimport {\n RequestMasterConsentResult,\n type RestoreBackupDAError,\n type RestoreBackupDAOutput,\n type RestoreBackupDARequiredInteraction,\n type RestoreBackupDAState,\n RestoreBackupSteps,\n} from \"@api/device-action/OsUpdate/Restore/RestoreBackup/types\";\nimport { goToDashboard } from \"@api/device-action/OsUpdate/Shared/Substeps/GoToDashboard\";\nimport { waitForAppAndVersion } from \"@api/device-action/OsUpdate/Shared/Substeps/WaitForAppAndVersion\";\n\nvi.mock(\"@api/device-action/OsUpdate/Shared/Substeps/WaitForAppAndVersion\");\nvi.mock(\"@api/device-action/OsUpdate/Shared/Substeps/GoToDashboard\");\nvi.mock(\n \"@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/GetIsOnboarded\",\n);\nvi.mock(\n \"@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/RequestMasterConsent\",\n);\nvi.mock(\n \"@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/InstallLanguagePackage\",\n);\nvi.mock(\n \"@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/InstallOrUpdateApps\",\n);\nvi.mock(\n \"@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/RestoreAppsStorage\",\n);\nvi.mock(\n \"@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/UploadCustomLockScreen\",\n);\n\n// \u2500\u2500\u2500 State builders \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst pendingState = (\n step: RestoreBackupSteps,\n requiredUserInteraction: RestoreBackupDARequiredInteraction = UserInteractionRequired.None,\n): RestoreBackupDAState => ({\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction,\n step,\n },\n});\n\nconst completedState = (\n output: RestoreBackupDAOutput,\n): RestoreBackupDAState => ({\n status: DeviceActionStatus.Completed,\n output,\n});\n\nconst errorState = (error: RestoreBackupDAError): RestoreBackupDAState => ({\n status: DeviceActionStatus.Error,\n error,\n});\n\n// \u2500\u2500\u2500 Mock actor factory \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n//\n// Creates a minimal XState machine that immediately completes (after 0 ms) with\n// the given Either output. The machine exposes the `intermediateValue` shape\n// required by the parent's `onSnapshot` handler.\n\nconst createMockActorMachineFromOutput = (\n output: () => Either<unknown, unknown>,\n) =>\n createMachine({\n initial: \"ready\",\n states: {\n ready: {\n after: { 0: \"done\" },\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n }),\n }),\n },\n done: { type: \"final\" },\n },\n output,\n });\n\nconst createMockActorMachine = (output: Either<unknown, unknown>) =>\n createMockActorMachineFromOutput(() => output);\n\n// \u2500\u2500\u2500 Fixtures \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst makeBackup = (overrides: Partial<Backup> = {}): Backup => ({\n languageId: undefined,\n installedApps: [],\n clsHexImage: undefined,\n createdAt: new Date(),\n ...overrides,\n});\n\n// \u2500\u2500\u2500 Tests \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\ndescribe(\"RestoreBackupDeviceAction\", () => {\n const { getDeviceModel: getDeviceModelMock } =\n makeDeviceActionInternalApiMock();\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n // \u2500\u2500\u2500 Setup helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n const setupWaitForAppAndVersion = (appName = \"BOLOS\") =>\n vi\n .mocked(waitForAppAndVersion)\n .mockReturnValue(\n createMockActorMachine(\n Right({ name: appName, version: \"1.0.0\" }),\n ) as unknown as ReturnType<typeof waitForAppAndVersion>,\n );\n\n const setupWaitForAppAndVersionSequence = (appNames: string[]) => {\n const remainingAppNames = [...appNames];\n vi.mocked(waitForAppAndVersion).mockReturnValue(\n createMockActorMachineFromOutput(() =>\n Right({\n name: remainingAppNames.shift() ?? \"BOLOS\",\n version: \"1.0.0\",\n }),\n ) as unknown as ReturnType<typeof waitForAppAndVersion>,\n );\n };\n\n const setupGoToDashboard = (\n output: Either<unknown, unknown> = Right(undefined),\n ) =>\n vi\n .mocked(goToDashboard)\n .mockReturnValue(\n createMockActorMachine(output) as unknown as ReturnType<\n typeof goToDashboard\n >,\n );\n\n const setupGetIsOnboarded = (\n result: Either<unknown, { isDeviceOnboarded: boolean }> = Right({\n isDeviceOnboarded: true,\n }),\n ) =>\n vi\n .mocked(getIsOnboarded)\n .mockReturnValue(\n () =>\n Promise.resolve(result) as ReturnType<\n ReturnType<typeof getIsOnboarded>\n >,\n );\n\n const setupRequestMasterConsent = (\n result: Either<unknown, RequestMasterConsentResult> = Right(\n RequestMasterConsentResult.GRANTED,\n ),\n ) =>\n vi\n .mocked(requestMasterConsent)\n .mockReturnValue(\n () =>\n Promise.resolve(result) as ReturnType<\n ReturnType<typeof requestMasterConsent>\n >,\n );\n\n const setupInstallLanguagePackage = (\n output: Either<unknown, unknown> = Right(undefined),\n ) =>\n vi\n .mocked(installLanguagePackage)\n .mockReturnValue(\n createMockActorMachine(output) as unknown as ReturnType<\n typeof installLanguagePackage\n >,\n );\n\n const setupInstallOrUpdateApps = (\n output: Either<unknown, unknown> = Right({\n successfullyInstalled: [],\n alreadyInstalled: [],\n missingApplications: [],\n }),\n ) =>\n vi\n .mocked(installOrUpdateApps)\n .mockReturnValue(\n createMockActorMachine(output) as unknown as ReturnType<\n typeof installOrUpdateApps\n >,\n );\n\n const setupRestoreAppsStorage = (\n output: Either<unknown, unknown> = Right([]),\n ) =>\n vi\n .mocked(restoreAppsStorage)\n .mockReturnValue(\n createMockActorMachine(output) as unknown as ReturnType<\n typeof restoreAppsStorage\n >,\n );\n\n const setupUploadCustomLockScreen = (\n output: Either<unknown, unknown> = Right(undefined),\n ) =>\n vi\n .mocked(uploadCustomLockScreenDevice)\n .mockReturnValue(\n createMockActorMachine(output) as unknown as ReturnType<\n typeof uploadCustomLockScreenDevice\n >,\n );\n\n const setupDeviceModel = (id: DeviceModelId) =>\n getDeviceModelMock.mockReturnValue({ id } as TransportDeviceModel);\n\n const makeDeviceAction = (backup: Backup = makeBackup()) =>\n new RestoreBackupDeviceAction({\n input: { backup, unlockTimeout: 30_000 },\n });\n\n // \u2500\u2500\u2500 Success \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n describe(\"Success\", () => {\n it(\"should complete the full restore flow when everything succeeds\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion();\n setupGetIsOnboarded();\n setupDeviceModel(DeviceModelId.STAX);\n setupRequestMasterConsent();\n setupInstallLanguagePackage();\n setupInstallOrUpdateApps(\n Right({\n successfullyInstalled: [{ versionName: \"App1\" }],\n alreadyInstalled: [],\n missingApplications: [],\n }),\n );\n setupRestoreAppsStorage(\n Right([{ appName: \"App1\", restoredAppStorage: true }]),\n );\n setupUploadCustomLockScreen();\n\n const backup = makeBackup({\n languageId: 1, // french\n installedApps: [{ appName: \"App1\", data: \"0xaa\" }],\n clsHexImage: \"0x0102\",\n });\n\n const expectedStates: RestoreBackupDAState[] = [\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.GetIsOnboarded),\n pendingState(\n RestoreBackupSteps.RequestMasterConsent,\n UserInteractionRequired.GrantConsent,\n ),\n pendingState(RestoreBackupSteps.InstallLanguagePackage),\n pendingState(RestoreBackupSteps.InstallLanguagePackage),\n pendingState(RestoreBackupSteps.InstallOrUpdateApps),\n pendingState(RestoreBackupSteps.InstallOrUpdateApps),\n pendingState(RestoreBackupSteps.RestoreAppsStorage),\n pendingState(RestoreBackupSteps.RestoreAppsStorage),\n pendingState(RestoreBackupSteps.UploadCustomLockScreen),\n pendingState(RestoreBackupSteps.UploadCustomLockScreen),\n completedState({\n restoredLanguage: true,\n restoredCLS: true,\n restoredApps: [\n { appName: \"App1\", restoredApp: true, restoredAppStorage: true },\n ],\n }),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(backup),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n it(\"should go to dashboard and wait for app and version again when an app is open\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersionSequence([\"Bitcoin\", \"BOLOS\"]);\n setupGoToDashboard();\n setupGetIsOnboarded();\n setupDeviceModel(DeviceModelId.NANO_X);\n\n const expectedStates: RestoreBackupDAState[] = [\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.GoToDashboard),\n pendingState(RestoreBackupSteps.GoToDashboard),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.GetIsOnboarded),\n completedState({\n restoredLanguage: undefined,\n restoredCLS: undefined,\n restoredApps: undefined,\n }),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n it(\"should still restore the language pack but skip app/storage/CLS steps when device is not onboarded\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion();\n setupGetIsOnboarded(Right({ isDeviceOnboarded: false }));\n setupDeviceModel(DeviceModelId.STAX);\n setupRequestMasterConsent();\n setupInstallLanguagePackage();\n\n const backup = makeBackup({\n languageId: 1, // french\n installedApps: [{ appName: \"App1\", data: \"0xaa\" }],\n clsHexImage: \"0x0102\",\n });\n\n const expectedStates: RestoreBackupDAState[] = [\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.GetIsOnboarded),\n pendingState(\n RestoreBackupSteps.RequestMasterConsent,\n UserInteractionRequired.GrantConsent,\n ),\n pendingState(RestoreBackupSteps.InstallLanguagePackage),\n pendingState(RestoreBackupSteps.InstallLanguagePackage),\n completedState({\n restoredLanguage: true,\n restoredCLS: false,\n restoredApps: [\n {\n appName: \"App1\",\n restoredApp: false,\n restoredAppStorage: false,\n },\n ],\n }),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(backup),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n it(\"should skip RequestMasterConsent when the device does not support the feature\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion();\n setupGetIsOnboarded();\n setupDeviceModel(DeviceModelId.NANO_X);\n setupRequestMasterConsent(); // registered but never invoked\n\n const expectedStates: RestoreBackupDAState[] = [\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.GetIsOnboarded),\n completedState({\n restoredLanguage: undefined,\n restoredCLS: undefined,\n restoredApps: undefined,\n }),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n it(\"should stop and complete immediately when master consent is rejected by the user\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion();\n setupGetIsOnboarded();\n setupDeviceModel(DeviceModelId.STAX);\n setupRequestMasterConsent(Right(RequestMasterConsentResult.REJECTED));\n setupInstallLanguagePackage(); // registered but never invoked\n\n const expectedStates: RestoreBackupDAState[] = [\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.GetIsOnboarded),\n pendingState(\n RestoreBackupSteps.RequestMasterConsent,\n UserInteractionRequired.GrantConsent,\n ),\n completedState({\n restoredLanguage: undefined,\n restoredCLS: undefined,\n restoredApps: undefined,\n }),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n it(\"should skip InstallOrUpdateApps and RestoreAppsStorage when the backup has no app\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion();\n setupGetIsOnboarded();\n setupDeviceModel(DeviceModelId.STAX);\n setupRequestMasterConsent();\n setupUploadCustomLockScreen();\n setupInstallOrUpdateApps(); // registered but never invoked\n setupRestoreAppsStorage(); // registered but never invoked\n\n const backup = makeBackup({ clsHexImage: \"0x0102\" });\n\n const expectedStates: RestoreBackupDAState[] = [\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.GetIsOnboarded),\n pendingState(\n RestoreBackupSteps.RequestMasterConsent,\n UserInteractionRequired.GrantConsent,\n ),\n pendingState(RestoreBackupSteps.UploadCustomLockScreen),\n pendingState(RestoreBackupSteps.UploadCustomLockScreen),\n completedState({\n restoredLanguage: undefined,\n restoredCLS: true,\n restoredApps: undefined,\n }),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(backup),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n it(\"should skip UploadCustomLockScreen when the device does not support the feature, even if a CLS was backed up\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion();\n setupGetIsOnboarded();\n setupDeviceModel(DeviceModelId.NANO_X);\n setupUploadCustomLockScreen(); // registered but never invoked\n\n const backup = makeBackup({ clsHexImage: \"0x0102\" });\n\n const expectedStates: RestoreBackupDAState[] = [\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.GetIsOnboarded),\n completedState({\n restoredLanguage: undefined,\n restoredCLS: false,\n restoredApps: undefined,\n }),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(backup),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n it(\"should skip UploadCustomLockScreen when no CLS was backed up, even on a supported device\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion();\n setupGetIsOnboarded();\n setupDeviceModel(DeviceModelId.STAX);\n setupRequestMasterConsent();\n setupUploadCustomLockScreen(); // registered but never invoked\n\n const expectedStates: RestoreBackupDAState[] = [\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.GetIsOnboarded),\n pendingState(\n RestoreBackupSteps.RequestMasterConsent,\n UserInteractionRequired.GrantConsent,\n ),\n completedState({\n restoredLanguage: undefined,\n restoredCLS: undefined,\n restoredApps: undefined,\n }),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n it(\"should not fail and should keep going when the user refuses the language pack, app install, and CLS upload prompts\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion();\n setupGetIsOnboarded();\n setupDeviceModel(DeviceModelId.STAX);\n setupRequestMasterConsent();\n setupInstallLanguagePackage(Left(new RefusedByUserDAError()));\n setupInstallOrUpdateApps(Left(new RefusedByUserDAError()));\n setupRestoreAppsStorage(Right([]));\n setupUploadCustomLockScreen(Left(new RefusedByUserDAError()));\n\n const backup = makeBackup({\n languageId: 1, // french\n installedApps: [{ appName: \"App1\", data: \"0xaa\" }],\n clsHexImage: \"0x0102\",\n });\n\n const expectedStates: RestoreBackupDAState[] = [\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.GetIsOnboarded),\n pendingState(\n RestoreBackupSteps.RequestMasterConsent,\n UserInteractionRequired.GrantConsent,\n ),\n pendingState(RestoreBackupSteps.InstallLanguagePackage),\n pendingState(RestoreBackupSteps.InstallLanguagePackage),\n pendingState(RestoreBackupSteps.InstallOrUpdateApps),\n pendingState(RestoreBackupSteps.InstallOrUpdateApps),\n pendingState(RestoreBackupSteps.RestoreAppsStorage),\n pendingState(RestoreBackupSteps.RestoreAppsStorage),\n pendingState(RestoreBackupSteps.UploadCustomLockScreen),\n pendingState(RestoreBackupSteps.UploadCustomLockScreen),\n completedState({\n restoredLanguage: false,\n restoredCLS: false,\n restoredApps: [\n {\n appName: \"App1\",\n restoredApp: false,\n restoredAppStorage: false,\n },\n ],\n }),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(backup),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n });\n\n // \u2500\u2500\u2500 Error \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n describe(\"Error\", () => {\n it(\"should go to Error when waitForAppAndVersion returns Left\", () =>\n new Promise<void>((resolve, reject) => {\n const error = new UnknownDAError(\"waitForAppAndVersion failed\");\n vi.mocked(waitForAppAndVersion).mockReturnValue(\n createMockActorMachine(Left(error)) as unknown as ReturnType<\n typeof waitForAppAndVersion\n >,\n );\n\n const expectedStates: RestoreBackupDAState[] = [\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n errorState(error),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n it(\"should go to Error when goToDashboard returns Left\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion(\"Bitcoin\");\n const error = new UnknownDAError(\"goToDashboard failed\");\n setupGoToDashboard(Left(error));\n\n const expectedStates: RestoreBackupDAState[] = [\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.GoToDashboard),\n pendingState(RestoreBackupSteps.GoToDashboard),\n errorState(error),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n it(\"should go to Error when getIsOnboarded returns Left\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion();\n const error = new GetIsOnboardedError(new Error(\"command failed\"));\n setupGetIsOnboarded(Left(error));\n\n const expectedStates: RestoreBackupDAState[] = [\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.GetIsOnboarded),\n errorState(error),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n it(\"should go to Error when requestMasterConsent fails with a fatal (non-refusal) error\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion();\n setupGetIsOnboarded();\n setupDeviceModel(DeviceModelId.STAX);\n const error = new RequestMasterConsentError(\n new Error(\"command failed\"),\n );\n setupRequestMasterConsent(Left(error));\n\n const expectedStates: RestoreBackupDAState[] = [\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.GetIsOnboarded),\n pendingState(\n RestoreBackupSteps.RequestMasterConsent,\n UserInteractionRequired.GrantConsent,\n ),\n errorState(error),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n it(\"should go to Error when installLanguagePackage fails with a fatal (non-refusal) error\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion();\n setupGetIsOnboarded();\n setupDeviceModel(DeviceModelId.STAX);\n setupRequestMasterConsent();\n const error = new UnknownDAError(\"installLanguagePackage failed\");\n setupInstallLanguagePackage(Left(error));\n\n const backup = makeBackup({ languageId: 1 }); // french\n\n const expectedStates: RestoreBackupDAState[] = [\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.GetIsOnboarded),\n pendingState(\n RestoreBackupSteps.RequestMasterConsent,\n UserInteractionRequired.GrantConsent,\n ),\n pendingState(RestoreBackupSteps.InstallLanguagePackage),\n pendingState(RestoreBackupSteps.InstallLanguagePackage),\n errorState(error),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(backup),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n it(\"should go to Error when installOrUpdateApps fails with a fatal (non-refusal) error\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion();\n setupGetIsOnboarded();\n setupDeviceModel(DeviceModelId.STAX);\n setupRequestMasterConsent();\n const error = new UnknownDAError(\"installOrUpdateApps failed\");\n setupInstallOrUpdateApps(Left(error));\n\n const backup = makeBackup({\n installedApps: [{ appName: \"App1\", data: \"0xaa\" }],\n });\n\n const expectedStates: RestoreBackupDAState[] = [\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.GetIsOnboarded),\n pendingState(\n RestoreBackupSteps.RequestMasterConsent,\n UserInteractionRequired.GrantConsent,\n ),\n pendingState(RestoreBackupSteps.InstallOrUpdateApps),\n pendingState(RestoreBackupSteps.InstallOrUpdateApps),\n errorState(error),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(backup),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n it(\"should go to Error when restoreAppsStorage returns Left\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion();\n setupGetIsOnboarded();\n setupDeviceModel(DeviceModelId.STAX);\n setupRequestMasterConsent();\n setupInstallOrUpdateApps(\n Right({\n successfullyInstalled: [{ versionName: \"App1\" }],\n alreadyInstalled: [],\n missingApplications: [],\n }),\n );\n const error = new UnknownDAError(\"restoreAppsStorage failed\");\n setupRestoreAppsStorage(Left(error));\n\n const backup = makeBackup({\n installedApps: [{ appName: \"App1\", data: \"0xaa\" }],\n });\n\n const expectedStates: RestoreBackupDAState[] = [\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.GetIsOnboarded),\n pendingState(\n RestoreBackupSteps.RequestMasterConsent,\n UserInteractionRequired.GrantConsent,\n ),\n pendingState(RestoreBackupSteps.InstallOrUpdateApps),\n pendingState(RestoreBackupSteps.InstallOrUpdateApps),\n pendingState(RestoreBackupSteps.RestoreAppsStorage),\n pendingState(RestoreBackupSteps.RestoreAppsStorage),\n errorState(error),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(backup),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n it(\"should go to Error when uploadCustomLockScreen fails with a fatal (non-refusal) error\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion();\n setupGetIsOnboarded();\n setupDeviceModel(DeviceModelId.STAX);\n setupRequestMasterConsent();\n const error = new UnknownDAError(\"uploadCustomLockScreen failed\");\n setupUploadCustomLockScreen(Left(error));\n\n const backup = makeBackup({ clsHexImage: \"0x0102\" });\n\n const expectedStates: RestoreBackupDAState[] = [\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.GetIsOnboarded),\n pendingState(\n RestoreBackupSteps.RequestMasterConsent,\n UserInteractionRequired.GrantConsent,\n ),\n pendingState(RestoreBackupSteps.UploadCustomLockScreen),\n pendingState(RestoreBackupSteps.UploadCustomLockScreen),\n errorState(error),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(backup),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n });\n});\n"],
5
- "mappings": "AAAA,OACE,sBAAAA,EACA,iBAAAC,EACA,wBAAAC,EAEA,kBAAAC,EACA,2BAAAC,MACK,kCACP,OAAsB,QAAAC,EAAM,SAAAC,MAAa,YACzC,OAAS,UAAAC,EAAQ,iBAAAC,MAAqB,SAEtC,OAAS,mCAAAC,MAAuC,oDAChD,OAAS,0BAAAC,MAA8B,2DAEvC,OAAS,6BAAAC,MAAiC,8EAC1C,OACE,uBAAAC,EACA,6BAAAC,MACK,oFACP,OAAS,kBAAAC,MAAsB,4EAC/B,OAAS,0BAAAC,MAA8B,oFACvC,OAAS,uBAAAC,MAA2B,iFACpC,OAAS,wBAAAC,MAA4B,kFACrC,OAAS,sBAAAC,MAA0B,gFACnC,OAAS,gCAAAC,MAAoC,oFAC7C,OACE,8BAAAC,EAKA,sBAAAC,MACK,0DACP,OAAS,iBAAAC,MAAqB,4DAC9B,OAAS,wBAAAC,MAA4B,mEAErC,GAAG,KAAK,kEAAkE,EAC1E,GAAG,KAAK,2DAA2D,EACnE,GAAG,KACD,2EACF,EACA,GAAG,KACD,iFACF,EACA,GAAG,KACD,mFACF,EACA,GAAG,KACD,gFACF,EACA,GAAG,KACD,+EACF,EACA,GAAG,KACD,mFACF,EAIA,MAAMC,EAAe,CACnBC,EACAC,EAA8DtB,EAAwB,QAC5D,CAC1B,OAAQJ,EAAmB,QAC3B,kBAAmB,CACjB,wBAAA0B,EACA,KAAAD,CACF,CACF,GAEME,EACJC,IAC0B,CAC1B,OAAQ5B,EAAmB,UAC3B,OAAA4B,CACF,GAEMC,EAAcC,IAAuD,CACzE,OAAQ9B,EAAmB,MAC3B,MAAA8B,CACF,GAQMC,EACJH,GAEApB,EAAc,CACZ,QAAS,QACT,OAAQ,CACN,MAAO,CACL,MAAO,CAAE,EAAG,MAAO,EACnB,MAAOD,EAAO,CACZ,kBAAmB,KAAO,CACxB,wBAAyBH,EAAwB,IACnD,EACF,CAAC,CACH,EACA,KAAM,CAAE,KAAM,OAAQ,CACxB,EACA,OAAAwB,CACF,CAAC,EAEGI,EAA0BJ,GAC9BG,EAAiC,IAAMH,CAAM,EAIzCK,EAAa,CAACC,EAA6B,CAAC,KAAe,CAC/D,WAAY,OACZ,cAAe,CAAC,EAChB,YAAa,OACb,UAAW,IAAI,KACf,GAAGA,CACL,GAIA,SAAS,4BAA6B,IAAM,CAC1C,KAAM,CAAE,eAAgBC,CAAmB,EACzC1B,EAAgC,EAElC,WAAW,IAAM,CACf,GAAG,cAAc,CACnB,CAAC,EAID,MAAM2B,EAA4B,CAACC,EAAU,UAC3C,GACG,OAAOd,CAAoB,EAC3B,gBACCS,EACE1B,EAAM,CAAE,KAAM+B,EAAS,QAAS,OAAQ,CAAC,CAC3C,CACF,EAEEC,EAAqCC,GAAuB,CAChE,MAAMC,EAAoB,CAAC,GAAGD,CAAQ,EACtC,GAAG,OAAOhB,CAAoB,EAAE,gBAC9BQ,EAAiC,IAC/BzB,EAAM,CACJ,KAAMkC,EAAkB,MAAM,GAAK,QACnC,QAAS,OACX,CAAC,CACH,CACF,CACF,EAEMC,EAAqB,CACzBb,EAAmCtB,EAAM,MAAS,IAElD,GACG,OAAOgB,CAAa,EACpB,gBACCU,EAAuBJ,CAAM,CAG/B,EAEEc,EAAsB,CAC1BC,EAA0DrC,EAAM,CAC9D,kBAAmB,EACrB,CAAC,IAED,GACG,OAAOQ,CAAc,EACrB,gBACC,IACE,QAAQ,QAAQ6B,CAAM,CAG1B,EAEEC,EAA4B,CAChCD,EAAsDrC,EACpDc,EAA2B,OAC7B,IAEA,GACG,OAAOH,CAAoB,EAC3B,gBACC,IACE,QAAQ,QAAQ0B,CAAM,CAG1B,EAEEE,EAA8B,CAClCjB,EAAmCtB,EAAM,MAAS,IAElD,GACG,OAAOS,CAAsB,EAC7B,gBACCiB,EAAuBJ,CAAM,CAG/B,EAEEkB,EAA2B,CAC/BlB,EAAmCtB,EAAM,CACvC,sBAAuB,CAAC,EACxB,iBAAkB,CAAC,EACnB,oBAAqB,CAAC,CACxB,CAAC,IAED,GACG,OAAOU,CAAmB,EAC1B,gBACCgB,EAAuBJ,CAAM,CAG/B,EAEEmB,EAA0B,CAC9BnB,EAAmCtB,EAAM,CAAC,CAAC,IAE3C,GACG,OAAOY,CAAkB,EACzB,gBACCc,EAAuBJ,CAAM,CAG/B,EAEEoB,EAA8B,CAClCpB,EAAmCtB,EAAM,MAAS,IAElD,GACG,OAAOa,CAA4B,EACnC,gBACCa,EAAuBJ,CAAM,CAG/B,EAEEqB,EAAoBC,GACxBf,EAAmB,gBAAgB,CAAE,GAAAe,CAAG,CAAyB,EAE7DC,EAAmB,CAACC,EAAiBnB,EAAW,IACpD,IAAItB,EAA0B,CAC5B,MAAO,CAAE,OAAAyC,EAAQ,cAAe,GAAO,CACzC,CAAC,EAIH,SAAS,UAAW,IAAM,CACxB,GAAG,iEAAkE,IACnE,IAAI,QAAc,CAACC,EAASC,IAAW,CACrClB,EAA0B,EAC1BM,EAAoB,EACpBO,EAAiBhD,EAAc,IAAI,EACnC2C,EAA0B,EAC1BC,EAA4B,EAC5BC,EACExC,EAAM,CACJ,sBAAuB,CAAC,CAAE,YAAa,MAAO,CAAC,EAC/C,iBAAkB,CAAC,EACnB,oBAAqB,CAAC,CACxB,CAAC,CACH,EACAyC,EACEzC,EAAM,CAAC,CAAE,QAAS,OAAQ,mBAAoB,EAAK,CAAC,CAAC,CACvD,EACA0C,EAA4B,EAE5B,MAAMI,EAASnB,EAAW,CACxB,WAAY,EACZ,cAAe,CAAC,CAAE,QAAS,OAAQ,KAAM,MAAO,CAAC,EACjD,YAAa,QACf,CAAC,EAEKsB,EAAyC,CAC7C/B,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,cAAc,EAC9CG,EACEH,EAAmB,qBACnBjB,EAAwB,YAC1B,EACAoB,EAAaH,EAAmB,sBAAsB,EACtDG,EAAaH,EAAmB,sBAAsB,EACtDG,EAAaH,EAAmB,mBAAmB,EACnDG,EAAaH,EAAmB,mBAAmB,EACnDG,EAAaH,EAAmB,kBAAkB,EAClDG,EAAaH,EAAmB,kBAAkB,EAClDG,EAAaH,EAAmB,sBAAsB,EACtDG,EAAaH,EAAmB,sBAAsB,EACtDM,EAAe,CACb,iBAAkB,GAClB,YAAa,GACb,aAAc,CACZ,CAAE,QAAS,OAAQ,YAAa,GAAM,mBAAoB,EAAK,CACjE,CACF,CAAC,CACH,EAEAjB,EACEyC,EAAiBC,CAAM,EACvBG,EACA9C,EAAgC,EAChC,CAAE,OAAQ4C,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,EAEJ,GAAG,gFAAiF,IAClF,IAAI,QAAc,CAACD,EAASC,IAAW,CACrChB,EAAkC,CAAC,UAAW,OAAO,CAAC,EACtDG,EAAmB,EACnBC,EAAoB,EACpBO,EAAiBhD,EAAc,MAAM,EAErC,MAAMsD,EAAyC,CAC7C/B,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,aAAa,EAC7CG,EAAaH,EAAmB,aAAa,EAC7CG,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,cAAc,EAC9CM,EAAe,CACb,iBAAkB,OAClB,YAAa,OACb,aAAc,MAChB,CAAC,CACH,EAEAjB,EACEyC,EAAiB,EACjBI,EACA9C,EAAgC,EAChC,CAAE,OAAQ4C,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,EAEJ,GAAG,qGAAsG,IACvG,IAAI,QAAc,CAACD,EAASC,IAAW,CACrClB,EAA0B,EAC1BM,EAAoBpC,EAAM,CAAE,kBAAmB,EAAM,CAAC,CAAC,EACvD2C,EAAiBhD,EAAc,IAAI,EACnC2C,EAA0B,EAC1BC,EAA4B,EAE5B,MAAMO,EAASnB,EAAW,CACxB,WAAY,EACZ,cAAe,CAAC,CAAE,QAAS,OAAQ,KAAM,MAAO,CAAC,EACjD,YAAa,QACf,CAAC,EAEKsB,EAAyC,CAC7C/B,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,cAAc,EAC9CG,EACEH,EAAmB,qBACnBjB,EAAwB,YAC1B,EACAoB,EAAaH,EAAmB,sBAAsB,EACtDG,EAAaH,EAAmB,sBAAsB,EACtDM,EAAe,CACb,iBAAkB,GAClB,YAAa,GACb,aAAc,CACZ,CACE,QAAS,OACT,YAAa,GACb,mBAAoB,EACtB,CACF,CACF,CAAC,CACH,EAEAjB,EACEyC,EAAiBC,CAAM,EACvBG,EACA9C,EAAgC,EAChC,CAAE,OAAQ4C,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,EAEJ,GAAG,gFAAiF,IAClF,IAAI,QAAc,CAACD,EAASC,IAAW,CACrClB,EAA0B,EAC1BM,EAAoB,EACpBO,EAAiBhD,EAAc,MAAM,EACrC2C,EAA0B,EAE1B,MAAMW,EAAyC,CAC7C/B,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,cAAc,EAC9CM,EAAe,CACb,iBAAkB,OAClB,YAAa,OACb,aAAc,MAChB,CAAC,CACH,EAEAjB,EACEyC,EAAiB,EACjBI,EACA9C,EAAgC,EAChC,CAAE,OAAQ4C,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,EAEJ,GAAG,mFAAoF,IACrF,IAAI,QAAc,CAACD,EAASC,IAAW,CACrClB,EAA0B,EAC1BM,EAAoB,EACpBO,EAAiBhD,EAAc,IAAI,EACnC2C,EAA0BtC,EAAMc,EAA2B,QAAQ,CAAC,EACpEyB,EAA4B,EAE5B,MAAMU,EAAyC,CAC7C/B,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,cAAc,EAC9CG,EACEH,EAAmB,qBACnBjB,EAAwB,YAC1B,EACAuB,EAAe,CACb,iBAAkB,OAClB,YAAa,OACb,aAAc,MAChB,CAAC,CACH,EAEAjB,EACEyC,EAAiB,EACjBI,EACA9C,EAAgC,EAChC,CAAE,OAAQ4C,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,EAEJ,GAAG,oFAAqF,IACtF,IAAI,QAAc,CAACD,EAASC,IAAW,CACrClB,EAA0B,EAC1BM,EAAoB,EACpBO,EAAiBhD,EAAc,IAAI,EACnC2C,EAA0B,EAC1BI,EAA4B,EAC5BF,EAAyB,EACzBC,EAAwB,EAExB,MAAMK,EAASnB,EAAW,CAAE,YAAa,QAAS,CAAC,EAE7CsB,EAAyC,CAC7C/B,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,cAAc,EAC9CG,EACEH,EAAmB,qBACnBjB,EAAwB,YAC1B,EACAoB,EAAaH,EAAmB,sBAAsB,EACtDG,EAAaH,EAAmB,sBAAsB,EACtDM,EAAe,CACb,iBAAkB,OAClB,YAAa,GACb,aAAc,MAChB,CAAC,CACH,EAEAjB,EACEyC,EAAiBC,CAAM,EACvBG,EACA9C,EAAgC,EAChC,CAAE,OAAQ4C,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,EAEJ,GAAG,+GAAgH,IACjH,IAAI,QAAc,CAACD,EAASC,IAAW,CACrClB,EAA0B,EAC1BM,EAAoB,EACpBO,EAAiBhD,EAAc,MAAM,EACrC+C,EAA4B,EAE5B,MAAMI,EAASnB,EAAW,CAAE,YAAa,QAAS,CAAC,EAE7CsB,EAAyC,CAC7C/B,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,cAAc,EAC9CM,EAAe,CACb,iBAAkB,OAClB,YAAa,GACb,aAAc,MAChB,CAAC,CACH,EAEAjB,EACEyC,EAAiBC,CAAM,EACvBG,EACA9C,EAAgC,EAChC,CAAE,OAAQ4C,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,EAEJ,GAAG,2FAA4F,IAC7F,IAAI,QAAc,CAACD,EAASC,IAAW,CACrClB,EAA0B,EAC1BM,EAAoB,EACpBO,EAAiBhD,EAAc,IAAI,EACnC2C,EAA0B,EAC1BI,EAA4B,EAE5B,MAAMO,EAAyC,CAC7C/B,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,cAAc,EAC9CG,EACEH,EAAmB,qBACnBjB,EAAwB,YAC1B,EACAuB,EAAe,CACb,iBAAkB,OAClB,YAAa,OACb,aAAc,MAChB,CAAC,CACH,EAEAjB,EACEyC,EAAiB,EACjBI,EACA9C,EAAgC,EAChC,CAAE,OAAQ4C,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,EAEJ,GAAG,qHAAsH,IACvH,IAAI,QAAc,CAACD,EAASC,IAAW,CACrClB,EAA0B,EAC1BM,EAAoB,EACpBO,EAAiBhD,EAAc,IAAI,EACnC2C,EAA0B,EAC1BC,EAA4BxC,EAAK,IAAIH,CAAsB,CAAC,EAC5D4C,EAAyBzC,EAAK,IAAIH,CAAsB,CAAC,EACzD6C,EAAwBzC,EAAM,CAAC,CAAC,CAAC,EACjC0C,EAA4B3C,EAAK,IAAIH,CAAsB,CAAC,EAE5D,MAAMkD,EAASnB,EAAW,CACxB,WAAY,EACZ,cAAe,CAAC,CAAE,QAAS,OAAQ,KAAM,MAAO,CAAC,EACjD,YAAa,QACf,CAAC,EAEKsB,EAAyC,CAC7C/B,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,cAAc,EAC9CG,EACEH,EAAmB,qBACnBjB,EAAwB,YAC1B,EACAoB,EAAaH,EAAmB,sBAAsB,EACtDG,EAAaH,EAAmB,sBAAsB,EACtDG,EAAaH,EAAmB,mBAAmB,EACnDG,EAAaH,EAAmB,mBAAmB,EACnDG,EAAaH,EAAmB,kBAAkB,EAClDG,EAAaH,EAAmB,kBAAkB,EAClDG,EAAaH,EAAmB,sBAAsB,EACtDG,EAAaH,EAAmB,sBAAsB,EACtDM,EAAe,CACb,iBAAkB,GAClB,YAAa,GACb,aAAc,CACZ,CACE,QAAS,OACT,YAAa,GACb,mBAAoB,EACtB,CACF,CACF,CAAC,CACH,EAEAjB,EACEyC,EAAiBC,CAAM,EACvBG,EACA9C,EAAgC,EAChC,CAAE,OAAQ4C,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,CACN,CAAC,EAID,SAAS,QAAS,IAAM,CACtB,GAAG,4DAA6D,IAC9D,IAAI,QAAc,CAACD,EAASC,IAAW,CACrC,MAAMxB,EAAQ,IAAI3B,EAAe,6BAA6B,EAC9D,GAAG,OAAOoB,CAAoB,EAAE,gBAC9BS,EAAuB3B,EAAKyB,CAAK,CAAC,CAGpC,EAEA,MAAMyB,EAAyC,CAC7C/B,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,oBAAoB,EACpDQ,EAAWC,CAAK,CAClB,EAEApB,EACEyC,EAAiB,EACjBI,EACA9C,EAAgC,EAChC,CAAE,OAAQ4C,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,EAEJ,GAAG,qDAAsD,IACvD,IAAI,QAAc,CAACD,EAASC,IAAW,CACrClB,EAA0B,SAAS,EACnC,MAAMN,EAAQ,IAAI3B,EAAe,sBAAsB,EACvDsC,EAAmBpC,EAAKyB,CAAK,CAAC,EAE9B,MAAMyB,EAAyC,CAC7C/B,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,aAAa,EAC7CG,EAAaH,EAAmB,aAAa,EAC7CQ,EAAWC,CAAK,CAClB,EAEApB,EACEyC,EAAiB,EACjBI,EACA9C,EAAgC,EAChC,CAAE,OAAQ4C,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,EAEJ,GAAG,sDAAuD,IACxD,IAAI,QAAc,CAACD,EAASC,IAAW,CACrClB,EAA0B,EAC1B,MAAMN,EAAQ,IAAIlB,EAAoB,IAAI,MAAM,gBAAgB,CAAC,EACjE8B,EAAoBrC,EAAKyB,CAAK,CAAC,EAE/B,MAAMyB,EAAyC,CAC7C/B,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,cAAc,EAC9CQ,EAAWC,CAAK,CAClB,EAEApB,EACEyC,EAAiB,EACjBI,EACA9C,EAAgC,EAChC,CAAE,OAAQ4C,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,EAEJ,GAAG,sFAAuF,IACxF,IAAI,QAAc,CAACD,EAASC,IAAW,CACrClB,EAA0B,EAC1BM,EAAoB,EACpBO,EAAiBhD,EAAc,IAAI,EACnC,MAAM6B,EAAQ,IAAIjB,EAChB,IAAI,MAAM,gBAAgB,CAC5B,EACA+B,EAA0BvC,EAAKyB,CAAK,CAAC,EAErC,MAAMyB,EAAyC,CAC7C/B,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,cAAc,EAC9CG,EACEH,EAAmB,qBACnBjB,EAAwB,YAC1B,EACAyB,EAAWC,CAAK,CAClB,EAEApB,EACEyC,EAAiB,EACjBI,EACA9C,EAAgC,EAChC,CAAE,OAAQ4C,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,EAEJ,GAAG,wFAAyF,IAC1F,IAAI,QAAc,CAACD,EAASC,IAAW,CACrClB,EAA0B,EAC1BM,EAAoB,EACpBO,EAAiBhD,EAAc,IAAI,EACnC2C,EAA0B,EAC1B,MAAMd,EAAQ,IAAI3B,EAAe,+BAA+B,EAChE0C,EAA4BxC,EAAKyB,CAAK,CAAC,EAEvC,MAAMsB,EAASnB,EAAW,CAAE,WAAY,CAAE,CAAC,EAErCsB,EAAyC,CAC7C/B,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,cAAc,EAC9CG,EACEH,EAAmB,qBACnBjB,EAAwB,YAC1B,EACAoB,EAAaH,EAAmB,sBAAsB,EACtDG,EAAaH,EAAmB,sBAAsB,EACtDQ,EAAWC,CAAK,CAClB,EAEApB,EACEyC,EAAiBC,CAAM,EACvBG,EACA9C,EAAgC,EAChC,CAAE,OAAQ4C,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,EAEJ,GAAG,qFAAsF,IACvF,IAAI,QAAc,CAACD,EAASC,IAAW,CACrClB,EAA0B,EAC1BM,EAAoB,EACpBO,EAAiBhD,EAAc,IAAI,EACnC2C,EAA0B,EAC1B,MAAMd,EAAQ,IAAI3B,EAAe,4BAA4B,EAC7D2C,EAAyBzC,EAAKyB,CAAK,CAAC,EAEpC,MAAMsB,EAASnB,EAAW,CACxB,cAAe,CAAC,CAAE,QAAS,OAAQ,KAAM,MAAO,CAAC,CACnD,CAAC,EAEKsB,EAAyC,CAC7C/B,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,cAAc,EAC9CG,EACEH,EAAmB,qBACnBjB,EAAwB,YAC1B,EACAoB,EAAaH,EAAmB,mBAAmB,EACnDG,EAAaH,EAAmB,mBAAmB,EACnDQ,EAAWC,CAAK,CAClB,EAEApB,EACEyC,EAAiBC,CAAM,EACvBG,EACA9C,EAAgC,EAChC,CAAE,OAAQ4C,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,EAEJ,GAAG,0DAA2D,IAC5D,IAAI,QAAc,CAACD,EAASC,IAAW,CACrClB,EAA0B,EAC1BM,EAAoB,EACpBO,EAAiBhD,EAAc,IAAI,EACnC2C,EAA0B,EAC1BE,EACExC,EAAM,CACJ,sBAAuB,CAAC,CAAE,YAAa,MAAO,CAAC,EAC/C,iBAAkB,CAAC,EACnB,oBAAqB,CAAC,CACxB,CAAC,CACH,EACA,MAAMwB,EAAQ,IAAI3B,EAAe,2BAA2B,EAC5D4C,EAAwB1C,EAAKyB,CAAK,CAAC,EAEnC,MAAMsB,EAASnB,EAAW,CACxB,cAAe,CAAC,CAAE,QAAS,OAAQ,KAAM,MAAO,CAAC,CACnD,CAAC,EAEKsB,EAAyC,CAC7C/B,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,cAAc,EAC9CG,EACEH,EAAmB,qBACnBjB,EAAwB,YAC1B,EACAoB,EAAaH,EAAmB,mBAAmB,EACnDG,EAAaH,EAAmB,mBAAmB,EACnDG,EAAaH,EAAmB,kBAAkB,EAClDG,EAAaH,EAAmB,kBAAkB,EAClDQ,EAAWC,CAAK,CAClB,EAEApB,EACEyC,EAAiBC,CAAM,EACvBG,EACA9C,EAAgC,EAChC,CAAE,OAAQ4C,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,EAEJ,GAAG,wFAAyF,IAC1F,IAAI,QAAc,CAACD,EAASC,IAAW,CACrClB,EAA0B,EAC1BM,EAAoB,EACpBO,EAAiBhD,EAAc,IAAI,EACnC2C,EAA0B,EAC1B,MAAMd,EAAQ,IAAI3B,EAAe,+BAA+B,EAChE6C,EAA4B3C,EAAKyB,CAAK,CAAC,EAEvC,MAAMsB,EAASnB,EAAW,CAAE,YAAa,QAAS,CAAC,EAE7CsB,EAAyC,CAC7C/B,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,cAAc,EAC9CG,EACEH,EAAmB,qBACnBjB,EAAwB,YAC1B,EACAoB,EAAaH,EAAmB,sBAAsB,EACtDG,EAAaH,EAAmB,sBAAsB,EACtDQ,EAAWC,CAAK,CAClB,EAEApB,EACEyC,EAAiBC,CAAM,EACvBG,EACA9C,EAAgC,EAChC,CAAE,OAAQ4C,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,CACN,CAAC,CACH,CAAC",
6
- "names": ["DeviceActionStatus", "DeviceModelId", "RefusedByUserDAError", "UnknownDAError", "UserInteractionRequired", "Left", "Right", "assign", "createMachine", "makeDeviceActionInternalApiMock", "testDeviceActionStates", "RestoreBackupDeviceAction", "GetIsOnboardedError", "RequestMasterConsentError", "getIsOnboarded", "installLanguagePackage", "installOrUpdateApps", "requestMasterConsent", "restoreAppsStorage", "uploadCustomLockScreenDevice", "RequestMasterConsentResult", "RestoreBackupSteps", "goToDashboard", "waitForAppAndVersion", "pendingState", "step", "requiredUserInteraction", "completedState", "output", "errorState", "error", "createMockActorMachineFromOutput", "createMockActorMachine", "makeBackup", "overrides", "getDeviceModelMock", "setupWaitForAppAndVersion", "appName", "setupWaitForAppAndVersionSequence", "appNames", "remainingAppNames", "setupGoToDashboard", "setupGetIsOnboarded", "result", "setupRequestMasterConsent", "setupInstallLanguagePackage", "setupInstallOrUpdateApps", "setupRestoreAppsStorage", "setupUploadCustomLockScreen", "setupDeviceModel", "id", "makeDeviceAction", "backup", "resolve", "reject", "expectedStates"]
4
+ "sourcesContent": ["import {\n DeviceActionStatus,\n DeviceModelId,\n RefusedByUserDAError,\n type TransportDeviceModel,\n UnknownDAError,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { type Either, Left, Right } from \"purify-ts\";\nimport { assign, createMachine } from \"xstate\";\n\nimport { makeDeviceActionInternalApiMock } from \"@api/device-action/__test-utils__/makeInternalApi\";\nimport { testDeviceActionStates } from \"@api/device-action/__test-utils__/testDeviceActionStates\";\nimport { type Backup } from \"@api/device-action/OsUpdate/Backup/types\";\nimport { RestoreBackupDeviceAction } from \"@api/device-action/OsUpdate/Restore/RestoreBackup/RestoreBackupDeviceAction\";\nimport {\n GetIsOnboardedError,\n RequestMasterConsentError,\n} from \"@api/device-action/OsUpdate/Restore/RestoreBackup/RestoreBackupDeviceActionErrors\";\nimport { getIsOnboarded } from \"@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/GetIsOnboarded\";\nimport { installLanguagePackage } from \"@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/InstallLanguagePackage\";\nimport { installOrUpdateApps } from \"@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/InstallOrUpdateApps\";\nimport { requestMasterConsent } from \"@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/RequestMasterConsent\";\nimport { restoreAppsStorage } from \"@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/RestoreAppsStorage\";\nimport { uploadCustomLockScreenDevice } from \"@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/UploadCustomLockScreen\";\nimport {\n RequestMasterConsentResult,\n type RestoreBackupDAError,\n type RestoreBackupDAOutput,\n type RestoreBackupDARequiredInteraction,\n type RestoreBackupDAState,\n RestoreBackupSteps,\n} from \"@api/device-action/OsUpdate/Restore/RestoreBackup/types\";\nimport { goToDashboard } from \"@api/device-action/OsUpdate/Shared/Substeps/GoToDashboard\";\nimport { waitForAppAndVersion } from \"@api/device-action/OsUpdate/Shared/Substeps/WaitForAppAndVersion\";\n\nvi.mock(\"@api/device-action/OsUpdate/Shared/Substeps/WaitForAppAndVersion\");\nvi.mock(\"@api/device-action/OsUpdate/Shared/Substeps/GoToDashboard\");\nvi.mock(\n \"@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/GetIsOnboarded\",\n);\nvi.mock(\n \"@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/RequestMasterConsent\",\n);\nvi.mock(\n \"@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/InstallLanguagePackage\",\n);\nvi.mock(\n \"@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/InstallOrUpdateApps\",\n);\nvi.mock(\n \"@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/RestoreAppsStorage\",\n);\nvi.mock(\n \"@api/device-action/OsUpdate/Restore/RestoreBackup/Substeps/UploadCustomLockScreen\",\n);\n\n// \u2500\u2500\u2500 State builders \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst pendingState = (\n step: RestoreBackupSteps,\n requiredUserInteraction: RestoreBackupDARequiredInteraction = UserInteractionRequired.None,\n): RestoreBackupDAState => ({\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction,\n step,\n },\n});\n\nconst completedState = (\n output: RestoreBackupDAOutput,\n): RestoreBackupDAState => ({\n status: DeviceActionStatus.Completed,\n output,\n});\n\nconst errorState = (error: RestoreBackupDAError): RestoreBackupDAState => ({\n status: DeviceActionStatus.Error,\n error,\n});\n\n// \u2500\u2500\u2500 Mock actor factory \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n//\n// Creates a minimal XState machine that immediately completes (after 0 ms) with\n// the given Either output. The machine exposes the `intermediateValue` shape\n// required by the parent's `onSnapshot` handler.\n\nconst createMockActorMachineFromOutput = (\n output: () => Either<unknown, unknown>,\n) =>\n createMachine({\n initial: \"ready\",\n states: {\n ready: {\n after: { 0: \"done\" },\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n }),\n }),\n },\n done: { type: \"final\" },\n },\n output,\n });\n\nconst createMockActorMachine = (output: Either<unknown, unknown>) =>\n createMockActorMachineFromOutput(() => output);\n\n// Same as above, but the actor goes through one state per given required user\n// interaction before completing, so that each interaction is surfaced to the\n// parent through a snapshot.\nconst createMockActorMachineWithInteractions = (\n interactions: UserInteractionRequired[],\n output: Either<unknown, unknown>,\n) =>\n createMachine({\n initial: \"interaction0\",\n states: {\n ...Object.fromEntries(\n interactions.map((requiredUserInteraction, index) => [\n `interaction${index}`,\n {\n after: {\n 0:\n index + 1 < interactions.length\n ? `interaction${index + 1}`\n : \"done\",\n },\n entry: assign({\n intermediateValue: () => ({ requiredUserInteraction }),\n }),\n },\n ]),\n ),\n done: { type: \"final\" },\n },\n output: () => output,\n });\n\n// \u2500\u2500\u2500 Fixtures \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst makeBackup = (overrides: Partial<Backup> = {}): Backup => ({\n languageId: undefined,\n installedApps: [],\n clsHexImage: undefined,\n createdAt: new Date(),\n ...overrides,\n});\n\n// \u2500\u2500\u2500 Tests \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\ndescribe(\"RestoreBackupDeviceAction\", () => {\n const { getDeviceModel: getDeviceModelMock } =\n makeDeviceActionInternalApiMock();\n\n beforeEach(() => {\n vi.resetAllMocks();\n // The device model is read when the state machine is created\n setupDeviceModel(DeviceModelId.NANO_X);\n });\n\n // \u2500\u2500\u2500 Setup helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n const setupWaitForAppAndVersion = (appName = \"BOLOS\") =>\n vi\n .mocked(waitForAppAndVersion)\n .mockReturnValue(\n createMockActorMachine(\n Right({ name: appName, version: \"1.0.0\" }),\n ) as unknown as ReturnType<typeof waitForAppAndVersion>,\n );\n\n const setupWaitForAppAndVersionSequence = (appNames: string[]) => {\n const remainingAppNames = [...appNames];\n vi.mocked(waitForAppAndVersion).mockReturnValue(\n createMockActorMachineFromOutput(() =>\n Right({\n name: remainingAppNames.shift() ?? \"BOLOS\",\n version: \"1.0.0\",\n }),\n ) as unknown as ReturnType<typeof waitForAppAndVersion>,\n );\n };\n\n const setupGoToDashboard = (\n output: Either<unknown, unknown> = Right(undefined),\n ) =>\n vi\n .mocked(goToDashboard)\n .mockReturnValue(\n createMockActorMachine(output) as unknown as ReturnType<\n typeof goToDashboard\n >,\n );\n\n const setupGetIsOnboarded = (\n result: Either<unknown, { isDeviceOnboarded: boolean }> = Right({\n isDeviceOnboarded: true,\n }),\n ) =>\n vi\n .mocked(getIsOnboarded)\n .mockReturnValue(\n () =>\n Promise.resolve(result) as ReturnType<\n ReturnType<typeof getIsOnboarded>\n >,\n );\n\n const setupRequestMasterConsent = (\n result: Either<unknown, RequestMasterConsentResult> = Right(\n RequestMasterConsentResult.GRANTED,\n ),\n ) =>\n vi\n .mocked(requestMasterConsent)\n .mockReturnValue(\n () =>\n Promise.resolve(result) as ReturnType<\n ReturnType<typeof requestMasterConsent>\n >,\n );\n\n const setupInstallLanguagePackage = (\n output: Either<unknown, unknown> = Right(undefined),\n ) =>\n vi\n .mocked(installLanguagePackage)\n .mockReturnValue(\n createMockActorMachine(output) as unknown as ReturnType<\n typeof installLanguagePackage\n >,\n );\n\n const setupInstallOrUpdateApps = (\n output: Either<unknown, unknown> = Right({\n successfullyInstalled: [],\n alreadyInstalled: [],\n missingApplications: [],\n }),\n ) =>\n vi\n .mocked(installOrUpdateApps)\n .mockReturnValue(\n createMockActorMachine(output) as unknown as ReturnType<\n typeof installOrUpdateApps\n >,\n );\n\n const setupRestoreAppsStorage = (\n output: Either<unknown, unknown> = Right([]),\n ) =>\n vi\n .mocked(restoreAppsStorage)\n .mockReturnValue(\n createMockActorMachine(output) as unknown as ReturnType<\n typeof restoreAppsStorage\n >,\n );\n\n const setupUploadCustomLockScreen = (\n output: Either<unknown, unknown> = Right(undefined),\n ) =>\n vi\n .mocked(uploadCustomLockScreenDevice)\n .mockReturnValue(\n createMockActorMachine(output) as unknown as ReturnType<\n typeof uploadCustomLockScreenDevice\n >,\n );\n\n const setupUploadCustomLockScreenWithInteractions = (\n interactions: UserInteractionRequired[],\n ) =>\n vi\n .mocked(uploadCustomLockScreenDevice)\n .mockReturnValue(\n createMockActorMachineWithInteractions(\n interactions,\n Right(undefined),\n ) as unknown as ReturnType<typeof uploadCustomLockScreenDevice>,\n );\n\n const setupDeviceModel = (id: DeviceModelId) =>\n getDeviceModelMock.mockReturnValue({ id } as TransportDeviceModel);\n\n const makeDeviceAction = (backup: Backup = makeBackup()) =>\n new RestoreBackupDeviceAction({\n input: { backup, unlockTimeout: 30_000 },\n });\n\n // \u2500\u2500\u2500 Success \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n describe(\"Success\", () => {\n it(\"should complete the full restore flow when everything succeeds\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion();\n setupGetIsOnboarded();\n setupDeviceModel(DeviceModelId.STAX);\n setupRequestMasterConsent();\n setupInstallLanguagePackage();\n setupInstallOrUpdateApps(\n Right({\n successfullyInstalled: [{ versionName: \"App1\" }],\n alreadyInstalled: [],\n missingApplications: [],\n }),\n );\n setupRestoreAppsStorage(\n Right([{ appName: \"App1\", restoredAppStorage: true }]),\n );\n setupUploadCustomLockScreen();\n\n const backup = makeBackup({\n languageId: 1, // french\n installedApps: [{ appName: \"App1\", data: \"0xaa\" }],\n clsHexImage: \"0x0102\",\n });\n\n const expectedStates: RestoreBackupDAState[] = [\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.GetIsOnboarded),\n pendingState(\n RestoreBackupSteps.RequestMasterConsent,\n UserInteractionRequired.GrantConsent,\n ),\n pendingState(RestoreBackupSteps.InstallLanguagePackage),\n pendingState(RestoreBackupSteps.InstallLanguagePackage),\n pendingState(RestoreBackupSteps.InstallOrUpdateApps),\n pendingState(RestoreBackupSteps.InstallOrUpdateApps),\n pendingState(RestoreBackupSteps.RestoreAppsStorage),\n pendingState(RestoreBackupSteps.RestoreAppsStorage),\n pendingState(RestoreBackupSteps.UploadCustomLockScreen),\n pendingState(RestoreBackupSteps.UploadCustomLockScreen),\n completedState({\n restoredLanguage: true,\n restoredCLS: true,\n restoredApps: [\n { appName: \"App1\", restoredApp: true, restoredAppStorage: true },\n ],\n }),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(backup),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n it(\"should go to dashboard and wait for app and version again when an app is open\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersionSequence([\"Bitcoin\", \"BOLOS\"]);\n setupGoToDashboard();\n setupGetIsOnboarded();\n setupDeviceModel(DeviceModelId.NANO_X);\n\n const expectedStates: RestoreBackupDAState[] = [\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.GoToDashboard),\n pendingState(RestoreBackupSteps.GoToDashboard),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.GetIsOnboarded),\n completedState({\n restoredLanguage: undefined,\n restoredCLS: undefined,\n restoredApps: undefined,\n }),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n it(\"should still restore the language pack but skip app/storage/CLS steps when device is not onboarded\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion();\n setupGetIsOnboarded(Right({ isDeviceOnboarded: false }));\n setupDeviceModel(DeviceModelId.STAX);\n setupRequestMasterConsent();\n setupInstallLanguagePackage();\n\n const backup = makeBackup({\n languageId: 1, // french\n installedApps: [{ appName: \"App1\", data: \"0xaa\" }],\n clsHexImage: \"0x0102\",\n });\n\n const expectedStates: RestoreBackupDAState[] = [\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.GetIsOnboarded),\n pendingState(\n RestoreBackupSteps.RequestMasterConsent,\n UserInteractionRequired.GrantConsent,\n ),\n pendingState(RestoreBackupSteps.InstallLanguagePackage),\n pendingState(RestoreBackupSteps.InstallLanguagePackage),\n completedState({\n restoredLanguage: true,\n restoredCLS: false,\n restoredApps: [\n {\n appName: \"App1\",\n restoredApp: false,\n restoredAppStorage: false,\n },\n ],\n }),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(backup),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n it(\"should skip RequestMasterConsent when the device does not support the feature\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion();\n setupGetIsOnboarded();\n setupDeviceModel(DeviceModelId.NANO_X);\n setupRequestMasterConsent(); // registered but never invoked\n\n const expectedStates: RestoreBackupDAState[] = [\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.GetIsOnboarded),\n completedState({\n restoredLanguage: undefined,\n restoredCLS: undefined,\n restoredApps: undefined,\n }),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n it(\"should stop and complete immediately when master consent is rejected by the user\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion();\n setupGetIsOnboarded();\n setupDeviceModel(DeviceModelId.STAX);\n setupRequestMasterConsent(Right(RequestMasterConsentResult.REJECTED));\n setupInstallLanguagePackage(); // registered but never invoked\n\n const expectedStates: RestoreBackupDAState[] = [\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.GetIsOnboarded),\n pendingState(\n RestoreBackupSteps.RequestMasterConsent,\n UserInteractionRequired.GrantConsent,\n ),\n completedState({\n restoredLanguage: undefined,\n restoredCLS: undefined,\n restoredApps: undefined,\n }),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n it(\"should skip InstallOrUpdateApps and RestoreAppsStorage when the backup has no app\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion();\n setupGetIsOnboarded();\n setupDeviceModel(DeviceModelId.STAX);\n setupRequestMasterConsent();\n setupUploadCustomLockScreen();\n setupInstallOrUpdateApps(); // registered but never invoked\n setupRestoreAppsStorage(); // registered but never invoked\n\n const backup = makeBackup({ clsHexImage: \"0x0102\" });\n\n const expectedStates: RestoreBackupDAState[] = [\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.GetIsOnboarded),\n pendingState(\n RestoreBackupSteps.RequestMasterConsent,\n UserInteractionRequired.GrantConsent,\n ),\n pendingState(RestoreBackupSteps.UploadCustomLockScreen),\n pendingState(RestoreBackupSteps.UploadCustomLockScreen),\n completedState({\n restoredLanguage: undefined,\n restoredCLS: true,\n restoredApps: undefined,\n }),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(backup),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n it(\"should skip UploadCustomLockScreen when the device does not support the feature, even if a CLS was backed up\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion();\n setupGetIsOnboarded();\n setupDeviceModel(DeviceModelId.NANO_X);\n setupUploadCustomLockScreen(); // registered but never invoked\n\n const backup = makeBackup({ clsHexImage: \"0x0102\" });\n\n const expectedStates: RestoreBackupDAState[] = [\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.GetIsOnboarded),\n completedState({\n restoredLanguage: undefined,\n restoredCLS: false,\n restoredApps: undefined,\n }),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(backup),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n it(\"should skip UploadCustomLockScreen when no CLS was backed up, even on a supported device\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion();\n setupGetIsOnboarded();\n setupDeviceModel(DeviceModelId.STAX);\n setupRequestMasterConsent();\n setupUploadCustomLockScreen(); // registered but never invoked\n\n const expectedStates: RestoreBackupDAState[] = [\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.GetIsOnboarded),\n pendingState(\n RestoreBackupSteps.RequestMasterConsent,\n UserInteractionRequired.GrantConsent,\n ),\n completedState({\n restoredLanguage: undefined,\n restoredCLS: undefined,\n restoredApps: undefined,\n }),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n describe(\"UploadCustomLockScreen required user interactions\", () => {\n const runUploadCustomLockScreenInteractions = (\n deviceModelId: DeviceModelId,\n interactions: UserInteractionRequired[],\n ) =>\n new Promise<RestoreBackupDARequiredInteraction[]>((resolve, reject) => {\n setupWaitForAppAndVersion();\n setupGetIsOnboarded();\n setupDeviceModel(deviceModelId);\n setupRequestMasterConsent();\n setupUploadCustomLockScreenWithInteractions(interactions);\n\n const observed: RestoreBackupDARequiredInteraction[] = [];\n const { observable } = makeDeviceAction(\n makeBackup({ clsHexImage: \"0x0102\" }),\n )._execute(makeDeviceActionInternalApiMock());\n observable.subscribe({\n next: (state) => {\n if (\n state.status === DeviceActionStatus.Pending &&\n state.intermediateValue.step ===\n RestoreBackupSteps.UploadCustomLockScreen\n ) {\n observed.push(state.intermediateValue.requiredUserInteraction);\n }\n },\n error: reject,\n complete: () => resolve(observed),\n });\n });\n\n const interactions = [\n UserInteractionRequired.UnlockDevice,\n UserInteractionRequired.ConfirmLoadImage,\n UserInteractionRequired.ConfirmCommitImage,\n ];\n\n it(\"should hide confirm load/commit image interactions but keep the others when master consent is granted\", async () => {\n const observed = await runUploadCustomLockScreenInteractions(\n DeviceModelId.STAX,\n interactions,\n );\n\n expect(observed).toContain(UserInteractionRequired.UnlockDevice);\n expect(observed).not.toContain(\n UserInteractionRequired.ConfirmLoadImage,\n );\n expect(observed).not.toContain(\n UserInteractionRequired.ConfirmCommitImage,\n );\n });\n });\n\n it(\"should not fail and should keep going when the user refuses the language pack, app install, and CLS upload prompts\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion();\n setupGetIsOnboarded();\n setupDeviceModel(DeviceModelId.STAX);\n setupRequestMasterConsent();\n setupInstallLanguagePackage(Left(new RefusedByUserDAError()));\n setupInstallOrUpdateApps(Left(new RefusedByUserDAError()));\n setupRestoreAppsStorage(Right([]));\n setupUploadCustomLockScreen(Left(new RefusedByUserDAError()));\n\n const backup = makeBackup({\n languageId: 1, // french\n installedApps: [{ appName: \"App1\", data: \"0xaa\" }],\n clsHexImage: \"0x0102\",\n });\n\n const expectedStates: RestoreBackupDAState[] = [\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.GetIsOnboarded),\n pendingState(\n RestoreBackupSteps.RequestMasterConsent,\n UserInteractionRequired.GrantConsent,\n ),\n pendingState(RestoreBackupSteps.InstallLanguagePackage),\n pendingState(RestoreBackupSteps.InstallLanguagePackage),\n pendingState(RestoreBackupSteps.InstallOrUpdateApps),\n pendingState(RestoreBackupSteps.InstallOrUpdateApps),\n pendingState(RestoreBackupSteps.RestoreAppsStorage),\n pendingState(RestoreBackupSteps.RestoreAppsStorage),\n pendingState(RestoreBackupSteps.UploadCustomLockScreen),\n pendingState(RestoreBackupSteps.UploadCustomLockScreen),\n completedState({\n restoredLanguage: false,\n restoredCLS: false,\n restoredApps: [\n {\n appName: \"App1\",\n restoredApp: false,\n restoredAppStorage: false,\n },\n ],\n }),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(backup),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n });\n\n // \u2500\u2500\u2500 Error \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n describe(\"Error\", () => {\n it(\"should go to Error when waitForAppAndVersion returns Left\", () =>\n new Promise<void>((resolve, reject) => {\n const error = new UnknownDAError(\"waitForAppAndVersion failed\");\n vi.mocked(waitForAppAndVersion).mockReturnValue(\n createMockActorMachine(Left(error)) as unknown as ReturnType<\n typeof waitForAppAndVersion\n >,\n );\n\n const expectedStates: RestoreBackupDAState[] = [\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n errorState(error),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n it(\"should go to Error when goToDashboard returns Left\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion(\"Bitcoin\");\n const error = new UnknownDAError(\"goToDashboard failed\");\n setupGoToDashboard(Left(error));\n\n const expectedStates: RestoreBackupDAState[] = [\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.GoToDashboard),\n pendingState(RestoreBackupSteps.GoToDashboard),\n errorState(error),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n it(\"should go to Error when getIsOnboarded returns Left\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion();\n const error = new GetIsOnboardedError(new Error(\"command failed\"));\n setupGetIsOnboarded(Left(error));\n\n const expectedStates: RestoreBackupDAState[] = [\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.GetIsOnboarded),\n errorState(error),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n it(\"should go to Error when requestMasterConsent fails with a fatal (non-refusal) error\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion();\n setupGetIsOnboarded();\n setupDeviceModel(DeviceModelId.STAX);\n const error = new RequestMasterConsentError(\n new Error(\"command failed\"),\n );\n setupRequestMasterConsent(Left(error));\n\n const expectedStates: RestoreBackupDAState[] = [\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.GetIsOnboarded),\n pendingState(\n RestoreBackupSteps.RequestMasterConsent,\n UserInteractionRequired.GrantConsent,\n ),\n errorState(error),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n it(\"should go to Error when installLanguagePackage fails with a fatal (non-refusal) error\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion();\n setupGetIsOnboarded();\n setupDeviceModel(DeviceModelId.STAX);\n setupRequestMasterConsent();\n const error = new UnknownDAError(\"installLanguagePackage failed\");\n setupInstallLanguagePackage(Left(error));\n\n const backup = makeBackup({ languageId: 1 }); // french\n\n const expectedStates: RestoreBackupDAState[] = [\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.GetIsOnboarded),\n pendingState(\n RestoreBackupSteps.RequestMasterConsent,\n UserInteractionRequired.GrantConsent,\n ),\n pendingState(RestoreBackupSteps.InstallLanguagePackage),\n pendingState(RestoreBackupSteps.InstallLanguagePackage),\n errorState(error),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(backup),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n it(\"should go to Error when installOrUpdateApps fails with a fatal (non-refusal) error\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion();\n setupGetIsOnboarded();\n setupDeviceModel(DeviceModelId.STAX);\n setupRequestMasterConsent();\n const error = new UnknownDAError(\"installOrUpdateApps failed\");\n setupInstallOrUpdateApps(Left(error));\n\n const backup = makeBackup({\n installedApps: [{ appName: \"App1\", data: \"0xaa\" }],\n });\n\n const expectedStates: RestoreBackupDAState[] = [\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.GetIsOnboarded),\n pendingState(\n RestoreBackupSteps.RequestMasterConsent,\n UserInteractionRequired.GrantConsent,\n ),\n pendingState(RestoreBackupSteps.InstallOrUpdateApps),\n pendingState(RestoreBackupSteps.InstallOrUpdateApps),\n errorState(error),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(backup),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n it(\"should go to Error when restoreAppsStorage returns Left\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion();\n setupGetIsOnboarded();\n setupDeviceModel(DeviceModelId.STAX);\n setupRequestMasterConsent();\n setupInstallOrUpdateApps(\n Right({\n successfullyInstalled: [{ versionName: \"App1\" }],\n alreadyInstalled: [],\n missingApplications: [],\n }),\n );\n const error = new UnknownDAError(\"restoreAppsStorage failed\");\n setupRestoreAppsStorage(Left(error));\n\n const backup = makeBackup({\n installedApps: [{ appName: \"App1\", data: \"0xaa\" }],\n });\n\n const expectedStates: RestoreBackupDAState[] = [\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.GetIsOnboarded),\n pendingState(\n RestoreBackupSteps.RequestMasterConsent,\n UserInteractionRequired.GrantConsent,\n ),\n pendingState(RestoreBackupSteps.InstallOrUpdateApps),\n pendingState(RestoreBackupSteps.InstallOrUpdateApps),\n pendingState(RestoreBackupSteps.RestoreAppsStorage),\n pendingState(RestoreBackupSteps.RestoreAppsStorage),\n errorState(error),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(backup),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n it(\"should go to Error when uploadCustomLockScreen fails with a fatal (non-refusal) error\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion();\n setupGetIsOnboarded();\n setupDeviceModel(DeviceModelId.STAX);\n setupRequestMasterConsent();\n const error = new UnknownDAError(\"uploadCustomLockScreen failed\");\n setupUploadCustomLockScreen(Left(error));\n\n const backup = makeBackup({ clsHexImage: \"0x0102\" });\n\n const expectedStates: RestoreBackupDAState[] = [\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.WaitForAppAndVersion),\n pendingState(RestoreBackupSteps.GetIsOnboarded),\n pendingState(\n RestoreBackupSteps.RequestMasterConsent,\n UserInteractionRequired.GrantConsent,\n ),\n pendingState(RestoreBackupSteps.UploadCustomLockScreen),\n pendingState(RestoreBackupSteps.UploadCustomLockScreen),\n errorState(error),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(backup),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n });\n});\n"],
5
+ "mappings": "AAAA,OACE,sBAAAA,EACA,iBAAAC,EACA,wBAAAC,EAEA,kBAAAC,EACA,2BAAAC,MACK,kCACP,OAAsB,QAAAC,EAAM,SAAAC,MAAa,YACzC,OAAS,UAAAC,EAAQ,iBAAAC,MAAqB,SAEtC,OAAS,mCAAAC,MAAuC,oDAChD,OAAS,0BAAAC,MAA8B,2DAEvC,OAAS,6BAAAC,MAAiC,8EAC1C,OACE,uBAAAC,EACA,6BAAAC,MACK,oFACP,OAAS,kBAAAC,MAAsB,4EAC/B,OAAS,0BAAAC,MAA8B,oFACvC,OAAS,uBAAAC,MAA2B,iFACpC,OAAS,wBAAAC,MAA4B,kFACrC,OAAS,sBAAAC,MAA0B,gFACnC,OAAS,gCAAAC,MAAoC,oFAC7C,OACE,8BAAAC,EAKA,sBAAAC,MACK,0DACP,OAAS,iBAAAC,MAAqB,4DAC9B,OAAS,wBAAAC,MAA4B,mEAErC,GAAG,KAAK,kEAAkE,EAC1E,GAAG,KAAK,2DAA2D,EACnE,GAAG,KACD,2EACF,EACA,GAAG,KACD,iFACF,EACA,GAAG,KACD,mFACF,EACA,GAAG,KACD,gFACF,EACA,GAAG,KACD,+EACF,EACA,GAAG,KACD,mFACF,EAIA,MAAMC,EAAe,CACnBC,EACAC,EAA8DtB,EAAwB,QAC5D,CAC1B,OAAQJ,EAAmB,QAC3B,kBAAmB,CACjB,wBAAA0B,EACA,KAAAD,CACF,CACF,GAEME,EACJC,IAC0B,CAC1B,OAAQ5B,EAAmB,UAC3B,OAAA4B,CACF,GAEMC,EAAcC,IAAuD,CACzE,OAAQ9B,EAAmB,MAC3B,MAAA8B,CACF,GAQMC,EACJH,GAEApB,EAAc,CACZ,QAAS,QACT,OAAQ,CACN,MAAO,CACL,MAAO,CAAE,EAAG,MAAO,EACnB,MAAOD,EAAO,CACZ,kBAAmB,KAAO,CACxB,wBAAyBH,EAAwB,IACnD,EACF,CAAC,CACH,EACA,KAAM,CAAE,KAAM,OAAQ,CACxB,EACA,OAAAwB,CACF,CAAC,EAEGI,EAA0BJ,GAC9BG,EAAiC,IAAMH,CAAM,EAKzCK,EAAyC,CAC7CC,EACAN,IAEApB,EAAc,CACZ,QAAS,eACT,OAAQ,CACN,GAAG,OAAO,YACR0B,EAAa,IAAI,CAACR,EAAyBS,IAAU,CACnD,cAAcA,CAAK,GACnB,CACE,MAAO,CACL,EACEA,EAAQ,EAAID,EAAa,OACrB,cAAcC,EAAQ,CAAC,GACvB,MACR,EACA,MAAO5B,EAAO,CACZ,kBAAmB,KAAO,CAAE,wBAAAmB,CAAwB,EACtD,CAAC,CACH,CACF,CAAC,CACH,EACA,KAAM,CAAE,KAAM,OAAQ,CACxB,EACA,OAAQ,IAAME,CAChB,CAAC,EAIGQ,EAAa,CAACC,EAA6B,CAAC,KAAe,CAC/D,WAAY,OACZ,cAAe,CAAC,EAChB,YAAa,OACb,UAAW,IAAI,KACf,GAAGA,CACL,GAIA,SAAS,4BAA6B,IAAM,CAC1C,KAAM,CAAE,eAAgBC,CAAmB,EACzC7B,EAAgC,EAElC,WAAW,IAAM,CACf,GAAG,cAAc,EAEjB8B,EAAiBtC,EAAc,MAAM,CACvC,CAAC,EAID,MAAMuC,EAA4B,CAACC,EAAU,UAC3C,GACG,OAAOlB,CAAoB,EAC3B,gBACCS,EACE1B,EAAM,CAAE,KAAMmC,EAAS,QAAS,OAAQ,CAAC,CAC3C,CACF,EAEEC,EAAqCC,GAAuB,CAChE,MAAMC,EAAoB,CAAC,GAAGD,CAAQ,EACtC,GAAG,OAAOpB,CAAoB,EAAE,gBAC9BQ,EAAiC,IAC/BzB,EAAM,CACJ,KAAMsC,EAAkB,MAAM,GAAK,QACnC,QAAS,OACX,CAAC,CACH,CACF,CACF,EAEMC,EAAqB,CACzBjB,EAAmCtB,EAAM,MAAS,IAElD,GACG,OAAOgB,CAAa,EACpB,gBACCU,EAAuBJ,CAAM,CAG/B,EAEEkB,EAAsB,CAC1BC,EAA0DzC,EAAM,CAC9D,kBAAmB,EACrB,CAAC,IAED,GACG,OAAOQ,CAAc,EACrB,gBACC,IACE,QAAQ,QAAQiC,CAAM,CAG1B,EAEEC,EAA4B,CAChCD,EAAsDzC,EACpDc,EAA2B,OAC7B,IAEA,GACG,OAAOH,CAAoB,EAC3B,gBACC,IACE,QAAQ,QAAQ8B,CAAM,CAG1B,EAEEE,EAA8B,CAClCrB,EAAmCtB,EAAM,MAAS,IAElD,GACG,OAAOS,CAAsB,EAC7B,gBACCiB,EAAuBJ,CAAM,CAG/B,EAEEsB,EAA2B,CAC/BtB,EAAmCtB,EAAM,CACvC,sBAAuB,CAAC,EACxB,iBAAkB,CAAC,EACnB,oBAAqB,CAAC,CACxB,CAAC,IAED,GACG,OAAOU,CAAmB,EAC1B,gBACCgB,EAAuBJ,CAAM,CAG/B,EAEEuB,EAA0B,CAC9BvB,EAAmCtB,EAAM,CAAC,CAAC,IAE3C,GACG,OAAOY,CAAkB,EACzB,gBACCc,EAAuBJ,CAAM,CAG/B,EAEEwB,EAA8B,CAClCxB,EAAmCtB,EAAM,MAAS,IAElD,GACG,OAAOa,CAA4B,EACnC,gBACCa,EAAuBJ,CAAM,CAG/B,EAEEyB,EACJnB,GAEA,GACG,OAAOf,CAA4B,EACnC,gBACCc,EACEC,EACA5B,EAAM,MAAS,CACjB,CACF,EAEEiC,EAAoBe,GACxBhB,EAAmB,gBAAgB,CAAE,GAAAgB,CAAG,CAAyB,EAE7DC,EAAmB,CAACC,EAAiBpB,EAAW,IACpD,IAAIzB,EAA0B,CAC5B,MAAO,CAAE,OAAA6C,EAAQ,cAAe,GAAO,CACzC,CAAC,EAIH,SAAS,UAAW,IAAM,CACxB,GAAG,iEAAkE,IACnE,IAAI,QAAc,CAACC,EAASC,IAAW,CACrClB,EAA0B,EAC1BM,EAAoB,EACpBP,EAAiBtC,EAAc,IAAI,EACnC+C,EAA0B,EAC1BC,EAA4B,EAC5BC,EACE5C,EAAM,CACJ,sBAAuB,CAAC,CAAE,YAAa,MAAO,CAAC,EAC/C,iBAAkB,CAAC,EACnB,oBAAqB,CAAC,CACxB,CAAC,CACH,EACA6C,EACE7C,EAAM,CAAC,CAAE,QAAS,OAAQ,mBAAoB,EAAK,CAAC,CAAC,CACvD,EACA8C,EAA4B,EAE5B,MAAMI,EAASpB,EAAW,CACxB,WAAY,EACZ,cAAe,CAAC,CAAE,QAAS,OAAQ,KAAM,MAAO,CAAC,EACjD,YAAa,QACf,CAAC,EAEKuB,EAAyC,CAC7CnC,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,cAAc,EAC9CG,EACEH,EAAmB,qBACnBjB,EAAwB,YAC1B,EACAoB,EAAaH,EAAmB,sBAAsB,EACtDG,EAAaH,EAAmB,sBAAsB,EACtDG,EAAaH,EAAmB,mBAAmB,EACnDG,EAAaH,EAAmB,mBAAmB,EACnDG,EAAaH,EAAmB,kBAAkB,EAClDG,EAAaH,EAAmB,kBAAkB,EAClDG,EAAaH,EAAmB,sBAAsB,EACtDG,EAAaH,EAAmB,sBAAsB,EACtDM,EAAe,CACb,iBAAkB,GAClB,YAAa,GACb,aAAc,CACZ,CAAE,QAAS,OAAQ,YAAa,GAAM,mBAAoB,EAAK,CACjE,CACF,CAAC,CACH,EAEAjB,EACE6C,EAAiBC,CAAM,EACvBG,EACAlD,EAAgC,EAChC,CAAE,OAAQgD,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,EAEJ,GAAG,gFAAiF,IAClF,IAAI,QAAc,CAACD,EAASC,IAAW,CACrChB,EAAkC,CAAC,UAAW,OAAO,CAAC,EACtDG,EAAmB,EACnBC,EAAoB,EACpBP,EAAiBtC,EAAc,MAAM,EAErC,MAAM0D,EAAyC,CAC7CnC,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,aAAa,EAC7CG,EAAaH,EAAmB,aAAa,EAC7CG,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,cAAc,EAC9CM,EAAe,CACb,iBAAkB,OAClB,YAAa,OACb,aAAc,MAChB,CAAC,CACH,EAEAjB,EACE6C,EAAiB,EACjBI,EACAlD,EAAgC,EAChC,CAAE,OAAQgD,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,EAEJ,GAAG,qGAAsG,IACvG,IAAI,QAAc,CAACD,EAASC,IAAW,CACrClB,EAA0B,EAC1BM,EAAoBxC,EAAM,CAAE,kBAAmB,EAAM,CAAC,CAAC,EACvDiC,EAAiBtC,EAAc,IAAI,EACnC+C,EAA0B,EAC1BC,EAA4B,EAE5B,MAAMO,EAASpB,EAAW,CACxB,WAAY,EACZ,cAAe,CAAC,CAAE,QAAS,OAAQ,KAAM,MAAO,CAAC,EACjD,YAAa,QACf,CAAC,EAEKuB,EAAyC,CAC7CnC,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,cAAc,EAC9CG,EACEH,EAAmB,qBACnBjB,EAAwB,YAC1B,EACAoB,EAAaH,EAAmB,sBAAsB,EACtDG,EAAaH,EAAmB,sBAAsB,EACtDM,EAAe,CACb,iBAAkB,GAClB,YAAa,GACb,aAAc,CACZ,CACE,QAAS,OACT,YAAa,GACb,mBAAoB,EACtB,CACF,CACF,CAAC,CACH,EAEAjB,EACE6C,EAAiBC,CAAM,EACvBG,EACAlD,EAAgC,EAChC,CAAE,OAAQgD,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,EAEJ,GAAG,gFAAiF,IAClF,IAAI,QAAc,CAACD,EAASC,IAAW,CACrClB,EAA0B,EAC1BM,EAAoB,EACpBP,EAAiBtC,EAAc,MAAM,EACrC+C,EAA0B,EAE1B,MAAMW,EAAyC,CAC7CnC,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,cAAc,EAC9CM,EAAe,CACb,iBAAkB,OAClB,YAAa,OACb,aAAc,MAChB,CAAC,CACH,EAEAjB,EACE6C,EAAiB,EACjBI,EACAlD,EAAgC,EAChC,CAAE,OAAQgD,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,EAEJ,GAAG,mFAAoF,IACrF,IAAI,QAAc,CAACD,EAASC,IAAW,CACrClB,EAA0B,EAC1BM,EAAoB,EACpBP,EAAiBtC,EAAc,IAAI,EACnC+C,EAA0B1C,EAAMc,EAA2B,QAAQ,CAAC,EACpE6B,EAA4B,EAE5B,MAAMU,EAAyC,CAC7CnC,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,cAAc,EAC9CG,EACEH,EAAmB,qBACnBjB,EAAwB,YAC1B,EACAuB,EAAe,CACb,iBAAkB,OAClB,YAAa,OACb,aAAc,MAChB,CAAC,CACH,EAEAjB,EACE6C,EAAiB,EACjBI,EACAlD,EAAgC,EAChC,CAAE,OAAQgD,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,EAEJ,GAAG,oFAAqF,IACtF,IAAI,QAAc,CAACD,EAASC,IAAW,CACrClB,EAA0B,EAC1BM,EAAoB,EACpBP,EAAiBtC,EAAc,IAAI,EACnC+C,EAA0B,EAC1BI,EAA4B,EAC5BF,EAAyB,EACzBC,EAAwB,EAExB,MAAMK,EAASpB,EAAW,CAAE,YAAa,QAAS,CAAC,EAE7CuB,EAAyC,CAC7CnC,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,cAAc,EAC9CG,EACEH,EAAmB,qBACnBjB,EAAwB,YAC1B,EACAoB,EAAaH,EAAmB,sBAAsB,EACtDG,EAAaH,EAAmB,sBAAsB,EACtDM,EAAe,CACb,iBAAkB,OAClB,YAAa,GACb,aAAc,MAChB,CAAC,CACH,EAEAjB,EACE6C,EAAiBC,CAAM,EACvBG,EACAlD,EAAgC,EAChC,CAAE,OAAQgD,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,EAEJ,GAAG,+GAAgH,IACjH,IAAI,QAAc,CAACD,EAASC,IAAW,CACrClB,EAA0B,EAC1BM,EAAoB,EACpBP,EAAiBtC,EAAc,MAAM,EACrCmD,EAA4B,EAE5B,MAAMI,EAASpB,EAAW,CAAE,YAAa,QAAS,CAAC,EAE7CuB,EAAyC,CAC7CnC,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,cAAc,EAC9CM,EAAe,CACb,iBAAkB,OAClB,YAAa,GACb,aAAc,MAChB,CAAC,CACH,EAEAjB,EACE6C,EAAiBC,CAAM,EACvBG,EACAlD,EAAgC,EAChC,CAAE,OAAQgD,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,EAEJ,GAAG,2FAA4F,IAC7F,IAAI,QAAc,CAACD,EAASC,IAAW,CACrClB,EAA0B,EAC1BM,EAAoB,EACpBP,EAAiBtC,EAAc,IAAI,EACnC+C,EAA0B,EAC1BI,EAA4B,EAE5B,MAAMO,EAAyC,CAC7CnC,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,cAAc,EAC9CG,EACEH,EAAmB,qBACnBjB,EAAwB,YAC1B,EACAuB,EAAe,CACb,iBAAkB,OAClB,YAAa,OACb,aAAc,MAChB,CAAC,CACH,EAEAjB,EACE6C,EAAiB,EACjBI,EACAlD,EAAgC,EAChC,CAAE,OAAQgD,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,EAEJ,SAAS,oDAAqD,IAAM,CAClE,MAAME,EAAwC,CAC5CC,EACA3B,IAEA,IAAI,QAA8C,CAACuB,EAASC,IAAW,CACrElB,EAA0B,EAC1BM,EAAoB,EACpBP,EAAiBsB,CAAa,EAC9Bb,EAA0B,EAC1BK,EAA4CnB,CAAY,EAExD,MAAM4B,EAAiD,CAAC,EAClD,CAAE,WAAAC,CAAW,EAAIR,EACrBnB,EAAW,CAAE,YAAa,QAAS,CAAC,CACtC,EAAE,SAAS3B,EAAgC,CAAC,EAC5CsD,EAAW,UAAU,CACnB,KAAOC,GAAU,CAEbA,EAAM,SAAWhE,EAAmB,SACpCgE,EAAM,kBAAkB,OACtB3C,EAAmB,wBAErByC,EAAS,KAAKE,EAAM,kBAAkB,uBAAuB,CAEjE,EACA,MAAON,EACP,SAAU,IAAMD,EAAQK,CAAQ,CAClC,CAAC,CACH,CAAC,EAEG5B,EAAe,CACnB9B,EAAwB,aACxBA,EAAwB,iBACxBA,EAAwB,kBAC1B,EAEA,GAAG,wGAAyG,SAAY,CACtH,MAAM0D,EAAW,MAAMF,EACrB3D,EAAc,KACdiC,CACF,EAEA,OAAO4B,CAAQ,EAAE,UAAU1D,EAAwB,YAAY,EAC/D,OAAO0D,CAAQ,EAAE,IAAI,UACnB1D,EAAwB,gBAC1B,EACA,OAAO0D,CAAQ,EAAE,IAAI,UACnB1D,EAAwB,kBAC1B,CACF,CAAC,CACH,CAAC,EAED,GAAG,qHAAsH,IACvH,IAAI,QAAc,CAACqD,EAASC,IAAW,CACrClB,EAA0B,EAC1BM,EAAoB,EACpBP,EAAiBtC,EAAc,IAAI,EACnC+C,EAA0B,EAC1BC,EAA4B5C,EAAK,IAAIH,CAAsB,CAAC,EAC5DgD,EAAyB7C,EAAK,IAAIH,CAAsB,CAAC,EACzDiD,EAAwB7C,EAAM,CAAC,CAAC,CAAC,EACjC8C,EAA4B/C,EAAK,IAAIH,CAAsB,CAAC,EAE5D,MAAMsD,EAASpB,EAAW,CACxB,WAAY,EACZ,cAAe,CAAC,CAAE,QAAS,OAAQ,KAAM,MAAO,CAAC,EACjD,YAAa,QACf,CAAC,EAEKuB,EAAyC,CAC7CnC,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,cAAc,EAC9CG,EACEH,EAAmB,qBACnBjB,EAAwB,YAC1B,EACAoB,EAAaH,EAAmB,sBAAsB,EACtDG,EAAaH,EAAmB,sBAAsB,EACtDG,EAAaH,EAAmB,mBAAmB,EACnDG,EAAaH,EAAmB,mBAAmB,EACnDG,EAAaH,EAAmB,kBAAkB,EAClDG,EAAaH,EAAmB,kBAAkB,EAClDG,EAAaH,EAAmB,sBAAsB,EACtDG,EAAaH,EAAmB,sBAAsB,EACtDM,EAAe,CACb,iBAAkB,GAClB,YAAa,GACb,aAAc,CACZ,CACE,QAAS,OACT,YAAa,GACb,mBAAoB,EACtB,CACF,CACF,CAAC,CACH,EAEAjB,EACE6C,EAAiBC,CAAM,EACvBG,EACAlD,EAAgC,EAChC,CAAE,OAAQgD,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,CACN,CAAC,EAID,SAAS,QAAS,IAAM,CACtB,GAAG,4DAA6D,IAC9D,IAAI,QAAc,CAACD,EAASC,IAAW,CACrC,MAAM5B,EAAQ,IAAI3B,EAAe,6BAA6B,EAC9D,GAAG,OAAOoB,CAAoB,EAAE,gBAC9BS,EAAuB3B,EAAKyB,CAAK,CAAC,CAGpC,EAEA,MAAM6B,EAAyC,CAC7CnC,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,oBAAoB,EACpDQ,EAAWC,CAAK,CAClB,EAEApB,EACE6C,EAAiB,EACjBI,EACAlD,EAAgC,EAChC,CAAE,OAAQgD,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,EAEJ,GAAG,qDAAsD,IACvD,IAAI,QAAc,CAACD,EAASC,IAAW,CACrClB,EAA0B,SAAS,EACnC,MAAMV,EAAQ,IAAI3B,EAAe,sBAAsB,EACvD0C,EAAmBxC,EAAKyB,CAAK,CAAC,EAE9B,MAAM6B,EAAyC,CAC7CnC,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,aAAa,EAC7CG,EAAaH,EAAmB,aAAa,EAC7CQ,EAAWC,CAAK,CAClB,EAEApB,EACE6C,EAAiB,EACjBI,EACAlD,EAAgC,EAChC,CAAE,OAAQgD,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,EAEJ,GAAG,sDAAuD,IACxD,IAAI,QAAc,CAACD,EAASC,IAAW,CACrClB,EAA0B,EAC1B,MAAMV,EAAQ,IAAIlB,EAAoB,IAAI,MAAM,gBAAgB,CAAC,EACjEkC,EAAoBzC,EAAKyB,CAAK,CAAC,EAE/B,MAAM6B,EAAyC,CAC7CnC,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,cAAc,EAC9CQ,EAAWC,CAAK,CAClB,EAEApB,EACE6C,EAAiB,EACjBI,EACAlD,EAAgC,EAChC,CAAE,OAAQgD,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,EAEJ,GAAG,sFAAuF,IACxF,IAAI,QAAc,CAACD,EAASC,IAAW,CACrClB,EAA0B,EAC1BM,EAAoB,EACpBP,EAAiBtC,EAAc,IAAI,EACnC,MAAM6B,EAAQ,IAAIjB,EAChB,IAAI,MAAM,gBAAgB,CAC5B,EACAmC,EAA0B3C,EAAKyB,CAAK,CAAC,EAErC,MAAM6B,EAAyC,CAC7CnC,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,cAAc,EAC9CG,EACEH,EAAmB,qBACnBjB,EAAwB,YAC1B,EACAyB,EAAWC,CAAK,CAClB,EAEApB,EACE6C,EAAiB,EACjBI,EACAlD,EAAgC,EAChC,CAAE,OAAQgD,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,EAEJ,GAAG,wFAAyF,IAC1F,IAAI,QAAc,CAACD,EAASC,IAAW,CACrClB,EAA0B,EAC1BM,EAAoB,EACpBP,EAAiBtC,EAAc,IAAI,EACnC+C,EAA0B,EAC1B,MAAMlB,EAAQ,IAAI3B,EAAe,+BAA+B,EAChE8C,EAA4B5C,EAAKyB,CAAK,CAAC,EAEvC,MAAM0B,EAASpB,EAAW,CAAE,WAAY,CAAE,CAAC,EAErCuB,EAAyC,CAC7CnC,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,cAAc,EAC9CG,EACEH,EAAmB,qBACnBjB,EAAwB,YAC1B,EACAoB,EAAaH,EAAmB,sBAAsB,EACtDG,EAAaH,EAAmB,sBAAsB,EACtDQ,EAAWC,CAAK,CAClB,EAEApB,EACE6C,EAAiBC,CAAM,EACvBG,EACAlD,EAAgC,EAChC,CAAE,OAAQgD,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,EAEJ,GAAG,qFAAsF,IACvF,IAAI,QAAc,CAACD,EAASC,IAAW,CACrClB,EAA0B,EAC1BM,EAAoB,EACpBP,EAAiBtC,EAAc,IAAI,EACnC+C,EAA0B,EAC1B,MAAMlB,EAAQ,IAAI3B,EAAe,4BAA4B,EAC7D+C,EAAyB7C,EAAKyB,CAAK,CAAC,EAEpC,MAAM0B,EAASpB,EAAW,CACxB,cAAe,CAAC,CAAE,QAAS,OAAQ,KAAM,MAAO,CAAC,CACnD,CAAC,EAEKuB,EAAyC,CAC7CnC,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,cAAc,EAC9CG,EACEH,EAAmB,qBACnBjB,EAAwB,YAC1B,EACAoB,EAAaH,EAAmB,mBAAmB,EACnDG,EAAaH,EAAmB,mBAAmB,EACnDQ,EAAWC,CAAK,CAClB,EAEApB,EACE6C,EAAiBC,CAAM,EACvBG,EACAlD,EAAgC,EAChC,CAAE,OAAQgD,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,EAEJ,GAAG,0DAA2D,IAC5D,IAAI,QAAc,CAACD,EAASC,IAAW,CACrClB,EAA0B,EAC1BM,EAAoB,EACpBP,EAAiBtC,EAAc,IAAI,EACnC+C,EAA0B,EAC1BE,EACE5C,EAAM,CACJ,sBAAuB,CAAC,CAAE,YAAa,MAAO,CAAC,EAC/C,iBAAkB,CAAC,EACnB,oBAAqB,CAAC,CACxB,CAAC,CACH,EACA,MAAMwB,EAAQ,IAAI3B,EAAe,2BAA2B,EAC5DgD,EAAwB9C,EAAKyB,CAAK,CAAC,EAEnC,MAAM0B,EAASpB,EAAW,CACxB,cAAe,CAAC,CAAE,QAAS,OAAQ,KAAM,MAAO,CAAC,CACnD,CAAC,EAEKuB,EAAyC,CAC7CnC,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,cAAc,EAC9CG,EACEH,EAAmB,qBACnBjB,EAAwB,YAC1B,EACAoB,EAAaH,EAAmB,mBAAmB,EACnDG,EAAaH,EAAmB,mBAAmB,EACnDG,EAAaH,EAAmB,kBAAkB,EAClDG,EAAaH,EAAmB,kBAAkB,EAClDQ,EAAWC,CAAK,CAClB,EAEApB,EACE6C,EAAiBC,CAAM,EACvBG,EACAlD,EAAgC,EAChC,CAAE,OAAQgD,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,EAEJ,GAAG,wFAAyF,IAC1F,IAAI,QAAc,CAACD,EAASC,IAAW,CACrClB,EAA0B,EAC1BM,EAAoB,EACpBP,EAAiBtC,EAAc,IAAI,EACnC+C,EAA0B,EAC1B,MAAMlB,EAAQ,IAAI3B,EAAe,+BAA+B,EAChEiD,EAA4B/C,EAAKyB,CAAK,CAAC,EAEvC,MAAM0B,EAASpB,EAAW,CAAE,YAAa,QAAS,CAAC,EAE7CuB,EAAyC,CAC7CnC,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,oBAAoB,EACpDG,EAAaH,EAAmB,cAAc,EAC9CG,EACEH,EAAmB,qBACnBjB,EAAwB,YAC1B,EACAoB,EAAaH,EAAmB,sBAAsB,EACtDG,EAAaH,EAAmB,sBAAsB,EACtDQ,EAAWC,CAAK,CAClB,EAEApB,EACE6C,EAAiBC,CAAM,EACvBG,EACAlD,EAAgC,EAChC,CAAE,OAAQgD,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,CACN,CAAC,CACH,CAAC",
6
+ "names": ["DeviceActionStatus", "DeviceModelId", "RefusedByUserDAError", "UnknownDAError", "UserInteractionRequired", "Left", "Right", "assign", "createMachine", "makeDeviceActionInternalApiMock", "testDeviceActionStates", "RestoreBackupDeviceAction", "GetIsOnboardedError", "RequestMasterConsentError", "getIsOnboarded", "installLanguagePackage", "installOrUpdateApps", "requestMasterConsent", "restoreAppsStorage", "uploadCustomLockScreenDevice", "RequestMasterConsentResult", "RestoreBackupSteps", "goToDashboard", "waitForAppAndVersion", "pendingState", "step", "requiredUserInteraction", "completedState", "output", "errorState", "error", "createMockActorMachineFromOutput", "createMockActorMachine", "createMockActorMachineWithInteractions", "interactions", "index", "makeBackup", "overrides", "getDeviceModelMock", "setupDeviceModel", "setupWaitForAppAndVersion", "appName", "setupWaitForAppAndVersionSequence", "appNames", "remainingAppNames", "setupGoToDashboard", "setupGetIsOnboarded", "result", "setupRequestMasterConsent", "setupInstallLanguagePackage", "setupInstallOrUpdateApps", "setupRestoreAppsStorage", "setupUploadCustomLockScreen", "setupUploadCustomLockScreenWithInteractions", "id", "makeDeviceAction", "backup", "resolve", "reject", "expectedStates", "runUploadCustomLockScreenInteractions", "deviceModelId", "observed", "observable", "state"]
7
7
  }