@ledgerhq/dmk-ledger-wallet 0.0.0-develop-20261029001011 → 0.0.0-develop-20261102000856

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 (25) 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/Restore/RestoreBackup/types.js +1 -1
  6. package/lib/cjs/api/device-action/OsUpdate/Restore/RestoreBackup/types.js.map +3 -3
  7. package/lib/cjs/index.js +1 -1
  8. package/lib/cjs/index.js.map +2 -2
  9. package/lib/cjs/package.json +1 -1
  10. package/lib/esm/api/device-action/OsUpdate/Restore/RestoreBackup/RestoreBackupDeviceAction.js +1 -1
  11. package/lib/esm/api/device-action/OsUpdate/Restore/RestoreBackup/RestoreBackupDeviceAction.js.map +3 -3
  12. package/lib/esm/api/device-action/OsUpdate/Restore/RestoreBackup/RestoreBackupDeviceAction.test.js +1 -1
  13. package/lib/esm/api/device-action/OsUpdate/Restore/RestoreBackup/RestoreBackupDeviceAction.test.js.map +3 -3
  14. package/lib/esm/api/device-action/OsUpdate/Restore/RestoreBackup/types.js +1 -1
  15. package/lib/esm/api/device-action/OsUpdate/Restore/RestoreBackup/types.js.map +3 -3
  16. package/lib/esm/index.js +1 -1
  17. package/lib/esm/index.js.map +3 -3
  18. package/lib/esm/package.json +1 -1
  19. package/lib/types/api/device-action/OsUpdate/Restore/RestoreBackup/RestoreBackupDeviceAction.d.ts.map +1 -1
  20. package/lib/types/api/device-action/OsUpdate/Restore/RestoreBackup/types.d.ts +8 -0
  21. package/lib/types/api/device-action/OsUpdate/Restore/RestoreBackup/types.d.ts.map +1 -1
  22. package/lib/types/index.d.ts +1 -0
  23. package/lib/types/index.d.ts.map +1 -1
  24. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  25. package/package.json +5 -5
