@ledgerhq/dmk-ledger-wallet 0.6.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.
Files changed (44) hide show
  1. package/lib/cjs/api/device-action/OsUpdate/Restore/RestoreBackup/RestoreBackupDeviceAction.js +1 -1
  2. package/lib/cjs/api/device-action/OsUpdate/Restore/RestoreBackup/RestoreBackupDeviceAction.js.map +3 -3
  3. package/lib/cjs/api/device-action/OsUpdate/Restore/RestoreBackup/RestoreBackupDeviceAction.test.js +1 -1
  4. package/lib/cjs/api/device-action/OsUpdate/Restore/RestoreBackup/RestoreBackupDeviceAction.test.js.map +3 -3
  5. package/lib/cjs/api/device-action/OsUpdate/Update/FlashMcu/FlashMcuDeviceAction.js +1 -1
  6. package/lib/cjs/api/device-action/OsUpdate/Update/FlashMcu/FlashMcuDeviceAction.js.map +3 -3
  7. package/lib/cjs/api/device-action/OsUpdate/Update/FlashMcu/FlashMcuDeviceAction.test.js +1 -1
  8. package/lib/cjs/api/device-action/OsUpdate/Update/FlashMcu/FlashMcuDeviceAction.test.js.map +3 -3
  9. package/lib/cjs/api/device-action/OsUpdate/Update/FlashMcu/Substeps/ResolveMcuVersion.js +1 -1
  10. package/lib/cjs/api/device-action/OsUpdate/Update/FlashMcu/Substeps/ResolveMcuVersion.js.map +2 -2
  11. package/lib/cjs/api/device-action/OsUpdate/Update/FlashMcu/Substeps/ResolveMcuVersion.test.js +1 -1
  12. package/lib/cjs/api/device-action/OsUpdate/Update/FlashMcu/Substeps/ResolveMcuVersion.test.js.map +2 -2
  13. package/lib/cjs/api/device-action/OsUpdate/Update/FlashMcu/types.js +1 -1
  14. package/lib/cjs/api/device-action/OsUpdate/Update/FlashMcu/types.js.map +2 -2
  15. package/lib/cjs/index.js +1 -1
  16. package/lib/cjs/index.js.map +2 -2
  17. package/lib/cjs/package.json +2 -2
  18. package/lib/esm/api/device-action/OsUpdate/Restore/RestoreBackup/RestoreBackupDeviceAction.js +1 -1
  19. package/lib/esm/api/device-action/OsUpdate/Restore/RestoreBackup/RestoreBackupDeviceAction.js.map +3 -3
  20. package/lib/esm/api/device-action/OsUpdate/Restore/RestoreBackup/RestoreBackupDeviceAction.test.js +1 -1
  21. package/lib/esm/api/device-action/OsUpdate/Restore/RestoreBackup/RestoreBackupDeviceAction.test.js.map +3 -3
  22. package/lib/esm/api/device-action/OsUpdate/Update/FlashMcu/FlashMcuDeviceAction.js +1 -1
  23. package/lib/esm/api/device-action/OsUpdate/Update/FlashMcu/FlashMcuDeviceAction.js.map +3 -3
  24. package/lib/esm/api/device-action/OsUpdate/Update/FlashMcu/FlashMcuDeviceAction.test.js +1 -1
  25. package/lib/esm/api/device-action/OsUpdate/Update/FlashMcu/FlashMcuDeviceAction.test.js.map +3 -3
  26. package/lib/esm/api/device-action/OsUpdate/Update/FlashMcu/Substeps/ResolveMcuVersion.js +1 -1
  27. package/lib/esm/api/device-action/OsUpdate/Update/FlashMcu/Substeps/ResolveMcuVersion.js.map +2 -2
  28. package/lib/esm/api/device-action/OsUpdate/Update/FlashMcu/Substeps/ResolveMcuVersion.test.js +1 -1
  29. package/lib/esm/api/device-action/OsUpdate/Update/FlashMcu/Substeps/ResolveMcuVersion.test.js.map +2 -2
  30. package/lib/esm/api/device-action/OsUpdate/Update/FlashMcu/types.js.map +2 -2
  31. package/lib/esm/index.js +1 -1
  32. package/lib/esm/index.js.map +2 -2
  33. package/lib/esm/package.json +2 -2
  34. package/lib/types/api/device-action/OsUpdate/Restore/RestoreBackup/RestoreBackupDeviceAction.d.ts.map +1 -1
  35. package/lib/types/api/device-action/OsUpdate/Update/FlashMcu/FlashMcuDeviceAction.d.ts +3 -3
  36. package/lib/types/api/device-action/OsUpdate/Update/FlashMcu/FlashMcuDeviceAction.d.ts.map +1 -1
  37. package/lib/types/api/device-action/OsUpdate/Update/FlashMcu/Substeps/ResolveMcuVersion.d.ts +2 -2
  38. package/lib/types/api/device-action/OsUpdate/Update/FlashMcu/Substeps/ResolveMcuVersion.d.ts.map +1 -1
  39. package/lib/types/api/device-action/OsUpdate/Update/FlashMcu/types.d.ts +10 -2
  40. package/lib/types/api/device-action/OsUpdate/Update/FlashMcu/types.d.ts.map +1 -1
  41. package/lib/types/index.d.ts +1 -1
  42. package/lib/types/index.d.ts.map +1 -1
  43. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  44. package/package.json +6 -6
