@ledgerhq/dmk-ledger-wallet 0.5.0 → 0.6.0

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 (58) hide show
  1. package/lib/cjs/api/device-action/OsUpdate/Resolve/ResolveOsUpdatePathDeviceAction.test.js +1 -1
  2. package/lib/cjs/api/device-action/OsUpdate/Resolve/ResolveOsUpdatePathDeviceAction.test.js.map +2 -2
  3. package/lib/cjs/api/device-action/OsUpdate/Resolve/Substeps/ResolveOsUpdatePath.test.js +1 -1
  4. package/lib/cjs/api/device-action/OsUpdate/Resolve/Substeps/ResolveOsUpdatePath.test.js.map +3 -3
  5. package/lib/cjs/api/device-action/OsUpdate/Shared/OsUpdateUtils.js +1 -1
  6. package/lib/cjs/api/device-action/OsUpdate/Shared/OsUpdateUtils.js.map +3 -3
  7. package/lib/cjs/api/device-action/OsUpdate/Shared/Substeps/GetOsVersion.test.js +1 -1
  8. package/lib/cjs/api/device-action/OsUpdate/Shared/Substeps/GetOsVersion.test.js.map +2 -2
  9. package/lib/cjs/api/device-action/OsUpdate/Update/FlashMcu/FlashMcuDeviceAction.js +1 -1
  10. package/lib/cjs/api/device-action/OsUpdate/Update/FlashMcu/FlashMcuDeviceAction.js.map +2 -2
  11. package/lib/cjs/api/device-action/OsUpdate/Update/FlashMcu/FlashMcuDeviceAction.test.js +1 -1
  12. package/lib/cjs/api/device-action/OsUpdate/Update/FlashMcu/FlashMcuDeviceAction.test.js.map +3 -3
  13. package/lib/cjs/api/device-action/OsUpdate/Update/FlashMcu/Substeps/FlashMcu.test.js +1 -1
  14. package/lib/cjs/api/device-action/OsUpdate/Update/FlashMcu/Substeps/FlashMcu.test.js.map +3 -3
  15. package/lib/cjs/api/device-action/OsUpdate/Update/FlashMcu/Substeps/ResolveMcuVersion.js +1 -1
  16. package/lib/cjs/api/device-action/OsUpdate/Update/FlashMcu/Substeps/ResolveMcuVersion.js.map +3 -3
  17. package/lib/cjs/api/device-action/OsUpdate/Update/FlashMcu/Substeps/ResolveMcuVersion.test.js +1 -1
  18. package/lib/cjs/api/device-action/OsUpdate/Update/FlashMcu/Substeps/ResolveMcuVersion.test.js.map +3 -3
  19. package/lib/cjs/api/device-action/OsUpdate/Update/FlashMcu/types.js +1 -1
  20. package/lib/cjs/api/device-action/OsUpdate/Update/FlashMcu/types.js.map +2 -2
  21. package/lib/cjs/api/device-action/OsUpdate/Update/InstallOsUpdate/InstallOsUpdateDeviceAction.test.js +1 -1
  22. package/lib/cjs/api/device-action/OsUpdate/Update/InstallOsUpdate/InstallOsUpdateDeviceAction.test.js.map +2 -2
  23. package/lib/cjs/api/device-action/OsUpdate/Update/InstallOsUpdate/Substeps/InstallFirmware.test.js +1 -1
  24. package/lib/cjs/api/device-action/OsUpdate/Update/InstallOsUpdate/Substeps/InstallFirmware.test.js.map +3 -3
  25. package/lib/cjs/package.json +2 -2
  26. package/lib/esm/api/device-action/OsUpdate/Resolve/ResolveOsUpdatePathDeviceAction.test.js +1 -1
  27. package/lib/esm/api/device-action/OsUpdate/Resolve/ResolveOsUpdatePathDeviceAction.test.js.map +3 -3
  28. package/lib/esm/api/device-action/OsUpdate/Resolve/Substeps/ResolveOsUpdatePath.test.js +1 -1
  29. package/lib/esm/api/device-action/OsUpdate/Resolve/Substeps/ResolveOsUpdatePath.test.js.map +3 -3
  30. package/lib/esm/api/device-action/OsUpdate/Shared/OsUpdateUtils.js +1 -1
  31. package/lib/esm/api/device-action/OsUpdate/Shared/OsUpdateUtils.js.map +3 -3
  32. package/lib/esm/api/device-action/OsUpdate/Shared/Substeps/GetOsVersion.test.js +1 -1
  33. package/lib/esm/api/device-action/OsUpdate/Shared/Substeps/GetOsVersion.test.js.map +3 -3
  34. package/lib/esm/api/device-action/OsUpdate/Update/FlashMcu/FlashMcuDeviceAction.js +1 -1
  35. package/lib/esm/api/device-action/OsUpdate/Update/FlashMcu/FlashMcuDeviceAction.js.map +2 -2
  36. package/lib/esm/api/device-action/OsUpdate/Update/FlashMcu/FlashMcuDeviceAction.test.js +1 -1
  37. package/lib/esm/api/device-action/OsUpdate/Update/FlashMcu/FlashMcuDeviceAction.test.js.map +3 -3
  38. package/lib/esm/api/device-action/OsUpdate/Update/FlashMcu/Substeps/FlashMcu.test.js +1 -1
  39. package/lib/esm/api/device-action/OsUpdate/Update/FlashMcu/Substeps/FlashMcu.test.js.map +3 -3
  40. package/lib/esm/api/device-action/OsUpdate/Update/FlashMcu/Substeps/ResolveMcuVersion.js +1 -1
  41. package/lib/esm/api/device-action/OsUpdate/Update/FlashMcu/Substeps/ResolveMcuVersion.js.map +3 -3
  42. package/lib/esm/api/device-action/OsUpdate/Update/FlashMcu/Substeps/ResolveMcuVersion.test.js +1 -1
  43. package/lib/esm/api/device-action/OsUpdate/Update/FlashMcu/Substeps/ResolveMcuVersion.test.js.map +3 -3
  44. package/lib/esm/api/device-action/OsUpdate/Update/FlashMcu/types.js.map +2 -2
  45. package/lib/esm/api/device-action/OsUpdate/Update/InstallOsUpdate/InstallOsUpdateDeviceAction.test.js +1 -1
  46. package/lib/esm/api/device-action/OsUpdate/Update/InstallOsUpdate/InstallOsUpdateDeviceAction.test.js.map +3 -3
  47. package/lib/esm/api/device-action/OsUpdate/Update/InstallOsUpdate/Substeps/InstallFirmware.test.js +1 -1
  48. package/lib/esm/api/device-action/OsUpdate/Update/InstallOsUpdate/Substeps/InstallFirmware.test.js.map +3 -3
  49. package/lib/esm/package.json +2 -2
  50. package/lib/types/api/device-action/OsUpdate/Shared/OsUpdateUtils.d.ts +2 -0
  51. package/lib/types/api/device-action/OsUpdate/Shared/OsUpdateUtils.d.ts.map +1 -1
  52. package/lib/types/api/device-action/OsUpdate/Update/FlashMcu/FlashMcuDeviceAction.d.ts.map +1 -1
  53. package/lib/types/api/device-action/OsUpdate/Update/FlashMcu/Substeps/ResolveMcuVersion.d.ts +2 -3
  54. package/lib/types/api/device-action/OsUpdate/Update/FlashMcu/Substeps/ResolveMcuVersion.d.ts.map +1 -1
  55. package/lib/types/api/device-action/OsUpdate/Update/FlashMcu/types.d.ts +3 -0
  56. package/lib/types/api/device-action/OsUpdate/Update/FlashMcu/types.d.ts.map +1 -1
  57. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  58. package/package.json +5 -5
@@ -1,2 +1,2 @@
1
- "use strict";var i=require("@ledgerhq/device-management-kit"),a=require("purify-ts"),O=require("xstate"),d=require("../../../device-action/__test-utils__/makeInternalApi"),c=require("../../../device-action/__test-utils__/testDeviceActionStates"),R=require("../../../device-action/OsUpdate/Resolve/ResolveOsUpdatePathDeviceAction"),U=require("../../../device-action/OsUpdate/Resolve/ResolveOsUpdatePathDeviceActionErrors"),k=require("../../../device-action/OsUpdate/Resolve/Substeps/ResolveOsUpdatePath"),e=require("../../../device-action/OsUpdate/Resolve/types"),D=require("../../../device-action/OsUpdate/Shared/OsUpdateDeviceActionErrors"),P=require("../../../device-action/OsUpdate/Shared/Substeps/GetOsVersion"),y=require("../../../device-action/OsUpdate/Shared/Substeps/GoToDashboard"),v=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/Shared/Substeps/GetOsVersion");vi.mock("@api/device-action/OsUpdate/Resolve/Substeps/ResolveOsUpdatePath");const o=n=>({status:i.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:i.UserInteractionRequired.None,step:n}}),S=n=>({status:i.DeviceActionStatus.Completed,output:n}),A=n=>({status:i.DeviceActionStatus.Error,error:n}),F=n=>(0,O.createMachine)({initial:"ready",states:{ready:{after:{0:"done"},entry:(0,O.assign)({intermediateValue:()=>({requiredUserInteraction:i.UserInteractionRequired.None})})},done:{type:"final"}},output:n}),V=n=>F(()=>n);describe("ResolveOsUpdatePathDeviceAction",()=>{const n={isBootloader:!1,isOsu:!1,targetId:857735172,seTargetId:857735172,mcuTargetId:void 0,seVersion:"1.3.0",seFlags:new Uint8Array([230,0,0,0]),mcuSephVersion:"5.24",mcuBootloaderVersion:"0.48",hwVersion:"00",langId:0,recoverState:void 0,secureElementFlags:{isPinValidated:!0,hasMcuSerialNumber:!0,hasValidCertificate:!0,isCustomAuthorityConnectionAllowed:!1,isSecureConnectionAllowed:!1,isOnboarded:!0,isMcuCodeSigned:!0,isInRecoveryMode:!1}},f=[{osuFirmware:{id:200,notes:"Update notes",perso:"perso",firmware:"osu",firmwareKey:"osu-key",hash:"osu-hash",nextFinalFirmware:300},finalFirmware:{id:300,version:"1.4.0",perso:"perso",firmware:"final",firmwareKey:"final-key",hash:"final-hash",bytes:123,mcuVersions:[1]},shouldFlashMcu:!1}];beforeEach(()=>{vi.resetAllMocks()});const l=(t="BOLOS")=>vi.mocked(v.waitForAppAndVersion).mockReturnValue(V((0,a.Right)({name:t,version:"1.0.0"}))),g=t=>{const s=[...t];vi.mocked(v.waitForAppAndVersion).mockReturnValue(F(()=>(0,a.Right)({name:s.shift()??"BOLOS",version:"1.0.0"})))},w=(t=(0,a.Right)(void 0))=>vi.mocked(y.goToDashboard).mockReturnValue(V(t)),m=(t=(0,a.Right)(n))=>vi.mocked(P.getOsVersion).mockReturnValue(()=>Promise.resolve(t)),h=(t=(0,a.Right)(f))=>vi.mocked(k.resolveOsUpdatePath).mockReturnValue(()=>Promise.resolve(t)),u=()=>new R.ResolveOsUpdatePathDeviceAction({input:{unlockTimeout:3e4}});describe("Success",()=>{it("Should complete the resolve flow when the device is already on dashboard",()=>new Promise((t,s)=>{l(),m(),h();const r=[o(e.ResolveOsUpdatePathSteps.WaitForAppAndVersion),o(e.ResolveOsUpdatePathSteps.WaitForAppAndVersion),o(e.ResolveOsUpdatePathSteps.GetOsVersion),o(e.ResolveOsUpdatePathSteps.ResolveOsUpdatePath),S(f)];(0,c.testDeviceActionStates)(u(),r,(0,d.makeDeviceActionInternalApiMock)(),{onDone:t,onError:s})})),it("Should go to dashboard and wait for app and version again when an app is open",()=>new Promise((t,s)=>{g(["Bitcoin","BOLOS"]),w(),m(),h();const r=[o(e.ResolveOsUpdatePathSteps.WaitForAppAndVersion),o(e.ResolveOsUpdatePathSteps.WaitForAppAndVersion),o(e.ResolveOsUpdatePathSteps.GoToDashboard),o(e.ResolveOsUpdatePathSteps.GoToDashboard),o(e.ResolveOsUpdatePathSteps.WaitForAppAndVersion),o(e.ResolveOsUpdatePathSteps.WaitForAppAndVersion),o(e.ResolveOsUpdatePathSteps.GetOsVersion),o(e.ResolveOsUpdatePathSteps.ResolveOsUpdatePath),S(f)];(0,c.testDeviceActionStates)(u(),r,(0,d.makeDeviceActionInternalApiMock)(),{onDone:t,onError:s})}))}),describe("Error",()=>{it("Should go to Error when waitForAppAndVersion returns Left",()=>new Promise((t,s)=>{const r=new i.UnknownDAError("waitForAppAndVersion failed");vi.mocked(v.waitForAppAndVersion).mockReturnValue(V((0,a.Left)(r)));const p=[o(e.ResolveOsUpdatePathSteps.WaitForAppAndVersion),o(e.ResolveOsUpdatePathSteps.WaitForAppAndVersion),A(r)];(0,c.testDeviceActionStates)(u(),p,(0,d.makeDeviceActionInternalApiMock)(),{onDone:t,onError:s})})),it("Should go to Error when goToDashboard returns Left",()=>new Promise((t,s)=>{l("Bitcoin");const r=new i.UnknownDAError("goToDashboard failed");w((0,a.Left)(r));const p=[o(e.ResolveOsUpdatePathSteps.WaitForAppAndVersion),o(e.ResolveOsUpdatePathSteps.WaitForAppAndVersion),o(e.ResolveOsUpdatePathSteps.GoToDashboard),o(e.ResolveOsUpdatePathSteps.GoToDashboard),A(r)];(0,c.testDeviceActionStates)(u(),p,(0,d.makeDeviceActionInternalApiMock)(),{onDone:t,onError:s})})),it("Should go to Error when getOsVersion returns Left",()=>new Promise((t,s)=>{l();const r=new D.GetOsVersionError(new Error("command failed"));m((0,a.Left)(r)),h();const p=[o(e.ResolveOsUpdatePathSteps.WaitForAppAndVersion),o(e.ResolveOsUpdatePathSteps.WaitForAppAndVersion),o(e.ResolveOsUpdatePathSteps.GetOsVersion),A(r)];(0,c.testDeviceActionStates)(u(),p,(0,d.makeDeviceActionInternalApiMock)(),{onDone:t,onError:s})})),it("Should go to Error when resolveOsUpdatePath returns Left",()=>new Promise((t,s)=>{l(),m();const r=new U.ResolveOsUpdatePathError(new Error("manager api failed"));h((0,a.Left)(r));const p=[o(e.ResolveOsUpdatePathSteps.WaitForAppAndVersion),o(e.ResolveOsUpdatePathSteps.WaitForAppAndVersion),o(e.ResolveOsUpdatePathSteps.GetOsVersion),o(e.ResolveOsUpdatePathSteps.ResolveOsUpdatePath),A(r)];(0,c.testDeviceActionStates)(u(),p,(0,d.makeDeviceActionInternalApiMock)(),{onDone:t,onError:s})}))})});
1
+ "use strict";var s=require("@ledgerhq/device-management-kit"),i=require("purify-ts"),f=require("xstate"),p=require("../../../device-action/__test-utils__/makeInternalApi"),c=require("../../../device-action/__test-utils__/testDeviceActionStates"),R=require("../../../device-action/OsUpdate/Resolve/ResolveOsUpdatePathDeviceAction"),U=require("../../../device-action/OsUpdate/Resolve/ResolveOsUpdatePathDeviceActionErrors"),k=require("../../../device-action/OsUpdate/Resolve/Substeps/ResolveOsUpdatePath"),e=require("../../../device-action/OsUpdate/Resolve/types"),D=require("../../../device-action/OsUpdate/Shared/OsUpdateDeviceActionErrors"),P=require("../../../device-action/OsUpdate/Shared/Substeps/GetOsVersion"),y=require("../../../device-action/OsUpdate/Shared/Substeps/GoToDashboard"),v=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/Shared/Substeps/GetOsVersion");vi.mock("@api/device-action/OsUpdate/Resolve/Substeps/ResolveOsUpdatePath");const o=a=>({status:s.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:s.UserInteractionRequired.None,step:a}}),S=a=>({status:s.DeviceActionStatus.Completed,output:a}),A=a=>({status:s.DeviceActionStatus.Error,error:a}),F=a=>(0,f.createMachine)({initial:"ready",states:{ready:{after:{0:"done"},entry:(0,f.assign)({intermediateValue:()=>({requiredUserInteraction:s.UserInteractionRequired.None})})},done:{type:"final"}},output:a}),w=a=>F(()=>a);describe("ResolveOsUpdatePathDeviceAction",()=>{const a={isBootloader:!1,isOsu:!1,targetId:857735172,seTargetId:857735172,mcuTargetId:void 0,seVersion:"1.3.0",seFlags:new Uint8Array([230,0,0,0]),mcuSephVersion:"5.24",mcuBootloaderVersion:"0.48",hwVersion:"00",langId:0,recoverState:void 0,secureElementFlags:{isPinValidated:!0,hasMcuSerialNumber:!0,hasValidCertificate:!0,isCustomAuthorityConnectionAllowed:!1,isSecureConnectionAllowed:!1,isOnboarded:!0,isMcuCodeSigned:!0,isInRecoveryMode:!1,hasEndorsementCertificateInSlot1:!1,hasEndorsementCertificateInSlot2:!1,numberOfWords:s.SeedWordCount.TwentyFour,currentWordIndex:0,onboardingState:s.OnboardingState.Unknown}},O=[{osuFirmware:{id:200,notes:"Update notes",perso:"perso",firmware:"osu",firmwareKey:"osu-key",hash:"osu-hash",nextFinalFirmware:300},finalFirmware:{id:300,version:"1.4.0",perso:"perso",firmware:"final",firmwareKey:"final-key",hash:"final-hash",bytes:123,mcuVersions:[1]},shouldFlashMcu:!1}];beforeEach(()=>{vi.resetAllMocks()});const l=(t="BOLOS")=>vi.mocked(v.waitForAppAndVersion).mockReturnValue(w((0,i.Right)({name:t,version:"1.0.0"}))),g=t=>{const n=[...t];vi.mocked(v.waitForAppAndVersion).mockReturnValue(F(()=>(0,i.Right)({name:n.shift()??"BOLOS",version:"1.0.0"})))},V=(t=(0,i.Right)(void 0))=>vi.mocked(y.goToDashboard).mockReturnValue(w(t)),m=(t=(0,i.Right)(a))=>vi.mocked(P.getOsVersion).mockReturnValue(()=>Promise.resolve(t)),h=(t=(0,i.Right)(O))=>vi.mocked(k.resolveOsUpdatePath).mockReturnValue(()=>Promise.resolve(t)),u=()=>new R.ResolveOsUpdatePathDeviceAction({input:{unlockTimeout:3e4}});describe("Success",()=>{it("Should complete the resolve flow when the device is already on dashboard",()=>new Promise((t,n)=>{l(),m(),h();const r=[o(e.ResolveOsUpdatePathSteps.WaitForAppAndVersion),o(e.ResolveOsUpdatePathSteps.WaitForAppAndVersion),o(e.ResolveOsUpdatePathSteps.GetOsVersion),o(e.ResolveOsUpdatePathSteps.ResolveOsUpdatePath),S(O)];(0,c.testDeviceActionStates)(u(),r,(0,p.makeDeviceActionInternalApiMock)(),{onDone:t,onError:n})})),it("Should go to dashboard and wait for app and version again when an app is open",()=>new Promise((t,n)=>{g(["Bitcoin","BOLOS"]),V(),m(),h();const r=[o(e.ResolveOsUpdatePathSteps.WaitForAppAndVersion),o(e.ResolveOsUpdatePathSteps.WaitForAppAndVersion),o(e.ResolveOsUpdatePathSteps.GoToDashboard),o(e.ResolveOsUpdatePathSteps.GoToDashboard),o(e.ResolveOsUpdatePathSteps.WaitForAppAndVersion),o(e.ResolveOsUpdatePathSteps.WaitForAppAndVersion),o(e.ResolveOsUpdatePathSteps.GetOsVersion),o(e.ResolveOsUpdatePathSteps.ResolveOsUpdatePath),S(O)];(0,c.testDeviceActionStates)(u(),r,(0,p.makeDeviceActionInternalApiMock)(),{onDone:t,onError:n})}))}),describe("Error",()=>{it("Should go to Error when waitForAppAndVersion returns Left",()=>new Promise((t,n)=>{const r=new s.UnknownDAError("waitForAppAndVersion failed");vi.mocked(v.waitForAppAndVersion).mockReturnValue(w((0,i.Left)(r)));const d=[o(e.ResolveOsUpdatePathSteps.WaitForAppAndVersion),o(e.ResolveOsUpdatePathSteps.WaitForAppAndVersion),A(r)];(0,c.testDeviceActionStates)(u(),d,(0,p.makeDeviceActionInternalApiMock)(),{onDone:t,onError:n})})),it("Should go to Error when goToDashboard returns Left",()=>new Promise((t,n)=>{l("Bitcoin");const r=new s.UnknownDAError("goToDashboard failed");V((0,i.Left)(r));const d=[o(e.ResolveOsUpdatePathSteps.WaitForAppAndVersion),o(e.ResolveOsUpdatePathSteps.WaitForAppAndVersion),o(e.ResolveOsUpdatePathSteps.GoToDashboard),o(e.ResolveOsUpdatePathSteps.GoToDashboard),A(r)];(0,c.testDeviceActionStates)(u(),d,(0,p.makeDeviceActionInternalApiMock)(),{onDone:t,onError:n})})),it("Should go to Error when getOsVersion returns Left",()=>new Promise((t,n)=>{l();const r=new D.GetOsVersionError(new Error("command failed"));m((0,i.Left)(r)),h();const d=[o(e.ResolveOsUpdatePathSteps.WaitForAppAndVersion),o(e.ResolveOsUpdatePathSteps.WaitForAppAndVersion),o(e.ResolveOsUpdatePathSteps.GetOsVersion),A(r)];(0,c.testDeviceActionStates)(u(),d,(0,p.makeDeviceActionInternalApiMock)(),{onDone:t,onError:n})})),it("Should go to Error when resolveOsUpdatePath returns Left",()=>new Promise((t,n)=>{l(),m();const r=new U.ResolveOsUpdatePathError(new Error("manager api failed"));h((0,i.Left)(r));const d=[o(e.ResolveOsUpdatePathSteps.WaitForAppAndVersion),o(e.ResolveOsUpdatePathSteps.WaitForAppAndVersion),o(e.ResolveOsUpdatePathSteps.GetOsVersion),o(e.ResolveOsUpdatePathSteps.ResolveOsUpdatePath),A(r)];(0,c.testDeviceActionStates)(u(),d,(0,p.makeDeviceActionInternalApiMock)(),{onDone:t,onError:n})}))})});
2
2
  //# sourceMappingURL=ResolveOsUpdatePathDeviceAction.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/api/device-action/OsUpdate/Resolve/ResolveOsUpdatePathDeviceAction.test.ts"],
