@ledgerhq/device-signer-kit-solana 1.5.1 → 1.6.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 (99) hide show
  1. package/lib/cjs/api/SignerSolanaBuilder.js +1 -1
  2. package/lib/cjs/api/SignerSolanaBuilder.js.map +3 -3
  3. package/lib/cjs/api/SolanaToolsBuilder.js +1 -1
  4. package/lib/cjs/api/SolanaToolsBuilder.js.map +3 -3
  5. package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js.map +1 -1
  6. package/lib/cjs/api/index.js +1 -1
  7. package/lib/cjs/api/index.js.map +2 -2
  8. package/lib/cjs/api/model/TransactionResolutionContext.js +1 -1
  9. package/lib/cjs/api/model/TransactionResolutionContext.js.map +3 -3
  10. package/lib/cjs/internal/DefaultSignerSolana.test.js +1 -1
  11. package/lib/cjs/internal/DefaultSignerSolana.test.js.map +3 -3
  12. package/lib/cjs/internal/DefaultSolanaTools.test.js +1 -1
  13. package/lib/cjs/internal/DefaultSolanaTools.test.js.map +3 -3
  14. package/lib/cjs/internal/app-binder/SolanaAppBinder.js +1 -1
  15. package/lib/cjs/internal/app-binder/SolanaAppBinder.js.map +3 -3
  16. package/lib/cjs/internal/app-binder/SolanaAppBinder.test.js +1 -1
  17. package/lib/cjs/internal/app-binder/SolanaAppBinder.test.js.map +3 -3
  18. package/lib/cjs/internal/app-binder/command/SignTransactionCommand.js +1 -1
  19. package/lib/cjs/internal/app-binder/command/SignTransactionCommand.js.map +3 -3
  20. package/lib/cjs/internal/app-binder/command/SignTransactionCommand.test.js +1 -1
  21. package/lib/cjs/internal/app-binder/command/SignTransactionCommand.test.js.map +3 -3
  22. package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.js +1 -1
  23. package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.js.map +3 -3
  24. package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.test.js +1 -1
  25. package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.test.js.map +3 -3
  26. package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.js +1 -1
  27. package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.js.map +3 -3
  28. package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.test.js +1 -1
  29. package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.test.js.map +3 -3
  30. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.js +1 -1
  31. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.js.map +3 -3
  32. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.test.js +1 -1
  33. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.test.js.map +3 -3
  34. package/lib/cjs/internal/di.js +1 -1
  35. package/lib/cjs/internal/di.js.map +3 -3
  36. package/lib/cjs/internal/externalTypes.js +1 -1
  37. package/lib/cjs/internal/externalTypes.js.map +2 -2
  38. package/lib/cjs/package.json +2 -2
  39. package/lib/esm/api/SignerSolanaBuilder.js +1 -1
  40. package/lib/esm/api/SignerSolanaBuilder.js.map +3 -3
  41. package/lib/esm/api/SolanaToolsBuilder.js +1 -1
  42. package/lib/esm/api/SolanaToolsBuilder.js.map +3 -3
  43. package/lib/esm/api/app-binder/SignTransactionDeviceActionTypes.js.map +1 -1
  44. package/lib/esm/api/index.js +1 -1
  45. package/lib/esm/api/index.js.map +2 -2
  46. package/lib/esm/api/model/TransactionResolutionContext.js +1 -0
  47. package/lib/esm/api/model/TransactionResolutionContext.js.map +4 -4
  48. package/lib/esm/internal/DefaultSignerSolana.test.js +1 -1
  49. package/lib/esm/internal/DefaultSignerSolana.test.js.map +3 -3
  50. package/lib/esm/internal/DefaultSolanaTools.test.js +1 -1
  51. package/lib/esm/internal/DefaultSolanaTools.test.js.map +3 -3
  52. package/lib/esm/internal/app-binder/SolanaAppBinder.js +1 -1
  53. package/lib/esm/internal/app-binder/SolanaAppBinder.js.map +3 -3
  54. package/lib/esm/internal/app-binder/SolanaAppBinder.test.js +1 -1
  55. package/lib/esm/internal/app-binder/SolanaAppBinder.test.js.map +3 -3
  56. package/lib/esm/internal/app-binder/command/SignTransactionCommand.js +1 -1
  57. package/lib/esm/internal/app-binder/command/SignTransactionCommand.js.map +3 -3
  58. package/lib/esm/internal/app-binder/command/SignTransactionCommand.test.js +1 -1
  59. package/lib/esm/internal/app-binder/command/SignTransactionCommand.test.js.map +3 -3
  60. package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.js +1 -1
  61. package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.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 +3 -3
  64. package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.js +1 -1
  65. package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.js.map +3 -3
  66. package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.test.js +1 -1
  67. package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.test.js.map +3 -3
  68. package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.js +1 -1
  69. package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.js.map +3 -3
  70. package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.test.js +1 -1
  71. package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.test.js.map +3 -3
  72. package/lib/esm/internal/di.js +1 -1
  73. package/lib/esm/internal/di.js.map +3 -3
  74. package/lib/esm/internal/externalTypes.js +1 -1
  75. package/lib/esm/internal/externalTypes.js.map +2 -2
  76. package/lib/esm/package.json +2 -2
  77. package/lib/types/api/SignerSolanaBuilder.d.ts.map +1 -1
  78. package/lib/types/api/SolanaToolsBuilder.d.ts.map +1 -1
  79. package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts +1 -1
  80. package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts.map +1 -1
  81. package/lib/types/api/index.d.ts +1 -0
  82. package/lib/types/api/index.d.ts.map +1 -1
  83. package/lib/types/api/model/TransactionResolutionContext.d.ts +5 -0
  84. package/lib/types/api/model/TransactionResolutionContext.d.ts.map +1 -1
  85. package/lib/types/internal/app-binder/SolanaAppBinder.d.ts +3 -2
  86. package/lib/types/internal/app-binder/SolanaAppBinder.d.ts.map +1 -1
  87. package/lib/types/internal/app-binder/command/SignTransactionCommand.d.ts +2 -0
  88. package/lib/types/internal/app-binder/command/SignTransactionCommand.d.ts.map +1 -1
  89. package/lib/types/internal/app-binder/device-action/SignTransactionDeviceAction.d.ts +9 -3
  90. package/lib/types/internal/app-binder/device-action/SignTransactionDeviceAction.d.ts.map +1 -1
  91. package/lib/types/internal/app-binder/task/BuildTransactionContextTask.d.ts +3 -1
  92. package/lib/types/internal/app-binder/task/BuildTransactionContextTask.d.ts.map +1 -1
  93. package/lib/types/internal/app-binder/task/ProvideTransactionContextTask.d.ts +9 -6
  94. package/lib/types/internal/app-binder/task/ProvideTransactionContextTask.d.ts.map +1 -1
  95. package/lib/types/internal/di.d.ts.map +1 -1
  96. package/lib/types/internal/externalTypes.d.ts +1 -0
  97. package/lib/types/internal/externalTypes.d.ts.map +1 -1
  98. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  99. package/package.json +7 -7
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/internal/DefaultSignerSolana.test.ts"],
4
- "sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n type DeviceManagementKit,\n type DeviceSessionId,\n} from \"@ledgerhq/device-management-kit\";\nimport { vi } from \"vitest\";\n\nimport { DefaultSignerSolana } from \"./DefaultSignerSolana\";\n\ndescribe(\"DefaultSignerSolana\", () => {\n const contextModuleStub: ContextModule = {} as ContextModule;\n\n it(\"should be defined\", () => {\n const signer = new DefaultSignerSolana({\n dmk: {} as DeviceManagementKit,\n sessionId: {} as DeviceSessionId,\n contextModule: contextModuleStub,\n });\n expect(signer).toBeDefined();\n });\n\n it(\"should call getAddress\", () => {\n const dmk = {\n executeDeviceAction: vi.fn(),\n } as unknown as DeviceManagementKit;\n const sessionId = {} as DeviceSessionId;\n const signer = new DefaultSignerSolana({\n dmk,\n sessionId,\n contextModule: contextModuleStub,\n });\n signer.getAddress(\"derivationPath\", {});\n expect(dmk.executeDeviceAction).toHaveBeenCalled();\n });\n\n it(\"should call signTransaction\", () => {\n const dmk = {\n executeDeviceAction: vi.fn(),\n } as unknown as DeviceManagementKit;\n const sessionId = {} as DeviceSessionId;\n const signer = new DefaultSignerSolana({\n dmk,\n sessionId,\n contextModule: contextModuleStub,\n });\n signer.signTransaction(\"derivationPath\", new Uint8Array());\n expect(dmk.executeDeviceAction).toHaveBeenCalled();\n });\n\n it(\"should call signMessage\", () => {\n const dmk = {\n executeDeviceAction: vi.fn(),\n } as unknown as DeviceManagementKit;\n const sessionId = {} as DeviceSessionId;\n const signer = new DefaultSignerSolana({\n dmk,\n sessionId,\n contextModule: contextModuleStub,\n });\n signer.signMessage(\"44'/501'/0'/0'\", \"Hello world\");\n expect(dmk.executeDeviceAction).toHaveBeenCalled();\n });\n\n it(\"should call getAppConfiguration\", () => {\n const dmk = {\n executeDeviceAction: vi.fn(),\n } as unknown as DeviceManagementKit;\n const sessionId = {} as DeviceSessionId;\n const signer = new DefaultSignerSolana({\n dmk,\n sessionId,\n contextModule: contextModuleStub,\n });\n signer.getAppConfiguration();\n expect(dmk.executeDeviceAction).toHaveBeenCalled();\n });\n});\n"],
5
- "mappings": "AAKA,OAAS,MAAAA,MAAU,SAEnB,OAAS,uBAAAC,MAA2B,wBAEpC,SAAS,sBAAuB,IAAM,CACpC,MAAMC,EAAmC,CAAC,EAE1C,GAAG,oBAAqB,IAAM,CAC5B,MAAMC,EAAS,IAAIF,EAAoB,CACrC,IAAK,CAAC,EACN,UAAW,CAAC,EACZ,cAAeC,CACjB,CAAC,EACD,OAAOC,CAAM,EAAE,YAAY,CAC7B,CAAC,EAED,GAAG,yBAA0B,IAAM,CACjC,MAAMC,EAAM,CACV,oBAAqBJ,EAAG,GAAG,CAC7B,EACMK,EAAY,CAAC,EACJ,IAAIJ,EAAoB,CACrC,IAAAG,EACA,UAAAC,EACA,cAAeH,CACjB,CAAC,EACM,WAAW,iBAAkB,CAAC,CAAC,EACtC,OAAOE,EAAI,mBAAmB,EAAE,iBAAiB,CACnD,CAAC,EAED,GAAG,8BAA+B,IAAM,CACtC,MAAMA,EAAM,CACV,oBAAqBJ,EAAG,GAAG,CAC7B,EACMK,EAAY,CAAC,EACJ,IAAIJ,EAAoB,CACrC,IAAAG,EACA,UAAAC,EACA,cAAeH,CACjB,CAAC,EACM,gBAAgB,iBAAkB,IAAI,UAAY,EACzD,OAAOE,EAAI,mBAAmB,EAAE,iBAAiB,CACnD,CAAC,EAED,GAAG,0BAA2B,IAAM,CAClC,MAAMA,EAAM,CACV,oBAAqBJ,EAAG,GAAG,CAC7B,EACMK,EAAY,CAAC,EACJ,IAAIJ,EAAoB,CACrC,IAAAG,EACA,UAAAC,EACA,cAAeH,CACjB,CAAC,EACM,YAAY,iBAAkB,aAAa,EAClD,OAAOE,EAAI,mBAAmB,EAAE,iBAAiB,CACnD,CAAC,EAED,GAAG,kCAAmC,IAAM,CAC1C,MAAMA,EAAM,CACV,oBAAqBJ,EAAG,GAAG,CAC7B,EACMK,EAAY,CAAC,EACJ,IAAIJ,EAAoB,CACrC,IAAAG,EACA,UAAAC,EACA,cAAeH,CACjB,CAAC,EACM,oBAAoB,EAC3B,OAAOE,EAAI,mBAAmB,EAAE,iBAAiB,CACnD,CAAC,CACH,CAAC",
6
- "names": ["vi", "DefaultSignerSolana", "contextModuleStub", "signer", "dmk", "sessionId"]
4
+ "sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n type DeviceManagementKit,\n type DeviceSessionId,\n} from \"@ledgerhq/device-management-kit\";\nimport { vi } from \"vitest\";\n\nimport { DefaultSignerSolana } from \"./DefaultSignerSolana\";\n\nconst mockLoggerFactory = () => ({\n debug: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n subscribers: [],\n});\n\ndescribe(\"DefaultSignerSolana\", () => {\n const contextModuleStub: ContextModule = {} as ContextModule;\n\n it(\"should be defined\", () => {\n const signer = new DefaultSignerSolana({\n dmk: {} as DeviceManagementKit,\n sessionId: {} as DeviceSessionId,\n contextModule: contextModuleStub,\n });\n expect(signer).toBeDefined();\n });\n\n it(\"should call getAddress\", () => {\n const dmk = {\n executeDeviceAction: vi.fn(),\n getLoggerFactory: vi.fn().mockReturnValue(mockLoggerFactory),\n } as unknown as DeviceManagementKit;\n const sessionId = {} as DeviceSessionId;\n const signer = new DefaultSignerSolana({\n dmk,\n sessionId,\n contextModule: contextModuleStub,\n });\n signer.getAddress(\"derivationPath\", {});\n expect(dmk.executeDeviceAction).toHaveBeenCalled();\n });\n\n it(\"should call signTransaction\", () => {\n const dmk = {\n executeDeviceAction: vi.fn(),\n getLoggerFactory: vi.fn().mockReturnValue(mockLoggerFactory),\n } as unknown as DeviceManagementKit;\n const sessionId = {} as DeviceSessionId;\n const signer = new DefaultSignerSolana({\n dmk,\n sessionId,\n contextModule: contextModuleStub,\n });\n signer.signTransaction(\"derivationPath\", new Uint8Array());\n expect(dmk.executeDeviceAction).toHaveBeenCalled();\n });\n\n it(\"should call signMessage\", () => {\n const dmk = {\n executeDeviceAction: vi.fn(),\n getLoggerFactory: vi.fn().mockReturnValue(mockLoggerFactory),\n } as unknown as DeviceManagementKit;\n const sessionId = {} as DeviceSessionId;\n const signer = new DefaultSignerSolana({\n dmk,\n sessionId,\n contextModule: contextModuleStub,\n });\n signer.signMessage(\"44'/501'/0'/0'\", \"Hello world\");\n expect(dmk.executeDeviceAction).toHaveBeenCalled();\n });\n\n it(\"should call getAppConfiguration\", () => {\n const dmk = {\n executeDeviceAction: vi.fn(),\n getLoggerFactory: vi.fn().mockReturnValue(mockLoggerFactory),\n } as unknown as DeviceManagementKit;\n const sessionId = {} as DeviceSessionId;\n const signer = new DefaultSignerSolana({\n dmk,\n sessionId,\n contextModule: contextModuleStub,\n });\n signer.getAppConfiguration();\n expect(dmk.executeDeviceAction).toHaveBeenCalled();\n });\n});\n"],
5
+ "mappings": "AAKA,OAAS,MAAAA,MAAU,SAEnB,OAAS,uBAAAC,MAA2B,wBAEpC,MAAMC,EAAoB,KAAO,CAC/B,MAAOF,EAAG,GAAG,EACb,KAAMA,EAAG,GAAG,EACZ,KAAMA,EAAG,GAAG,EACZ,MAAOA,EAAG,GAAG,EACb,YAAa,CAAC,CAChB,GAEA,SAAS,sBAAuB,IAAM,CACpC,MAAMG,EAAmC,CAAC,EAE1C,GAAG,oBAAqB,IAAM,CAC5B,MAAMC,EAAS,IAAIH,EAAoB,CACrC,IAAK,CAAC,EACN,UAAW,CAAC,EACZ,cAAeE,CACjB,CAAC,EACD,OAAOC,CAAM,EAAE,YAAY,CAC7B,CAAC,EAED,GAAG,yBAA0B,IAAM,CACjC,MAAMC,EAAM,CACV,oBAAqBL,EAAG,GAAG,EAC3B,iBAAkBA,EAAG,GAAG,EAAE,gBAAgBE,CAAiB,CAC7D,EACMI,EAAY,CAAC,EACJ,IAAIL,EAAoB,CACrC,IAAAI,EACA,UAAAC,EACA,cAAeH,CACjB,CAAC,EACM,WAAW,iBAAkB,CAAC,CAAC,EACtC,OAAOE,EAAI,mBAAmB,EAAE,iBAAiB,CACnD,CAAC,EAED,GAAG,8BAA+B,IAAM,CACtC,MAAMA,EAAM,CACV,oBAAqBL,EAAG,GAAG,EAC3B,iBAAkBA,EAAG,GAAG,EAAE,gBAAgBE,CAAiB,CAC7D,EACMI,EAAY,CAAC,EACJ,IAAIL,EAAoB,CACrC,IAAAI,EACA,UAAAC,EACA,cAAeH,CACjB,CAAC,EACM,gBAAgB,iBAAkB,IAAI,UAAY,EACzD,OAAOE,EAAI,mBAAmB,EAAE,iBAAiB,CACnD,CAAC,EAED,GAAG,0BAA2B,IAAM,CAClC,MAAMA,EAAM,CACV,oBAAqBL,EAAG,GAAG,EAC3B,iBAAkBA,EAAG,GAAG,EAAE,gBAAgBE,CAAiB,CAC7D,EACMI,EAAY,CAAC,EACJ,IAAIL,EAAoB,CACrC,IAAAI,EACA,UAAAC,EACA,cAAeH,CACjB,CAAC,EACM,YAAY,iBAAkB,aAAa,EAClD,OAAOE,EAAI,mBAAmB,EAAE,iBAAiB,CACnD,CAAC,EAED,GAAG,kCAAmC,IAAM,CAC1C,MAAMA,EAAM,CACV,oBAAqBL,EAAG,GAAG,EAC3B,iBAAkBA,EAAG,GAAG,EAAE,gBAAgBE,CAAiB,CAC7D,EACMI,EAAY,CAAC,EACJ,IAAIL,EAAoB,CACrC,IAAAI,EACA,UAAAC,EACA,cAAeH,CACjB,CAAC,EACM,oBAAoB,EAC3B,OAAOE,EAAI,mBAAmB,EAAE,iBAAiB,CACnD,CAAC,CACH,CAAC",
6
+ "names": ["vi", "DefaultSignerSolana", "mockLoggerFactory", "contextModuleStub", "signer", "dmk", "sessionId"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{vi as s}from"vitest";import{DefaultSolanaTools as t}from"./DefaultSolanaTools";describe("DefaultSolanaTools",()=>{const n={};it("should be defined",()=>{const e=new t({dmk:{},sessionId:{},contextModule:n});expect(e).toBeDefined()}),it("should call getAddress",()=>{const e={executeDeviceAction:s.fn()},o={};new t({dmk:e,sessionId:o,contextModule:n}).getAddress("derivationPath",{}),expect(e.executeDeviceAction).toHaveBeenCalled()}),it("should call getAppConfiguration",()=>{const e={executeDeviceAction:s.fn()},o={};new t({dmk:e,sessionId:o,contextModule:n}).getAppConfiguration(),expect(e.executeDeviceAction).toHaveBeenCalled()}),it("should call generateTransaction",()=>{const e={executeDeviceAction:s.fn()},o={};new t({dmk:e,sessionId:o,contextModule:n}).generateTransaction("derivationPath"),expect(e.executeDeviceAction).toHaveBeenCalled()})});
1
+ import{vi as o}from"vitest";import{DefaultSolanaTools as s}from"./DefaultSolanaTools";const a=()=>({debug:o.fn(),info:o.fn(),warn:o.fn(),error:o.fn(),subscribers:[]});describe("DefaultSolanaTools",()=>{const t={};it("should be defined",()=>{const e=new s({dmk:{},sessionId:{},contextModule:t});expect(e).toBeDefined()}),it("should call getAddress",()=>{const e={executeDeviceAction:o.fn(),getLoggerFactory:o.fn().mockReturnValue(a)},n={};new s({dmk:e,sessionId:n,contextModule:t}).getAddress("derivationPath",{}),expect(e.executeDeviceAction).toHaveBeenCalled()}),it("should call getAppConfiguration",()=>{const e={executeDeviceAction:o.fn(),getLoggerFactory:o.fn().mockReturnValue(a)},n={};new s({dmk:e,sessionId:n,contextModule:t}).getAppConfiguration(),expect(e.executeDeviceAction).toHaveBeenCalled()}),it("should call generateTransaction",()=>{const e={executeDeviceAction:o.fn(),getLoggerFactory:o.fn().mockReturnValue(a)},n={};new s({dmk:e,sessionId:n,contextModule:t}).generateTransaction("derivationPath"),expect(e.executeDeviceAction).toHaveBeenCalled()})});
2
2
  //# sourceMappingURL=DefaultSolanaTools.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/internal/DefaultSolanaTools.test.ts"],
4
- "sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n type DeviceManagementKit,\n type DeviceSessionId,\n} from \"@ledgerhq/device-management-kit\";\nimport { vi } from \"vitest\";\n\nimport { DefaultSolanaTools } from \"./DefaultSolanaTools\";\n\ndescribe(\"DefaultSolanaTools\", () => {\n const contextModuleStub: ContextModule = {} as ContextModule;\n\n it(\"should be defined\", () => {\n const solanaTools = new DefaultSolanaTools({\n dmk: {} as DeviceManagementKit,\n sessionId: {} as DeviceSessionId,\n contextModule: contextModuleStub,\n });\n expect(solanaTools).toBeDefined();\n });\n\n it(\"should call getAddress\", () => {\n const dmk = {\n executeDeviceAction: vi.fn(),\n } as unknown as DeviceManagementKit;\n const sessionId = {} as DeviceSessionId;\n const solanaTools = new DefaultSolanaTools({\n dmk,\n sessionId,\n contextModule: contextModuleStub,\n });\n solanaTools.getAddress(\"derivationPath\", {});\n expect(dmk.executeDeviceAction).toHaveBeenCalled();\n });\n\n it(\"should call getAppConfiguration\", () => {\n const dmk = {\n executeDeviceAction: vi.fn(),\n } as unknown as DeviceManagementKit;\n const sessionId = {} as DeviceSessionId;\n const solanaTools = new DefaultSolanaTools({\n dmk,\n sessionId,\n contextModule: contextModuleStub,\n });\n solanaTools.getAppConfiguration();\n expect(dmk.executeDeviceAction).toHaveBeenCalled();\n });\n\n it(\"should call generateTransaction\", () => {\n const dmk = {\n executeDeviceAction: vi.fn(),\n } as unknown as DeviceManagementKit;\n const sessionId = {} as DeviceSessionId;\n const solanaTools = new DefaultSolanaTools({\n dmk,\n sessionId,\n contextModule: contextModuleStub,\n });\n solanaTools.generateTransaction(\"derivationPath\");\n expect(dmk.executeDeviceAction).toHaveBeenCalled();\n });\n});\n"],
5
- "mappings": "AAKA,OAAS,MAAAA,MAAU,SAEnB,OAAS,sBAAAC,MAA0B,uBAEnC,SAAS,qBAAsB,IAAM,CACnC,MAAMC,EAAmC,CAAC,EAE1C,GAAG,oBAAqB,IAAM,CAC5B,MAAMC,EAAc,IAAIF,EAAmB,CACzC,IAAK,CAAC,EACN,UAAW,CAAC,EACZ,cAAeC,CACjB,CAAC,EACD,OAAOC,CAAW,EAAE,YAAY,CAClC,CAAC,EAED,GAAG,yBAA0B,IAAM,CACjC,MAAMC,EAAM,CACV,oBAAqBJ,EAAG,GAAG,CAC7B,EACMK,EAAY,CAAC,EACC,IAAIJ,EAAmB,CACzC,IAAAG,EACA,UAAAC,EACA,cAAeH,CACjB,CAAC,EACW,WAAW,iBAAkB,CAAC,CAAC,EAC3C,OAAOE,EAAI,mBAAmB,EAAE,iBAAiB,CACnD,CAAC,EAED,GAAG,kCAAmC,IAAM,CAC1C,MAAMA,EAAM,CACV,oBAAqBJ,EAAG,GAAG,CAC7B,EACMK,EAAY,CAAC,EACC,IAAIJ,EAAmB,CACzC,IAAAG,EACA,UAAAC,EACA,cAAeH,CACjB,CAAC,EACW,oBAAoB,EAChC,OAAOE,EAAI,mBAAmB,EAAE,iBAAiB,CACnD,CAAC,EAED,GAAG,kCAAmC,IAAM,CAC1C,MAAMA,EAAM,CACV,oBAAqBJ,EAAG,GAAG,CAC7B,EACMK,EAAY,CAAC,EACC,IAAIJ,EAAmB,CACzC,IAAAG,EACA,UAAAC,EACA,cAAeH,CACjB,CAAC,EACW,oBAAoB,gBAAgB,EAChD,OAAOE,EAAI,mBAAmB,EAAE,iBAAiB,CACnD,CAAC,CACH,CAAC",
6
- "names": ["vi", "DefaultSolanaTools", "contextModuleStub", "solanaTools", "dmk", "sessionId"]
4
+ "sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n type DeviceManagementKit,\n type DeviceSessionId,\n} from \"@ledgerhq/device-management-kit\";\nimport { vi } from \"vitest\";\n\nimport { DefaultSolanaTools } from \"./DefaultSolanaTools\";\n\nconst mockLoggerFactory = () => ({\n debug: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n subscribers: [],\n});\n\ndescribe(\"DefaultSolanaTools\", () => {\n const contextModuleStub: ContextModule = {} as ContextModule;\n\n it(\"should be defined\", () => {\n const solanaTools = new DefaultSolanaTools({\n dmk: {} as DeviceManagementKit,\n sessionId: {} as DeviceSessionId,\n contextModule: contextModuleStub,\n });\n expect(solanaTools).toBeDefined();\n });\n\n it(\"should call getAddress\", () => {\n const dmk = {\n executeDeviceAction: vi.fn(),\n getLoggerFactory: vi.fn().mockReturnValue(mockLoggerFactory),\n } as unknown as DeviceManagementKit;\n const sessionId = {} as DeviceSessionId;\n const solanaTools = new DefaultSolanaTools({\n dmk,\n sessionId,\n contextModule: contextModuleStub,\n });\n solanaTools.getAddress(\"derivationPath\", {});\n expect(dmk.executeDeviceAction).toHaveBeenCalled();\n });\n\n it(\"should call getAppConfiguration\", () => {\n const dmk = {\n executeDeviceAction: vi.fn(),\n getLoggerFactory: vi.fn().mockReturnValue(mockLoggerFactory),\n } as unknown as DeviceManagementKit;\n const sessionId = {} as DeviceSessionId;\n const solanaTools = new DefaultSolanaTools({\n dmk,\n sessionId,\n contextModule: contextModuleStub,\n });\n solanaTools.getAppConfiguration();\n expect(dmk.executeDeviceAction).toHaveBeenCalled();\n });\n\n it(\"should call generateTransaction\", () => {\n const dmk = {\n executeDeviceAction: vi.fn(),\n getLoggerFactory: vi.fn().mockReturnValue(mockLoggerFactory),\n } as unknown as DeviceManagementKit;\n const sessionId = {} as DeviceSessionId;\n const solanaTools = new DefaultSolanaTools({\n dmk,\n sessionId,\n contextModule: contextModuleStub,\n });\n solanaTools.generateTransaction(\"derivationPath\");\n expect(dmk.executeDeviceAction).toHaveBeenCalled();\n });\n});\n"],
5
+ "mappings": "AAKA,OAAS,MAAAA,MAAU,SAEnB,OAAS,sBAAAC,MAA0B,uBAEnC,MAAMC,EAAoB,KAAO,CAC/B,MAAOF,EAAG,GAAG,EACb,KAAMA,EAAG,GAAG,EACZ,KAAMA,EAAG,GAAG,EACZ,MAAOA,EAAG,GAAG,EACb,YAAa,CAAC,CAChB,GAEA,SAAS,qBAAsB,IAAM,CACnC,MAAMG,EAAmC,CAAC,EAE1C,GAAG,oBAAqB,IAAM,CAC5B,MAAMC,EAAc,IAAIH,EAAmB,CACzC,IAAK,CAAC,EACN,UAAW,CAAC,EACZ,cAAeE,CACjB,CAAC,EACD,OAAOC,CAAW,EAAE,YAAY,CAClC,CAAC,EAED,GAAG,yBAA0B,IAAM,CACjC,MAAMC,EAAM,CACV,oBAAqBL,EAAG,GAAG,EAC3B,iBAAkBA,EAAG,GAAG,EAAE,gBAAgBE,CAAiB,CAC7D,EACMI,EAAY,CAAC,EACC,IAAIL,EAAmB,CACzC,IAAAI,EACA,UAAAC,EACA,cAAeH,CACjB,CAAC,EACW,WAAW,iBAAkB,CAAC,CAAC,EAC3C,OAAOE,EAAI,mBAAmB,EAAE,iBAAiB,CACnD,CAAC,EAED,GAAG,kCAAmC,IAAM,CAC1C,MAAMA,EAAM,CACV,oBAAqBL,EAAG,GAAG,EAC3B,iBAAkBA,EAAG,GAAG,EAAE,gBAAgBE,CAAiB,CAC7D,EACMI,EAAY,CAAC,EACC,IAAIL,EAAmB,CACzC,IAAAI,EACA,UAAAC,EACA,cAAeH,CACjB,CAAC,EACW,oBAAoB,EAChC,OAAOE,EAAI,mBAAmB,EAAE,iBAAiB,CACnD,CAAC,EAED,GAAG,kCAAmC,IAAM,CAC1C,MAAMA,EAAM,CACV,oBAAqBL,EAAG,GAAG,EAC3B,iBAAkBA,EAAG,GAAG,EAAE,gBAAgBE,CAAiB,CAC7D,EACMI,EAAY,CAAC,EACC,IAAIL,EAAmB,CACzC,IAAAI,EACA,UAAAC,EACA,cAAeH,CACjB,CAAC,EACW,oBAAoB,gBAAgB,EAChD,OAAOE,EAAI,mBAAmB,EAAE,iBAAiB,CACnD,CAAC,CACH,CAAC",
6
+ "names": ["vi", "DefaultSolanaTools", "mockLoggerFactory", "contextModuleStub", "solanaTools", "dmk", "sessionId"]
7
7
  }
