@ledgerhq/device-signer-kit-solana 1.4.0 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/lib/cjs/internal/app-binder/command/GetAppConfigurationCommand.js +1 -1
  2. package/lib/cjs/internal/app-binder/command/GetAppConfigurationCommand.js.map +2 -2
  3. package/lib/cjs/internal/app-binder/command/GetAppConfigurationCommand.test.js +1 -1
  4. package/lib/cjs/internal/app-binder/command/GetAppConfigurationCommand.test.js.map +2 -2
  5. package/lib/cjs/internal/app-binder/command/GetChallengeCommand.js +1 -1
  6. package/lib/cjs/internal/app-binder/command/GetChallengeCommand.js.map +2 -2
  7. package/lib/cjs/internal/app-binder/command/GetChallengeCommand.test.js +1 -1
  8. package/lib/cjs/internal/app-binder/command/GetChallengeCommand.test.js.map +2 -2
  9. package/lib/cjs/internal/app-binder/command/GetPubKeyCommand.js +1 -1
  10. package/lib/cjs/internal/app-binder/command/GetPubKeyCommand.js.map +2 -2
  11. package/lib/cjs/internal/app-binder/command/GetPubKeyCommand.test.js +1 -1
  12. package/lib/cjs/internal/app-binder/command/GetPubKeyCommand.test.js.map +2 -2
  13. package/lib/cjs/internal/app-binder/command/ProvideTLVDescriptorCommand.js +1 -1
  14. package/lib/cjs/internal/app-binder/command/ProvideTLVDescriptorCommand.js.map +2 -2
  15. package/lib/cjs/internal/app-binder/command/ProvideTLVDescriptorCommand.test.js +1 -1
  16. package/lib/cjs/internal/app-binder/command/ProvideTLVDescriptorCommand.test.js.map +2 -2
  17. package/lib/cjs/internal/app-binder/command/ProvideTrustedNamePKICommand.js +1 -1
  18. package/lib/cjs/internal/app-binder/command/ProvideTrustedNamePKICommand.js.map +2 -2
  19. package/lib/cjs/internal/app-binder/command/ProvideTrustedNamePKICommand.test.js +1 -1
  20. package/lib/cjs/internal/app-binder/command/ProvideTrustedNamePKICommand.test.js.map +2 -2
  21. package/lib/cjs/internal/app-binder/command/SignOffChainMessageCommand.js +1 -1
  22. package/lib/cjs/internal/app-binder/command/SignOffChainMessageCommand.js.map +2 -2
  23. package/lib/cjs/internal/app-binder/command/SignOffChainMessageCommand.test.js +1 -1
  24. package/lib/cjs/internal/app-binder/command/SignOffChainMessageCommand.test.js.map +3 -3
  25. package/lib/cjs/internal/app-binder/command/SignTransactionCommand.js +1 -1
  26. package/lib/cjs/internal/app-binder/command/SignTransactionCommand.js.map +2 -2
  27. package/lib/cjs/internal/app-binder/command/SignTransactionCommand.test.js +1 -1
  28. package/lib/cjs/internal/app-binder/command/SignTransactionCommand.test.js.map +3 -3
  29. package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.test.js +1 -1
  30. package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.test.js.map +2 -2
  31. package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.test.js +1 -1
  32. package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.test.js.map +2 -2
  33. package/lib/cjs/package.json +2 -2
  34. package/lib/esm/internal/app-binder/command/GetAppConfigurationCommand.js +1 -1
  35. package/lib/esm/internal/app-binder/command/GetAppConfigurationCommand.js.map +2 -2
  36. package/lib/esm/internal/app-binder/command/GetAppConfigurationCommand.test.js +1 -1
  37. package/lib/esm/internal/app-binder/command/GetAppConfigurationCommand.test.js.map +2 -2
  38. package/lib/esm/internal/app-binder/command/GetChallengeCommand.js +1 -1
  39. package/lib/esm/internal/app-binder/command/GetChallengeCommand.js.map +2 -2
  40. package/lib/esm/internal/app-binder/command/GetChallengeCommand.test.js +1 -1
  41. package/lib/esm/internal/app-binder/command/GetChallengeCommand.test.js.map +2 -2
  42. package/lib/esm/internal/app-binder/command/GetPubKeyCommand.js +1 -1
  43. package/lib/esm/internal/app-binder/command/GetPubKeyCommand.js.map +2 -2
  44. package/lib/esm/internal/app-binder/command/GetPubKeyCommand.test.js +1 -1
  45. package/lib/esm/internal/app-binder/command/GetPubKeyCommand.test.js.map +2 -2
  46. package/lib/esm/internal/app-binder/command/ProvideTLVDescriptorCommand.js +1 -1
  47. package/lib/esm/internal/app-binder/command/ProvideTLVDescriptorCommand.js.map +2 -2
  48. package/lib/esm/internal/app-binder/command/ProvideTLVDescriptorCommand.test.js +1 -1
  49. package/lib/esm/internal/app-binder/command/ProvideTLVDescriptorCommand.test.js.map +2 -2
  50. package/lib/esm/internal/app-binder/command/ProvideTrustedNamePKICommand.js +1 -1
  51. package/lib/esm/internal/app-binder/command/ProvideTrustedNamePKICommand.js.map +2 -2
  52. package/lib/esm/internal/app-binder/command/ProvideTrustedNamePKICommand.test.js +1 -1
  53. package/lib/esm/internal/app-binder/command/ProvideTrustedNamePKICommand.test.js.map +2 -2
  54. package/lib/esm/internal/app-binder/command/SignOffChainMessageCommand.js +1 -1
  55. package/lib/esm/internal/app-binder/command/SignOffChainMessageCommand.js.map +2 -2
  56. package/lib/esm/internal/app-binder/command/SignOffChainMessageCommand.test.js +1 -1
  57. package/lib/esm/internal/app-binder/command/SignOffChainMessageCommand.test.js.map +3 -3
  58. package/lib/esm/internal/app-binder/command/SignTransactionCommand.js +1 -1
  59. package/lib/esm/internal/app-binder/command/SignTransactionCommand.js.map +2 -2
  60. package/lib/esm/internal/app-binder/command/SignTransactionCommand.test.js +1 -1
  61. package/lib/esm/internal/app-binder/command/SignTransactionCommand.test.js.map +3 -3
  62. package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.test.js +1 -1
  63. package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.test.js.map +2 -2
  64. package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.test.js +1 -1
  65. package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.test.js.map +2 -2
  66. package/lib/esm/package.json +2 -2
  67. package/lib/types/internal/app-binder/command/GetAppConfigurationCommand.d.ts +1 -0
  68. package/lib/types/internal/app-binder/command/GetAppConfigurationCommand.d.ts.map +1 -1
  69. package/lib/types/internal/app-binder/command/GetChallengeCommand.d.ts +1 -0
  70. package/lib/types/internal/app-binder/command/GetChallengeCommand.d.ts.map +1 -1
  71. package/lib/types/internal/app-binder/command/GetPubKeyCommand.d.ts +1 -0
  72. package/lib/types/internal/app-binder/command/GetPubKeyCommand.d.ts.map +1 -1
  73. package/lib/types/internal/app-binder/command/ProvideTLVDescriptorCommand.d.ts +1 -0
  74. package/lib/types/internal/app-binder/command/ProvideTLVDescriptorCommand.d.ts.map +1 -1
  75. package/lib/types/internal/app-binder/command/ProvideTrustedNamePKICommand.d.ts +1 -0
  76. package/lib/types/internal/app-binder/command/ProvideTrustedNamePKICommand.d.ts.map +1 -1
  77. package/lib/types/internal/app-binder/command/SignOffChainMessageCommand.d.ts +1 -0
  78. package/lib/types/internal/app-binder/command/SignOffChainMessageCommand.d.ts.map +1 -1
  79. package/lib/types/internal/app-binder/command/SignTransactionCommand.d.ts +1 -0
  80. package/lib/types/internal/app-binder/command/SignTransactionCommand.d.ts.map +1 -1
  81. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  82. package/package.json +6 -6
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/command/SignTransactionCommand.test.ts"],
4
- "sourcesContent": ["import {\n ApduResponse,\n CommandResultFactory,\n InvalidStatusWordError,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\nimport { Just, Nothing } from \"purify-ts\";\n\nimport {\n SignTransactionCommand,\n type SignTransactionCommandArgs,\n} from \"./SignTransactionCommand\";\n\ndescribe(\"SignTransactionCommand\", () => {\n const defaultArgs: SignTransactionCommandArgs = {\n serializedTransaction: new Uint8Array(),\n more: false,\n extend: false,\n };\n\n describe(\"getApdu\", () => {\n it(\"should return the correct APDU when the data is empty\", () => {\n // GIVEN\n const command = new SignTransactionCommand(defaultArgs);\n\n // WHEN\n const apdu = command.getApdu();\n\n // THEN\n expect(apdu.data).toStrictEqual(new Uint8Array());\n expect(apdu.cla).toBe(0xe0);\n expect(apdu.ins).toBe(0x06);\n expect(apdu.p1).toBe(0x01);\n expect(apdu.p2).toBe(0x00);\n });\n\n it(\"should return the correct APDU when the data is not empty\", () => {\n // GIVEN\n const command = new SignTransactionCommand({\n serializedTransaction: new Uint8Array([0x01, 0x02, 0x03]),\n more: false,\n extend: false,\n });\n\n // WHEN\n const apdu = command.getApdu();\n\n // THEN\n expect(apdu.data).toStrictEqual(new Uint8Array([0x01, 0x02, 0x03]));\n expect(apdu.cla).toBe(0xe0);\n expect(apdu.ins).toBe(0x06);\n expect(apdu.p1).toBe(0x01);\n expect(apdu.p2).toBe(0x00);\n });\n\n it(\"should return the correct APDU when the more flag is set\", () => {\n // GIVEN\n const command = new SignTransactionCommand({\n serializedTransaction: new Uint8Array([0x01, 0x02, 0x03]),\n more: true,\n extend: false,\n });\n\n // WHEN\n const apdu = command.getApdu();\n\n // THEN\n expect(apdu.data).toStrictEqual(new Uint8Array([0x01, 0x02, 0x03]));\n expect(apdu.cla).toBe(0xe0);\n expect(apdu.ins).toBe(0x06);\n expect(apdu.p1).toBe(0x01);\n expect(apdu.p2).toBe(0x02);\n });\n\n it(\"should return the correct APDU when the extend flag is set\", () => {\n // GIVEN\n const command = new SignTransactionCommand({\n serializedTransaction: new Uint8Array([0x01, 0x02, 0x03]),\n more: false,\n extend: true,\n });\n\n // WHEN\n const apdu = command.getApdu();\n\n // THEN\n expect(apdu.data).toStrictEqual(new Uint8Array([0x01, 0x02, 0x03]));\n expect(apdu.cla).toBe(0xe0);\n expect(apdu.ins).toBe(0x06);\n expect(apdu.p1).toBe(0x01);\n expect(apdu.p2).toBe(0x01);\n });\n\n it(\"should return the correct APDU when the more and extend flags are set\", () => {\n // GIVEN\n const command = new SignTransactionCommand({\n serializedTransaction: new Uint8Array([0x01, 0x02, 0x03]),\n more: true,\n extend: true,\n });\n\n // WHEN\n const apdu = command.getApdu();\n\n // THEN\n expect(apdu.data).toStrictEqual(new Uint8Array([0x01, 0x02, 0x03]));\n expect(apdu.cla).toBe(0xe0);\n expect(apdu.ins).toBe(0x06);\n expect(apdu.p1).toBe(0x01);\n expect(apdu.p2).toBe(0x03);\n });\n });\n\n describe(\"parseResponse\", () => {\n it(\"should return Noting when the response is empty\", () => {\n // GIVEN\n const command = new SignTransactionCommand(defaultArgs);\n\n // WHEN\n const result = command.parseResponse(\n new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: new Uint8Array([]),\n }),\n );\n\n // THEN\n expect(result).toStrictEqual(CommandResultFactory({ data: Nothing }));\n });\n\n it(\"should return the signature when the response is not empty\", () => {\n // GIVEN\n const command = new SignTransactionCommand(defaultArgs);\n const data = new Uint8Array(Array.from({ length: 64 }, (_, i) => i + 1));\n\n // WHEN\n const result = command.parseResponse(\n new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data,\n }),\n );\n\n // THEN\n expect(result).toStrictEqual(\n CommandResultFactory({\n data: Just(data),\n }),\n );\n });\n\n it(\"should return an error when the response data is not valid\", () => {\n // GIVEN\n const command = new SignTransactionCommand(defaultArgs);\n\n // WHEN\n const result = command.parseResponse(\n new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: new Uint8Array([0x01]),\n }),\n );\n\n // THEN\n if (isSuccessCommandResult(result))\n assert.fail(\"The result should be an error.\");\n else {\n expect(result.error).toEqual(\n new InvalidStatusWordError(\"Signature is missing\"),\n );\n }\n });\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["import_device_management_kit", "import_purify_ts", "import_SignTransactionCommand", "defaultArgs", "apdu", "result", "command", "data", "_", "i"]
4
+ "sourcesContent": ["import {\n ApduResponse,\n CommandResultFactory,\n InvalidStatusWordError,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\nimport { Just, Nothing } from \"purify-ts\";\n\nimport {\n SignTransactionCommand,\n type SignTransactionCommandArgs,\n} from \"./SignTransactionCommand\";\n\ndescribe(\"SignTransactionCommand\", () => {\n const defaultArgs: SignTransactionCommandArgs = {\n serializedTransaction: new Uint8Array(),\n more: false,\n extend: false,\n };\n\n describe(\"name\", () => {\n it(\"should be 'signTransaction'\", () => {\n const command = new SignTransactionCommand(defaultArgs);\n expect(command.name).toBe(\"signTransaction\");\n });\n });\n\n describe(\"getApdu\", () => {\n it(\"should return the correct APDU when the data is empty\", () => {\n // GIVEN\n const command = new SignTransactionCommand(defaultArgs);\n\n // WHEN\n const apdu = command.getApdu();\n\n // THEN\n expect(apdu.data).toStrictEqual(new Uint8Array());\n expect(apdu.cla).toBe(0xe0);\n expect(apdu.ins).toBe(0x06);\n expect(apdu.p1).toBe(0x01);\n expect(apdu.p2).toBe(0x00);\n });\n\n it(\"should return the correct APDU when the data is not empty\", () => {\n // GIVEN\n const command = new SignTransactionCommand({\n serializedTransaction: new Uint8Array([0x01, 0x02, 0x03]),\n more: false,\n extend: false,\n });\n\n // WHEN\n const apdu = command.getApdu();\n\n // THEN\n expect(apdu.data).toStrictEqual(new Uint8Array([0x01, 0x02, 0x03]));\n expect(apdu.cla).toBe(0xe0);\n expect(apdu.ins).toBe(0x06);\n expect(apdu.p1).toBe(0x01);\n expect(apdu.p2).toBe(0x00);\n });\n\n it(\"should return the correct APDU when the more flag is set\", () => {\n // GIVEN\n const command = new SignTransactionCommand({\n serializedTransaction: new Uint8Array([0x01, 0x02, 0x03]),\n more: true,\n extend: false,\n });\n\n // WHEN\n const apdu = command.getApdu();\n\n // THEN\n expect(apdu.data).toStrictEqual(new Uint8Array([0x01, 0x02, 0x03]));\n expect(apdu.cla).toBe(0xe0);\n expect(apdu.ins).toBe(0x06);\n expect(apdu.p1).toBe(0x01);\n expect(apdu.p2).toBe(0x02);\n });\n\n it(\"should return the correct APDU when the extend flag is set\", () => {\n // GIVEN\n const command = new SignTransactionCommand({\n serializedTransaction: new Uint8Array([0x01, 0x02, 0x03]),\n more: false,\n extend: true,\n });\n\n // WHEN\n const apdu = command.getApdu();\n\n // THEN\n expect(apdu.data).toStrictEqual(new Uint8Array([0x01, 0x02, 0x03]));\n expect(apdu.cla).toBe(0xe0);\n expect(apdu.ins).toBe(0x06);\n expect(apdu.p1).toBe(0x01);\n expect(apdu.p2).toBe(0x01);\n });\n\n it(\"should return the correct APDU when the more and extend flags are set\", () => {\n // GIVEN\n const command = new SignTransactionCommand({\n serializedTransaction: new Uint8Array([0x01, 0x02, 0x03]),\n more: true,\n extend: true,\n });\n\n // WHEN\n const apdu = command.getApdu();\n\n // THEN\n expect(apdu.data).toStrictEqual(new Uint8Array([0x01, 0x02, 0x03]));\n expect(apdu.cla).toBe(0xe0);\n expect(apdu.ins).toBe(0x06);\n expect(apdu.p1).toBe(0x01);\n expect(apdu.p2).toBe(0x03);\n });\n });\n\n describe(\"parseResponse\", () => {\n it(\"should return Noting when the response is empty\", () => {\n // GIVEN\n const command = new SignTransactionCommand(defaultArgs);\n\n // WHEN\n const result = command.parseResponse(\n new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: new Uint8Array([]),\n }),\n );\n\n // THEN\n expect(result).toStrictEqual(CommandResultFactory({ data: Nothing }));\n });\n\n it(\"should return the signature when the response is not empty\", () => {\n // GIVEN\n const command = new SignTransactionCommand(defaultArgs);\n const data = new Uint8Array(Array.from({ length: 64 }, (_, i) => i + 1));\n\n // WHEN\n const result = command.parseResponse(\n new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data,\n }),\n );\n\n // THEN\n expect(result).toStrictEqual(\n CommandResultFactory({\n data: Just(data),\n }),\n );\n });\n\n it(\"should return an error when the response data is not valid\", () => {\n // GIVEN\n const command = new SignTransactionCommand(defaultArgs);\n\n // WHEN\n const result = command.parseResponse(\n new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: new Uint8Array([0x01]),\n }),\n );\n\n // THEN\n if (isSuccessCommandResult(result))\n assert.fail(\"The result should be an error.\");\n else {\n expect(result.error).toEqual(\n new InvalidStatusWordError(\"Signature is missing\"),\n );\n }\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["import_device_management_kit", "import_purify_ts", "import_SignTransactionCommand", "defaultArgs", "command", "apdu", "result", "data", "_", "i"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("@ledgerhq/device-management-kit"),r=require("purify-ts"),t=require("vitest"),m=require("../../app-binder/device-action/__test-utils__/testDeviceActionStates"),c=require("../../app-binder/services/TransactionInspector"),f=require("./__test-utils__/makeInternalApi"),A=require("./SignTransactionDeviceAction");const v="44'/501'/0'/0'",y=new Uint8Array([222,173,190,239]),T={getSolanaContext:t.vi.fn(),getFieldContext:t.vi.fn(),getContexts:t.vi.fn(),getTypedDataFilters:t.vi.fn(),getWeb3Checks:t.vi.fn()};let i,u,d,S,g,l;function D(){return{getAppConfig:u,buildContext:d,provideContext:S,signTransaction:g,inspectTransaction:l}}(0,t.describe)("SignTransactionDeviceAction (Solana)",()=>{(0,t.beforeEach)(()=>{i=(0,f.makeDeviceActionInternalApiMock)(),u=t.vi.fn(),d=t.vi.fn(),S=t.vi.fn(),g=t.vi.fn(),l=t.vi.fn().mockResolvedValue({transactionType:c.SolanaTransactionTypes.SPL,data:{tokenAddress:null,createATA:!1}})}),(0,t.it)("happy path (skip open): getAppConfig -> inspect -> build -> provide -> sign",()=>new Promise((o,s)=>{i.getDeviceSessionState.mockReturnValue({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Solana",version:"1.4.1"},deviceModelId:e.DeviceModelId.NANO_X,isSecureConnectionAllowed:!0}),u.mockResolvedValue((0,e.CommandResultFactory)({data:{}})),l.mockResolvedValue({transactionType:c.SolanaTransactionTypes.SPL});const n={descriptor:new Uint8Array([1]),calCertificate:{keyUsageNumber:0,payload:new Uint8Array([1])},challenge:void 0,addressResult:{tokenAccount:"",owner:"",contract:""}};d.mockResolvedValue(n),S.mockResolvedValue(r.Nothing);const a=new Uint8Array([170,187]);g.mockResolvedValue((0,e.CommandResultFactory)({data:(0,r.Just)(a)}));const p=new A.SignTransactionDeviceAction({input:{derivationPath:v,transaction:y,transactionOptions:{skipOpenApp:!0},contextModule:T}});t.vi.spyOn(p,"extractDependencies").mockReturnValue(D());const k=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction},status:e.DeviceActionStatus.Pending},{output:a,status:e.DeviceActionStatus.Completed}];(0,m.testDeviceActionStates)(p,k,i,{onDone:o,onError:s})})),(0,t.it)("failure in provideContext still signs",()=>new Promise((o,s)=>{i.getDeviceSessionState.mockReturnValue({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Solana",version:"1.4.1"},deviceModelId:e.DeviceModelId.NANO_X,isSecureConnectionAllowed:!0}),u.mockResolvedValue((0,e.CommandResultFactory)({data:{}})),l.mockResolvedValue({transactionType:c.SolanaTransactionTypes.SPL}),d.mockResolvedValue({descriptor:new Uint8Array([2]),calCertificate:{keyUsageNumber:0,payload:new Uint8Array},challenge:void 0,addressResult:{tokenAccount:"",owner:"",contract:""}}),S.mockResolvedValue((0,r.Just)((0,e.CommandResultFactory)({error:new e.InvalidStatusWordError("ctxErr")})));const n=new Uint8Array([254]);g.mockResolvedValue((0,e.CommandResultFactory)({data:(0,r.Just)(n)}));const a=new A.SignTransactionDeviceAction({input:{derivationPath:v,transaction:y,transactionOptions:{skipOpenApp:!0},contextModule:T}});t.vi.spyOn(a,"extractDependencies").mockReturnValue(D());const p=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction},status:e.DeviceActionStatus.Pending},{output:n,status:e.DeviceActionStatus.Completed}];(0,m.testDeviceActionStates)(a,p,i,{onDone:o,onError:s})})),(0,t.it)("buildContext throws \u2192 error",()=>new Promise((o,s)=>{i.getDeviceSessionState.mockReturnValue({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Solana",version:"1.4.1"},deviceModelId:e.DeviceModelId.NANO_X,isSecureConnectionAllowed:!0}),u.mockResolvedValue((0,e.CommandResultFactory)({data:{}})),l.mockResolvedValue({transactionType:c.SolanaTransactionTypes.SPL}),d.mockRejectedValue(new e.InvalidStatusWordError("bldErr"));const n=new A.SignTransactionDeviceAction({input:{derivationPath:v,transaction:y,transactionOptions:{skipOpenApp:!0},contextModule:T}});t.vi.spyOn(n,"extractDependencies").mockReturnValue(D());const a=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{error:expect.anything(),status:e.DeviceActionStatus.Error}];(0,m.testDeviceActionStates)(n,a,i,{onDone:o,onError:s})}))});
1
+ "use strict";var e=require("@ledgerhq/device-management-kit"),r=require("purify-ts"),t=require("vitest"),m=require("../../app-binder/device-action/__test-utils__/testDeviceActionStates"),c=require("../../app-binder/services/TransactionInspector"),f=require("./__test-utils__/makeInternalApi"),A=require("./SignTransactionDeviceAction");const v="44'/501'/0'/0'",y=new Uint8Array([222,173,190,239]),T={getSolanaContext:t.vi.fn()};let i,u,d,S,g,l;function D(){return{getAppConfig:u,buildContext:d,provideContext:S,signTransaction:g,inspectTransaction:l}}(0,t.describe)("SignTransactionDeviceAction (Solana)",()=>{(0,t.beforeEach)(()=>{i=(0,f.makeDeviceActionInternalApiMock)(),u=t.vi.fn(),d=t.vi.fn(),S=t.vi.fn(),g=t.vi.fn(),l=t.vi.fn().mockResolvedValue({transactionType:c.SolanaTransactionTypes.SPL,data:{tokenAddress:null,createATA:!1}})}),(0,t.it)("happy path (skip open): getAppConfig -> inspect -> build -> provide -> sign",()=>new Promise((o,s)=>{i.getDeviceSessionState.mockReturnValue({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Solana",version:"1.4.1"},deviceModelId:e.DeviceModelId.NANO_X,isSecureConnectionAllowed:!0}),u.mockResolvedValue((0,e.CommandResultFactory)({data:{}})),l.mockResolvedValue({transactionType:c.SolanaTransactionTypes.SPL});const n={descriptor:new Uint8Array([1]),calCertificate:{keyUsageNumber:0,payload:new Uint8Array([1])},challenge:void 0,addressResult:{tokenAccount:"",owner:"",contract:""}};d.mockResolvedValue(n),S.mockResolvedValue(r.Nothing);const a=new Uint8Array([170,187]);g.mockResolvedValue((0,e.CommandResultFactory)({data:(0,r.Just)(a)}));const p=new A.SignTransactionDeviceAction({input:{derivationPath:v,transaction:y,transactionOptions:{skipOpenApp:!0},contextModule:T}});t.vi.spyOn(p,"extractDependencies").mockReturnValue(D());const k=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction},status:e.DeviceActionStatus.Pending},{output:a,status:e.DeviceActionStatus.Completed}];(0,m.testDeviceActionStates)(p,k,i,{onDone:o,onError:s})})),(0,t.it)("failure in provideContext still signs",()=>new Promise((o,s)=>{i.getDeviceSessionState.mockReturnValue({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Solana",version:"1.4.1"},deviceModelId:e.DeviceModelId.NANO_X,isSecureConnectionAllowed:!0}),u.mockResolvedValue((0,e.CommandResultFactory)({data:{}})),l.mockResolvedValue({transactionType:c.SolanaTransactionTypes.SPL}),d.mockResolvedValue({descriptor:new Uint8Array([2]),calCertificate:{keyUsageNumber:0,payload:new Uint8Array},challenge:void 0,addressResult:{tokenAccount:"",owner:"",contract:""}}),S.mockResolvedValue((0,r.Just)((0,e.CommandResultFactory)({error:new e.InvalidStatusWordError("ctxErr")})));const n=new Uint8Array([254]);g.mockResolvedValue((0,e.CommandResultFactory)({data:(0,r.Just)(n)}));const a=new A.SignTransactionDeviceAction({input:{derivationPath:v,transaction:y,transactionOptions:{skipOpenApp:!0},contextModule:T}});t.vi.spyOn(a,"extractDependencies").mockReturnValue(D());const p=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction},status:e.DeviceActionStatus.Pending},{output:n,status:e.DeviceActionStatus.Completed}];(0,m.testDeviceActionStates)(a,p,i,{onDone:o,onError:s})})),(0,t.it)("buildContext throws \u2192 error",()=>new Promise((o,s)=>{i.getDeviceSessionState.mockReturnValue({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Solana",version:"1.4.1"},deviceModelId:e.DeviceModelId.NANO_X,isSecureConnectionAllowed:!0}),u.mockResolvedValue((0,e.CommandResultFactory)({data:{}})),l.mockResolvedValue({transactionType:c.SolanaTransactionTypes.SPL}),d.mockRejectedValue(new e.InvalidStatusWordError("bldErr"));const n=new A.SignTransactionDeviceAction({input:{derivationPath:v,transaction:y,transactionOptions:{skipOpenApp:!0},contextModule:T}});t.vi.spyOn(n,"extractDependencies").mockReturnValue(D());const a=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{error:expect.anything(),status:e.DeviceActionStatus.Error}];(0,m.testDeviceActionStates)(n,a,i,{onDone:o,onError:s})}))});
2
2
  //# sourceMappingURL=SignTransactionDeviceAction.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/device-action/SignTransactionDeviceAction.test.ts"],
4
- "sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n CommandResultFactory,\n type DeviceActionState,\n DeviceActionStatus,\n DeviceModelId,\n DeviceSessionStateType,\n DeviceStatus,\n InvalidStatusWordError,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { Just, Nothing } from \"purify-ts\";\nimport { beforeEach, describe, it, vi } from \"vitest\";\n\nimport {\n type SignTransactionDAError,\n type SignTransactionDAInput,\n type SignTransactionDAIntermediateValue,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { testDeviceActionStates } from \"@internal/app-binder/device-action/__test-utils__/testDeviceActionStates\";\nimport { SolanaTransactionTypes } from \"@internal/app-binder/services/TransactionInspector\";\nimport { type SolanaBuildContextResult } from \"@internal/app-binder/task/BuildTransactionContextTask\";\n\nimport { makeDeviceActionInternalApiMock } from \"./__test-utils__/makeInternalApi\";\nimport { SignTransactionDeviceAction } from \"./SignTransactionDeviceAction\";\n\nconst defaultDerivation = \"44'/501'/0'/0'\";\nconst exampleTx = new Uint8Array([0xde, 0xad, 0xbe, 0xef]);\n\nconst contextModuleStub: ContextModule = {\n getSolanaContext: vi.fn(),\n getFieldContext: vi.fn(),\n getContexts: vi.fn(),\n getTypedDataFilters: vi.fn(),\n getWeb3Checks: vi.fn(),\n};\n\nlet apiMock: ReturnType<typeof makeDeviceActionInternalApiMock>;\nlet getAppConfigMock: ReturnType<typeof vi.fn>;\nlet buildContextMock: ReturnType<typeof vi.fn>;\nlet provideContextMock: ReturnType<typeof vi.fn>;\nlet signMock: ReturnType<typeof vi.fn>;\nlet inspectTransactionMock: ReturnType<typeof vi.fn>;\n\nfunction extractDeps() {\n return {\n getAppConfig: getAppConfigMock,\n buildContext: buildContextMock,\n provideContext: provideContextMock,\n signTransaction: signMock,\n inspectTransaction: inspectTransactionMock,\n };\n}\n\ndescribe(\"SignTransactionDeviceAction (Solana)\", () => {\n beforeEach(() => {\n apiMock = makeDeviceActionInternalApiMock();\n getAppConfigMock = vi.fn();\n buildContextMock = vi.fn();\n provideContextMock = vi.fn();\n signMock = vi.fn();\n inspectTransactionMock = vi.fn().mockResolvedValue({\n transactionType: SolanaTransactionTypes.SPL,\n data: { tokenAddress: null, createATA: false },\n });\n });\n\n it(\"happy path (skip open): getAppConfig -> inspect -> build -> provide -> sign\", () =>\n new Promise<void>((resolve, reject) => {\n apiMock.getDeviceSessionState.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Solana\", version: \"1.4.1\" },\n deviceModelId: DeviceModelId.NANO_X,\n isSecureConnectionAllowed: true,\n });\n\n getAppConfigMock.mockResolvedValue(CommandResultFactory({ data: {} }));\n inspectTransactionMock.mockResolvedValue({\n transactionType: SolanaTransactionTypes.SPL,\n });\n\n const ctx: SolanaBuildContextResult = {\n descriptor: new Uint8Array([1]),\n calCertificate: { keyUsageNumber: 0, payload: new Uint8Array([0x01]) },\n challenge: undefined,\n addressResult: { tokenAccount: \"\", owner: \"\", contract: \"\" },\n };\n buildContextMock.mockResolvedValue(ctx);\n provideContextMock.mockResolvedValue(Nothing);\n\n const signature = new Uint8Array([0xaa, 0xbb]);\n signMock.mockResolvedValue(\n CommandResultFactory({ data: Just(signature) }),\n );\n\n const action = new SignTransactionDeviceAction({\n input: {\n derivationPath: defaultDerivation,\n transaction: exampleTx,\n transactionOptions: { skipOpenApp: true },\n contextModule: contextModuleStub,\n } as SignTransactionDAInput,\n });\n vi.spyOn(action, \"extractDependencies\").mockReturnValue(extractDeps());\n\n const expected = [\n // getAppConfig\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n status: DeviceActionStatus.Pending,\n },\n // inspectTransaction\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n status: DeviceActionStatus.Pending,\n },\n // buildContext\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n status: DeviceActionStatus.Pending,\n },\n // provideContext\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n status: DeviceActionStatus.Pending,\n },\n // signTransaction\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n },\n status: DeviceActionStatus.Pending,\n },\n // success\n { output: signature, status: DeviceActionStatus.Completed },\n ] as DeviceActionState<\n Uint8Array,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >[];\n\n testDeviceActionStates<\n Uint8Array,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >(action, expected, apiMock, { onDone: resolve, onError: reject });\n }));\n\n it(\"failure in provideContext still signs\", () =>\n new Promise<void>((resolve, reject) => {\n apiMock.getDeviceSessionState.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Solana\", version: \"1.4.1\" },\n deviceModelId: DeviceModelId.NANO_X,\n isSecureConnectionAllowed: true,\n });\n\n getAppConfigMock.mockResolvedValue(CommandResultFactory({ data: {} }));\n inspectTransactionMock.mockResolvedValue({\n transactionType: SolanaTransactionTypes.SPL,\n });\n\n buildContextMock.mockResolvedValue({\n descriptor: new Uint8Array([2]),\n calCertificate: { keyUsageNumber: 0, payload: new Uint8Array() },\n challenge: undefined,\n addressResult: { tokenAccount: \"\", owner: \"\", contract: \"\" },\n });\n provideContextMock.mockResolvedValue(\n Just(\n CommandResultFactory({ error: new InvalidStatusWordError(\"ctxErr\") }),\n ),\n );\n const sig = new Uint8Array([0xfe]);\n signMock.mockResolvedValue(CommandResultFactory({ data: Just(sig) }));\n\n const action = new SignTransactionDeviceAction({\n input: {\n derivationPath: defaultDerivation,\n transaction: exampleTx,\n transactionOptions: { skipOpenApp: true },\n contextModule: contextModuleStub,\n } as SignTransactionDAInput,\n });\n vi.spyOn(action, \"extractDependencies\").mockReturnValue(extractDeps());\n\n const expected = [\n // getAppConfig\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n status: DeviceActionStatus.Pending,\n },\n // inspectTransaction\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n status: DeviceActionStatus.Pending,\n },\n // buildContext\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n status: DeviceActionStatus.Pending,\n },\n // provideContext (returns error but continues)\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n status: DeviceActionStatus.Pending,\n },\n // signTransaction\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n },\n status: DeviceActionStatus.Pending,\n },\n // success\n { output: sig, status: DeviceActionStatus.Completed },\n ] as DeviceActionState<\n Uint8Array,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >[];\n\n testDeviceActionStates<\n Uint8Array,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >(action, expected, apiMock, { onDone: resolve, onError: reject });\n }));\n\n it(\"buildContext throws \u2192 error\", () =>\n new Promise<void>((resolve, reject) => {\n apiMock.getDeviceSessionState.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Solana\", version: \"1.4.1\" },\n deviceModelId: DeviceModelId.NANO_X,\n isSecureConnectionAllowed: true,\n });\n\n getAppConfigMock.mockResolvedValue(CommandResultFactory({ data: {} }));\n inspectTransactionMock.mockResolvedValue({\n transactionType: SolanaTransactionTypes.SPL,\n });\n\n buildContextMock.mockRejectedValue(new InvalidStatusWordError(\"bldErr\"));\n\n const action = new SignTransactionDeviceAction({\n input: {\n derivationPath: defaultDerivation,\n transaction: exampleTx,\n transactionOptions: { skipOpenApp: true },\n contextModule: contextModuleStub,\n } as SignTransactionDAInput,\n });\n vi.spyOn(action, \"extractDependencies\").mockReturnValue(extractDeps());\n\n const expected = [\n // getAppConfig\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n status: DeviceActionStatus.Pending,\n },\n // inspectTransaction\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n status: DeviceActionStatus.Pending,\n },\n // buildContext (throws)\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n status: DeviceActionStatus.Pending,\n },\n // error raised from buildContext\n {\n error: expect.anything() as unknown as SignTransactionDAError,\n status: DeviceActionStatus.Error,\n },\n ] as DeviceActionState<\n Uint8Array,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >[];\n\n testDeviceActionStates<\n Uint8Array,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >(action, expected, apiMock, { onDone: resolve, onError: reject });\n }));\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n CommandResultFactory,\n type DeviceActionState,\n DeviceActionStatus,\n DeviceModelId,\n DeviceSessionStateType,\n DeviceStatus,\n InvalidStatusWordError,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { Just, Nothing } from \"purify-ts\";\nimport { beforeEach, describe, it, vi } from \"vitest\";\n\nimport {\n type SignTransactionDAError,\n type SignTransactionDAInput,\n type SignTransactionDAIntermediateValue,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { testDeviceActionStates } from \"@internal/app-binder/device-action/__test-utils__/testDeviceActionStates\";\nimport { SolanaTransactionTypes } from \"@internal/app-binder/services/TransactionInspector\";\nimport { type SolanaBuildContextResult } from \"@internal/app-binder/task/BuildTransactionContextTask\";\n\nimport { makeDeviceActionInternalApiMock } from \"./__test-utils__/makeInternalApi\";\nimport { SignTransactionDeviceAction } from \"./SignTransactionDeviceAction\";\n\nconst defaultDerivation = \"44'/501'/0'/0'\";\nconst exampleTx = new Uint8Array([0xde, 0xad, 0xbe, 0xef]);\n\nconst contextModuleStub: ContextModule = {\n getSolanaContext: vi.fn(),\n} as unknown as ContextModule;\n\nlet apiMock: ReturnType<typeof makeDeviceActionInternalApiMock>;\nlet getAppConfigMock: ReturnType<typeof vi.fn>;\nlet buildContextMock: ReturnType<typeof vi.fn>;\nlet provideContextMock: ReturnType<typeof vi.fn>;\nlet signMock: ReturnType<typeof vi.fn>;\nlet inspectTransactionMock: ReturnType<typeof vi.fn>;\n\nfunction extractDeps() {\n return {\n getAppConfig: getAppConfigMock,\n buildContext: buildContextMock,\n provideContext: provideContextMock,\n signTransaction: signMock,\n inspectTransaction: inspectTransactionMock,\n };\n}\n\ndescribe(\"SignTransactionDeviceAction (Solana)\", () => {\n beforeEach(() => {\n apiMock = makeDeviceActionInternalApiMock();\n getAppConfigMock = vi.fn();\n buildContextMock = vi.fn();\n provideContextMock = vi.fn();\n signMock = vi.fn();\n inspectTransactionMock = vi.fn().mockResolvedValue({\n transactionType: SolanaTransactionTypes.SPL,\n data: { tokenAddress: null, createATA: false },\n });\n });\n\n it(\"happy path (skip open): getAppConfig -> inspect -> build -> provide -> sign\", () =>\n new Promise<void>((resolve, reject) => {\n apiMock.getDeviceSessionState.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Solana\", version: \"1.4.1\" },\n deviceModelId: DeviceModelId.NANO_X,\n isSecureConnectionAllowed: true,\n });\n\n getAppConfigMock.mockResolvedValue(CommandResultFactory({ data: {} }));\n inspectTransactionMock.mockResolvedValue({\n transactionType: SolanaTransactionTypes.SPL,\n });\n\n const ctx: SolanaBuildContextResult = {\n descriptor: new Uint8Array([1]),\n calCertificate: { keyUsageNumber: 0, payload: new Uint8Array([0x01]) },\n challenge: undefined,\n addressResult: { tokenAccount: \"\", owner: \"\", contract: \"\" },\n };\n buildContextMock.mockResolvedValue(ctx);\n provideContextMock.mockResolvedValue(Nothing);\n\n const signature = new Uint8Array([0xaa, 0xbb]);\n signMock.mockResolvedValue(\n CommandResultFactory({ data: Just(signature) }),\n );\n\n const action = new SignTransactionDeviceAction({\n input: {\n derivationPath: defaultDerivation,\n transaction: exampleTx,\n transactionOptions: { skipOpenApp: true },\n contextModule: contextModuleStub,\n } as SignTransactionDAInput,\n });\n vi.spyOn(action, \"extractDependencies\").mockReturnValue(extractDeps());\n\n const expected = [\n // getAppConfig\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n status: DeviceActionStatus.Pending,\n },\n // inspectTransaction\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n status: DeviceActionStatus.Pending,\n },\n // buildContext\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n status: DeviceActionStatus.Pending,\n },\n // provideContext\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n status: DeviceActionStatus.Pending,\n },\n // signTransaction\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n },\n status: DeviceActionStatus.Pending,\n },\n // success\n { output: signature, status: DeviceActionStatus.Completed },\n ] as DeviceActionState<\n Uint8Array,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >[];\n\n testDeviceActionStates<\n Uint8Array,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >(action, expected, apiMock, { onDone: resolve, onError: reject });\n }));\n\n it(\"failure in provideContext still signs\", () =>\n new Promise<void>((resolve, reject) => {\n apiMock.getDeviceSessionState.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Solana\", version: \"1.4.1\" },\n deviceModelId: DeviceModelId.NANO_X,\n isSecureConnectionAllowed: true,\n });\n\n getAppConfigMock.mockResolvedValue(CommandResultFactory({ data: {} }));\n inspectTransactionMock.mockResolvedValue({\n transactionType: SolanaTransactionTypes.SPL,\n });\n\n buildContextMock.mockResolvedValue({\n descriptor: new Uint8Array([2]),\n calCertificate: { keyUsageNumber: 0, payload: new Uint8Array() },\n challenge: undefined,\n addressResult: { tokenAccount: \"\", owner: \"\", contract: \"\" },\n });\n provideContextMock.mockResolvedValue(\n Just(\n CommandResultFactory({ error: new InvalidStatusWordError(\"ctxErr\") }),\n ),\n );\n const sig = new Uint8Array([0xfe]);\n signMock.mockResolvedValue(CommandResultFactory({ data: Just(sig) }));\n\n const action = new SignTransactionDeviceAction({\n input: {\n derivationPath: defaultDerivation,\n transaction: exampleTx,\n transactionOptions: { skipOpenApp: true },\n contextModule: contextModuleStub,\n } as SignTransactionDAInput,\n });\n vi.spyOn(action, \"extractDependencies\").mockReturnValue(extractDeps());\n\n const expected = [\n // getAppConfig\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n status: DeviceActionStatus.Pending,\n },\n // inspectTransaction\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n status: DeviceActionStatus.Pending,\n },\n // buildContext\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n status: DeviceActionStatus.Pending,\n },\n // provideContext (returns error but continues)\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n status: DeviceActionStatus.Pending,\n },\n // signTransaction\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n },\n status: DeviceActionStatus.Pending,\n },\n // success\n { output: sig, status: DeviceActionStatus.Completed },\n ] as DeviceActionState<\n Uint8Array,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >[];\n\n testDeviceActionStates<\n Uint8Array,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >(action, expected, apiMock, { onDone: resolve, onError: reject });\n }));\n\n it(\"buildContext throws \u2192 error\", () =>\n new Promise<void>((resolve, reject) => {\n apiMock.getDeviceSessionState.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Solana\", version: \"1.4.1\" },\n deviceModelId: DeviceModelId.NANO_X,\n isSecureConnectionAllowed: true,\n });\n\n getAppConfigMock.mockResolvedValue(CommandResultFactory({ data: {} }));\n inspectTransactionMock.mockResolvedValue({\n transactionType: SolanaTransactionTypes.SPL,\n });\n\n buildContextMock.mockRejectedValue(new InvalidStatusWordError(\"bldErr\"));\n\n const action = new SignTransactionDeviceAction({\n input: {\n derivationPath: defaultDerivation,\n transaction: exampleTx,\n transactionOptions: { skipOpenApp: true },\n contextModule: contextModuleStub,\n } as SignTransactionDAInput,\n });\n vi.spyOn(action, \"extractDependencies\").mockReturnValue(extractDeps());\n\n const expected = [\n // getAppConfig\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n status: DeviceActionStatus.Pending,\n },\n // inspectTransaction\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n status: DeviceActionStatus.Pending,\n },\n // buildContext (throws)\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n status: DeviceActionStatus.Pending,\n },\n // error raised from buildContext\n {\n error: expect.anything() as unknown as SignTransactionDAError,\n status: DeviceActionStatus.Error,\n },\n ] as DeviceActionState<\n Uint8Array,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >[];\n\n testDeviceActionStates<\n Uint8Array,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >(action, expected, apiMock, { onDone: resolve, onError: reject });\n }));\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_device_management_kit", "import_purify_ts", "import_vitest", "import_testDeviceActionStates", "import_TransactionInspector", "import_makeInternalApi", "import_SignTransactionDeviceAction", "defaultDerivation", "exampleTx", "contextModuleStub", "apiMock", "getAppConfigMock", "buildContextMock", "provideContextMock", "signMock", "inspectTransactionMock", "extractDeps", "resolve", "reject", "ctx", "signature", "action", "expected", "sig"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var n=require("@ledgerhq/device-management-kit"),c=require("purify-ts"),e=require("vitest"),i=require("../../app-binder/command/GetChallengeCommand"),l=require("./BuildTransactionContextTask");const a={getSolanaContext:e.vi.fn(),getFieldContext:e.vi.fn(),getContexts:e.vi.fn(),getTypedDataFilters:e.vi.fn(),getWeb3Checks:e.vi.fn()},d={contextModule:a,options:{tokenAddress:"someAddress",createATA:void 0}},t={descriptor:new Uint8Array([1,2,3]),tokenAccount:"someTokenAccount",owner:"someOwner",contract:"someContract",certificate:{payload:new Uint8Array([170,187]),keyUsageNumber:1}};let o;(0,e.describe)("BuildTransactionContextTask",()=>{(0,e.beforeEach)(()=>{e.vi.resetAllMocks(),o={getDeviceSessionState:e.vi.fn().mockReturnValue({deviceModelId:n.DeviceModelId.NANO_X}),sendCommand:e.vi.fn().mockResolvedValue({status:n.CommandResultStatus.Success,data:{challenge:"someChallenge"}})}}),(0,e.it)("returns context successfully when challenge command succeeds",async()=>{a.getSolanaContext.mockResolvedValue((0,c.Right)(t));const s=await new l.BuildTransactionContextTask(o,d).run();(0,e.expect)(o.sendCommand).toHaveBeenCalledWith(e.expect.any(i.GetChallengeCommand)),(0,e.expect)(a.getSolanaContext).toHaveBeenCalledWith({deviceModelId:n.DeviceModelId.NANO_X,tokenAddress:"someAddress",challenge:"someChallenge",createATA:void 0}),(0,e.expect)(s).toEqual({challenge:"someChallenge",descriptor:t.descriptor,calCertificate:t.certificate,addressResult:{tokenAccount:t.tokenAccount,owner:t.owner,contract:t.contract}})}),(0,e.it)("returns context when challenge command fails",async()=>{o.sendCommand.mockResolvedValue({status:n.CommandResultStatus.Error,data:{}}),a.getSolanaContext.mockResolvedValue((0,c.Right)(t));const s=await new l.BuildTransactionContextTask(o,d).run();(0,e.expect)(a.getSolanaContext).toHaveBeenCalledWith({deviceModelId:n.DeviceModelId.NANO_X,tokenAddress:"someAddress",challenge:void 0,createATA:void 0}),(0,e.expect)(s).toEqual({challenge:void 0,descriptor:t.descriptor,calCertificate:t.certificate,addressResult:{tokenAccount:t.tokenAccount,owner:t.owner,contract:t.contract}})}),(0,e.it)("throws if getSolanaContext returns Left",async()=>{const r=new Error("Solana context failure");a.getSolanaContext.mockResolvedValue((0,c.Left)(r));const s=new l.BuildTransactionContextTask(o,d);await(0,e.expect)(s.run()).rejects.toThrow("Solana context failure")})});
1
+ "use strict";var n=require("@ledgerhq/device-management-kit"),c=require("purify-ts"),e=require("vitest"),i=require("../../app-binder/command/GetChallengeCommand"),l=require("./BuildTransactionContextTask");const a={getSolanaContext:e.vi.fn()},d={contextModule:a,options:{tokenAddress:"someAddress",createATA:void 0}},t={descriptor:new Uint8Array([1,2,3]),tokenAccount:"someTokenAccount",owner:"someOwner",contract:"someContract",certificate:{payload:new Uint8Array([170,187]),keyUsageNumber:1}};let o;(0,e.describe)("BuildTransactionContextTask",()=>{(0,e.beforeEach)(()=>{e.vi.resetAllMocks(),o={getDeviceSessionState:e.vi.fn().mockReturnValue({deviceModelId:n.DeviceModelId.NANO_X}),sendCommand:e.vi.fn().mockResolvedValue({status:n.CommandResultStatus.Success,data:{challenge:"someChallenge"}})}}),(0,e.it)("returns context successfully when challenge command succeeds",async()=>{a.getSolanaContext.mockResolvedValue((0,c.Right)(t));const s=await new l.BuildTransactionContextTask(o,d).run();(0,e.expect)(o.sendCommand).toHaveBeenCalledWith(e.expect.any(i.GetChallengeCommand)),(0,e.expect)(a.getSolanaContext).toHaveBeenCalledWith({deviceModelId:n.DeviceModelId.NANO_X,tokenAddress:"someAddress",challenge:"someChallenge",createATA:void 0}),(0,e.expect)(s).toEqual({challenge:"someChallenge",descriptor:t.descriptor,calCertificate:t.certificate,addressResult:{tokenAccount:t.tokenAccount,owner:t.owner,contract:t.contract}})}),(0,e.it)("returns context when challenge command fails",async()=>{o.sendCommand.mockResolvedValue({status:n.CommandResultStatus.Error,data:{}}),a.getSolanaContext.mockResolvedValue((0,c.Right)(t));const s=await new l.BuildTransactionContextTask(o,d).run();(0,e.expect)(a.getSolanaContext).toHaveBeenCalledWith({deviceModelId:n.DeviceModelId.NANO_X,tokenAddress:"someAddress",challenge:void 0,createATA:void 0}),(0,e.expect)(s).toEqual({challenge:void 0,descriptor:t.descriptor,calCertificate:t.certificate,addressResult:{tokenAccount:t.tokenAccount,owner:t.owner,contract:t.contract}})}),(0,e.it)("throws if getSolanaContext returns Left",async()=>{const r=new Error("Solana context failure");a.getSolanaContext.mockResolvedValue((0,c.Left)(r));const s=new l.BuildTransactionContextTask(o,d);await(0,e.expect)(s.run()).rejects.toThrow("Solana context failure")})});
2
2
  //# sourceMappingURL=BuildTransactionContextTask.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/task/BuildTransactionContextTask.test.ts"],
4
- "sourcesContent": ["/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n CommandResultStatus,\n DeviceModelId,\n type InternalApi,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { GetChallengeCommand } from \"@internal/app-binder/command/GetChallengeCommand\";\n\nimport {\n BuildTransactionContextTask,\n type SolanaBuildContextResult,\n} from \"./BuildTransactionContextTask\";\n\nconst contextModuleMock: ContextModule = {\n getSolanaContext: vi.fn(),\n getFieldContext: vi.fn(),\n getContexts: vi.fn(),\n getTypedDataFilters: vi.fn(),\n getWeb3Checks: vi.fn(),\n};\n\nconst defaultArgs = {\n contextModule: contextModuleMock,\n options: {\n tokenAddress: \"someAddress\",\n createATA: undefined,\n },\n};\n\nconst domainSolanaPayload = {\n descriptor: new Uint8Array([1, 2, 3]),\n tokenAccount: \"someTokenAccount\",\n owner: \"someOwner\",\n contract: \"someContract\",\n certificate: { payload: new Uint8Array([0xaa, 0xbb]), keyUsageNumber: 1 },\n} as const;\n\nlet apiMock: InternalApi;\n\ndescribe(\"BuildTransactionContextTask\", () => {\n beforeEach(() => {\n vi.resetAllMocks();\n\n apiMock = {\n getDeviceSessionState: vi\n .fn()\n .mockReturnValue({ deviceModelId: DeviceModelId.NANO_X }),\n sendCommand: vi.fn().mockResolvedValue({\n status: CommandResultStatus.Success,\n data: { challenge: \"someChallenge\" },\n }),\n } as unknown as InternalApi;\n });\n\n it(\"returns context successfully when challenge command succeeds\", async () => {\n (contextModuleMock.getSolanaContext as any).mockResolvedValue(\n Right(domainSolanaPayload),\n );\n\n const task = new BuildTransactionContextTask(apiMock, defaultArgs);\n const result = await task.run();\n\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n expect.any(GetChallengeCommand),\n );\n\n expect(contextModuleMock.getSolanaContext).toHaveBeenCalledWith({\n deviceModelId: DeviceModelId.NANO_X,\n tokenAddress: \"someAddress\",\n challenge: \"someChallenge\",\n createATA: undefined,\n });\n\n expect(result).toEqual<SolanaBuildContextResult>({\n challenge: \"someChallenge\",\n descriptor: domainSolanaPayload.descriptor,\n calCertificate: domainSolanaPayload.certificate,\n addressResult: {\n tokenAccount: domainSolanaPayload.tokenAccount,\n owner: domainSolanaPayload.owner,\n contract: domainSolanaPayload.contract,\n },\n });\n });\n\n it(\"returns context when challenge command fails\", async () => {\n (apiMock.sendCommand as any).mockResolvedValue({\n status: CommandResultStatus.Error,\n data: {},\n });\n (contextModuleMock.getSolanaContext as any).mockResolvedValue(\n Right(domainSolanaPayload),\n );\n\n const task = new BuildTransactionContextTask(apiMock, defaultArgs);\n const result = await task.run();\n\n expect(contextModuleMock.getSolanaContext).toHaveBeenCalledWith({\n deviceModelId: DeviceModelId.NANO_X,\n tokenAddress: \"someAddress\",\n challenge: undefined,\n createATA: undefined,\n });\n\n expect(result).toEqual<SolanaBuildContextResult>({\n challenge: undefined,\n descriptor: domainSolanaPayload.descriptor,\n calCertificate: domainSolanaPayload.certificate,\n addressResult: {\n tokenAccount: domainSolanaPayload.tokenAccount,\n owner: domainSolanaPayload.owner,\n contract: domainSolanaPayload.contract,\n },\n });\n });\n\n it(\"throws if getSolanaContext returns Left\", async () => {\n const error = new Error(\"Solana context failure\");\n (contextModuleMock.getSolanaContext as any).mockResolvedValue(Left(error));\n\n const task = new BuildTransactionContextTask(apiMock, defaultArgs);\n\n await expect(task.run()).rejects.toThrow(\"Solana context failure\");\n });\n});\n"],
5
- "mappings": "aAIA,IAAAA,EAIO,2CACPC,EAA4B,qBAC5BC,EAAqD,kBAErDC,EAAoC,4DAEpCC,EAGO,yCAEP,MAAMC,EAAmC,CACvC,iBAAkB,KAAG,GAAG,EACxB,gBAAiB,KAAG,GAAG,EACvB,YAAa,KAAG,GAAG,EACnB,oBAAqB,KAAG,GAAG,EAC3B,cAAe,KAAG,GAAG,CACvB,EAEMC,EAAc,CAClB,cAAeD,EACf,QAAS,CACP,aAAc,cACd,UAAW,MACb,CACF,EAEME,EAAsB,CAC1B,WAAY,IAAI,WAAW,CAAC,EAAG,EAAG,CAAC,CAAC,EACpC,aAAc,mBACd,MAAO,YACP,SAAU,eACV,YAAa,CAAE,QAAS,IAAI,WAAW,CAAC,IAAM,GAAI,CAAC,EAAG,eAAgB,CAAE,CAC1E,EAEA,IAAIC,KAEJ,YAAS,8BAA+B,IAAM,IAC5C,cAAW,IAAM,CACf,KAAG,cAAc,EAEjBA,EAAU,CACR,sBAAuB,KACpB,GAAG,EACH,gBAAgB,CAAE,cAAe,gBAAc,MAAO,CAAC,EAC1D,YAAa,KAAG,GAAG,EAAE,kBAAkB,CACrC,OAAQ,sBAAoB,QAC5B,KAAM,CAAE,UAAW,eAAgB,CACrC,CAAC,CACH,CACF,CAAC,KAED,MAAG,+DAAgE,SAAY,CAC5EH,EAAkB,iBAAyB,qBAC1C,SAAME,CAAmB,CAC3B,EAGA,MAAME,EAAS,MADF,IAAI,8BAA4BD,EAASF,CAAW,EACvC,IAAI,KAE9B,UAAOE,EAAQ,WAAW,EAAE,qBAC1B,SAAO,IAAI,qBAAmB,CAChC,KAEA,UAAOH,EAAkB,gBAAgB,EAAE,qBAAqB,CAC9D,cAAe,gBAAc,OAC7B,aAAc,cACd,UAAW,gBACX,UAAW,MACb,CAAC,KAED,UAAOI,CAAM,EAAE,QAAkC,CAC/C,UAAW,gBACX,WAAYF,EAAoB,WAChC,eAAgBA,EAAoB,YACpC,cAAe,CACb,aAAcA,EAAoB,aAClC,MAAOA,EAAoB,MAC3B,SAAUA,EAAoB,QAChC,CACF,CAAC,CACH,CAAC,KAED,MAAG,+CAAgD,SAAY,CAC5DC,EAAQ,YAAoB,kBAAkB,CAC7C,OAAQ,sBAAoB,MAC5B,KAAM,CAAC,CACT,CAAC,EACAH,EAAkB,iBAAyB,qBAC1C,SAAME,CAAmB,CAC3B,EAGA,MAAME,EAAS,MADF,IAAI,8BAA4BD,EAASF,CAAW,EACvC,IAAI,KAE9B,UAAOD,EAAkB,gBAAgB,EAAE,qBAAqB,CAC9D,cAAe,gBAAc,OAC7B,aAAc,cACd,UAAW,OACX,UAAW,MACb,CAAC,KAED,UAAOI,CAAM,EAAE,QAAkC,CAC/C,UAAW,OACX,WAAYF,EAAoB,WAChC,eAAgBA,EAAoB,YACpC,cAAe,CACb,aAAcA,EAAoB,aAClC,MAAOA,EAAoB,MAC3B,SAAUA,EAAoB,QAChC,CACF,CAAC,CACH,CAAC,KAED,MAAG,0CAA2C,SAAY,CACxD,MAAMG,EAAQ,IAAI,MAAM,wBAAwB,EAC/CL,EAAkB,iBAAyB,qBAAkB,QAAKK,CAAK,CAAC,EAEzE,MAAMC,EAAO,IAAI,8BAA4BH,EAASF,CAAW,EAEjE,QAAM,UAAOK,EAAK,IAAI,CAAC,EAAE,QAAQ,QAAQ,wBAAwB,CACnE,CAAC,CACH,CAAC",
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n CommandResultStatus,\n DeviceModelId,\n type InternalApi,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { GetChallengeCommand } from \"@internal/app-binder/command/GetChallengeCommand\";\n\nimport {\n BuildTransactionContextTask,\n type SolanaBuildContextResult,\n} from \"./BuildTransactionContextTask\";\n\nconst contextModuleMock: ContextModule = {\n getSolanaContext: vi.fn(),\n} as unknown as ContextModule;\n\nconst defaultArgs = {\n contextModule: contextModuleMock,\n options: {\n tokenAddress: \"someAddress\",\n createATA: undefined,\n },\n};\n\nconst domainSolanaPayload = {\n descriptor: new Uint8Array([1, 2, 3]),\n tokenAccount: \"someTokenAccount\",\n owner: \"someOwner\",\n contract: \"someContract\",\n certificate: { payload: new Uint8Array([0xaa, 0xbb]), keyUsageNumber: 1 },\n} as const;\n\nlet apiMock: InternalApi;\n\ndescribe(\"BuildTransactionContextTask\", () => {\n beforeEach(() => {\n vi.resetAllMocks();\n\n apiMock = {\n getDeviceSessionState: vi\n .fn()\n .mockReturnValue({ deviceModelId: DeviceModelId.NANO_X }),\n sendCommand: vi.fn().mockResolvedValue({\n status: CommandResultStatus.Success,\n data: { challenge: \"someChallenge\" },\n }),\n } as unknown as InternalApi;\n });\n\n it(\"returns context successfully when challenge command succeeds\", async () => {\n (contextModuleMock.getSolanaContext as any).mockResolvedValue(\n Right(domainSolanaPayload),\n );\n\n const task = new BuildTransactionContextTask(apiMock, defaultArgs);\n const result = await task.run();\n\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n expect.any(GetChallengeCommand),\n );\n\n expect(contextModuleMock.getSolanaContext).toHaveBeenCalledWith({\n deviceModelId: DeviceModelId.NANO_X,\n tokenAddress: \"someAddress\",\n challenge: \"someChallenge\",\n createATA: undefined,\n });\n\n expect(result).toEqual<SolanaBuildContextResult>({\n challenge: \"someChallenge\",\n descriptor: domainSolanaPayload.descriptor,\n calCertificate: domainSolanaPayload.certificate,\n addressResult: {\n tokenAccount: domainSolanaPayload.tokenAccount,\n owner: domainSolanaPayload.owner,\n contract: domainSolanaPayload.contract,\n },\n });\n });\n\n it(\"returns context when challenge command fails\", async () => {\n (apiMock.sendCommand as any).mockResolvedValue({\n status: CommandResultStatus.Error,\n data: {},\n });\n (contextModuleMock.getSolanaContext as any).mockResolvedValue(\n Right(domainSolanaPayload),\n );\n\n const task = new BuildTransactionContextTask(apiMock, defaultArgs);\n const result = await task.run();\n\n expect(contextModuleMock.getSolanaContext).toHaveBeenCalledWith({\n deviceModelId: DeviceModelId.NANO_X,\n tokenAddress: \"someAddress\",\n challenge: undefined,\n createATA: undefined,\n });\n\n expect(result).toEqual<SolanaBuildContextResult>({\n challenge: undefined,\n descriptor: domainSolanaPayload.descriptor,\n calCertificate: domainSolanaPayload.certificate,\n addressResult: {\n tokenAccount: domainSolanaPayload.tokenAccount,\n owner: domainSolanaPayload.owner,\n contract: domainSolanaPayload.contract,\n },\n });\n });\n\n it(\"throws if getSolanaContext returns Left\", async () => {\n const error = new Error(\"Solana context failure\");\n (contextModuleMock.getSolanaContext as any).mockResolvedValue(Left(error));\n\n const task = new BuildTransactionContextTask(apiMock, defaultArgs);\n\n await expect(task.run()).rejects.toThrow(\"Solana context failure\");\n });\n});\n"],
5
+ "mappings": "aAIA,IAAAA,EAIO,2CACPC,EAA4B,qBAC5BC,EAAqD,kBAErDC,EAAoC,4DAEpCC,EAGO,yCAEP,MAAMC,EAAmC,CACvC,iBAAkB,KAAG,GAAG,CAC1B,EAEMC,EAAc,CAClB,cAAeD,EACf,QAAS,CACP,aAAc,cACd,UAAW,MACb,CACF,EAEME,EAAsB,CAC1B,WAAY,IAAI,WAAW,CAAC,EAAG,EAAG,CAAC,CAAC,EACpC,aAAc,mBACd,MAAO,YACP,SAAU,eACV,YAAa,CAAE,QAAS,IAAI,WAAW,CAAC,IAAM,GAAI,CAAC,EAAG,eAAgB,CAAE,CAC1E,EAEA,IAAIC,KAEJ,YAAS,8BAA+B,IAAM,IAC5C,cAAW,IAAM,CACf,KAAG,cAAc,EAEjBA,EAAU,CACR,sBAAuB,KACpB,GAAG,EACH,gBAAgB,CAAE,cAAe,gBAAc,MAAO,CAAC,EAC1D,YAAa,KAAG,GAAG,EAAE,kBAAkB,CACrC,OAAQ,sBAAoB,QAC5B,KAAM,CAAE,UAAW,eAAgB,CACrC,CAAC,CACH,CACF,CAAC,KAED,MAAG,+DAAgE,SAAY,CAC5EH,EAAkB,iBAAyB,qBAC1C,SAAME,CAAmB,CAC3B,EAGA,MAAME,EAAS,MADF,IAAI,8BAA4BD,EAASF,CAAW,EACvC,IAAI,KAE9B,UAAOE,EAAQ,WAAW,EAAE,qBAC1B,SAAO,IAAI,qBAAmB,CAChC,KAEA,UAAOH,EAAkB,gBAAgB,EAAE,qBAAqB,CAC9D,cAAe,gBAAc,OAC7B,aAAc,cACd,UAAW,gBACX,UAAW,MACb,CAAC,KAED,UAAOI,CAAM,EAAE,QAAkC,CAC/C,UAAW,gBACX,WAAYF,EAAoB,WAChC,eAAgBA,EAAoB,YACpC,cAAe,CACb,aAAcA,EAAoB,aAClC,MAAOA,EAAoB,MAC3B,SAAUA,EAAoB,QAChC,CACF,CAAC,CACH,CAAC,KAED,MAAG,+CAAgD,SAAY,CAC5DC,EAAQ,YAAoB,kBAAkB,CAC7C,OAAQ,sBAAoB,MAC5B,KAAM,CAAC,CACT,CAAC,EACAH,EAAkB,iBAAyB,qBAC1C,SAAME,CAAmB,CAC3B,EAGA,MAAME,EAAS,MADF,IAAI,8BAA4BD,EAASF,CAAW,EACvC,IAAI,KAE9B,UAAOD,EAAkB,gBAAgB,EAAE,qBAAqB,CAC9D,cAAe,gBAAc,OAC7B,aAAc,cACd,UAAW,OACX,UAAW,MACb,CAAC,KAED,UAAOI,CAAM,EAAE,QAAkC,CAC/C,UAAW,OACX,WAAYF,EAAoB,WAChC,eAAgBA,EAAoB,YACpC,cAAe,CACb,aAAcA,EAAoB,aAClC,MAAOA,EAAoB,MAC3B,SAAUA,EAAoB,QAChC,CACF,CAAC,CACH,CAAC,KAED,MAAG,0CAA2C,SAAY,CACxD,MAAMG,EAAQ,IAAI,MAAM,wBAAwB,EAC/CL,EAAkB,iBAAyB,qBAAkB,QAAKK,CAAK,CAAC,EAEzE,MAAMC,EAAO,IAAI,8BAA4BH,EAASF,CAAW,EAEjE,QAAM,UAAOK,EAAK,IAAI,CAAC,EAAE,QAAQ,QAAQ,wBAAwB,CACnE,CAAC,CACH,CAAC",
6
6
  "names": ["import_device_management_kit", "import_purify_ts", "import_vitest", "import_GetChallengeCommand", "import_BuildTransactionContextTask", "contextModuleMock", "defaultArgs", "domainSolanaPayload", "apiMock", "result", "error", "task"]
7
7
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ledgerhq/device-signer-kit-solana",
3
- "version": "1.4.0",
3
+ "version": "1.4.1",
4
4
  "private": false,
5
5
  "license": "Apache-2.0",
6
6
  "exports": {
@@ -35,7 +35,7 @@
35
35
  "test:coverage": "vitest run --coverage"
36
36
  },
37
37
  "dependencies": {
38
- "@ledgerhq/context-module": "workspace:*",
38
+ "@ledgerhq/context-module": "^1.10.0",
39
39
  "@ledgerhq/signer-utils": "^1.1.0",
40
40
  "@solana/spl-token": "catalog:",
41
41
  "@solana/web3.js": "catalog:",
@@ -1,2 +1,2 @@
1
- import{ApduBuilder as t,ApduParser as i,CommandResultFactory as e,InvalidStatusWordError as m}from"@ledgerhq/device-management-kit";import{CommandErrorHelper as d}from"@ledgerhq/signer-utils";import{Maybe as s}from"purify-ts";import{PublicKeyDisplayMode as n}from"../../../api/model/PublicKeyDisplayMode";import{SOLANA_APP_ERRORS as u,SolanaAppCommandErrorFactory as l}from"./utils/SolanaApplicationErrors";class R{errorHelper=new d(u,l);args;constructor(o){this.args=o}getApdu(){return new t({cla:224,ins:4,p1:0,p2:0}).build()}parseResponse(o){return s.fromNullable(this.errorHelper.getError(o)).orDefaultLazy(()=>{const r=new i(o).extractFieldByLength(5);if(!r||r.length!==5||r.some(a=>a===void 0))return e({error:new m("Invalid response")});const p={blindSigningEnabled:!!r[0],pubKeyDisplayMode:r[1]===0?n.LONG:n.SHORT,version:`${r[2]}.${r[3]}.${r[4]}`};return e({data:p})})}}export{R as GetAppConfigurationCommand};
1
+ import{ApduBuilder as t,ApduParser as i,CommandResultFactory as e,InvalidStatusWordError as m}from"@ledgerhq/device-management-kit";import{CommandErrorHelper as d}from"@ledgerhq/signer-utils";import{Maybe as s}from"purify-ts";import{PublicKeyDisplayMode as n}from"../../../api/model/PublicKeyDisplayMode";import{SOLANA_APP_ERRORS as u,SolanaAppCommandErrorFactory as l}from"./utils/SolanaApplicationErrors";class R{name="getAppConfiguration";errorHelper=new d(u,l);args;constructor(o){this.args=o}getApdu(){return new t({cla:224,ins:4,p1:0,p2:0}).build()}parseResponse(o){return s.fromNullable(this.errorHelper.getError(o)).orDefaultLazy(()=>{const r=new i(o).extractFieldByLength(5);if(!r||r.length!==5||r.some(a=>a===void 0))return e({error:new m("Invalid response")});const p={blindSigningEnabled:!!r[0],pubKeyDisplayMode:r[1]===0?n.LONG:n.SHORT,version:`${r[2]}.${r[3]}.${r[4]}`};return e({data:p})})}}export{R as GetAppConfigurationCommand};
2
2
  //# sourceMappingURL=GetAppConfigurationCommand.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/command/GetAppConfigurationCommand.ts"],
4
- "sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport { type AppConfiguration } from \"@api/model/AppConfiguration\";\nimport { PublicKeyDisplayMode } from \"@api/model/PublicKeyDisplayMode\";\n\nimport {\n SOLANA_APP_ERRORS,\n SolanaAppCommandErrorFactory,\n type SolanaAppErrorCodes,\n} from \"./utils/SolanaApplicationErrors\";\n\ntype GetAppConfigurationCommandArgs = void;\n\nexport class GetAppConfigurationCommand\n implements\n Command<\n AppConfiguration,\n GetAppConfigurationCommandArgs,\n SolanaAppErrorCodes\n >\n{\n private readonly errorHelper = new CommandErrorHelper<\n AppConfiguration,\n SolanaAppErrorCodes\n >(SOLANA_APP_ERRORS, SolanaAppCommandErrorFactory);\n\n args: GetAppConfigurationCommandArgs;\n\n constructor(args: GetAppConfigurationCommandArgs) {\n this.args = args;\n }\n\n getApdu(): Apdu {\n return new ApduBuilder({\n cla: 0xe0,\n ins: 0x04,\n p1: 0x00,\n p2: 0x00,\n }).build();\n }\n\n parseResponse(\n response: ApduResponse,\n ): CommandResult<AppConfiguration, SolanaAppErrorCodes> {\n return Maybe.fromNullable(\n this.errorHelper.getError(response),\n ).orDefaultLazy(() => {\n const parser = new ApduParser(response);\n const buffer = parser.extractFieldByLength(5);\n if (\n !buffer ||\n buffer.length !== 5 ||\n buffer.some((element) => element === undefined)\n ) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Invalid response\"),\n });\n }\n\n const config: AppConfiguration = {\n blindSigningEnabled: Boolean(buffer[0]),\n pubKeyDisplayMode:\n buffer[1] === 0\n ? PublicKeyDisplayMode.LONG\n : PublicKeyDisplayMode.SHORT,\n version: `${buffer[2]}.${buffer[3]}.${buffer[4]}`,\n };\n\n return CommandResultFactory({\n data: config,\n });\n });\n }\n}\n"],
5
- "mappings": "AAAA,OAEE,eAAAA,EACA,cAAAC,EAIA,wBAAAC,EACA,0BAAAC,MACK,kCACP,OAAS,sBAAAC,MAA0B,yBACnC,OAAS,SAAAC,MAAa,YAGtB,OAAS,wBAAAC,MAA4B,kCAErC,OACE,qBAAAC,EACA,gCAAAC,MAEK,kCAIA,MAAMC,CAOb,CACmB,YAAc,IAAIL,EAGjCG,EAAmBC,CAA4B,EAEjD,KAEA,YAAYE,EAAsC,CAChD,KAAK,KAAOA,CACd,CAEA,SAAgB,CACd,OAAO,IAAIV,EAAY,CACrB,IAAK,IACL,IAAK,EACL,GAAI,EACJ,GAAI,CACN,CAAC,EAAE,MAAM,CACX,CAEA,cACEW,EACsD,CACtD,OAAON,EAAM,aACX,KAAK,YAAY,SAASM,CAAQ,CACpC,EAAE,cAAc,IAAM,CAEpB,MAAMC,EADS,IAAIX,EAAWU,CAAQ,EAChB,qBAAqB,CAAC,EAC5C,GACE,CAACC,GACDA,EAAO,SAAW,GAClBA,EAAO,KAAMC,GAAYA,IAAY,MAAS,EAE9C,OAAOX,EAAqB,CAC1B,MAAO,IAAIC,EAAuB,kBAAkB,CACtD,CAAC,EAGH,MAAMW,EAA2B,CAC/B,oBAAqB,EAAQF,EAAO,CAAC,EACrC,kBACEA,EAAO,CAAC,IAAM,EACVN,EAAqB,KACrBA,EAAqB,MAC3B,QAAS,GAAGM,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,CAAC,EACjD,EAEA,OAAOV,EAAqB,CAC1B,KAAMY,CACR,CAAC,CACH,CAAC,CACH,CACF",
4
+ "sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport { type AppConfiguration } from \"@api/model/AppConfiguration\";\nimport { PublicKeyDisplayMode } from \"@api/model/PublicKeyDisplayMode\";\n\nimport {\n SOLANA_APP_ERRORS,\n SolanaAppCommandErrorFactory,\n type SolanaAppErrorCodes,\n} from \"./utils/SolanaApplicationErrors\";\n\ntype GetAppConfigurationCommandArgs = void;\n\nexport class GetAppConfigurationCommand\n implements\n Command<\n AppConfiguration,\n GetAppConfigurationCommandArgs,\n SolanaAppErrorCodes\n >\n{\n readonly name = \"getAppConfiguration\";\n private readonly errorHelper = new CommandErrorHelper<\n AppConfiguration,\n SolanaAppErrorCodes\n >(SOLANA_APP_ERRORS, SolanaAppCommandErrorFactory);\n\n args: GetAppConfigurationCommandArgs;\n\n constructor(args: GetAppConfigurationCommandArgs) {\n this.args = args;\n }\n\n getApdu(): Apdu {\n return new ApduBuilder({\n cla: 0xe0,\n ins: 0x04,\n p1: 0x00,\n p2: 0x00,\n }).build();\n }\n\n parseResponse(\n response: ApduResponse,\n ): CommandResult<AppConfiguration, SolanaAppErrorCodes> {\n return Maybe.fromNullable(\n this.errorHelper.getError(response),\n ).orDefaultLazy(() => {\n const parser = new ApduParser(response);\n const buffer = parser.extractFieldByLength(5);\n if (\n !buffer ||\n buffer.length !== 5 ||\n buffer.some((element) => element === undefined)\n ) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Invalid response\"),\n });\n }\n\n const config: AppConfiguration = {\n blindSigningEnabled: Boolean(buffer[0]),\n pubKeyDisplayMode:\n buffer[1] === 0\n ? PublicKeyDisplayMode.LONG\n : PublicKeyDisplayMode.SHORT,\n version: `${buffer[2]}.${buffer[3]}.${buffer[4]}`,\n };\n\n return CommandResultFactory({\n data: config,\n });\n });\n }\n}\n"],
5
+ "mappings": "AAAA,OAEE,eAAAA,EACA,cAAAC,EAIA,wBAAAC,EACA,0BAAAC,MACK,kCACP,OAAS,sBAAAC,MAA0B,yBACnC,OAAS,SAAAC,MAAa,YAGtB,OAAS,wBAAAC,MAA4B,kCAErC,OACE,qBAAAC,EACA,gCAAAC,MAEK,kCAIA,MAAMC,CAOb,CACW,KAAO,sBACC,YAAc,IAAIL,EAGjCG,EAAmBC,CAA4B,EAEjD,KAEA,YAAYE,EAAsC,CAChD,KAAK,KAAOA,CACd,CAEA,SAAgB,CACd,OAAO,IAAIV,EAAY,CACrB,IAAK,IACL,IAAK,EACL,GAAI,EACJ,GAAI,CACN,CAAC,EAAE,MAAM,CACX,CAEA,cACEW,EACsD,CACtD,OAAON,EAAM,aACX,KAAK,YAAY,SAASM,CAAQ,CACpC,EAAE,cAAc,IAAM,CAEpB,MAAMC,EADS,IAAIX,EAAWU,CAAQ,EAChB,qBAAqB,CAAC,EAC5C,GACE,CAACC,GACDA,EAAO,SAAW,GAClBA,EAAO,KAAMC,GAAYA,IAAY,MAAS,EAE9C,OAAOX,EAAqB,CAC1B,MAAO,IAAIC,EAAuB,kBAAkB,CACtD,CAAC,EAGH,MAAMW,EAA2B,CAC/B,oBAAqB,EAAQF,EAAO,CAAC,EACrC,kBACEA,EAAO,CAAC,IAAM,EACVN,EAAqB,KACrBA,EAAqB,MAC3B,QAAS,GAAGM,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,CAAC,EACjD,EAEA,OAAOV,EAAqB,CAC1B,KAAMY,CACR,CAAC,CACH,CAAC,CACH,CACF",
6
6
  "names": ["ApduBuilder", "ApduParser", "CommandResultFactory", "InvalidStatusWordError", "CommandErrorHelper", "Maybe", "PublicKeyDisplayMode", "SOLANA_APP_ERRORS", "SolanaAppCommandErrorFactory", "GetAppConfigurationCommand", "args", "response", "buffer", "element", "config"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{ApduResponse as s,CommandResultFactory as a,isSuccessCommandResult as o}from"@ledgerhq/device-management-kit";import{PublicKeyDisplayMode as n}from"../../../api/model/PublicKeyDisplayMode";import{GetAppConfigurationCommand as i}from"./GetAppConfigurationCommand";const p=new Uint8Array([224,4,0,0,0]),c=new Uint8Array([1,0,2,5,10]),d=new s({statusCode:Uint8Array.from([144,0]),data:c}),l=new Uint8Array([1,1,2,5,10]),u=new s({statusCode:Uint8Array.from([144,0]),data:l});describe("GetAppConfigurationCommand",()=>{let t;beforeEach(()=>{t=new i,vi.clearAllMocks(),vi.importActual("@ledgerhq/device-management-kit")}),describe("getApdu",()=>{it("should return the correct APDU",()=>{const e=t.getApdu();expect(e.getRawApdu()).toEqual(p)})}),describe("parseResponse",()=>{it("should parse the response correctly",()=>{const e=t.parseResponse(d);expect(e).toStrictEqual(a({data:{blindSigningEnabled:!0,pubKeyDisplayMode:n.LONG,version:"2.5.10"}}))}),it("should parse the response correctly with short pub key display mode",()=>{const e=t.parseResponse(u);expect(e).toStrictEqual(a({data:{blindSigningEnabled:!0,pubKeyDisplayMode:n.SHORT,version:"2.5.10"}}))}),describe("error handling",()=>{it("should return error if response is not success",()=>{const e=new s({statusCode:Uint8Array.from([106,130]),data:new Uint8Array(0)}),r=t.parseResponse(e);expect(o(r)).toBe(!1),o(r)?assert.fail("Expected error"):expect(r.error).toEqual(expect.objectContaining({_tag:"SolanaAppCommandError",errorCode:"6a82",message:"Invalid off-chain message format"}))}),it("should return error if response is not success",()=>{const e=new s({statusCode:Uint8Array.from([106,130]),data:new Uint8Array(0)}),r=t.parseResponse(e);expect(o(r)).toBe(!1),o(r)?assert.fail("Expected error"):expect(r.error).toEqual(expect.objectContaining({_tag:"SolanaAppCommandError",errorCode:"6a82",message:"Invalid off-chain message format"}))})})})});
1
+ import{ApduResponse as s,CommandResultFactory as a,isSuccessCommandResult as o}from"@ledgerhq/device-management-kit";import{PublicKeyDisplayMode as n}from"../../../api/model/PublicKeyDisplayMode";import{GetAppConfigurationCommand as i}from"./GetAppConfigurationCommand";const p=new Uint8Array([224,4,0,0,0]),c=new Uint8Array([1,0,2,5,10]),d=new s({statusCode:Uint8Array.from([144,0]),data:c}),l=new Uint8Array([1,1,2,5,10]),u=new s({statusCode:Uint8Array.from([144,0]),data:l});describe("GetAppConfigurationCommand",()=>{let r;beforeEach(()=>{r=new i,vi.clearAllMocks(),vi.importActual("@ledgerhq/device-management-kit")}),describe("name",()=>{it("should be 'getAppConfiguration'",()=>{expect(r.name).toBe("getAppConfiguration")})}),describe("getApdu",()=>{it("should return the correct APDU",()=>{const e=r.getApdu();expect(e.getRawApdu()).toEqual(p)})}),describe("parseResponse",()=>{it("should parse the response correctly",()=>{const e=r.parseResponse(d);expect(e).toStrictEqual(a({data:{blindSigningEnabled:!0,pubKeyDisplayMode:n.LONG,version:"2.5.10"}}))}),it("should parse the response correctly with short pub key display mode",()=>{const e=r.parseResponse(u);expect(e).toStrictEqual(a({data:{blindSigningEnabled:!0,pubKeyDisplayMode:n.SHORT,version:"2.5.10"}}))}),describe("error handling",()=>{it("should return error if response is not success",()=>{const e=new s({statusCode:Uint8Array.from([106,130]),data:new Uint8Array(0)}),t=r.parseResponse(e);expect(o(t)).toBe(!1),o(t)?assert.fail("Expected error"):expect(t.error).toEqual(expect.objectContaining({_tag:"SolanaAppCommandError",errorCode:"6a82",message:"Invalid off-chain message format"}))}),it("should return error if response is not success",()=>{const e=new s({statusCode:Uint8Array.from([106,130]),data:new Uint8Array(0)}),t=r.parseResponse(e);expect(o(t)).toBe(!1),o(t)?assert.fail("Expected error"):expect(t.error).toEqual(expect.objectContaining({_tag:"SolanaAppCommandError",errorCode:"6a82",message:"Invalid off-chain message format"}))})})})});
2
2
  //# sourceMappingURL=GetAppConfigurationCommand.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/command/GetAppConfigurationCommand.test.ts"],
4
- "sourcesContent": ["import {\n ApduResponse,\n CommandResultFactory,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { PublicKeyDisplayMode } from \"@api/model/PublicKeyDisplayMode\";\n\nimport { GetAppConfigurationCommand } from \"./GetAppConfigurationCommand\";\n\nconst GET_APP_CONFIG_APDU = new Uint8Array([0xe0, 0x04, 0x00, 0x00, 0x00]);\n\nconst GET_APP_CONFIG_RESPONSE_DATA = new Uint8Array([\n 0x01, 0x00, 0x02, 0x05, 0x0a,\n]);\n\nconst GET_APP_CONFIG_RESPONSE = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: GET_APP_CONFIG_RESPONSE_DATA,\n});\n\nconst GET_APP_CONFIG_RESPONSE_DATA_SHORT_PUB_KEY_DISPLAY_MODE = new Uint8Array([\n 0x01, 0x01, 0x02, 0x05, 0x0a,\n]);\n\nconst GET_APP_CONFIG_RESPONSE_SHORT_PUB_KEY_DISPLAY_MODE = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: GET_APP_CONFIG_RESPONSE_DATA_SHORT_PUB_KEY_DISPLAY_MODE,\n});\n\ndescribe(\"GetAppConfigurationCommand\", () => {\n let command: GetAppConfigurationCommand;\n\n beforeEach(() => {\n command = new GetAppConfigurationCommand();\n vi.clearAllMocks();\n vi.importActual(\"@ledgerhq/device-management-kit\");\n });\n\n describe(\"getApdu\", () => {\n it(\"should return the correct APDU\", () => {\n const apdu = command.getApdu();\n expect(apdu.getRawApdu()).toEqual(GET_APP_CONFIG_APDU);\n });\n });\n\n describe(\"parseResponse\", () => {\n it(\"should parse the response correctly\", () => {\n const parsed = command.parseResponse(GET_APP_CONFIG_RESPONSE);\n expect(parsed).toStrictEqual(\n CommandResultFactory({\n data: {\n blindSigningEnabled: true,\n pubKeyDisplayMode: PublicKeyDisplayMode.LONG,\n version: \"2.5.10\",\n },\n }),\n );\n });\n\n it(\"should parse the response correctly with short pub key display mode\", () => {\n const parsed = command.parseResponse(\n GET_APP_CONFIG_RESPONSE_SHORT_PUB_KEY_DISPLAY_MODE,\n );\n expect(parsed).toStrictEqual(\n CommandResultFactory({\n data: {\n blindSigningEnabled: true,\n pubKeyDisplayMode: PublicKeyDisplayMode.SHORT,\n version: \"2.5.10\",\n },\n }),\n );\n });\n\n describe(\"error handling\", () => {\n it(\"should return error if response is not success\", () => {\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x6a, 0x82]),\n data: new Uint8Array(0),\n });\n const result = command.parseResponse(response);\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n expect(result.error).toEqual(\n expect.objectContaining({\n _tag: \"SolanaAppCommandError\",\n errorCode: \"6a82\",\n message: \"Invalid off-chain message format\",\n }),\n );\n } else {\n assert.fail(\"Expected error\");\n }\n });\n\n it(\"should return error if response is not success\", () => {\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x6a, 0x82]),\n data: new Uint8Array(0),\n });\n const result = command.parseResponse(response);\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n expect(result.error).toEqual(\n expect.objectContaining({\n _tag: \"SolanaAppCommandError\",\n errorCode: \"6a82\",\n message: \"Invalid off-chain message format\",\n }),\n );\n } else {\n assert.fail(\"Expected error\");\n }\n });\n });\n });\n});\n"],
5
- "mappings": "AAAA,OACE,gBAAAA,EACA,wBAAAC,EACA,0BAAAC,MACK,kCAEP,OAAS,wBAAAC,MAA4B,kCAErC,OAAS,8BAAAC,MAAkC,+BAE3C,MAAMC,EAAsB,IAAI,WAAW,CAAC,IAAM,EAAM,EAAM,EAAM,CAAI,CAAC,EAEnEC,EAA+B,IAAI,WAAW,CAClD,EAAM,EAAM,EAAM,EAAM,EAC1B,CAAC,EAEKC,EAA0B,IAAIP,EAAa,CAC/C,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAMM,CACR,CAAC,EAEKE,EAA0D,IAAI,WAAW,CAC7E,EAAM,EAAM,EAAM,EAAM,EAC1B,CAAC,EAEKC,EAAqD,IAAIT,EAAa,CAC1E,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAMQ,CACR,CAAC,EAED,SAAS,6BAA8B,IAAM,CAC3C,IAAIE,EAEJ,WAAW,IAAM,CACfA,EAAU,IAAIN,EACd,GAAG,cAAc,EACjB,GAAG,aAAa,iCAAiC,CACnD,CAAC,EAED,SAAS,UAAW,IAAM,CACxB,GAAG,iCAAkC,IAAM,CACzC,MAAMO,EAAOD,EAAQ,QAAQ,EAC7B,OAAOC,EAAK,WAAW,CAAC,EAAE,QAAQN,CAAmB,CACvD,CAAC,CACH,CAAC,EAED,SAAS,gBAAiB,IAAM,CAC9B,GAAG,sCAAuC,IAAM,CAC9C,MAAMO,EAASF,EAAQ,cAAcH,CAAuB,EAC5D,OAAOK,CAAM,EAAE,cACbX,EAAqB,CACnB,KAAM,CACJ,oBAAqB,GACrB,kBAAmBE,EAAqB,KACxC,QAAS,QACX,CACF,CAAC,CACH,CACF,CAAC,EAED,GAAG,sEAAuE,IAAM,CAC9E,MAAMS,EAASF,EAAQ,cACrBD,CACF,EACA,OAAOG,CAAM,EAAE,cACbX,EAAqB,CACnB,KAAM,CACJ,oBAAqB,GACrB,kBAAmBE,EAAqB,MACxC,QAAS,QACX,CACF,CAAC,CACH,CACF,CAAC,EAED,SAAS,iBAAkB,IAAM,CAC/B,GAAG,iDAAkD,IAAM,CACzD,MAAMU,EAAW,IAAIb,EAAa,CAChC,WAAY,WAAW,KAAK,CAAC,IAAM,GAAI,CAAC,EACxC,KAAM,IAAI,WAAW,CAAC,CACxB,CAAC,EACKc,EAASJ,EAAQ,cAAcG,CAAQ,EAC7C,OAAOX,EAAuBY,CAAM,CAAC,EAAE,KAAK,EAAK,EAC5CZ,EAAuBY,CAAM,EAShC,OAAO,KAAK,gBAAgB,EAR5B,OAAOA,EAAO,KAAK,EAAE,QACnB,OAAO,iBAAiB,CACtB,KAAM,wBACN,UAAW,OACX,QAAS,kCACX,CAAC,CACH,CAIJ,CAAC,EAED,GAAG,iDAAkD,IAAM,CACzD,MAAMD,EAAW,IAAIb,EAAa,CAChC,WAAY,WAAW,KAAK,CAAC,IAAM,GAAI,CAAC,EACxC,KAAM,IAAI,WAAW,CAAC,CACxB,CAAC,EACKc,EAASJ,EAAQ,cAAcG,CAAQ,EAC7C,OAAOX,EAAuBY,CAAM,CAAC,EAAE,KAAK,EAAK,EAC5CZ,EAAuBY,CAAM,EAShC,OAAO,KAAK,gBAAgB,EAR5B,OAAOA,EAAO,KAAK,EAAE,QACnB,OAAO,iBAAiB,CACtB,KAAM,wBACN,UAAW,OACX,QAAS,kCACX,CAAC,CACH,CAIJ,CAAC,CACH,CAAC,CACH,CAAC,CACH,CAAC",
4
+ "sourcesContent": ["import {\n ApduResponse,\n CommandResultFactory,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { PublicKeyDisplayMode } from \"@api/model/PublicKeyDisplayMode\";\n\nimport { GetAppConfigurationCommand } from \"./GetAppConfigurationCommand\";\n\nconst GET_APP_CONFIG_APDU = new Uint8Array([0xe0, 0x04, 0x00, 0x00, 0x00]);\n\nconst GET_APP_CONFIG_RESPONSE_DATA = new Uint8Array([\n 0x01, 0x00, 0x02, 0x05, 0x0a,\n]);\n\nconst GET_APP_CONFIG_RESPONSE = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: GET_APP_CONFIG_RESPONSE_DATA,\n});\n\nconst GET_APP_CONFIG_RESPONSE_DATA_SHORT_PUB_KEY_DISPLAY_MODE = new Uint8Array([\n 0x01, 0x01, 0x02, 0x05, 0x0a,\n]);\n\nconst GET_APP_CONFIG_RESPONSE_SHORT_PUB_KEY_DISPLAY_MODE = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: GET_APP_CONFIG_RESPONSE_DATA_SHORT_PUB_KEY_DISPLAY_MODE,\n});\n\ndescribe(\"GetAppConfigurationCommand\", () => {\n let command: GetAppConfigurationCommand;\n\n beforeEach(() => {\n command = new GetAppConfigurationCommand();\n vi.clearAllMocks();\n vi.importActual(\"@ledgerhq/device-management-kit\");\n });\n\n describe(\"name\", () => {\n it(\"should be 'getAppConfiguration'\", () => {\n expect(command.name).toBe(\"getAppConfiguration\");\n });\n });\n\n describe(\"getApdu\", () => {\n it(\"should return the correct APDU\", () => {\n const apdu = command.getApdu();\n expect(apdu.getRawApdu()).toEqual(GET_APP_CONFIG_APDU);\n });\n });\n\n describe(\"parseResponse\", () => {\n it(\"should parse the response correctly\", () => {\n const parsed = command.parseResponse(GET_APP_CONFIG_RESPONSE);\n expect(parsed).toStrictEqual(\n CommandResultFactory({\n data: {\n blindSigningEnabled: true,\n pubKeyDisplayMode: PublicKeyDisplayMode.LONG,\n version: \"2.5.10\",\n },\n }),\n );\n });\n\n it(\"should parse the response correctly with short pub key display mode\", () => {\n const parsed = command.parseResponse(\n GET_APP_CONFIG_RESPONSE_SHORT_PUB_KEY_DISPLAY_MODE,\n );\n expect(parsed).toStrictEqual(\n CommandResultFactory({\n data: {\n blindSigningEnabled: true,\n pubKeyDisplayMode: PublicKeyDisplayMode.SHORT,\n version: \"2.5.10\",\n },\n }),\n );\n });\n\n describe(\"error handling\", () => {\n it(\"should return error if response is not success\", () => {\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x6a, 0x82]),\n data: new Uint8Array(0),\n });\n const result = command.parseResponse(response);\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n expect(result.error).toEqual(\n expect.objectContaining({\n _tag: \"SolanaAppCommandError\",\n errorCode: \"6a82\",\n message: \"Invalid off-chain message format\",\n }),\n );\n } else {\n assert.fail(\"Expected error\");\n }\n });\n\n it(\"should return error if response is not success\", () => {\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x6a, 0x82]),\n data: new Uint8Array(0),\n });\n const result = command.parseResponse(response);\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n expect(result.error).toEqual(\n expect.objectContaining({\n _tag: \"SolanaAppCommandError\",\n errorCode: \"6a82\",\n message: \"Invalid off-chain message format\",\n }),\n );\n } else {\n assert.fail(\"Expected error\");\n }\n });\n });\n });\n});\n"],
5
+ "mappings": "AAAA,OACE,gBAAAA,EACA,wBAAAC,EACA,0BAAAC,MACK,kCAEP,OAAS,wBAAAC,MAA4B,kCAErC,OAAS,8BAAAC,MAAkC,+BAE3C,MAAMC,EAAsB,IAAI,WAAW,CAAC,IAAM,EAAM,EAAM,EAAM,CAAI,CAAC,EAEnEC,EAA+B,IAAI,WAAW,CAClD,EAAM,EAAM,EAAM,EAAM,EAC1B,CAAC,EAEKC,EAA0B,IAAIP,EAAa,CAC/C,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAMM,CACR,CAAC,EAEKE,EAA0D,IAAI,WAAW,CAC7E,EAAM,EAAM,EAAM,EAAM,EAC1B,CAAC,EAEKC,EAAqD,IAAIT,EAAa,CAC1E,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAMQ,CACR,CAAC,EAED,SAAS,6BAA8B,IAAM,CAC3C,IAAIE,EAEJ,WAAW,IAAM,CACfA,EAAU,IAAIN,EACd,GAAG,cAAc,EACjB,GAAG,aAAa,iCAAiC,CACnD,CAAC,EAED,SAAS,OAAQ,IAAM,CACrB,GAAG,kCAAmC,IAAM,CAC1C,OAAOM,EAAQ,IAAI,EAAE,KAAK,qBAAqB,CACjD,CAAC,CACH,CAAC,EAED,SAAS,UAAW,IAAM,CACxB,GAAG,iCAAkC,IAAM,CACzC,MAAMC,EAAOD,EAAQ,QAAQ,EAC7B,OAAOC,EAAK,WAAW,CAAC,EAAE,QAAQN,CAAmB,CACvD,CAAC,CACH,CAAC,EAED,SAAS,gBAAiB,IAAM,CAC9B,GAAG,sCAAuC,IAAM,CAC9C,MAAMO,EAASF,EAAQ,cAAcH,CAAuB,EAC5D,OAAOK,CAAM,EAAE,cACbX,EAAqB,CACnB,KAAM,CACJ,oBAAqB,GACrB,kBAAmBE,EAAqB,KACxC,QAAS,QACX,CACF,CAAC,CACH,CACF,CAAC,EAED,GAAG,sEAAuE,IAAM,CAC9E,MAAMS,EAASF,EAAQ,cACrBD,CACF,EACA,OAAOG,CAAM,EAAE,cACbX,EAAqB,CACnB,KAAM,CACJ,oBAAqB,GACrB,kBAAmBE,EAAqB,MACxC,QAAS,QACX,CACF,CAAC,CACH,CACF,CAAC,EAED,SAAS,iBAAkB,IAAM,CAC/B,GAAG,iDAAkD,IAAM,CACzD,MAAMU,EAAW,IAAIb,EAAa,CAChC,WAAY,WAAW,KAAK,CAAC,IAAM,GAAI,CAAC,EACxC,KAAM,IAAI,WAAW,CAAC,CACxB,CAAC,EACKc,EAASJ,EAAQ,cAAcG,CAAQ,EAC7C,OAAOX,EAAuBY,CAAM,CAAC,EAAE,KAAK,EAAK,EAC5CZ,EAAuBY,CAAM,EAShC,OAAO,KAAK,gBAAgB,EAR5B,OAAOA,EAAO,KAAK,EAAE,QACnB,OAAO,iBAAiB,CACtB,KAAM,wBACN,UAAW,OACX,QAAS,kCACX,CAAC,CACH,CAIJ,CAAC,EAED,GAAG,iDAAkD,IAAM,CACzD,MAAMD,EAAW,IAAIb,EAAa,CAChC,WAAY,WAAW,KAAK,CAAC,IAAM,GAAI,CAAC,EACxC,KAAM,IAAI,WAAW,CAAC,CACxB,CAAC,EACKc,EAASJ,EAAQ,cAAcG,CAAQ,EAC7C,OAAOX,EAAuBY,CAAM,CAAC,EAAE,KAAK,EAAK,EAC5CZ,EAAuBY,CAAM,EAShC,OAAO,KAAK,gBAAgB,EAR5B,OAAOA,EAAO,KAAK,EAAE,QACnB,OAAO,iBAAiB,CACtB,KAAM,wBACN,UAAW,OACX,QAAS,kCACX,CAAC,CACH,CAIJ,CAAC,CACH,CAAC,CACH,CAAC,CACH,CAAC",
6
6
  "names": ["ApduResponse", "CommandResultFactory", "isSuccessCommandResult", "PublicKeyDisplayMode", "GetAppConfigurationCommand", "GET_APP_CONFIG_APDU", "GET_APP_CONFIG_RESPONSE_DATA", "GET_APP_CONFIG_RESPONSE", "GET_APP_CONFIG_RESPONSE_DATA_SHORT_PUB_KEY_DISPLAY_MODE", "GET_APP_CONFIG_RESPONSE_SHORT_PUB_KEY_DISPLAY_MODE", "command", "apdu", "parsed", "response", "result"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{ApduBuilder as t,ApduParser as p,CommandResultFactory as o,InvalidStatusWordError as l}from"@ledgerhq/device-management-kit";import{CommandErrorHelper as s}from"@ledgerhq/signer-utils";import{Maybe as m}from"purify-ts";import{SOLANA_APP_ERRORS as d,SolanaAppCommandErrorFactory as C}from"./utils/SolanaApplicationErrors";const i=224,u=32,A=0,c=0,n=4;class S{errorHelper=new s(d,C);getApdu(){return new t({cla:i,ins:u,p1:A,p2:c}).build()}parseResponse(r){return m.fromNullable(this.errorHelper.getError(r)).orDefaultLazy(()=>{const e=new p(r);if(e.testMinimalLength(n)===!1)return o({error:new l("Challenge key is missing")});const a=e.encodeToHexaString(e.extractFieldByLength(n));return o({data:{challenge:a}})})}}export{S as GetChallengeCommand};
1
+ import{ApduBuilder as t,ApduParser as l,CommandResultFactory as o,InvalidStatusWordError as p}from"@ledgerhq/device-management-kit";import{CommandErrorHelper as s}from"@ledgerhq/signer-utils";import{Maybe as m}from"purify-ts";import{SOLANA_APP_ERRORS as d,SolanaAppCommandErrorFactory as C}from"./utils/SolanaApplicationErrors";const i=224,u=32,g=0,A=0,n=4;class S{name="getChallenge";errorHelper=new s(d,C);getApdu(){return new t({cla:i,ins:u,p1:g,p2:A}).build()}parseResponse(r){return m.fromNullable(this.errorHelper.getError(r)).orDefaultLazy(()=>{const e=new l(r);if(e.testMinimalLength(n)===!1)return o({error:new p("Challenge key is missing")});const a=e.encodeToHexaString(e.extractFieldByLength(n));return o({data:{challenge:a}})})}}export{S as GetChallengeCommand};
2
2
  //# sourceMappingURL=GetChallengeCommand.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/command/GetChallengeCommand.ts"],
4
- "sourcesContent": ["// https://github.com/LedgerHQ/app-solana/blob/develop/doc/api.md#get-challenge\nimport {\n type Apdu,\n ApduBuilder,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport {\n SOLANA_APP_ERRORS,\n SolanaAppCommandErrorFactory,\n type SolanaAppErrorCodes,\n} from \"./utils/SolanaApplicationErrors\";\n\nconst CLA = 0xe0;\nconst INS = 0x20;\nconst P1 = 0x00;\nconst P2 = 0x00;\nconst CHALLENGE_LENGTH = 4;\n\nexport type GetChallengeCommandResponse = {\n challenge: string;\n};\n\nexport class GetChallengeCommand\n implements Command<GetChallengeCommandResponse, void, SolanaAppErrorCodes>\n{\n private readonly errorHelper = new CommandErrorHelper<\n GetChallengeCommandResponse,\n SolanaAppErrorCodes\n >(SOLANA_APP_ERRORS, SolanaAppCommandErrorFactory);\n\n getApdu(): Apdu {\n return new ApduBuilder({\n cla: CLA,\n ins: INS,\n p1: P1,\n p2: P2,\n }).build();\n }\n\n parseResponse(\n response: ApduResponse,\n ): CommandResult<GetChallengeCommandResponse, SolanaAppErrorCodes> {\n return Maybe.fromNullable(\n this.errorHelper.getError(response),\n ).orDefaultLazy(() => {\n const parser = new ApduParser(response);\n\n if (parser.testMinimalLength(CHALLENGE_LENGTH) === false) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Challenge key is missing\"),\n });\n }\n\n const challenge = parser.encodeToHexaString(\n parser.extractFieldByLength(CHALLENGE_LENGTH),\n );\n\n return CommandResultFactory({\n data: {\n challenge,\n },\n });\n });\n }\n}\n"],
5
- "mappings": "AACA,OAEE,eAAAA,EACA,cAAAC,EAIA,wBAAAC,EACA,0BAAAC,MACK,kCACP,OAAS,sBAAAC,MAA0B,yBACnC,OAAS,SAAAC,MAAa,YAEtB,OACE,qBAAAC,EACA,gCAAAC,MAEK,kCAEP,MAAMC,EAAM,IACNC,EAAM,GACNC,EAAK,EACLC,EAAK,EACLC,EAAmB,EAMlB,MAAMC,CAEb,CACmB,YAAc,IAAIT,EAGjCE,EAAmBC,CAA4B,EAEjD,SAAgB,CACd,OAAO,IAAIP,EAAY,CACrB,IAAKQ,EACL,IAAKC,EACL,GAAIC,EACJ,GAAIC,CACN,CAAC,EAAE,MAAM,CACX,CAEA,cACEG,EACiE,CACjE,OAAOT,EAAM,aACX,KAAK,YAAY,SAASS,CAAQ,CACpC,EAAE,cAAc,IAAM,CACpB,MAAMC,EAAS,IAAId,EAAWa,CAAQ,EAEtC,GAAIC,EAAO,kBAAkBH,CAAgB,IAAM,GACjD,OAAOV,EAAqB,CAC1B,MAAO,IAAIC,EAAuB,0BAA0B,CAC9D,CAAC,EAGH,MAAMa,EAAYD,EAAO,mBACvBA,EAAO,qBAAqBH,CAAgB,CAC9C,EAEA,OAAOV,EAAqB,CAC1B,KAAM,CACJ,UAAAc,CACF,CACF,CAAC,CACH,CAAC,CACH,CACF",
4
+ "sourcesContent": ["// https://github.com/LedgerHQ/app-solana/blob/develop/doc/api.md#get-challenge\nimport {\n type Apdu,\n ApduBuilder,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport {\n SOLANA_APP_ERRORS,\n SolanaAppCommandErrorFactory,\n type SolanaAppErrorCodes,\n} from \"./utils/SolanaApplicationErrors\";\n\nconst CLA = 0xe0;\nconst INS = 0x20;\nconst P1 = 0x00;\nconst P2 = 0x00;\nconst CHALLENGE_LENGTH = 4;\n\nexport type GetChallengeCommandResponse = {\n challenge: string;\n};\n\nexport class GetChallengeCommand\n implements Command<GetChallengeCommandResponse, void, SolanaAppErrorCodes>\n{\n readonly name = \"getChallenge\";\n private readonly errorHelper = new CommandErrorHelper<\n GetChallengeCommandResponse,\n SolanaAppErrorCodes\n >(SOLANA_APP_ERRORS, SolanaAppCommandErrorFactory);\n\n getApdu(): Apdu {\n return new ApduBuilder({\n cla: CLA,\n ins: INS,\n p1: P1,\n p2: P2,\n }).build();\n }\n\n parseResponse(\n response: ApduResponse,\n ): CommandResult<GetChallengeCommandResponse, SolanaAppErrorCodes> {\n return Maybe.fromNullable(\n this.errorHelper.getError(response),\n ).orDefaultLazy(() => {\n const parser = new ApduParser(response);\n\n if (parser.testMinimalLength(CHALLENGE_LENGTH) === false) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Challenge key is missing\"),\n });\n }\n\n const challenge = parser.encodeToHexaString(\n parser.extractFieldByLength(CHALLENGE_LENGTH),\n );\n\n return CommandResultFactory({\n data: {\n challenge,\n },\n });\n });\n }\n}\n"],
5
+ "mappings": "AACA,OAEE,eAAAA,EACA,cAAAC,EAIA,wBAAAC,EACA,0BAAAC,MACK,kCACP,OAAS,sBAAAC,MAA0B,yBACnC,OAAS,SAAAC,MAAa,YAEtB,OACE,qBAAAC,EACA,gCAAAC,MAEK,kCAEP,MAAMC,EAAM,IACNC,EAAM,GACNC,EAAK,EACLC,EAAK,EACLC,EAAmB,EAMlB,MAAMC,CAEb,CACW,KAAO,eACC,YAAc,IAAIT,EAGjCE,EAAmBC,CAA4B,EAEjD,SAAgB,CACd,OAAO,IAAIP,EAAY,CACrB,IAAKQ,EACL,IAAKC,EACL,GAAIC,EACJ,GAAIC,CACN,CAAC,EAAE,MAAM,CACX,CAEA,cACEG,EACiE,CACjE,OAAOT,EAAM,aACX,KAAK,YAAY,SAASS,CAAQ,CACpC,EAAE,cAAc,IAAM,CACpB,MAAMC,EAAS,IAAId,EAAWa,CAAQ,EAEtC,GAAIC,EAAO,kBAAkBH,CAAgB,IAAM,GACjD,OAAOV,EAAqB,CAC1B,MAAO,IAAIC,EAAuB,0BAA0B,CAC9D,CAAC,EAGH,MAAMa,EAAYD,EAAO,mBACvBA,EAAO,qBAAqBH,CAAgB,CAC9C,EAEA,OAAOV,EAAqB,CAC1B,KAAM,CACJ,UAAAc,CACF,CACF,CAAC,CACH,CAAC,CACH,CACF",
6
6
  "names": ["ApduBuilder", "ApduParser", "CommandResultFactory", "InvalidStatusWordError", "CommandErrorHelper", "Maybe", "SOLANA_APP_ERRORS", "SolanaAppCommandErrorFactory", "CLA", "INS", "P1", "P2", "CHALLENGE_LENGTH", "GetChallengeCommand", "response", "parser", "challenge"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{CommandResultFactory as s,InvalidStatusWordError as o,isSuccessCommandResult as r}from"@ledgerhq/device-management-kit";import{GetChallengeCommand as a}from"./GetChallengeCommand";const n=Uint8Array.from([224,32,0,0,0]),c=Uint8Array.from([1,2,3,4]),d={statusCode:Uint8Array.from([144,0]),data:c},p={statusCode:Uint8Array.from([85,21]),data:new Uint8Array},l=Uint8Array.from([1,2]),u={statusCode:Uint8Array.from([144,0]),data:l};describe("GetChallengeCommand",()=>{let t;beforeEach(()=>{t=new a}),describe("getApdu",()=>{it("should return the challenge apdu",()=>{const e=t.getApdu();expect(e.getRawApdu()).toStrictEqual(n)})}),describe("parseResponse",()=>{it("should parse the response",()=>{const e=t.parseResponse(d);expect(e).toStrictEqual(s({data:{challenge:"01020304"}}))}),it("should return an error if the response is not successful",()=>{const e=t.parseResponse(p);expect(r(e)).toBe(!1)}),it("should return an error if the response is too short",()=>{const e=t.parseResponse(u);expect(r(e)).toBe(!1),expect(e.error).toBeInstanceOf(o)})})});
1
+ import{CommandResultFactory as r,InvalidStatusWordError as o,isSuccessCommandResult as s}from"@ledgerhq/device-management-kit";import{GetChallengeCommand as a}from"./GetChallengeCommand";const n=Uint8Array.from([224,32,0,0,0]),c=Uint8Array.from([1,2,3,4]),d={statusCode:Uint8Array.from([144,0]),data:c},l={statusCode:Uint8Array.from([85,21]),data:new Uint8Array},p=Uint8Array.from([1,2]),i={statusCode:Uint8Array.from([144,0]),data:p};describe("GetChallengeCommand",()=>{let t;beforeEach(()=>{t=new a}),describe("name",()=>{it("should be 'getChallenge'",()=>{expect(t.name).toBe("getChallenge")})}),describe("getApdu",()=>{it("should return the challenge apdu",()=>{const e=t.getApdu();expect(e.getRawApdu()).toStrictEqual(n)})}),describe("parseResponse",()=>{it("should parse the response",()=>{const e=t.parseResponse(d);expect(e).toStrictEqual(r({data:{challenge:"01020304"}}))}),it("should return an error if the response is not successful",()=>{const e=t.parseResponse(l);expect(s(e)).toBe(!1)}),it("should return an error if the response is too short",()=>{const e=t.parseResponse(i);expect(s(e)).toBe(!1),expect(e.error).toBeInstanceOf(o)})})});
2
2
  //# sourceMappingURL=GetChallengeCommand.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/command/GetChallengeCommand.test.ts"],
4
- "sourcesContent": ["import {\n CommandResultFactory,\n InvalidStatusWordError,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { GetChallengeCommand } from \"./GetChallengeCommand\";\n\nconst GET_CHALLENGE_APDU = Uint8Array.from([0xe0, 0x20, 0x00, 0x00, 0x00]);\n\nconst LNX_RESPONSE_DATA_GOOD = Uint8Array.from([0x01, 0x02, 0x03, 0x04]);\n\nconst LNX_RESPONSE_GOOD = {\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: LNX_RESPONSE_DATA_GOOD,\n};\n\nconst LNX_RESPONSE_LOCKED = {\n statusCode: Uint8Array.from([0x55, 0x15]),\n data: new Uint8Array(),\n};\n\nconst LNX_RESPONSE_DATA_TOO_SHORT = Uint8Array.from([0x01, 0x02]);\n\nconst LNX_RESPONSE_TOO_SHORT = {\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: LNX_RESPONSE_DATA_TOO_SHORT,\n};\n\ndescribe(\"GetChallengeCommand\", () => {\n let command: GetChallengeCommand;\n\n beforeEach(() => {\n command = new GetChallengeCommand();\n });\n\n describe(\"getApdu\", () => {\n it(\"should return the challenge apdu\", () => {\n const apdu = command.getApdu();\n expect(apdu.getRawApdu()).toStrictEqual(GET_CHALLENGE_APDU);\n });\n });\n\n describe(\"parseResponse\", () => {\n it(\"should parse the response\", () => {\n const parsedResponse = command.parseResponse(LNX_RESPONSE_GOOD);\n expect(parsedResponse).toStrictEqual(\n CommandResultFactory({\n data: {\n challenge: \"01020304\",\n },\n }),\n );\n });\n\n it(\"should return an error if the response is not successful\", () => {\n const result = command.parseResponse(LNX_RESPONSE_LOCKED);\n expect(isSuccessCommandResult(result)).toBe(false);\n });\n\n it(\"should return an error if the response is too short\", () => {\n const result = command.parseResponse(LNX_RESPONSE_TOO_SHORT);\n\n expect(isSuccessCommandResult(result)).toBe(false);\n // @ts-ignore\n expect(result.error).toBeInstanceOf(InvalidStatusWordError);\n });\n });\n});\n"],
5
- "mappings": "AAAA,OACE,wBAAAA,EACA,0BAAAC,EACA,0BAAAC,MACK,kCAEP,OAAS,uBAAAC,MAA2B,wBAEpC,MAAMC,EAAqB,WAAW,KAAK,CAAC,IAAM,GAAM,EAAM,EAAM,CAAI,CAAC,EAEnEC,EAAyB,WAAW,KAAK,CAAC,EAAM,EAAM,EAAM,CAAI,CAAC,EAEjEC,EAAoB,CACxB,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAMD,CACR,EAEME,EAAsB,CAC1B,WAAY,WAAW,KAAK,CAAC,GAAM,EAAI,CAAC,EACxC,KAAM,IAAI,UACZ,EAEMC,EAA8B,WAAW,KAAK,CAAC,EAAM,CAAI,CAAC,EAE1DC,EAAyB,CAC7B,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAMD,CACR,EAEA,SAAS,sBAAuB,IAAM,CACpC,IAAIE,EAEJ,WAAW,IAAM,CACfA,EAAU,IAAIP,CAChB,CAAC,EAED,SAAS,UAAW,IAAM,CACxB,GAAG,mCAAoC,IAAM,CAC3C,MAAMQ,EAAOD,EAAQ,QAAQ,EAC7B,OAAOC,EAAK,WAAW,CAAC,EAAE,cAAcP,CAAkB,CAC5D,CAAC,CACH,CAAC,EAED,SAAS,gBAAiB,IAAM,CAC9B,GAAG,4BAA6B,IAAM,CACpC,MAAMQ,EAAiBF,EAAQ,cAAcJ,CAAiB,EAC9D,OAAOM,CAAc,EAAE,cACrBZ,EAAqB,CACnB,KAAM,CACJ,UAAW,UACb,CACF,CAAC,CACH,CACF,CAAC,EAED,GAAG,2DAA4D,IAAM,CACnE,MAAMa,EAASH,EAAQ,cAAcH,CAAmB,EACxD,OAAOL,EAAuBW,CAAM,CAAC,EAAE,KAAK,EAAK,CACnD,CAAC,EAED,GAAG,sDAAuD,IAAM,CAC9D,MAAMA,EAASH,EAAQ,cAAcD,CAAsB,EAE3D,OAAOP,EAAuBW,CAAM,CAAC,EAAE,KAAK,EAAK,EAEjD,OAAOA,EAAO,KAAK,EAAE,eAAeZ,CAAsB,CAC5D,CAAC,CACH,CAAC,CACH,CAAC",
4
+ "sourcesContent": ["import {\n CommandResultFactory,\n InvalidStatusWordError,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { GetChallengeCommand } from \"./GetChallengeCommand\";\n\nconst GET_CHALLENGE_APDU = Uint8Array.from([0xe0, 0x20, 0x00, 0x00, 0x00]);\n\nconst LNX_RESPONSE_DATA_GOOD = Uint8Array.from([0x01, 0x02, 0x03, 0x04]);\n\nconst LNX_RESPONSE_GOOD = {\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: LNX_RESPONSE_DATA_GOOD,\n};\n\nconst LNX_RESPONSE_LOCKED = {\n statusCode: Uint8Array.from([0x55, 0x15]),\n data: new Uint8Array(),\n};\n\nconst LNX_RESPONSE_DATA_TOO_SHORT = Uint8Array.from([0x01, 0x02]);\n\nconst LNX_RESPONSE_TOO_SHORT = {\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: LNX_RESPONSE_DATA_TOO_SHORT,\n};\n\ndescribe(\"GetChallengeCommand\", () => {\n let command: GetChallengeCommand;\n\n beforeEach(() => {\n command = new GetChallengeCommand();\n });\n\n describe(\"name\", () => {\n it(\"should be 'getChallenge'\", () => {\n expect(command.name).toBe(\"getChallenge\");\n });\n });\n\n describe(\"getApdu\", () => {\n it(\"should return the challenge apdu\", () => {\n const apdu = command.getApdu();\n expect(apdu.getRawApdu()).toStrictEqual(GET_CHALLENGE_APDU);\n });\n });\n\n describe(\"parseResponse\", () => {\n it(\"should parse the response\", () => {\n const parsedResponse = command.parseResponse(LNX_RESPONSE_GOOD);\n expect(parsedResponse).toStrictEqual(\n CommandResultFactory({\n data: {\n challenge: \"01020304\",\n },\n }),\n );\n });\n\n it(\"should return an error if the response is not successful\", () => {\n const result = command.parseResponse(LNX_RESPONSE_LOCKED);\n expect(isSuccessCommandResult(result)).toBe(false);\n });\n\n it(\"should return an error if the response is too short\", () => {\n const result = command.parseResponse(LNX_RESPONSE_TOO_SHORT);\n\n expect(isSuccessCommandResult(result)).toBe(false);\n // @ts-ignore\n expect(result.error).toBeInstanceOf(InvalidStatusWordError);\n });\n });\n});\n"],
5
+ "mappings": "AAAA,OACE,wBAAAA,EACA,0BAAAC,EACA,0BAAAC,MACK,kCAEP,OAAS,uBAAAC,MAA2B,wBAEpC,MAAMC,EAAqB,WAAW,KAAK,CAAC,IAAM,GAAM,EAAM,EAAM,CAAI,CAAC,EAEnEC,EAAyB,WAAW,KAAK,CAAC,EAAM,EAAM,EAAM,CAAI,CAAC,EAEjEC,EAAoB,CACxB,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAMD,CACR,EAEME,EAAsB,CAC1B,WAAY,WAAW,KAAK,CAAC,GAAM,EAAI,CAAC,EACxC,KAAM,IAAI,UACZ,EAEMC,EAA8B,WAAW,KAAK,CAAC,EAAM,CAAI,CAAC,EAE1DC,EAAyB,CAC7B,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAMD,CACR,EAEA,SAAS,sBAAuB,IAAM,CACpC,IAAIE,EAEJ,WAAW,IAAM,CACfA,EAAU,IAAIP,CAChB,CAAC,EAED,SAAS,OAAQ,IAAM,CACrB,GAAG,2BAA4B,IAAM,CACnC,OAAOO,EAAQ,IAAI,EAAE,KAAK,cAAc,CAC1C,CAAC,CACH,CAAC,EAED,SAAS,UAAW,IAAM,CACxB,GAAG,mCAAoC,IAAM,CAC3C,MAAMC,EAAOD,EAAQ,QAAQ,EAC7B,OAAOC,EAAK,WAAW,CAAC,EAAE,cAAcP,CAAkB,CAC5D,CAAC,CACH,CAAC,EAED,SAAS,gBAAiB,IAAM,CAC9B,GAAG,4BAA6B,IAAM,CACpC,MAAMQ,EAAiBF,EAAQ,cAAcJ,CAAiB,EAC9D,OAAOM,CAAc,EAAE,cACrBZ,EAAqB,CACnB,KAAM,CACJ,UAAW,UACb,CACF,CAAC,CACH,CACF,CAAC,EAED,GAAG,2DAA4D,IAAM,CACnE,MAAMa,EAASH,EAAQ,cAAcH,CAAmB,EACxD,OAAOL,EAAuBW,CAAM,CAAC,EAAE,KAAK,EAAK,CACnD,CAAC,EAED,GAAG,sDAAuD,IAAM,CAC9D,MAAMA,EAASH,EAAQ,cAAcD,CAAsB,EAE3D,OAAOP,EAAuBW,CAAM,CAAC,EAAE,KAAK,EAAK,EAEjD,OAAOA,EAAO,KAAK,EAAE,eAAeZ,CAAsB,CAC5D,CAAC,CACH,CAAC,CACH,CAAC",
6
6
  "names": ["CommandResultFactory", "InvalidStatusWordError", "isSuccessCommandResult", "GetChallengeCommand", "GET_CHALLENGE_APDU", "LNX_RESPONSE_DATA_GOOD", "LNX_RESPONSE_GOOD", "LNX_RESPONSE_LOCKED", "LNX_RESPONSE_DATA_TOO_SHORT", "LNX_RESPONSE_TOO_SHORT", "command", "apdu", "parsedResponse", "result"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{ApduBuilder as d,ApduParser as i,CommandResultFactory as o,InvalidStatusWordError as a}from"@ledgerhq/device-management-kit";import{CommandErrorHelper as m,DerivationPathUtils as u}from"@ledgerhq/signer-utils";import{Maybe as l}from"purify-ts";import{DefaultBs58Encoder as c}from"../../app-binder/services/bs58Encoder";import{SOLANA_APP_ERRORS as y,SolanaAppCommandErrorFactory as A}from"./utils/SolanaApplicationErrors";const s=32;class f{constructor(r,e=c){this.bs58Encoder=e;this.args=r}errorHelper=new m(y,A);args;getApdu(){const r={cla:224,ins:5,p1:this.args.checkOnDevice?1:0,p2:0},e=new d(r),t=this.args.derivationPath,n=u.splitPath(t);return e.add8BitUIntToData(n.length),n.forEach(p=>{e.add32BitUIntToData(p)}),e.build()}parseResponse(r){return l.fromNullable(this.errorHelper.getError(r)).orDefaultLazy(()=>{const e=new i(r);if(e.testMinimalLength(s)===!1)return o({error:new a("Public key is missing")});const t=e.extractFieldByLength(s);return t===void 0?o({error:new a("Unable to extract public key")}):o({data:this.bs58Encoder.encode(t)})})}}export{f as GetPubKeyCommand};
1
+ import{ApduBuilder as d,ApduParser as m,CommandResultFactory as o,InvalidStatusWordError as a}from"@ledgerhq/device-management-kit";import{CommandErrorHelper as i,DerivationPathUtils as u}from"@ledgerhq/signer-utils";import{Maybe as l}from"purify-ts";import{DefaultBs58Encoder as y}from"../../app-binder/services/bs58Encoder";import{SOLANA_APP_ERRORS as c,SolanaAppCommandErrorFactory as b}from"./utils/SolanaApplicationErrors";const s=32;class f{constructor(r,e=y){this.bs58Encoder=e;this.args=r}name="getPubKey";errorHelper=new i(c,b);args;getApdu(){const r={cla:224,ins:5,p1:this.args.checkOnDevice?1:0,p2:0},e=new d(r),t=this.args.derivationPath,n=u.splitPath(t);return e.add8BitUIntToData(n.length),n.forEach(p=>{e.add32BitUIntToData(p)}),e.build()}parseResponse(r){return l.fromNullable(this.errorHelper.getError(r)).orDefaultLazy(()=>{const e=new m(r);if(e.testMinimalLength(s)===!1)return o({error:new a("Public key is missing")});const t=e.extractFieldByLength(s);return t===void 0?o({error:new a("Unable to extract public key")}):o({data:this.bs58Encoder.encode(t)})})}}export{f as GetPubKeyCommand};
2
2
  //# sourceMappingURL=GetPubKeyCommand.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/command/GetPubKeyCommand.ts"],
4
- "sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n type ApduBuilderArgs,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport {\n CommandErrorHelper,\n DerivationPathUtils,\n} from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport { type PublicKey } from \"@api/model/PublicKey\";\nimport {\n type Bs58Encoder,\n DefaultBs58Encoder,\n} from \"@internal/app-binder/services/bs58Encoder\";\n\nimport {\n SOLANA_APP_ERRORS,\n SolanaAppCommandErrorFactory,\n type SolanaAppErrorCodes,\n} from \"./utils/SolanaApplicationErrors\";\n\nconst PUBKEY_LENGTH = 32;\n\nexport type GetPubKeyCommandResponse = PublicKey;\n\nexport type GetPubKeyCommandArgs = {\n derivationPath: string;\n checkOnDevice: boolean;\n};\n\nexport class GetPubKeyCommand\n implements\n Command<GetPubKeyCommandResponse, GetPubKeyCommandArgs, SolanaAppErrorCodes>\n{\n private readonly errorHelper = new CommandErrorHelper<\n GetPubKeyCommandResponse,\n SolanaAppErrorCodes\n >(SOLANA_APP_ERRORS, SolanaAppCommandErrorFactory);\n\n args: GetPubKeyCommandArgs;\n\n constructor(\n args: GetPubKeyCommandArgs,\n private readonly bs58Encoder: Bs58Encoder = DefaultBs58Encoder,\n ) {\n this.args = args;\n }\n\n getApdu(): Apdu {\n const getPubKeyArgs: ApduBuilderArgs = {\n cla: 0xe0,\n ins: 0x05,\n p1: this.args.checkOnDevice ? 0x01 : 0x00,\n p2: 0x00,\n };\n const builder = new ApduBuilder(getPubKeyArgs);\n const derivationPath = this.args.derivationPath;\n\n const path = DerivationPathUtils.splitPath(derivationPath);\n builder.add8BitUIntToData(path.length);\n path.forEach((element) => {\n builder.add32BitUIntToData(element);\n });\n\n return builder.build();\n }\n\n parseResponse(\n response: ApduResponse,\n ): CommandResult<GetPubKeyCommandResponse, SolanaAppErrorCodes> {\n return Maybe.fromNullable(\n this.errorHelper.getError(response),\n ).orDefaultLazy(() => {\n const parser = new ApduParser(response);\n\n if (parser.testMinimalLength(PUBKEY_LENGTH) === false) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Public key is missing\"),\n });\n }\n\n const buffer = parser.extractFieldByLength(PUBKEY_LENGTH);\n if (buffer === undefined) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Unable to extract public key\"),\n });\n }\n\n return CommandResultFactory({\n data: this.bs58Encoder.encode(buffer),\n });\n });\n }\n}\n"],
5
- "mappings": "AAAA,OAEE,eAAAA,EAEA,cAAAC,EAIA,wBAAAC,EACA,0BAAAC,MACK,kCACP,OACE,sBAAAC,EACA,uBAAAC,MACK,yBACP,OAAS,SAAAC,MAAa,YAGtB,OAEE,sBAAAC,MACK,4CAEP,OACE,qBAAAC,EACA,gCAAAC,MAEK,kCAEP,MAAMC,EAAgB,GASf,MAAMC,CAGb,CAQE,YACEC,EACiBC,EAA2BN,EAC5C,CADiB,iBAAAM,EAEjB,KAAK,KAAOD,CACd,CAZiB,YAAc,IAAIR,EAGjCI,EAAmBC,CAA4B,EAEjD,KASA,SAAgB,CACd,MAAMK,EAAiC,CACrC,IAAK,IACL,IAAK,EACL,GAAI,KAAK,KAAK,cAAgB,EAAO,EACrC,GAAI,CACN,EACMC,EAAU,IAAIf,EAAYc,CAAa,EACvCE,EAAiB,KAAK,KAAK,eAE3BC,EAAOZ,EAAoB,UAAUW,CAAc,EACzD,OAAAD,EAAQ,kBAAkBE,EAAK,MAAM,EACrCA,EAAK,QAASC,GAAY,CACxBH,EAAQ,mBAAmBG,CAAO,CACpC,CAAC,EAEMH,EAAQ,MAAM,CACvB,CAEA,cACEI,EAC8D,CAC9D,OAAOb,EAAM,aACX,KAAK,YAAY,SAASa,CAAQ,CACpC,EAAE,cAAc,IAAM,CACpB,MAAMC,EAAS,IAAInB,EAAWkB,CAAQ,EAEtC,GAAIC,EAAO,kBAAkBV,CAAa,IAAM,GAC9C,OAAOR,EAAqB,CAC1B,MAAO,IAAIC,EAAuB,uBAAuB,CAC3D,CAAC,EAGH,MAAMkB,EAASD,EAAO,qBAAqBV,CAAa,EACxD,OAAIW,IAAW,OACNnB,EAAqB,CAC1B,MAAO,IAAIC,EAAuB,8BAA8B,CAClE,CAAC,EAGID,EAAqB,CAC1B,KAAM,KAAK,YAAY,OAAOmB,CAAM,CACtC,CAAC,CACH,CAAC,CACH,CACF",
4
+ "sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n type ApduBuilderArgs,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport {\n CommandErrorHelper,\n DerivationPathUtils,\n} from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport { type PublicKey } from \"@api/model/PublicKey\";\nimport {\n type Bs58Encoder,\n DefaultBs58Encoder,\n} from \"@internal/app-binder/services/bs58Encoder\";\n\nimport {\n SOLANA_APP_ERRORS,\n SolanaAppCommandErrorFactory,\n type SolanaAppErrorCodes,\n} from \"./utils/SolanaApplicationErrors\";\n\nconst PUBKEY_LENGTH = 32;\n\nexport type GetPubKeyCommandResponse = PublicKey;\n\nexport type GetPubKeyCommandArgs = {\n derivationPath: string;\n checkOnDevice: boolean;\n};\n\nexport class GetPubKeyCommand\n implements\n Command<GetPubKeyCommandResponse, GetPubKeyCommandArgs, SolanaAppErrorCodes>\n{\n readonly name = \"getPubKey\";\n private readonly errorHelper = new CommandErrorHelper<\n GetPubKeyCommandResponse,\n SolanaAppErrorCodes\n >(SOLANA_APP_ERRORS, SolanaAppCommandErrorFactory);\n\n args: GetPubKeyCommandArgs;\n\n constructor(\n args: GetPubKeyCommandArgs,\n private readonly bs58Encoder: Bs58Encoder = DefaultBs58Encoder,\n ) {\n this.args = args;\n }\n\n getApdu(): Apdu {\n const getPubKeyArgs: ApduBuilderArgs = {\n cla: 0xe0,\n ins: 0x05,\n p1: this.args.checkOnDevice ? 0x01 : 0x00,\n p2: 0x00,\n };\n const builder = new ApduBuilder(getPubKeyArgs);\n const derivationPath = this.args.derivationPath;\n\n const path = DerivationPathUtils.splitPath(derivationPath);\n builder.add8BitUIntToData(path.length);\n path.forEach((element) => {\n builder.add32BitUIntToData(element);\n });\n\n return builder.build();\n }\n\n parseResponse(\n response: ApduResponse,\n ): CommandResult<GetPubKeyCommandResponse, SolanaAppErrorCodes> {\n return Maybe.fromNullable(\n this.errorHelper.getError(response),\n ).orDefaultLazy(() => {\n const parser = new ApduParser(response);\n\n if (parser.testMinimalLength(PUBKEY_LENGTH) === false) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Public key is missing\"),\n });\n }\n\n const buffer = parser.extractFieldByLength(PUBKEY_LENGTH);\n if (buffer === undefined) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Unable to extract public key\"),\n });\n }\n\n return CommandResultFactory({\n data: this.bs58Encoder.encode(buffer),\n });\n });\n }\n}\n"],
5
+ "mappings": "AAAA,OAEE,eAAAA,EAEA,cAAAC,EAIA,wBAAAC,EACA,0BAAAC,MACK,kCACP,OACE,sBAAAC,EACA,uBAAAC,MACK,yBACP,OAAS,SAAAC,MAAa,YAGtB,OAEE,sBAAAC,MACK,4CAEP,OACE,qBAAAC,EACA,gCAAAC,MAEK,kCAEP,MAAMC,EAAgB,GASf,MAAMC,CAGb,CASE,YACEC,EACiBC,EAA2BN,EAC5C,CADiB,iBAAAM,EAEjB,KAAK,KAAOD,CACd,CAbS,KAAO,YACC,YAAc,IAAIR,EAGjCI,EAAmBC,CAA4B,EAEjD,KASA,SAAgB,CACd,MAAMK,EAAiC,CACrC,IAAK,IACL,IAAK,EACL,GAAI,KAAK,KAAK,cAAgB,EAAO,EACrC,GAAI,CACN,EACMC,EAAU,IAAIf,EAAYc,CAAa,EACvCE,EAAiB,KAAK,KAAK,eAE3BC,EAAOZ,EAAoB,UAAUW,CAAc,EACzD,OAAAD,EAAQ,kBAAkBE,EAAK,MAAM,EACrCA,EAAK,QAASC,GAAY,CACxBH,EAAQ,mBAAmBG,CAAO,CACpC,CAAC,EAEMH,EAAQ,MAAM,CACvB,CAEA,cACEI,EAC8D,CAC9D,OAAOb,EAAM,aACX,KAAK,YAAY,SAASa,CAAQ,CACpC,EAAE,cAAc,IAAM,CACpB,MAAMC,EAAS,IAAInB,EAAWkB,CAAQ,EAEtC,GAAIC,EAAO,kBAAkBV,CAAa,IAAM,GAC9C,OAAOR,EAAqB,CAC1B,MAAO,IAAIC,EAAuB,uBAAuB,CAC3D,CAAC,EAGH,MAAMkB,EAASD,EAAO,qBAAqBV,CAAa,EACxD,OAAIW,IAAW,OACNnB,EAAqB,CAC1B,MAAO,IAAIC,EAAuB,8BAA8B,CAClE,CAAC,EAGID,EAAqB,CAC1B,KAAM,KAAK,YAAY,OAAOmB,CAAM,CACtC,CAAC,CACH,CAAC,CACH,CACF",
6
6
  "names": ["ApduBuilder", "ApduParser", "CommandResultFactory", "InvalidStatusWordError", "CommandErrorHelper", "DerivationPathUtils", "Maybe", "DefaultBs58Encoder", "SOLANA_APP_ERRORS", "SolanaAppCommandErrorFactory", "PUBKEY_LENGTH", "GetPubKeyCommand", "args", "bs58Encoder", "getPubKeyArgs", "builder", "derivationPath", "path", "element", "response", "parser", "buffer"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{ApduResponse as a,CommandResultFactory as n,isSuccessCommandResult as x}from"@ledgerhq/device-management-kit";import{GetPubKeyCommand as o}from"./GetPubKeyCommand";const c=new Uint8Array([224,5,1,0,9,2,128,0,0,44,128,0,1,245]),i=new Uint8Array([224,5,0,0,9,2,128,0,0,44,128,0,1,245]),d=new Uint8Array([224,5,1,0,9,2,128,0,0,44,128,0,1,246]),u=new Uint8Array([178,167,34,220,24,221,92,73,195,244,142,155,7,38,241,27,230,103,134,233,28,172,87,52,152,214,238,136,57,44,201,106,144,0]),p=new a({statusCode:Uint8Array.from([144,0]),data:u});describe("GetPubKeyCommand",()=>{let t;const s={derivationPath:"44'/501'",checkOnDevice:!0};beforeEach(()=>{t=new o(s),vi.clearAllMocks(),vi.importActual("@ledgerhq/device-management-kit")}),describe("getApdu",()=>{it("should return APDU",()=>{const e=t.getApdu();expect(e.getRawApdu()).toEqual(c)}),it("should return APDU without confirm",()=>{t=new o({...s,checkOnDevice:!1});const e=t.getApdu();expect(e.getRawApdu()).toEqual(i)}),it("should return APDU with different path",()=>{t=new o({...s,derivationPath:"44'/502'"});const e=t.getApdu();expect(e.getRawApdu()).toEqual(d)})}),describe("parseResponse",()=>{it("should parse the response",()=>{const e=t.parseResponse(p);expect(e).toStrictEqual(n({data:"D2PPQSYFe83nDzk96FqGumVU8JA7J8vj2Rhjc2oXzEi5"}))}),describe("error handling",()=>{it("should return error if response is not success",()=>{const e=new a({statusCode:Uint8Array.from([106,130]),data:new Uint8Array(0)}),r=t.parseResponse(e);expect(x(r)).toBe(!1),x(r)?assert.fail("Expected error"):expect(r.error).toEqual(expect.objectContaining({_tag:"SolanaAppCommandError",errorCode:"6a82",message:"Invalid off-chain message format"}))}),it("should return error if public key is missing",()=>{const e=new a({statusCode:Uint8Array.from([144,0]),data:new Uint8Array(0)}),r=t.parseResponse(e);expect(x(r)).toBe(!1),x(r)?assert.fail("Expected error"):expect(r.error.originalError).toEqual(expect.objectContaining({message:"Public key is missing"}))})})})});
1
+ import{ApduResponse as a,CommandResultFactory as n,isSuccessCommandResult as x}from"@ledgerhq/device-management-kit";import{GetPubKeyCommand as o}from"./GetPubKeyCommand";const c=new Uint8Array([224,5,1,0,9,2,128,0,0,44,128,0,1,245]),i=new Uint8Array([224,5,0,0,9,2,128,0,0,44,128,0,1,245]),d=new Uint8Array([224,5,1,0,9,2,128,0,0,44,128,0,1,246]),u=new Uint8Array([178,167,34,220,24,221,92,73,195,244,142,155,7,38,241,27,230,103,134,233,28,172,87,52,152,214,238,136,57,44,201,106,144,0]),p=new a({statusCode:Uint8Array.from([144,0]),data:u});describe("GetPubKeyCommand",()=>{let t;const s={derivationPath:"44'/501'",checkOnDevice:!0};beforeEach(()=>{t=new o(s),vi.clearAllMocks(),vi.importActual("@ledgerhq/device-management-kit")}),describe("name",()=>{it("should be 'getPubKey'",()=>{expect(t.name).toBe("getPubKey")})}),describe("getApdu",()=>{it("should return APDU",()=>{const e=t.getApdu();expect(e.getRawApdu()).toEqual(c)}),it("should return APDU without confirm",()=>{t=new o({...s,checkOnDevice:!1});const e=t.getApdu();expect(e.getRawApdu()).toEqual(i)}),it("should return APDU with different path",()=>{t=new o({...s,derivationPath:"44'/502'"});const e=t.getApdu();expect(e.getRawApdu()).toEqual(d)})}),describe("parseResponse",()=>{it("should parse the response",()=>{const e=t.parseResponse(p);expect(e).toStrictEqual(n({data:"D2PPQSYFe83nDzk96FqGumVU8JA7J8vj2Rhjc2oXzEi5"}))}),describe("error handling",()=>{it("should return error if response is not success",()=>{const e=new a({statusCode:Uint8Array.from([106,130]),data:new Uint8Array(0)}),r=t.parseResponse(e);expect(x(r)).toBe(!1),x(r)?assert.fail("Expected error"):expect(r.error).toEqual(expect.objectContaining({_tag:"SolanaAppCommandError",errorCode:"6a82",message:"Invalid off-chain message format"}))}),it("should return error if public key is missing",()=>{const e=new a({statusCode:Uint8Array.from([144,0]),data:new Uint8Array(0)}),r=t.parseResponse(e);expect(x(r)).toBe(!1),x(r)?assert.fail("Expected error"):expect(r.error.originalError).toEqual(expect.objectContaining({message:"Public key is missing"}))})})})});
2
2
  //# sourceMappingURL=GetPubKeyCommand.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/command/GetPubKeyCommand.test.ts"],
4
- "sourcesContent": ["import {\n ApduResponse,\n CommandResultFactory,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { GetPubKeyCommand } from \"./GetPubKeyCommand\";\n\nconst GET_PUBKYEY_APDU_DEFAULT_PATH_WITH_CONFIRM = new Uint8Array([\n 0xe0, 0x05, 0x01, 0x00, 0x09, 0x02, 0x80, 0x00, 0x00, 0x2c, 0x80, 0x00, 0x01,\n 0xf5,\n]);\n\nconst GET_PUBKYEY_APDU_DEFAULT_PATH_WITHOUT_CONFIRM = new Uint8Array([\n 0xe0, 0x05, 0x00, 0x00, 0x09, 0x02, 0x80, 0x00, 0x00, 0x2c, 0x80, 0x00, 0x01,\n 0xf5,\n]);\n\nconst GET_PUBKEY_APDU_DIFFERENT_PATH = new Uint8Array([\n 0xe0, 0x05, 0x01, 0x00, 0x09, 0x02, 0x80, 0x00, 0x00, 0x2c, 0x80, 0x00, 0x01,\n 0xf6,\n]);\n\n// D2PPQSYFe83nDzk96FqGumVU8JA7J8vj2Rhjc2oXzEi5\nconst GET_PUBKEY_APDU = new Uint8Array([\n 0xb2, 0xa7, 0x22, 0xdc, 0x18, 0xdd, 0x5c, 0x49, 0xc3, 0xf4, 0x8e, 0x9b, 0x07,\n 0x26, 0xf1, 0x1b, 0xe6, 0x67, 0x86, 0xe9, 0x1c, 0xac, 0x57, 0x34, 0x98, 0xd6,\n 0xee, 0x88, 0x39, 0x2c, 0xc9, 0x6a, 0x90, 0x00,\n]);\n\nconst GET_PUBKEY_APDU_RESPONSE = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: GET_PUBKEY_APDU,\n});\n\ndescribe(\"GetPubKeyCommand\", () => {\n let command: GetPubKeyCommand;\n const defaultArgs = {\n derivationPath: \"44'/501'\",\n checkOnDevice: true,\n };\n\n beforeEach(() => {\n command = new GetPubKeyCommand(defaultArgs);\n vi.clearAllMocks();\n vi.importActual(\"@ledgerhq/device-management-kit\");\n });\n\n describe(\"getApdu\", () => {\n it(\"should return APDU\", () => {\n const apdu = command.getApdu();\n expect(apdu.getRawApdu()).toEqual(\n GET_PUBKYEY_APDU_DEFAULT_PATH_WITH_CONFIRM,\n );\n });\n\n it(\"should return APDU without confirm\", () => {\n command = new GetPubKeyCommand({\n ...defaultArgs,\n checkOnDevice: false,\n });\n const apdu = command.getApdu();\n expect(apdu.getRawApdu()).toEqual(\n GET_PUBKYEY_APDU_DEFAULT_PATH_WITHOUT_CONFIRM,\n );\n });\n\n it(\"should return APDU with different path\", () => {\n command = new GetPubKeyCommand({\n ...defaultArgs,\n derivationPath: \"44'/502'\",\n });\n const apdu = command.getApdu();\n expect(apdu.getRawApdu()).toEqual(GET_PUBKEY_APDU_DIFFERENT_PATH);\n });\n });\n\n describe(\"parseResponse\", () => {\n it(\"should parse the response\", () => {\n const parsed = command.parseResponse(GET_PUBKEY_APDU_RESPONSE);\n expect(parsed).toStrictEqual(\n CommandResultFactory({\n data: \"D2PPQSYFe83nDzk96FqGumVU8JA7J8vj2Rhjc2oXzEi5\",\n }),\n );\n });\n\n describe(\"error handling\", () => {\n it(\"should return error if response is not success\", () => {\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x6a, 0x82]),\n data: new Uint8Array(0),\n });\n const result = command.parseResponse(response);\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n expect(result.error).toEqual(\n expect.objectContaining({\n _tag: \"SolanaAppCommandError\",\n errorCode: \"6a82\",\n message: \"Invalid off-chain message format\",\n }),\n );\n } else {\n assert.fail(\"Expected error\");\n }\n });\n\n it(\"should return error if public key is missing\", () => {\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: new Uint8Array(0),\n });\n const result = command.parseResponse(response);\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n expect(result.error.originalError).toEqual(\n expect.objectContaining({\n message: \"Public key is missing\",\n }),\n );\n } else {\n assert.fail(\"Expected error\");\n }\n });\n });\n });\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {\n ApduResponse,\n CommandResultFactory,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { GetPubKeyCommand } from \"./GetPubKeyCommand\";\n\nconst GET_PUBKYEY_APDU_DEFAULT_PATH_WITH_CONFIRM = new Uint8Array([\n 0xe0, 0x05, 0x01, 0x00, 0x09, 0x02, 0x80, 0x00, 0x00, 0x2c, 0x80, 0x00, 0x01,\n 0xf5,\n]);\n\nconst GET_PUBKYEY_APDU_DEFAULT_PATH_WITHOUT_CONFIRM = new Uint8Array([\n 0xe0, 0x05, 0x00, 0x00, 0x09, 0x02, 0x80, 0x00, 0x00, 0x2c, 0x80, 0x00, 0x01,\n 0xf5,\n]);\n\nconst GET_PUBKEY_APDU_DIFFERENT_PATH = new Uint8Array([\n 0xe0, 0x05, 0x01, 0x00, 0x09, 0x02, 0x80, 0x00, 0x00, 0x2c, 0x80, 0x00, 0x01,\n 0xf6,\n]);\n\n// D2PPQSYFe83nDzk96FqGumVU8JA7J8vj2Rhjc2oXzEi5\nconst GET_PUBKEY_APDU = new Uint8Array([\n 0xb2, 0xa7, 0x22, 0xdc, 0x18, 0xdd, 0x5c, 0x49, 0xc3, 0xf4, 0x8e, 0x9b, 0x07,\n 0x26, 0xf1, 0x1b, 0xe6, 0x67, 0x86, 0xe9, 0x1c, 0xac, 0x57, 0x34, 0x98, 0xd6,\n 0xee, 0x88, 0x39, 0x2c, 0xc9, 0x6a, 0x90, 0x00,\n]);\n\nconst GET_PUBKEY_APDU_RESPONSE = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: GET_PUBKEY_APDU,\n});\n\ndescribe(\"GetPubKeyCommand\", () => {\n let command: GetPubKeyCommand;\n const defaultArgs = {\n derivationPath: \"44'/501'\",\n checkOnDevice: true,\n };\n\n beforeEach(() => {\n command = new GetPubKeyCommand(defaultArgs);\n vi.clearAllMocks();\n vi.importActual(\"@ledgerhq/device-management-kit\");\n });\n\n describe(\"name\", () => {\n it(\"should be 'getPubKey'\", () => {\n expect(command.name).toBe(\"getPubKey\");\n });\n });\n\n describe(\"getApdu\", () => {\n it(\"should return APDU\", () => {\n const apdu = command.getApdu();\n expect(apdu.getRawApdu()).toEqual(\n GET_PUBKYEY_APDU_DEFAULT_PATH_WITH_CONFIRM,\n );\n });\n\n it(\"should return APDU without confirm\", () => {\n command = new GetPubKeyCommand({\n ...defaultArgs,\n checkOnDevice: false,\n });\n const apdu = command.getApdu();\n expect(apdu.getRawApdu()).toEqual(\n GET_PUBKYEY_APDU_DEFAULT_PATH_WITHOUT_CONFIRM,\n );\n });\n\n it(\"should return APDU with different path\", () => {\n command = new GetPubKeyCommand({\n ...defaultArgs,\n derivationPath: \"44'/502'\",\n });\n const apdu = command.getApdu();\n expect(apdu.getRawApdu()).toEqual(GET_PUBKEY_APDU_DIFFERENT_PATH);\n });\n });\n\n describe(\"parseResponse\", () => {\n it(\"should parse the response\", () => {\n const parsed = command.parseResponse(GET_PUBKEY_APDU_RESPONSE);\n expect(parsed).toStrictEqual(\n CommandResultFactory({\n data: \"D2PPQSYFe83nDzk96FqGumVU8JA7J8vj2Rhjc2oXzEi5\",\n }),\n );\n });\n\n describe(\"error handling\", () => {\n it(\"should return error if response is not success\", () => {\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x6a, 0x82]),\n data: new Uint8Array(0),\n });\n const result = command.parseResponse(response);\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n expect(result.error).toEqual(\n expect.objectContaining({\n _tag: \"SolanaAppCommandError\",\n errorCode: \"6a82\",\n message: \"Invalid off-chain message format\",\n }),\n );\n } else {\n assert.fail(\"Expected error\");\n }\n });\n\n it(\"should return error if public key is missing\", () => {\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: new Uint8Array(0),\n });\n const result = command.parseResponse(response);\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n expect(result.error.originalError).toEqual(\n expect.objectContaining({\n message: \"Public key is missing\",\n }),\n );\n } else {\n assert.fail(\"Expected error\");\n }\n });\n });\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["ApduResponse", "CommandResultFactory", "isSuccessCommandResult", "GetPubKeyCommand", "GET_PUBKYEY_APDU_DEFAULT_PATH_WITH_CONFIRM", "GET_PUBKYEY_APDU_DEFAULT_PATH_WITHOUT_CONFIRM", "GET_PUBKEY_APDU_DIFFERENT_PATH", "GET_PUBKEY_APDU", "GET_PUBKEY_APDU_RESPONSE", "command", "defaultArgs", "apdu", "parsed", "response", "result"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{ApduBuilder as d,CommandResultFactory as e,InvalidStatusWordError as p}from"@ledgerhq/device-management-kit";import{CommandErrorHelper as a}from"@ledgerhq/signer-utils";import{SOLANA_APP_ERRORS as t,SolanaAppCommandErrorFactory as n}from"./utils/SolanaApplicationErrors";const s=224,i=33,m=0,l=0;class y{constructor(r){this.args=r}errorHelper=new a(t,n);getApdu(){const r={cla:s,ins:i,p1:m,p2:l};return new d(r).addBufferToData(this.args.payload).build()}parseResponse(r){const o=this.errorHelper.getError(r);return o||(r.data.length!==0?e({error:new p("Unexpected data in response")}):e({data:void 0}))}}export{y as ProvideTLVDescriptorCommand};
1
+ import{ApduBuilder as d,CommandResultFactory as e,InvalidStatusWordError as p}from"@ledgerhq/device-management-kit";import{CommandErrorHelper as a}from"@ledgerhq/signer-utils";import{SOLANA_APP_ERRORS as t,SolanaAppCommandErrorFactory as n}from"./utils/SolanaApplicationErrors";const s=224,i=33,m=0,l=0;class y{constructor(r){this.args=r}name="provideTLVDescriptor";errorHelper=new a(t,n);getApdu(){const r={cla:s,ins:i,p1:m,p2:l};return new d(r).addBufferToData(this.args.payload).build()}parseResponse(r){const o=this.errorHelper.getError(r);return o||(r.data.length!==0?e({error:new p("Unexpected data in response")}):e({data:void 0}))}}export{y as ProvideTLVDescriptorCommand};
2
2
  //# sourceMappingURL=ProvideTLVDescriptorCommand.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/command/ProvideTLVDescriptorCommand.ts"],
4
- "sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n type ApduBuilderArgs,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\n\nimport {\n SOLANA_APP_ERRORS,\n SolanaAppCommandErrorFactory,\n type SolanaAppErrorCodes,\n} from \"./utils/SolanaApplicationErrors\";\n\nconst CLA = 0xe0;\nconst INS = 0x21;\nconst P1 = 0x00;\nconst P2 = 0x00;\n\nexport type ProvideTLVDescriptorCommandArgs = {\n payload: Uint8Array;\n};\n\nexport class ProvideTLVDescriptorCommand\n implements Command<void, ProvideTLVDescriptorCommandArgs, SolanaAppErrorCodes>\n{\n private readonly errorHelper = new CommandErrorHelper<\n void,\n SolanaAppErrorCodes\n >(SOLANA_APP_ERRORS, SolanaAppCommandErrorFactory);\n\n constructor(readonly args: ProvideTLVDescriptorCommandArgs) {}\n\n getApdu(): Apdu {\n const apduBuilderArgs: ApduBuilderArgs = {\n cla: CLA,\n ins: INS,\n p1: P1,\n p2: P2,\n };\n return new ApduBuilder(apduBuilderArgs)\n .addBufferToData(this.args.payload)\n .build();\n }\n\n parseResponse(\n response: ApduResponse,\n ): CommandResult<void, SolanaAppErrorCodes> {\n const error = this.errorHelper.getError(response);\n if (error) {\n return error;\n }\n\n if (response.data.length !== 0) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Unexpected data in response\"),\n });\n }\n\n return CommandResultFactory({ data: undefined });\n }\n}\n"],
5
- "mappings": "AAAA,OAEE,eAAAA,EAKA,wBAAAC,EACA,0BAAAC,MACK,kCACP,OAAS,sBAAAC,MAA0B,yBAEnC,OACE,qBAAAC,EACA,gCAAAC,MAEK,kCAEP,MAAMC,EAAM,IACNC,EAAM,GACNC,EAAK,EACLC,EAAK,EAMJ,MAAMC,CAEb,CAME,YAAqBC,EAAuC,CAAvC,UAAAA,CAAwC,CAL5C,YAAc,IAAIR,EAGjCC,EAAmBC,CAA4B,EAIjD,SAAgB,CACd,MAAMO,EAAmC,CACvC,IAAKN,EACL,IAAKC,EACL,GAAIC,EACJ,GAAIC,CACN,EACA,OAAO,IAAIT,EAAYY,CAAe,EACnC,gBAAgB,KAAK,KAAK,OAAO,EACjC,MAAM,CACX,CAEA,cACEC,EAC0C,CAC1C,MAAMC,EAAQ,KAAK,YAAY,SAASD,CAAQ,EAChD,OAAIC,IAIAD,EAAS,KAAK,SAAW,EACpBZ,EAAqB,CAC1B,MAAO,IAAIC,EAAuB,6BAA6B,CACjE,CAAC,EAGID,EAAqB,CAAE,KAAM,MAAU,CAAC,EACjD,CACF",
4
+ "sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n type ApduBuilderArgs,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\n\nimport {\n SOLANA_APP_ERRORS,\n SolanaAppCommandErrorFactory,\n type SolanaAppErrorCodes,\n} from \"./utils/SolanaApplicationErrors\";\n\nconst CLA = 0xe0;\nconst INS = 0x21;\nconst P1 = 0x00;\nconst P2 = 0x00;\n\nexport type ProvideTLVDescriptorCommandArgs = {\n payload: Uint8Array;\n};\n\nexport class ProvideTLVDescriptorCommand\n implements Command<void, ProvideTLVDescriptorCommandArgs, SolanaAppErrorCodes>\n{\n readonly name = \"provideTLVDescriptor\";\n private readonly errorHelper = new CommandErrorHelper<\n void,\n SolanaAppErrorCodes\n >(SOLANA_APP_ERRORS, SolanaAppCommandErrorFactory);\n\n constructor(readonly args: ProvideTLVDescriptorCommandArgs) {}\n\n getApdu(): Apdu {\n const apduBuilderArgs: ApduBuilderArgs = {\n cla: CLA,\n ins: INS,\n p1: P1,\n p2: P2,\n };\n return new ApduBuilder(apduBuilderArgs)\n .addBufferToData(this.args.payload)\n .build();\n }\n\n parseResponse(\n response: ApduResponse,\n ): CommandResult<void, SolanaAppErrorCodes> {\n const error = this.errorHelper.getError(response);\n if (error) {\n return error;\n }\n\n if (response.data.length !== 0) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Unexpected data in response\"),\n });\n }\n\n return CommandResultFactory({ data: undefined });\n }\n}\n"],
5
+ "mappings": "AAAA,OAEE,eAAAA,EAKA,wBAAAC,EACA,0BAAAC,MACK,kCACP,OAAS,sBAAAC,MAA0B,yBAEnC,OACE,qBAAAC,EACA,gCAAAC,MAEK,kCAEP,MAAMC,EAAM,IACNC,EAAM,GACNC,EAAK,EACLC,EAAK,EAMJ,MAAMC,CAEb,CAOE,YAAqBC,EAAuC,CAAvC,UAAAA,CAAwC,CANpD,KAAO,uBACC,YAAc,IAAIR,EAGjCC,EAAmBC,CAA4B,EAIjD,SAAgB,CACd,MAAMO,EAAmC,CACvC,IAAKN,EACL,IAAKC,EACL,GAAIC,EACJ,GAAIC,CACN,EACA,OAAO,IAAIT,EAAYY,CAAe,EACnC,gBAAgB,KAAK,KAAK,OAAO,EACjC,MAAM,CACX,CAEA,cACEC,EAC0C,CAC1C,MAAMC,EAAQ,KAAK,YAAY,SAASD,CAAQ,EAChD,OAAIC,IAIAD,EAAS,KAAK,SAAW,EACpBZ,EAAqB,CAC1B,MAAO,IAAIC,EAAuB,6BAA6B,CACjE,CAAC,EAGID,EAAqB,CAAE,KAAM,MAAU,CAAC,EACjD,CACF",
6
6
  "names": ["ApduBuilder", "CommandResultFactory", "InvalidStatusWordError", "CommandErrorHelper", "SOLANA_APP_ERRORS", "SolanaAppCommandErrorFactory", "CLA", "INS", "P1", "P2", "ProvideTLVDescriptorCommand", "args", "apduBuilderArgs", "response", "error"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{CommandResultFactory as s,InvalidStatusWordError as a,isSuccessCommandResult as o}from"@ledgerhq/device-management-kit";import{ProvideTLVDescriptorCommand as n}from"./ProvideTLVDescriptorCommand";const d=224,c=33,i=0,u=0,x=Uint8Array.from([d,c,i,u,4,222,173,190,239]);describe("ProvideTLVDescriptorCommand",()=>{let r;beforeEach(()=>{r=new n({payload:Uint8Array.from([222,173,190,239])})}),describe("getApdu",()=>{it("should construct the correct APDU",()=>{const e=r.getApdu();expect(e.getRawApdu()).toStrictEqual(x)})}),describe("parseResponse",()=>{it("should return success when status is 0x9000 and no data",()=>{const e={statusCode:Uint8Array.from([144,0]),data:new Uint8Array},t=r.parseResponse(e);expect(t).toStrictEqual(s({data:void 0})),expect(o(t)).toBe(!0)}),it("should return an error if the status code is not 0x9000",()=>{const e={statusCode:Uint8Array.from([106,128]),data:new Uint8Array},t=r.parseResponse(e);expect(o(t)).toBe(!1)}),it("should return an error if response contains unexpected data",()=>{const e={statusCode:Uint8Array.from([144,0]),data:Uint8Array.from([1])},t=r.parseResponse(e);expect(o(t)).toBe(!1),expect(t.error).toBeInstanceOf(a)})})});
1
+ import{CommandResultFactory as s,InvalidStatusWordError as a,isSuccessCommandResult as o}from"@ledgerhq/device-management-kit";import{ProvideTLVDescriptorCommand as n}from"./ProvideTLVDescriptorCommand";const d=224,c=33,i=0,p=0,u=Uint8Array.from([d,c,i,p,4,222,173,190,239]);describe("ProvideTLVDescriptorCommand",()=>{let r;beforeEach(()=>{r=new n({payload:Uint8Array.from([222,173,190,239])})}),describe("name",()=>{it("should be 'provideTLVDescriptor'",()=>{expect(r.name).toBe("provideTLVDescriptor")})}),describe("getApdu",()=>{it("should construct the correct APDU",()=>{const e=r.getApdu();expect(e.getRawApdu()).toStrictEqual(u)})}),describe("parseResponse",()=>{it("should return success when status is 0x9000 and no data",()=>{const e={statusCode:Uint8Array.from([144,0]),data:new Uint8Array},t=r.parseResponse(e);expect(t).toStrictEqual(s({data:void 0})),expect(o(t)).toBe(!0)}),it("should return an error if the status code is not 0x9000",()=>{const e={statusCode:Uint8Array.from([106,128]),data:new Uint8Array},t=r.parseResponse(e);expect(o(t)).toBe(!1)}),it("should return an error if response contains unexpected data",()=>{const e={statusCode:Uint8Array.from([144,0]),data:Uint8Array.from([1])},t=r.parseResponse(e);expect(o(t)).toBe(!1),expect(t.error).toBeInstanceOf(a)})})});
2
2
  //# sourceMappingURL=ProvideTLVDescriptorCommand.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/command/ProvideTLVDescriptorCommand.test.ts"],
4
- "sourcesContent": ["import {\n CommandResultFactory,\n InvalidStatusWordError,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { ProvideTLVDescriptorCommand } from \"./ProvideTLVDescriptorCommand\";\n\nconst CLA = 0xe0;\nconst INS = 0x21;\nconst P1 = 0x00;\nconst P2 = 0x00;\n\nconst EXPECTED_APDU = Uint8Array.from([\n CLA,\n INS,\n P1,\n P2,\n 0x04,\n 0xde,\n 0xad,\n 0xbe,\n 0xef,\n]);\n\ndescribe(\"ProvideTLVDescriptorCommand\", () => {\n let command: ProvideTLVDescriptorCommand;\n\n beforeEach(() => {\n command = new ProvideTLVDescriptorCommand({\n payload: Uint8Array.from([0xde, 0xad, 0xbe, 0xef]),\n });\n });\n\n describe(\"getApdu\", () => {\n it(\"should construct the correct APDU\", () => {\n const apdu = command.getApdu();\n expect(apdu.getRawApdu()).toStrictEqual(EXPECTED_APDU);\n });\n });\n\n describe(\"parseResponse\", () => {\n it(\"should return success when status is 0x9000 and no data\", () => {\n const LNX_RESPONSE_GOOD = {\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: new Uint8Array(),\n };\n\n const parsed = command.parseResponse(LNX_RESPONSE_GOOD);\n expect(parsed).toStrictEqual(CommandResultFactory({ data: undefined }));\n expect(isSuccessCommandResult(parsed)).toBe(true);\n });\n\n it(\"should return an error if the status code is not 0x9000\", () => {\n const LNX_RESPONSE_ERROR = {\n statusCode: Uint8Array.from([0x6a, 0x80]),\n data: new Uint8Array(),\n };\n\n const result = command.parseResponse(LNX_RESPONSE_ERROR);\n expect(isSuccessCommandResult(result)).toBe(false);\n });\n\n it(\"should return an error if response contains unexpected data\", () => {\n const LNX_RESPONSE_EXTRA = {\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: Uint8Array.from([0x01]),\n };\n\n const result = command.parseResponse(LNX_RESPONSE_EXTRA);\n expect(isSuccessCommandResult(result)).toBe(false);\n // @ts-expect-error response is not typed\n expect(result.error).toBeInstanceOf(InvalidStatusWordError);\n });\n });\n});\n"],
5
- "mappings": "AAAA,OACE,wBAAAA,EACA,0BAAAC,EACA,0BAAAC,MACK,kCAEP,OAAS,+BAAAC,MAAmC,gCAE5C,MAAMC,EAAM,IACNC,EAAM,GACNC,EAAK,EACLC,EAAK,EAELC,EAAgB,WAAW,KAAK,CACpCJ,EACAC,EACAC,EACAC,EACA,EACA,IACA,IACA,IACA,GACF,CAAC,EAED,SAAS,8BAA+B,IAAM,CAC5C,IAAIE,EAEJ,WAAW,IAAM,CACfA,EAAU,IAAIN,EAA4B,CACxC,QAAS,WAAW,KAAK,CAAC,IAAM,IAAM,IAAM,GAAI,CAAC,CACnD,CAAC,CACH,CAAC,EAED,SAAS,UAAW,IAAM,CACxB,GAAG,oCAAqC,IAAM,CAC5C,MAAMO,EAAOD,EAAQ,QAAQ,EAC7B,OAAOC,EAAK,WAAW,CAAC,EAAE,cAAcF,CAAa,CACvD,CAAC,CACH,CAAC,EAED,SAAS,gBAAiB,IAAM,CAC9B,GAAG,0DAA2D,IAAM,CAClE,MAAMG,EAAoB,CACxB,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAM,IAAI,UACZ,EAEMC,EAASH,EAAQ,cAAcE,CAAiB,EACtD,OAAOC,CAAM,EAAE,cAAcZ,EAAqB,CAAE,KAAM,MAAU,CAAC,CAAC,EACtE,OAAOE,EAAuBU,CAAM,CAAC,EAAE,KAAK,EAAI,CAClD,CAAC,EAED,GAAG,0DAA2D,IAAM,CAClE,MAAMC,EAAqB,CACzB,WAAY,WAAW,KAAK,CAAC,IAAM,GAAI,CAAC,EACxC,KAAM,IAAI,UACZ,EAEMC,EAASL,EAAQ,cAAcI,CAAkB,EACvD,OAAOX,EAAuBY,CAAM,CAAC,EAAE,KAAK,EAAK,CACnD,CAAC,EAED,GAAG,8DAA+D,IAAM,CACtE,MAAMC,EAAqB,CACzB,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAM,WAAW,KAAK,CAAC,CAAI,CAAC,CAC9B,EAEMD,EAASL,EAAQ,cAAcM,CAAkB,EACvD,OAAOb,EAAuBY,CAAM,CAAC,EAAE,KAAK,EAAK,EAEjD,OAAOA,EAAO,KAAK,EAAE,eAAeb,CAAsB,CAC5D,CAAC,CACH,CAAC,CACH,CAAC",
4
+ "sourcesContent": ["import {\n CommandResultFactory,\n InvalidStatusWordError,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { ProvideTLVDescriptorCommand } from \"./ProvideTLVDescriptorCommand\";\n\nconst CLA = 0xe0;\nconst INS = 0x21;\nconst P1 = 0x00;\nconst P2 = 0x00;\n\nconst EXPECTED_APDU = Uint8Array.from([\n CLA,\n INS,\n P1,\n P2,\n 0x04,\n 0xde,\n 0xad,\n 0xbe,\n 0xef,\n]);\n\ndescribe(\"ProvideTLVDescriptorCommand\", () => {\n let command: ProvideTLVDescriptorCommand;\n\n beforeEach(() => {\n command = new ProvideTLVDescriptorCommand({\n payload: Uint8Array.from([0xde, 0xad, 0xbe, 0xef]),\n });\n });\n\n describe(\"name\", () => {\n it(\"should be 'provideTLVDescriptor'\", () => {\n expect(command.name).toBe(\"provideTLVDescriptor\");\n });\n });\n\n describe(\"getApdu\", () => {\n it(\"should construct the correct APDU\", () => {\n const apdu = command.getApdu();\n expect(apdu.getRawApdu()).toStrictEqual(EXPECTED_APDU);\n });\n });\n\n describe(\"parseResponse\", () => {\n it(\"should return success when status is 0x9000 and no data\", () => {\n const LNX_RESPONSE_GOOD = {\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: new Uint8Array(),\n };\n\n const parsed = command.parseResponse(LNX_RESPONSE_GOOD);\n expect(parsed).toStrictEqual(CommandResultFactory({ data: undefined }));\n expect(isSuccessCommandResult(parsed)).toBe(true);\n });\n\n it(\"should return an error if the status code is not 0x9000\", () => {\n const LNX_RESPONSE_ERROR = {\n statusCode: Uint8Array.from([0x6a, 0x80]),\n data: new Uint8Array(),\n };\n\n const result = command.parseResponse(LNX_RESPONSE_ERROR);\n expect(isSuccessCommandResult(result)).toBe(false);\n });\n\n it(\"should return an error if response contains unexpected data\", () => {\n const LNX_RESPONSE_EXTRA = {\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: Uint8Array.from([0x01]),\n };\n\n const result = command.parseResponse(LNX_RESPONSE_EXTRA);\n expect(isSuccessCommandResult(result)).toBe(false);\n // @ts-expect-error response is not typed\n expect(result.error).toBeInstanceOf(InvalidStatusWordError);\n });\n });\n});\n"],
5
+ "mappings": "AAAA,OACE,wBAAAA,EACA,0BAAAC,EACA,0BAAAC,MACK,kCAEP,OAAS,+BAAAC,MAAmC,gCAE5C,MAAMC,EAAM,IACNC,EAAM,GACNC,EAAK,EACLC,EAAK,EAELC,EAAgB,WAAW,KAAK,CACpCJ,EACAC,EACAC,EACAC,EACA,EACA,IACA,IACA,IACA,GACF,CAAC,EAED,SAAS,8BAA+B,IAAM,CAC5C,IAAIE,EAEJ,WAAW,IAAM,CACfA,EAAU,IAAIN,EAA4B,CACxC,QAAS,WAAW,KAAK,CAAC,IAAM,IAAM,IAAM,GAAI,CAAC,CACnD,CAAC,CACH,CAAC,EAED,SAAS,OAAQ,IAAM,CACrB,GAAG,mCAAoC,IAAM,CAC3C,OAAOM,EAAQ,IAAI,EAAE,KAAK,sBAAsB,CAClD,CAAC,CACH,CAAC,EAED,SAAS,UAAW,IAAM,CACxB,GAAG,oCAAqC,IAAM,CAC5C,MAAMC,EAAOD,EAAQ,QAAQ,EAC7B,OAAOC,EAAK,WAAW,CAAC,EAAE,cAAcF,CAAa,CACvD,CAAC,CACH,CAAC,EAED,SAAS,gBAAiB,IAAM,CAC9B,GAAG,0DAA2D,IAAM,CAClE,MAAMG,EAAoB,CACxB,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAM,IAAI,UACZ,EAEMC,EAASH,EAAQ,cAAcE,CAAiB,EACtD,OAAOC,CAAM,EAAE,cAAcZ,EAAqB,CAAE,KAAM,MAAU,CAAC,CAAC,EACtE,OAAOE,EAAuBU,CAAM,CAAC,EAAE,KAAK,EAAI,CAClD,CAAC,EAED,GAAG,0DAA2D,IAAM,CAClE,MAAMC,EAAqB,CACzB,WAAY,WAAW,KAAK,CAAC,IAAM,GAAI,CAAC,EACxC,KAAM,IAAI,UACZ,EAEMC,EAASL,EAAQ,cAAcI,CAAkB,EACvD,OAAOX,EAAuBY,CAAM,CAAC,EAAE,KAAK,EAAK,CACnD,CAAC,EAED,GAAG,8DAA+D,IAAM,CACtE,MAAMC,EAAqB,CACzB,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAM,WAAW,KAAK,CAAC,CAAI,CAAC,CAC9B,EAEMD,EAASL,EAAQ,cAAcM,CAAkB,EACvD,OAAOb,EAAuBY,CAAM,CAAC,EAAE,KAAK,EAAK,EAEjD,OAAOA,EAAO,KAAK,EAAE,eAAeb,CAAsB,CAC5D,CAAC,CACH,CAAC,CACH,CAAC",
6
6
  "names": ["CommandResultFactory", "InvalidStatusWordError", "isSuccessCommandResult", "ProvideTLVDescriptorCommand", "CLA", "INS", "P1", "P2", "EXPECTED_APDU", "command", "apdu", "LNX_RESPONSE_GOOD", "parsed", "LNX_RESPONSE_ERROR", "result", "LNX_RESPONSE_EXTRA"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{ApduBuilder as d,CommandResultFactory as o,InvalidStatusWordError as a}from"@ledgerhq/device-management-kit";import{CommandErrorHelper as t}from"@ledgerhq/signer-utils";import{SOLANA_APP_ERRORS as p,SolanaAppCommandErrorFactory as n}from"./utils/SolanaApplicationErrors";const s=176,m=6,u=4,i=0;class y{constructor(r){this.args=r}errorHelper=new t(p,n);getApdu(){const r={cla:s,ins:m,p1:u,p2:i};return new d(r).addBufferToData(this.args.pkiBlob).build()}parseResponse(r){const e=this.errorHelper.getError(r);return e||(r.data.length!==0?o({error:new a("Unexpected data in response")}):o({data:void 0}))}}export{y as ProvideTrustedNamePKICommand};
1
+ import{ApduBuilder as d,CommandResultFactory as o,InvalidStatusWordError as a}from"@ledgerhq/device-management-kit";import{CommandErrorHelper as t}from"@ledgerhq/signer-utils";import{SOLANA_APP_ERRORS as n,SolanaAppCommandErrorFactory as p}from"./utils/SolanaApplicationErrors";const s=176,m=6,u=4,i=0;class y{constructor(r){this.args=r}name="provideTrustedNamePKI";errorHelper=new t(n,p);getApdu(){const r={cla:s,ins:m,p1:u,p2:i};return new d(r).addBufferToData(this.args.pkiBlob).build()}parseResponse(r){const e=this.errorHelper.getError(r);return e||(r.data.length!==0?o({error:new a("Unexpected data in response")}):o({data:void 0}))}}export{y as ProvideTrustedNamePKICommand};
2
2
  //# sourceMappingURL=ProvideTrustedNamePKICommand.js.map