4
- "sourcesContent": ["import {\n DeviceActionStatus,\n type GetOsVersionResponse,\n UnknownDAError,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { type Either, Left, Right } from \"purify-ts\";\nimport { assign, createMachine } from \"xstate\";\n\nimport { makeDeviceActionInternalApiMock } from \"@api/device-action/__test-utils__/makeInternalApi\";\nimport { testDeviceActionStates } from \"@api/device-action/__test-utils__/testDeviceActionStates\";\nimport { ResolveOsUpdatePathDeviceAction } from \"@api/device-action/OsUpdate/Resolve/ResolveOsUpdatePathDeviceAction\";\nimport { ResolveOsUpdatePathError } from \"@api/device-action/OsUpdate/Resolve/ResolveOsUpdatePathDeviceActionErrors\";\nimport { resolveOsUpdatePath } from \"@api/device-action/OsUpdate/Resolve/Substeps/ResolveOsUpdatePath\";\nimport {\n type ResolveOsUpdatePathDAError,\n type ResolveOsUpdatePathDAState,\n ResolveOsUpdatePathSteps,\n} from \"@api/device-action/OsUpdate/Resolve/types\";\nimport { GetOsVersionError } from \"@api/device-action/OsUpdate/Shared/OsUpdateDeviceActionErrors\";\nimport { getOsVersion } from \"@api/device-action/OsUpdate/Shared/Substeps/GetOsVersion\";\nimport { goToDashboard } from \"@api/device-action/OsUpdate/Shared/Substeps/GoToDashboard\";\nimport { waitForAppAndVersion } from \"@api/device-action/OsUpdate/Shared/Substeps/WaitForAppAndVersion\";\nimport { type OsUpdate } from \"@api/device-action/OsUpdate/Shared/types\";\n\nvi.mock(\"@api/device-action/OsUpdate/Shared/Substeps/WaitForAppAndVersion\");\nvi.mock(\"@api/device-action/OsUpdate/Shared/Substeps/GoToDashboard\");\nvi.mock(\"@api/device-action/OsUpdate/Shared/Substeps/GetOsVersion\");\nvi.mock(\"@api/device-action/OsUpdate/Resolve/Substeps/ResolveOsUpdatePath\");\n\nconst pendingState = (\n step: ResolveOsUpdatePathSteps,\n): ResolveOsUpdatePathDAState => ({\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step,\n },\n});\n\nconst completedState = (output: OsUpdate[]): ResolveOsUpdatePathDAState => ({\n status: DeviceActionStatus.Completed,\n output,\n});\n\nconst errorState = (\n error: ResolveOsUpdatePathDAError,\n): ResolveOsUpdatePathDAState => ({\n status: DeviceActionStatus.Error,\n error,\n});\n\nconst createMockActorMachineFromOutput = (\n output: () => Either<unknown, unknown>,\n) =>\n createMachine({\n initial: \"ready\",\n states: {\n ready: {\n after: { 0: \"done\" },\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n }),\n }),\n },\n done: { type: \"final\" },\n },\n output,\n });\n\nconst createMockActorMachine = (output: Either<unknown, unknown>) =>\n createMockActorMachineFromOutput(() => output);\n\ndescribe(\"ResolveOsUpdatePathDeviceAction\", () => {\n const getOsVersionResponse = {\n isBootloader: false,\n isOsu: false,\n targetId: 0x33200004,\n seTargetId: 0x33200004,\n mcuTargetId: undefined,\n seVersion: \"1.3.0\",\n seFlags: new Uint8Array([0xe6, 0x00, 0x00, 0x00]),\n mcuSephVersion: \"5.24\",\n mcuBootloaderVersion: \"0.48\",\n hwVersion: \"00\",\n langId: 0,\n recoverState: undefined,\n secureElementFlags: {\n isPinValidated: true,\n hasMcuSerialNumber: true,\n hasValidCertificate: true,\n isCustomAuthorityConnectionAllowed: false,\n isSecureConnectionAllowed: false,\n isOnboarded: true,\n isMcuCodeSigned: true,\n isInRecoveryMode: false,\n },\n } satisfies GetOsVersionResponse;\n\n const osUpdates = [\n {\n osuFirmware: {\n id: 200,\n notes: \"Update notes\",\n perso: \"perso\",\n firmware: \"osu\",\n firmwareKey: \"osu-key\",\n hash: \"osu-hash\",\n nextFinalFirmware: 300,\n },\n finalFirmware: {\n id: 300,\n version: \"1.4.0\",\n perso: \"perso\",\n firmware: \"final\",\n firmwareKey: \"final-key\",\n hash: \"final-hash\",\n bytes: 123,\n mcuVersions: [1],\n },\n shouldFlashMcu: false,\n },\n ] satisfies OsUpdate[];\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n const setupWaitForAppAndVersion = (appName = \"BOLOS\") =>\n vi.mocked(waitForAppAndVersion).mockReturnValue(\n createMockActorMachine(\n Right({\n name: appName,\n version: \"1.0.0\",\n }),\n ) as unknown as ReturnType<typeof waitForAppAndVersion>,\n );\n\n const setupWaitForAppAndVersionSequence = (appNames: string[]) => {\n const remainingAppNames = [...appNames];\n vi.mocked(waitForAppAndVersion).mockReturnValue(\n createMockActorMachineFromOutput(() =>\n Right({\n name: remainingAppNames.shift() ?? \"BOLOS\",\n version: \"1.0.0\",\n }),\n ) as unknown as ReturnType<typeof waitForAppAndVersion>,\n );\n };\n\n const setupGoToDashboard = (\n output: Either<unknown, unknown> = Right(undefined),\n ) =>\n vi\n .mocked(goToDashboard)\n .mockReturnValue(\n createMockActorMachine(output) as unknown as ReturnType<\n typeof goToDashboard\n >,\n );\n\n const setupGetOsVersion = (\n result: Either<unknown, GetOsVersionResponse> = Right(getOsVersionResponse),\n ) =>\n vi\n .mocked(getOsVersion)\n .mockReturnValue(\n () =>\n Promise.resolve(result) as ReturnType<\n ReturnType<typeof getOsVersion>\n >,\n );\n\n const setupResolveOsUpdatePath = (\n result: Either<unknown, OsUpdate[]> = Right(osUpdates),\n ) =>\n vi\n .mocked(resolveOsUpdatePath)\n .mockReturnValue(\n () =>\n Promise.resolve(result) as ReturnType<\n ReturnType<typeof resolveOsUpdatePath>\n >,\n );\n\n const makeDeviceAction = () =>\n new ResolveOsUpdatePathDeviceAction({\n input: {\n unlockTimeout: 30_000,\n },\n });\n\n describe(\"Success\", () => {\n it(\"Should complete the resolve flow when the device is already on dashboard\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion();\n setupGetOsVersion();\n setupResolveOsUpdatePath();\n\n const expectedStates: ResolveOsUpdatePathDAState[] = [\n pendingState(ResolveOsUpdatePathSteps.WaitForAppAndVersion),\n pendingState(ResolveOsUpdatePathSteps.WaitForAppAndVersion),\n pendingState(ResolveOsUpdatePathSteps.GetOsVersion),\n pendingState(ResolveOsUpdatePathSteps.ResolveOsUpdatePath),\n completedState(osUpdates),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n it(\"Should go to dashboard and wait for app and version again when an app is open\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersionSequence([\"Bitcoin\", \"BOLOS\"]);\n setupGoToDashboard();\n setupGetOsVersion();\n setupResolveOsUpdatePath();\n\n const expectedStates: ResolveOsUpdatePathDAState[] = [\n pendingState(ResolveOsUpdatePathSteps.WaitForAppAndVersion),\n pendingState(ResolveOsUpdatePathSteps.WaitForAppAndVersion),\n pendingState(ResolveOsUpdatePathSteps.GoToDashboard),\n pendingState(ResolveOsUpdatePathSteps.GoToDashboard),\n pendingState(ResolveOsUpdatePathSteps.WaitForAppAndVersion),\n pendingState(ResolveOsUpdatePathSteps.WaitForAppAndVersion),\n pendingState(ResolveOsUpdatePathSteps.GetOsVersion),\n pendingState(ResolveOsUpdatePathSteps.ResolveOsUpdatePath),\n completedState(osUpdates),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n });\n\n describe(\"Error\", () => {\n it(\"Should go to Error when waitForAppAndVersion returns Left\", () =>\n new Promise<void>((resolve, reject) => {\n const error = new UnknownDAError(\"waitForAppAndVersion failed\");\n vi.mocked(waitForAppAndVersion).mockReturnValue(\n createMockActorMachine(Left(error)) as unknown as ReturnType<\n typeof waitForAppAndVersion\n >,\n );\n\n const expectedStates: ResolveOsUpdatePathDAState[] = [\n pendingState(ResolveOsUpdatePathSteps.WaitForAppAndVersion),\n pendingState(ResolveOsUpdatePathSteps.WaitForAppAndVersion),\n errorState(error),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n it(\"Should go to Error when goToDashboard returns Left\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion(\"Bitcoin\");\n const error = new UnknownDAError(\"goToDashboard failed\");\n setupGoToDashboard(Left(error));\n\n const expectedStates: ResolveOsUpdatePathDAState[] = [\n pendingState(ResolveOsUpdatePathSteps.WaitForAppAndVersion),\n pendingState(ResolveOsUpdatePathSteps.WaitForAppAndVersion),\n pendingState(ResolveOsUpdatePathSteps.GoToDashboard),\n pendingState(ResolveOsUpdatePathSteps.GoToDashboard),\n errorState(error),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n it(\"Should go to Error when getOsVersion returns Left\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion();\n const error = new GetOsVersionError(new Error(\"command failed\"));\n setupGetOsVersion(Left(error));\n setupResolveOsUpdatePath();\n\n const expectedStates: ResolveOsUpdatePathDAState[] = [\n pendingState(ResolveOsUpdatePathSteps.WaitForAppAndVersion),\n pendingState(ResolveOsUpdatePathSteps.WaitForAppAndVersion),\n pendingState(ResolveOsUpdatePathSteps.GetOsVersion),\n errorState(error),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n it(\"Should go to Error when resolveOsUpdatePath returns Left\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion();\n setupGetOsVersion();\n const error = new ResolveOsUpdatePathError(\n new Error(\"manager api failed\"),\n );\n setupResolveOsUpdatePath(Left(error));\n\n const expectedStates: ResolveOsUpdatePathDAState[] = [\n pendingState(ResolveOsUpdatePathSteps.WaitForAppAndVersion),\n pendingState(ResolveOsUpdatePathSteps.WaitForAppAndVersion),\n pendingState(ResolveOsUpdatePathSteps.GetOsVersion),\n pendingState(ResolveOsUpdatePathSteps.ResolveOsUpdatePath),\n errorState(error),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n });\n});\n"],
5
- "mappings": "aAAA,IAAAA,EAKO,2CACPC,EAAyC,qBACzCC,EAAsC,kBAEtCC,EAAgD,6DAChDC,EAAuC,oEACvCC,EAAgD,+EAChDC,EAAyC,qFACzCC,EAAoC,4EACpCC,EAIO,qDACPC,EAAkC,yEAClCC,EAA6B,oEAC7BC,EAA8B,qEAC9BC,EAAqC,4EAGrC,GAAG,KAAK,kEAAkE,EAC1E,GAAG,KAAK,2DAA2D,EACnE,GAAG,KAAK,0DAA0D,EAClE,GAAG,KAAK,kEAAkE,EAE1E,MAAMC,EACJC,IACgC,CAChC,OAAQ,qBAAmB,QAC3B,kBAAmB,CACjB,wBAAyB,0BAAwB,KACjD,KAAAA,CACF,CACF,GAEMC,EAAkBC,IAAoD,CAC1E,OAAQ,qBAAmB,UAC3B,OAAAA,CACF,GAEMC,EACJC,IACgC,CAChC,OAAQ,qBAAmB,MAC3B,MAAAA,CACF,GAEMC,EACJH,MAEA,iBAAc,CACZ,QAAS,QACT,OAAQ,CACN,MAAO,CACL,MAAO,CAAE,EAAG,MAAO,EACnB,SAAO,UAAO,CACZ,kBAAmB,KAAO,CACxB,wBAAyB,0BAAwB,IACnD,EACF,CAAC,CACH,EACA,KAAM,CAAE,KAAM,OAAQ,CACxB,EACA,OAAAA,CACF,CAAC,EAEGI,EAA0BJ,GAC9BG,EAAiC,IAAMH,CAAM,EAE/C,SAAS,kCAAmC,IAAM,CAChD,MAAMK,EAAuB,CAC3B,aAAc,GACd,MAAO,GACP,SAAU,UACV,WAAY,UACZ,YAAa,OACb,UAAW,QACX,QAAS,IAAI,WAAW,CAAC,IAAM,EAAM,EAAM,CAAI,CAAC,EAChD,eAAgB,OAChB,qBAAsB,OACtB,UAAW,KACX,OAAQ,EACR,aAAc,OACd,mBAAoB,CAClB,eAAgB,GAChB,mBAAoB,GACpB,oBAAqB,GACrB,mCAAoC,GACpC,0BAA2B,GAC3B,YAAa,GACb,gBAAiB,GACjB,iBAAkB,EACpB,CACF,EAEMC,EAAY,CAChB,CACE,YAAa,CACX,GAAI,IACJ,MAAO,eACP,MAAO,QACP,SAAU,MACV,YAAa,UACb,KAAM,WACN,kBAAmB,GACrB,EACA,cAAe,CACb,GAAI,IACJ,QAAS,QACT,MAAO,QACP,SAAU,QACV,YAAa,YACb,KAAM,aACN,MAAO,IACP,YAAa,CAAC,CAAC,CACjB,EACA,eAAgB,EAClB,CACF,EAEA,WAAW,IAAM,CACf,GAAG,cAAc,CACnB,CAAC,EAED,MAAMC,EAA4B,CAACC,EAAU,UAC3C,GAAG,OAAO,sBAAoB,EAAE,gBAC9BJ,KACE,SAAM,CACJ,KAAMI,EACN,QAAS,OACX,CAAC,CACH,CACF,EAEIC,EAAqCC,GAAuB,CAChE,MAAMC,EAAoB,CAAC,GAAGD,CAAQ,EACtC,GAAG,OAAO,sBAAoB,EAAE,gBAC9BP,EAAiC,OAC/B,SAAM,CACJ,KAAMQ,EAAkB,MAAM,GAAK,QACnC,QAAS,OACX,CAAC,CACH,CACF,CACF,EAEMC,EAAqB,CACzBZ,KAAmC,SAAM,MAAS,IAElD,GACG,OAAO,eAAa,EACpB,gBACCI,EAAuBJ,CAAM,CAG/B,EAEEa,EAAoB,CACxBC,KAAgD,SAAMT,CAAoB,IAE1E,GACG,OAAO,cAAY,EACnB,gBACC,IACE,QAAQ,QAAQS,CAAM,CAG1B,EAEEC,EAA2B,CAC/BD,KAAsC,SAAMR,CAAS,IAErD,GACG,OAAO,qBAAmB,EAC1B,gBACC,IACE,QAAQ,QAAQQ,CAAM,CAG1B,EAEEE,EAAmB,IACvB,IAAI,kCAAgC,CAClC,MAAO,CACL,cAAe,GACjB,CACF,CAAC,EAEH,SAAS,UAAW,IAAM,CACxB,GAAG,2EAA4E,IAC7E,IAAI,QAAc,CAACC,EAASC,IAAW,CACrCX,EAA0B,EAC1BM,EAAkB,EAClBE,EAAyB,EAEzB,MAAMI,EAA+C,CACnDtB,EAAa,2BAAyB,oBAAoB,EAC1DA,EAAa,2BAAyB,oBAAoB,EAC1DA,EAAa,2BAAyB,YAAY,EAClDA,EAAa,2BAAyB,mBAAmB,EACzDE,EAAeO,CAAS,CAC1B,KAEA,0BACEU,EAAiB,EACjBG,KACA,mCAAgC,EAChC,CAAE,OAAQF,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,EAEJ,GAAG,gFAAiF,IAClF,IAAI,QAAc,CAACD,EAASC,IAAW,CACrCT,EAAkC,CAAC,UAAW,OAAO,CAAC,EACtDG,EAAmB,EACnBC,EAAkB,EAClBE,EAAyB,EAEzB,MAAMI,EAA+C,CACnDtB,EAAa,2BAAyB,oBAAoB,EAC1DA,EAAa,2BAAyB,oBAAoB,EAC1DA,EAAa,2BAAyB,aAAa,EACnDA,EAAa,2BAAyB,aAAa,EACnDA,EAAa,2BAAyB,oBAAoB,EAC1DA,EAAa,2BAAyB,oBAAoB,EAC1DA,EAAa,2BAAyB,YAAY,EAClDA,EAAa,2BAAyB,mBAAmB,EACzDE,EAAeO,CAAS,CAC1B,KAEA,0BACEU,EAAiB,EACjBG,KACA,mCAAgC,EAChC,CAAE,OAAQF,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,CACN,CAAC,EAED,SAAS,QAAS,IAAM,CACtB,GAAG,4DAA6D,IAC9D,IAAI,QAAc,CAACD,EAASC,IAAW,CACrC,MAAMhB,EAAQ,IAAI,iBAAe,6BAA6B,EAC9D,GAAG,OAAO,sBAAoB,EAAE,gBAC9BE,KAAuB,QAAKF,CAAK,CAAC,CAGpC,EAEA,MAAMiB,EAA+C,CACnDtB,EAAa,2BAAyB,oBAAoB,EAC1DA,EAAa,2BAAyB,oBAAoB,EAC1DI,EAAWC,CAAK,CAClB,KAEA,0BACEc,EAAiB,EACjBG,KACA,mCAAgC,EAChC,CAAE,OAAQF,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,EAEJ,GAAG,qDAAsD,IACvD,IAAI,QAAc,CAACD,EAASC,IAAW,CACrCX,EAA0B,SAAS,EACnC,MAAML,EAAQ,IAAI,iBAAe,sBAAsB,EACvDU,KAAmB,QAAKV,CAAK,CAAC,EAE9B,MAAMiB,EAA+C,CACnDtB,EAAa,2BAAyB,oBAAoB,EAC1DA,EAAa,2BAAyB,oBAAoB,EAC1DA,EAAa,2BAAyB,aAAa,EACnDA,EAAa,2BAAyB,aAAa,EACnDI,EAAWC,CAAK,CAClB,KAEA,0BACEc,EAAiB,EACjBG,KACA,mCAAgC,EAChC,CAAE,OAAQF,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,EAEJ,GAAG,oDAAqD,IACtD,IAAI,QAAc,CAACD,EAASC,IAAW,CACrCX,EAA0B,EAC1B,MAAML,EAAQ,IAAI,oBAAkB,IAAI,MAAM,gBAAgB,CAAC,EAC/DW,KAAkB,QAAKX,CAAK,CAAC,EAC7Ba,EAAyB,EAEzB,MAAMI,EAA+C,CACnDtB,EAAa,2BAAyB,oBAAoB,EAC1DA,EAAa,2BAAyB,oBAAoB,EAC1DA,EAAa,2BAAyB,YAAY,EAClDI,EAAWC,CAAK,CAClB,KAEA,0BACEc,EAAiB,EACjBG,KACA,mCAAgC,EAChC,CAAE,OAAQF,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,EAEJ,GAAG,2DAA4D,IAC7D,IAAI,QAAc,CAACD,EAASC,IAAW,CACrCX,EAA0B,EAC1BM,EAAkB,EAClB,MAAMX,EAAQ,IAAI,2BAChB,IAAI,MAAM,oBAAoB,CAChC,EACAa,KAAyB,QAAKb,CAAK,CAAC,EAEpC,MAAMiB,EAA+C,CACnDtB,EAAa,2BAAyB,oBAAoB,EAC1DA,EAAa,2BAAyB,oBAAoB,EAC1DA,EAAa,2BAAyB,YAAY,EAClDA,EAAa,2BAAyB,mBAAmB,EACzDI,EAAWC,CAAK,CAClB,KAEA,0BACEc,EAAiB,EACjBG,KACA,mCAAgC,EAChC,CAAE,OAAQF,EAAS,QAASC,CAAO,CACrC,CACF,CAAC,CAAC,CACN,CAAC,CACH,CAAC",
4
+ "sourcesContent": ["import {\n DeviceActionStatus,\n type GetOsVersionResponse,\n OnboardingState,\n SeedWordCount,\n UnknownDAError,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { type Either, Left, Right } from \"purify-ts\";\nimport { assign, createMachine } from \"xstate\";\n\nimport { makeDeviceActionInternalApiMock } from \"@api/device-action/__test-utils__/makeInternalApi\";\nimport { testDeviceActionStates } from \"@api/device-action/__test-utils__/testDeviceActionStates\";\nimport { ResolveOsUpdatePathDeviceAction } from \"@api/device-action/OsUpdate/Resolve/ResolveOsUpdatePathDeviceAction\";\nimport { ResolveOsUpdatePathError } from \"@api/device-action/OsUpdate/Resolve/ResolveOsUpdatePathDeviceActionErrors\";\nimport { resolveOsUpdatePath } from \"@api/device-action/OsUpdate/Resolve/Substeps/ResolveOsUpdatePath\";\nimport {\n type ResolveOsUpdatePathDAError,\n type ResolveOsUpdatePathDAState,\n ResolveOsUpdatePathSteps,\n} from \"@api/device-action/OsUpdate/Resolve/types\";\nimport { GetOsVersionError } from \"@api/device-action/OsUpdate/Shared/OsUpdateDeviceActionErrors\";\nimport { getOsVersion } from \"@api/device-action/OsUpdate/Shared/Substeps/GetOsVersion\";\nimport { goToDashboard } from \"@api/device-action/OsUpdate/Shared/Substeps/GoToDashboard\";\nimport { waitForAppAndVersion } from \"@api/device-action/OsUpdate/Shared/Substeps/WaitForAppAndVersion\";\nimport { type OsUpdate } from \"@api/device-action/OsUpdate/Shared/types\";\n\nvi.mock(\"@api/device-action/OsUpdate/Shared/Substeps/WaitForAppAndVersion\");\nvi.mock(\"@api/device-action/OsUpdate/Shared/Substeps/GoToDashboard\");\nvi.mock(\"@api/device-action/OsUpdate/Shared/Substeps/GetOsVersion\");\nvi.mock(\"@api/device-action/OsUpdate/Resolve/Substeps/ResolveOsUpdatePath\");\n\nconst pendingState = (\n step: ResolveOsUpdatePathSteps,\n): ResolveOsUpdatePathDAState => ({\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step,\n },\n});\n\nconst completedState = (output: OsUpdate[]): ResolveOsUpdatePathDAState => ({\n status: DeviceActionStatus.Completed,\n output,\n});\n\nconst errorState = (\n error: ResolveOsUpdatePathDAError,\n): ResolveOsUpdatePathDAState => ({\n status: DeviceActionStatus.Error,\n error,\n});\n\nconst createMockActorMachineFromOutput = (\n output: () => Either<unknown, unknown>,\n) =>\n createMachine({\n initial: \"ready\",\n states: {\n ready: {\n after: { 0: \"done\" },\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n }),\n }),\n },\n done: { type: \"final\" },\n },\n output,\n });\n\nconst createMockActorMachine = (output: Either<unknown, unknown>) =>\n createMockActorMachineFromOutput(() => output);\n\ndescribe(\"ResolveOsUpdatePathDeviceAction\", () => {\n const getOsVersionResponse = {\n isBootloader: false,\n isOsu: false,\n targetId: 0x33200004,\n seTargetId: 0x33200004,\n mcuTargetId: undefined,\n seVersion: \"1.3.0\",\n seFlags: new Uint8Array([0xe6, 0x00, 0x00, 0x00]),\n mcuSephVersion: \"5.24\",\n mcuBootloaderVersion: \"0.48\",\n hwVersion: \"00\",\n langId: 0,\n recoverState: undefined,\n secureElementFlags: {\n isPinValidated: true,\n hasMcuSerialNumber: true,\n hasValidCertificate: true,\n isCustomAuthorityConnectionAllowed: false,\n isSecureConnectionAllowed: false,\n isOnboarded: true,\n isMcuCodeSigned: true,\n isInRecoveryMode: false,\n hasEndorsementCertificateInSlot1: false,\n hasEndorsementCertificateInSlot2: false,\n numberOfWords: SeedWordCount.TwentyFour,\n currentWordIndex: 0,\n onboardingState: OnboardingState.Unknown,\n },\n } satisfies GetOsVersionResponse;\n\n const osUpdates = [\n {\n osuFirmware: {\n id: 200,\n notes: \"Update notes\",\n perso: \"perso\",\n firmware: \"osu\",\n firmwareKey: \"osu-key\",\n hash: \"osu-hash\",\n nextFinalFirmware: 300,\n },\n finalFirmware: {\n id: 300,\n version: \"1.4.0\",\n perso: \"perso\",\n firmware: \"final\",\n firmwareKey: \"final-key\",\n hash: \"final-hash\",\n bytes: 123,\n mcuVersions: [1],\n },\n shouldFlashMcu: false,\n },\n ] satisfies OsUpdate[];\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n const setupWaitForAppAndVersion = (appName = \"BOLOS\") =>\n vi.mocked(waitForAppAndVersion).mockReturnValue(\n createMockActorMachine(\n Right({\n name: appName,\n version: \"1.0.0\",\n }),\n ) as unknown as ReturnType<typeof waitForAppAndVersion>,\n );\n\n const setupWaitForAppAndVersionSequence = (appNames: string[]) => {\n const remainingAppNames = [...appNames];\n vi.mocked(waitForAppAndVersion).mockReturnValue(\n createMockActorMachineFromOutput(() =>\n Right({\n name: remainingAppNames.shift() ?? \"BOLOS\",\n version: \"1.0.0\",\n }),\n ) as unknown as ReturnType<typeof waitForAppAndVersion>,\n );\n };\n\n const setupGoToDashboard = (\n output: Either<unknown, unknown> = Right(undefined),\n ) =>\n vi\n .mocked(goToDashboard)\n .mockReturnValue(\n createMockActorMachine(output) as unknown as ReturnType<\n typeof goToDashboard\n >,\n );\n\n const setupGetOsVersion = (\n result: Either<unknown, GetOsVersionResponse> = Right(getOsVersionResponse),\n ) =>\n vi\n .mocked(getOsVersion)\n .mockReturnValue(\n () =>\n Promise.resolve(result) as ReturnType<\n ReturnType<typeof getOsVersion>\n >,\n );\n\n const setupResolveOsUpdatePath = (\n result: Either<unknown, OsUpdate[]> = Right(osUpdates),\n ) =>\n vi\n .mocked(resolveOsUpdatePath)\n .mockReturnValue(\n () =>\n Promise.resolve(result) as ReturnType<\n ReturnType<typeof resolveOsUpdatePath>\n >,\n );\n\n const makeDeviceAction = () =>\n new ResolveOsUpdatePathDeviceAction({\n input: {\n unlockTimeout: 30_000,\n },\n });\n\n describe(\"Success\", () => {\n it(\"Should complete the resolve flow when the device is already on dashboard\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion();\n setupGetOsVersion();\n setupResolveOsUpdatePath();\n\n const expectedStates: ResolveOsUpdatePathDAState[] = [\n pendingState(ResolveOsUpdatePathSteps.WaitForAppAndVersion),\n pendingState(ResolveOsUpdatePathSteps.WaitForAppAndVersion),\n pendingState(ResolveOsUpdatePathSteps.GetOsVersion),\n pendingState(ResolveOsUpdatePathSteps.ResolveOsUpdatePath),\n completedState(osUpdates),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n it(\"Should go to dashboard and wait for app and version again when an app is open\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersionSequence([\"Bitcoin\", \"BOLOS\"]);\n setupGoToDashboard();\n setupGetOsVersion();\n setupResolveOsUpdatePath();\n\n const expectedStates: ResolveOsUpdatePathDAState[] = [\n pendingState(ResolveOsUpdatePathSteps.WaitForAppAndVersion),\n pendingState(ResolveOsUpdatePathSteps.WaitForAppAndVersion),\n pendingState(ResolveOsUpdatePathSteps.GoToDashboard),\n pendingState(ResolveOsUpdatePathSteps.GoToDashboard),\n pendingState(ResolveOsUpdatePathSteps.WaitForAppAndVersion),\n pendingState(ResolveOsUpdatePathSteps.WaitForAppAndVersion),\n pendingState(ResolveOsUpdatePathSteps.GetOsVersion),\n pendingState(ResolveOsUpdatePathSteps.ResolveOsUpdatePath),\n completedState(osUpdates),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n });\n\n describe(\"Error\", () => {\n it(\"Should go to Error when waitForAppAndVersion returns Left\", () =>\n new Promise<void>((resolve, reject) => {\n const error = new UnknownDAError(\"waitForAppAndVersion failed\");\n vi.mocked(waitForAppAndVersion).mockReturnValue(\n createMockActorMachine(Left(error)) as unknown as ReturnType<\n typeof waitForAppAndVersion\n >,\n );\n\n const expectedStates: ResolveOsUpdatePathDAState[] = [\n pendingState(ResolveOsUpdatePathSteps.WaitForAppAndVersion),\n pendingState(ResolveOsUpdatePathSteps.WaitForAppAndVersion),\n errorState(error),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n it(\"Should go to Error when goToDashboard returns Left\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion(\"Bitcoin\");\n const error = new UnknownDAError(\"goToDashboard failed\");\n setupGoToDashboard(Left(error));\n\n const expectedStates: ResolveOsUpdatePathDAState[] = [\n pendingState(ResolveOsUpdatePathSteps.WaitForAppAndVersion),\n pendingState(ResolveOsUpdatePathSteps.WaitForAppAndVersion),\n pendingState(ResolveOsUpdatePathSteps.GoToDashboard),\n pendingState(ResolveOsUpdatePathSteps.GoToDashboard),\n errorState(error),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n it(\"Should go to Error when getOsVersion returns Left\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion();\n const error = new GetOsVersionError(new Error(\"command failed\"));\n setupGetOsVersion(Left(error));\n setupResolveOsUpdatePath();\n\n const expectedStates: ResolveOsUpdatePathDAState[] = [\n pendingState(ResolveOsUpdatePathSteps.WaitForAppAndVersion),\n pendingState(ResolveOsUpdatePathSteps.WaitForAppAndVersion),\n pendingState(ResolveOsUpdatePathSteps.GetOsVersion),\n errorState(error),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n\n it(\"Should go to Error when resolveOsUpdatePath returns Left\", () =>\n new Promise<void>((resolve, reject) => {\n setupWaitForAppAndVersion();\n setupGetOsVersion();\n const error = new ResolveOsUpdatePathError(\n new Error(\"manager api failed\"),\n );\n setupResolveOsUpdatePath(Left(error));\n\n const expectedStates: ResolveOsUpdatePathDAState[] = [\n pendingState(ResolveOsUpdatePathSteps.WaitForAppAndVersion),\n pendingState(ResolveOsUpdatePathSteps.WaitForAppAndVersion),\n pendingState(ResolveOsUpdatePathSteps.GetOsVersion),\n pendingState(ResolveOsUpdatePathSteps.ResolveOsUpdatePath),\n errorState(error),\n ];\n\n testDeviceActionStates(\n makeDeviceAction(),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n { onDone: resolve, onError: reject },\n );\n }));\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_device_management_kit", "import_purify_ts", "import_xstate", "import_makeInternalApi", "import_testDeviceActionStates", "import_ResolveOsUpdatePathDeviceAction", "import_ResolveOsUpdatePathDeviceActionErrors", "import_ResolveOsUpdatePath", "import_types", "import_OsUpdateDeviceActionErrors", "import_GetOsVersion", "import_GoToDashboard", "import_WaitForAppAndVersion", "pendingState", "step", "completedState", "output", "errorState", "error", "createMockActorMachineFromOutput", "createMockActorMachine", "getOsVersionResponse", "osUpdates", "setupWaitForAppAndVersion", "appName", "setupWaitForAppAndVersionSequence", "appNames", "remainingAppNames", "setupGoToDashboard", "setupGetOsVersion", "result", "setupResolveOsUpdatePath", "makeDeviceAction", "resolve", "reject", "expectedStates"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var s=require("purify-ts"),F=require("../../../../device-action/__test-utils__/makeInternalApi"),p=require("../../../../device-action/OsUpdate/Resolve/ResolveOsUpdatePathDeviceActionErrors"),c=require("../../../../device-action/OsUpdate/Resolve/Substeps/ResolveOsUpdatePath");const r=d=>(0,s.EitherAsync)(()=>Promise.resolve(d)),v=d=>(0,s.EitherAsync)(({throwE:a})=>Promise.resolve(a(d)));describe("ResolveOsUpdatePath",()=>{const a=(0,F.makeDeviceActionInternalApiMock)(),o={isBootloader:!1,isOsu:!1,targetId:857735172,seTargetId:857735172,mcuTargetId:void 0,seVersion:"1.3.0",seFlags:new Uint8Array([230,0,0,0]),mcuSephVersion:"1.0.0",mcuBootloaderVersion:"0.48",hwVersion:"00",langId:0,recoverState:void 0,secureElementFlags:{isPinValidated:!0,hasMcuSerialNumber:!0,hasValidCertificate:!0,isCustomAuthorityConnectionAllowed:!1,isSecureConnectionAllowed:!1,isOnboarded:!0,isMcuCodeSigned:!0,isInRecoveryMode:!1}},l={id:17,target_id:"857735172",name:"Ledger Stax"},V={id:100,version:"1.3.0",perso:"perso",firmware:null,firmwareKey:null,hash:null,bytes:null,mcuVersions:[1]},n={id:200,notes:"Update notes",perso:"perso",firmware:"osu",firmwareKey:"osu-key",hash:"osu-hash",nextFinalFirmware:300},w={...n,id:201,nextFinalFirmware:301},u={id:300,version:"1.4.0",perso:"perso",firmware:"final",firmwareKey:"final-key",hash:"final-hash",bytes:123,mcuVersions:[1]},f={...u,id:301,version:"1.5.0",mcuVersions:[3]},h=[{id:1,name:"1.0.0",fromBootloaderVersion:"0.0",providers:[1]},{id:3,name:"3.0.0",fromBootloaderVersion:"0.0",providers:[1,2]}],e={getMcuList:vi.fn(),getDeviceVersion:vi.fn(),getFirmwareVersion:vi.fn(),getOsuFirmwareVersion:vi.fn(),getLatestFirmwareVersion:vi.fn(),getNextFirmwareVersion:vi.fn(),getProvider:vi.fn()};beforeEach(()=>{vi.resetAllMocks(),a.getManagerApiService.mockReturnValue(e),e.getMcuList.mockReturnValue(r(h)),e.getDeviceVersion.mockReturnValue(r(l)),e.getFirmwareVersion.mockReturnValue(r(V)),e.getLatestFirmwareVersion.mockReturnValue(r((0,s.Just)(n))),e.getOsuFirmwareVersion.mockReturnValue(r(n)),e.getNextFirmwareVersion.mockReturnValue(r(u)),e.getProvider.mockReturnValue(1)}),describe("Success",()=>{it("Should return an empty update path when no firmware update is available",async()=>{e.getLatestFirmwareVersion.mockReturnValueOnce(r(s.Nothing));const t=await(0,c.resolveOsUpdatePath)(a)({input:{getOsVersionResponse:o}});expect(t.extract()).toEqual([]),expect(e.getDeviceVersion).toHaveBeenCalledWith(o),expect(e.getFirmwareVersion).toHaveBeenCalledWith(o,l),expect(e.getLatestFirmwareVersion).toHaveBeenCalledWith(V,l),expect(e.getNextFirmwareVersion).not.toHaveBeenCalled()}),it("Should resolve a single update without MCU flash when the final firmware supports the current MCU",async()=>{e.getLatestFirmwareVersion.mockReturnValueOnce(r((0,s.Just)(n))).mockReturnValueOnce(r(s.Nothing));const t=await(0,c.resolveOsUpdatePath)(a)({input:{getOsVersionResponse:o}});expect(t.extract()).toEqual([{osuFirmware:n,finalFirmware:u,shouldFlashMcu:!1}])}),it("Should resolve OSU mode from the OSU firmware endpoint",async()=>{e.getLatestFirmwareVersion.mockReturnValueOnce(r(s.Nothing));const t={...o,isOsu:!0},i=await(0,c.resolveOsUpdatePath)(a)({input:{getOsVersionResponse:t}});expect(i.extract()).toEqual([{osuFirmware:n,finalFirmware:u,shouldFlashMcu:!1}]),expect(e.getOsuFirmwareVersion).toHaveBeenCalledWith(t,l),expect(e.getFirmwareVersion).not.toHaveBeenCalled()}),it("Should resolve multiple updates and flag the one requiring an MCU flash",async()=>{e.getLatestFirmwareVersion.mockReturnValueOnce(r((0,s.Just)(n))).mockReturnValueOnce(r((0,s.Just)(w))).mockReturnValueOnce(r(s.Nothing)),e.getNextFirmwareVersion.mockReturnValueOnce(r(u)).mockReturnValueOnce(r(f));const t=await(0,c.resolveOsUpdatePath)(a)({input:{getOsVersionResponse:o}});expect(t.extract()).toEqual([{osuFirmware:n,finalFirmware:u,shouldFlashMcu:!1},{osuFirmware:w,finalFirmware:f,shouldFlashMcu:!0}]),expect(e.getDeviceVersion).toHaveBeenCalledTimes(1),expect(e.getLatestFirmwareVersion).toHaveBeenNthCalledWith(2,u,l)}),it("Should resolve the latest compatible MCU when MCU names are not strict semver",async()=>{const t=[{id:1,name:"1.0",fromBootloaderVersion:"0.0",providers:[1]},{id:2,name:"1.1",fromBootloaderVersion:"0.0",providers:[1,2]},{id:3,name:"1.2",fromBootloaderVersion:"0.0",providers:[1,2,3]}],i={...u,mcuVersions:[2,3]},m={...f,mcuVersions:[3]};e.getMcuList.mockReturnValueOnce(r(t)),e.getLatestFirmwareVersion.mockReturnValueOnce(r((0,s.Just)(n))).mockReturnValueOnce(r((0,s.Just)(w))).mockReturnValueOnce(r(s.Nothing)),e.getNextFirmwareVersion.mockReturnValueOnce(r(i)).mockReturnValueOnce(r(m));const g=await(0,c.resolveOsUpdatePath)(a)({input:{getOsVersionResponse:{...o,mcuSephVersion:"1.0"}}});expect(g.extract()).toEqual([{osuFirmware:n,finalFirmware:i,shouldFlashMcu:!0},{osuFirmware:w,finalFirmware:m,shouldFlashMcu:!1}])})}),describe("Error",()=>{it("Should return ResolveOsUpdatePathError when the MCU list cannot be fetched",async()=>{const t=new Error("mcu list failed");e.getMcuList.mockReturnValueOnce(v(t));const i=await(0,c.resolveOsUpdatePath)(a)({input:{getOsVersionResponse:o}});expect(i.isLeft()).toBe(!0),i.mapLeft(m=>{expect(m).toBeInstanceOf(p.ResolveOsUpdatePathError),expect(m.originalError).toBe(t)})}),it("Should return ResolveOsUpdatePathError when the current MCU version is unknown",async()=>{const t=await(0,c.resolveOsUpdatePath)(a)({input:{getOsVersionResponse:{...o,mcuSephVersion:"9.9.9"}}});expect(t.isLeft()).toBe(!0),t.mapLeft(i=>{expect(i).toBeInstanceOf(p.ResolveOsUpdatePathError),expect(i.originalError).toBe("No MCU firmware found for version 9.9.9")})}),it("Should return ResolveOsUpdatePathError when no compatible MCU can be resolved for the next firmware",async()=>{e.getNextFirmwareVersion.mockReturnValueOnce(r({...u,mcuVersions:[42]}));const t=await(0,c.resolveOsUpdatePath)(a)({input:{getOsVersionResponse:o}});expect(t.isLeft()).toBe(!0),t.mapLeft(i=>{expect(i).toBeInstanceOf(p.ResolveOsUpdatePathError),expect(i.originalError).toBe("No MCU firmware found for version null")})})})});
1
+ "use strict";var p=require("@ledgerhq/device-management-kit"),s=require("purify-ts"),h=require("../../../../device-action/__test-utils__/makeInternalApi"),w=require("../../../../device-action/OsUpdate/Resolve/ResolveOsUpdatePathDeviceActionErrors"),c=require("../../../../device-action/OsUpdate/Resolve/Substeps/ResolveOsUpdatePath");const r=d=>(0,s.EitherAsync)(()=>Promise.resolve(d)),O=d=>(0,s.EitherAsync)(({throwE:n})=>Promise.resolve(n(d)));describe("ResolveOsUpdatePath",()=>{const n=(0,h.makeDeviceActionInternalApiMock)(),o={isBootloader:!1,isOsu:!1,targetId:857735172,seTargetId:857735172,mcuTargetId:void 0,seVersion:"1.3.0",seFlags:new Uint8Array([230,0,0,0]),mcuSephVersion:"1.0.0",mcuBootloaderVersion:"0.48",hwVersion:"00",langId:0,recoverState:void 0,secureElementFlags:{isPinValidated:!0,hasMcuSerialNumber:!0,hasValidCertificate:!0,isCustomAuthorityConnectionAllowed:!1,isSecureConnectionAllowed:!1,isOnboarded:!0,isMcuCodeSigned:!0,isInRecoveryMode:!1,hasEndorsementCertificateInSlot1:!1,hasEndorsementCertificateInSlot2:!1,numberOfWords:p.SeedWordCount.TwentyFour,currentWordIndex:0,onboardingState:p.OnboardingState.Unknown}},l={id:17,target_id:"857735172",name:"Ledger Stax"},F={id:100,version:"1.3.0",perso:"perso",firmware:null,firmwareKey:null,hash:null,bytes:null,mcuVersions:[1]},a={id:200,notes:"Update notes",perso:"perso",firmware:"osu",firmwareKey:"osu-key",hash:"osu-hash",nextFinalFirmware:300},f={...a,id:201,nextFinalFirmware:301},u={id:300,version:"1.4.0",perso:"perso",firmware:"final",firmwareKey:"final-key",hash:"final-hash",bytes:123,mcuVersions:[1]},V={...u,id:301,version:"1.5.0",mcuVersions:[3]},g=[{id:1,name:"1.0.0",fromBootloaderVersion:"0.0",providers:[1]},{id:3,name:"3.0.0",fromBootloaderVersion:"0.0",providers:[1,2]}],e={getMcuList:vi.fn(),getDeviceVersion:vi.fn(),getFirmwareVersion:vi.fn(),getOsuFirmwareVersion:vi.fn(),getLatestFirmwareVersion:vi.fn(),getNextFirmwareVersion:vi.fn(),getProvider:vi.fn()};beforeEach(()=>{vi.resetAllMocks(),n.getManagerApiService.mockReturnValue(e),e.getMcuList.mockReturnValue(r(g)),e.getDeviceVersion.mockReturnValue(r(l)),e.getFirmwareVersion.mockReturnValue(r(F)),e.getLatestFirmwareVersion.mockReturnValue(r((0,s.Just)(a))),e.getOsuFirmwareVersion.mockReturnValue(r(a)),e.getNextFirmwareVersion.mockReturnValue(r(u)),e.getProvider.mockReturnValue(1)}),describe("Success",()=>{it("Should return an empty update path when no firmware update is available",async()=>{e.getLatestFirmwareVersion.mockReturnValueOnce(r(s.Nothing));const t=await(0,c.resolveOsUpdatePath)(n)({input:{getOsVersionResponse:o}});expect(t.extract()).toEqual([]),expect(e.getDeviceVersion).toHaveBeenCalledWith(o),expect(e.getFirmwareVersion).toHaveBeenCalledWith(o,l),expect(e.getLatestFirmwareVersion).toHaveBeenCalledWith(F,l),expect(e.getNextFirmwareVersion).not.toHaveBeenCalled()}),it("Should resolve a single update without MCU flash when the final firmware supports the current MCU",async()=>{e.getLatestFirmwareVersion.mockReturnValueOnce(r((0,s.Just)(a))).mockReturnValueOnce(r(s.Nothing));const t=await(0,c.resolveOsUpdatePath)(n)({input:{getOsVersionResponse:o}});expect(t.extract()).toEqual([{osuFirmware:a,finalFirmware:u,shouldFlashMcu:!1}])}),it("Should resolve OSU mode from the OSU firmware endpoint",async()=>{e.getLatestFirmwareVersion.mockReturnValueOnce(r(s.Nothing));const t={...o,isOsu:!0},i=await(0,c.resolveOsUpdatePath)(n)({input:{getOsVersionResponse:t}});expect(i.extract()).toEqual([{osuFirmware:a,finalFirmware:u,shouldFlashMcu:!1}]),expect(e.getOsuFirmwareVersion).toHaveBeenCalledWith(t,l),expect(e.getFirmwareVersion).not.toHaveBeenCalled()}),it("Should resolve multiple updates and flag the one requiring an MCU flash",async()=>{e.getLatestFirmwareVersion.mockReturnValueOnce(r((0,s.Just)(a))).mockReturnValueOnce(r((0,s.Just)(f))).mockReturnValueOnce(r(s.Nothing)),e.getNextFirmwareVersion.mockReturnValueOnce(r(u)).mockReturnValueOnce(r(V));const t=await(0,c.resolveOsUpdatePath)(n)({input:{getOsVersionResponse:o}});expect(t.extract()).toEqual([{osuFirmware:a,finalFirmware:u,shouldFlashMcu:!1},{osuFirmware:f,finalFirmware:V,shouldFlashMcu:!0}]),expect(e.getDeviceVersion).toHaveBeenCalledTimes(1),expect(e.getLatestFirmwareVersion).toHaveBeenNthCalledWith(2,u,l)}),it("Should resolve the latest compatible MCU when MCU names are not strict semver",async()=>{const t=[{id:1,name:"1.0",fromBootloaderVersion:"0.0",providers:[1]},{id:2,name:"1.1",fromBootloaderVersion:"0.0",providers:[1,2]},{id:3,name:"1.2",fromBootloaderVersion:"0.0",providers:[1,2,3]}],i={...u,mcuVersions:[2,3]},m={...V,mcuVersions:[3]};e.getMcuList.mockReturnValueOnce(r(t)),e.getLatestFirmwareVersion.mockReturnValueOnce(r((0,s.Just)(a))).mockReturnValueOnce(r((0,s.Just)(f))).mockReturnValueOnce(r(s.Nothing)),e.getNextFirmwareVersion.mockReturnValueOnce(r(i)).mockReturnValueOnce(r(m));const v=await(0,c.resolveOsUpdatePath)(n)({input:{getOsVersionResponse:{...o,mcuSephVersion:"1.0"}}});expect(v.extract()).toEqual([{osuFirmware:a,finalFirmware:i,shouldFlashMcu:!0},{osuFirmware:f,finalFirmware:m,shouldFlashMcu:!1}])})}),describe("Error",()=>{it("Should return ResolveOsUpdatePathError when the MCU list cannot be fetched",async()=>{const t=new Error("mcu list failed");e.getMcuList.mockReturnValueOnce(O(t));const i=await(0,c.resolveOsUpdatePath)(n)({input:{getOsVersionResponse:o}});expect(i.isLeft()).toBe(!0),i.mapLeft(m=>{expect(m).toBeInstanceOf(w.ResolveOsUpdatePathError),expect(m.originalError).toBe(t)})}),it("Should return ResolveOsUpdatePathError when the current MCU version is unknown",async()=>{const t=await(0,c.resolveOsUpdatePath)(n)({input:{getOsVersionResponse:{...o,mcuSephVersion:"9.9.9"}}});expect(t.isLeft()).toBe(!0),t.mapLeft(i=>{expect(i).toBeInstanceOf(w.ResolveOsUpdatePathError),expect(i.originalError).toBe("No MCU firmware found for version 9.9.9")})}),it("Should return ResolveOsUpdatePathError when no compatible MCU can be resolved for the next firmware",async()=>{e.getNextFirmwareVersion.mockReturnValueOnce(r({...u,mcuVersions:[42]}));const t=await(0,c.resolveOsUpdatePath)(n)({input:{getOsVersionResponse:o}});expect(t.isLeft()).toBe(!0),t.mapLeft(i=>{expect(i).toBeInstanceOf(w.ResolveOsUpdatePathError),expect(i.originalError).toBe("No MCU firmware found for version null")})})})});
2
2
  //# sourceMappingURL=ResolveOsUpdatePath.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../src/api/device-action/OsUpdate/Resolve/Substeps/ResolveOsUpdatePath.test.ts"],
4
- "sourcesContent": ["import { type GetOsVersionResponse } from \"@ledgerhq/device-management-kit\";\nimport { EitherAsync, Just, Nothing } from \"purify-ts\";\n\nimport { makeDeviceActionInternalApiMock } from \"@api/device-action/__test-utils__/makeInternalApi\";\nimport { ResolveOsUpdatePathError } from \"@api/device-action/OsUpdate/Resolve/ResolveOsUpdatePathDeviceActionErrors\";\nimport { resolveOsUpdatePath } from \"@api/device-action/OsUpdate/Resolve/Substeps/ResolveOsUpdatePath\";\nimport {\n type FinalFirmware,\n type McuFirmware,\n type OsuFirmware,\n} from \"@api/device-action/OsUpdate/Shared/types\";\n\nconst rightAsync = <T>(value: T) =>\n EitherAsync<unknown, T>(() => Promise.resolve(value));\n\nconst leftAsync = (error: unknown) =>\n EitherAsync<unknown, never>(({ throwE }) => Promise.resolve(throwE(error)));\n\ndescribe(\"ResolveOsUpdatePath\", () => {\n const DEFAULT_MANAGER_API_PROVIDER = 1;\n\n const apiMock = makeDeviceActionInternalApiMock();\n\n const getOsVersionResponse = {\n isBootloader: false,\n isOsu: false,\n targetId: 0x33200004,\n seTargetId: 0x33200004,\n mcuTargetId: undefined,\n seVersion: \"1.3.0\",\n seFlags: new Uint8Array([0xe6, 0x00, 0x00, 0x00]),\n mcuSephVersion: \"1.0.0\",\n mcuBootloaderVersion: \"0.48\",\n hwVersion: \"00\",\n langId: 0,\n recoverState: undefined,\n secureElementFlags: {\n isPinValidated: true,\n hasMcuSerialNumber: true,\n hasValidCertificate: true,\n isCustomAuthorityConnectionAllowed: false,\n isSecureConnectionAllowed: false,\n isOnboarded: true,\n isMcuCodeSigned: true,\n isInRecoveryMode: false,\n },\n } satisfies GetOsVersionResponse;\n\n const deviceVersion = {\n id: 17,\n target_id: \"857735172\",\n name: \"Ledger Stax\",\n };\n\n const currentFirmware = {\n id: 100,\n version: \"1.3.0\",\n perso: \"perso\",\n firmware: null,\n firmwareKey: null,\n hash: null,\n bytes: null,\n mcuVersions: [1],\n } satisfies FinalFirmware;\n\n const firstOsuFirmware = {\n id: 200,\n notes: \"Update notes\",\n perso: \"perso\",\n firmware: \"osu\",\n firmwareKey: \"osu-key\",\n hash: \"osu-hash\",\n nextFinalFirmware: 300,\n } satisfies OsuFirmware;\n\n const secondOsuFirmware = {\n ...firstOsuFirmware,\n id: 201,\n nextFinalFirmware: 301,\n } satisfies OsuFirmware;\n\n const firstFinalFirmware = {\n id: 300,\n version: \"1.4.0\",\n perso: \"perso\",\n firmware: \"final\",\n firmwareKey: \"final-key\",\n hash: \"final-hash\",\n bytes: 123,\n mcuVersions: [1],\n } satisfies FinalFirmware;\n\n const secondFinalFirmware = {\n ...firstFinalFirmware,\n id: 301,\n version: \"1.5.0\",\n mcuVersions: [3],\n } satisfies FinalFirmware;\n\n const mcuList = [\n {\n id: 1,\n name: \"1.0.0\",\n fromBootloaderVersion: \"0.0\",\n providers: [1],\n },\n {\n id: 3,\n name: \"3.0.0\",\n fromBootloaderVersion: \"0.0\",\n providers: [1, 2],\n },\n ] satisfies McuFirmware[];\n\n const managerApiMock = {\n getMcuList: vi.fn(),\n getDeviceVersion: vi.fn(),\n getFirmwareVersion: vi.fn(),\n getOsuFirmwareVersion: vi.fn(),\n getLatestFirmwareVersion: vi.fn(),\n getNextFirmwareVersion: vi.fn(),\n getProvider: vi.fn(),\n };\n\n beforeEach(() => {\n vi.resetAllMocks();\n apiMock.getManagerApiService.mockReturnValue(managerApiMock as never);\n managerApiMock.getMcuList.mockReturnValue(rightAsync(mcuList));\n managerApiMock.getDeviceVersion.mockReturnValue(rightAsync(deviceVersion));\n managerApiMock.getFirmwareVersion.mockReturnValue(\n rightAsync(currentFirmware),\n );\n managerApiMock.getLatestFirmwareVersion.mockReturnValue(\n rightAsync(Just(firstOsuFirmware)),\n );\n managerApiMock.getOsuFirmwareVersion.mockReturnValue(\n rightAsync(firstOsuFirmware),\n );\n managerApiMock.getNextFirmwareVersion.mockReturnValue(\n rightAsync(firstFinalFirmware),\n );\n managerApiMock.getProvider.mockReturnValue(DEFAULT_MANAGER_API_PROVIDER);\n });\n\n describe(\"Success\", () => {\n it(\"Should return an empty update path when no firmware update is available\", async () => {\n managerApiMock.getLatestFirmwareVersion.mockReturnValueOnce(\n rightAsync(Nothing),\n );\n\n const result = await resolveOsUpdatePath(apiMock)({\n input: { getOsVersionResponse },\n });\n\n expect(result.extract()).toEqual([]);\n expect(managerApiMock.getDeviceVersion).toHaveBeenCalledWith(\n getOsVersionResponse,\n );\n expect(managerApiMock.getFirmwareVersion).toHaveBeenCalledWith(\n getOsVersionResponse,\n deviceVersion,\n );\n expect(managerApiMock.getLatestFirmwareVersion).toHaveBeenCalledWith(\n currentFirmware,\n deviceVersion,\n );\n expect(managerApiMock.getNextFirmwareVersion).not.toHaveBeenCalled();\n });\n\n it(\"Should resolve a single update without MCU flash when the final firmware supports the current MCU\", async () => {\n managerApiMock.getLatestFirmwareVersion\n .mockReturnValueOnce(rightAsync(Just(firstOsuFirmware)))\n .mockReturnValueOnce(rightAsync(Nothing));\n\n const result = await resolveOsUpdatePath(apiMock)({\n input: { getOsVersionResponse },\n });\n\n expect(result.extract()).toEqual([\n {\n osuFirmware: firstOsuFirmware,\n finalFirmware: firstFinalFirmware,\n shouldFlashMcu: false,\n },\n ]);\n });\n\n it(\"Should resolve OSU mode from the OSU firmware endpoint\", async () => {\n managerApiMock.getLatestFirmwareVersion.mockReturnValueOnce(\n rightAsync(Nothing),\n );\n\n const osVersionResponse = {\n ...getOsVersionResponse,\n isOsu: true,\n } satisfies GetOsVersionResponse;\n const result = await resolveOsUpdatePath(apiMock)({\n input: { getOsVersionResponse: osVersionResponse },\n });\n\n expect(result.extract()).toEqual([\n {\n osuFirmware: firstOsuFirmware,\n finalFirmware: firstFinalFirmware,\n shouldFlashMcu: false,\n },\n ]);\n expect(managerApiMock.getOsuFirmwareVersion).toHaveBeenCalledWith(\n osVersionResponse,\n deviceVersion,\n );\n expect(managerApiMock.getFirmwareVersion).not.toHaveBeenCalled();\n });\n\n it(\"Should resolve multiple updates and flag the one requiring an MCU flash\", async () => {\n managerApiMock.getLatestFirmwareVersion\n .mockReturnValueOnce(rightAsync(Just(firstOsuFirmware)))\n .mockReturnValueOnce(rightAsync(Just(secondOsuFirmware)))\n .mockReturnValueOnce(rightAsync(Nothing));\n managerApiMock.getNextFirmwareVersion\n .mockReturnValueOnce(rightAsync(firstFinalFirmware))\n .mockReturnValueOnce(rightAsync(secondFinalFirmware));\n\n const result = await resolveOsUpdatePath(apiMock)({\n input: { getOsVersionResponse },\n });\n\n expect(result.extract()).toEqual([\n {\n osuFirmware: firstOsuFirmware,\n finalFirmware: firstFinalFirmware,\n shouldFlashMcu: false,\n },\n {\n osuFirmware: secondOsuFirmware,\n finalFirmware: secondFinalFirmware,\n shouldFlashMcu: true,\n },\n ]);\n expect(managerApiMock.getDeviceVersion).toHaveBeenCalledTimes(1);\n expect(managerApiMock.getLatestFirmwareVersion).toHaveBeenNthCalledWith(\n 2,\n firstFinalFirmware,\n deviceVersion,\n );\n });\n\n it(\"Should resolve the latest compatible MCU when MCU names are not strict semver\", async () => {\n const managerMcuList = [\n {\n id: 1,\n name: \"1.0\",\n fromBootloaderVersion: \"0.0\",\n providers: [1],\n },\n {\n id: 2,\n name: \"1.1\",\n fromBootloaderVersion: \"0.0\",\n providers: [1, 2],\n },\n {\n id: 3,\n name: \"1.2\",\n fromBootloaderVersion: \"0.0\",\n providers: [1, 2, 3],\n },\n ] satisfies McuFirmware[];\n const finalFirmwareRequiringMcuFlash = {\n ...firstFinalFirmware,\n mcuVersions: [2, 3],\n } satisfies FinalFirmware;\n const finalFirmwareSupportingLatestMcu = {\n ...secondFinalFirmware,\n mcuVersions: [3],\n } satisfies FinalFirmware;\n\n managerApiMock.getMcuList.mockReturnValueOnce(rightAsync(managerMcuList));\n managerApiMock.getLatestFirmwareVersion\n .mockReturnValueOnce(rightAsync(Just(firstOsuFirmware)))\n .mockReturnValueOnce(rightAsync(Just(secondOsuFirmware)))\n .mockReturnValueOnce(rightAsync(Nothing));\n managerApiMock.getNextFirmwareVersion\n .mockReturnValueOnce(rightAsync(finalFirmwareRequiringMcuFlash))\n .mockReturnValueOnce(rightAsync(finalFirmwareSupportingLatestMcu));\n\n const result = await resolveOsUpdatePath(apiMock)({\n input: {\n getOsVersionResponse: {\n ...getOsVersionResponse,\n mcuSephVersion: \"1.0\",\n },\n },\n });\n\n expect(result.extract()).toEqual([\n {\n osuFirmware: firstOsuFirmware,\n finalFirmware: finalFirmwareRequiringMcuFlash,\n shouldFlashMcu: true,\n },\n {\n osuFirmware: secondOsuFirmware,\n finalFirmware: finalFirmwareSupportingLatestMcu,\n shouldFlashMcu: false,\n },\n ]);\n });\n });\n\n describe(\"Error\", () => {\n it(\"Should return ResolveOsUpdatePathError when the MCU list cannot be fetched\", async () => {\n const error = new Error(\"mcu list failed\");\n managerApiMock.getMcuList.mockReturnValueOnce(leftAsync(error));\n\n const result = await resolveOsUpdatePath(apiMock)({\n input: { getOsVersionResponse },\n });\n\n expect(result.isLeft()).toBe(true);\n result.mapLeft((e) => {\n expect(e).toBeInstanceOf(ResolveOsUpdatePathError);\n expect(e.originalError).toBe(error);\n });\n });\n\n it(\"Should return ResolveOsUpdatePathError when the current MCU version is unknown\", async () => {\n const result = await resolveOsUpdatePath(apiMock)({\n input: {\n getOsVersionResponse: {\n ...getOsVersionResponse,\n mcuSephVersion: \"9.9.9\",\n },\n },\n });\n\n expect(result.isLeft()).toBe(true);\n result.mapLeft((e) => {\n expect(e).toBeInstanceOf(ResolveOsUpdatePathError);\n expect(e.originalError).toBe(\"No MCU firmware found for version 9.9.9\");\n });\n });\n\n it(\"Should return ResolveOsUpdatePathError when no compatible MCU can be resolved for the next firmware\", async () => {\n managerApiMock.getNextFirmwareVersion.mockReturnValueOnce(\n rightAsync({\n ...firstFinalFirmware,\n mcuVersions: [42],\n }),\n );\n\n const result = await resolveOsUpdatePath(apiMock)({\n input: { getOsVersionResponse },\n });\n\n expect(result.isLeft()).toBe(true);\n result.mapLeft((e) => {\n expect(e).toBeInstanceOf(ResolveOsUpdatePathError);\n expect(e.originalError).toBe(\"No MCU firmware found for version null\");\n });\n });\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["import_purify_ts", "import_makeInternalApi", "import_ResolveOsUpdatePathDeviceActionErrors", "import_ResolveOsUpdatePath", "rightAsync", "value", "leftAsync", "error", "throwE", "apiMock", "getOsVersionResponse", "deviceVersion", "currentFirmware", "firstOsuFirmware", "secondOsuFirmware", "firstFinalFirmware", "secondFinalFirmware", "mcuList", "managerApiMock", "result", "osVersionResponse", "managerMcuList", "finalFirmwareRequiringMcuFlash", "finalFirmwareSupportingLatestMcu", "e"]
4
+ "sourcesContent": ["import {\n type GetOsVersionResponse,\n OnboardingState,\n SeedWordCount,\n} from \"@ledgerhq/device-management-kit\";\nimport { EitherAsync, Just, Nothing } from \"purify-ts\";\n\nimport { makeDeviceActionInternalApiMock } from \"@api/device-action/__test-utils__/makeInternalApi\";\nimport { ResolveOsUpdatePathError } from \"@api/device-action/OsUpdate/Resolve/ResolveOsUpdatePathDeviceActionErrors\";\nimport { resolveOsUpdatePath } from \"@api/device-action/OsUpdate/Resolve/Substeps/ResolveOsUpdatePath\";\nimport {\n type FinalFirmware,\n type McuFirmware,\n type OsuFirmware,\n} from \"@api/device-action/OsUpdate/Shared/types\";\n\nconst rightAsync = <T>(value: T) =>\n EitherAsync<unknown, T>(() => Promise.resolve(value));\n\nconst leftAsync = (error: unknown) =>\n EitherAsync<unknown, never>(({ throwE }) => Promise.resolve(throwE(error)));\n\ndescribe(\"ResolveOsUpdatePath\", () => {\n const DEFAULT_MANAGER_API_PROVIDER = 1;\n\n const apiMock = makeDeviceActionInternalApiMock();\n\n const getOsVersionResponse = {\n isBootloader: false,\n isOsu: false,\n targetId: 0x33200004,\n seTargetId: 0x33200004,\n mcuTargetId: undefined,\n seVersion: \"1.3.0\",\n seFlags: new Uint8Array([0xe6, 0x00, 0x00, 0x00]),\n mcuSephVersion: \"1.0.0\",\n mcuBootloaderVersion: \"0.48\",\n hwVersion: \"00\",\n langId: 0,\n recoverState: undefined,\n secureElementFlags: {\n isPinValidated: true,\n hasMcuSerialNumber: true,\n hasValidCertificate: true,\n isCustomAuthorityConnectionAllowed: false,\n isSecureConnectionAllowed: false,\n isOnboarded: true,\n isMcuCodeSigned: true,\n isInRecoveryMode: false,\n hasEndorsementCertificateInSlot1: false,\n hasEndorsementCertificateInSlot2: false,\n numberOfWords: SeedWordCount.TwentyFour,\n currentWordIndex: 0,\n onboardingState: OnboardingState.Unknown,\n },\n } satisfies GetOsVersionResponse;\n\n const deviceVersion = {\n id: 17,\n target_id: \"857735172\",\n name: \"Ledger Stax\",\n };\n\n const currentFirmware = {\n id: 100,\n version: \"1.3.0\",\n perso: \"perso\",\n firmware: null,\n firmwareKey: null,\n hash: null,\n bytes: null,\n mcuVersions: [1],\n } satisfies FinalFirmware;\n\n const firstOsuFirmware = {\n id: 200,\n notes: \"Update notes\",\n perso: \"perso\",\n firmware: \"osu\",\n firmwareKey: \"osu-key\",\n hash: \"osu-hash\",\n nextFinalFirmware: 300,\n } satisfies OsuFirmware;\n\n const secondOsuFirmware = {\n ...firstOsuFirmware,\n id: 201,\n nextFinalFirmware: 301,\n } satisfies OsuFirmware;\n\n const firstFinalFirmware = {\n id: 300,\n version: \"1.4.0\",\n perso: \"perso\",\n firmware: \"final\",\n firmwareKey: \"final-key\",\n hash: \"final-hash\",\n bytes: 123,\n mcuVersions: [1],\n } satisfies FinalFirmware;\n\n const secondFinalFirmware = {\n ...firstFinalFirmware,\n id: 301,\n version: \"1.5.0\",\n mcuVersions: [3],\n } satisfies FinalFirmware;\n\n const mcuList = [\n {\n id: 1,\n name: \"1.0.0\",\n fromBootloaderVersion: \"0.0\",\n providers: [1],\n },\n {\n id: 3,\n name: \"3.0.0\",\n fromBootloaderVersion: \"0.0\",\n providers: [1, 2],\n },\n ] satisfies McuFirmware[];\n\n const managerApiMock = {\n getMcuList: vi.fn(),\n getDeviceVersion: vi.fn(),\n getFirmwareVersion: vi.fn(),\n getOsuFirmwareVersion: vi.fn(),\n getLatestFirmwareVersion: vi.fn(),\n getNextFirmwareVersion: vi.fn(),\n getProvider: vi.fn(),\n };\n\n beforeEach(() => {\n vi.resetAllMocks();\n apiMock.getManagerApiService.mockReturnValue(managerApiMock as never);\n managerApiMock.getMcuList.mockReturnValue(rightAsync(mcuList));\n managerApiMock.getDeviceVersion.mockReturnValue(rightAsync(deviceVersion));\n managerApiMock.getFirmwareVersion.mockReturnValue(\n rightAsync(currentFirmware),\n );\n managerApiMock.getLatestFirmwareVersion.mockReturnValue(\n rightAsync(Just(firstOsuFirmware)),\n );\n managerApiMock.getOsuFirmwareVersion.mockReturnValue(\n rightAsync(firstOsuFirmware),\n );\n managerApiMock.getNextFirmwareVersion.mockReturnValue(\n rightAsync(firstFinalFirmware),\n );\n managerApiMock.getProvider.mockReturnValue(DEFAULT_MANAGER_API_PROVIDER);\n });\n\n describe(\"Success\", () => {\n it(\"Should return an empty update path when no firmware update is available\", async () => {\n managerApiMock.getLatestFirmwareVersion.mockReturnValueOnce(\n rightAsync(Nothing),\n );\n\n const result = await resolveOsUpdatePath(apiMock)({\n input: { getOsVersionResponse },\n });\n\n expect(result.extract()).toEqual([]);\n expect(managerApiMock.getDeviceVersion).toHaveBeenCalledWith(\n getOsVersionResponse,\n );\n expect(managerApiMock.getFirmwareVersion).toHaveBeenCalledWith(\n getOsVersionResponse,\n deviceVersion,\n );\n expect(managerApiMock.getLatestFirmwareVersion).toHaveBeenCalledWith(\n currentFirmware,\n deviceVersion,\n );\n expect(managerApiMock.getNextFirmwareVersion).not.toHaveBeenCalled();\n });\n\n it(\"Should resolve a single update without MCU flash when the final firmware supports the current MCU\", async () => {\n managerApiMock.getLatestFirmwareVersion\n .mockReturnValueOnce(rightAsync(Just(firstOsuFirmware)))\n .mockReturnValueOnce(rightAsync(Nothing));\n\n const result = await resolveOsUpdatePath(apiMock)({\n input: { getOsVersionResponse },\n });\n\n expect(result.extract()).toEqual([\n {\n osuFirmware: firstOsuFirmware,\n finalFirmware: firstFinalFirmware,\n shouldFlashMcu: false,\n },\n ]);\n });\n\n it(\"Should resolve OSU mode from the OSU firmware endpoint\", async () => {\n managerApiMock.getLatestFirmwareVersion.mockReturnValueOnce(\n rightAsync(Nothing),\n );\n\n const osVersionResponse = {\n ...getOsVersionResponse,\n isOsu: true,\n } satisfies GetOsVersionResponse;\n const result = await resolveOsUpdatePath(apiMock)({\n input: { getOsVersionResponse: osVersionResponse },\n });\n\n expect(result.extract()).toEqual([\n {\n osuFirmware: firstOsuFirmware,\n finalFirmware: firstFinalFirmware,\n shouldFlashMcu: false,\n },\n ]);\n expect(managerApiMock.getOsuFirmwareVersion).toHaveBeenCalledWith(\n osVersionResponse,\n deviceVersion,\n );\n expect(managerApiMock.getFirmwareVersion).not.toHaveBeenCalled();\n });\n\n it(\"Should resolve multiple updates and flag the one requiring an MCU flash\", async () => {\n managerApiMock.getLatestFirmwareVersion\n .mockReturnValueOnce(rightAsync(Just(firstOsuFirmware)))\n .mockReturnValueOnce(rightAsync(Just(secondOsuFirmware)))\n .mockReturnValueOnce(rightAsync(Nothing));\n managerApiMock.getNextFirmwareVersion\n .mockReturnValueOnce(rightAsync(firstFinalFirmware))\n .mockReturnValueOnce(rightAsync(secondFinalFirmware));\n\n const result = await resolveOsUpdatePath(apiMock)({\n input: { getOsVersionResponse },\n });\n\n expect(result.extract()).toEqual([\n {\n osuFirmware: firstOsuFirmware,\n finalFirmware: firstFinalFirmware,\n shouldFlashMcu: false,\n },\n {\n osuFirmware: secondOsuFirmware,\n finalFirmware: secondFinalFirmware,\n shouldFlashMcu: true,\n },\n ]);\n expect(managerApiMock.getDeviceVersion).toHaveBeenCalledTimes(1);\n expect(managerApiMock.getLatestFirmwareVersion).toHaveBeenNthCalledWith(\n 2,\n firstFinalFirmware,\n deviceVersion,\n );\n });\n\n it(\"Should resolve the latest compatible MCU when MCU names are not strict semver\", async () => {\n const managerMcuList = [\n {\n id: 1,\n name: \"1.0\",\n fromBootloaderVersion: \"0.0\",\n providers: [1],\n },\n {\n id: 2,\n name: \"1.1\",\n fromBootloaderVersion: \"0.0\",\n providers: [1, 2],\n },\n {\n id: 3,\n name: \"1.2\",\n fromBootloaderVersion: \"0.0\",\n providers: [1, 2, 3],\n },\n ] satisfies McuFirmware[];\n const finalFirmwareRequiringMcuFlash = {\n ...firstFinalFirmware,\n mcuVersions: [2, 3],\n } satisfies FinalFirmware;\n const finalFirmwareSupportingLatestMcu = {\n ...secondFinalFirmware,\n mcuVersions: [3],\n } satisfies FinalFirmware;\n\n managerApiMock.getMcuList.mockReturnValueOnce(rightAsync(managerMcuList));\n managerApiMock.getLatestFirmwareVersion\n .mockReturnValueOnce(rightAsync(Just(firstOsuFirmware)))\n .mockReturnValueOnce(rightAsync(Just(secondOsuFirmware)))\n .mockReturnValueOnce(rightAsync(Nothing));\n managerApiMock.getNextFirmwareVersion\n .mockReturnValueOnce(rightAsync(finalFirmwareRequiringMcuFlash))\n .mockReturnValueOnce(rightAsync(finalFirmwareSupportingLatestMcu));\n\n const result = await resolveOsUpdatePath(apiMock)({\n input: {\n getOsVersionResponse: {\n ...getOsVersionResponse,\n mcuSephVersion: \"1.0\",\n },\n },\n });\n\n expect(result.extract()).toEqual([\n {\n osuFirmware: firstOsuFirmware,\n finalFirmware: finalFirmwareRequiringMcuFlash,\n shouldFlashMcu: true,\n },\n {\n osuFirmware: secondOsuFirmware,\n finalFirmware: finalFirmwareSupportingLatestMcu,\n shouldFlashMcu: false,\n },\n ]);\n });\n });\n\n describe(\"Error\", () => {\n it(\"Should return ResolveOsUpdatePathError when the MCU list cannot be fetched\", async () => {\n const error = new Error(\"mcu list failed\");\n managerApiMock.getMcuList.mockReturnValueOnce(leftAsync(error));\n\n const result = await resolveOsUpdatePath(apiMock)({\n input: { getOsVersionResponse },\n });\n\n expect(result.isLeft()).toBe(true);\n result.mapLeft((e) => {\n expect(e).toBeInstanceOf(ResolveOsUpdatePathError);\n expect(e.originalError).toBe(error);\n });\n });\n\n it(\"Should return ResolveOsUpdatePathError when the current MCU version is unknown\", async () => {\n const result = await resolveOsUpdatePath(apiMock)({\n input: {\n getOsVersionResponse: {\n ...getOsVersionResponse,\n mcuSephVersion: \"9.9.9\",\n },\n },\n });\n\n expect(result.isLeft()).toBe(true);\n result.mapLeft((e) => {\n expect(e).toBeInstanceOf(ResolveOsUpdatePathError);\n expect(e.originalError).toBe(\"No MCU firmware found for version 9.9.9\");\n });\n });\n\n it(\"Should return ResolveOsUpdatePathError when no compatible MCU can be resolved for the next firmware\", async () => {\n managerApiMock.getNextFirmwareVersion.mockReturnValueOnce(\n rightAsync({\n ...firstFinalFirmware,\n mcuVersions: [42],\n }),\n );\n\n const result = await resolveOsUpdatePath(apiMock)({\n input: { getOsVersionResponse },\n });\n\n expect(result.isLeft()).toBe(true);\n result.mapLeft((e) => {\n expect(e).toBeInstanceOf(ResolveOsUpdatePathError);\n expect(e.originalError).toBe(\"No MCU firmware found for version null\");\n });\n });\n });\n});\n"],
5
+ "mappings": "aAAA,IAAAA,EAIO,2CACPC,EAA2C,qBAE3CC,EAAgD,6DAChDC,EAAyC,qFACzCC,EAAoC,4EAOpC,MAAMC,EAAiBC,MACrB,eAAwB,IAAM,QAAQ,QAAQA,CAAK,CAAC,EAEhDC,EAAaC,MACjB,eAA4B,CAAC,CAAE,OAAAC,CAAO,IAAM,QAAQ,QAAQA,EAAOD,CAAK,CAAC,CAAC,EAE5E,SAAS,sBAAuB,IAAM,CAGpC,MAAME,KAAU,mCAAgC,EAE1CC,EAAuB,CAC3B,aAAc,GACd,MAAO,GACP,SAAU,UACV,WAAY,UACZ,YAAa,OACb,UAAW,QACX,QAAS,IAAI,WAAW,CAAC,IAAM,EAAM,EAAM,CAAI,CAAC,EAChD,eAAgB,QAChB,qBAAsB,OACtB,UAAW,KACX,OAAQ,EACR,aAAc,OACd,mBAAoB,CAClB,eAAgB,GAChB,mBAAoB,GACpB,oBAAqB,GACrB,mCAAoC,GACpC,0BAA2B,GAC3B,YAAa,GACb,gBAAiB,GACjB,iBAAkB,GAClB,iCAAkC,GAClC,iCAAkC,GAClC,cAAe,gBAAc,WAC7B,iBAAkB,EAClB,gBAAiB,kBAAgB,OACnC,CACF,EAEMC,EAAgB,CACpB,GAAI,GACJ,UAAW,YACX,KAAM,aACR,EAEMC,EAAkB,CACtB,GAAI,IACJ,QAAS,QACT,MAAO,QACP,SAAU,KACV,YAAa,KACb,KAAM,KACN,MAAO,KACP,YAAa,CAAC,CAAC,CACjB,EAEMC,EAAmB,CACvB,GAAI,IACJ,MAAO,eACP,MAAO,QACP,SAAU,MACV,YAAa,UACb,KAAM,WACN,kBAAmB,GACrB,EAEMC,EAAoB,CACxB,GAAGD,EACH,GAAI,IACJ,kBAAmB,GACrB,EAEME,EAAqB,CACzB,GAAI,IACJ,QAAS,QACT,MAAO,QACP,SAAU,QACV,YAAa,YACb,KAAM,aACN,MAAO,IACP,YAAa,CAAC,CAAC,CACjB,EAEMC,EAAsB,CAC1B,GAAGD,EACH,GAAI,IACJ,QAAS,QACT,YAAa,CAAC,CAAC,CACjB,EAEME,EAAU,CACd,CACE,GAAI,EACJ,KAAM,QACN,sBAAuB,MACvB,UAAW,CAAC,CAAC,CACf,EACA,CACE,GAAI,EACJ,KAAM,QACN,sBAAuB,MACvB,UAAW,CAAC,EAAG,CAAC,CAClB,CACF,EAEMC,EAAiB,CACrB,WAAY,GAAG,GAAG,EAClB,iBAAkB,GAAG,GAAG,EACxB,mBAAoB,GAAG,GAAG,EAC1B,sBAAuB,GAAG,GAAG,EAC7B,yBAA0B,GAAG,GAAG,EAChC,uBAAwB,GAAG,GAAG,EAC9B,YAAa,GAAG,GAAG,CACrB,EAEA,WAAW,IAAM,CACf,GAAG,cAAc,EACjBT,EAAQ,qBAAqB,gBAAgBS,CAAuB,EACpEA,EAAe,WAAW,gBAAgBd,EAAWa,CAAO,CAAC,EAC7DC,EAAe,iBAAiB,gBAAgBd,EAAWO,CAAa,CAAC,EACzEO,EAAe,mBAAmB,gBAChCd,EAAWQ,CAAe,CAC5B,EACAM,EAAe,yBAAyB,gBACtCd,KAAW,QAAKS,CAAgB,CAAC,CACnC,EACAK,EAAe,sBAAsB,gBACnCd,EAAWS,CAAgB,CAC7B,EACAK,EAAe,uBAAuB,gBACpCd,EAAWW,CAAkB,CAC/B,EACAG,EAAe,YAAY,gBAAgB,CAA4B,CACzE,CAAC,EAED,SAAS,UAAW,IAAM,CACxB,GAAG,0EAA2E,SAAY,CACxFA,EAAe,yBAAyB,oBACtCd,EAAW,SAAO,CACpB,EAEA,MAAMe,EAAS,QAAM,uBAAoBV,CAAO,EAAE,CAChD,MAAO,CAAE,qBAAAC,CAAqB,CAChC,CAAC,EAED,OAAOS,EAAO,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC,EACnC,OAAOD,EAAe,gBAAgB,EAAE,qBACtCR,CACF,EACA,OAAOQ,EAAe,kBAAkB,EAAE,qBACxCR,EACAC,CACF,EACA,OAAOO,EAAe,wBAAwB,EAAE,qBAC9CN,EACAD,CACF,EACA,OAAOO,EAAe,sBAAsB,EAAE,IAAI,iBAAiB,CACrE,CAAC,EAED,GAAG,oGAAqG,SAAY,CAClHA,EAAe,yBACZ,oBAAoBd,KAAW,QAAKS,CAAgB,CAAC,CAAC,EACtD,oBAAoBT,EAAW,SAAO,CAAC,EAE1C,MAAMe,EAAS,QAAM,uBAAoBV,CAAO,EAAE,CAChD,MAAO,CAAE,qBAAAC,CAAqB,CAChC,CAAC,EAED,OAAOS,EAAO,QAAQ,CAAC,EAAE,QAAQ,CAC/B,CACE,YAAaN,EACb,cAAeE,EACf,eAAgB,EAClB,CACF,CAAC,CACH,CAAC,EAED,GAAG,yDAA0D,SAAY,CACvEG,EAAe,yBAAyB,oBACtCd,EAAW,SAAO,CACpB,EAEA,MAAMgB,EAAoB,CACxB,GAAGV,EACH,MAAO,EACT,EACMS,EAAS,QAAM,uBAAoBV,CAAO,EAAE,CAChD,MAAO,CAAE,qBAAsBW,CAAkB,CACnD,CAAC,EAED,OAAOD,EAAO,QAAQ,CAAC,EAAE,QAAQ,CAC/B,CACE,YAAaN,EACb,cAAeE,EACf,eAAgB,EAClB,CACF,CAAC,EACD,OAAOG,EAAe,qBAAqB,EAAE,qBAC3CE,EACAT,CACF,EACA,OAAOO,EAAe,kBAAkB,EAAE,IAAI,iBAAiB,CACjE,CAAC,EAED,GAAG,0EAA2E,SAAY,CACxFA,EAAe,yBACZ,oBAAoBd,KAAW,QAAKS,CAAgB,CAAC,CAAC,EACtD,oBAAoBT,KAAW,QAAKU,CAAiB,CAAC,CAAC,EACvD,oBAAoBV,EAAW,SAAO,CAAC,EAC1Cc,EAAe,uBACZ,oBAAoBd,EAAWW,CAAkB,CAAC,EAClD,oBAAoBX,EAAWY,CAAmB,CAAC,EAEtD,MAAMG,EAAS,QAAM,uBAAoBV,CAAO,EAAE,CAChD,MAAO,CAAE,qBAAAC,CAAqB,CAChC,CAAC,EAED,OAAOS,EAAO,QAAQ,CAAC,EAAE,QAAQ,CAC/B,CACE,YAAaN,EACb,cAAeE,EACf,eAAgB,EAClB,EACA,CACE,YAAaD,EACb,cAAeE,EACf,eAAgB,EAClB,CACF,CAAC,EACD,OAAOE,EAAe,gBAAgB,EAAE,sBAAsB,CAAC,EAC/D,OAAOA,EAAe,wBAAwB,EAAE,wBAC9C,EACAH,EACAJ,CACF,CACF,CAAC,EAED,GAAG,gFAAiF,SAAY,CAC9F,MAAMU,EAAiB,CACrB,CACE,GAAI,EACJ,KAAM,MACN,sBAAuB,MACvB,UAAW,CAAC,CAAC,CACf,EACA,CACE,GAAI,EACJ,KAAM,MACN,sBAAuB,MACvB,UAAW,CAAC,EAAG,CAAC,CAClB,EACA,CACE,GAAI,EACJ,KAAM,MACN,sBAAuB,MACvB,UAAW,CAAC,EAAG,EAAG,CAAC,CACrB,CACF,EACMC,EAAiC,CACrC,GAAGP,EACH,YAAa,CAAC,EAAG,CAAC,CACpB,EACMQ,EAAmC,CACvC,GAAGP,EACH,YAAa,CAAC,CAAC,CACjB,EAEAE,EAAe,WAAW,oBAAoBd,EAAWiB,CAAc,CAAC,EACxEH,EAAe,yBACZ,oBAAoBd,KAAW,QAAKS,CAAgB,CAAC,CAAC,EACtD,oBAAoBT,KAAW,QAAKU,CAAiB,CAAC,CAAC,EACvD,oBAAoBV,EAAW,SAAO,CAAC,EAC1Cc,EAAe,uBACZ,oBAAoBd,EAAWkB,CAA8B,CAAC,EAC9D,oBAAoBlB,EAAWmB,CAAgC,CAAC,EAEnE,MAAMJ,EAAS,QAAM,uBAAoBV,CAAO,EAAE,CAChD,MAAO,CACL,qBAAsB,CACpB,GAAGC,EACH,eAAgB,KAClB,CACF,CACF,CAAC,EAED,OAAOS,EAAO,QAAQ,CAAC,EAAE,QAAQ,CAC/B,CACE,YAAaN,EACb,cAAeS,EACf,eAAgB,EAClB,EACA,CACE,YAAaR,EACb,cAAeS,EACf,eAAgB,EAClB,CACF,CAAC,CACH,CAAC,CACH,CAAC,EAED,SAAS,QAAS,IAAM,CACtB,GAAG,6EAA8E,SAAY,CAC3F,MAAMhB,EAAQ,IAAI,MAAM,iBAAiB,EACzCW,EAAe,WAAW,oBAAoBZ,EAAUC,CAAK,CAAC,EAE9D,MAAMY,EAAS,QAAM,uBAAoBV,CAAO,EAAE,CAChD,MAAO,CAAE,qBAAAC,CAAqB,CAChC,CAAC,EAED,OAAOS,EAAO,OAAO,CAAC,EAAE,KAAK,EAAI,EACjCA,EAAO,QAASK,GAAM,CACpB,OAAOA,CAAC,EAAE,eAAe,0BAAwB,EACjD,OAAOA,EAAE,aAAa,EAAE,KAAKjB,CAAK,CACpC,CAAC,CACH,CAAC,EAED,GAAG,iFAAkF,SAAY,CAC/F,MAAMY,EAAS,QAAM,uBAAoBV,CAAO,EAAE,CAChD,MAAO,CACL,qBAAsB,CACpB,GAAGC,EACH,eAAgB,OAClB,CACF,CACF,CAAC,EAED,OAAOS,EAAO,OAAO,CAAC,EAAE,KAAK,EAAI,EACjCA,EAAO,QAASK,GAAM,CACpB,OAAOA,CAAC,EAAE,eAAe,0BAAwB,EACjD,OAAOA,EAAE,aAAa,EAAE,KAAK,yCAAyC,CACxE,CAAC,CACH,CAAC,EAED,GAAG,sGAAuG,SAAY,CACpHN,EAAe,uBAAuB,oBACpCd,EAAW,CACT,GAAGW,EACH,YAAa,CAAC,EAAE,CAClB,CAAC,CACH,EAEA,MAAMI,EAAS,QAAM,uBAAoBV,CAAO,EAAE,CAChD,MAAO,CAAE,qBAAAC,CAAqB,CAChC,CAAC,EAED,OAAOS,EAAO,OAAO,CAAC,EAAE,KAAK,EAAI,EACjCA,EAAO,QAASK,GAAM,CACpB,OAAOA,CAAC,EAAE,eAAe,0BAAwB,EACjD,OAAOA,EAAE,aAAa,EAAE,KAAK,wCAAwC,CACvE,CAAC,CACH,CAAC,CACH,CAAC,CACH,CAAC",
6
+ "names": ["import_device_management_kit", "import_purify_ts", "import_makeInternalApi", "import_ResolveOsUpdatePathDeviceActionErrors", "import_ResolveOsUpdatePath", "rightAsync", "value", "leftAsync", "error", "throwE", "apiMock", "getOsVersionResponse", "deviceVersion", "currentFirmware", "firstOsuFirmware", "secondOsuFirmware", "firstFinalFirmware", "secondFinalFirmware", "mcuList", "managerApiMock", "result", "osVersionResponse", "managerMcuList", "finalFirmwareRequiringMcuFlash", "finalFirmwareSupportingLatestMcu", "e"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var t=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var u=(n,r)=>{for(var o in r)t(n,o,{get:r[o],enumerable:!0})},F=(n,r,o,e)=>{if(r&&typeof r=="object"||typeof r=="function")for(let i of c(r))!l.call(n,i)&&i!==o&&t(n,i,{get:()=>r[i],enumerable:!(e=a(r,i))||e.enumerable});return n};var p=n=>F(t({},"__esModule",{value:!0}),n);var f={};u(f,{bestCompatibleMcu:()=>d});module.exports=p(f);var s=require("semver");const w=1,E=new Set(["none","noneee","rien",""]),d=(n,r,o=w)=>n.filter(e=>r.mcuVersions.includes(e.id)&&e.providers.includes(o)&&!E.has(e.fromBootloaderVersion)).reduce((e,i)=>{const m=(0,s.coerce)(i.name)?.version;return m&&(!e||(0,s.compare)(m,e.version)>0)?{...i,version:m}:e},null);0&&(module.exports={bestCompatibleMcu});
1
+ "use strict";var t=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var F=Object.prototype.hasOwnProperty;var f=(n,r)=>{for(var o in r)t(n,o,{get:r[o],enumerable:!0})},p=(n,r,o,e)=>{if(r&&typeof r=="object"||typeof r=="function")for(let s of d(r))!F.call(n,s)&&s!==o&&t(n,s,{get:()=>r[s],enumerable:!(e=m(r,s))||e.enumerable});return n};var w=n=>p(t({},"__esModule",{value:!0}),n);var E={};f(E,{bestCompatibleMcu:()=>M,bestMcuForBootloaderVersion:()=>v,isSameBootloaderVersion:()=>a});module.exports=w(E);var i=require("semver");const c=1,u=new Set(["none","noneee","rien",""]),a=(n,r)=>{const o=(0,i.coerce)(n)?.version,e=(0,i.coerce)(r)?.version;return o!==void 0&&e!==void 0?o===e:n===r},l=n=>n.reduce((r,o)=>{const e=(0,i.coerce)(o.name)?.version;return e&&(!r||(0,i.compare)(e,r.version)>0)?{...o,version:e}:r},null),M=(n,r,o=c)=>l(n.filter(e=>r.mcuVersions.includes(e.id)&&e.providers.includes(o)&&!u.has(e.fromBootloaderVersion))),v=(n,r,o=c)=>l(n.filter(e=>e.providers.includes(o)&&!u.has(e.fromBootloaderVersion)&&a(e.fromBootloaderVersion,r)));0&&(module.exports={bestCompatibleMcu,bestMcuForBootloaderVersion,isSameBootloaderVersion});
2
2
  //# sourceMappingURL=OsUpdateUtils.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/api/device-action/OsUpdate/Shared/OsUpdateUtils.ts"],
4
- "sourcesContent": ["import { coerce, compare } from \"semver\";\n\nimport {\n type FinalFirmware,\n type McuFirmware,\n} from \"@api/device-action/OsUpdate/Shared/types\";\n\nconst DEFAULT_MANAGER_API_PROVIDER = 1;\n\n/*\n * List of from_bootloader_versions that are excluded.\n */\nconst EXCLUDED_FROM_BOOTLOADER_VERSIONS = new Set([\n \"none\",\n \"noneee\",\n \"rien\",\n \"\",\n]);\n\nexport const bestCompatibleMcu = (\n mcuList: McuFirmware[],\n finalFirmware: FinalFirmware,\n provider: number = DEFAULT_MANAGER_API_PROVIDER,\n): McuFirmware | null =>\n mcuList\n .filter(\n (mcu) =>\n finalFirmware.mcuVersions.includes(mcu.id) &&\n mcu.providers.includes(provider) &&\n !EXCLUDED_FROM_BOOTLOADER_VERSIONS.has(mcu.fromBootloaderVersion),\n )\n .reduce<(McuFirmware & { version: string }) | null>((latestMcu, mcu) => {\n const version = coerce(mcu.name)?.version;\n\n if (!version) {\n return latestMcu;\n }\n\n if (!latestMcu || compare(version, latestMcu.version) > 0) {\n return {\n ...mcu,\n version,\n };\n }\n\n return latestMcu;\n }, null);\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,uBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAgC,kBAOhC,MAAMC,EAA+B,EAK/BC,EAAoC,IAAI,IAAI,CAChD,OACA,SACA,OACA,EACF,CAAC,EAEYJ,EAAoB,CAC/BK,EACAC,EACAC,EAAmBJ,IAEnBE,EACG,OACEG,GACCF,EAAc,YAAY,SAASE,EAAI,EAAE,GACzCA,EAAI,UAAU,SAASD,CAAQ,GAC/B,CAACH,EAAkC,IAAII,EAAI,qBAAqB,CACpE,EACC,OAAmD,CAACC,EAAWD,IAAQ,CACtE,MAAME,KAAU,UAAOF,EAAI,IAAI,GAAG,QAElC,OAAKE,IAID,CAACD,MAAa,WAAQC,EAASD,EAAU,OAAO,EAAI,GAC/C,CACL,GAAGD,EACH,QAAAE,CACF,EAPOD,CAWX,EAAG,IAAI",
6
- "names": ["OsUpdateUtils_exports", "__export", "bestCompatibleMcu", "__toCommonJS", "import_semver", "DEFAULT_MANAGER_API_PROVIDER", "EXCLUDED_FROM_BOOTLOADER_VERSIONS", "mcuList", "finalFirmware", "provider", "mcu", "latestMcu", "version"]
4
+ "sourcesContent": ["import { coerce, compare } from \"semver\";\n\nimport {\n type FinalFirmware,\n type McuFirmware,\n} from \"@api/device-action/OsUpdate/Shared/types\";\n\nconst DEFAULT_MANAGER_API_PROVIDER = 1;\n\n/*\n * List of from_bootloader_versions that are excluded.\n */\nconst EXCLUDED_FROM_BOOTLOADER_VERSIONS = new Set([\n \"none\",\n \"noneee\",\n \"rien\",\n \"\",\n]);\n\n/*\n * The MCU catalog and the devices do not agree on how many segments a\n * bootloader version has (\"1.16\" against \"1.16.0\"), so compare them coerced and\n * only fall back to the raw strings when either side is not valid semver.\n */\nexport const isSameBootloaderVersion = (\n bootloaderVersion: string,\n otherBootloaderVersion: string,\n): boolean => {\n const coerced = coerce(bootloaderVersion)?.version;\n const otherCoerced = coerce(otherBootloaderVersion)?.version;\n\n return coerced !== undefined && otherCoerced !== undefined\n ? coerced === otherCoerced\n : bootloaderVersion === otherBootloaderVersion;\n};\n\nconst highestMcu = (mcuList: McuFirmware[]): McuFirmware | null =>\n mcuList.reduce<(McuFirmware & { version: string }) | null>(\n (latestMcu, mcu) => {\n const version = coerce(mcu.name)?.version;\n\n if (!version) {\n return latestMcu;\n }\n\n if (!latestMcu || compare(version, latestMcu.version) > 0) {\n return {\n ...mcu,\n version,\n };\n }\n\n return latestMcu;\n },\n null,\n );\n\nexport const bestCompatibleMcu = (\n mcuList: McuFirmware[],\n finalFirmware: FinalFirmware,\n provider: number = DEFAULT_MANAGER_API_PROVIDER,\n): McuFirmware | null =>\n highestMcu(\n mcuList.filter(\n (mcu) =>\n finalFirmware.mcuVersions.includes(mcu.id) &&\n mcu.providers.includes(provider) &&\n !EXCLUDED_FROM_BOOTLOADER_VERSIONS.has(mcu.fromBootloaderVersion),\n ),\n );\n\n/*\n * Fallback for devices that report no secure element firmware: without a final\n * firmware to aim at, the only usable hint is the bootloader they start from.\n */\nexport const bestMcuForBootloaderVersion = (\n mcuList: McuFirmware[],\n bootloaderVersion: string,\n provider: number = DEFAULT_MANAGER_API_PROVIDER,\n): McuFirmware | null =>\n highestMcu(\n mcuList.filter(\n (mcu) =>\n mcu.providers.includes(provider) &&\n !EXCLUDED_FROM_BOOTLOADER_VERSIONS.has(mcu.fromBootloaderVersion) &&\n isSameBootloaderVersion(mcu.fromBootloaderVersion, bootloaderVersion),\n ),\n );\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,uBAAAE,EAAA,gCAAAC,EAAA,4BAAAC,IAAA,eAAAC,EAAAL,GAAA,IAAAM,EAAgC,kBAOhC,MAAMC,EAA+B,EAK/BC,EAAoC,IAAI,IAAI,CAChD,OACA,SACA,OACA,EACF,CAAC,EAOYJ,EAA0B,CACrCK,EACAC,IACY,CACZ,MAAMC,KAAU,UAAOF,CAAiB,GAAG,QACrCG,KAAe,UAAOF,CAAsB,GAAG,QAErD,OAAOC,IAAY,QAAaC,IAAiB,OAC7CD,IAAYC,EACZH,IAAsBC,CAC5B,EAEMG,EAAcC,GAClBA,EAAQ,OACN,CAACC,EAAWC,IAAQ,CAClB,MAAMC,KAAU,UAAOD,EAAI,IAAI,GAAG,QAElC,OAAKC,IAID,CAACF,MAAa,WAAQE,EAASF,EAAU,OAAO,EAAI,GAC/C,CACL,GAAGC,EACH,QAAAC,CACF,EAPOF,CAWX,EACA,IACF,EAEWb,EAAoB,CAC/BY,EACAI,EACAC,EAAmBZ,IAEnBM,EACEC,EAAQ,OACLE,GACCE,EAAc,YAAY,SAASF,EAAI,EAAE,GACzCA,EAAI,UAAU,SAASG,CAAQ,GAC/B,CAACX,EAAkC,IAAIQ,EAAI,qBAAqB,CACpE,CACF,EAMWb,EAA8B,CACzCW,EACAL,EACAU,EAAmBZ,IAEnBM,EACEC,EAAQ,OACLE,GACCA,EAAI,UAAU,SAASG,CAAQ,GAC/B,CAACX,EAAkC,IAAIQ,EAAI,qBAAqB,GAChEZ,EAAwBY,EAAI,sBAAuBP,CAAiB,CACxE,CACF",
6
+ "names": ["OsUpdateUtils_exports", "__export", "bestCompatibleMcu", "bestMcuForBootloaderVersion", "isSameBootloaderVersion", "__toCommonJS", "import_semver", "DEFAULT_MANAGER_API_PROVIDER", "EXCLUDED_FROM_BOOTLOADER_VERSIONS", "bootloaderVersion", "otherBootloaderVersion", "coerced", "otherCoerced", "highestMcu", "mcuList", "latestMcu", "mcu", "version", "finalFirmware", "provider"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("@ledgerhq/device-management-kit"),a=require("../../../../device-action/__test-utils__/makeInternalApi"),c=require("../../../../device-action/OsUpdate/Shared/OsUpdateDeviceActionErrors"),s=require("../../../../device-action/OsUpdate/Shared/Substeps/GetOsVersion");describe("GetOsVersion",()=>{const t=(0,a.makeDeviceActionInternalApiMock)(),{sendCommand:n}=t;beforeEach(()=>{vi.resetAllMocks()}),describe("Success",()=>{it("Should return the OS version response",async()=>{const r={isBootloader:!1,isOsu:!1,targetId:857735172,seTargetId:857735172,mcuTargetId:void 0,seVersion:"1.3.0",seFlags:new Uint8Array([230,0,0,0]),mcuSephVersion:"5.24",mcuBootloaderVersion:"0.48",hwVersion:"00",langId:0,recoverState:void 0,secureElementFlags:{isPinValidated:!0,hasMcuSerialNumber:!0,hasValidCertificate:!0,isCustomAuthorityConnectionAllowed:!1,isSecureConnectionAllowed:!1,isOnboarded:!0,isMcuCodeSigned:!0,isInRecoveryMode:!1}};n.mockResolvedValueOnce((0,e.CommandResultFactory)({data:r}));const o=await(0,s.getOsVersion)(t)();expect(o.isRight()).toBe(!0),expect(o.extract()).toEqual(r)})}),describe("Error",()=>{it("Should return GetOsVersionError",async()=>{const r=new e.GlobalCommandError({errorCode:"6e00",...e.GLOBAL_ERRORS["6e00"]});n.mockResolvedValueOnce((0,e.CommandResultFactory)({error:r}));const o=await(0,s.getOsVersion)(t)();expect(o.isLeft()).toBe(!0),o.mapLeft(i=>{expect(i).toBeInstanceOf(c.GetOsVersionError),expect(i.originalError).toBe(r.originalError)})})})});
1
+ "use strict";var e=require("@ledgerhq/device-management-kit"),a=require("../../../../device-action/__test-utils__/makeInternalApi"),c=require("../../../../device-action/OsUpdate/Shared/OsUpdateDeviceActionErrors"),n=require("../../../../device-action/OsUpdate/Shared/Substeps/GetOsVersion");describe("GetOsVersion",()=>{const t=(0,a.makeDeviceActionInternalApiMock)(),{sendCommand:s}=t;beforeEach(()=>{vi.resetAllMocks()}),describe("Success",()=>{it("Should return the OS version response",async()=>{const r={isBootloader:!1,isOsu:!1,targetId:857735172,seTargetId:857735172,mcuTargetId:void 0,seVersion:"1.3.0",seFlags:new Uint8Array([230,0,0,0]),mcuSephVersion:"5.24",mcuBootloaderVersion:"0.48",hwVersion:"00",langId:0,recoverState:void 0,secureElementFlags:{isPinValidated:!0,hasMcuSerialNumber:!0,hasValidCertificate:!0,isCustomAuthorityConnectionAllowed:!1,isSecureConnectionAllowed:!1,isOnboarded:!0,isMcuCodeSigned:!0,isInRecoveryMode:!1,hasEndorsementCertificateInSlot1:!1,hasEndorsementCertificateInSlot2:!1,numberOfWords:e.SeedWordCount.TwentyFour,currentWordIndex:0,onboardingState:e.OnboardingState.Unknown}};s.mockResolvedValueOnce((0,e.CommandResultFactory)({data:r}));const o=await(0,n.getOsVersion)(t)();expect(o.isRight()).toBe(!0),expect(o.extract()).toEqual(r)})}),describe("Error",()=>{it("Should return GetOsVersionError",async()=>{const r=new e.GlobalCommandError({errorCode:"6e00",...e.GLOBAL_ERRORS["6e00"]});s.mockResolvedValueOnce((0,e.CommandResultFactory)({error:r}));const o=await(0,n.getOsVersion)(t)();expect(o.isLeft()).toBe(!0),o.mapLeft(i=>{expect(i).toBeInstanceOf(c.GetOsVersionError),expect(i.originalError).toBe(r.originalError)})})})});
2
2
  //# sourceMappingURL=GetOsVersion.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../src/api/device-action/OsUpdate/Shared/Substeps/GetOsVersion.test.ts"],
4
- "sourcesContent": ["import {\n CommandResultFactory,\n GLOBAL_ERRORS,\n GlobalCommandError,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { makeDeviceActionInternalApiMock } from \"@api/device-action/__test-utils__/makeInternalApi\";\nimport { GetOsVersionError } from \"@api/device-action/OsUpdate/Shared/OsUpdateDeviceActionErrors\";\nimport { getOsVersion } from \"@api/device-action/OsUpdate/Shared/Substeps/GetOsVersion\";\n\ndescribe(\"GetOsVersion\", () => {\n const apiMock = makeDeviceActionInternalApiMock();\n const { sendCommand: sendCommandMock } = apiMock;\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"Success\", () => {\n it(\"Should return the OS version response\", async () => {\n const osVersion = {\n isBootloader: false,\n isOsu: false,\n targetId: 0x33200004,\n seTargetId: 0x33200004,\n mcuTargetId: undefined,\n seVersion: \"1.3.0\",\n seFlags: new Uint8Array([0xe6, 0x00, 0x00, 0x00]),\n mcuSephVersion: \"5.24\",\n mcuBootloaderVersion: \"0.48\",\n hwVersion: \"00\",\n langId: 0,\n recoverState: undefined,\n secureElementFlags: {\n isPinValidated: true,\n hasMcuSerialNumber: true,\n hasValidCertificate: true,\n isCustomAuthorityConnectionAllowed: false,\n isSecureConnectionAllowed: false,\n isOnboarded: true,\n isMcuCodeSigned: true,\n isInRecoveryMode: false,\n },\n };\n sendCommandMock.mockResolvedValueOnce(\n CommandResultFactory({ data: osVersion }),\n );\n\n const result = await getOsVersion(apiMock)();\n\n expect(result.isRight()).toBe(true);\n expect(result.extract()).toEqual(osVersion);\n });\n });\n\n describe(\"Error\", () => {\n it(\"Should return GetOsVersionError\", async () => {\n const error = new GlobalCommandError({\n errorCode: \"6e00\",\n ...GLOBAL_ERRORS[\"6e00\"],\n });\n sendCommandMock.mockResolvedValueOnce(CommandResultFactory({ error }));\n\n const result = await getOsVersion(apiMock)();\n\n expect(result.isLeft()).toBe(true);\n result.mapLeft((e) => {\n expect(e).toBeInstanceOf(GetOsVersionError);\n expect(e.originalError).toBe(error.originalError);\n });\n });\n });\n});\n"],
5
- "mappings": "aAAA,IAAAA,EAIO,2CAEPC,EAAgD,6DAChDC,EAAkC,yEAClCC,EAA6B,oEAE7B,SAAS,eAAgB,IAAM,CAC7B,MAAMC,KAAU,mCAAgC,EAC1C,CAAE,YAAaC,CAAgB,EAAID,EAEzC,WAAW,IAAM,CACf,GAAG,cAAc,CACnB,CAAC,EAED,SAAS,UAAW,IAAM,CACxB,GAAG,wCAAyC,SAAY,CACtD,MAAME,EAAY,CAChB,aAAc,GACd,MAAO,GACP,SAAU,UACV,WAAY,UACZ,YAAa,OACb,UAAW,QACX,QAAS,IAAI,WAAW,CAAC,IAAM,EAAM,EAAM,CAAI,CAAC,EAChD,eAAgB,OAChB,qBAAsB,OACtB,UAAW,KACX,OAAQ,EACR,aAAc,OACd,mBAAoB,CAClB,eAAgB,GAChB,mBAAoB,GACpB,oBAAqB,GACrB,mCAAoC,GACpC,0BAA2B,GAC3B,YAAa,GACb,gBAAiB,GACjB,iBAAkB,EACpB,CACF,EACAD,EAAgB,yBACd,wBAAqB,CAAE,KAAMC,CAAU,CAAC,CAC1C,EAEA,MAAMC,EAAS,QAAM,gBAAaH,CAAO,EAAE,EAE3C,OAAOG,EAAO,QAAQ,CAAC,EAAE,KAAK,EAAI,EAClC,OAAOA,EAAO,QAAQ,CAAC,EAAE,QAAQD,CAAS,CAC5C,CAAC,CACH,CAAC,EAED,SAAS,QAAS,IAAM,CACtB,GAAG,kCAAmC,SAAY,CAChD,MAAME,EAAQ,IAAI,qBAAmB,CACnC,UAAW,OACX,GAAG,gBAAc,MAAM,CACzB,CAAC,EACDH,EAAgB,yBAAsB,wBAAqB,CAAE,MAAAG,CAAM,CAAC,CAAC,EAErE,MAAMD,EAAS,QAAM,gBAAaH,CAAO,EAAE,EAE3C,OAAOG,EAAO,OAAO,CAAC,EAAE,KAAK,EAAI,EACjCA,EAAO,QAASE,GAAM,CACpB,OAAOA,CAAC,EAAE,eAAe,mBAAiB,EAC1C,OAAOA,EAAE,aAAa,EAAE,KAAKD,EAAM,aAAa,CAClD,CAAC,CACH,CAAC,CACH,CAAC,CACH,CAAC",
4
+ "sourcesContent": ["import {\n CommandResultFactory,\n GLOBAL_ERRORS,\n GlobalCommandError,\n OnboardingState,\n SeedWordCount,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { makeDeviceActionInternalApiMock } from \"@api/device-action/__test-utils__/makeInternalApi\";\nimport { GetOsVersionError } from \"@api/device-action/OsUpdate/Shared/OsUpdateDeviceActionErrors\";\nimport { getOsVersion } from \"@api/device-action/OsUpdate/Shared/Substeps/GetOsVersion\";\n\ndescribe(\"GetOsVersion\", () => {\n const apiMock = makeDeviceActionInternalApiMock();\n const { sendCommand: sendCommandMock } = apiMock;\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"Success\", () => {\n it(\"Should return the OS version response\", async () => {\n const osVersion = {\n isBootloader: false,\n isOsu: false,\n targetId: 0x33200004,\n seTargetId: 0x33200004,\n mcuTargetId: undefined,\n seVersion: \"1.3.0\",\n seFlags: new Uint8Array([0xe6, 0x00, 0x00, 0x00]),\n mcuSephVersion: \"5.24\",\n mcuBootloaderVersion: \"0.48\",\n hwVersion: \"00\",\n langId: 0,\n recoverState: undefined,\n secureElementFlags: {\n isPinValidated: true,\n hasMcuSerialNumber: true,\n hasValidCertificate: true,\n isCustomAuthorityConnectionAllowed: false,\n isSecureConnectionAllowed: false,\n isOnboarded: true,\n isMcuCodeSigned: true,\n isInRecoveryMode: false,\n hasEndorsementCertificateInSlot1: false,\n hasEndorsementCertificateInSlot2: false,\n numberOfWords: SeedWordCount.TwentyFour,\n currentWordIndex: 0,\n onboardingState: OnboardingState.Unknown,\n },\n };\n sendCommandMock.mockResolvedValueOnce(\n CommandResultFactory({ data: osVersion }),\n );\n\n const result = await getOsVersion(apiMock)();\n\n expect(result.isRight()).toBe(true);\n expect(result.extract()).toEqual(osVersion);\n });\n });\n\n describe(\"Error\", () => {\n it(\"Should return GetOsVersionError\", async () => {\n const error = new GlobalCommandError({\n errorCode: \"6e00\",\n ...GLOBAL_ERRORS[\"6e00\"],\n });\n sendCommandMock.mockResolvedValueOnce(CommandResultFactory({ error }));\n\n const result = await getOsVersion(apiMock)();\n\n expect(result.isLeft()).toBe(true);\n result.mapLeft((e) => {\n expect(e).toBeInstanceOf(GetOsVersionError);\n expect(e.originalError).toBe(error.originalError);\n });\n });\n });\n});\n"],
5
+ "mappings": "aAAA,IAAAA,EAMO,2CAEPC,EAAgD,6DAChDC,EAAkC,yEAClCC,EAA6B,oEAE7B,SAAS,eAAgB,IAAM,CAC7B,MAAMC,KAAU,mCAAgC,EAC1C,CAAE,YAAaC,CAAgB,EAAID,EAEzC,WAAW,IAAM,CACf,GAAG,cAAc,CACnB,CAAC,EAED,SAAS,UAAW,IAAM,CACxB,GAAG,wCAAyC,SAAY,CACtD,MAAME,EAAY,CAChB,aAAc,GACd,MAAO,GACP,SAAU,UACV,WAAY,UACZ,YAAa,OACb,UAAW,QACX,QAAS,IAAI,WAAW,CAAC,IAAM,EAAM,EAAM,CAAI,CAAC,EAChD,eAAgB,OAChB,qBAAsB,OACtB,UAAW,KACX,OAAQ,EACR,aAAc,OACd,mBAAoB,CAClB,eAAgB,GAChB,mBAAoB,GACpB,oBAAqB,GACrB,mCAAoC,GACpC,0BAA2B,GAC3B,YAAa,GACb,gBAAiB,GACjB,iBAAkB,GAClB,iCAAkC,GAClC,iCAAkC,GAClC,cAAe,gBAAc,WAC7B,iBAAkB,EAClB,gBAAiB,kBAAgB,OACnC,CACF,EACAD,EAAgB,yBACd,wBAAqB,CAAE,KAAMC,CAAU,CAAC,CAC1C,EAEA,MAAMC,EAAS,QAAM,gBAAaH,CAAO,EAAE,EAE3C,OAAOG,EAAO,QAAQ,CAAC,EAAE,KAAK,EAAI,EAClC,OAAOA,EAAO,QAAQ,CAAC,EAAE,QAAQD,CAAS,CAC5C,CAAC,CACH,CAAC,EAED,SAAS,QAAS,IAAM,CACtB,GAAG,kCAAmC,SAAY,CAChD,MAAME,EAAQ,IAAI,qBAAmB,CACnC,UAAW,OACX,GAAG,gBAAc,MAAM,CACzB,CAAC,EACDH,EAAgB,yBAAsB,wBAAqB,CAAE,MAAAG,CAAM,CAAC,CAAC,EAErE,MAAMD,EAAS,QAAM,gBAAaH,CAAO,EAAE,EAE3C,OAAOG,EAAO,OAAO,CAAC,EAAE,KAAK,EAAI,EACjCA,EAAO,QAASE,GAAM,CACpB,OAAOA,CAAC,EAAE,eAAe,mBAAiB,EAC1C,OAAOA,EAAE,aAAa,EAAE,KAAKD,EAAM,aAAa,CAClD,CAAC,CACH,CAAC,CACH,CAAC,CACH,CAAC",
6
6
  "names": ["import_device_management_kit", "import_makeInternalApi", "import_OsUpdateDeviceActionErrors", "import_GetOsVersion", "apiMock", "sendCommandMock", "osVersion", "result", "error", "e"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var c=Object.defineProperty;var M=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var S=Object.prototype.hasOwnProperty;var f=(o,r)=>{for(var e in r)c(o,e,{get:r[e],enumerable:!0})},D=(o,r,e,a)=>{if(r&&typeof r=="object"||typeof r=="function")for(let i of m(r))!S.call(o,i)&&i!==e&&c(o,i,{get:()=>r[i],enumerable:!(a=M(r,i))||a.enumerable});return o};var I=o=>D(c({},"__esModule",{value:!0}),o);var A={};f(A,{FlashMcuDeviceAction:()=>g});module.exports=I(A);var n=require("@ledgerhq/device-management-kit"),l=require("purify-ts"),t=require("xstate"),p=require("../../../../device-action/OsUpdate/Shared/Substeps/GetOsVersion"),d=require("./Substeps/FlashMcu"),h=require("./Substeps/ResolveMcuVersion"),v=require("./FlashMcuDeviceActionErrors"),s=require("./types");const u=10,F=2e3;class g extends n.XStateDeviceAction{makeStateMachine(r){return(0,t.setup)({types:{input:{},output:{},context:{}},actors:{getDeviceInfo:(0,t.fromPromise)((0,p.getOsVersion)(r)),resolveMcuVersion:(0,t.fromPromise)((0,h.resolveMcuVersion)(r)),flashMcu:(0,t.fromObservable)((0,d.flashMcu)(r))},delays:{bootloaderPollInterval:F},guards:{isDeviceInBootloaderMode:({context:e})=>e._internalState.deviceInfo?.isBootloader===!0,hasReachedMaxAttempts:({context:e})=>e._internalState.bootloaderPollAttempts>=u,hasError:({context:e})=>e._internalState.error!==null},actions:{assignErrorFromEvent:(0,t.assign)({_internalState:e=>({...e.context._internalState,error:e.event.error})})}}).createMachine({id:"FlashMcuDeviceAction",initial:"GetDeviceInfo",context:({input:e})=>({input:{finalFirmware:e.finalFirmware},intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:s.FlashMcuSteps.Idle},_internalState:{error:null,deviceInfo:null,version:null,bootloaderPollAttempts:0}}),states:{GetDeviceInfo:{entry:(0,t.assign)({intermediateValue:e=>({...e.context.intermediateValue,step:s.FlashMcuSteps.GetDeviceInfo}),_internalState:e=>({...e.context._internalState,bootloaderPollAttempts:e.context._internalState.bootloaderPollAttempts+1})}),invoke:{src:"getDeviceInfo",onDone:{actions:(0,t.assign)({_internalState:e=>e.event.output.caseOf({Left:a=>({...e.context._internalState,error:a}),Right:a=>({...e.context._internalState,deviceInfo:a})})}),target:"CheckGetDeviceInfo"},onError:{actions:"assignErrorFromEvent",target:"Error"}}},CheckGetDeviceInfo:{always:[{guard:"hasError",target:"Error"},{guard:"isDeviceInBootloaderMode",target:"ResolveMcuVersion"},{guard:"hasReachedMaxAttempts",actions:(0,t.assign)({_internalState:e=>({...e.context._internalState,error:new v.BootloaderModeTimeoutError(`Device did not enter bootloader mode after ${u} attempts`)})}),target:"Error"},{target:"WaitForBootloaderMode"}]},WaitForBootloaderMode:{after:{bootloaderPollInterval:{target:"GetDeviceInfo"}}},ResolveMcuVersion:{entry:(0,t.assign)({intermediateValue:e=>({...e.context.intermediateValue,step:s.FlashMcuSteps.ResolveMcuVersion})}),invoke:{src:"resolveMcuVersion",input:({context:e})=>({deviceInfo:e._internalState.deviceInfo,finalFirmware:e.input.finalFirmware}),onDone:{actions:(0,t.assign)({_internalState:e=>e.event.output.caseOf({Left:a=>({...e.context._internalState,error:a}),Right:a=>({...e.context._internalState,version:a})})}),target:"CheckResolveMcuVersion"},onError:{actions:"assignErrorFromEvent",target:"Error"}}},CheckResolveMcuVersion:{always:[{guard:"hasError",target:"Error"},{target:"FlashMcuOrBootloader"}]},FlashMcuOrBootloader:{entry:(0,t.assign)({intermediateValue:e=>({...e.context.intermediateValue,step:s.FlashMcuSteps.FlashMcuOrBootloader})}),invoke:{src:"flashMcu",input:({context:e})=>({deviceInfo:e._internalState.deviceInfo,version:e._internalState.version}),onSnapshot:{actions:(0,t.assign)({intermediateValue:e=>e.event.snapshot.context?.type===n.SecureChannelEventType.Progress?{...e.context.intermediateValue,progress:e.event.snapshot.context.payload.progress}:{...e.context.intermediateValue},_internalState:e=>e.event.snapshot.context?.type===n.SecureChannelEventType.Error?{...e.context._internalState,error:e.event.snapshot.context.error.mapFlashMcuDAErrors()}:e.context._internalState})},onDone:{target:"CheckFlashMcu"},onError:{actions:"assignErrorFromEvent",target:"Error"}}},CheckFlashMcu:{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)(void 0)})}}0&&(module.exports={FlashMcuDeviceAction});
1
+ "use strict";var c=Object.defineProperty;var M=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var S=Object.prototype.hasOwnProperty;var D=(o,r)=>{for(var e in r)c(o,e,{get:r[e],enumerable:!0})},f=(o,r,e,a)=>{if(r&&typeof r=="object"||typeof r=="function")for(let i of m(r))!S.call(o,i)&&i!==e&&c(o,i,{get:()=>r[i],enumerable:!(a=M(r,i))||a.enumerable});return o};var I=o=>f(c({},"__esModule",{value:!0}),o);var E={};D(E,{FlashMcuDeviceAction:()=>A});module.exports=I(E);var n=require("@ledgerhq/device-management-kit"),l=require("purify-ts"),t=require("xstate"),d=require("../../../../device-action/OsUpdate/Shared/Substeps/GetOsVersion"),p=require("./Substeps/FlashMcu"),h=require("./Substeps/ResolveMcuVersion"),v=require("./FlashMcuDeviceActionErrors"),s=require("./types");const u=10,g=2e3;class A extends n.XStateDeviceAction{makeStateMachine(r){return(0,t.setup)({types:{input:{},output:{},context:{}},actors:{getDeviceInfo:(0,t.fromPromise)((0,d.getOsVersion)(r)),resolveMcuVersion:(0,t.fromPromise)((0,h.resolveMcuVersion)(r)),flashMcu:(0,t.fromObservable)((0,p.flashMcu)(r))},delays:{bootloaderPollInterval:g},guards:{isDeviceInBootloaderMode:({context:e})=>e._internalState.deviceInfo?.isBootloader===!0,hasReachedMaxAttempts:({context:e})=>e._internalState.bootloaderPollAttempts>=u,hasError:({context:e})=>e._internalState.error!==null},actions:{assignErrorFromEvent:(0,t.assign)({_internalState:e=>({...e.context._internalState,error:e.event.error})})}}).createMachine({id:"FlashMcuDeviceAction",initial:"GetDeviceInfo",context:({input:e})=>({input:e,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:s.FlashMcuSteps.Idle},_internalState:{error:null,deviceInfo:null,version:null,bootloaderPollAttempts:0}}),states:{GetDeviceInfo:{entry:(0,t.assign)({intermediateValue:e=>({...e.context.intermediateValue,step:s.FlashMcuSteps.GetDeviceInfo}),_internalState:e=>({...e.context._internalState,bootloaderPollAttempts:e.context._internalState.bootloaderPollAttempts+1})}),invoke:{src:"getDeviceInfo",onDone:{actions:(0,t.assign)({_internalState:e=>e.event.output.caseOf({Left:a=>({...e.context._internalState,error:a}),Right:a=>({...e.context._internalState,deviceInfo:a})})}),target:"CheckGetDeviceInfo"},onError:{actions:"assignErrorFromEvent",target:"Error"}}},CheckGetDeviceInfo:{always:[{guard:"hasError",target:"Error"},{guard:"isDeviceInBootloaderMode",target:"ResolveMcuVersion"},{guard:"hasReachedMaxAttempts",actions:(0,t.assign)({_internalState:e=>({...e.context._internalState,error:new v.BootloaderModeTimeoutError(`Device did not enter bootloader mode after ${u} attempts`)})}),target:"Error"},{target:"WaitForBootloaderMode"}]},WaitForBootloaderMode:{after:{bootloaderPollInterval:{target:"GetDeviceInfo"}}},ResolveMcuVersion:{entry:(0,t.assign)({intermediateValue:e=>({...e.context.intermediateValue,step:s.FlashMcuSteps.ResolveMcuVersion})}),invoke:{src:"resolveMcuVersion",input:({context:e})=>({...e.input,deviceInfo:e._internalState.deviceInfo}),onDone:{actions:(0,t.assign)({_internalState:e=>e.event.output.caseOf({Left:a=>({...e.context._internalState,error:a}),Right:a=>({...e.context._internalState,version:a})})}),target:"CheckResolveMcuVersion"},onError:{actions:"assignErrorFromEvent",target:"Error"}}},CheckResolveMcuVersion:{always:[{guard:"hasError",target:"Error"},{target:"FlashMcuOrBootloader"}]},FlashMcuOrBootloader:{entry:(0,t.assign)({intermediateValue:e=>({...e.context.intermediateValue,step:s.FlashMcuSteps.FlashMcuOrBootloader})}),invoke:{src:"flashMcu",input:({context:e})=>({deviceInfo:e._internalState.deviceInfo,version:e._internalState.version}),onSnapshot:{actions:(0,t.assign)({intermediateValue:e=>e.event.snapshot.context?.type===n.SecureChannelEventType.Progress?{...e.context.intermediateValue,progress:e.event.snapshot.context.payload.progress}:{...e.context.intermediateValue},_internalState:e=>e.event.snapshot.context?.type===n.SecureChannelEventType.Error?{...e.context._internalState,error:e.event.snapshot.context.error.mapFlashMcuDAErrors()}:e.context._internalState})},onDone:{target:"CheckFlashMcu"},onError:{actions:"assignErrorFromEvent",target:"Error"}}},CheckFlashMcu:{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)(void 0)})}}0&&(module.exports={FlashMcuDeviceAction});
2
2
  //# sourceMappingURL=FlashMcuDeviceAction.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../src/api/device-action/OsUpdate/Update/FlashMcu/FlashMcuDeviceAction.ts"],
4
- "sourcesContent": ["import {\n type DeviceActionStateMachine,\n type InternalApi,\n SecureChannelEventType,\n type StateMachineTypes,\n UserInteractionRequired,\n XStateDeviceAction,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { assign, fromObservable, fromPromise, setup } from \"xstate\";\n\nimport { getOsVersion } from \"@api/device-action/OsUpdate/Shared/Substeps/GetOsVersion\";\n\nimport { flashMcu } from \"./Substeps/FlashMcu\";\nimport { resolveMcuVersion } from \"./Substeps/ResolveMcuVersion\";\nimport { BootloaderModeTimeoutError } from \"./FlashMcuDeviceActionErrors\";\nimport {\n type FlashMcuDAError,\n type FlashMcuDAInput,\n type FlashMcuDAIntermediateValue,\n type FlashMcuDAInternalState,\n FlashMcuSteps,\n} from \"./types\";\n\n/*\n * The device reboots into the bootloader on its own, so it can still answer as\n * the running OS for a short while. Poll a bounded number of times rather than\n * assuming it presents as a bootloader straight away.\n */\nconst MAX_BOOTLOADER_POLL_ATTEMPTS = 10;\nconst BOOTLOADER_POLL_INTERVAL_MS = 2000;\n\nexport class FlashMcuDeviceAction extends XStateDeviceAction<\n void,\n FlashMcuDAInput,\n FlashMcuDAError,\n FlashMcuDAIntermediateValue,\n FlashMcuDAInternalState\n> {\n protected override makeStateMachine(\n internalApi: InternalApi,\n ): DeviceActionStateMachine<\n void,\n FlashMcuDAInput,\n FlashMcuDAError,\n FlashMcuDAIntermediateValue,\n FlashMcuDAInternalState\n > {\n type types = StateMachineTypes<\n void,\n FlashMcuDAInput,\n FlashMcuDAError,\n FlashMcuDAIntermediateValue,\n FlashMcuDAInternalState\n >;\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 getDeviceInfo: fromPromise(getOsVersion(internalApi)),\n resolveMcuVersion: fromPromise(resolveMcuVersion(internalApi)),\n flashMcu: fromObservable(flashMcu(internalApi)),\n },\n delays: {\n bootloaderPollInterval: BOOTLOADER_POLL_INTERVAL_MS,\n },\n guards: {\n isDeviceInBootloaderMode: ({ context }) =>\n context._internalState.deviceInfo?.isBootloader === true,\n hasReachedMaxAttempts: ({ context }) =>\n context._internalState.bootloaderPollAttempts >=\n MAX_BOOTLOADER_POLL_ATTEMPTS,\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: \"FlashMcuDeviceAction\",\n initial: \"GetDeviceInfo\",\n context: ({ input }) => ({\n input: {\n finalFirmware: input.finalFirmware,\n },\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: FlashMcuSteps.Idle,\n },\n _internalState: {\n error: null,\n deviceInfo: null,\n version: null,\n bootloaderPollAttempts: 0,\n },\n }),\n states: {\n GetDeviceInfo: {\n entry: assign({\n intermediateValue: (_) => ({\n ..._.context.intermediateValue,\n step: FlashMcuSteps.GetDeviceInfo,\n }),\n _internalState: (_) => ({\n ..._.context._internalState,\n bootloaderPollAttempts:\n _.context._internalState.bootloaderPollAttempts + 1,\n }),\n }),\n invoke: {\n src: \"getDeviceInfo\",\n onDone: {\n actions: assign({\n _internalState: (_) =>\n _.event.output.caseOf<FlashMcuDAInternalState>({\n Left: (error) => ({\n ..._.context._internalState,\n error,\n }),\n Right: (getOsVersionResponse) => ({\n ..._.context._internalState,\n deviceInfo: getOsVersionResponse,\n }),\n }),\n }),\n target: \"CheckGetDeviceInfo\",\n },\n onError: {\n actions: \"assignErrorFromEvent\",\n target: \"Error\",\n },\n },\n },\n CheckGetDeviceInfo: {\n always: [\n {\n guard: \"hasError\",\n target: \"Error\",\n },\n {\n guard: \"isDeviceInBootloaderMode\",\n target: \"ResolveMcuVersion\",\n },\n {\n guard: \"hasReachedMaxAttempts\",\n actions: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: new BootloaderModeTimeoutError(\n `Device did not enter bootloader mode after ${MAX_BOOTLOADER_POLL_ATTEMPTS} attempts`,\n ),\n }),\n }),\n target: \"Error\",\n },\n {\n target: \"WaitForBootloaderMode\",\n },\n ],\n },\n WaitForBootloaderMode: {\n after: {\n bootloaderPollInterval: {\n target: \"GetDeviceInfo\",\n },\n },\n },\n ResolveMcuVersion: {\n entry: assign({\n intermediateValue: (_) => ({\n ..._.context.intermediateValue,\n step: FlashMcuSteps.ResolveMcuVersion,\n }),\n }),\n invoke: {\n src: \"resolveMcuVersion\",\n input: ({ context }) => ({\n deviceInfo: context._internalState.deviceInfo!,\n finalFirmware: context.input.finalFirmware,\n }),\n onDone: {\n actions: assign({\n _internalState: (_) =>\n _.event.output.caseOf<FlashMcuDAInternalState>({\n Left: (error) => ({\n ..._.context._internalState,\n error,\n }),\n Right: (version) => ({\n ..._.context._internalState,\n version,\n }),\n }),\n }),\n target: \"CheckResolveMcuVersion\",\n },\n onError: {\n actions: \"assignErrorFromEvent\",\n target: \"Error\",\n },\n },\n },\n CheckResolveMcuVersion: {\n always: [\n {\n guard: \"hasError\",\n target: \"Error\",\n },\n {\n target: \"FlashMcuOrBootloader\",\n },\n ],\n },\n FlashMcuOrBootloader: {\n entry: assign({\n intermediateValue: (_) => ({\n ..._.context.intermediateValue,\n step: FlashMcuSteps.FlashMcuOrBootloader,\n }),\n }),\n invoke: {\n src: \"flashMcu\",\n input: ({ context }) => ({\n deviceInfo: context._internalState.deviceInfo!,\n version: context._internalState.version!,\n }),\n onSnapshot: {\n actions: assign({\n // Flashing the MCU needs no device confirmation, so the bulk\n // exchange only reports progress here.\n intermediateValue: (_) =>\n _.event.snapshot.context?.type ===\n SecureChannelEventType.Progress\n ? {\n ..._.context.intermediateValue,\n progress: _.event.snapshot.context.payload.progress,\n }\n : { ..._.context.intermediateValue },\n _internalState: (_) => {\n if (\n _.event.snapshot.context?.type ===\n SecureChannelEventType.Error\n ) {\n return {\n ..._.context._internalState,\n error:\n _.event.snapshot.context.error.mapFlashMcuDAErrors(),\n };\n }\n return _.context._internalState;\n },\n }),\n },\n onDone: {\n target: \"CheckFlashMcu\",\n },\n onError: {\n actions: \"assignErrorFromEvent\",\n target: \"Error\",\n },\n },\n },\n CheckFlashMcu: {\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 context._internalState.error !== null\n ? Left(context._internalState.error)\n : Right(undefined),\n });\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {\n type DeviceActionStateMachine,\n type InternalApi,\n SecureChannelEventType,\n type StateMachineTypes,\n UserInteractionRequired,\n XStateDeviceAction,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { assign, fromObservable, fromPromise, setup } from \"xstate\";\n\nimport { getOsVersion } from \"@api/device-action/OsUpdate/Shared/Substeps/GetOsVersion\";\n\nimport { flashMcu } from \"./Substeps/FlashMcu\";\nimport { resolveMcuVersion } from \"./Substeps/ResolveMcuVersion\";\nimport { BootloaderModeTimeoutError } from \"./FlashMcuDeviceActionErrors\";\nimport {\n type FlashMcuDAError,\n type FlashMcuDAInput,\n type FlashMcuDAIntermediateValue,\n type FlashMcuDAInternalState,\n FlashMcuSteps,\n} from \"./types\";\n\n/*\n * The device reboots into the bootloader on its own, so it can still answer as\n * the running OS for a short while. Poll a bounded number of times rather than\n * assuming it presents as a bootloader straight away.\n */\nconst MAX_BOOTLOADER_POLL_ATTEMPTS = 10;\nconst BOOTLOADER_POLL_INTERVAL_MS = 2000;\n\nexport class FlashMcuDeviceAction extends XStateDeviceAction<\n void,\n FlashMcuDAInput,\n FlashMcuDAError,\n FlashMcuDAIntermediateValue,\n FlashMcuDAInternalState\n> {\n protected override makeStateMachine(\n internalApi: InternalApi,\n ): DeviceActionStateMachine<\n void,\n FlashMcuDAInput,\n FlashMcuDAError,\n FlashMcuDAIntermediateValue,\n FlashMcuDAInternalState\n > {\n type types = StateMachineTypes<\n void,\n FlashMcuDAInput,\n FlashMcuDAError,\n FlashMcuDAIntermediateValue,\n FlashMcuDAInternalState\n >;\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 getDeviceInfo: fromPromise(getOsVersion(internalApi)),\n resolveMcuVersion: fromPromise(resolveMcuVersion(internalApi)),\n flashMcu: fromObservable(flashMcu(internalApi)),\n },\n delays: {\n bootloaderPollInterval: BOOTLOADER_POLL_INTERVAL_MS,\n },\n guards: {\n isDeviceInBootloaderMode: ({ context }) =>\n context._internalState.deviceInfo?.isBootloader === true,\n hasReachedMaxAttempts: ({ context }) =>\n context._internalState.bootloaderPollAttempts >=\n MAX_BOOTLOADER_POLL_ATTEMPTS,\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: \"FlashMcuDeviceAction\",\n initial: \"GetDeviceInfo\",\n context: ({ input }) => ({\n input,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: FlashMcuSteps.Idle,\n },\n _internalState: {\n error: null,\n deviceInfo: null,\n version: null,\n bootloaderPollAttempts: 0,\n },\n }),\n states: {\n GetDeviceInfo: {\n entry: assign({\n intermediateValue: (_) => ({\n ..._.context.intermediateValue,\n step: FlashMcuSteps.GetDeviceInfo,\n }),\n _internalState: (_) => ({\n ..._.context._internalState,\n bootloaderPollAttempts:\n _.context._internalState.bootloaderPollAttempts + 1,\n }),\n }),\n invoke: {\n src: \"getDeviceInfo\",\n onDone: {\n actions: assign({\n _internalState: (_) =>\n _.event.output.caseOf<FlashMcuDAInternalState>({\n Left: (error) => ({\n ..._.context._internalState,\n error,\n }),\n Right: (getOsVersionResponse) => ({\n ..._.context._internalState,\n deviceInfo: getOsVersionResponse,\n }),\n }),\n }),\n target: \"CheckGetDeviceInfo\",\n },\n onError: {\n actions: \"assignErrorFromEvent\",\n target: \"Error\",\n },\n },\n },\n CheckGetDeviceInfo: {\n always: [\n {\n guard: \"hasError\",\n target: \"Error\",\n },\n {\n guard: \"isDeviceInBootloaderMode\",\n target: \"ResolveMcuVersion\",\n },\n {\n guard: \"hasReachedMaxAttempts\",\n actions: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: new BootloaderModeTimeoutError(\n `Device did not enter bootloader mode after ${MAX_BOOTLOADER_POLL_ATTEMPTS} attempts`,\n ),\n }),\n }),\n target: \"Error\",\n },\n {\n target: \"WaitForBootloaderMode\",\n },\n ],\n },\n WaitForBootloaderMode: {\n after: {\n bootloaderPollInterval: {\n target: \"GetDeviceInfo\",\n },\n },\n },\n ResolveMcuVersion: {\n entry: assign({\n intermediateValue: (_) => ({\n ..._.context.intermediateValue,\n step: FlashMcuSteps.ResolveMcuVersion,\n }),\n }),\n invoke: {\n src: \"resolveMcuVersion\",\n input: ({ context }) => ({\n ...context.input,\n deviceInfo: context._internalState.deviceInfo!,\n }),\n onDone: {\n actions: assign({\n _internalState: (_) =>\n _.event.output.caseOf<FlashMcuDAInternalState>({\n Left: (error) => ({\n ..._.context._internalState,\n error,\n }),\n Right: (version) => ({\n ..._.context._internalState,\n version,\n }),\n }),\n }),\n target: \"CheckResolveMcuVersion\",\n },\n onError: {\n actions: \"assignErrorFromEvent\",\n target: \"Error\",\n },\n },\n },\n CheckResolveMcuVersion: {\n always: [\n {\n guard: \"hasError\",\n target: \"Error\",\n },\n {\n target: \"FlashMcuOrBootloader\",\n },\n ],\n },\n FlashMcuOrBootloader: {\n entry: assign({\n intermediateValue: (_) => ({\n ..._.context.intermediateValue,\n step: FlashMcuSteps.FlashMcuOrBootloader,\n }),\n }),\n invoke: {\n src: \"flashMcu\",\n input: ({ context }) => ({\n deviceInfo: context._internalState.deviceInfo!,\n version: context._internalState.version!,\n }),\n onSnapshot: {\n actions: assign({\n // Flashing the MCU needs no device confirmation, so the bulk\n // exchange only reports progress here.\n intermediateValue: (_) =>\n _.event.snapshot.context?.type ===\n SecureChannelEventType.Progress\n ? {\n ..._.context.intermediateValue,\n progress: _.event.snapshot.context.payload.progress,\n }\n : { ..._.context.intermediateValue },\n _internalState: (_) => {\n if (\n _.event.snapshot.context?.type ===\n SecureChannelEventType.Error\n ) {\n return {\n ..._.context._internalState,\n error:\n _.event.snapshot.context.error.mapFlashMcuDAErrors(),\n };\n }\n return _.context._internalState;\n },\n }),\n },\n onDone: {\n target: \"CheckFlashMcu\",\n },\n onError: {\n actions: \"assignErrorFromEvent\",\n target: \"Error\",\n },\n },\n },\n CheckFlashMcu: {\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 context._internalState.error !== null\n ? Left(context._internalState.error)\n : Right(undefined),\n });\n }\n}\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,0BAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAOO,2CACPC,EAA4B,qBAC5BC,EAA2D,kBAE3DC,EAA6B,oEAE7BC,EAAyB,+BACzBC,EAAkC,wCAClCC,EAA2C,wCAC3CC,EAMO,mBAOP,MAAMC,EAA+B,GAC/BC,EAA8B,IAE7B,MAAMX,UAA6B,oBAMxC,CACmB,iBACjBY,EAOA,CASA,SAAO,SAAM,CACX,MAAO,CACL,MAAO,CAAC,EACR,OAAQ,CAAC,EACT,QAAS,CAAC,CACZ,EACA,OAAQ,CACN,iBAAe,kBAAY,gBAAaA,CAAW,CAAC,EACpD,qBAAmB,kBAAY,qBAAkBA,CAAW,CAAC,EAC7D,YAAU,qBAAe,YAASA,CAAW,CAAC,CAChD,EACA,OAAQ,CACN,uBAAwBD,CAC1B,EACA,OAAQ,CACN,yBAA0B,CAAC,CAAE,QAAAE,CAAQ,IACnCA,EAAQ,eAAe,YAAY,eAAiB,GACtD,sBAAuB,CAAC,CAAE,QAAAA,CAAQ,IAChCA,EAAQ,eAAe,wBACvBH,EACF,SAAU,CAAC,CAAE,QAAAG,CAAQ,IAAMA,EAAQ,eAAe,QAAU,IAC9D,EACA,QAAS,CACP,wBAAsB,UAAO,CAC3B,eAAiBC,IAAO,CACtB,GAAGA,EAAE,QAAQ,eACb,MAAOA,EAAE,MAAM,KACjB,EACF,CAAC,CACH,CACF,CAAC,EAAE,cAAc,CACf,GAAI,uBACJ,QAAS,gBACT,QAAS,CAAC,CAAE,MAAAC,CAAM,KAAO,CACvB,MAAAA,EACA,kBAAmB,CACjB,wBAAyB,0BAAwB,KACjD,KAAM,gBAAc,IACtB,EACA,eAAgB,CACd,MAAO,KACP,WAAY,KACZ,QAAS,KACT,uBAAwB,CAC1B,CACF,GACA,OAAQ,CACN,cAAe,CACb,SAAO,UAAO,CACZ,kBAAoBD,IAAO,CACzB,GAAGA,EAAE,QAAQ,kBACb,KAAM,gBAAc,aACtB,GACA,eAAiBA,IAAO,CACtB,GAAGA,EAAE,QAAQ,eACb,uBACEA,EAAE,QAAQ,eAAe,uBAAyB,CACtD,EACF,CAAC,EACD,OAAQ,CACN,IAAK,gBACL,OAAQ,CACN,WAAS,UAAO,CACd,eAAiBA,GACfA,EAAE,MAAM,OAAO,OAAgC,CAC7C,KAAOE,IAAW,CAChB,GAAGF,EAAE,QAAQ,eACb,MAAAE,CACF,GACA,MAAQC,IAA0B,CAChC,GAAGH,EAAE,QAAQ,eACb,WAAYG,CACd,EACF,CAAC,CACL,CAAC,EACD,OAAQ,oBACV,EACA,QAAS,CACP,QAAS,uBACT,OAAQ,OACV,CACF,CACF,EACA,mBAAoB,CAClB,OAAQ,CACN,CACE,MAAO,WACP,OAAQ,OACV,EACA,CACE,MAAO,2BACP,OAAQ,mBACV,EACA,CACE,MAAO,wBACP,WAAS,UAAO,CACd,eAAiBH,IAAO,CACtB,GAAGA,EAAE,QAAQ,eACb,MAAO,IAAI,6BACT,8CAA8CJ,CAA4B,WAC5E,CACF,EACF,CAAC,EACD,OAAQ,OACV,EACA,CACE,OAAQ,uBACV,CACF,CACF,EACA,sBAAuB,CACrB,MAAO,CACL,uBAAwB,CACtB,OAAQ,eACV,CACF,CACF,EACA,kBAAmB,CACjB,SAAO,UAAO,CACZ,kBAAoBI,IAAO,CACzB,GAAGA,EAAE,QAAQ,kBACb,KAAM,gBAAc,iBACtB,EACF,CAAC,EACD,OAAQ,CACN,IAAK,oBACL,MAAO,CAAC,CAAE,QAAAD,CAAQ,KAAO,CACvB,GAAGA,EAAQ,MACX,WAAYA,EAAQ,eAAe,UACrC,GACA,OAAQ,CACN,WAAS,UAAO,CACd,eAAiBC,GACfA,EAAE,MAAM,OAAO,OAAgC,CAC7C,KAAOE,IAAW,CAChB,GAAGF,EAAE,QAAQ,eACb,MAAAE,CACF,GACA,MAAQE,IAAa,CACnB,GAAGJ,EAAE,QAAQ,eACb,QAAAI,CACF,EACF,CAAC,CACL,CAAC,EACD,OAAQ,wBACV,EACA,QAAS,CACP,QAAS,uBACT,OAAQ,OACV,CACF,CACF,EACA,uBAAwB,CACtB,OAAQ,CACN,CACE,MAAO,WACP,OAAQ,OACV,EACA,CACE,OAAQ,sBACV,CACF,CACF,EACA,qBAAsB,CACpB,SAAO,UAAO,CACZ,kBAAoBJ,IAAO,CACzB,GAAGA,EAAE,QAAQ,kBACb,KAAM,gBAAc,oBACtB,EACF,CAAC,EACD,OAAQ,CACN,IAAK,WACL,MAAO,CAAC,CAAE,QAAAD,CAAQ,KAAO,CACvB,WAAYA,EAAQ,eAAe,WACnC,QAASA,EAAQ,eAAe,OAClC,GACA,WAAY,CACV,WAAS,UAAO,CAGd,kBAAoBC,GAClBA,EAAE,MAAM,SAAS,SAAS,OAC1B,yBAAuB,SACnB,CACE,GAAGA,EAAE,QAAQ,kBACb,SAAUA,EAAE,MAAM,SAAS,QAAQ,QAAQ,QAC7C,EACA,CAAE,GAAGA,EAAE,QAAQ,iBAAkB,EACvC,eAAiBA,GAEbA,EAAE,MAAM,SAAS,SAAS,OAC1B,yBAAuB,MAEhB,CACL,GAAGA,EAAE,QAAQ,eACb,MACEA,EAAE,MAAM,SAAS,QAAQ,MAAM,oBAAoB,CACvD,EAEKA,EAAE,QAAQ,cAErB,CAAC,CACH,EACA,OAAQ,CACN,OAAQ,eACV,EACA,QAAS,CACP,QAAS,uBACT,OAAQ,OACV,CACF,CACF,EACA,cAAe,CACb,OAAQ,CACN,CACE,MAAO,WACP,OAAQ,OACV,EACA,CACE,OAAQ,SACV,CACF,CACF,EACA,QAAS,CACP,KAAM,OACR,EACA,MAAO,CACL,KAAM,OACR,CACF,EACA,OAAQ,CAAC,CAAE,QAAAD,CAAQ,IACjBA,EAAQ,eAAe,QAAU,QAC7B,QAAKA,EAAQ,eAAe,KAAK,KACjC,SAAM,MAAS,CACvB,CAAC,CACH,CACF",
6
6
  "names": ["FlashMcuDeviceAction_exports", "__export", "FlashMcuDeviceAction", "__toCommonJS", "import_device_management_kit", "import_purify_ts", "import_xstate", "import_GetOsVersion", "import_FlashMcu", "import_ResolveMcuVersion", "import_FlashMcuDeviceActionErrors", "import_types", "MAX_BOOTLOADER_POLL_ATTEMPTS", "BOOTLOADER_POLL_INTERVAL_MS", "internalApi", "context", "_", "input", "error", "getOsVersionResponse", "version"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var n=require("@ledgerhq/device-management-kit"),c=require("purify-ts"),m=require("rxjs"),l=require("../../../../device-action/__test-utils__/makeInternalApi"),u=require("../../../../device-action/__test-utils__/testDeviceActionStates"),D=require("../../../../device-action/OsUpdate/Shared/OsUpdateDeviceActionErrors"),V=require("../../../../device-action/OsUpdate/Shared/Substeps/GetOsVersion"),E=require("../../../../device-action/OsUpdate/Update/FlashMcu/FlashMcuDeviceAction"),S=require("../../../../device-action/OsUpdate/Update/FlashMcu/FlashMcuDeviceActionErrors"),g=require("../../../../device-action/OsUpdate/Update/FlashMcu/Substeps/FlashMcu"),A=require("../../../../device-action/OsUpdate/Update/FlashMcu/Substeps/ResolveMcuVersion"),e=require("../../../../device-action/OsUpdate/Update/FlashMcu/types");vi.mock("@api/device-action/OsUpdate/Shared/Substeps/GetOsVersion");vi.mock("@api/device-action/OsUpdate/Update/FlashMcu/Substeps/ResolveMcuVersion");vi.mock("@api/device-action/OsUpdate/Update/FlashMcu/Substeps/FlashMcu");const o=(a,M={})=>({status:n.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:a,...M}}),w=()=>({status:n.DeviceActionStatus.Completed,output:void 0}),f=a=>({status:n.DeviceActionStatus.Error,error:a}),y=a=>Array.from({length:a*2-1},()=>o(e.FlashMcuSteps.GetDeviceInfo));describe("FlashMcuDeviceAction",()=>{const a={isBootloader:!0,isOsu:!1,targetId:16777217,seTargetId:857735172,mcuTargetId:16777217,seVersion:"1.3.0",seFlags:new Uint8Array([230,0,0,0]),mcuSephVersion:"",mcuBootloaderVersion:"1.16",hwVersion:"00",langId:0,recoverState:void 0,secureElementFlags:{isPinValidated:!0,hasMcuSerialNumber:!0,hasValidCertificate:!0,isCustomAuthorityConnectionAllowed:!1,isSecureConnectionAllowed:!1,isOnboarded:!0,isMcuCodeSigned:!0,isInRecoveryMode:!1}},M={id:300,version:"1.4.0",perso:"perso",firmware:"final",firmwareKey:"final-key",hash:"final-hash",bytes:123,mcuVersions:[1]};beforeEach(()=>{vi.resetAllMocks()});const p=(r=(0,c.Right)(a))=>vi.mocked(V.getOsVersion).mockReturnValue(()=>Promise.resolve(r)),O=r=>{const t=[...r];vi.mocked(V.getOsVersion).mockReturnValue(()=>Promise.resolve(t.shift()??(0,c.Right)(a)))},h=(r=(0,c.Right)("1.12"))=>{const t=vi.fn().mockResolvedValue(r);return vi.mocked(A.resolveMcuVersion).mockReturnValue(t),t},v=(r=(0,m.of)())=>{const t=vi.fn().mockReturnValue(r);return vi.mocked(g.flashMcu).mockReturnValue(t),t},d=()=>new E.FlashMcuDeviceAction({input:{finalFirmware:M}});describe("Success",()=>{it("Should flash the MCU when the device is already in bootloader mode",()=>new Promise((r,t)=>{p();const s=h(),i=v(),F=[o(e.FlashMcuSteps.GetDeviceInfo),o(e.FlashMcuSteps.ResolveMcuVersion),o(e.FlashMcuSteps.FlashMcuOrBootloader),o(e.FlashMcuSteps.FlashMcuOrBootloader),w()];(0,u.testDeviceActionStates)(d(),F,(0,l.makeDeviceActionInternalApiMock)(),{onDone:()=>{expect(s).toHaveBeenCalledWith(expect.objectContaining({input:{deviceInfo:a,finalFirmware:M}})),expect(i).toHaveBeenCalledWith(expect.objectContaining({input:{deviceInfo:a,version:"1.12"}})),r()},onError:t})})),it("Should poll until the device enters bootloader mode",async()=>{vi.useFakeTimers(),O([(0,c.Right)({...a,isBootloader:!1}),(0,c.Right)({...a,isBootloader:!1}),(0,c.Right)(a)]),h(),v();const r=[...y(3),o(e.FlashMcuSteps.ResolveMcuVersion),o(e.FlashMcuSteps.FlashMcuOrBootloader),o(e.FlashMcuSteps.FlashMcuOrBootloader),w()],t=new Promise((s,i)=>{(0,u.testDeviceActionStates)(d(),r,(0,l.makeDeviceActionInternalApiMock)(),{onDone:s,onError:i})});await vi.advanceTimersByTimeAsync(2e3*3),await t,vi.useRealTimers()}),it("Should report the flash progress",()=>new Promise((r,t)=>{p(),h(),v((0,m.of)({type:n.SecureChannelEventType.Progress,payload:{progress:.5,index:0,total:2}},{type:n.SecureChannelEventType.Progress,payload:{progress:1,index:1,total:2}}));const s=[o(e.FlashMcuSteps.GetDeviceInfo),o(e.FlashMcuSteps.ResolveMcuVersion),o(e.FlashMcuSteps.FlashMcuOrBootloader),o(e.FlashMcuSteps.FlashMcuOrBootloader),o(e.FlashMcuSteps.FlashMcuOrBootloader,{progress:.5}),o(e.FlashMcuSteps.FlashMcuOrBootloader,{progress:1}),w()];(0,u.testDeviceActionStates)(d(),s,(0,l.makeDeviceActionInternalApiMock)(),{onDone:r,onError:t})}))}),describe("Error",()=>{it("Should go to Error when getOsVersion returns Left",()=>new Promise((r,t)=>{const s=new D.GetOsVersionError(new Error("command failed"));p((0,c.Left)(s));const i=[o(e.FlashMcuSteps.GetDeviceInfo),f(s)];(0,u.testDeviceActionStates)(d(),i,(0,l.makeDeviceActionInternalApiMock)(),{onDone:r,onError:t})})),it("Should go to Error when the device never enters bootloader mode",async()=>{vi.useFakeTimers(),p((0,c.Right)({...a,isBootloader:!1}));const r=[...y(10),f(new S.BootloaderModeTimeoutError("Device did not enter bootloader mode after 10 attempts"))],t=new Promise((s,i)=>{(0,u.testDeviceActionStates)(d(),r,(0,l.makeDeviceActionInternalApiMock)(),{onDone:s,onError:i})});await vi.advanceTimersByTimeAsync(2e3*11),await t,vi.useRealTimers()}),it("Should go to Error when resolveMcuVersion returns Left",()=>new Promise((r,t)=>{p();const s=new S.ResolveMcuVersionError("no compatible MCU");h((0,c.Left)(s));const i=[o(e.FlashMcuSteps.GetDeviceInfo),o(e.FlashMcuSteps.ResolveMcuVersion),f(s)];(0,u.testDeviceActionStates)(d(),i,(0,l.makeDeviceActionInternalApiMock)(),{onDone:r,onError:t})})),it("Should map a secure channel error event to a device action error",()=>new Promise((r,t)=>{p(),h(),v((0,m.of)({type:n.SecureChannelEventType.Error,error:new n.SecureChannelError("flash failed")}));const s=[o(e.FlashMcuSteps.GetDeviceInfo),o(e.FlashMcuSteps.ResolveMcuVersion),o(e.FlashMcuSteps.FlashMcuOrBootloader),o(e.FlashMcuSteps.FlashMcuOrBootloader),o(e.FlashMcuSteps.FlashMcuOrBootloader),f(new n.UnknownDAError)];(0,u.testDeviceActionStates)(d(),s,(0,l.makeDeviceActionInternalApiMock)(),{onDone:r,onError:t})})),it("Should go to Error when the secure channel connection cannot be opened",()=>new Promise((r,t)=>{p(),h();const s=new n.UnknownDAError("Invalid WebSocket connection");v(new m.Observable(F=>{F.error(s)}));const i=[o(e.FlashMcuSteps.GetDeviceInfo),o(e.FlashMcuSteps.ResolveMcuVersion),o(e.FlashMcuSteps.FlashMcuOrBootloader),o(e.FlashMcuSteps.FlashMcuOrBootloader),f(s)];(0,u.testDeviceActionStates)(d(),i,(0,l.makeDeviceActionInternalApiMock)(),{onDone:r,onError:t})}))})});
1
+ "use strict";var s=require("@ledgerhq/device-management-kit"),c=require("purify-ts"),v=require("rxjs"),l=require("../../../../device-action/__test-utils__/makeInternalApi"),u=require("../../../../device-action/__test-utils__/testDeviceActionStates"),V=require("../../../../device-action/OsUpdate/Shared/OsUpdateDeviceActionErrors"),y=require("../../../../device-action/OsUpdate/Shared/Substeps/GetOsVersion"),E=require("../../../../device-action/OsUpdate/Update/FlashMcu/FlashMcuDeviceAction"),w=require("../../../../device-action/OsUpdate/Update/FlashMcu/FlashMcuDeviceActionErrors"),g=require("../../../../device-action/OsUpdate/Update/FlashMcu/Substeps/FlashMcu"),O=require("../../../../device-action/OsUpdate/Update/FlashMcu/Substeps/ResolveMcuVersion"),e=require("../../../../device-action/OsUpdate/Update/FlashMcu/types");vi.mock("@api/device-action/OsUpdate/Shared/Substeps/GetOsVersion");vi.mock("@api/device-action/OsUpdate/Update/FlashMcu/Substeps/ResolveMcuVersion");vi.mock("@api/device-action/OsUpdate/Update/FlashMcu/Substeps/FlashMcu");const o=(a,S={})=>({status:s.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:s.UserInteractionRequired.None,step:a,...S}}),F=()=>({status:s.DeviceActionStatus.Completed,output:void 0}),M=a=>({status:s.DeviceActionStatus.Error,error:a}),D=a=>Array.from({length:a*2-1},()=>o(e.FlashMcuSteps.GetDeviceInfo));describe("FlashMcuDeviceAction",()=>{const a={isBootloader:!0,isOsu:!1,targetId:16777217,seTargetId:857735172,mcuTargetId:16777217,seVersion:"1.3.0",seFlags:new Uint8Array([230,0,0,0]),mcuSephVersion:"",mcuBootloaderVersion:"1.16",hwVersion:"00",langId:0,recoverState:void 0,secureElementFlags:{isPinValidated:!0,hasMcuSerialNumber:!0,hasValidCertificate:!0,isCustomAuthorityConnectionAllowed:!1,isSecureConnectionAllowed:!1,isOnboarded:!0,isMcuCodeSigned:!0,isInRecoveryMode:!1,hasEndorsementCertificateInSlot1:!1,hasEndorsementCertificateInSlot2:!1,numberOfWords:s.SeedWordCount.TwentyFour,currentWordIndex:0,onboardingState:s.OnboardingState.Unknown}},S={id:300,version:"1.4.0",perso:"perso",firmware:"final",firmwareKey:"final-key",hash:"final-hash",bytes:123,mcuVersions:[1]};beforeEach(()=>{vi.resetAllMocks()});const h=(t=(0,c.Right)(a))=>vi.mocked(y.getOsVersion).mockReturnValue(()=>Promise.resolve(t)),A=t=>{const r=[...t];vi.mocked(y.getOsVersion).mockReturnValue(()=>Promise.resolve(r.shift()??(0,c.Right)(a)))},p=(t=(0,c.Right)("1.12"))=>{const r=vi.fn().mockResolvedValue(t);return vi.mocked(O.resolveMcuVersion).mockReturnValue(r),r},m=(t=(0,v.of)())=>{const r=vi.fn().mockReturnValue(t);return vi.mocked(g.flashMcu).mockReturnValue(r),r},d=(t={mode:"osUpdate",finalFirmware:S})=>new E.FlashMcuDeviceAction({input:t});describe("Success",()=>{it("Should flash the MCU when the device is already in bootloader mode",()=>new Promise((t,r)=>{h();const n=p(),i=m(),f=[o(e.FlashMcuSteps.GetDeviceInfo),o(e.FlashMcuSteps.ResolveMcuVersion),o(e.FlashMcuSteps.FlashMcuOrBootloader),o(e.FlashMcuSteps.FlashMcuOrBootloader),F()];(0,u.testDeviceActionStates)(d(),f,(0,l.makeDeviceActionInternalApiMock)(),{onDone:()=>{expect(n).toHaveBeenCalledWith(expect.objectContaining({input:{mode:"osUpdate",deviceInfo:a,finalFirmware:S}})),expect(i).toHaveBeenCalledWith(expect.objectContaining({input:{deviceInfo:a,version:"1.12"}})),t()},onError:r})})),it("Should flash the MCU in bootloader recovery mode without a final firmware",()=>new Promise((t,r)=>{h();const n=p(),i=m(),f=[o(e.FlashMcuSteps.GetDeviceInfo),o(e.FlashMcuSteps.ResolveMcuVersion),o(e.FlashMcuSteps.FlashMcuOrBootloader),o(e.FlashMcuSteps.FlashMcuOrBootloader),F()];(0,u.testDeviceActionStates)(d({mode:"bootloaderRecovery"}),f,(0,l.makeDeviceActionInternalApiMock)(),{onDone:()=>{expect(n).toHaveBeenCalledWith(expect.objectContaining({input:{mode:"bootloaderRecovery",deviceInfo:a}})),expect(i).toHaveBeenCalledWith(expect.objectContaining({input:{deviceInfo:a,version:"1.12"}})),t()},onError:r})})),it("Should poll until the device enters bootloader mode",async()=>{vi.useFakeTimers(),A([(0,c.Right)({...a,isBootloader:!1}),(0,c.Right)({...a,isBootloader:!1}),(0,c.Right)(a)]),p(),m();const t=[...D(3),o(e.FlashMcuSteps.ResolveMcuVersion),o(e.FlashMcuSteps.FlashMcuOrBootloader),o(e.FlashMcuSteps.FlashMcuOrBootloader),F()],r=new Promise((n,i)=>{(0,u.testDeviceActionStates)(d(),t,(0,l.makeDeviceActionInternalApiMock)(),{onDone:n,onError:i})});await vi.advanceTimersByTimeAsync(2e3*3),await r,vi.useRealTimers()}),it("Should report the flash progress",()=>new Promise((t,r)=>{h(),p(),m((0,v.of)({type:s.SecureChannelEventType.Progress,payload:{progress:.5,index:0,total:2}},{type:s.SecureChannelEventType.Progress,payload:{progress:1,index:1,total:2}}));const n=[o(e.FlashMcuSteps.GetDeviceInfo),o(e.FlashMcuSteps.ResolveMcuVersion),o(e.FlashMcuSteps.FlashMcuOrBootloader),o(e.FlashMcuSteps.FlashMcuOrBootloader),o(e.FlashMcuSteps.FlashMcuOrBootloader,{progress:.5}),o(e.FlashMcuSteps.FlashMcuOrBootloader,{progress:1}),F()];(0,u.testDeviceActionStates)(d(),n,(0,l.makeDeviceActionInternalApiMock)(),{onDone:t,onError:r})}))}),describe("Error",()=>{it("Should go to Error when getOsVersion returns Left",()=>new Promise((t,r)=>{const n=new V.GetOsVersionError(new Error("command failed"));h((0,c.Left)(n));const i=[o(e.FlashMcuSteps.GetDeviceInfo),M(n)];(0,u.testDeviceActionStates)(d(),i,(0,l.makeDeviceActionInternalApiMock)(),{onDone:t,onError:r})})),it("Should go to Error when the device never enters bootloader mode",async()=>{vi.useFakeTimers(),h((0,c.Right)({...a,isBootloader:!1}));const t=[...D(10),M(new w.BootloaderModeTimeoutError("Device did not enter bootloader mode after 10 attempts"))],r=new Promise((n,i)=>{(0,u.testDeviceActionStates)(d(),t,(0,l.makeDeviceActionInternalApiMock)(),{onDone:n,onError:i})});await vi.advanceTimersByTimeAsync(2e3*11),await r,vi.useRealTimers()}),it("Should go to Error when resolveMcuVersion returns Left",()=>new Promise((t,r)=>{h();const n=new w.ResolveMcuVersionError("no compatible MCU");p((0,c.Left)(n));const i=[o(e.FlashMcuSteps.GetDeviceInfo),o(e.FlashMcuSteps.ResolveMcuVersion),M(n)];(0,u.testDeviceActionStates)(d(),i,(0,l.makeDeviceActionInternalApiMock)(),{onDone:t,onError:r})})),it("Should map a secure channel error event to a device action error",()=>new Promise((t,r)=>{h(),p(),m((0,v.of)({type:s.SecureChannelEventType.Error,error:new s.SecureChannelError("flash failed")}));const n=[o(e.FlashMcuSteps.GetDeviceInfo),o(e.FlashMcuSteps.ResolveMcuVersion),o(e.FlashMcuSteps.FlashMcuOrBootloader),o(e.FlashMcuSteps.FlashMcuOrBootloader),o(e.FlashMcuSteps.FlashMcuOrBootloader),M(new s.UnknownDAError)];(0,u.testDeviceActionStates)(d(),n,(0,l.makeDeviceActionInternalApiMock)(),{onDone:t,onError:r})})),it("Should go to Error when the secure channel connection cannot be opened",()=>new Promise((t,r)=>{h(),p();const n=new s.UnknownDAError("Invalid WebSocket connection");m(new v.Observable(f=>{f.error(n)}));const i=[o(e.FlashMcuSteps.GetDeviceInfo),o(e.FlashMcuSteps.ResolveMcuVersion),o(e.FlashMcuSteps.FlashMcuOrBootloader),o(e.FlashMcuSteps.FlashMcuOrBootloader),M(n)];(0,u.testDeviceActionStates)(d(),i,(0,l.makeDeviceActionInternalApiMock)(),{onDone:t,onError:r})}))})});
2
2
  //# sourceMappingURL=FlashMcuDeviceAction.test.js.map