@@ -1,2 +1,2 @@
1
- "use strict";var d=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var B=Object.prototype.hasOwnProperty;var V=(n,r)=>{for(var s in r)d(n,s,{get:r[s],enumerable:!0})},O=(n,r,s,p)=>{if(r&&typeof r=="object"||typeof r=="function")for(let e of x(r))!B.call(n,e)&&e!==s&&d(n,e,{get:()=>r[e],enumerable:!(p=y(r,e))||p.enumerable});return n};var T=n=>O(d({},"__esModule",{value:!0}),n);var M={};V(M,{RestoreBackupDeviceAction:()=>F});module.exports=T(M);var o=require("@ledgerhq/device-management-kit"),l=require("purify-ts"),a=require("xstate"),S=require("../../../../command/OsUpdate/Restore/RequestMasterConsentCommand"),A=require("../../../../customLockScreenUtils/screenSpecs"),h=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/GetIsOnboarded"),D=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/InstallLanguagePackage"),f=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/InstallOrUpdateApps"),R=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/RequestMasterConsent"),E=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/RestoreAppsStorage"),C=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/UploadCustomLockScreen"),i=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/types"),I=require("../../../../device-action/OsUpdate/Shared/Substeps/GoToDashboard"),v=require("../../../../device-action/OsUpdate/Shared/Substeps/WaitForAppAndVersion");const L="english",k=n=>n===void 0?void 0:o.LANGUAGE_ID_TO_LANGUAGE[n],g=n=>{const r=k(n);return r!==void 0&&r!==L},m=n=>n instanceof o.RefusedByUserDAError,U=(n,r)=>n?.map(s=>{const p=r.find(e=>e.appName===s.appName);return p?{...s,restoredAppStorage:p.restoredAppStorage}:s});class F extends o.XStateDeviceAction{makeStateMachine(r){const{backup:s,unlockTimeout:p}=this.input;return(0,a.setup)({types:{input:{},output:{},context:{}},actors:{waitForAppAndVersion:(0,v.waitForAppAndVersion)(r,p),goToDashboard:(0,I.goToDashboard)(r,p),getIsOnboarded:(0,a.fromPromise)((0,h.getIsOnboarded)(r)),requestMasterConsent:(0,a.fromPromise)((0,R.requestMasterConsent)(r)),installLanguagePackage:(0,D.installLanguagePackage)(r,p,k(s.languageId)??L),installOrUpdateApps:(0,f.installOrUpdateApps)(r,p,s.installedApps.map(e=>({name:e.appName}))),restoreAppsStorage:(0,E.restoreAppsStorage)(r,p),uploadCustomLockScreen:(0,C.uploadCustomLockScreenDevice)(r,p,(0,o.hexaStringToBuffer)(s.clsHexImage??"")??new Uint8Array(0))},guards:{isDeviceOnDashboard:({context:e})=>(0,o.isDashboardName)(e._internalState.currentApp),isDeviceOnboarded:({context:e})=>e._internalState.isDeviceOnboarded,isMasterConsentFeatureSupported:()=>(0,S.isMasterConsentSupported)(r.getDeviceModel().id),hasBackedUpNonEnglishLanguage:({context:e})=>g(e.input.backup.languageId),hasAppsToReinstall:({context:e})=>e.input.backup.installedApps.length>0,isCustomLockScreenFeatureSupported:()=>(0,A.isCustomLockScreenSupported)(r.getDeviceModel().id),hasBackedUpCustomLockScreen:({context:e})=>e.input.backup.clsHexImage!==void 0,hasError:({context:e})=>e._internalState.error!==null},actions:{assignErrorFromEvent:(0,a.assign)({_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:o.UserInteractionRequired.None,step:i.RestoreBackupSteps.Idle},_internalState:{error:null,currentApp:null,isDeviceOnboarded:!1,isMasterConsentGranted:!1,restoredLanguage:g(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:(0,a.assign)({intermediateValue:e=>({...e.context.intermediateValue,step:i.RestoreBackupSteps.WaitForAppAndVersion})}),invoke:{src:"waitForAppAndVersion",input:({context:e})=>({unlockTimeout:e.input.unlockTimeout}),onSnapshot:{actions:(0,a.assign)({intermediateValue:e=>({...e.event.snapshot.context.intermediateValue,step:e.context.intermediateValue.step})})},onDone:{actions:(0,a.assign)({_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:(0,a.assign)({intermediateValue:e=>({...e.context.intermediateValue,step:i.RestoreBackupSteps.GoToDashboard})}),invoke:{src:"goToDashboard",input:({context:e})=>({unlockTimeout:e.input.unlockTimeout}),onSnapshot:{actions:(0,a.assign)({intermediateValue:e=>({...e.event.snapshot.context.intermediateValue,step:e.context.intermediateValue.step})})},onDone:{actions:(0,a.assign)({_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:(0,a.assign)({intermediateValue:e=>({...e.context.intermediateValue,step:i.RestoreBackupSteps.GetIsOnboarded})}),invoke:{src:"getIsOnboarded",onDone:{actions:(0,a.assign)({_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:(0,a.assign)({intermediateValue:e=>({...e.context.intermediateValue,step:i.RestoreBackupSteps.RequestMasterConsent,requiredUserInteraction:o.UserInteractionRequired.GrantConsent})}),exit:(0,a.assign)({intermediateValue:e=>({...e.context.intermediateValue,requiredUserInteraction:o.UserInteractionRequired.None})}),invoke:{src:"requestMasterConsent",input:({context:e})=>{const{backup:t}=e.input;return{languagePackConsentEnabled:!g(t.languageId),lockScreenPictureConsentEnabled:t.clsHexImage===void 0,appNumber:t.installedApps.length,appStorageNumber:t.installedApps.filter(c=>c.data===void 0).length}},onDone:[{guard:({event:e})=>e.output.isLeft(),actions:(0,a.assign)({_internalState:({event:e,context:t})=>({...t._internalState,error:e.output.extract()})}),target:"Error"},{guard:({event:e})=>e.output.extract()===i.RequestMasterConsentResult.REJECTED,actions:(0,a.assign)({_internalState:({context:e})=>({...e._internalState,isMasterConsentGranted:!1})}),target:"Success"},{actions:(0,a.assign)({_internalState:({context:e})=>({...e._internalState,isMasterConsentGranted:!0})}),target:"CheckBackedUpLanguage"}],onError:{actions:"assignErrorFromEvent",target:"Error"}}},CheckBackedUpLanguage:{always:[{guard:"hasBackedUpNonEnglishLanguage",target:"InstallLanguagePackage"},{target:"CheckIfDeviceIsOnboarded"}]},InstallLanguagePackage:{entry:(0,a.assign)({intermediateValue:e=>({...e.context.intermediateValue,step:i.RestoreBackupSteps.InstallLanguagePackage})}),invoke:{src:"installLanguagePackage",input:({context:e})=>({unlockTimeout:e.input.unlockTimeout,language:k(e.input.backup.languageId)}),onSnapshot:{actions:(0,a.assign)({intermediateValue:e=>({...e.event.snapshot.context.intermediateValue,step:e.context.intermediateValue.step})})},onDone:{actions:(0,a.assign)({_internalState:e=>e.event.output.caseOf({Left:t=>m(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:(0,a.assign)({intermediateValue:e=>({...e.context.intermediateValue,step:i.RestoreBackupSteps.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:(0,a.assign)({intermediateValue:e=>({...e.event.snapshot.context.intermediateValue,step:e.context.intermediateValue.step})})},onDone:{actions:(0,a.assign)({_internalState:e=>e.event.output.caseOf({Left:t=>m(t)?{...e.context._internalState,appsToRestoreStorage:[]}:{...e.context._internalState,error:t},Right:t=>{const c=new Set([...t.successfullyInstalled.map(u=>u.versionName),...t.alreadyInstalled]),{backup:b}=e.context.input;return{...e.context._internalState,restoredApps:e.context._internalState.restoredApps?.map(u=>({...u,restoredApp:c.has(u.appName)})),appsToRestoreStorage:b.installedApps.filter(u=>c.has(u.appName)&&u.data!==void 0)}}})}),target:"CheckInstallOrUpdateApps"},onError:{actions:"assignErrorFromEvent",target:"Error"}}},CheckInstallOrUpdateApps:{always:[{guard:"hasError",target:"Error"},{target:"RestoreAppsStorage"}]},RestoreAppsStorage:{entry:(0,a.assign)({intermediateValue:e=>({...e.context.intermediateValue,step:i.RestoreBackupSteps.RestoreAppsStorage})}),invoke:{src:"restoreAppsStorage",input:({context:e})=>({backupApps:e._internalState.appsToRestoreStorage,isMasterConsentGranted:e._internalState.isMasterConsentGranted,unlockTimeout:e.input.unlockTimeout}),onSnapshot:{actions:(0,a.assign)({intermediateValue:e=>({...e.event.snapshot.context.intermediateValue,step:e.context.intermediateValue.step})})},onDone:{actions:(0,a.assign)({_internalState:e=>e.event.output.caseOf({Left:t=>({...e.context._internalState,error:t}),Right:t=>({...e.context._internalState,restoredApps:U(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:(0,a.assign)({intermediateValue:e=>({...e.context.intermediateValue,step:i.RestoreBackupSteps.UploadCustomLockScreen})}),invoke:{src:"uploadCustomLockScreen",input:({context:e})=>({unlockTimeout:e.input.unlockTimeout,imageData:(0,o.hexaStringToBuffer)(e.input.backup.clsHexImage)}),onSnapshot:{actions:(0,a.assign)({intermediateValue:e=>({...e.event.snapshot.context.intermediateValue,step:e.context.intermediateValue.step})})},onDone:{actions:(0,a.assign)({_internalState:e=>e.event.output.caseOf({Left:t=>m(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?(0,l.Left)(e._internalState.error):(0,l.Right)({restoredLanguage:e._internalState.restoredLanguage,restoredCLS:e._internalState.restoredCLS,restoredApps:e._internalState.restoredApps})})}}0&&(module.exports={RestoreBackupDeviceAction});
1
+ "use strict";var d=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var B=Object.prototype.hasOwnProperty;var V=(o,r)=>{for(var s in r)d(o,s,{get:r[s],enumerable:!0})},O=(o,r,s,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let e of x(r))!B.call(o,e)&&e!==s&&d(o,e,{get:()=>r[e],enumerable:!(i=y(r,e))||i.enumerable});return o};var T=o=>O(d({},"__esModule",{value:!0}),o);var F={};V(F,{RestoreBackupDeviceAction:()=>M});module.exports=T(F);var n=require("@ledgerhq/device-management-kit"),l=require("purify-ts"),a=require("xstate"),S=require("../../../../command/OsUpdate/Restore/RequestMasterConsentCommand"),A=require("../../../../customLockScreenUtils/screenSpecs"),h=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/GetIsOnboarded"),f=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/InstallLanguagePackage"),D=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/InstallOrUpdateApps"),R=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/RequestMasterConsent"),C=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/RestoreAppsStorage"),E=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/UploadCustomLockScreen"),p=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/types"),I=require("../../../../device-action/OsUpdate/Shared/Substeps/GoToDashboard"),v=require("../../../../device-action/OsUpdate/Shared/Substeps/WaitForAppAndVersion");const L="english",k=o=>o===void 0?void 0:n.LANGUAGE_ID_TO_LANGUAGE[o],g=o=>{const r=k(o);return r!==void 0&&r!==L},m=o=>o instanceof n.RefusedByUserDAError,U=(o,r)=>o?.map(s=>{const i=r.find(e=>e.appName===s.appName);return i?{...s,restoredAppStorage:i.restoredAppStorage}:s});class M extends n.XStateDeviceAction{makeStateMachine(r){const{backup:s,unlockTimeout:i}=this.input;return(0,a.setup)({types:{input:{},output:{},context:{}},actors:{waitForAppAndVersion:(0,v.waitForAppAndVersion)(r,i),goToDashboard:(0,I.goToDashboard)(r,i),getIsOnboarded:(0,a.fromPromise)((0,h.getIsOnboarded)(r)),requestMasterConsent:(0,a.fromPromise)((0,R.requestMasterConsent)(r)),installLanguagePackage:(0,f.installLanguagePackage)(r,i,k(s.languageId)??L),installOrUpdateApps:(0,D.installOrUpdateApps)(r,i,s.installedApps.map(e=>({name:e.appName}))),restoreAppsStorage:(0,C.restoreAppsStorage)(r,i),uploadCustomLockScreen:(0,E.uploadCustomLockScreenDevice)(r,i,(0,n.hexaStringToBuffer)(s.clsHexImage??"")??new Uint8Array(0))},guards:{isDeviceOnDashboard:({context:e})=>(0,n.isDashboardName)(e._internalState.currentApp),isDeviceOnboarded:({context:e})=>e._internalState.isDeviceOnboarded,isMasterConsentFeatureSupported:()=>(0,S.isMasterConsentSupported)(r.getDeviceModel().id),hasBackedUpNonEnglishLanguage:({context:e})=>g(e.input.backup.languageId),hasAppsToReinstall:({context:e})=>e.input.backup.installedApps.length>0,isCustomLockScreenFeatureSupported:()=>(0,A.isCustomLockScreenSupported)(r.getDeviceModel().id),hasBackedUpCustomLockScreen:({context:e})=>e.input.backup.clsHexImage!==void 0,hasError:({context:e})=>e._internalState.error!==null},actions:{assignErrorFromEvent:(0,a.assign)({_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:n.UserInteractionRequired.None,step:p.RestoreBackupSteps.Idle},_internalState:{error:null,currentApp:null,isDeviceOnboarded:!1,isMasterConsentGranted:!1,restoredLanguage:g(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:(0,a.assign)({intermediateValue:e=>({...e.context.intermediateValue,step:p.RestoreBackupSteps.WaitForAppAndVersion})}),invoke:{src:"waitForAppAndVersion",input:({context:e})=>({unlockTimeout:e.input.unlockTimeout}),onSnapshot:{actions:(0,a.assign)({intermediateValue:e=>({...e.event.snapshot.context.intermediateValue,step:e.context.intermediateValue.step})})},onDone:{actions:(0,a.assign)({_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:(0,a.assign)({intermediateValue:e=>({...e.context.intermediateValue,step:p.RestoreBackupSteps.GoToDashboard})}),invoke:{src:"goToDashboard",input:({context:e})=>({unlockTimeout:e.input.unlockTimeout}),onSnapshot:{actions:(0,a.assign)({intermediateValue:e=>({...e.event.snapshot.context.intermediateValue,step:e.context.intermediateValue.step})})},onDone:{actions:(0,a.assign)({_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:(0,a.assign)({intermediateValue:e=>({...e.context.intermediateValue,step:p.RestoreBackupSteps.GetIsOnboarded})}),invoke:{src:"getIsOnboarded",onDone:{actions:(0,a.assign)({_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:(0,a.assign)({intermediateValue:e=>({...e.context.intermediateValue,step:p.RestoreBackupSteps.RequestMasterConsent,requiredUserInteraction:n.UserInteractionRequired.GrantConsent})}),exit:(0,a.assign)({intermediateValue:e=>({...e.context.intermediateValue,requiredUserInteraction:n.UserInteractionRequired.None})}),invoke:{src:"requestMasterConsent",input:({context:e})=>{const{backup:t}=e.input;return{languagePackConsentEnabled:!g(t.languageId),lockScreenPictureConsentEnabled:t.clsHexImage===void 0,appNumber:t.installedApps.length,appStorageNumber:t.installedApps.filter(c=>c.data===void 0).length}},onDone:[{guard:({event:e})=>e.output.isLeft(),actions:(0,a.assign)({_internalState:({event:e,context:t})=>({...t._internalState,error:e.output.extract()})}),target:"Error"},{guard:({event:e})=>e.output.extract()===p.RequestMasterConsentResult.REJECTED,actions:(0,a.assign)({_internalState:({context:e})=>({...e._internalState,isMasterConsentGranted:!1})}),target:"Success"},{actions:(0,a.assign)({_internalState:({context:e})=>({...e._internalState,isMasterConsentGranted:!0})}),target:"CheckBackedUpLanguage"}],onError:{actions:"assignErrorFromEvent",target:"Error"}}},CheckBackedUpLanguage:{always:[{guard:"hasBackedUpNonEnglishLanguage",target:"InstallLanguagePackage"},{target:"CheckIfDeviceIsOnboarded"}]},InstallLanguagePackage:{entry:(0,a.assign)({intermediateValue:e=>({...e.context.intermediateValue,step:p.RestoreBackupSteps.InstallLanguagePackage})}),invoke:{src:"installLanguagePackage",input:({context:e})=>({unlockTimeout:e.input.unlockTimeout,language:k(e.input.backup.languageId)}),onSnapshot:{actions:(0,a.assign)({intermediateValue:e=>({...e.event.snapshot.context.intermediateValue,step:e.context.intermediateValue.step})})},onDone:{actions:(0,a.assign)({_internalState:e=>e.event.output.caseOf({Left:t=>m(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:(0,a.assign)({intermediateValue:e=>({...e.context.intermediateValue,step:p.RestoreBackupSteps.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:(0,a.assign)({intermediateValue:e=>({...e.event.snapshot.context.intermediateValue,step:e.context.intermediateValue.step})})},onDone:{actions:(0,a.assign)({_internalState:e=>e.event.output.caseOf({Left:t=>m(t)?{...e.context._internalState,appsToRestoreStorage:[]}:{...e.context._internalState,error:t},Right:t=>{const c=new Set([...t.successfullyInstalled.map(u=>u.versionName),...t.alreadyInstalled]),{backup:b}=e.context.input;return{...e.context._internalState,restoredApps:e.context._internalState.restoredApps?.map(u=>({...u,restoredApp:c.has(u.appName)})),appsToRestoreStorage:b.installedApps.filter(u=>c.has(u.appName)&&u.data!==void 0)}}})}),target:"CheckInstallOrUpdateApps"},onError:{actions:"assignErrorFromEvent",target:"Error"}}},CheckInstallOrUpdateApps:{always:[{guard:"hasError",target:"Error"},{target:"RestoreAppsStorage"}]},RestoreAppsStorage:{entry:(0,a.assign)({intermediateValue:e=>({...e.context.intermediateValue,step:p.RestoreBackupSteps.RestoreAppsStorage})}),invoke:{src:"restoreAppsStorage",input:({context:e})=>({backupApps:e._internalState.appsToRestoreStorage,isMasterConsentGranted:e._internalState.isMasterConsentGranted,unlockTimeout:e.input.unlockTimeout}),onSnapshot:{actions:(0,a.assign)({intermediateValue:e=>({...e.event.snapshot.context.intermediateValue,step:e.context.intermediateValue.step})})},onDone:{actions:(0,a.assign)({_internalState:e=>e.event.output.caseOf({Left:t=>({...e.context._internalState,error:t}),Right:t=>({...e.context._internalState,restoredApps:U(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:(0,a.assign)({intermediateValue:e=>({...e.context.intermediateValue,step:p.RestoreBackupSteps.UploadCustomLockScreen})}),invoke:{src:"uploadCustomLockScreen",input:({context:e})=>({unlockTimeout:e.input.unlockTimeout,imageData:(0,n.hexaStringToBuffer)(e.input.backup.clsHexImage)}),onSnapshot:{actions:(0,a.assign)({intermediateValue:e=>{const{intermediateValue:t}=e.event.snapshot.context,c=e.context._internalState.isMasterConsentGranted&&(t.requiredUserInteraction===n.UserInteractionRequired.ConfirmLoadImage||t.requiredUserInteraction===n.UserInteractionRequired.ConfirmCommitImage);return{...t,...c?{requiredUserInteraction:n.UserInteractionRequired.None}:{},step:e.context.intermediateValue.step}}})},onDone:{actions:(0,a.assign)({_internalState:e=>e.event.output.caseOf({Left:t=>m(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?(0,l.Left)(e._internalState.error):(0,l.Right)({restoredLanguage:e._internalState.restoredLanguage,restoredCLS:e._internalState.restoredCLS,restoredApps:e._internalState.restoredApps})})}}0&&(module.exports={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": ["RestoreBackupDeviceAction_exports", "__export", "RestoreBackupDeviceAction", "__toCommonJS", "import_device_management_kit", "import_purify_ts", "import_xstate", "import_RequestMasterConsentCommand", "import_screenSpecs", "import_GetIsOnboarded", "import_InstallLanguagePackage", "import_InstallOrUpdateApps", "import_RequestMasterConsent", "import_RestoreAppsStorage", "import_UploadCustomLockScreen", "import_types", "import_GoToDashboard", "import_WaitForAppAndVersion", "DEFAULT_LANGUAGE", "langIdToLanguage", "languageId", "hasBackedUpNonEnglishLanguage", "language", "isRefusedByUser", "error", "mergeAppsStorageResults", "restoredApps", "appsStorageResults", "restoredApp", "appStorageResult", "storageResult", "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": ["RestoreBackupDeviceAction_exports", "__export", "RestoreBackupDeviceAction", "__toCommonJS", "import_device_management_kit", "import_purify_ts", "import_xstate", "import_RequestMasterConsentCommand", "import_screenSpecs", "import_GetIsOnboarded", "import_InstallLanguagePackage", "import_InstallOrUpdateApps", "import_RequestMasterConsent", "import_RestoreAppsStorage", "import_UploadCustomLockScreen", "import_types", "import_GoToDashboard", "import_WaitForAppAndVersion", "DEFAULT_LANGUAGE", "langIdToLanguage", "languageId", "hasBackedUpNonEnglishLanguage", "language", "isRefusedByUser", "error", "mergeAppsStorageResults", "restoredApps", "appsStorageResults", "restoredApp", "appStorageResult", "storageResult", "internalAPI", "backup", "unlockTimeout", "app", "context", "_", "input", "output", "isDeviceOnboarded", "contextBackup", "event", "installedAppNames", "installedApp", "result", "intermediateValue", "shouldHideInteraction"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var n=require("@ledgerhq/device-management-kit"),a=require("purify-ts"),C=require("xstate"),d=require("../../../../device-action/__test-utils__/makeInternalApi"),i=require("../../../../device-action/__test-utils__/testDeviceActionStates"),V=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/RestoreBackupDeviceAction"),L=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/RestoreBackupDeviceActionErrors"),E=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/GetIsOnboarded"),B=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/InstallLanguagePackage"),F=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/InstallOrUpdateApps"),y=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/RequestMasterConsent"),U=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/RestoreAppsStorage"),W=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/UploadCustomLockScreen"),e=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/types"),T=require("../../../../device-action/OsUpdate/Shared/Substeps/GoToDashboard"),b=require("../../../../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,c=n.UserInteractionRequired.None)=>({status:n.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:c,step:k}}),S=k=>({status:n.DeviceActionStatus.Completed,output:k}),R=k=>({status:n.DeviceActionStatus.Error,error:k}),G=k=>(0,C.createMachine)({initial:"ready",states:{ready:{after:{0:"done"},entry:(0,C.assign)({intermediateValue:()=>({requiredUserInteraction:n.UserInteractionRequired.None})})},done:{type:"final"}},output:k}),w=k=>G(()=>k),g=(k={})=>({languageId:void 0,installedApps:[],clsHexImage:void 0,createdAt:new Date,...k});describe("RestoreBackupDeviceAction",()=>{const{getDeviceModel:k}=(0,d.makeDeviceActionInternalApiMock)();beforeEach(()=>{vi.resetAllMocks()});const c=(o="BOLOS")=>vi.mocked(b.waitForAppAndVersion).mockReturnValue(w((0,a.Right)({name:o,version:"1.0.0"}))),x=o=>{const s=[...o];vi.mocked(b.waitForAppAndVersion).mockReturnValue(G(()=>(0,a.Right)({name:s.shift()??"BOLOS",version:"1.0.0"})))},O=(o=(0,a.Right)(void 0))=>vi.mocked(T.goToDashboard).mockReturnValue(w(o)),l=(o=(0,a.Right)({isDeviceOnboarded:!0}))=>vi.mocked(E.getIsOnboarded).mockReturnValue(()=>Promise.resolve(o)),m=(o=(0,a.Right)(e.RequestMasterConsentResult.GRANTED))=>vi.mocked(y.requestMasterConsent).mockReturnValue(()=>Promise.resolve(o)),D=(o=(0,a.Right)(void 0))=>vi.mocked(B.installLanguagePackage).mockReturnValue(w(o)),v=(o=(0,a.Right)({successfullyInstalled:[],alreadyInstalled:[],missingApplications:[]}))=>vi.mocked(F.installOrUpdateApps).mockReturnValue(w(o)),I=(o=(0,a.Right)([]))=>vi.mocked(U.restoreAppsStorage).mockReturnValue(w(o)),h=(o=(0,a.Right)(void 0))=>vi.mocked(W.uploadCustomLockScreenDevice).mockReturnValue(w(o)),A=o=>k.mockReturnValue({id:o}),u=(o=g())=>new V.RestoreBackupDeviceAction({input:{backup:o,unlockTimeout:3e4}});describe("Success",()=>{it("should complete the full restore flow when everything succeeds",()=>new Promise((o,s)=>{c(),l(),A(n.DeviceModelId.STAX),m(),D(),v((0,a.Right)({successfullyInstalled:[{versionName:"App1"}],alreadyInstalled:[],missingApplications:[]})),I((0,a.Right)([{appName:"App1",restoredAppStorage:!0}])),h();const r=g({languageId:1,installedApps:[{appName:"App1",data:"0xaa"}],clsHexImage:"0x0102"}),p=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),t(e.RestoreBackupSteps.RequestMasterConsent,n.UserInteractionRequired.GrantConsent),t(e.RestoreBackupSteps.InstallLanguagePackage),t(e.RestoreBackupSteps.InstallLanguagePackage),t(e.RestoreBackupSteps.InstallOrUpdateApps),t(e.RestoreBackupSteps.InstallOrUpdateApps),t(e.RestoreBackupSteps.RestoreAppsStorage),t(e.RestoreBackupSteps.RestoreAppsStorage),t(e.RestoreBackupSteps.UploadCustomLockScreen),t(e.RestoreBackupSteps.UploadCustomLockScreen),S({restoredLanguage:!0,restoredCLS:!0,restoredApps:[{appName:"App1",restoredApp:!0,restoredAppStorage:!0}]})];(0,i.testDeviceActionStates)(u(r),p,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:s})})),it("should go to dashboard and wait for app and version again when an app is open",()=>new Promise((o,s)=>{x(["Bitcoin","BOLOS"]),O(),l(),A(n.DeviceModelId.NANO_X);const r=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GoToDashboard),t(e.RestoreBackupSteps.GoToDashboard),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),S({restoredLanguage:void 0,restoredCLS:void 0,restoredApps:void 0})];(0,i.testDeviceActionStates)(u(),r,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:s})})),it("should still restore the language pack but skip app/storage/CLS steps when device is not onboarded",()=>new Promise((o,s)=>{c(),l((0,a.Right)({isDeviceOnboarded:!1})),A(n.DeviceModelId.STAX),m(),D();const r=g({languageId:1,installedApps:[{appName:"App1",data:"0xaa"}],clsHexImage:"0x0102"}),p=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),t(e.RestoreBackupSteps.RequestMasterConsent,n.UserInteractionRequired.GrantConsent),t(e.RestoreBackupSteps.InstallLanguagePackage),t(e.RestoreBackupSteps.InstallLanguagePackage),S({restoredLanguage:!0,restoredCLS:!1,restoredApps:[{appName:"App1",restoredApp:!1,restoredAppStorage:!1}]})];(0,i.testDeviceActionStates)(u(r),p,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:s})})),it("should skip RequestMasterConsent when the device does not support the feature",()=>new Promise((o,s)=>{c(),l(),A(n.DeviceModelId.NANO_X),m();const r=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),S({restoredLanguage:void 0,restoredCLS:void 0,restoredApps:void 0})];(0,i.testDeviceActionStates)(u(),r,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:s})})),it("should stop and complete immediately when master consent is rejected by the user",()=>new Promise((o,s)=>{c(),l(),A(n.DeviceModelId.STAX),m((0,a.Right)(e.RequestMasterConsentResult.REJECTED)),D();const r=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),t(e.RestoreBackupSteps.RequestMasterConsent,n.UserInteractionRequired.GrantConsent),S({restoredLanguage:void 0,restoredCLS:void 0,restoredApps:void 0})];(0,i.testDeviceActionStates)(u(),r,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:s})})),it("should skip InstallOrUpdateApps and RestoreAppsStorage when the backup has no app",()=>new Promise((o,s)=>{c(),l(),A(n.DeviceModelId.STAX),m(),h(),v(),I();const r=g({clsHexImage:"0x0102"}),p=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),t(e.RestoreBackupSteps.RequestMasterConsent,n.UserInteractionRequired.GrantConsent),t(e.RestoreBackupSteps.UploadCustomLockScreen),t(e.RestoreBackupSteps.UploadCustomLockScreen),S({restoredLanguage:void 0,restoredCLS:!0,restoredApps:void 0})];(0,i.testDeviceActionStates)(u(r),p,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:s})})),it("should skip UploadCustomLockScreen when the device does not support the feature, even if a CLS was backed up",()=>new Promise((o,s)=>{c(),l(),A(n.DeviceModelId.NANO_X),h();const r=g({clsHexImage:"0x0102"}),p=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),S({restoredLanguage:void 0,restoredCLS:!1,restoredApps:void 0})];(0,i.testDeviceActionStates)(u(r),p,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:s})})),it("should skip UploadCustomLockScreen when no CLS was backed up, even on a supported device",()=>new Promise((o,s)=>{c(),l(),A(n.DeviceModelId.STAX),m(),h();const r=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),t(e.RestoreBackupSteps.RequestMasterConsent,n.UserInteractionRequired.GrantConsent),S({restoredLanguage:void 0,restoredCLS:void 0,restoredApps:void 0})];(0,i.testDeviceActionStates)(u(),r,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:s})})),it("should not fail and should keep going when the user refuses the language pack, app install, and CLS upload prompts",()=>new Promise((o,s)=>{c(),l(),A(n.DeviceModelId.STAX),m(),D((0,a.Left)(new n.RefusedByUserDAError)),v((0,a.Left)(new n.RefusedByUserDAError)),I((0,a.Right)([])),h((0,a.Left)(new n.RefusedByUserDAError));const r=g({languageId:1,installedApps:[{appName:"App1",data:"0xaa"}],clsHexImage:"0x0102"}),p=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),t(e.RestoreBackupSteps.RequestMasterConsent,n.UserInteractionRequired.GrantConsent),t(e.RestoreBackupSteps.InstallLanguagePackage),t(e.RestoreBackupSteps.InstallLanguagePackage),t(e.RestoreBackupSteps.InstallOrUpdateApps),t(e.RestoreBackupSteps.InstallOrUpdateApps),t(e.RestoreBackupSteps.RestoreAppsStorage),t(e.RestoreBackupSteps.RestoreAppsStorage),t(e.RestoreBackupSteps.UploadCustomLockScreen),t(e.RestoreBackupSteps.UploadCustomLockScreen),S({restoredLanguage:!1,restoredCLS:!1,restoredApps:[{appName:"App1",restoredApp:!1,restoredAppStorage:!1}]})];(0,i.testDeviceActionStates)(u(r),p,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:s})}))}),describe("Error",()=>{it("should go to Error when waitForAppAndVersion returns Left",()=>new Promise((o,s)=>{const r=new n.UnknownDAError("waitForAppAndVersion failed");vi.mocked(b.waitForAppAndVersion).mockReturnValue(w((0,a.Left)(r)));const p=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),R(r)];(0,i.testDeviceActionStates)(u(),p,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:s})})),it("should go to Error when goToDashboard returns Left",()=>new Promise((o,s)=>{c("Bitcoin");const r=new n.UnknownDAError("goToDashboard failed");O((0,a.Left)(r));const p=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GoToDashboard),t(e.RestoreBackupSteps.GoToDashboard),R(r)];(0,i.testDeviceActionStates)(u(),p,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:s})})),it("should go to Error when getIsOnboarded returns Left",()=>new Promise((o,s)=>{c();const r=new L.GetIsOnboardedError(new Error("command failed"));l((0,a.Left)(r));const p=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),R(r)];(0,i.testDeviceActionStates)(u(),p,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:s})})),it("should go to Error when requestMasterConsent fails with a fatal (non-refusal) error",()=>new Promise((o,s)=>{c(),l(),A(n.DeviceModelId.STAX);const r=new L.RequestMasterConsentError(new Error("command failed"));m((0,a.Left)(r));const p=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),t(e.RestoreBackupSteps.RequestMasterConsent,n.UserInteractionRequired.GrantConsent),R(r)];(0,i.testDeviceActionStates)(u(),p,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:s})})),it("should go to Error when installLanguagePackage fails with a fatal (non-refusal) error",()=>new Promise((o,s)=>{c(),l(),A(n.DeviceModelId.STAX),m();const r=new n.UnknownDAError("installLanguagePackage failed");D((0,a.Left)(r));const p=g({languageId:1}),f=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),t(e.RestoreBackupSteps.RequestMasterConsent,n.UserInteractionRequired.GrantConsent),t(e.RestoreBackupSteps.InstallLanguagePackage),t(e.RestoreBackupSteps.InstallLanguagePackage),R(r)];(0,i.testDeviceActionStates)(u(p),f,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:s})})),it("should go to Error when installOrUpdateApps fails with a fatal (non-refusal) error",()=>new Promise((o,s)=>{c(),l(),A(n.DeviceModelId.STAX),m();const r=new n.UnknownDAError("installOrUpdateApps failed");v((0,a.Left)(r));const p=g({installedApps:[{appName:"App1",data:"0xaa"}]}),f=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),t(e.RestoreBackupSteps.RequestMasterConsent,n.UserInteractionRequired.GrantConsent),t(e.RestoreBackupSteps.InstallOrUpdateApps),t(e.RestoreBackupSteps.InstallOrUpdateApps),R(r)];(0,i.testDeviceActionStates)(u(p),f,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:s})})),it("should go to Error when restoreAppsStorage returns Left",()=>new Promise((o,s)=>{c(),l(),A(n.DeviceModelId.STAX),m(),v((0,a.Right)({successfullyInstalled:[{versionName:"App1"}],alreadyInstalled:[],missingApplications:[]}));const r=new n.UnknownDAError("restoreAppsStorage failed");I((0,a.Left)(r));const p=g({installedApps:[{appName:"App1",data:"0xaa"}]}),f=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),t(e.RestoreBackupSteps.RequestMasterConsent,n.UserInteractionRequired.GrantConsent),t(e.RestoreBackupSteps.InstallOrUpdateApps),t(e.RestoreBackupSteps.InstallOrUpdateApps),t(e.RestoreBackupSteps.RestoreAppsStorage),t(e.RestoreBackupSteps.RestoreAppsStorage),R(r)];(0,i.testDeviceActionStates)(u(p),f,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:s})})),it("should go to Error when uploadCustomLockScreen fails with a fatal (non-refusal) error",()=>new Promise((o,s)=>{c(),l(),A(n.DeviceModelId.STAX),m();const r=new n.UnknownDAError("uploadCustomLockScreen failed");h((0,a.Left)(r));const p=g({clsHexImage:"0x0102"}),f=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),t(e.RestoreBackupSteps.RequestMasterConsent,n.UserInteractionRequired.GrantConsent),t(e.RestoreBackupSteps.UploadCustomLockScreen),t(e.RestoreBackupSteps.UploadCustomLockScreen),R(r)];(0,i.testDeviceActionStates)(u(p),f,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:s})}))})});
1
+ "use strict";var n=require("@ledgerhq/device-management-kit"),s=require("purify-ts"),D=require("xstate"),d=require("../../../../device-action/__test-utils__/makeInternalApi"),u=require("../../../../device-action/__test-utils__/testDeviceActionStates"),y=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/RestoreBackupDeviceAction"),V=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/RestoreBackupDeviceActionErrors"),F=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/GetIsOnboarded"),W=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/InstallLanguagePackage"),x=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/InstallOrUpdateApps"),T=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/RequestMasterConsent"),M=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/RestoreAppsStorage"),B=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/UploadCustomLockScreen"),e=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/types"),P=require("../../../../device-action/OsUpdate/Shared/Substeps/GoToDashboard"),L=require("../../../../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=(l,i=n.UserInteractionRequired.None)=>({status:n.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:i,step:l}}),R=l=>({status:n.DeviceActionStatus.Completed,output:l}),f=l=>({status:n.DeviceActionStatus.Error,error:l}),G=l=>(0,D.createMachine)({initial:"ready",states:{ready:{after:{0:"done"},entry:(0,D.assign)({intermediateValue:()=>({requiredUserInteraction:n.UserInteractionRequired.None})})},done:{type:"final"}},output:l}),w=l=>G(()=>l),H=(l,i)=>(0,D.createMachine)({initial:"interaction0",states:{...Object.fromEntries(l.map((O,h)=>[`interaction${h}`,{after:{0:h+1<l.length?`interaction${h+1}`:"done"},entry:(0,D.assign)({intermediateValue:()=>({requiredUserInteraction:O})})}])),done:{type:"final"}},output:()=>i}),g=(l={})=>({languageId:void 0,installedApps:[],clsHexImage:void 0,createdAt:new Date,...l});describe("RestoreBackupDeviceAction",()=>{const{getDeviceModel:l}=(0,d.makeDeviceActionInternalApiMock)();beforeEach(()=>{vi.resetAllMocks(),m(n.DeviceModelId.NANO_X)});const i=(o="BOLOS")=>vi.mocked(L.waitForAppAndVersion).mockReturnValue(w((0,s.Right)({name:o,version:"1.0.0"}))),O=o=>{const a=[...o];vi.mocked(L.waitForAppAndVersion).mockReturnValue(G(()=>(0,s.Right)({name:a.shift()??"BOLOS",version:"1.0.0"})))},h=(o=(0,s.Right)(void 0))=>vi.mocked(P.goToDashboard).mockReturnValue(w(o)),A=(o=(0,s.Right)({isDeviceOnboarded:!0}))=>vi.mocked(F.getIsOnboarded).mockReturnValue(()=>Promise.resolve(o)),k=(o=(0,s.Right)(e.RequestMasterConsentResult.GRANTED))=>vi.mocked(T.requestMasterConsent).mockReturnValue(()=>Promise.resolve(o)),I=(o=(0,s.Right)(void 0))=>vi.mocked(W.installLanguagePackage).mockReturnValue(w(o)),C=(o=(0,s.Right)({successfullyInstalled:[],alreadyInstalled:[],missingApplications:[]}))=>vi.mocked(x.installOrUpdateApps).mockReturnValue(w(o)),b=(o=(0,s.Right)([]))=>vi.mocked(M.restoreAppsStorage).mockReturnValue(w(o)),v=(o=(0,s.Right)(void 0))=>vi.mocked(B.uploadCustomLockScreenDevice).mockReturnValue(w(o)),q=o=>vi.mocked(B.uploadCustomLockScreenDevice).mockReturnValue(H(o,(0,s.Right)(void 0))),m=o=>l.mockReturnValue({id:o}),c=(o=g())=>new y.RestoreBackupDeviceAction({input:{backup:o,unlockTimeout:3e4}});describe("Success",()=>{it("should complete the full restore flow when everything succeeds",()=>new Promise((o,a)=>{i(),A(),m(n.DeviceModelId.STAX),k(),I(),C((0,s.Right)({successfullyInstalled:[{versionName:"App1"}],alreadyInstalled:[],missingApplications:[]})),b((0,s.Right)([{appName:"App1",restoredAppStorage:!0}])),v();const r=g({languageId:1,installedApps:[{appName:"App1",data:"0xaa"}],clsHexImage:"0x0102"}),p=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),t(e.RestoreBackupSteps.RequestMasterConsent,n.UserInteractionRequired.GrantConsent),t(e.RestoreBackupSteps.InstallLanguagePackage),t(e.RestoreBackupSteps.InstallLanguagePackage),t(e.RestoreBackupSteps.InstallOrUpdateApps),t(e.RestoreBackupSteps.InstallOrUpdateApps),t(e.RestoreBackupSteps.RestoreAppsStorage),t(e.RestoreBackupSteps.RestoreAppsStorage),t(e.RestoreBackupSteps.UploadCustomLockScreen),t(e.RestoreBackupSteps.UploadCustomLockScreen),R({restoredLanguage:!0,restoredCLS:!0,restoredApps:[{appName:"App1",restoredApp:!0,restoredAppStorage:!0}]})];(0,u.testDeviceActionStates)(c(r),p,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:a})})),it("should go to dashboard and wait for app and version again when an app is open",()=>new Promise((o,a)=>{O(["Bitcoin","BOLOS"]),h(),A(),m(n.DeviceModelId.NANO_X);const r=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GoToDashboard),t(e.RestoreBackupSteps.GoToDashboard),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),R({restoredLanguage:void 0,restoredCLS:void 0,restoredApps:void 0})];(0,u.testDeviceActionStates)(c(),r,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:a})})),it("should still restore the language pack but skip app/storage/CLS steps when device is not onboarded",()=>new Promise((o,a)=>{i(),A((0,s.Right)({isDeviceOnboarded:!1})),m(n.DeviceModelId.STAX),k(),I();const r=g({languageId:1,installedApps:[{appName:"App1",data:"0xaa"}],clsHexImage:"0x0102"}),p=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),t(e.RestoreBackupSteps.RequestMasterConsent,n.UserInteractionRequired.GrantConsent),t(e.RestoreBackupSteps.InstallLanguagePackage),t(e.RestoreBackupSteps.InstallLanguagePackage),R({restoredLanguage:!0,restoredCLS:!1,restoredApps:[{appName:"App1",restoredApp:!1,restoredAppStorage:!1}]})];(0,u.testDeviceActionStates)(c(r),p,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:a})})),it("should skip RequestMasterConsent when the device does not support the feature",()=>new Promise((o,a)=>{i(),A(),m(n.DeviceModelId.NANO_X),k();const r=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),R({restoredLanguage:void 0,restoredCLS:void 0,restoredApps:void 0})];(0,u.testDeviceActionStates)(c(),r,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:a})})),it("should stop and complete immediately when master consent is rejected by the user",()=>new Promise((o,a)=>{i(),A(),m(n.DeviceModelId.STAX),k((0,s.Right)(e.RequestMasterConsentResult.REJECTED)),I();const r=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),t(e.RestoreBackupSteps.RequestMasterConsent,n.UserInteractionRequired.GrantConsent),R({restoredLanguage:void 0,restoredCLS:void 0,restoredApps:void 0})];(0,u.testDeviceActionStates)(c(),r,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:a})})),it("should skip InstallOrUpdateApps and RestoreAppsStorage when the backup has no app",()=>new Promise((o,a)=>{i(),A(),m(n.DeviceModelId.STAX),k(),v(),C(),b();const r=g({clsHexImage:"0x0102"}),p=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),t(e.RestoreBackupSteps.RequestMasterConsent,n.UserInteractionRequired.GrantConsent),t(e.RestoreBackupSteps.UploadCustomLockScreen),t(e.RestoreBackupSteps.UploadCustomLockScreen),R({restoredLanguage:void 0,restoredCLS:!0,restoredApps:void 0})];(0,u.testDeviceActionStates)(c(r),p,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:a})})),it("should skip UploadCustomLockScreen when the device does not support the feature, even if a CLS was backed up",()=>new Promise((o,a)=>{i(),A(),m(n.DeviceModelId.NANO_X),v();const r=g({clsHexImage:"0x0102"}),p=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),R({restoredLanguage:void 0,restoredCLS:!1,restoredApps:void 0})];(0,u.testDeviceActionStates)(c(r),p,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:a})})),it("should skip UploadCustomLockScreen when no CLS was backed up, even on a supported device",()=>new Promise((o,a)=>{i(),A(),m(n.DeviceModelId.STAX),k(),v();const r=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),t(e.RestoreBackupSteps.RequestMasterConsent,n.UserInteractionRequired.GrantConsent),R({restoredLanguage:void 0,restoredCLS:void 0,restoredApps:void 0})];(0,u.testDeviceActionStates)(c(),r,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:a})})),describe("UploadCustomLockScreen required user interactions",()=>{const o=(r,p)=>new Promise((S,N)=>{i(),A(),m(r),k(),q(p);const U=[],{observable:X}=c(g({clsHexImage:"0x0102"}))._execute((0,d.makeDeviceActionInternalApiMock)());X.subscribe({next:E=>{E.status===n.DeviceActionStatus.Pending&&E.intermediateValue.step===e.RestoreBackupSteps.UploadCustomLockScreen&&U.push(E.intermediateValue.requiredUserInteraction)},error:N,complete:()=>S(U)})}),a=[n.UserInteractionRequired.UnlockDevice,n.UserInteractionRequired.ConfirmLoadImage,n.UserInteractionRequired.ConfirmCommitImage];it("should hide confirm load/commit image interactions but keep the others when master consent is granted",async()=>{const r=await o(n.DeviceModelId.STAX,a);expect(r).toContain(n.UserInteractionRequired.UnlockDevice),expect(r).not.toContain(n.UserInteractionRequired.ConfirmLoadImage),expect(r).not.toContain(n.UserInteractionRequired.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,a)=>{i(),A(),m(n.DeviceModelId.STAX),k(),I((0,s.Left)(new n.RefusedByUserDAError)),C((0,s.Left)(new n.RefusedByUserDAError)),b((0,s.Right)([])),v((0,s.Left)(new n.RefusedByUserDAError));const r=g({languageId:1,installedApps:[{appName:"App1",data:"0xaa"}],clsHexImage:"0x0102"}),p=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),t(e.RestoreBackupSteps.RequestMasterConsent,n.UserInteractionRequired.GrantConsent),t(e.RestoreBackupSteps.InstallLanguagePackage),t(e.RestoreBackupSteps.InstallLanguagePackage),t(e.RestoreBackupSteps.InstallOrUpdateApps),t(e.RestoreBackupSteps.InstallOrUpdateApps),t(e.RestoreBackupSteps.RestoreAppsStorage),t(e.RestoreBackupSteps.RestoreAppsStorage),t(e.RestoreBackupSteps.UploadCustomLockScreen),t(e.RestoreBackupSteps.UploadCustomLockScreen),R({restoredLanguage:!1,restoredCLS:!1,restoredApps:[{appName:"App1",restoredApp:!1,restoredAppStorage:!1}]})];(0,u.testDeviceActionStates)(c(r),p,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:a})}))}),describe("Error",()=>{it("should go to Error when waitForAppAndVersion returns Left",()=>new Promise((o,a)=>{const r=new n.UnknownDAError("waitForAppAndVersion failed");vi.mocked(L.waitForAppAndVersion).mockReturnValue(w((0,s.Left)(r)));const p=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),f(r)];(0,u.testDeviceActionStates)(c(),p,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:a})})),it("should go to Error when goToDashboard returns Left",()=>new Promise((o,a)=>{i("Bitcoin");const r=new n.UnknownDAError("goToDashboard failed");h((0,s.Left)(r));const p=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GoToDashboard),t(e.RestoreBackupSteps.GoToDashboard),f(r)];(0,u.testDeviceActionStates)(c(),p,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:a})})),it("should go to Error when getIsOnboarded returns Left",()=>new Promise((o,a)=>{i();const r=new V.GetIsOnboardedError(new Error("command failed"));A((0,s.Left)(r));const p=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),f(r)];(0,u.testDeviceActionStates)(c(),p,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:a})})),it("should go to Error when requestMasterConsent fails with a fatal (non-refusal) error",()=>new Promise((o,a)=>{i(),A(),m(n.DeviceModelId.STAX);const r=new V.RequestMasterConsentError(new Error("command failed"));k((0,s.Left)(r));const p=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),t(e.RestoreBackupSteps.RequestMasterConsent,n.UserInteractionRequired.GrantConsent),f(r)];(0,u.testDeviceActionStates)(c(),p,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:a})})),it("should go to Error when installLanguagePackage fails with a fatal (non-refusal) error",()=>new Promise((o,a)=>{i(),A(),m(n.DeviceModelId.STAX),k();const r=new n.UnknownDAError("installLanguagePackage failed");I((0,s.Left)(r));const p=g({languageId:1}),S=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),t(e.RestoreBackupSteps.RequestMasterConsent,n.UserInteractionRequired.GrantConsent),t(e.RestoreBackupSteps.InstallLanguagePackage),t(e.RestoreBackupSteps.InstallLanguagePackage),f(r)];(0,u.testDeviceActionStates)(c(p),S,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:a})})),it("should go to Error when installOrUpdateApps fails with a fatal (non-refusal) error",()=>new Promise((o,a)=>{i(),A(),m(n.DeviceModelId.STAX),k();const r=new n.UnknownDAError("installOrUpdateApps failed");C((0,s.Left)(r));const p=g({installedApps:[{appName:"App1",data:"0xaa"}]}),S=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),t(e.RestoreBackupSteps.RequestMasterConsent,n.UserInteractionRequired.GrantConsent),t(e.RestoreBackupSteps.InstallOrUpdateApps),t(e.RestoreBackupSteps.InstallOrUpdateApps),f(r)];(0,u.testDeviceActionStates)(c(p),S,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:a})})),it("should go to Error when restoreAppsStorage returns Left",()=>new Promise((o,a)=>{i(),A(),m(n.DeviceModelId.STAX),k(),C((0,s.Right)({successfullyInstalled:[{versionName:"App1"}],alreadyInstalled:[],missingApplications:[]}));const r=new n.UnknownDAError("restoreAppsStorage failed");b((0,s.Left)(r));const p=g({installedApps:[{appName:"App1",data:"0xaa"}]}),S=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),t(e.RestoreBackupSteps.RequestMasterConsent,n.UserInteractionRequired.GrantConsent),t(e.RestoreBackupSteps.InstallOrUpdateApps),t(e.RestoreBackupSteps.InstallOrUpdateApps),t(e.RestoreBackupSteps.RestoreAppsStorage),t(e.RestoreBackupSteps.RestoreAppsStorage),f(r)];(0,u.testDeviceActionStates)(c(p),S,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:a})})),it("should go to Error when uploadCustomLockScreen fails with a fatal (non-refusal) error",()=>new Promise((o,a)=>{i(),A(),m(n.DeviceModelId.STAX),k();const r=new n.UnknownDAError("uploadCustomLockScreen failed");v((0,s.Left)(r));const p=g({clsHexImage:"0x0102"}),S=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),t(e.RestoreBackupSteps.RequestMasterConsent,n.UserInteractionRequired.GrantConsent),t(e.RestoreBackupSteps.UploadCustomLockScreen),t(e.RestoreBackupSteps.UploadCustomLockScreen),f(r)];(0,u.testDeviceActionStates)(c(p),S,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:a})}))})});
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": "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",
6
- "names": ["import_device_management_kit", "import_purify_ts", "import_xstate", "import_makeInternalApi", "import_testDeviceActionStates", "import_RestoreBackupDeviceAction", "import_RestoreBackupDeviceActionErrors", "import_GetIsOnboarded", "import_InstallLanguagePackage", "import_InstallOrUpdateApps", "import_RequestMasterConsent", "import_RestoreAppsStorage", "import_UploadCustomLockScreen", "import_types", "import_GoToDashboard", "import_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": "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",
6
+ "names": ["import_device_management_kit", "import_purify_ts", "import_xstate", "import_makeInternalApi", "import_testDeviceActionStates", "import_RestoreBackupDeviceAction", "import_RestoreBackupDeviceActionErrors", "import_GetIsOnboarded", "import_InstallLanguagePackage", "import_InstallOrUpdateApps", "import_RequestMasterConsent", "import_RestoreAppsStorage", "import_UploadCustomLockScreen", "import_types", "import_GoToDashboard", "import_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
  }