@@ -1,2 +1,2 @@
1
- var v=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var u=(o,e,n,t)=>{for(var i=t>1?void 0:t?g(e,n):e,p=o.length-1,c;p>=0;p--)(c=o[p])&&(i=(t?c(e,n,i):c(i))||i);return t&&i&&v(e,n,i),i},s=(o,e)=>(n,t)=>e(n,t,o);import{CallTaskInAppDeviceAction as T,SendCommandInAppDeviceAction as A,UserInteractionRequired as a}from"@ledgerhq/device-management-kit";import{inject as d,injectable as l}from"inversify";import{SendSignMessageTask as D}from"../app-binder/task/SendSignMessageTask";import{externalTypes as m}from"../externalTypes";import{GetAppConfigurationCommand as f}from"./command/GetAppConfigurationCommand";import{GetPubKeyCommand as h}from"./command/GetPubKeyCommand";import{GenerateTransactionDeviceAction as k}from"./device-action/GenerateTransactionDeviceAction";import{SignTransactionDeviceAction as I}from"./device-action/SignTransactionDeviceAction";let r=class{constructor(e,n,t){this.dmk=e;this.sessionId=n;this.contextModule=t}getAddress(e){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new A({input:{command:new h(e),appName:"Solana",requiredUserInteraction:e.checkOnDevice?a.VerifyAddress:a.None,skipOpenApp:e.skipOpenApp}})})}signTransaction(e){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new I({input:{derivationPath:e.derivationPath,transaction:e.transaction,transactionOptions:e.solanaTransactionOptionalConfig,contextModule:this.contextModule}})})}generateTransaction(e){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new k({input:{derivationPath:e.derivationPath,skipOpenApp:e.skipOpenApp,contextModule:this.contextModule}})})}signMessage(e){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new T({input:{task:async n=>new D(n,{derivationPath:e.derivationPath,sendingData:new TextEncoder().encode(e.message)}).run(),appName:"Solana",requiredUserInteraction:a.SignPersonalMessage,skipOpenApp:e.skipOpenApp}})})}getAppConfiguration(){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new A({input:{command:new f,appName:"Solana",requiredUserInteraction:a.None,skipOpenApp:!1}})})}};r=u([l(),s(0,d(m.Dmk)),s(1,d(m.SessionId)),s(2,d(m.ContextModule))],r);export{r as SolanaAppBinder};
1
+ var u=Object.defineProperty;var v=Object.getOwnPropertyDescriptor;var g=(o,e,n,i)=>{for(var t=i>1?void 0:i?v(e,n):e,d=o.length-1,m;d>=0;d--)(m=o[d])&&(t=(i?m(e,n,t):m(t))||t);return i&&t&&u(e,n,t),t},r=(o,e)=>(n,i)=>e(n,i,o);import{CallTaskInAppDeviceAction as l,SendCommandInAppDeviceAction as A,UserInteractionRequired as a}from"@ledgerhq/device-management-kit";import{inject as s,injectable as D}from"inversify";import{SendSignMessageTask as h}from"../app-binder/task/SendSignMessageTask";import{externalTypes as p}from"../externalTypes";import{GetAppConfigurationCommand as k}from"./command/GetAppConfigurationCommand";import{GetPubKeyCommand as T}from"./command/GetPubKeyCommand";import{GenerateTransactionDeviceAction as f}from"./device-action/GenerateTransactionDeviceAction";import{SignTransactionDeviceAction as y}from"./device-action/SignTransactionDeviceAction";let c=class{constructor(e,n,i,t){this.dmk=e;this.sessionId=n;this.contextModule=i;this.dmkLoggerFactory=t}getAddress(e){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new A({input:{command:new T(e),appName:"Solana",requiredUserInteraction:e.checkOnDevice?a.VerifyAddress:a.None,skipOpenApp:e.skipOpenApp},logger:this.dmkLoggerFactory("SendCommandInAppDeviceAction")})})}signTransaction(e){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new y({input:{derivationPath:e.derivationPath,transaction:e.transaction,transactionOptions:e.solanaTransactionOptionalConfig,contextModule:this.contextModule},loggerFactory:this.dmkLoggerFactory})})}generateTransaction(e){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new f({input:{derivationPath:e.derivationPath,skipOpenApp:e.skipOpenApp,contextModule:this.contextModule}})})}signMessage(e){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new l({input:{task:async n=>new h(n,{derivationPath:e.derivationPath,sendingData:new TextEncoder().encode(e.message)}).run(),appName:"Solana",requiredUserInteraction:a.SignPersonalMessage,skipOpenApp:e.skipOpenApp},logger:this.dmkLoggerFactory("CallTaskInAppDeviceAction")})})}getAppConfiguration(){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new A({input:{command:new k,appName:"Solana",requiredUserInteraction:a.None,skipOpenApp:!1},logger:this.dmkLoggerFactory("SendCommandInAppDeviceAction")})})}};c=g([D(),r(0,s(p.Dmk)),r(1,s(p.SessionId)),r(2,s(p.ContextModule)),r(3,s(p.DmkLoggerFactory))],c);export{c as SolanaAppBinder};
2
2
  //# sourceMappingURL=SolanaAppBinder.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/internal/app-binder/SolanaAppBinder.ts"],