@@ -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=(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});
1
+ "use strict";var m=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var U=Object.prototype.hasOwnProperty;var F=(r,n)=>{for(var s in n)m(r,s,{get:n[s],enumerable:!0})},_=(r,n,s,i)=>{if(n&&typeof n=="object"||typeof n=="function")for(let e of M(n))!U.call(r,e)&&e!==s&&m(r,e,{get:()=>n[e],enumerable:!(i=b(n,e))||i.enumerable});return r};var G=r=>_(m({},"__esModule",{value:!0}),r);var q={};F(q,{RestoreBackupDeviceAction:()=>K});module.exports=G(q);var o=require("@ledgerhq/device-management-kit"),g=require("purify-ts"),a=require("xstate"),D=require("../../../../command/OsUpdate/Restore/RequestMasterConsentCommand"),E=require("../../../../customLockScreenUtils/screenSpecs"),C=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/GetIsOnboarded"),O=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/InstallLanguagePackage"),h=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/InstallOrUpdateApps"),I=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/RequestMasterConsent"),v=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/RestoreAppsStorage"),L=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/UploadCustomLockScreen"),p=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/types"),x=require("../../../../device-action/OsUpdate/Shared/Substeps/GoToDashboard"),B=require("../../../../device-action/OsUpdate/Shared/Substeps/WaitForAppAndVersion");const T="english",w="Security Key",R=r=>r===void 0?void 0:o.LANGUAGE_ID_TO_LANGUAGE[r],k=r=>{const n=R(r);return n!==void 0&&n!==T},u=r=>r instanceof o.RefusedByUserDAError,A=r=>r instanceof o.OutOfMemoryDAError,N=r=>r.isOutOfMemory?p.RestoreBackupStatus.OUT_OF_MEMORY:!r.isMasterConsentRejected&&r.restoredLanguage!==!1&&r.restoredCLS!==!1&&(r.restoredApps??[]).every(s=>s.restoredApp&&s.restoredAppStorage!==!1)?p.RestoreBackupStatus.FULL:p.RestoreBackupStatus.PARTIAL,V=r=>r.appName===w,c=r=>r.filter(V),l=r=>r.filter(n=>!V(n)),d=r=>r.map(n=>({name:n.appName})),f=(r,n,s)=>{const i=new Set([...s.successfullyInstalled.map(e=>e.versionName),...s.alreadyInstalled]);return{...r,restoredApps:r.restoredApps?.map(e=>({...e,restoredApp:e.restoredApp||i.has(e.appName)})),appsToRestoreStorage:n.filter(e=>i.has(e.appName)&&e.data!==void 0)}},y=(r,n)=>r?.map(s=>{const i=n.find(e=>e.appName===s.appName);return i?{...s,restoredAppStorage:i.restoredAppStorage}:s});class K extends o.XStateDeviceAction{makeStateMachine(n){const{backup:s,unlockTimeout:i}=this.input;return(0,a.setup)({types:{input:{},output:{},context:{}},actors:{waitForAppAndVersion:(0,B.waitForAppAndVersion)(n,i),goToDashboard:(0,x.goToDashboard)(n,i),getIsOnboarded:(0,a.fromPromise)((0,C.getIsOnboarded)(n)),requestMasterConsent:(0,a.fromPromise)((0,I.requestMasterConsent)(n)),installLanguagePackage:(0,O.installLanguagePackage)(n,i,R(s.languageId)??T),installSecurityKeyAppFirst:(0,h.installOrUpdateApps)(n,i,d(c(s.installedApps))),installOrUpdateApps:(0,h.installOrUpdateApps)(n,i,d(l(s.installedApps))),restoreAppsStorage:(0,v.restoreAppsStorage)(n,i),uploadCustomLockScreen:(0,L.uploadCustomLockScreenDevice)(n,i,(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,D.isMasterConsentSupported)(n.getDeviceModel().id),hasBackedUpNonEnglishLanguage:({context:e})=>k(e.input.backup.languageId),hasSecurityKeyAppToReinstall:({context:e})=>c(e.input.backup.installedApps).length>0,hasOtherAppsToReinstall:({context:e})=>l(e.input.backup.installedApps).length>0,isCustomLockScreenFeatureSupported:()=>(0,E.isCustomLockScreenSupported)(n.getDeviceModel().id),hasBackedUpCustomLockScreen:({context:e})=>e.input.backup.clsHexImage!==void 0,hasError:({context:e})=>e._internalState.error!==null,isOutOfMemory:({context:e})=>e._internalState.isOutOfMemory,hasAppsToRestoreStorage:({context:e})=>e._internalState.appsToRestoreStorage.length>0},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:p.RestoreBackupSteps.Idle},_internalState:{error:null,currentApp:null,isDeviceOnboarded:!1,isMasterConsentGranted:!1,isMasterConsentRejected:!1,isOutOfMemory:!1,restoredLanguage:k(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: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:!k(t.languageId),lockScreenPictureConsentEnabled:t.clsHexImage===void 0,appNumber:t.installedApps.length,appStorageNumber:t.installedApps.filter(S=>S.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,isMasterConsentRejected:!0})}),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:R(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=>u(t)?e.context._internalState:A(t)?{...e.context._internalState,isOutOfMemory:!0}:{...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:"isOutOfMemory",target:"Success"},{guard:"isDeviceOnboarded",target:"CheckAppsToReinstall"},{target:"Success"}]},CheckAppsToReinstall:{always:[{guard:"hasSecurityKeyAppToReinstall",target:"InstallSecurityKeyAppFirst"},{target:"CheckOtherAppsToReinstall"}]},InstallSecurityKeyAppFirst:{entry:(0,a.assign)({intermediateValue:e=>({...e.context.intermediateValue,step:p.RestoreBackupSteps.InstallOrUpdateApps})}),invoke:{src:"installSecurityKeyAppFirst",input:({context:e})=>({unlockTimeout:e.input.unlockTimeout,applications:d(c(e.input.backup.installedApps)),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=>u(t)?{...e.context._internalState,appsToRestoreStorage:[]}:A(t)?{...e.context._internalState,isOutOfMemory:!0,appsToRestoreStorage:[]}:{...e.context._internalState,error:t},Right:t=>f(e.context._internalState,c(e.context.input.backup.installedApps),t)})}),target:"CheckInstallSecurityKeyAppFirst"},onError:{actions:"assignErrorFromEvent",target:"Error"}}},CheckInstallSecurityKeyAppFirst:{always:[{guard:"hasError",target:"Error"},{guard:"isOutOfMemory",target:"Success"},{guard:"hasAppsToRestoreStorage",target:"RestoreSecurityKeyAppStorageFirst"},{target:"CheckOtherAppsToReinstall"}]},RestoreSecurityKeyAppStorageFirst:{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:y(e.context._internalState.restoredApps,t)})})}),target:"CheckRestoreSecurityKeyAppStorageFirst"},onError:{actions:"assignErrorFromEvent",target:"Error"}}},CheckRestoreSecurityKeyAppStorageFirst:{always:[{guard:"hasError",target:"Error"},{target:"CheckOtherAppsToReinstall"}]},CheckOtherAppsToReinstall:{always:[{guard:"hasOtherAppsToReinstall",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:d(l(e.input.backup.installedApps)),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=>u(t)?{...e.context._internalState,appsToRestoreStorage:[]}:A(t)?{...e.context._internalState,isOutOfMemory:!0,appsToRestoreStorage:[]}:{...e.context._internalState,error:t},Right:t=>f(e.context._internalState,l(e.context.input.backup.installedApps),t)})}),target:"CheckInstallOrUpdateApps"},onError:{actions:"assignErrorFromEvent",target:"Error"}}},CheckInstallOrUpdateApps:{always:[{guard:"hasError",target:"Error"},{guard:"isOutOfMemory",target:"Success"},{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:y(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,o.hexaStringToBuffer)(e.input.backup.clsHexImage)}),onSnapshot:{actions:(0,a.assign)({intermediateValue:e=>{const{intermediateValue:t}=e.event.snapshot.context,S=e.context._internalState.isMasterConsentGranted&&(t.requiredUserInteraction===o.UserInteractionRequired.ConfirmLoadImage||t.requiredUserInteraction===o.UserInteractionRequired.ConfirmCommitImage);return{...t,...S?{requiredUserInteraction:o.UserInteractionRequired.None}:{},step:e.context.intermediateValue.step}}})},onDone:{actions:(0,a.assign)({_internalState:e=>e.event.output.caseOf({Left:t=>u(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,g.Left)(e._internalState.error):(0,g.Right)({restoreStatus:N(e._internalState),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 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"]
4
+ "sourcesContent": ["import {\n type ApplicationDependency,\n type DeviceActionStateMachine,\n hexaStringToBuffer,\n type InstallOrUpdateAppsDAOutput,\n type InternalApi,\n isDashboardName,\n type Language,\n LANGUAGE_ID_TO_LANGUAGE,\n OutOfMemoryDAError,\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 RestoreBackupStatus,\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\";\nconst SECURITY_KEY_APP_NAME = \"Security Key\";\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 isOutOfMemory = (error: unknown): boolean =>\n error instanceof OutOfMemoryDAError;\n\nconst computeRestoreStatus = (\n state: RestoreBackupDAInternalState,\n): RestoreBackupStatus => {\n if (state.isOutOfMemory) {\n return RestoreBackupStatus.OUT_OF_MEMORY;\n }\n const isFullyRestored =\n !state.isMasterConsentRejected &&\n state.restoredLanguage !== false &&\n state.restoredCLS !== false &&\n (state.restoredApps ?? []).every(\n (app) => app.restoredApp && app.restoredAppStorage !== false,\n );\n return isFullyRestored\n ? RestoreBackupStatus.FULL\n : RestoreBackupStatus.PARTIAL;\n};\n\nconst isSecurityKeyApp = (app: BackupApp): boolean =>\n app.appName === SECURITY_KEY_APP_NAME;\n\n// The Security Key app is installed and restored in its own pass, before the\n// other apps: a single install plan would put the other apps' dependencies\n// first.\nconst getSecurityKeyApps = (apps: BackupApp[]): BackupApp[] =>\n apps.filter(isSecurityKeyApp);\n\nconst getOtherApps = (apps: BackupApp[]): BackupApp[] =>\n apps.filter((app) => !isSecurityKeyApp(app));\n\nconst toApplicationDependencies = (\n apps: BackupApp[],\n): ApplicationDependency[] =>\n apps.map((app): ApplicationDependency => ({ name: app.appName }));\n\nconst applyInstallResult = (\n state: RestoreBackupDAInternalState,\n backupApps: BackupApp[],\n output: InstallOrUpdateAppsDAOutput,\n): RestoreBackupDAInternalState => {\n const installedAppNames = new Set([\n ...output.successfullyInstalled.map(\n (installedApp) => installedApp.versionName,\n ),\n ...output.alreadyInstalled,\n ]);\n return {\n ...state,\n restoredApps: state.restoredApps?.map(\n (result): RestoreAppResult => ({\n ...result,\n restoredApp:\n result.restoredApp || installedAppNames.has(result.appName),\n }),\n ),\n appsToRestoreStorage: backupApps.filter(\n (app) => installedAppNames.has(app.appName) && app.data !== undefined,\n ),\n };\n};\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 installSecurityKeyAppFirst: installOrUpdateApps(\n internalAPI,\n unlockTimeout,\n toApplicationDependencies(getSecurityKeyApps(backup.installedApps)),\n ),\n installOrUpdateApps: installOrUpdateApps(\n internalAPI,\n unlockTimeout,\n toApplicationDependencies(getOtherApps(backup.installedApps)),\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 hasSecurityKeyAppToReinstall: ({ context }) =>\n getSecurityKeyApps(context.input.backup.installedApps).length > 0,\n hasOtherAppsToReinstall: ({ context }) =>\n getOtherApps(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 isOutOfMemory: ({ context }) => context._internalState.isOutOfMemory,\n hasAppsToRestoreStorage: ({ context }) =>\n context._internalState.appsToRestoreStorage.length > 0,\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 isMasterConsentRejected: false,\n isOutOfMemory: 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 isMasterConsentRejected: true,\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 if (isRefusedByUser(error)) {\n return _.context._internalState;\n }\n if (isOutOfMemory(error)) {\n return {\n ..._.context._internalState,\n isOutOfMemory: true,\n };\n }\n return { ..._.context._internalState, error };\n },\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: \"isOutOfMemory\",\n target: \"Success\",\n },\n {\n guard: \"isDeviceOnboarded\",\n target: \"CheckAppsToReinstall\",\n },\n {\n target: \"Success\",\n },\n ],\n },\n CheckAppsToReinstall: {\n always: [\n {\n guard: \"hasSecurityKeyAppToReinstall\",\n target: \"InstallSecurityKeyAppFirst\",\n },\n {\n target: \"CheckOtherAppsToReinstall\",\n },\n ],\n },\n InstallSecurityKeyAppFirst: {\n entry: assign({\n intermediateValue: (_) => ({\n ..._.context.intermediateValue,\n step: RestoreBackupSteps.InstallOrUpdateApps,\n }),\n }),\n invoke: {\n src: \"installSecurityKeyAppFirst\",\n input: ({ context }) => ({\n unlockTimeout: context.input.unlockTimeout,\n applications: toApplicationDependencies(\n getSecurityKeyApps(context.input.backup.installedApps),\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 if (isRefusedByUser(error)) {\n return {\n ..._.context._internalState,\n appsToRestoreStorage: [],\n };\n }\n if (isOutOfMemory(error)) {\n return {\n ..._.context._internalState,\n isOutOfMemory: true,\n appsToRestoreStorage: [],\n };\n }\n return { ..._.context._internalState, error };\n },\n Right: (output) =>\n applyInstallResult(\n _.context._internalState,\n getSecurityKeyApps(\n _.context.input.backup.installedApps,\n ),\n output,\n ),\n });\n },\n }),\n target: \"CheckInstallSecurityKeyAppFirst\",\n },\n onError: {\n actions: \"assignErrorFromEvent\",\n target: \"Error\",\n },\n },\n },\n CheckInstallSecurityKeyAppFirst: {\n always: [\n {\n guard: \"hasError\",\n target: \"Error\",\n },\n {\n guard: \"isOutOfMemory\",\n target: \"Success\",\n },\n {\n guard: \"hasAppsToRestoreStorage\",\n target: \"RestoreSecurityKeyAppStorageFirst\",\n },\n {\n target: \"CheckOtherAppsToReinstall\",\n },\n ],\n },\n RestoreSecurityKeyAppStorageFirst: {\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: \"CheckRestoreSecurityKeyAppStorageFirst\",\n },\n onError: {\n actions: \"assignErrorFromEvent\",\n target: \"Error\",\n },\n },\n },\n CheckRestoreSecurityKeyAppStorageFirst: {\n always: [\n {\n guard: \"hasError\",\n target: \"Error\",\n },\n {\n target: \"CheckOtherAppsToReinstall\",\n },\n ],\n },\n CheckOtherAppsToReinstall: {\n always: [\n {\n guard: \"hasOtherAppsToReinstall\",\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: toApplicationDependencies(\n getOtherApps(context.input.backup.installedApps),\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 if (isRefusedByUser(error)) {\n return {\n ..._.context._internalState,\n appsToRestoreStorage: [],\n };\n }\n if (isOutOfMemory(error)) {\n return {\n ..._.context._internalState,\n isOutOfMemory: true,\n appsToRestoreStorage: [],\n };\n }\n return { ..._.context._internalState, error };\n },\n Right: (output) =>\n applyInstallResult(\n _.context._internalState,\n getOtherApps(_.context.input.backup.installedApps),\n output,\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 guard: \"isOutOfMemory\",\n target: \"Success\",\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 restoreStatus: computeRestoreStatus(context._internalState),\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", "SECURITY_KEY_APP_NAME", "langIdToLanguage", "languageId", "hasBackedUpNonEnglishLanguage", "language", "isRefusedByUser", "error", "isOutOfMemory", "computeRestoreStatus", "state", "app", "isSecurityKeyApp", "getSecurityKeyApps", "apps", "getOtherApps", "toApplicationDependencies", "applyInstallResult", "backupApps", "output", "installedAppNames", "installedApp", "result", "mergeAppsStorageResults", "restoredApps", "appsStorageResults", "restoredApp", "appStorageResult", "storageResult", "internalAPI", "backup", "unlockTimeout", "context", "_", "input", "isDeviceOnboarded", "contextBackup", "event", "intermediateValue", "shouldHideInteraction"]
7
7
  }
@@ -1,2 +1,2 @@
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})}))})});
1
+ "use strict";var r=require("@ledgerhq/device-management-kit"),p=require("purify-ts"),U=require("xstate"),d=require("../../../../device-action/__test-utils__/makeInternalApi"),u=require("../../../../device-action/__test-utils__/testDeviceActionStates"),M=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/RestoreBackupDeviceAction"),T=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/RestoreBackupDeviceActionErrors"),W=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/GetIsOnboarded"),G=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/InstallLanguagePackage"),F=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/InstallOrUpdateApps"),q=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/RequestMasterConsent"),B=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/RestoreAppsStorage"),N=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/Substeps/UploadCustomLockScreen"),e=require("../../../../device-action/OsUpdate/Restore/RestoreBackup/types"),X=require("../../../../device-action/OsUpdate/Shared/Substeps/GoToDashboard"),x=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=(f,c=r.UserInteractionRequired.None)=>({status:r.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:c,step:f}}),S=f=>({status:r.DeviceActionStatus.Completed,output:f}),O=f=>({status:r.DeviceActionStatus.Error,error:f}),_=f=>(0,U.createMachine)({initial:"ready",states:{ready:{after:{0:"done"},entry:(0,U.assign)({intermediateValue:()=>({requiredUserInteraction:r.UserInteractionRequired.None})})},done:{type:"final"}},output:f}),D=f=>_(()=>f),Y=(f,c)=>(0,U.createMachine)({initial:"interaction0",states:{...Object.fromEntries(f.map((P,E)=>[`interaction${E}`,{after:{0:E+1<f.length?`interaction${E+1}`:"done"},entry:(0,U.assign)({intermediateValue:()=>({requiredUserInteraction:P})})}])),done:{type:"final"}},output:()=>c}),R=(f={})=>({languageId:void 0,installedApps:[],clsHexImage:void 0,createdAt:new Date,...f});describe("RestoreBackupDeviceAction",()=>{const{getDeviceModel:f}=(0,d.makeDeviceActionInternalApiMock)();beforeEach(()=>{vi.resetAllMocks(),m(r.DeviceModelId.NANO_X)});const c=(o="BOLOS")=>vi.mocked(x.waitForAppAndVersion).mockReturnValue(D((0,p.Right)({name:o,version:"1.0.0"}))),P=o=>{const s=[...o];vi.mocked(x.waitForAppAndVersion).mockReturnValue(_(()=>(0,p.Right)({name:s.shift()??"BOLOS",version:"1.0.0"})))},E=(o=(0,p.Right)(void 0))=>vi.mocked(X.goToDashboard).mockReturnValue(D(o)),A=(o=(0,p.Right)({isDeviceOnboarded:!0}))=>vi.mocked(W.getIsOnboarded).mockReturnValue(()=>Promise.resolve(o)),g=(o=(0,p.Right)(e.RequestMasterConsentResult.GRANTED))=>vi.mocked(q.requestMasterConsent).mockReturnValue(()=>Promise.resolve(o)),y=(o=(0,p.Right)(void 0))=>vi.mocked(G.installLanguagePackage).mockReturnValue(D(o)),v=(o=(0,p.Right)({successfullyInstalled:[],alreadyInstalled:[],missingApplications:[]}))=>vi.mocked(F.installOrUpdateApps).mockReturnValue(D(o)),L=(o=(0,p.Right)([]))=>vi.mocked(B.restoreAppsStorage).mockReturnValue(D(o)),w=(o=(0,p.Right)(void 0))=>vi.mocked(N.uploadCustomLockScreenDevice).mockReturnValue(D(o)),H=o=>vi.mocked(N.uploadCustomLockScreenDevice).mockReturnValue(Y(o,(0,p.Right)(void 0))),m=o=>f.mockReturnValue({id:o}),i=(o=R())=>new M.RestoreBackupDeviceAction({input:{backup:o,unlockTimeout:3e4}});describe("Success",()=>{it("should complete the full restore flow when everything succeeds",()=>new Promise((o,s)=>{c(),A(),m(r.DeviceModelId.STAX),g(),y(),v((0,p.Right)({successfullyInstalled:[{versionName:"App1"}],alreadyInstalled:[],missingApplications:[]})),L((0,p.Right)([{appName:"App1",restoredAppStorage:!0}])),w();const a=R({languageId:1,installedApps:[{appName:"App1",data:"0xaa"}],clsHexImage:"0x0102"}),n=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),t(e.RestoreBackupSteps.RequestMasterConsent,r.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({restoreStatus:e.RestoreBackupStatus.FULL,restoredLanguage:!0,restoredCLS:!0,restoredApps:[{appName:"App1",restoredApp:!0,restoredAppStorage:!0}]})];(0,u.testDeviceActionStates)(i(a),n,(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)=>{P(["Bitcoin","BOLOS"]),E(),A(),m(r.DeviceModelId.NANO_X);const a=[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({restoreStatus:e.RestoreBackupStatus.FULL,restoredLanguage:void 0,restoredCLS:void 0,restoredApps:void 0})];(0,u.testDeviceActionStates)(i(),a,(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(),A((0,p.Right)({isDeviceOnboarded:!1})),m(r.DeviceModelId.STAX),g(),y();const a=R({languageId:1,installedApps:[{appName:"App1",data:"0xaa"}],clsHexImage:"0x0102"}),n=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),t(e.RestoreBackupSteps.RequestMasterConsent,r.UserInteractionRequired.GrantConsent),t(e.RestoreBackupSteps.InstallLanguagePackage),t(e.RestoreBackupSteps.InstallLanguagePackage),S({restoreStatus:e.RestoreBackupStatus.PARTIAL,restoredLanguage:!0,restoredCLS:!1,restoredApps:[{appName:"App1",restoredApp:!1,restoredAppStorage:!1}]})];(0,u.testDeviceActionStates)(i(a),n,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:s})})),it("should skip RequestMasterConsent when the device does not support the feature",()=>new Promise((o,s)=>{c(),A(),m(r.DeviceModelId.NANO_X),g();const a=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),S({restoreStatus:e.RestoreBackupStatus.FULL,restoredLanguage:void 0,restoredCLS:void 0,restoredApps:void 0})];(0,u.testDeviceActionStates)(i(),a,(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(),A(),m(r.DeviceModelId.STAX),g((0,p.Right)(e.RequestMasterConsentResult.REJECTED)),y();const a=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),t(e.RestoreBackupSteps.RequestMasterConsent,r.UserInteractionRequired.GrantConsent),S({restoreStatus:e.RestoreBackupStatus.PARTIAL,restoredLanguage:void 0,restoredCLS:void 0,restoredApps:void 0})];(0,u.testDeviceActionStates)(i(),a,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:s})})),it("should skip InstallOrUpdateApps and RestoreAppsStorage when the backup has no app",()=>new Promise((o,s)=>{c(),A(),m(r.DeviceModelId.STAX),g(),w(),v(),L();const a=R({clsHexImage:"0x0102"}),n=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),t(e.RestoreBackupSteps.RequestMasterConsent,r.UserInteractionRequired.GrantConsent),t(e.RestoreBackupSteps.UploadCustomLockScreen),t(e.RestoreBackupSteps.UploadCustomLockScreen),S({restoreStatus:e.RestoreBackupStatus.FULL,restoredLanguage:void 0,restoredCLS:!0,restoredApps:void 0})];(0,u.testDeviceActionStates)(i(a),n,(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(),A(),m(r.DeviceModelId.NANO_X),w();const a=R({clsHexImage:"0x0102"}),n=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),S({restoreStatus:e.RestoreBackupStatus.PARTIAL,restoredLanguage:void 0,restoredCLS:!1,restoredApps:void 0})];(0,u.testDeviceActionStates)(i(a),n,(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(),A(),m(r.DeviceModelId.STAX),g(),w();const a=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),t(e.RestoreBackupSteps.RequestMasterConsent,r.UserInteractionRequired.GrantConsent),S({restoreStatus:e.RestoreBackupStatus.FULL,restoredLanguage:void 0,restoredCLS:void 0,restoredApps:void 0})];(0,u.testDeviceActionStates)(i(),a,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:s})})),describe("UploadCustomLockScreen required user interactions",()=>{const o=(a,n)=>new Promise((h,b)=>{c(),A(),m(a),g(),H(n);const C=[],{observable:V}=i(R({clsHexImage:"0x0102"}))._execute((0,d.makeDeviceActionInternalApiMock)());V.subscribe({next:l=>{l.status===r.DeviceActionStatus.Pending&&l.intermediateValue.step===e.RestoreBackupSteps.UploadCustomLockScreen&&C.push(l.intermediateValue.requiredUserInteraction)},error:b,complete:()=>h(C)})}),s=[r.UserInteractionRequired.UnlockDevice,r.UserInteractionRequired.ConfirmLoadImage,r.UserInteractionRequired.ConfirmCommitImage];it("should hide confirm load/commit image interactions but keep the others when master consent is granted",async()=>{const a=await o(r.DeviceModelId.STAX,s);expect(a).toContain(r.UserInteractionRequired.UnlockDevice),expect(a).not.toContain(r.UserInteractionRequired.ConfirmLoadImage),expect(a).not.toContain(r.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,s)=>{c(),A(),m(r.DeviceModelId.STAX),g(),y((0,p.Left)(new r.RefusedByUserDAError)),v((0,p.Left)(new r.RefusedByUserDAError)),L((0,p.Right)([])),w((0,p.Left)(new r.RefusedByUserDAError));const a=R({languageId:1,installedApps:[{appName:"App1",data:"0xaa"}],clsHexImage:"0x0102"}),n=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),t(e.RestoreBackupSteps.RequestMasterConsent,r.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({restoreStatus:e.RestoreBackupStatus.PARTIAL,restoredLanguage:!1,restoredCLS:!1,restoredApps:[{appName:"App1",restoredApp:!1,restoredAppStorage:!1}]})];(0,u.testDeviceActionStates)(i(a),n,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:s})})),it("should report a partial restore when an app storage is not restored",()=>new Promise((o,s)=>{c(),A(),m(r.DeviceModelId.STAX),g(),v((0,p.Right)({successfullyInstalled:[{versionName:"App1"}],alreadyInstalled:[],missingApplications:[]})),L((0,p.Right)([{appName:"App1",restoredAppStorage:!1}]));const a=R({installedApps:[{appName:"App1",data:"0xaa"}]}),n=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),t(e.RestoreBackupSteps.RequestMasterConsent,r.UserInteractionRequired.GrantConsent),t(e.RestoreBackupSteps.InstallOrUpdateApps),t(e.RestoreBackupSteps.InstallOrUpdateApps),t(e.RestoreBackupSteps.RestoreAppsStorage),t(e.RestoreBackupSteps.RestoreAppsStorage),S({restoreStatus:e.RestoreBackupStatus.PARTIAL,restoredLanguage:void 0,restoredCLS:void 0,restoredApps:[{appName:"App1",restoredApp:!0,restoredAppStorage:!1}]})];(0,u.testDeviceActionStates)(i(a),n,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:s})})),it("should stop and report out of memory when the language pack install runs out of memory",()=>new Promise((o,s)=>{c(),A(),m(r.DeviceModelId.STAX),g(),y((0,p.Left)(new r.OutOfMemoryDAError)),v(),L(),w();const a=R({languageId:1,installedApps:[{appName:"App1",data:"0xaa"}],clsHexImage:"0x0102"}),n=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),t(e.RestoreBackupSteps.RequestMasterConsent,r.UserInteractionRequired.GrantConsent),t(e.RestoreBackupSteps.InstallLanguagePackage),t(e.RestoreBackupSteps.InstallLanguagePackage),S({restoreStatus:e.RestoreBackupStatus.OUT_OF_MEMORY,restoredLanguage:!1,restoredCLS:!1,restoredApps:[{appName:"App1",restoredApp:!1,restoredAppStorage:!1}]})];(0,u.testDeviceActionStates)(i(a),n,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:s})})),it("should stop and report out of memory when the apps install runs out of memory",()=>new Promise((o,s)=>{c(),A(),m(r.DeviceModelId.STAX),g(),y(),v((0,p.Left)(new r.OutOfMemoryDAError)),L(),w();const a=R({languageId:1,installedApps:[{appName:"App1",data:"0xaa"}],clsHexImage:"0x0102"}),n=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),t(e.RestoreBackupSteps.RequestMasterConsent,r.UserInteractionRequired.GrantConsent),t(e.RestoreBackupSteps.InstallLanguagePackage),t(e.RestoreBackupSteps.InstallLanguagePackage),t(e.RestoreBackupSteps.InstallOrUpdateApps),t(e.RestoreBackupSteps.InstallOrUpdateApps),S({restoreStatus:e.RestoreBackupStatus.OUT_OF_MEMORY,restoredLanguage:!0,restoredCLS:!1,restoredApps:[{appName:"App1",restoredApp:!1,restoredAppStorage:!1}]})];(0,u.testDeviceActionStates)(i(a),n,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:s})})),describe("Security Key app",()=>{const o="Security Key",s=l=>D(l),a=()=>{const l=[];return vi.mocked(B.restoreAppsStorage).mockReturnValue((0,U.createMachine)({context:({input:k})=>{const I=k.backupApps.map(K=>K.appName);return l.push(I),{appNames:I,intermediateValue:{requiredUserInteraction:r.UserInteractionRequired.None}}},initial:"ready",states:{ready:{after:{0:"done"}},done:{type:"final"}},output:({context:k})=>(0,p.Right)(k.appNames.map(I=>({appName:I,restoredAppStorage:!0})))})),l},n=()=>{c(),A(),m(r.DeviceModelId.STAX),g()},h=()=>[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),t(e.RestoreBackupSteps.RequestMasterConsent,r.UserInteractionRequired.GrantConsent),t(e.RestoreBackupSteps.InstallOrUpdateApps),t(e.RestoreBackupSteps.InstallOrUpdateApps)],b=(...l)=>(0,p.Right)({successfullyInstalled:l.map(k=>({versionName:k})),alreadyInstalled:[],missingApplications:[]}),C=(l,k=b())=>vi.mocked(F.installOrUpdateApps).mockReturnValueOnce(s(l)).mockReturnValueOnce(s(k)),V=()=>R({installedApps:[{appName:"App1",data:"0xaa"},{appName:o,data:"0xbb"}],clsHexImage:"0x0102"});it("should install the Security Key app and restore its data in a first pass, before the other apps",async()=>{n(),C(b(o),b("App1"));const l=a();w(),await new Promise((k,I)=>(0,u.testDeviceActionStates)(i(V()),[...h(),t(e.RestoreBackupSteps.RestoreAppsStorage),t(e.RestoreBackupSteps.RestoreAppsStorage),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({restoreStatus:e.RestoreBackupStatus.FULL,restoredLanguage:void 0,restoredCLS:!0,restoredApps:[{appName:"App1",restoredApp:!0,restoredAppStorage:!0},{appName:o,restoredApp:!0,restoredAppStorage:!0}]})],(0,d.makeDeviceActionInternalApiMock)(),{onDone:k,onError:I})),expect(vi.mocked(F.installOrUpdateApps).mock.calls[0][2]).toEqual([{name:o}]),expect(vi.mocked(F.installOrUpdateApps).mock.calls[1][2]).toEqual([{name:"App1"}]),expect(l).toEqual([[o],["App1"]])}),it("should keep the restored Security Key app when the other apps install runs out of memory",async()=>{n(),C(b(o),(0,p.Left)(new r.OutOfMemoryDAError));const l=a();w(),await new Promise((k,I)=>(0,u.testDeviceActionStates)(i(V()),[...h(),t(e.RestoreBackupSteps.RestoreAppsStorage),t(e.RestoreBackupSteps.RestoreAppsStorage),t(e.RestoreBackupSteps.InstallOrUpdateApps),t(e.RestoreBackupSteps.InstallOrUpdateApps),S({restoreStatus:e.RestoreBackupStatus.OUT_OF_MEMORY,restoredLanguage:void 0,restoredCLS:!1,restoredApps:[{appName:"App1",restoredApp:!1,restoredAppStorage:!1},{appName:o,restoredApp:!0,restoredAppStorage:!0}]})],(0,d.makeDeviceActionInternalApiMock)(),{onDone:k,onError:I})),expect(l).toEqual([[o]])}),it("should stop when the Security Key app install runs out of memory",()=>new Promise((l,k)=>{n(),C((0,p.Left)(new r.OutOfMemoryDAError)),L(),w(),(0,u.testDeviceActionStates)(i(V()),[...h(),S({restoreStatus:e.RestoreBackupStatus.OUT_OF_MEMORY,restoredLanguage:void 0,restoredCLS:!1,restoredApps:[{appName:"App1",restoredApp:!1,restoredAppStorage:!1},{appName:o,restoredApp:!1,restoredAppStorage:!1}]})],(0,d.makeDeviceActionInternalApiMock)(),{onDone:l,onError:k})})),it("should keep going with the other apps when the user refuses the Security Key app install",async()=>{n(),C((0,p.Left)(new r.RefusedByUserDAError),b("App1"));const l=a();w(),await new Promise((k,I)=>(0,u.testDeviceActionStates)(i(V()),[...h(),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({restoreStatus:e.RestoreBackupStatus.PARTIAL,restoredLanguage:void 0,restoredCLS:!0,restoredApps:[{appName:"App1",restoredApp:!0,restoredAppStorage:!0},{appName:o,restoredApp:!1,restoredAppStorage:!1}]})],(0,d.makeDeviceActionInternalApiMock)(),{onDone:k,onError:I})),expect(l).toEqual([["App1"]])}),it("should skip the Security Key app storage restore and the other apps steps when it is the only app and has no data",()=>new Promise((l,k)=>{n(),C((0,p.Right)({successfullyInstalled:[],alreadyInstalled:[o],missingApplications:[]})),L(),(0,u.testDeviceActionStates)(i(R({installedApps:[{appName:o,data:void 0}]})),[...h(),S({restoreStatus:e.RestoreBackupStatus.FULL,restoredLanguage:void 0,restoredCLS:void 0,restoredApps:[{appName:o,restoredApp:!0,restoredAppStorage:void 0}]})],(0,d.makeDeviceActionInternalApiMock)(),{onDone:l,onError:k})}))})}),describe("Error",()=>{it("should go to Error when waitForAppAndVersion returns Left",()=>new Promise((o,s)=>{const a=new r.UnknownDAError("waitForAppAndVersion failed");vi.mocked(x.waitForAppAndVersion).mockReturnValue(D((0,p.Left)(a)));const n=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),O(a)];(0,u.testDeviceActionStates)(i(),n,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:s})})),it("should go to Error when goToDashboard returns Left",()=>new Promise((o,s)=>{c("Bitcoin");const a=new r.UnknownDAError("goToDashboard failed");E((0,p.Left)(a));const n=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GoToDashboard),t(e.RestoreBackupSteps.GoToDashboard),O(a)];(0,u.testDeviceActionStates)(i(),n,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:s})})),it("should go to Error when getIsOnboarded returns Left",()=>new Promise((o,s)=>{c();const a=new T.GetIsOnboardedError(new Error("command failed"));A((0,p.Left)(a));const n=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),O(a)];(0,u.testDeviceActionStates)(i(),n,(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(),A(),m(r.DeviceModelId.STAX);const a=new T.RequestMasterConsentError(new Error("command failed"));g((0,p.Left)(a));const n=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),t(e.RestoreBackupSteps.RequestMasterConsent,r.UserInteractionRequired.GrantConsent),O(a)];(0,u.testDeviceActionStates)(i(),n,(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(),A(),m(r.DeviceModelId.STAX),g();const a=new r.UnknownDAError("installLanguagePackage failed");y((0,p.Left)(a));const n=R({languageId:1}),h=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),t(e.RestoreBackupSteps.RequestMasterConsent,r.UserInteractionRequired.GrantConsent),t(e.RestoreBackupSteps.InstallLanguagePackage),t(e.RestoreBackupSteps.InstallLanguagePackage),O(a)];(0,u.testDeviceActionStates)(i(n),h,(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(),A(),m(r.DeviceModelId.STAX),g();const a=new r.UnknownDAError("installOrUpdateApps failed");v((0,p.Left)(a));const n=R({installedApps:[{appName:"App1",data:"0xaa"}]}),h=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),t(e.RestoreBackupSteps.RequestMasterConsent,r.UserInteractionRequired.GrantConsent),t(e.RestoreBackupSteps.InstallOrUpdateApps),t(e.RestoreBackupSteps.InstallOrUpdateApps),O(a)];(0,u.testDeviceActionStates)(i(n),h,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:s})})),it("should go to Error when restoreAppsStorage returns Left",()=>new Promise((o,s)=>{c(),A(),m(r.DeviceModelId.STAX),g(),v((0,p.Right)({successfullyInstalled:[{versionName:"App1"}],alreadyInstalled:[],missingApplications:[]}));const a=new r.UnknownDAError("restoreAppsStorage failed");L((0,p.Left)(a));const n=R({installedApps:[{appName:"App1",data:"0xaa"}]}),h=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),t(e.RestoreBackupSteps.RequestMasterConsent,r.UserInteractionRequired.GrantConsent),t(e.RestoreBackupSteps.InstallOrUpdateApps),t(e.RestoreBackupSteps.InstallOrUpdateApps),t(e.RestoreBackupSteps.RestoreAppsStorage),t(e.RestoreBackupSteps.RestoreAppsStorage),O(a)];(0,u.testDeviceActionStates)(i(n),h,(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(),A(),m(r.DeviceModelId.STAX),g();const a=new r.UnknownDAError("uploadCustomLockScreen failed");w((0,p.Left)(a));const n=R({clsHexImage:"0x0102"}),h=[t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.WaitForAppAndVersion),t(e.RestoreBackupSteps.GetIsOnboarded),t(e.RestoreBackupSteps.RequestMasterConsent,r.UserInteractionRequired.GrantConsent),t(e.RestoreBackupSteps.UploadCustomLockScreen),t(e.RestoreBackupSteps.UploadCustomLockScreen),O(a)];(0,u.testDeviceActionStates)(i(n),h,(0,d.makeDeviceActionInternalApiMock)(),{onDone:o,onError:s})}))})});
2
2
  //# sourceMappingURL=RestoreBackupDeviceAction.test.js.map