4
- "sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n CallTaskInAppDeviceAction,\n DeviceManagementKit,\n type DeviceSessionId,\n SendCommandInAppDeviceAction,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport { GenerateTransactionDAReturnType } from \"@api/app-binder/GenerateTransactionDeviceActionTypes\";\nimport { GetAddressDAReturnType } from \"@api/app-binder/GetAddressDeviceActionTypes\";\nimport { GetAppConfigurationDAReturnType } from \"@api/app-binder/GetAppConfigurationDeviceActionTypes\";\nimport { SignMessageDAReturnType } from \"@api/app-binder/SignMessageDeviceActionTypes\";\nimport { SignTransactionDAReturnType } from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { SolanaTransactionOptionalConfig } from \"@api/model/SolanaTransactionOptionalConfig\";\nimport { Transaction } from \"@api/model/Transaction\";\nimport { SendSignMessageTask } from \"@internal/app-binder/task/SendSignMessageTask\";\nimport { externalTypes } from \"@internal/externalTypes\";\n\nimport { GetAppConfigurationCommand } from \"./command/GetAppConfigurationCommand\";\nimport { GetPubKeyCommand } from \"./command/GetPubKeyCommand\";\nimport { GenerateTransactionDeviceAction } from \"./device-action/GenerateTransactionDeviceAction\";\nimport { SignTransactionDeviceAction } from \"./device-action/SignTransactionDeviceAction\";\n\n@injectable()\nexport class SolanaAppBinder {\n constructor(\n @inject(externalTypes.Dmk) private dmk: DeviceManagementKit,\n @inject(externalTypes.SessionId) private sessionId: DeviceSessionId,\n @inject(externalTypes.ContextModule) private contextModule: ContextModule,\n ) {}\n\n getAddress(args: {\n derivationPath: string;\n checkOnDevice: boolean;\n skipOpenApp: boolean;\n }): GetAddressDAReturnType {\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new SendCommandInAppDeviceAction({\n input: {\n command: new GetPubKeyCommand(args),\n appName: \"Solana\",\n requiredUserInteraction: args.checkOnDevice\n ? UserInteractionRequired.VerifyAddress\n : UserInteractionRequired.None,\n skipOpenApp: args.skipOpenApp,\n },\n }),\n });\n }\n\n signTransaction(args: {\n derivationPath: string;\n transaction: Transaction;\n solanaTransactionOptionalConfig?: SolanaTransactionOptionalConfig;\n }): SignTransactionDAReturnType {\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new SignTransactionDeviceAction({\n input: {\n derivationPath: args.derivationPath,\n transaction: args.transaction,\n transactionOptions: args.solanaTransactionOptionalConfig,\n contextModule: this.contextModule,\n },\n }),\n });\n }\n\n generateTransaction(args: {\n derivationPath: string;\n skipOpenApp: boolean;\n }): GenerateTransactionDAReturnType {\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new GenerateTransactionDeviceAction({\n input: {\n derivationPath: args.derivationPath,\n skipOpenApp: args.skipOpenApp,\n contextModule: this.contextModule,\n },\n }),\n });\n }\n\n signMessage(args: {\n derivationPath: string;\n message: string;\n skipOpenApp: boolean;\n }): SignMessageDAReturnType {\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new CallTaskInAppDeviceAction({\n input: {\n task: async (internalApi) =>\n new SendSignMessageTask(internalApi, {\n derivationPath: args.derivationPath,\n sendingData: new TextEncoder().encode(args.message),\n }).run(),\n appName: \"Solana\",\n requiredUserInteraction: UserInteractionRequired.SignPersonalMessage,\n skipOpenApp: args.skipOpenApp,\n },\n }),\n });\n }\n\n getAppConfiguration(): GetAppConfigurationDAReturnType {\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new SendCommandInAppDeviceAction({\n input: {\n command: new GetAppConfigurationCommand(),\n appName: \"Solana\",\n requiredUserInteraction: UserInteractionRequired.None,\n skipOpenApp: false,\n },\n }),\n });\n }\n}\n"],
5
- "mappings": "iOACA,OACE,6BAAAA,EAGA,gCAAAC,EACA,2BAAAC,MACK,kCACP,OAAS,UAAAC,EAAQ,cAAAC,MAAkB,YASnC,OAAS,uBAAAC,MAA2B,gDACpC,OAAS,iBAAAC,MAAqB,0BAE9B,OAAS,8BAAAC,MAAkC,uCAC3C,OAAS,oBAAAC,MAAwB,6BACjC,OAAS,mCAAAC,MAAuC,kDAChD,OAAS,+BAAAC,MAAmC,8CAGrC,IAAMC,EAAN,KAAsB,CAC3B,YACqCC,EACMC,EACIC,EAC7C,CAHmC,SAAAF,EACM,eAAAC,EACI,mBAAAC,CAC5C,CAEH,WAAWC,EAIgB,CACzB,OAAO,KAAK,IAAI,oBAAoB,CAClC,UAAW,KAAK,UAChB,aAAc,IAAIC,EAA6B,CAC7C,MAAO,CACL,QAAS,IAAIC,EAAiBF,CAAI,EAClC,QAAS,SACT,wBAAyBA,EAAK,cAC1BG,EAAwB,cACxBA,EAAwB,KAC5B,YAAaH,EAAK,WACpB,CACF,CAAC,CACH,CAAC,CACH,CAEA,gBAAgBA,EAIgB,CAC9B,OAAO,KAAK,IAAI,oBAAoB,CAClC,UAAW,KAAK,UAChB,aAAc,IAAII,EAA4B,CAC5C,MAAO,CACL,eAAgBJ,EAAK,eACrB,YAAaA,EAAK,YAClB,mBAAoBA,EAAK,gCACzB,cAAe,KAAK,aACtB,CACF,CAAC,CACH,CAAC,CACH,CAEA,oBAAoBA,EAGgB,CAClC,OAAO,KAAK,IAAI,oBAAoB,CAClC,UAAW,KAAK,UAChB,aAAc,IAAIK,EAAgC,CAChD,MAAO,CACL,eAAgBL,EAAK,eACrB,YAAaA,EAAK,YAClB,cAAe,KAAK,aACtB,CACF,CAAC,CACH,CAAC,CACH,CAEA,YAAYA,EAIgB,CAC1B,OAAO,KAAK,IAAI,oBAAoB,CAClC,UAAW,KAAK,UAChB,aAAc,IAAIM,EAA0B,CAC1C,MAAO,CACL,KAAM,MAAOC,GACX,IAAIC,EAAoBD,EAAa,CACnC,eAAgBP,EAAK,eACrB,YAAa,IAAI,YAAY,EAAE,OAAOA,EAAK,OAAO,CACpD,CAAC,EAAE,IAAI,EACT,QAAS,SACT,wBAAyBG,EAAwB,oBACjD,YAAaH,EAAK,WACpB,CACF,CAAC,CACH,CAAC,CACH,CAEA,qBAAuD,CACrD,OAAO,KAAK,IAAI,oBAAoB,CAClC,UAAW,KAAK,UAChB,aAAc,IAAIC,EAA6B,CAC7C,MAAO,CACL,QAAS,IAAIQ,EACb,QAAS,SACT,wBAAyBN,EAAwB,KACjD,YAAa,EACf,CACF,CAAC,CACH,CAAC,CACH,CACF,EAhGaP,EAANc,EAAA,CADNC,EAAW,EAGPC,EAAA,EAAAC,EAAOC,EAAc,GAAG,GACxBF,EAAA,EAAAC,EAAOC,EAAc,SAAS,GAC9BF,EAAA,EAAAC,EAAOC,EAAc,aAAa,IAJ1BlB",
6
- "names": ["CallTaskInAppDeviceAction", "SendCommandInAppDeviceAction", "UserInteractionRequired", "inject", "injectable", "SendSignMessageTask", "externalTypes", "GetAppConfigurationCommand", "GetPubKeyCommand", "GenerateTransactionDeviceAction", "SignTransactionDeviceAction", "SolanaAppBinder", "dmk", "sessionId", "contextModule", "args", "SendCommandInAppDeviceAction", "GetPubKeyCommand", "UserInteractionRequired", "SignTransactionDeviceAction", "GenerateTransactionDeviceAction", "CallTaskInAppDeviceAction", "internalApi", "SendSignMessageTask", "GetAppConfigurationCommand", "__decorateClass", "injectable", "__decorateParam", "inject", "externalTypes"]
4
+ "sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n CallTaskInAppDeviceAction,\n DeviceManagementKit,\n type DeviceSessionId,\n LoggerPublisherService,\n SendCommandInAppDeviceAction,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport { GenerateTransactionDAReturnType } from \"@api/app-binder/GenerateTransactionDeviceActionTypes\";\nimport { GetAddressDAReturnType } from \"@api/app-binder/GetAddressDeviceActionTypes\";\nimport { GetAppConfigurationDAReturnType } from \"@api/app-binder/GetAppConfigurationDeviceActionTypes\";\nimport { SignMessageDAReturnType } from \"@api/app-binder/SignMessageDeviceActionTypes\";\nimport { SignTransactionDAReturnType } from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { SolanaTransactionOptionalConfig } from \"@api/model/SolanaTransactionOptionalConfig\";\nimport { Transaction } from \"@api/model/Transaction\";\nimport { SendSignMessageTask } from \"@internal/app-binder/task/SendSignMessageTask\";\nimport { externalTypes } from \"@internal/externalTypes\";\n\nimport { GetAppConfigurationCommand } from \"./command/GetAppConfigurationCommand\";\nimport { GetPubKeyCommand } from \"./command/GetPubKeyCommand\";\nimport { GenerateTransactionDeviceAction } from \"./device-action/GenerateTransactionDeviceAction\";\nimport { SignTransactionDeviceAction } from \"./device-action/SignTransactionDeviceAction\";\n\n@injectable()\nexport class SolanaAppBinder {\n constructor(\n @inject(externalTypes.Dmk) private dmk: DeviceManagementKit,\n @inject(externalTypes.SessionId) private sessionId: DeviceSessionId,\n @inject(externalTypes.ContextModule) private contextModule: ContextModule,\n @inject(externalTypes.DmkLoggerFactory)\n private dmkLoggerFactory: (tag: string) => LoggerPublisherService,\n ) {}\n\n getAddress(args: {\n derivationPath: string;\n checkOnDevice: boolean;\n skipOpenApp: boolean;\n }): GetAddressDAReturnType {\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new SendCommandInAppDeviceAction({\n input: {\n command: new GetPubKeyCommand(args),\n appName: \"Solana\",\n requiredUserInteraction: args.checkOnDevice\n ? UserInteractionRequired.VerifyAddress\n : UserInteractionRequired.None,\n skipOpenApp: args.skipOpenApp,\n },\n logger: this.dmkLoggerFactory(\"SendCommandInAppDeviceAction\"),\n }),\n });\n }\n\n signTransaction(args: {\n derivationPath: string;\n transaction: Transaction;\n solanaTransactionOptionalConfig?: SolanaTransactionOptionalConfig;\n }): SignTransactionDAReturnType {\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new SignTransactionDeviceAction({\n input: {\n derivationPath: args.derivationPath,\n transaction: args.transaction,\n transactionOptions: args.solanaTransactionOptionalConfig,\n contextModule: this.contextModule,\n },\n loggerFactory: this.dmkLoggerFactory,\n }),\n });\n }\n\n generateTransaction(args: {\n derivationPath: string;\n skipOpenApp: boolean;\n }): GenerateTransactionDAReturnType {\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new GenerateTransactionDeviceAction({\n input: {\n derivationPath: args.derivationPath,\n skipOpenApp: args.skipOpenApp,\n contextModule: this.contextModule,\n },\n }),\n });\n }\n\n signMessage(args: {\n derivationPath: string;\n message: string;\n skipOpenApp: boolean;\n }): SignMessageDAReturnType {\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new CallTaskInAppDeviceAction({\n input: {\n task: async (internalApi) =>\n new SendSignMessageTask(internalApi, {\n derivationPath: args.derivationPath,\n sendingData: new TextEncoder().encode(args.message),\n }).run(),\n appName: \"Solana\",\n requiredUserInteraction: UserInteractionRequired.SignPersonalMessage,\n skipOpenApp: args.skipOpenApp,\n },\n logger: this.dmkLoggerFactory(\"CallTaskInAppDeviceAction\"),\n }),\n });\n }\n\n getAppConfiguration(): GetAppConfigurationDAReturnType {\n return this.dmk.executeDeviceAction({\n sessionId: this.sessionId,\n deviceAction: new SendCommandInAppDeviceAction({\n input: {\n command: new GetAppConfigurationCommand(),\n appName: \"Solana\",\n requiredUserInteraction: UserInteractionRequired.None,\n skipOpenApp: false,\n },\n logger: this.dmkLoggerFactory(\"SendCommandInAppDeviceAction\"),\n }),\n });\n }\n}\n"],
5
+ "mappings": "iOACA,OACE,6BAAAA,EAIA,gCAAAC,EACA,2BAAAC,MACK,kCACP,OAAS,UAAAC,EAAQ,cAAAC,MAAkB,YASnC,OAAS,uBAAAC,MAA2B,gDACpC,OAAS,iBAAAC,MAAqB,0BAE9B,OAAS,8BAAAC,MAAkC,uCAC3C,OAAS,oBAAAC,MAAwB,6BACjC,OAAS,mCAAAC,MAAuC,kDAChD,OAAS,+BAAAC,MAAmC,8CAGrC,IAAMC,EAAN,KAAsB,CAC3B,YACqCC,EACMC,EACIC,EAErCC,EACR,CALmC,SAAAH,EACM,eAAAC,EACI,mBAAAC,EAErC,sBAAAC,CACP,CAEH,WAAWC,EAIgB,CACzB,OAAO,KAAK,IAAI,oBAAoB,CAClC,UAAW,KAAK,UAChB,aAAc,IAAIC,EAA6B,CAC7C,MAAO,CACL,QAAS,IAAIC,EAAiBF,CAAI,EAClC,QAAS,SACT,wBAAyBA,EAAK,cAC1BG,EAAwB,cACxBA,EAAwB,KAC5B,YAAaH,EAAK,WACpB,EACA,OAAQ,KAAK,iBAAiB,8BAA8B,CAC9D,CAAC,CACH,CAAC,CACH,CAEA,gBAAgBA,EAIgB,CAC9B,OAAO,KAAK,IAAI,oBAAoB,CAClC,UAAW,KAAK,UAChB,aAAc,IAAII,EAA4B,CAC5C,MAAO,CACL,eAAgBJ,EAAK,eACrB,YAAaA,EAAK,YAClB,mBAAoBA,EAAK,gCACzB,cAAe,KAAK,aACtB,EACA,cAAe,KAAK,gBACtB,CAAC,CACH,CAAC,CACH,CAEA,oBAAoBA,EAGgB,CAClC,OAAO,KAAK,IAAI,oBAAoB,CAClC,UAAW,KAAK,UAChB,aAAc,IAAIK,EAAgC,CAChD,MAAO,CACL,eAAgBL,EAAK,eACrB,YAAaA,EAAK,YAClB,cAAe,KAAK,aACtB,CACF,CAAC,CACH,CAAC,CACH,CAEA,YAAYA,EAIgB,CAC1B,OAAO,KAAK,IAAI,oBAAoB,CAClC,UAAW,KAAK,UAChB,aAAc,IAAIM,EAA0B,CAC1C,MAAO,CACL,KAAM,MAAOC,GACX,IAAIC,EAAoBD,EAAa,CACnC,eAAgBP,EAAK,eACrB,YAAa,IAAI,YAAY,EAAE,OAAOA,EAAK,OAAO,CACpD,CAAC,EAAE,IAAI,EACT,QAAS,SACT,wBAAyBG,EAAwB,oBACjD,YAAaH,EAAK,WACpB,EACA,OAAQ,KAAK,iBAAiB,2BAA2B,CAC3D,CAAC,CACH,CAAC,CACH,CAEA,qBAAuD,CACrD,OAAO,KAAK,IAAI,oBAAoB,CAClC,UAAW,KAAK,UAChB,aAAc,IAAIC,EAA6B,CAC7C,MAAO,CACL,QAAS,IAAIQ,EACb,QAAS,SACT,wBAAyBN,EAAwB,KACjD,YAAa,EACf,EACA,OAAQ,KAAK,iBAAiB,8BAA8B,CAC9D,CAAC,CACH,CAAC,CACH,CACF,EAtGaR,EAANe,EAAA,CADNC,EAAW,EAGPC,EAAA,EAAAC,EAAOC,EAAc,GAAG,GACxBF,EAAA,EAAAC,EAAOC,EAAc,SAAS,GAC9BF,EAAA,EAAAC,EAAOC,EAAc,aAAa,GAClCF,EAAA,EAAAC,EAAOC,EAAc,gBAAgB,IAL7BnB",
6
+ "names": ["CallTaskInAppDeviceAction", "SendCommandInAppDeviceAction", "UserInteractionRequired", "inject", "injectable", "SendSignMessageTask", "externalTypes", "GetAppConfigurationCommand", "GetPubKeyCommand", "GenerateTransactionDeviceAction", "SignTransactionDeviceAction", "SolanaAppBinder", "dmk", "sessionId", "contextModule", "dmkLoggerFactory", "args", "SendCommandInAppDeviceAction", "GetPubKeyCommand", "UserInteractionRequired", "SignTransactionDeviceAction", "GenerateTransactionDeviceAction", "CallTaskInAppDeviceAction", "internalApi", "SendSignMessageTask", "GetAppConfigurationCommand", "__decorateClass", "injectable", "__decorateParam", "inject", "externalTypes"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{DeviceActionStatus as p,SendCommandInAppDeviceAction as l,UserInteractionRequired as m}from"@ledgerhq/device-management-kit";import{from as A}from"rxjs";import{GetAppConfigurationCommand as D}from"./command/GetAppConfigurationCommand";import{GetPubKeyCommand as v}from"./command/GetPubKeyCommand";import{GenerateTransactionDeviceAction as g}from"./device-action/GenerateTransactionDeviceAction";import{SignTransactionDeviceAction as f}from"./device-action/SignTransactionDeviceAction";import{SolanaAppBinder as c}from"./SolanaAppBinder";describe("SolanaAppBinder",()=>{const o={},i={sendCommand:vi.fn(),executeDeviceAction:vi.fn()};beforeEach(()=>{vi.clearAllMocks()}),it("should be defined",()=>{const n=new c({},{},o);expect(n).toBeDefined()}),describe("getAddress",()=>{it("should return the address",()=>new Promise((n,s)=>{const t="D2PPQSYFe83nDzk96FqGumVU8JA7J8vj2Rhjc2oXzEi5";vi.spyOn(i,"executeDeviceAction").mockReturnValue({observable:A([{status:p.Completed,output:t}]),cancel:vi.fn()});const r=new c(i,"sessionId",o),{observable:u}=r.getAddress({derivationPath:"44'/501'",checkOnDevice:!1,skipOpenApp:!1}),a=[];u.subscribe({next:e=>{a.push(e)},error:e=>{s(e)},complete:()=>{try{expect(a).toEqual([{status:p.Completed,output:t}]),n()}catch(e){s(e)}}})})),describe("calls of executeDeviceAction with the correct params",()=>{const n={derivationPath:"44'/60'/3'/2/1",returnChainCode:!1,skipOpenApp:!1};it("when checkOnDevice is true: UserInteractionRequired.VerifyAddress",()=>{const t={...n,checkOnDevice:!0};new c(i,"sessionId",o).getAddress(t),expect(i.executeDeviceAction).toHaveBeenCalledWith({sessionId:"sessionId",deviceAction:new l({input:{command:new v(t),appName:"Solana",requiredUserInteraction:m.VerifyAddress,skipOpenApp:!1}})})}),it("when checkOnDevice is false: UserInteractionRequired.None",()=>{const t={...n,checkOnDevice:!1};new c(i,"sessionId",o).getAddress(t),expect(i.executeDeviceAction).toHaveBeenCalledWith({sessionId:"sessionId",deviceAction:new l({input:{command:new v(t),appName:"Solana",requiredUserInteraction:m.None,skipOpenApp:!1}})})})})}),describe("signTransaction",()=>{it("should return the signature",()=>new Promise((n,s)=>{const t=new Uint8Array([1,2,3]);vi.spyOn(i,"executeDeviceAction").mockReturnValue({observable:A([{status:p.Completed,output:t}]),cancel:vi.fn()});const r=new c(i,"sessionId",o),{observable:u}=r.signTransaction({derivationPath:"44'/501'",transaction:new Uint8Array([1,2,3,4]),solanaTransactionOptionalConfig:{skipOpenApp:!1}}),a=[];u.subscribe({next:e=>{a.push(e)},error:e=>{s(e)},complete:()=>{try{expect(a).toEqual([{status:p.Completed,output:t}]),n()}catch(e){s(e)}}})})),it("should call executeDeviceAction with the correct params",()=>{const n="44'/60'/3'/2/1",s=new Uint8Array([1,2,3,4]),t=!1;new c(i,"sessionId",o).signTransaction({derivationPath:n,transaction:s,solanaTransactionOptionalConfig:{skipOpenApp:!1}}),expect(i.executeDeviceAction).toHaveBeenCalledWith({sessionId:"sessionId",deviceAction:new f({input:{derivationPath:n,transaction:s,transactionOptions:{skipOpenApp:t},contextModule:o}})})})}),describe("signMessage",()=>{it("should return the signed message",()=>new Promise((n,s)=>{const t={signature:"signature"},r={derivationPath:"44'/501'/0'/0'",message:"Hello world",skipOpenApp:!1};vi.spyOn(i,"executeDeviceAction").mockReturnValue({observable:A([{status:p.Completed,output:t}]),cancel:vi.fn()});const u=new c(i,"sessionId",o),{observable:a}=u.signMessage(r),e=[];a.subscribe({next:d=>{e.push(d)},error:d=>{s(d)},complete:()=>{try{expect(e).toEqual([{status:p.Completed,output:t}]),n()}catch(d){s(d)}}})}))}),describe("getAppConfiguration",()=>{it("should return the app configuration",()=>new Promise((n,s)=>{const t={blindSigningEnabled:!0,pubKeyDisplayMode:"LONG",version:"2.5.10"};vi.spyOn(i,"executeDeviceAction").mockReturnValue({observable:A([{status:p.Completed,output:t}]),cancel:vi.fn()});const r=new c(i,"sessionId",o),{observable:u}=r.getAppConfiguration(),a=[];u.subscribe({next:e=>{a.push(e)},error:e=>{s(e)},complete:()=>{try{expect(a).toEqual([{status:p.Completed,output:t}]),n()}catch(e){s(e)}}})})),it("should call executeDeviceAction with the correct params",()=>{new c(i,"sessionId",o).getAppConfiguration(),expect(i.executeDeviceAction).toHaveBeenCalledWith({sessionId:"sessionId",deviceAction:new l({input:{command:new D,appName:"Solana",requiredUserInteraction:m.None,skipOpenApp:!1}})})})}),describe("generateTransaction",()=>{it("should return the serialized transaction",()=>new Promise((n,s)=>{const t="BASE64_OR_HEX_TX";vi.spyOn(i,"executeDeviceAction").mockReturnValue({observable:A([{status:p.Completed,output:t}]),cancel:vi.fn()});const r=new c(i,"sessionId",o),{observable:u}=r.generateTransaction({derivationPath:"44'/501'/0'/0'",skipOpenApp:!1}),a=[];u.subscribe({next:e=>a.push(e),error:e=>s(e),complete:()=>{try{expect(a).toEqual([{status:p.Completed,output:t}]),n()}catch(e){s(e)}}})})),it("should call executeDeviceAction with the correct params",()=>{const n="44'/501'/0'/0'";new c(i,"sessionId",o).generateTransaction({derivationPath:n,skipOpenApp:!0}),expect(i.executeDeviceAction).toHaveBeenCalledWith({sessionId:"sessionId",deviceAction:new g({input:{derivationPath:n,skipOpenApp:!0,contextModule:o}})})})})});
1
+ import{DeviceActionStatus as u,UserInteractionRequired as m}from"@ledgerhq/device-management-kit";import{from as l}from"rxjs";import{GetAppConfigurationCommand as D}from"./command/GetAppConfigurationCommand";import{GetPubKeyCommand as v}from"./command/GetPubKeyCommand";import{GenerateTransactionDeviceAction as g}from"./device-action/GenerateTransactionDeviceAction";import{SolanaAppBinder as c}from"./SolanaAppBinder";const p=()=>({debug:vi.fn(),info:vi.fn(),warn:vi.fn(),error:vi.fn(),subscribers:[]});describe("SolanaAppBinder",()=>{const s={},i={sendCommand:vi.fn(),executeDeviceAction:vi.fn()};beforeEach(()=>{vi.clearAllMocks()}),it("should be defined",()=>{const n=new c({},{},s,p);expect(n).toBeDefined()}),describe("getAddress",()=>{it("should return the address",()=>new Promise((n,o)=>{const t="D2PPQSYFe83nDzk96FqGumVU8JA7J8vj2Rhjc2oXzEi5";vi.spyOn(i,"executeDeviceAction").mockReturnValue({observable:l([{status:u.Completed,output:t}]),cancel:vi.fn()});const r=new c(i,"sessionId",s,p),{observable:d}=r.getAddress({derivationPath:"44'/501'",checkOnDevice:!1,skipOpenApp:!1}),a=[];d.subscribe({next:e=>{a.push(e)},error:e=>{o(e)},complete:()=>{try{expect(a).toEqual([{status:u.Completed,output:t}]),n()}catch(e){o(e)}}})})),describe("calls of executeDeviceAction with the correct params",()=>{const n={derivationPath:"44'/60'/3'/2/1",returnChainCode:!1,skipOpenApp:!1};it("when checkOnDevice is true: UserInteractionRequired.VerifyAddress",()=>{const t={...n,checkOnDevice:!0};new c(i,"sessionId",s,p).getAddress(t),expect(i.executeDeviceAction).toHaveBeenCalledWith(expect.objectContaining({sessionId:"sessionId",deviceAction:expect.objectContaining({input:{command:new v(t),appName:"Solana",requiredUserInteraction:m.VerifyAddress,skipOpenApp:!1}})}))}),it("when checkOnDevice is false: UserInteractionRequired.None",()=>{const t={...n,checkOnDevice:!1};new c(i,"sessionId",s,p).getAddress(t),expect(i.executeDeviceAction).toHaveBeenCalledWith(expect.objectContaining({sessionId:"sessionId",deviceAction:expect.objectContaining({input:{command:new v(t),appName:"Solana",requiredUserInteraction:m.None,skipOpenApp:!1}})}))})})}),describe("signTransaction",()=>{it("should return the signature",()=>new Promise((n,o)=>{const t=new Uint8Array([1,2,3]);vi.spyOn(i,"executeDeviceAction").mockReturnValue({observable:l([{status:u.Completed,output:t}]),cancel:vi.fn()});const r=new c(i,"sessionId",s,p),{observable:d}=r.signTransaction({derivationPath:"44'/501'",transaction:new Uint8Array([1,2,3,4]),solanaTransactionOptionalConfig:{skipOpenApp:!1}}),a=[];d.subscribe({next:e=>{a.push(e)},error:e=>{o(e)},complete:()=>{try{expect(a).toEqual([{status:u.Completed,output:t}]),n()}catch(e){o(e)}}})})),it("should call executeDeviceAction with the correct params",()=>{const n="44'/60'/3'/2/1",o=new Uint8Array([1,2,3,4]),t=!1;new c(i,"sessionId",s,p).signTransaction({derivationPath:n,transaction:o,solanaTransactionOptionalConfig:{skipOpenApp:!1}}),expect(i.executeDeviceAction).toHaveBeenCalledWith(expect.objectContaining({sessionId:"sessionId",deviceAction:expect.objectContaining({input:{derivationPath:n,transaction:o,transactionOptions:{skipOpenApp:t},contextModule:s}})}))})}),describe("signMessage",()=>{it("should return the signed message",()=>new Promise((n,o)=>{const t={signature:"signature"},r={derivationPath:"44'/501'/0'/0'",message:"Hello world",skipOpenApp:!1};vi.spyOn(i,"executeDeviceAction").mockReturnValue({observable:l([{status:u.Completed,output:t}]),cancel:vi.fn()});const d=new c(i,"sessionId",s,p),{observable:a}=d.signMessage(r),e=[];a.subscribe({next:A=>{e.push(A)},error:A=>{o(A)},complete:()=>{try{expect(e).toEqual([{status:u.Completed,output:t}]),n()}catch(A){o(A)}}})}))}),describe("getAppConfiguration",()=>{it("should return the app configuration",()=>new Promise((n,o)=>{const t={blindSigningEnabled:!0,pubKeyDisplayMode:"LONG",version:"2.5.10"};vi.spyOn(i,"executeDeviceAction").mockReturnValue({observable:l([{status:u.Completed,output:t}]),cancel:vi.fn()});const r=new c(i,"sessionId",s,p),{observable:d}=r.getAppConfiguration(),a=[];d.subscribe({next:e=>{a.push(e)},error:e=>{o(e)},complete:()=>{try{expect(a).toEqual([{status:u.Completed,output:t}]),n()}catch(e){o(e)}}})})),it("should call executeDeviceAction with the correct params",()=>{new c(i,"sessionId",s,p).getAppConfiguration(),expect(i.executeDeviceAction).toHaveBeenCalledWith(expect.objectContaining({sessionId:"sessionId",deviceAction:expect.objectContaining({input:{command:new D,appName:"Solana",requiredUserInteraction:m.None,skipOpenApp:!1}})}))})}),describe("generateTransaction",()=>{it("should return the serialized transaction",()=>new Promise((n,o)=>{const t="BASE64_OR_HEX_TX";vi.spyOn(i,"executeDeviceAction").mockReturnValue({observable:l([{status:u.Completed,output:t}]),cancel:vi.fn()});const r=new c(i,"sessionId",s,p),{observable:d}=r.generateTransaction({derivationPath:"44'/501'/0'/0'",skipOpenApp:!1}),a=[];d.subscribe({next:e=>a.push(e),error:e=>o(e),complete:()=>{try{expect(a).toEqual([{status:u.Completed,output:t}]),n()}catch(e){o(e)}}})})),it("should call executeDeviceAction with the correct params",()=>{const n="44'/501'/0'/0'";new c(i,"sessionId",s,p).generateTransaction({derivationPath:n,skipOpenApp:!0}),expect(i.executeDeviceAction).toHaveBeenCalledWith({sessionId:"sessionId",deviceAction:new g({input:{derivationPath:n,skipOpenApp:!0,contextModule:s}})})})})});
2
2
  //# sourceMappingURL=SolanaAppBinder.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/internal/app-binder/SolanaAppBinder.test.ts"],
4
- "sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n type DeviceActionIntermediateValue,\n type DeviceActionState,\n DeviceActionStatus,\n type DeviceManagementKit,\n type DeviceSessionId,\n type DmkError,\n SendCommandInAppDeviceAction,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { from } from \"rxjs\";\n\nimport {\n type GenerateTransactionDAError,\n type GenerateTransactionDAIntermediateValue,\n type GenerateTransactionDAOutput,\n} from \"@api/app-binder/GenerateTransactionDeviceActionTypes\";\nimport {\n type GetAppConfigurationDAError,\n type GetAppConfigurationDAIntermediateValue,\n type GetAppConfigurationDAOutput,\n} from \"@api/app-binder/GetAppConfigurationDeviceActionTypes\";\nimport {\n type GetAddressDAError,\n type GetAddressDAIntermediateValue,\n type GetAddressDAOutput,\n type SignMessageDAOutput,\n type SignTransactionDAError,\n type SignTransactionDAIntermediateValue,\n type SignTransactionDAOutput,\n} from \"@api/index\";\n\nimport { GetAppConfigurationCommand } from \"./command/GetAppConfigurationCommand\";\nimport { GetPubKeyCommand } from \"./command/GetPubKeyCommand\";\nimport { GenerateTransactionDeviceAction } from \"./device-action/GenerateTransactionDeviceAction\";\nimport { SignTransactionDeviceAction } from \"./device-action/SignTransactionDeviceAction\";\nimport { SolanaAppBinder } from \"./SolanaAppBinder\";\n\ndescribe(\"SolanaAppBinder\", () => {\n // stub ContextModule for tests\n const contextModuleStub: ContextModule = {} as ContextModule;\n\n const mockedDmk: DeviceManagementKit = {\n sendCommand: vi.fn(),\n executeDeviceAction: vi.fn(),\n } as unknown as DeviceManagementKit;\n\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n it(\"should be defined\", () => {\n const binder = new SolanaAppBinder(\n {} as DeviceManagementKit,\n {} as DeviceSessionId,\n contextModuleStub,\n );\n expect(binder).toBeDefined();\n });\n\n describe(\"getAddress\", () => {\n it(\"should return the address\", () =>\n new Promise<void>((resolve, reject) => {\n // GIVEN\n const address = \"D2PPQSYFe83nDzk96FqGumVU8JA7J8vj2Rhjc2oXzEi5\";\n\n vi.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: address,\n } as DeviceActionState<\n GetAddressDAOutput,\n GetAddressDAError,\n GetAddressDAIntermediateValue\n >,\n ]),\n cancel: vi.fn(),\n });\n\n // WHEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n );\n const { observable } = appBinder.getAddress({\n derivationPath: \"44'/501'\",\n checkOnDevice: false,\n skipOpenApp: false,\n });\n\n // THEN\n const states: DeviceActionState<\n GetAddressDAOutput,\n GetAddressDAError,\n GetAddressDAIntermediateValue\n >[] = [];\n observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n reject(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: address,\n },\n ]);\n resolve();\n } catch (err) {\n reject(err as Error);\n }\n },\n });\n }));\n\n describe(\"calls of executeDeviceAction with the correct params\", () => {\n const baseParams = {\n derivationPath: \"44'/60'/3'/2/1\",\n returnChainCode: false,\n skipOpenApp: false,\n };\n\n it(\"when checkOnDevice is true: UserInteractionRequired.VerifyAddress\", () => {\n // GIVEN\n const checkOnDevice = true;\n const params = {\n ...baseParams,\n checkOnDevice,\n };\n\n // WHEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n );\n appBinder.getAddress(params);\n\n // THEN\n expect(mockedDmk.executeDeviceAction).toHaveBeenCalledWith({\n sessionId: \"sessionId\",\n deviceAction: new SendCommandInAppDeviceAction({\n input: {\n command: new GetPubKeyCommand(params),\n appName: \"Solana\",\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n skipOpenApp: false,\n },\n }),\n });\n });\n\n it(\"when checkOnDevice is false: UserInteractionRequired.None\", () => {\n // GIVEN\n const checkOnDevice = false;\n const params = {\n ...baseParams,\n checkOnDevice,\n };\n\n // WHEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n );\n appBinder.getAddress(params);\n\n // THEN\n expect(mockedDmk.executeDeviceAction).toHaveBeenCalledWith({\n sessionId: \"sessionId\",\n deviceAction: new SendCommandInAppDeviceAction({\n input: {\n command: new GetPubKeyCommand(params),\n appName: \"Solana\",\n requiredUserInteraction: UserInteractionRequired.None,\n skipOpenApp: false,\n },\n }),\n });\n });\n });\n });\n\n describe(\"signTransaction\", () => {\n it(\"should return the signature\", () =>\n new Promise<void>((resolve, reject) => {\n // GIVEN\n const signature = new Uint8Array([0x01, 0x02, 0x03]);\n\n vi.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n } as DeviceActionState<\n SignTransactionDAOutput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >,\n ]),\n cancel: vi.fn(),\n });\n\n // WHEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n );\n const { observable } = appBinder.signTransaction({\n derivationPath: \"44'/501'\",\n transaction: new Uint8Array([0x01, 0x02, 0x03, 0x04]),\n solanaTransactionOptionalConfig: { skipOpenApp: false },\n });\n\n // THEN\n const states: DeviceActionState<\n SignTransactionDAOutput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >[] = [];\n observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n reject(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n },\n ]);\n resolve();\n } catch (err) {\n reject(err as Error);\n }\n },\n });\n }));\n\n it(\"should call executeDeviceAction with the correct params\", () => {\n // GIVEN\n const derivationPath = \"44'/60'/3'/2/1\";\n const transaction = new Uint8Array([0x01, 0x02, 0x03, 0x04]);\n const skipOpenApp = false;\n\n // WHEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n );\n appBinder.signTransaction({\n derivationPath,\n transaction,\n solanaTransactionOptionalConfig: { skipOpenApp: false },\n });\n\n // THEN\n expect(mockedDmk.executeDeviceAction).toHaveBeenCalledWith({\n sessionId: \"sessionId\",\n deviceAction: new SignTransactionDeviceAction({\n input: {\n derivationPath,\n transaction,\n transactionOptions: { skipOpenApp },\n contextModule: contextModuleStub,\n },\n }),\n });\n });\n });\n\n describe(\"signMessage\", () => {\n it(\"should return the signed message\", () =>\n new Promise<void>((resolve, reject) => {\n // GIVEN\n const signedMessage = {\n signature: \"signature\",\n };\n const signMessageArgs = {\n derivationPath: \"44'/501'/0'/0'\",\n message: \"Hello world\",\n skipOpenApp: false,\n };\n\n vi.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: signedMessage,\n } as DeviceActionState<\n SignMessageDAOutput,\n DmkError,\n DeviceActionIntermediateValue\n >,\n ]),\n cancel: vi.fn(),\n });\n\n // WHEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n );\n const { observable } = appBinder.signMessage(signMessageArgs);\n\n // THEN\n const states: DeviceActionState<\n SignMessageDAOutput,\n unknown,\n unknown\n >[] = [];\n observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n reject(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: signedMessage,\n },\n ]);\n resolve();\n } catch (err) {\n reject(err as Error);\n }\n },\n });\n }));\n });\n\n describe(\"getAppConfiguration\", () => {\n it(\"should return the app configuration\", () =>\n new Promise<void>((resolve, reject) => {\n // GIVEN\n const appConfiguration = {\n blindSigningEnabled: true,\n pubKeyDisplayMode: \"LONG\",\n version: \"2.5.10\",\n };\n\n vi.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: appConfiguration,\n } as DeviceActionState<\n GetAppConfigurationDAOutput,\n GetAppConfigurationDAError,\n GetAppConfigurationDAIntermediateValue\n >,\n ]),\n cancel: vi.fn(),\n });\n\n // WHEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n );\n const { observable } = appBinder.getAppConfiguration();\n\n // THEN\n const states: DeviceActionState<\n GetAppConfigurationDAOutput,\n GetAppConfigurationDAError,\n GetAppConfigurationDAIntermediateValue\n >[] = [];\n\n observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n reject(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: appConfiguration,\n },\n ]);\n resolve();\n } catch (err) {\n reject(err as Error);\n }\n },\n });\n }));\n\n it(\"should call executeDeviceAction with the correct params\", () => {\n // GIVEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n );\n\n // WHEN\n appBinder.getAppConfiguration();\n\n // THEN\n expect(mockedDmk.executeDeviceAction).toHaveBeenCalledWith({\n sessionId: \"sessionId\",\n deviceAction: new SendCommandInAppDeviceAction({\n input: {\n command: new GetAppConfigurationCommand(),\n appName: \"Solana\",\n requiredUserInteraction: UserInteractionRequired.None,\n skipOpenApp: false,\n },\n }),\n });\n });\n });\n\n describe(\"generateTransaction\", () => {\n it(\"should return the serialized transaction\", () =>\n new Promise<void>((resolve, reject) => {\n // GIVEN\n const serializedTx = \"BASE64_OR_HEX_TX\";\n\n vi.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: serializedTx,\n } as DeviceActionState<\n GenerateTransactionDAOutput,\n GenerateTransactionDAError,\n GenerateTransactionDAIntermediateValue\n >,\n ]),\n cancel: vi.fn(),\n });\n\n // WHEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n );\n const { observable } = appBinder.generateTransaction({\n derivationPath: \"44'/501'/0'/0'\",\n skipOpenApp: false,\n });\n\n // THEN\n const states: DeviceActionState<\n GenerateTransactionDAOutput,\n GenerateTransactionDAError,\n GenerateTransactionDAIntermediateValue\n >[] = [];\n observable.subscribe({\n next: (state) => states.push(state),\n error: (err) => reject(err),\n complete: () => {\n try {\n expect(states).toEqual([\n { status: DeviceActionStatus.Completed, output: serializedTx },\n ]);\n resolve();\n } catch (err) {\n reject(err as Error);\n }\n },\n });\n }));\n\n it(\"should call executeDeviceAction with the correct params\", () => {\n // GIVEN\n const derivationPath = \"44'/501'/0'/0'\";\n const skipOpenApp = true;\n\n // WHEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n );\n appBinder.generateTransaction({ derivationPath, skipOpenApp });\n\n // THEN\n expect(mockedDmk.executeDeviceAction).toHaveBeenCalledWith({\n sessionId: \"sessionId\",\n deviceAction: new GenerateTransactionDeviceAction({\n input: {\n derivationPath,\n skipOpenApp,\n contextModule: contextModuleStub,\n },\n }),\n });\n });\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["DeviceActionStatus", "SendCommandInAppDeviceAction", "UserInteractionRequired", "from", "GetAppConfigurationCommand", "GetPubKeyCommand", "GenerateTransactionDeviceAction", "SignTransactionDeviceAction", "SolanaAppBinder", "contextModuleStub", "mockedDmk", "binder", "resolve", "reject", "address", "appBinder", "observable", "states", "state", "err", "baseParams", "params", "signature", "derivationPath", "transaction", "skipOpenApp", "signedMessage", "signMessageArgs", "appConfiguration", "serializedTx"]
4
+ "sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n type DeviceActionIntermediateValue,\n type DeviceActionState,\n DeviceActionStatus,\n type DeviceManagementKit,\n type DeviceSessionId,\n type DmkError,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { from } from \"rxjs\";\n\nimport {\n type GenerateTransactionDAError,\n type GenerateTransactionDAIntermediateValue,\n type GenerateTransactionDAOutput,\n} from \"@api/app-binder/GenerateTransactionDeviceActionTypes\";\nimport {\n type GetAppConfigurationDAError,\n type GetAppConfigurationDAIntermediateValue,\n type GetAppConfigurationDAOutput,\n} from \"@api/app-binder/GetAppConfigurationDeviceActionTypes\";\nimport {\n type GetAddressDAError,\n type GetAddressDAIntermediateValue,\n type GetAddressDAOutput,\n type SignMessageDAOutput,\n type SignTransactionDAError,\n type SignTransactionDAIntermediateValue,\n type SignTransactionDAOutput,\n} from \"@api/index\";\n\nimport { GetAppConfigurationCommand } from \"./command/GetAppConfigurationCommand\";\nimport { GetPubKeyCommand } from \"./command/GetPubKeyCommand\";\nimport { GenerateTransactionDeviceAction } from \"./device-action/GenerateTransactionDeviceAction\";\nimport { SolanaAppBinder } from \"./SolanaAppBinder\";\n\nconst mockLoggerFactory = () => ({\n debug: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n subscribers: [],\n});\n\ndescribe(\"SolanaAppBinder\", () => {\n // stub ContextModule for tests\n const contextModuleStub: ContextModule = {} as ContextModule;\n\n const mockedDmk: DeviceManagementKit = {\n sendCommand: vi.fn(),\n executeDeviceAction: vi.fn(),\n } as unknown as DeviceManagementKit;\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n it(\"should be defined\", () => {\n const binder = new SolanaAppBinder(\n {} as DeviceManagementKit,\n {} as DeviceSessionId,\n contextModuleStub,\n mockLoggerFactory,\n );\n expect(binder).toBeDefined();\n });\n\n describe(\"getAddress\", () => {\n it(\"should return the address\", () =>\n new Promise<void>((resolve, reject) => {\n // GIVEN\n const address = \"D2PPQSYFe83nDzk96FqGumVU8JA7J8vj2Rhjc2oXzEi5\";\n\n vi.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: address,\n } as DeviceActionState<\n GetAddressDAOutput,\n GetAddressDAError,\n GetAddressDAIntermediateValue\n >,\n ]),\n cancel: vi.fn(),\n });\n\n // WHEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n mockLoggerFactory,\n );\n const { observable } = appBinder.getAddress({\n derivationPath: \"44'/501'\",\n checkOnDevice: false,\n skipOpenApp: false,\n });\n\n // THEN\n const states: DeviceActionState<\n GetAddressDAOutput,\n GetAddressDAError,\n GetAddressDAIntermediateValue\n >[] = [];\n observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n reject(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: address,\n },\n ]);\n resolve();\n } catch (err) {\n reject(err as Error);\n }\n },\n });\n }));\n\n describe(\"calls of executeDeviceAction with the correct params\", () => {\n const baseParams = {\n derivationPath: \"44'/60'/3'/2/1\",\n returnChainCode: false,\n skipOpenApp: false,\n };\n\n it(\"when checkOnDevice is true: UserInteractionRequired.VerifyAddress\", () => {\n // GIVEN\n const checkOnDevice = true;\n const params = {\n ...baseParams,\n checkOnDevice,\n };\n\n // WHEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n mockLoggerFactory,\n );\n appBinder.getAddress(params);\n\n // THEN\n expect(mockedDmk.executeDeviceAction).toHaveBeenCalledWith(\n expect.objectContaining({\n sessionId: \"sessionId\",\n deviceAction: expect.objectContaining({\n input: {\n command: new GetPubKeyCommand(params),\n appName: \"Solana\",\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n skipOpenApp: false,\n },\n }),\n }),\n );\n });\n\n it(\"when checkOnDevice is false: UserInteractionRequired.None\", () => {\n // GIVEN\n const checkOnDevice = false;\n const params = {\n ...baseParams,\n checkOnDevice,\n };\n\n // WHEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n mockLoggerFactory,\n );\n appBinder.getAddress(params);\n\n // THEN\n expect(mockedDmk.executeDeviceAction).toHaveBeenCalledWith(\n expect.objectContaining({\n sessionId: \"sessionId\",\n deviceAction: expect.objectContaining({\n input: {\n command: new GetPubKeyCommand(params),\n appName: \"Solana\",\n requiredUserInteraction: UserInteractionRequired.None,\n skipOpenApp: false,\n },\n }),\n }),\n );\n });\n });\n });\n\n describe(\"signTransaction\", () => {\n it(\"should return the signature\", () =>\n new Promise<void>((resolve, reject) => {\n // GIVEN\n const signature = new Uint8Array([0x01, 0x02, 0x03]);\n\n vi.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n } as DeviceActionState<\n SignTransactionDAOutput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >,\n ]),\n cancel: vi.fn(),\n });\n\n // WHEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n mockLoggerFactory,\n );\n const { observable } = appBinder.signTransaction({\n derivationPath: \"44'/501'\",\n transaction: new Uint8Array([0x01, 0x02, 0x03, 0x04]),\n solanaTransactionOptionalConfig: { skipOpenApp: false },\n });\n\n // THEN\n const states: DeviceActionState<\n SignTransactionDAOutput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >[] = [];\n observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n reject(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n },\n ]);\n resolve();\n } catch (err) {\n reject(err as Error);\n }\n },\n });\n }));\n\n it(\"should call executeDeviceAction with the correct params\", () => {\n // GIVEN\n const derivationPath = \"44'/60'/3'/2/1\";\n const transaction = new Uint8Array([0x01, 0x02, 0x03, 0x04]);\n const skipOpenApp = false;\n\n // WHEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n mockLoggerFactory,\n );\n appBinder.signTransaction({\n derivationPath,\n transaction,\n solanaTransactionOptionalConfig: { skipOpenApp: false },\n });\n\n // THEN\n expect(mockedDmk.executeDeviceAction).toHaveBeenCalledWith(\n expect.objectContaining({\n sessionId: \"sessionId\",\n deviceAction: expect.objectContaining({\n input: {\n derivationPath,\n transaction,\n transactionOptions: { skipOpenApp },\n contextModule: contextModuleStub,\n },\n }),\n }),\n );\n });\n });\n\n describe(\"signMessage\", () => {\n it(\"should return the signed message\", () =>\n new Promise<void>((resolve, reject) => {\n // GIVEN\n const signedMessage = {\n signature: \"signature\",\n };\n const signMessageArgs = {\n derivationPath: \"44'/501'/0'/0'\",\n message: \"Hello world\",\n skipOpenApp: false,\n };\n\n vi.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: signedMessage,\n } as DeviceActionState<\n SignMessageDAOutput,\n DmkError,\n DeviceActionIntermediateValue\n >,\n ]),\n cancel: vi.fn(),\n });\n\n // WHEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n mockLoggerFactory,\n );\n const { observable } = appBinder.signMessage(signMessageArgs);\n\n // THEN\n const states: DeviceActionState<\n SignMessageDAOutput,\n unknown,\n unknown\n >[] = [];\n observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n reject(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: signedMessage,\n },\n ]);\n resolve();\n } catch (err) {\n reject(err as Error);\n }\n },\n });\n }));\n });\n\n describe(\"getAppConfiguration\", () => {\n it(\"should return the app configuration\", () =>\n new Promise<void>((resolve, reject) => {\n // GIVEN\n const appConfiguration = {\n blindSigningEnabled: true,\n pubKeyDisplayMode: \"LONG\",\n version: \"2.5.10\",\n };\n\n vi.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: appConfiguration,\n } as DeviceActionState<\n GetAppConfigurationDAOutput,\n GetAppConfigurationDAError,\n GetAppConfigurationDAIntermediateValue\n >,\n ]),\n cancel: vi.fn(),\n });\n\n // WHEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n mockLoggerFactory,\n );\n const { observable } = appBinder.getAppConfiguration();\n\n // THEN\n const states: DeviceActionState<\n GetAppConfigurationDAOutput,\n GetAppConfigurationDAError,\n GetAppConfigurationDAIntermediateValue\n >[] = [];\n\n observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n reject(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: appConfiguration,\n },\n ]);\n resolve();\n } catch (err) {\n reject(err as Error);\n }\n },\n });\n }));\n\n it(\"should call executeDeviceAction with the correct params\", () => {\n // GIVEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n mockLoggerFactory,\n );\n\n // WHEN\n appBinder.getAppConfiguration();\n\n // THEN\n expect(mockedDmk.executeDeviceAction).toHaveBeenCalledWith(\n expect.objectContaining({\n sessionId: \"sessionId\",\n deviceAction: expect.objectContaining({\n input: {\n command: new GetAppConfigurationCommand(),\n appName: \"Solana\",\n requiredUserInteraction: UserInteractionRequired.None,\n skipOpenApp: false,\n },\n }),\n }),\n );\n });\n });\n\n describe(\"generateTransaction\", () => {\n it(\"should return the serialized transaction\", () =>\n new Promise<void>((resolve, reject) => {\n // GIVEN\n const serializedTx = \"BASE64_OR_HEX_TX\";\n\n vi.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: serializedTx,\n } as DeviceActionState<\n GenerateTransactionDAOutput,\n GenerateTransactionDAError,\n GenerateTransactionDAIntermediateValue\n >,\n ]),\n cancel: vi.fn(),\n });\n\n // WHEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n mockLoggerFactory,\n );\n const { observable } = appBinder.generateTransaction({\n derivationPath: \"44'/501'/0'/0'\",\n skipOpenApp: false,\n });\n\n // THEN\n const states: DeviceActionState<\n GenerateTransactionDAOutput,\n GenerateTransactionDAError,\n GenerateTransactionDAIntermediateValue\n >[] = [];\n observable.subscribe({\n next: (state) => states.push(state),\n error: (err) => reject(err),\n complete: () => {\n try {\n expect(states).toEqual([\n { status: DeviceActionStatus.Completed, output: serializedTx },\n ]);\n resolve();\n } catch (err) {\n reject(err as Error);\n }\n },\n });\n }));\n\n it(\"should call executeDeviceAction with the correct params\", () => {\n // GIVEN\n const derivationPath = \"44'/501'/0'/0'\";\n const skipOpenApp = true;\n\n // WHEN\n const appBinder = new SolanaAppBinder(\n mockedDmk,\n \"sessionId\",\n contextModuleStub,\n mockLoggerFactory,\n );\n appBinder.generateTransaction({ derivationPath, skipOpenApp });\n\n // THEN\n expect(mockedDmk.executeDeviceAction).toHaveBeenCalledWith({\n sessionId: \"sessionId\",\n deviceAction: new GenerateTransactionDeviceAction({\n input: {\n derivationPath,\n skipOpenApp,\n contextModule: contextModuleStub,\n },\n }),\n });\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["DeviceActionStatus", "UserInteractionRequired", "from", "GetAppConfigurationCommand", "GetPubKeyCommand", "GenerateTransactionDeviceAction", "SolanaAppBinder", "mockLoggerFactory", "contextModuleStub", "mockedDmk", "binder", "resolve", "reject", "address", "appBinder", "observable", "states", "state", "err", "baseParams", "params", "signature", "derivationPath", "transaction", "skipOpenApp", "signedMessage", "signMessageArgs", "appConfiguration", "serializedTx"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{ApduBuilder as s,ApduParser as i,CommandResultFactory as o,InvalidStatusWordError as p}from"@ledgerhq/device-management-kit";import{CommandErrorHelper as d}from"@ledgerhq/signer-utils";import{Just as m,Maybe as l,Nothing as g}from"purify-ts";import{SOLANA_APP_ERRORS as u,SolanaAppCommandErrorFactory as A}from"./utils/SolanaApplicationErrors";const c=64;class f{name="signTransaction";errorHelper=new d(u,A);args;constructor(r){this.args=r}getApdu(){const{more:r,extend:n,serializedTransaction:e}=this.args;let a=0;r&&(a|=2),n&&(a|=1);const t={cla:224,ins:6,p1:1,p2:a};return new s(t).addBufferToData(e).build()}parseResponse(r){return l.fromNullable(this.errorHelper.getError(r)).orDefaultLazy(()=>{const n=new i(r);if(n.getUnparsedRemainingLength()===0)return o({data:g});const e=n.extractFieldByLength(c);return e?o({data:m(e)}):o({error:new p("Signature is missing")})})}}export{f as SignTransactionCommand};
1
+ import{ApduBuilder as i,ApduParser as p,CommandResultFactory as o,InvalidStatusWordError as m}from"@ledgerhq/device-management-kit";import{CommandErrorHelper as d}from"@ledgerhq/signer-utils";import{Just as u,Maybe as l,Nothing as g}from"purify-ts";import{UserInputType as A}from"../../../api/model/TransactionResolutionContext";import{SOLANA_APP_ERRORS as y,SolanaAppCommandErrorFactory as c}from"./utils/SolanaApplicationErrors";const S=64;class b{name="signTransaction";errorHelper=new d(y,c);args;constructor(r){this.args=r}getApdu(){const{more:r,extend:n,serializedTransaction:e,userInputType:t}=this.args;let a=0;r&&(a|=2),n&&(a|=1),t===A.ATA&&(a|=8);const s={cla:224,ins:6,p1:1,p2:a};return new i(s).addBufferToData(e).build()}parseResponse(r){return l.fromNullable(this.errorHelper.getError(r)).orDefaultLazy(()=>{const n=new p(r);if(n.getUnparsedRemainingLength()===0)return o({data:g});const e=n.extractFieldByLength(S);return e?o({data:u(e)}):o({error:new m("Signature is missing")})})}}export{b as SignTransactionCommand};
2
2
  //# sourceMappingURL=SignTransactionCommand.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/command/SignTransactionCommand.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 { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\nimport { Just, Maybe, Nothing } from \"purify-ts\";\n\nimport { type Signature } from \"@api/model/Signature\";\n\nimport {\n SOLANA_APP_ERRORS,\n SolanaAppCommandErrorFactory,\n type SolanaAppErrorCodes,\n} from \"./utils/SolanaApplicationErrors\";\n\nconst SIGNATURE_LENGTH = 64;\n\nexport type SignTransactionCommandResponse = Maybe<Signature>;\nexport type SignTransactionCommandArgs = {\n /**\n * Chunked serialized transaction\n */\n readonly serializedTransaction: Uint8Array;\n readonly more: boolean;\n readonly extend: boolean;\n};\n\nexport class SignTransactionCommand\n implements\n Command<\n SignTransactionCommandResponse,\n SignTransactionCommandArgs,\n SolanaAppErrorCodes\n >\n{\n readonly name = \"signTransaction\";\n private readonly errorHelper = new CommandErrorHelper<\n SignTransactionCommandResponse,\n SolanaAppErrorCodes\n >(SOLANA_APP_ERRORS, SolanaAppCommandErrorFactory);\n\n args: SignTransactionCommandArgs;\n\n constructor(args: SignTransactionCommandArgs) {\n this.args = args;\n }\n\n getApdu(): Apdu {\n const { more, extend, serializedTransaction } = this.args;\n let p2 = 0x00;\n if (more) p2 |= 0x02;\n if (extend) p2 |= 0x01;\n\n const signTransactionArgs: ApduBuilderArgs = {\n cla: 0xe0,\n ins: 0x06,\n p1: 0x01,\n p2,\n };\n\n return new ApduBuilder(signTransactionArgs)\n .addBufferToData(serializedTransaction)\n .build();\n }\n\n parseResponse(\n response: ApduResponse,\n ): CommandResult<SignTransactionCommandResponse, SolanaAppErrorCodes> {\n return Maybe.fromNullable(\n this.errorHelper.getError(response),\n ).orDefaultLazy(() => {\n const parser = new ApduParser(response);\n\n if (parser.getUnparsedRemainingLength() === 0) {\n return CommandResultFactory({\n data: Nothing,\n });\n }\n\n const signature = parser.extractFieldByLength(SIGNATURE_LENGTH);\n if (!signature) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Signature is missing\"),\n });\n }\n\n return CommandResultFactory({\n data: Just(signature),\n });\n });\n }\n}\n"],
5
- "mappings": "AAAA,OAEE,eAAAA,EAEA,cAAAC,EAIA,wBAAAC,EACA,0BAAAC,MACK,kCACP,OAAS,sBAAAC,MAA0B,yBACnC,OAAS,QAAAC,EAAM,SAAAC,EAAO,WAAAC,MAAe,YAIrC,OACE,qBAAAC,EACA,gCAAAC,MAEK,kCAEP,MAAMC,EAAmB,GAYlB,MAAMC,CAOb,CACW,KAAO,kBACC,YAAc,IAAIP,EAGjCI,EAAmBC,CAA4B,EAEjD,KAEA,YAAYG,EAAkC,CAC5C,KAAK,KAAOA,CACd,CAEA,SAAgB,CACd,KAAM,CAAE,KAAAC,EAAM,OAAAC,EAAQ,sBAAAC,CAAsB,EAAI,KAAK,KACrD,IAAIC,EAAK,EACLH,IAAMG,GAAM,GACZF,IAAQE,GAAM,GAElB,MAAMC,EAAuC,CAC3C,IAAK,IACL,IAAK,EACL,GAAI,EACJ,GAAAD,CACF,EAEA,OAAO,IAAIhB,EAAYiB,CAAmB,EACvC,gBAAgBF,CAAqB,EACrC,MAAM,CACX,CAEA,cACEG,EACoE,CACpE,OAAOZ,EAAM,aACX,KAAK,YAAY,SAASY,CAAQ,CACpC,EAAE,cAAc,IAAM,CACpB,MAAMC,EAAS,IAAIlB,EAAWiB,CAAQ,EAEtC,GAAIC,EAAO,2BAA2B,IAAM,EAC1C,OAAOjB,EAAqB,CAC1B,KAAMK,CACR,CAAC,EAGH,MAAMa,EAAYD,EAAO,qBAAqBT,CAAgB,EAC9D,OAAKU,EAMElB,EAAqB,CAC1B,KAAMG,EAAKe,CAAS,CACtB,CAAC,EAPQlB,EAAqB,CAC1B,MAAO,IAAIC,EAAuB,sBAAsB,CAC1D,CAAC,CAML,CAAC,CACH,CACF",
6
- "names": ["ApduBuilder", "ApduParser", "CommandResultFactory", "InvalidStatusWordError", "CommandErrorHelper", "Just", "Maybe", "Nothing", "SOLANA_APP_ERRORS", "SolanaAppCommandErrorFactory", "SIGNATURE_LENGTH", "SignTransactionCommand", "args", "more", "extend", "serializedTransaction", "p2", "signTransactionArgs", "response", "parser", "signature"]
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 { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\nimport { Just, Maybe, Nothing } from \"purify-ts\";\n\nimport { type Signature } from \"@api/model/Signature\";\nimport { UserInputType } from \"@api/model/TransactionResolutionContext\";\n\nimport {\n SOLANA_APP_ERRORS,\n SolanaAppCommandErrorFactory,\n type SolanaAppErrorCodes,\n} from \"./utils/SolanaApplicationErrors\";\n\nconst SIGNATURE_LENGTH = 64;\n\nexport type SignTransactionCommandResponse = Maybe<Signature>;\nexport type SignTransactionCommandArgs = {\n /**\n * Chunked serialized transaction\n */\n readonly serializedTransaction: Uint8Array;\n readonly more: boolean;\n readonly extend: boolean;\n readonly userInputType?: UserInputType;\n};\n\nexport class SignTransactionCommand\n implements\n Command<\n SignTransactionCommandResponse,\n SignTransactionCommandArgs,\n SolanaAppErrorCodes\n >\n{\n readonly name = \"signTransaction\";\n private readonly errorHelper = new CommandErrorHelper<\n SignTransactionCommandResponse,\n SolanaAppErrorCodes\n >(SOLANA_APP_ERRORS, SolanaAppCommandErrorFactory);\n\n args: SignTransactionCommandArgs;\n\n constructor(args: SignTransactionCommandArgs) {\n this.args = args;\n }\n\n getApdu(): Apdu {\n const { more, extend, serializedTransaction, userInputType } = this.args;\n let p2 = 0x00;\n if (more) p2 |= 0x02;\n if (extend) p2 |= 0x01;\n if (userInputType === UserInputType.ATA) {\n // `ata` requires the 0x08 flag, `sol` uses the default (no extra flag).\n p2 |= 0x08;\n }\n\n const signTransactionArgs: ApduBuilderArgs = {\n cla: 0xe0,\n ins: 0x06,\n p1: 0x01,\n p2,\n };\n\n return new ApduBuilder(signTransactionArgs)\n .addBufferToData(serializedTransaction)\n .build();\n }\n\n parseResponse(\n response: ApduResponse,\n ): CommandResult<SignTransactionCommandResponse, SolanaAppErrorCodes> {\n return Maybe.fromNullable(\n this.errorHelper.getError(response),\n ).orDefaultLazy(() => {\n const parser = new ApduParser(response);\n\n if (parser.getUnparsedRemainingLength() === 0) {\n return CommandResultFactory({\n data: Nothing,\n });\n }\n\n const signature = parser.extractFieldByLength(SIGNATURE_LENGTH);\n if (!signature) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Signature is missing\"),\n });\n }\n\n return CommandResultFactory({\n data: Just(signature),\n });\n });\n }\n}\n"],
5
+ "mappings": "AAAA,OAEE,eAAAA,EAEA,cAAAC,EAIA,wBAAAC,EACA,0BAAAC,MACK,kCACP,OAAS,sBAAAC,MAA0B,yBACnC,OAAS,QAAAC,EAAM,SAAAC,EAAO,WAAAC,MAAe,YAGrC,OAAS,iBAAAC,MAAqB,0CAE9B,OACE,qBAAAC,EACA,gCAAAC,MAEK,kCAEP,MAAMC,EAAmB,GAalB,MAAMC,CAOb,CACW,KAAO,kBACC,YAAc,IAAIR,EAGjCK,EAAmBC,CAA4B,EAEjD,KAEA,YAAYG,EAAkC,CAC5C,KAAK,KAAOA,CACd,CAEA,SAAgB,CACd,KAAM,CAAE,KAAAC,EAAM,OAAAC,EAAQ,sBAAAC,EAAuB,cAAAC,CAAc,EAAI,KAAK,KACpE,IAAIC,EAAK,EACLJ,IAAMI,GAAM,GACZH,IAAQG,GAAM,GACdD,IAAkBT,EAAc,MAElCU,GAAM,GAGR,MAAMC,EAAuC,CAC3C,IAAK,IACL,IAAK,EACL,GAAI,EACJ,GAAAD,CACF,EAEA,OAAO,IAAIlB,EAAYmB,CAAmB,EACvC,gBAAgBH,CAAqB,EACrC,MAAM,CACX,CAEA,cACEI,EACoE,CACpE,OAAOd,EAAM,aACX,KAAK,YAAY,SAASc,CAAQ,CACpC,EAAE,cAAc,IAAM,CACpB,MAAMC,EAAS,IAAIpB,EAAWmB,CAAQ,EAEtC,GAAIC,EAAO,2BAA2B,IAAM,EAC1C,OAAOnB,EAAqB,CAC1B,KAAMK,CACR,CAAC,EAGH,MAAMe,EAAYD,EAAO,qBAAqBV,CAAgB,EAC9D,OAAKW,EAMEpB,EAAqB,CAC1B,KAAMG,EAAKiB,CAAS,CACtB,CAAC,EAPQpB,EAAqB,CAC1B,MAAO,IAAIC,EAAuB,sBAAsB,CAC1D,CAAC,CAML,CAAC,CACH,CACF",
6
+ "names": ["ApduBuilder", "ApduParser", "CommandResultFactory", "InvalidStatusWordError", "CommandErrorHelper", "Just", "Maybe", "Nothing", "UserInputType", "SOLANA_APP_ERRORS", "SolanaAppCommandErrorFactory", "SIGNATURE_LENGTH", "SignTransactionCommand", "args", "more", "extend", "serializedTransaction", "userInputType", "p2", "signTransactionArgs", "response", "parser", "signature"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{ApduResponse as r,CommandResultFactory as o,InvalidStatusWordError as i,isSuccessCommandResult as x}from"@ledgerhq/device-management-kit";import{Just as d,Nothing as p}from"purify-ts";import{SignTransactionCommand as n}from"./SignTransactionCommand";describe("SignTransactionCommand",()=>{const a={serializedTransaction:new Uint8Array,more:!1,extend:!1};describe("name",()=>{it("should be 'signTransaction'",()=>{const t=new n(a);expect(t.name).toBe("signTransaction")})}),describe("getApdu",()=>{it("should return the correct APDU when the data is empty",()=>{const e=new n(a).getApdu();expect(e.data).toStrictEqual(new Uint8Array),expect(e.cla).toBe(224),expect(e.ins).toBe(6),expect(e.p1).toBe(1),expect(e.p2).toBe(0)}),it("should return the correct APDU when the data is not empty",()=>{const e=new n({serializedTransaction:new Uint8Array([1,2,3]),more:!1,extend:!1}).getApdu();expect(e.data).toStrictEqual(new Uint8Array([1,2,3])),expect(e.cla).toBe(224),expect(e.ins).toBe(6),expect(e.p1).toBe(1),expect(e.p2).toBe(0)}),it("should return the correct APDU when the more flag is set",()=>{const e=new n({serializedTransaction:new Uint8Array([1,2,3]),more:!0,extend:!1}).getApdu();expect(e.data).toStrictEqual(new Uint8Array([1,2,3])),expect(e.cla).toBe(224),expect(e.ins).toBe(6),expect(e.p1).toBe(1),expect(e.p2).toBe(2)}),it("should return the correct APDU when the extend flag is set",()=>{const e=new n({serializedTransaction:new Uint8Array([1,2,3]),more:!1,extend:!0}).getApdu();expect(e.data).toStrictEqual(new Uint8Array([1,2,3])),expect(e.cla).toBe(224),expect(e.ins).toBe(6),expect(e.p1).toBe(1),expect(e.p2).toBe(1)}),it("should return the correct APDU when the more and extend flags are set",()=>{const e=new n({serializedTransaction:new Uint8Array([1,2,3]),more:!0,extend:!0}).getApdu();expect(e.data).toStrictEqual(new Uint8Array([1,2,3])),expect(e.cla).toBe(224),expect(e.ins).toBe(6),expect(e.p1).toBe(1),expect(e.p2).toBe(3)})}),describe("parseResponse",()=>{it("should return Noting when the response is empty",()=>{const e=new n(a).parseResponse(new r({statusCode:Uint8Array.from([144,0]),data:new Uint8Array([])}));expect(e).toStrictEqual(o({data:p}))}),it("should return the signature when the response is not empty",()=>{const t=new n(a),e=new Uint8Array(Array.from({length:64},(m,c)=>c+1)),s=t.parseResponse(new r({statusCode:Uint8Array.from([144,0]),data:e}));expect(s).toStrictEqual(o({data:d(e)}))}),it("should return an error when the response data is not valid",()=>{const e=new n(a).parseResponse(new r({statusCode:Uint8Array.from([144,0]),data:new Uint8Array([1])}));x(e)?assert.fail("The result should be an error."):expect(e.error).toEqual(new i("Signature is missing"))})})});
1
+ import{ApduResponse as o,CommandResultFactory as r,InvalidStatusWordError as i,isSuccessCommandResult as p}from"@ledgerhq/device-management-kit";import{Just as d,Nothing as m}from"purify-ts";import{UserInputType as s}from"../../../api/model/TransactionResolutionContext";import{SignTransactionCommand as n}from"./SignTransactionCommand";describe("SignTransactionCommand",()=>{const a={serializedTransaction:new Uint8Array,more:!1,extend:!1};describe("name",()=>{it("should be 'signTransaction'",()=>{const t=new n(a);expect(t.name).toBe("signTransaction")})}),describe("getApdu",()=>{it("should return the correct APDU when the data is empty",()=>{const e=new n(a).getApdu();expect(e.data).toStrictEqual(new Uint8Array),expect(e.cla).toBe(224),expect(e.ins).toBe(6),expect(e.p1).toBe(1),expect(e.p2).toBe(0)}),it("should return the correct APDU when the data is not empty",()=>{const e=new n({serializedTransaction:new Uint8Array([1,2,3]),more:!1,extend:!1}).getApdu();expect(e.data).toStrictEqual(new Uint8Array([1,2,3])),expect(e.cla).toBe(224),expect(e.ins).toBe(6),expect(e.p1).toBe(1),expect(e.p2).toBe(0)}),it("should return the correct APDU when the more flag is set",()=>{const e=new n({serializedTransaction:new Uint8Array([1,2,3]),more:!0,extend:!1}).getApdu();expect(e.data).toStrictEqual(new Uint8Array([1,2,3])),expect(e.cla).toBe(224),expect(e.ins).toBe(6),expect(e.p1).toBe(1),expect(e.p2).toBe(2)}),it("should return the correct APDU when the extend flag is set",()=>{const e=new n({serializedTransaction:new Uint8Array([1,2,3]),more:!1,extend:!0}).getApdu();expect(e.data).toStrictEqual(new Uint8Array([1,2,3])),expect(e.cla).toBe(224),expect(e.ins).toBe(6),expect(e.p1).toBe(1),expect(e.p2).toBe(1)}),it("should return the correct APDU when the more and extend flags are set",()=>{const e=new n({serializedTransaction:new Uint8Array([1,2,3]),more:!0,extend:!0}).getApdu();expect(e.data).toStrictEqual(new Uint8Array([1,2,3])),expect(e.cla).toBe(224),expect(e.ins).toBe(6),expect(e.p1).toBe(1),expect(e.p2).toBe(3)}),it("should set the ATA userInputType flag in p2",()=>{const e=new n({...a,userInputType:s.ATA}).getApdu();expect(e.data).toStrictEqual(new Uint8Array),expect(e.cla).toBe(224),expect(e.ins).toBe(6),expect(e.p1).toBe(1),expect(e.p2).toBe(8)}),it("should combine ATA userInputType flag with more and extend flags in p2",()=>{const e=new n({serializedTransaction:new Uint8Array([1,2]),more:!0,extend:!0,userInputType:s.ATA}).getApdu();expect(e.data).toStrictEqual(new Uint8Array([1,2])),expect(e.cla).toBe(224),expect(e.ins).toBe(6),expect(e.p1).toBe(1),expect(e.p2).toBe(11)})}),describe("parseResponse",()=>{it("should return Noting when the response is empty",()=>{const e=new n(a).parseResponse(new o({statusCode:Uint8Array.from([144,0]),data:new Uint8Array([])}));expect(e).toStrictEqual(r({data:m}))}),it("should return the signature when the response is not empty",()=>{const t=new n(a),e=new Uint8Array(Array.from({length:64},(u,x)=>x+1)),c=t.parseResponse(new o({statusCode:Uint8Array.from([144,0]),data:e}));expect(c).toStrictEqual(r({data:d(e)}))}),it("should return an error when the response data is not valid",()=>{const e=new n(a).parseResponse(new o({statusCode:Uint8Array.from([144,0]),data:new Uint8Array([1])}));p(e)?assert.fail("The result should be an error."):expect(e.error).toEqual(new i("Signature is missing"))})})});
2
2
  //# sourceMappingURL=SignTransactionCommand.test.js.map
@@ -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(\"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": ["ApduResponse", "CommandResultFactory", "InvalidStatusWordError", "isSuccessCommandResult", "Just", "Nothing", "SignTransactionCommand", "defaultArgs", "command", "apdu", "result", "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 { UserInputType } from \"@api/model/TransactionResolutionContext\";\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 it(\"should set the ATA userInputType flag in p2\", () => {\n // GIVEN\n const command = new SignTransactionCommand({\n ...defaultArgs,\n userInputType: UserInputType.ATA,\n });\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 // 0x08 bit set for ATA, no more/extend\n expect(apdu.p2).toBe(0x08);\n });\n\n it(\"should combine ATA userInputType flag with more and extend flags in p2\", () => {\n // GIVEN\n const command = new SignTransactionCommand({\n serializedTransaction: new Uint8Array([0x01, 0x02]),\n more: true,\n extend: true,\n userInputType: UserInputType.ATA,\n });\n\n // WHEN\n const apdu = command.getApdu();\n\n // THEN\n expect(apdu.data).toStrictEqual(new Uint8Array([0x01, 0x02]));\n expect(apdu.cla).toBe(0xe0);\n expect(apdu.ins).toBe(0x06);\n expect(apdu.p1).toBe(0x01);\n // 0x08 (ATA) | 0x02 (more) | 0x01 (extend) = 0x0b\n expect(apdu.p2).toBe(0x0b);\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": ["ApduResponse", "CommandResultFactory", "InvalidStatusWordError", "isSuccessCommandResult", "Just", "Nothing", "UserInputType", "SignTransactionCommand", "defaultArgs", "command", "apdu", "result", "data", "_", "i"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{DeviceModelId as T,isSuccessCommandResult as S,OpenAppDeviceAction as C,UnknownDAError as p,UserInteractionRequired as i,XStateDeviceAction as A}from"@ledgerhq/device-management-kit";import{Left as m,Right as y}from"purify-ts";import{assign as e,fromPromise as o,setup as I}from"xstate";import{signTransactionDAStateSteps as r}from"../../../api/app-binder/SignTransactionDeviceActionTypes";import{GetAppConfigurationCommand as x}from"../../app-binder/command/GetAppConfigurationCommand";import{SignTransactionCommand as E}from"../../app-binder/command/SignTransactionCommand";import{ApplicationChecker as D}from"../../app-binder/services/ApplicationChecker";import{SolanaTransactionTypes as f,TransactionInspector as v}from"../../app-binder/services/TransactionInspector";import{BuildTransactionContextTask as R}from"../../app-binder/task/BuildTransactionContextTask";import{ProvideSolanaTransactionContextTask as P}from"../../app-binder/task/ProvideTransactionContextTask";import{SignDataTask as k}from"../../app-binder/task/SendSignDataTask";class q extends A{makeStateMachine(a){const{signTransaction:c,getAppConfig:u,buildContext:l,provideContext:d,inspectTransaction:g}=this.extractDependencies(a);return I({types:{input:{},context:{},output:{}},actors:{openAppStateMachine:new C({input:{appName:"Solana"}}).makeStateMachine(a),getAppConfig:o(u),inspectTransaction:o(({input:t})=>g({serializedTransaction:t.serializedTransaction,resolutionContext:t.resolutionContext,rpcUrl:t.rpcUrl})),buildContext:o(l),provideContext:o(d),signTransaction:o(c)},guards:{noInternalError:({context:t})=>t._internalState.error===null,skipOpenApp:({context:t})=>t.input.transactionOptions?.skipOpenApp||!1,isSPLSupported:({context:t})=>new D(a.getDeviceSessionState(),t._internalState.appConfig).withMinVersionExclusive("1.4.0").excludeDeviceModel(T.NANO_S).check(),isAnSPLTransaction:({context:t})=>t._internalState.inspectorResult?.transactionType===f.SPL,shouldSkipInspection:({context:t})=>t._internalState.error===null&&!!t.input.transactionOptions?.transactionResolutionContext},actions:{assignErrorFromEvent:e({_internalState:t=>({...t.context._internalState,error:new p(t.event.error instanceof Error?t.event.error.message:String(t.event.error))})})}}).createMachine({id:"SignTransactionDeviceAction",initial:"InitialState",context:({input:t})=>({input:t,intermediateValue:{requiredUserInteraction:i.None,step:r.OPEN_APP},_internalState:{error:null,signature:null,appConfig:null,solanaTransactionContext:null,inspectorResult:null}}),states:{InitialState:{always:[{target:"GetAppConfig",guard:"skipOpenApp"},{target:"OpenAppDeviceAction"}]},OpenAppDeviceAction:{entry:e({intermediateValue:()=>({requiredUserInteraction:i.None,step:r.OPEN_APP})}),invoke:{id:"openAppStateMachine",src:"openAppStateMachine",input:()=>({appName:"Solana"}),onSnapshot:{actions:e({intermediateValue:({event:t})=>({...t.snapshot.context.intermediateValue,step:r.OPEN_APP})})},onDone:{target:"CheckOpenAppDeviceActionResult",actions:e({_internalState:({event:t,context:n})=>t.output.caseOf({Right:()=>n._internalState,Left:s=>({...n._internalState,error:s})})})}}},CheckOpenAppDeviceActionResult:{always:[{target:"GetAppConfig",guard:"noInternalError"},{target:"Error"}]},GetAppConfig:{entry:e({intermediateValue:()=>({requiredUserInteraction:i.None,step:r.GET_APP_CONFIG})}),invoke:{id:"getAppConfig",src:"getAppConfig",onDone:{target:"GetAppConfigResultCheck",actions:e({_internalState:({event:t,context:n})=>S(t.output)?{...n._internalState,appConfig:t.output.data}:{...n._internalState,error:t.output.error}})},onError:{target:"Error",actions:"assignErrorFromEvent"}}},GetAppConfigResultCheck:{always:[{target:"InspectTransaction",guard:"noInternalError"},{target:"Error"}]},InspectTransaction:{entry:e({intermediateValue:()=>({requiredUserInteraction:i.None,step:r.INSPECT_TRANSACTION})}),invoke:{id:"inspectTransaction",src:"inspectTransaction",input:({context:t})=>({serializedTransaction:t.input.transaction,resolutionContext:t.input.transactionOptions?.transactionResolutionContext,rpcUrl:t.input.transactionOptions?.solanaRPCURL}),onDone:{target:"AfterInspect",actions:e({_internalState:({context:t,event:n})=>({...t._internalState,inspectorResult:n.output})})},onError:{target:"Error",actions:"assignErrorFromEvent"}}},AfterInspect:{always:[{target:"BuildContext",guard:"isAnSPLTransaction"},{target:"SignTransaction",guard:"noInternalError"},{target:"Error"}]},BuildContext:{entry:e({intermediateValue:()=>({requiredUserInteraction:i.None,step:r.BUILD_TRANSACTION_CONTEXT})}),invoke:{id:"buildContext",src:"buildContext",input:({context:t})=>{const n=t._internalState.inspectorResult?.data;return{contextModule:t.input.contextModule,options:{tokenAddress:n?.tokenAddress,createATA:n?.createATA,tokenInternalId:t.input.transactionOptions?.transactionResolutionContext?.tokenInternalId,templateId:t.input.transactionOptions?.transactionResolutionContext?.templateId}}},onDone:{target:"ProvideContext",actions:[e({_internalState:({event:t,context:n})=>({...n._internalState,solanaTransactionContext:{tlvDescriptor:t.output.tlvDescriptor,trustedNamePKICertificate:t.output.trustedNamePKICertificate,loadersResults:t.output.loadersResults}})})]},onError:{target:"Error",actions:"assignErrorFromEvent"}}},ProvideContext:{entry:e({intermediateValue:()=>({requiredUserInteraction:i.None,step:r.PROVIDE_TRANSACTION_CONTEXT})}),invoke:{id:"provideContext",src:"provideContext",input:({context:t})=>{if(!t._internalState.solanaTransactionContext)throw new p("Solana transaction context is not available");return{...t._internalState.solanaTransactionContext,transactionBytes:t.input.transaction}},onDone:{target:"ProvideContextResultCheck"},onError:{target:"Error",actions:"assignErrorFromEvent"}}},ProvideContextResultCheck:{always:[{target:"SignTransaction",guard:"noInternalError"},{target:"Error"}]},SignTransaction:{entry:e({intermediateValue:{requiredUserInteraction:i.SignTransaction,step:r.SIGN_TRANSACTION}}),invoke:{id:"signTransaction",src:"signTransaction",input:({context:t})=>({derivationPath:t.input.derivationPath,serializedTransaction:t.input.transaction}),onDone:{target:"SignTransactionResultCheck",actions:[e({_internalState:({event:t,context:n})=>{if(!S(t.output))return{...n._internalState,error:t.output.error};const s=t.output.data.extract();return t.output.data.isJust()&&s instanceof Uint8Array?{...n._internalState,signature:s}:{...n._internalState,error:new p("No Signature available")}},intermediateValue:{requiredUserInteraction:i.None,step:r.SIGN_TRANSACTION}})]},onError:{target:"Error",actions:"assignErrorFromEvent"}}},SignTransactionResultCheck:{always:[{guard:"noInternalError",target:"Success"},{target:"Error"}]},Success:{type:"final"},Error:{type:"final"}},output:({context:t})=>t._internalState.signature?y(t._internalState.signature):m(t._internalState.error||new p("No error or signature available"))})}extractDependencies(a){return{getAppConfig:async()=>a.sendCommand(new x),buildContext:async t=>new R(a,t.input).run(),provideContext:async t=>new P(a,t.input).run(),signTransaction:async t=>new k(a,{commandFactory:n=>new E({serializedTransaction:n.chunkedData,more:n.more,extend:n.extend}),derivationPath:t.input.derivationPath,sendingData:t.input.serializedTransaction}).run(),inspectTransaction:async t=>Promise.resolve(new v(t.rpcUrl).inspectTransactionType(t.serializedTransaction,t.resolutionContext?.tokenAddress,t.resolutionContext?.createATA))}}}export{q as SignTransactionDeviceAction};
1
+ import{DeviceModelId as S,isSuccessCommandResult as T,OpenAppDeviceAction as A,UnknownDAError as p,UserInteractionRequired as i,XStateDeviceAction as C}from"@ledgerhq/device-management-kit";import{Left as m,Right as y}from"purify-ts";import{assign as r,fromPromise as o,setup as I}from"xstate";import{signTransactionDAStateSteps as a}from"../../../api/app-binder/SignTransactionDeviceActionTypes";import{GetAppConfigurationCommand as D}from"../../app-binder/command/GetAppConfigurationCommand";import{SignTransactionCommand as x}from"../../app-binder/command/SignTransactionCommand";import{ApplicationChecker as f}from"../../app-binder/services/ApplicationChecker";import{SolanaTransactionTypes as v,TransactionInspector as E}from"../../app-binder/services/TransactionInspector";import{BuildTransactionContextTask as P}from"../../app-binder/task/BuildTransactionContextTask";import{ProvideSolanaTransactionContextTask as R}from"../../app-binder/task/ProvideTransactionContextTask";import{SignDataTask as h}from"../../app-binder/task/SendSignDataTask";class B extends C{_loggerFactory;constructor(e){super({input:e.input,inspect:e.inspect,logger:e.loggerFactory("SignTransactionDeviceAction")}),this._loggerFactory=e.loggerFactory}makeStateMachine(e){const{signTransaction:c,getAppConfig:u,buildContext:l,provideContext:g,inspectTransaction:d}=this.extractDependencies(e);return I({types:{input:{},context:{},output:{}},actors:{openAppStateMachine:new A({input:{appName:"Solana"}}).makeStateMachine(e),getAppConfig:o(u),inspectTransaction:o(({input:t})=>d({serializedTransaction:t.serializedTransaction,resolutionContext:t.resolutionContext,rpcUrl:t.rpcUrl})),buildContext:o(l),provideContext:o(g),signTransaction:o(c)},guards:{noInternalError:({context:t})=>t._internalState.error===null,skipOpenApp:({context:t})=>t.input.transactionOptions?.skipOpenApp||!1,isSPLSupported:({context:t})=>new f(e.getDeviceSessionState(),t._internalState.appConfig).withMinVersionExclusive("1.4.0").excludeDeviceModel(S.NANO_S).check(),isAnSPLTransaction:({context:t})=>t._internalState.inspectorResult?.transactionType===v.SPL,shouldSkipInspection:({context:t})=>t._internalState.error===null&&!!t.input.transactionOptions?.transactionResolutionContext},actions:{assignErrorFromEvent:r({_internalState:t=>({...t.context._internalState,error:new p(t.event.error instanceof Error?t.event.error.message:String(t.event.error))})})}}).createMachine({id:"SignTransactionDeviceAction",initial:"InitialState",context:({input:t})=>({input:t,intermediateValue:{requiredUserInteraction:i.None,step:a.OPEN_APP},_internalState:{error:null,signature:null,appConfig:null,solanaTransactionContext:null,inspectorResult:null}}),states:{InitialState:{always:[{target:"GetAppConfig",guard:"skipOpenApp"},{target:"OpenAppDeviceAction"}]},OpenAppDeviceAction:{entry:r({intermediateValue:()=>({requiredUserInteraction:i.None,step:a.OPEN_APP})}),invoke:{id:"openAppStateMachine",src:"openAppStateMachine",input:()=>({appName:"Solana"}),onSnapshot:{actions:r({intermediateValue:({event:t})=>({...t.snapshot.context.intermediateValue,step:a.OPEN_APP})})},onDone:{target:"CheckOpenAppDeviceActionResult",actions:r({_internalState:({event:t,context:n})=>t.output.caseOf({Right:()=>n._internalState,Left:s=>({...n._internalState,error:s})})})}}},CheckOpenAppDeviceActionResult:{always:[{target:"GetAppConfig",guard:"noInternalError"},{target:"Error"}]},GetAppConfig:{entry:r({intermediateValue:()=>({requiredUserInteraction:i.None,step:a.GET_APP_CONFIG})}),invoke:{id:"getAppConfig",src:"getAppConfig",onDone:{target:"GetAppConfigResultCheck",actions:r({_internalState:({event:t,context:n})=>T(t.output)?{...n._internalState,appConfig:t.output.data}:{...n._internalState,error:t.output.error}})},onError:{target:"Error",actions:"assignErrorFromEvent"}}},GetAppConfigResultCheck:{always:[{target:"InspectTransaction",guard:"noInternalError"},{target:"Error"}]},InspectTransaction:{entry:r({intermediateValue:()=>({requiredUserInteraction:i.None,step:a.INSPECT_TRANSACTION})}),invoke:{id:"inspectTransaction",src:"inspectTransaction",input:({context:t})=>({serializedTransaction:t.input.transaction,resolutionContext:t.input.transactionOptions?.transactionResolutionContext,rpcUrl:t.input.transactionOptions?.solanaRPCURL}),onDone:{target:"AfterInspect",actions:r({_internalState:({context:t,event:n})=>({...t._internalState,inspectorResult:n.output})})},onError:{target:"SignTransaction"}}},AfterInspect:{always:[{target:"BuildContext",guard:"isAnSPLTransaction"},{target:"SignTransaction"}]},BuildContext:{entry:r({intermediateValue:()=>({requiredUserInteraction:i.None,step:a.BUILD_TRANSACTION_CONTEXT})}),invoke:{id:"buildContext",src:"buildContext",input:({context:t})=>{const n=t._internalState.inspectorResult?.data;return{contextModule:t.input.contextModule,loggerFactory:this._loggerFactory,options:{tokenAddress:n?.tokenAddress,createATA:n?.createATA,tokenInternalId:t.input.transactionOptions?.transactionResolutionContext?.tokenInternalId,templateId:t.input.transactionOptions?.transactionResolutionContext?.templateId}}},onDone:{target:"ProvideContext",actions:r({_internalState:({event:t,context:n})=>({...n._internalState,solanaTransactionContext:{tlvDescriptor:t.output.tlvDescriptor,trustedNamePKICertificate:t.output.trustedNamePKICertificate,loadersResults:t.output.loadersResults}})})},onError:{target:"SignTransaction"}}},ProvideContext:{entry:r({intermediateValue:()=>({requiredUserInteraction:i.None,step:a.PROVIDE_TRANSACTION_CONTEXT})}),invoke:{id:"provideContext",src:"provideContext",input:({context:t})=>{if(!t._internalState.solanaTransactionContext)throw new p("Solana transaction context is not available");return{...t._internalState.solanaTransactionContext,transactionBytes:t.input.transaction,loggerFactory:this._loggerFactory}},onDone:{target:"SignTransaction"},onError:{target:"SignTransaction"}}},SignTransaction:{entry:r({intermediateValue:{requiredUserInteraction:i.SignTransaction,step:a.SIGN_TRANSACTION}}),invoke:{id:"signTransaction",src:"signTransaction",input:({context:t})=>({derivationPath:t.input.derivationPath,serializedTransaction:t.input.transaction,userInputType:t.input.transactionOptions?.transactionResolutionContext?.userInputType}),onDone:{target:"SignTransactionResultCheck",actions:r({_internalState:({event:t,context:n})=>{if(!T(t.output))return{...n._internalState,error:t.output.error};const s=t.output.data.extract();return t.output.data.isJust()&&s instanceof Uint8Array?{...n._internalState,signature:s}:{...n._internalState,error:new p("No Signature available")}},intermediateValue:{requiredUserInteraction:i.None,step:a.SIGN_TRANSACTION}})},onError:{target:"Error",actions:"assignErrorFromEvent"}}},SignTransactionResultCheck:{always:[{guard:"noInternalError",target:"Success"},{target:"Error"}]},Success:{type:"final"},Error:{type:"final"}},output:({context:t})=>t._internalState.signature?y(t._internalState.signature):m(t._internalState.error||new p("No error or signature available"))})}extractDependencies(e){return{getAppConfig:async()=>e.sendCommand(new D),buildContext:async t=>new P(e,t.input).run(),provideContext:async t=>new R(e,t.input).run(),signTransaction:async t=>new h(e,{commandFactory:n=>new x({serializedTransaction:n.chunkedData,more:n.more,extend:n.extend,userInputType:t.input.userInputType}),derivationPath:t.input.derivationPath,sendingData:t.input.serializedTransaction}).run(),inspectTransaction:async t=>Promise.resolve(new E(t.rpcUrl).inspectTransactionType(t.serializedTransaction,t.resolutionContext?.tokenAddress,t.resolutionContext?.createATA))}}}export{B as SignTransactionDeviceAction};
2
2
  //# sourceMappingURL=SignTransactionDeviceAction.js.map