@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/app-binder/device-action/SignTransactionDeviceAction.ts"],
4
- "sourcesContent": ["import {\n type CommandErrorResult,\n type CommandResult,\n type DeviceActionStateMachine,\n DeviceModelId,\n type InternalApi,\n isSuccessCommandResult,\n OpenAppDeviceAction,\n type StateMachineTypes,\n UnknownDAError,\n UserInteractionRequired,\n XStateDeviceAction,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left, type Maybe, Right } from \"purify-ts\";\nimport { assign, fromPromise, setup } from \"xstate\";\n\nimport {\n type SignTransactionDAError,\n type SignTransactionDAInput,\n type SignTransactionDAIntermediateValue,\n type SignTransactionDAInternalState,\n type SignTransactionDAOutput,\n signTransactionDAStateSteps,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { type AppConfiguration } from \"@api/model/AppConfiguration\";\nimport { type Signature } from \"@api/model/Signature\";\nimport { type TransactionResolutionContext } from \"@api/model/TransactionResolutionContext\";\nimport { GetAppConfigurationCommand } from \"@internal/app-binder/command/GetAppConfigurationCommand\";\nimport { SignTransactionCommand } from \"@internal/app-binder/command/SignTransactionCommand\";\nimport { type SolanaAppErrorCodes } from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\nimport { ApplicationChecker } from \"@internal/app-binder/services/ApplicationChecker\";\nimport {\n SolanaTransactionTypes,\n TransactionInspector,\n} from \"@internal/app-binder/services/TransactionInspector\";\nimport { type TxInspectorResult } from \"@internal/app-binder/services/TransactionInspector\";\nimport {\n BuildTransactionContextTask,\n type BuildTransactionContextTaskArgs,\n type SolanaBuildContextResult,\n} from \"@internal/app-binder/task/BuildTransactionContextTask\";\nimport {\n ProvideSolanaTransactionContextTask,\n type ProvideSolanaTransactionContextTaskContext,\n} from \"@internal/app-binder/task/ProvideTransactionContextTask\";\nimport { SignDataTask } from \"@internal/app-binder/task/SendSignDataTask\";\n\nexport type MachineDependencies = {\n readonly getAppConfig: () => Promise<\n CommandResult<AppConfiguration, SolanaAppErrorCodes>\n >;\n readonly buildContext: (arg0: {\n input: BuildTransactionContextTaskArgs;\n }) => Promise<SolanaBuildContextResult>;\n readonly provideContext: (arg0: {\n input: ProvideSolanaTransactionContextTaskContext;\n }) => Promise<Maybe<CommandErrorResult<SolanaAppErrorCodes>>>;\n readonly inspectTransaction: (arg0: {\n serializedTransaction: Uint8Array;\n resolutionContext?: TransactionResolutionContext;\n rpcUrl?: string;\n }) => Promise<TxInspectorResult>;\n readonly signTransaction: (arg0: {\n input: {\n derivationPath: string;\n serializedTransaction: Uint8Array;\n };\n }) => Promise<\n CommandResult<Maybe<Signature | SolanaAppErrorCodes>, SolanaAppErrorCodes>\n >;\n};\n\nexport class SignTransactionDeviceAction extends XStateDeviceAction<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n> {\n makeStateMachine(\n internalApi: InternalApi,\n ): DeviceActionStateMachine<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n > {\n type types = StateMachineTypes<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n >;\n\n const {\n signTransaction,\n getAppConfig,\n buildContext,\n provideContext,\n inspectTransaction,\n } = this.extractDependencies(internalApi);\n\n return setup({\n types: {\n input: {} as types[\"input\"],\n context: {} as types[\"context\"],\n output: {} as types[\"output\"],\n },\n actors: {\n openAppStateMachine: new OpenAppDeviceAction({\n input: { appName: \"Solana\" },\n }).makeStateMachine(internalApi),\n\n getAppConfig: fromPromise(getAppConfig),\n inspectTransaction: fromPromise(\n ({\n input,\n }: {\n input: {\n serializedTransaction: Uint8Array;\n resolutionContext?: TransactionResolutionContext;\n rpcUrl?: string;\n };\n }) =>\n inspectTransaction({\n serializedTransaction: input.serializedTransaction,\n resolutionContext: input.resolutionContext,\n rpcUrl: input.rpcUrl,\n }),\n ),\n buildContext: fromPromise(buildContext),\n provideContext: fromPromise(provideContext),\n signTransaction: fromPromise(signTransaction),\n },\n guards: {\n noInternalError: ({ context }) => context._internalState.error === null,\n skipOpenApp: ({ context }) =>\n context.input.transactionOptions?.skipOpenApp || false,\n isSPLSupported: ({ context }) =>\n new ApplicationChecker(\n internalApi.getDeviceSessionState(),\n context._internalState.appConfig!,\n )\n .withMinVersionExclusive(\"1.4.0\")\n .excludeDeviceModel(DeviceModelId.NANO_S)\n .check(),\n isAnSPLTransaction: ({ context }) =>\n context._internalState.inspectorResult?.transactionType ===\n SolanaTransactionTypes.SPL,\n shouldSkipInspection: ({ context }) =>\n context._internalState.error === null &&\n !!context.input.transactionOptions?.transactionResolutionContext,\n },\n actions: {\n assignErrorFromEvent: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: new UnknownDAError(\n _.event[\"error\"] instanceof Error\n ? _.event[\"error\"].message\n : String(_.event[\"error\"]),\n ),\n }),\n }),\n },\n }).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QGUCWUB2AVATgQw1jwGMAXVAewwBEwA3VYsAQTMowDoBJDVcvADbJSeUmADEAbQAMAXUSgADhVh92CkAA9EARgDsAZg4AOAJzSAbNNOmATNZ0AWPRYA0IAJ67bLjgcfW-hYArNIGpsGOAL5R7miYuAREbFS0DEys5FTcvPxCImJSOvJIIMqqWRga2gj6RmaW1nYOzm6eujqdHNbWPsE6DXq2MXHo2PiEJJVpjCwpnADyimAYzIqKMxnz4hBUYByoGHQUANb7FMur68KiYACyJAAWh2AyJUoqalTViHrBthxbP5-I5HMZjH9gm0vLVpBCOBYnI5bBY9NI4RZjCMQPFxkkpuxNnNKhwAMKPMDEE5LFZrDb0WaZdgAJTgAFcBKQpHINOUvlVSjUdAZhX5HAY9JLbMEDAZMXp3DDOvoOKEXIZgsZ9JrorEcWNEpN5kSmdlyZTqZc6Sb5qzYByuZJirzPpUfrURUZgZKhjK5RDFYgtRxHDZTKCJZjEXosXrcYbktMGVsSQBxMCkOmkqgAM3QOz2ByOp32MEz62zGDzUDeLoq6kFui1plVpgMEIs9kldlsgdq0oBYU6xmkAwh0mCwWx8YmicJyeJ7A46fLikr1fEYBwOAoOA4igEohzu4Athwy1nc+ha6U+W7G7Vm632y4u3oe32dDYOGHzDLLMYEootOBqzgSqQLqanArpeVboHaDrmlS3LvGUroNqANS2D4eh+H8fSvl+eiOJ+tjBnYyKohY5hAtIuqjAkYHGpB8zLhmsHVghnJIScRSoXeGFaIg2GSnh-x-IRpjEX2-g6D+LigqioIyo4kQgYx+LMeki7ZDwsDLGQCbgRgBYYPshzHGcRb6ZSpBGfMN4fPW3wPmRqk-tR6KOE4Oids4pFDAiUmYjYI5gu26l4kaSbaVBOQ2YZTGVJu267vuh6kMeOBnocCV2Ul7COWhzkCphwnGO5pieXRPl+Qq7QII4Vghgp0jqqpOiRfZMWMqxzA5mIOB6QZjo8re6EuWVCAGCJ3SdtRAwxqOvYNZ0IohiEETBKYgHBHowpdQVEGxX1A1bsNtl8XW-LujNPhzSipiLSOOgrUqBgThw752GidHvpqBiHZpPUpku-WDRdZBSLY-ETaVQnTbNliPc9y19lYAKqbY4ZPa9XbDHGoHA-OJ0kgAQmyqACBAlZiJoXK7GZRaWfsABGlPU7TYD00VAmTQjEr9CYr3il+6JOJ+r0WKqQzmDNvk6P8sYMVFc7Hb15MczTVB01yW47nuB5HqeHDs1T2sYLrvNw7dfxyVqtii+Yo4kQ1QzSD+-w7VJIrGCEgOExp0UkxrS4AAo7gwEBgFz9OmeZxZWYokeoNHsekNbJXusibZfQMARO09b0dKiJjGCi6JkdtthOEDwfq6D2QRxQUcxzr3N66lhsZVlZ7Jy3qdt5bHeZzdD450Y+0VXRIo2K9fZ+wCdgRCKvkRPNddqzQLEks3rfp1xpA8Sh133lNrQe-K7ZURjiuS383Shk1fqK8Bgeq8ZNq7ynaft-Th-HydLDLO48XCXwhNfFwt9gifi8j+CcNhsbaklJ1d+3UQ6N04DOYmVB47MxLBwVQQct6jzPgjJWLYIT-DottbyOhSLBjBBERWmp5rGCnGgo629SZLmwfXEy+s0pG0yibIhH8HJjScmPKaFCTD4RoeGToksgQhgQTKCqkJHab0-jvXhRN+EAIpMhUhgkah7URICUIbVpA13FE9T8q8-DlxCJ2Jwjt2HaK0qHbIfCt6GItFdcaICZEuDktKdEaJbHhHoatFEwQnHSmIlJUMM1dR6gwBQaO8BSi+J0Tw-mfN4Y1AALTQkQMU+Jv4qm-gsKpTxIMdKcB4GoQQNwxCn1MYgZEpFMQcH0FjbCgECYq3QQ3RpHAaRXHpPk+GhTbpQkBMCZEnRtpDBCLAiwXoAhVR0BEtqeh6kYPGTxSZ1pdFUEPh0-mQpK7dEVhYaiGiXoGEltYMU1hPJi1WYcsZcUYIVivFAK5RTdChEcICEI5cwT7VUpqUiAwETEXbE0CE4JUEjK4V-Jc-y1yAv8VSYF7p7D3UiGicUyyXA7QCpPcxyItRDCcAczhODuHeKaYQEaozZk21ck1YwgIpK+QCOiJ6VVSILKUtjOe21NkBwxSyrF2RwbnQ5bZQlD4PqBWRoYNqwoXmxPDCGR2q8dq7WVvqYheS2UcApubdO6qpr+FCH0gItT7A2CsJEWBuca6aietQ7y-wfmsswRwPeg97VBOkQLCILYXBKzCJOF8ksujfW8nYKwU96IWvEQ0uK4bf7D3-uybiRiTgOoRqpUciLFb7T9GYSWDyy4oi1G1J6dTmX8MVVg-RW8K01FDELKwP0rHOFBKRD6X0bBNQeaEWeFhg3do4Lk20Jaj5lv7YgSIUkTBkQnB9FJe0HFhEBIrLU4IDCRBFou85WC2TECYLAbJUiyFmMQX0oYOEa751du9OECTMQyn+AEDh8qu23o4AAUS7puhA207AfpEgyn9fZDAtllH7awSaJTghiDEIAA */\n id: \"SignTransactionDeviceAction\",\n initial: \"InitialState\",\n context: ({ input }) => ({\n input,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.OPEN_APP,\n },\n _internalState: {\n error: null,\n signature: null,\n appConfig: null,\n solanaTransactionContext: null,\n inspectorResult: null,\n },\n }),\n states: {\n InitialState: {\n always: [\n { target: \"GetAppConfig\", guard: \"skipOpenApp\" },\n { target: \"OpenAppDeviceAction\" },\n ],\n },\n OpenAppDeviceAction: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.OPEN_APP,\n }),\n }),\n invoke: {\n id: \"openAppStateMachine\",\n src: \"openAppStateMachine\",\n input: () => ({ appName: \"Solana\" }),\n onSnapshot: {\n actions: assign({\n intermediateValue: ({ event }) => ({\n ...event.snapshot.context.intermediateValue,\n step: signTransactionDAStateSteps.OPEN_APP,\n }),\n }),\n },\n onDone: {\n target: \"CheckOpenAppDeviceActionResult\",\n actions: assign({\n _internalState: ({ event, context }) =>\n event.output.caseOf({\n Right: () => context._internalState,\n Left: (error) => ({\n ...context._internalState,\n error,\n }),\n }),\n }),\n },\n },\n },\n CheckOpenAppDeviceActionResult: {\n always: [\n { target: \"GetAppConfig\", guard: \"noInternalError\" },\n { target: \"Error\" },\n ],\n },\n GetAppConfig: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.GET_APP_CONFIG,\n }),\n }),\n invoke: {\n id: \"getAppConfig\",\n src: \"getAppConfig\",\n onDone: {\n target: \"GetAppConfigResultCheck\",\n actions: assign({\n _internalState: ({ event, context }) =>\n isSuccessCommandResult(event.output)\n ? {\n ...context._internalState,\n appConfig: event.output.data,\n }\n : { ...context._internalState, error: event.output.error },\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n GetAppConfigResultCheck: {\n always: [\n { target: \"InspectTransaction\", guard: \"noInternalError\" },\n { target: \"Error\" },\n ],\n },\n InspectTransaction: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.INSPECT_TRANSACTION,\n }),\n }),\n invoke: {\n id: \"inspectTransaction\",\n src: \"inspectTransaction\",\n\n input: ({ context }) => ({\n serializedTransaction: context.input.transaction,\n resolutionContext:\n context.input.transactionOptions?.transactionResolutionContext,\n rpcUrl: context.input.transactionOptions?.solanaRPCURL,\n }),\n onDone: {\n target: \"AfterInspect\",\n actions: assign({\n _internalState: ({ context, event }) => ({\n ...context._internalState,\n inspectorResult: event.output,\n }),\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n AfterInspect: {\n always: [\n { target: \"BuildContext\", guard: \"isAnSPLTransaction\" },\n { target: \"SignTransaction\", guard: \"noInternalError\" },\n { target: \"Error\" },\n ],\n },\n BuildContext: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.BUILD_TRANSACTION_CONTEXT,\n }),\n }),\n invoke: {\n id: \"buildContext\",\n src: \"buildContext\",\n input: ({ context }) => {\n const inspectorData =\n context._internalState.inspectorResult?.data;\n return {\n contextModule: context.input.contextModule,\n options: {\n tokenAddress: inspectorData?.tokenAddress,\n createATA: inspectorData?.createATA,\n tokenInternalId:\n context.input.transactionOptions\n ?.transactionResolutionContext?.tokenInternalId,\n templateId:\n context.input.transactionOptions\n ?.transactionResolutionContext?.templateId,\n },\n };\n },\n onDone: {\n target: \"ProvideContext\",\n actions: [\n assign({\n _internalState: ({ event, context }) => ({\n ...context._internalState,\n solanaTransactionContext: {\n tlvDescriptor: event.output.tlvDescriptor,\n trustedNamePKICertificate:\n event.output.trustedNamePKICertificate,\n loadersResults: event.output.loadersResults,\n },\n }),\n }),\n ],\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n ProvideContext: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.PROVIDE_TRANSACTION_CONTEXT,\n }),\n }),\n invoke: {\n id: \"provideContext\",\n src: \"provideContext\",\n input: ({ context }) => {\n if (!context._internalState.solanaTransactionContext) {\n throw new UnknownDAError(\n \"Solana transaction context is not available\",\n );\n }\n return {\n ...context._internalState.solanaTransactionContext,\n transactionBytes: context.input.transaction,\n };\n },\n onDone: {\n target: \"ProvideContextResultCheck\",\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n ProvideContextResultCheck: {\n always: [\n { target: \"SignTransaction\", guard: \"noInternalError\" },\n { target: \"Error\" },\n ],\n },\n SignTransaction: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n step: signTransactionDAStateSteps.SIGN_TRANSACTION,\n },\n }),\n invoke: {\n id: \"signTransaction\",\n src: \"signTransaction\",\n input: ({ context }) => {\n return {\n derivationPath: context.input.derivationPath,\n serializedTransaction: context.input.transaction,\n };\n },\n onDone: {\n target: \"SignTransactionResultCheck\",\n actions: [\n assign({\n _internalState: ({ event, context }) => {\n if (!isSuccessCommandResult(event.output))\n return {\n ...context._internalState,\n error: event.output.error,\n };\n\n const data = event.output.data.extract();\n if (\n event.output.data.isJust() &&\n data instanceof Uint8Array\n )\n return {\n ...context._internalState,\n signature: data,\n };\n\n return {\n ...context._internalState,\n error: new UnknownDAError(\"No Signature available\"),\n };\n },\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.SIGN_TRANSACTION,\n },\n }),\n ],\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n SignTransactionResultCheck: {\n always: [\n { guard: \"noInternalError\", target: \"Success\" },\n { target: \"Error\" },\n ],\n },\n Success: { type: \"final\" },\n Error: { type: \"final\" },\n },\n output: ({ context }) =>\n context._internalState.signature\n ? Right(context._internalState.signature)\n : Left(\n context._internalState.error ||\n new UnknownDAError(`No error or signature available`),\n ),\n });\n }\n\n extractDependencies(internalApi: InternalApi): MachineDependencies {\n const getAppConfig = async () =>\n internalApi.sendCommand(new GetAppConfigurationCommand());\n\n const buildContext = async (arg0: {\n input: BuildTransactionContextTaskArgs;\n }) => new BuildTransactionContextTask(internalApi, arg0.input).run();\n\n const provideContext = async (arg0: {\n input: ProvideSolanaTransactionContextTaskContext;\n }) =>\n new ProvideSolanaTransactionContextTask(internalApi, arg0.input).run();\n\n const inspectTransaction = async (arg0: {\n serializedTransaction: Uint8Array;\n resolutionContext?: TransactionResolutionContext;\n rpcUrl?: string;\n }) =>\n Promise.resolve(\n new TransactionInspector(arg0.rpcUrl).inspectTransactionType(\n arg0.serializedTransaction,\n arg0.resolutionContext?.tokenAddress,\n arg0.resolutionContext?.createATA,\n ),\n );\n\n const signTransaction = async (arg0: {\n input: {\n derivationPath: string;\n serializedTransaction: Uint8Array;\n };\n }) =>\n new SignDataTask(internalApi, {\n commandFactory: (args) =>\n new SignTransactionCommand({\n serializedTransaction: args.chunkedData,\n more: args.more,\n extend: args.extend,\n }),\n derivationPath: arg0.input.derivationPath,\n sendingData: arg0.input.serializedTransaction,\n }).run();\n\n return {\n getAppConfig,\n buildContext,\n provideContext,\n signTransaction,\n inspectTransaction,\n };\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["DeviceModelId", "isSuccessCommandResult", "OpenAppDeviceAction", "UnknownDAError", "UserInteractionRequired", "XStateDeviceAction", "Left", "Right", "assign", "fromPromise", "setup", "signTransactionDAStateSteps", "GetAppConfigurationCommand", "SignTransactionCommand", "ApplicationChecker", "SolanaTransactionTypes", "TransactionInspector", "BuildTransactionContextTask", "ProvideSolanaTransactionContextTask", "SignDataTask", "SignTransactionDeviceAction", "internalApi", "signTransaction", "getAppConfig", "buildContext", "provideContext", "inspectTransaction", "input", "context", "_", "event", "error", "inspectorData", "data", "arg0", "args"]
4
+ "sourcesContent": ["import {\n type CommandErrorResult,\n type CommandResult,\n type DeviceActionStateMachine,\n DeviceModelId,\n type InternalApi,\n isSuccessCommandResult,\n type LoggerPublisherService,\n OpenAppDeviceAction,\n type StateMachineTypes,\n UnknownDAError,\n UserInteractionRequired,\n XStateDeviceAction,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left, type Maybe, Right } from \"purify-ts\";\nimport { assign, fromPromise, setup } from \"xstate\";\n\nimport {\n type SignTransactionDAError,\n type SignTransactionDAInput,\n type SignTransactionDAIntermediateValue,\n type SignTransactionDAInternalState,\n type SignTransactionDAOutput,\n signTransactionDAStateSteps,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { type AppConfiguration } from \"@api/model/AppConfiguration\";\nimport { type Signature } from \"@api/model/Signature\";\nimport {\n type TransactionResolutionContext,\n type UserInputType,\n} from \"@api/model/TransactionResolutionContext\";\nimport { GetAppConfigurationCommand } from \"@internal/app-binder/command/GetAppConfigurationCommand\";\nimport { SignTransactionCommand } from \"@internal/app-binder/command/SignTransactionCommand\";\nimport { type SolanaAppErrorCodes } from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\nimport { ApplicationChecker } from \"@internal/app-binder/services/ApplicationChecker\";\nimport {\n SolanaTransactionTypes,\n TransactionInspector,\n} from \"@internal/app-binder/services/TransactionInspector\";\nimport { type TxInspectorResult } from \"@internal/app-binder/services/TransactionInspector\";\nimport {\n BuildTransactionContextTask,\n type BuildTransactionContextTaskArgs,\n type SolanaBuildContextResult,\n} from \"@internal/app-binder/task/BuildTransactionContextTask\";\nimport {\n ProvideSolanaTransactionContextTask,\n type ProvideSolanaTransactionContextTaskArgs,\n} from \"@internal/app-binder/task/ProvideTransactionContextTask\";\nimport { SignDataTask } from \"@internal/app-binder/task/SendSignDataTask\";\n\nexport type MachineDependencies = {\n readonly getAppConfig: () => Promise<\n CommandResult<AppConfiguration, SolanaAppErrorCodes>\n >;\n readonly buildContext: (arg0: {\n input: BuildTransactionContextTaskArgs;\n }) => Promise<SolanaBuildContextResult>;\n readonly provideContext: (arg0: {\n input: ProvideSolanaTransactionContextTaskArgs;\n }) => Promise<Maybe<CommandErrorResult<SolanaAppErrorCodes>>>;\n readonly inspectTransaction: (arg0: {\n serializedTransaction: Uint8Array;\n resolutionContext?: TransactionResolutionContext;\n rpcUrl?: string;\n }) => Promise<TxInspectorResult>;\n readonly signTransaction: (arg0: {\n input: {\n derivationPath: string;\n serializedTransaction: Uint8Array;\n };\n }) => Promise<\n CommandResult<Maybe<Signature | SolanaAppErrorCodes>, SolanaAppErrorCodes>\n >;\n};\n\nexport class SignTransactionDeviceAction extends XStateDeviceAction<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n> {\n private readonly _loggerFactory: (tag: string) => LoggerPublisherService;\n\n constructor(args: {\n input: SignTransactionDAInput;\n inspect?: boolean;\n loggerFactory: (tag: string) => LoggerPublisherService;\n }) {\n super({\n input: args.input,\n inspect: args.inspect,\n logger: args.loggerFactory(\"SignTransactionDeviceAction\"),\n });\n this._loggerFactory = args.loggerFactory;\n }\n\n makeStateMachine(\n internalApi: InternalApi,\n ): DeviceActionStateMachine<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n > {\n type types = StateMachineTypes<\n SignTransactionDAOutput,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue,\n SignTransactionDAInternalState\n >;\n\n const {\n signTransaction,\n getAppConfig,\n buildContext,\n provideContext,\n inspectTransaction,\n } = this.extractDependencies(internalApi);\n\n return setup({\n types: {\n input: {} as types[\"input\"],\n context: {} as types[\"context\"],\n output: {} as types[\"output\"],\n },\n actors: {\n openAppStateMachine: new OpenAppDeviceAction({\n input: { appName: \"Solana\" },\n }).makeStateMachine(internalApi),\n getAppConfig: fromPromise(getAppConfig),\n inspectTransaction: fromPromise(\n ({\n input,\n }: {\n input: {\n serializedTransaction: Uint8Array;\n resolutionContext?: TransactionResolutionContext;\n rpcUrl?: string;\n };\n }) =>\n inspectTransaction({\n serializedTransaction: input.serializedTransaction,\n resolutionContext: input.resolutionContext,\n rpcUrl: input.rpcUrl,\n }),\n ),\n buildContext: fromPromise(buildContext),\n provideContext: fromPromise(provideContext),\n signTransaction: fromPromise(signTransaction),\n },\n guards: {\n noInternalError: ({ context }) => context._internalState.error === null,\n skipOpenApp: ({ context }) =>\n context.input.transactionOptions?.skipOpenApp || false,\n isSPLSupported: ({ context }) =>\n new ApplicationChecker(\n internalApi.getDeviceSessionState(),\n context._internalState.appConfig!,\n )\n .withMinVersionExclusive(\"1.4.0\")\n .excludeDeviceModel(DeviceModelId.NANO_S)\n .check(),\n isAnSPLTransaction: ({ context }) =>\n context._internalState.inspectorResult?.transactionType ===\n SolanaTransactionTypes.SPL,\n shouldSkipInspection: ({ context }) =>\n context._internalState.error === null &&\n !!context.input.transactionOptions?.transactionResolutionContext,\n },\n actions: {\n assignErrorFromEvent: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: new UnknownDAError(\n _.event[\"error\"] instanceof Error\n ? _.event[\"error\"].message\n : String(_.event[\"error\"]),\n ),\n }),\n }),\n },\n }).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QGUCWUB2AVATgQw1jwGMAXVAewwBEwA3VYsAQTMowDoBJDVcvADbJSeUmADEAbQAMAXUSgADhVh92CkAA9EAJgCMADg4BWAGw7jAGhABPRHr3SA7Bx0BONwGYALNOPfvUz1jHQBfUOs0TFwCIjYqWgYmVnIqbl5+IRExKT15JBBlVVSMDW0EfSMzC2s7BDdvHQ5pby9ff0DgsIiQKOx8QhISxMYWeM4AeUUwDGZFRRHk8fEIKjAOVAw6CgBrdYpp2fnhUTAAWRIAC02wGXylFTUqMsQnN1MON2lzK1tEN0MJicOicTlMoM8LXe4Ui6H6sSG7EWYxKHAAwpcwMQdlMZnMFvRRil2AAlOAAVwEpCkcg0RSepQK5T0nmMRmkwR+tX+3iMgVM0mc+j0OgM3Vh0QGcWGhKWqIxWJxh3xyOJVDJsEp1MkeTpjxKLwQLLZzU5NT+CAMeg4rTcBneLN8bx8MN6cJig3GqvGHAA4mBSPi0VQAGboFZrDZbXbrGCB+bBjBhqB3PXFdRM+wGUzeVymaq-OqOMWfe0BHyeNxOPSmV19D3SpGylHsP0BoOh8NgHA4Cg4DiKASiEN9gC2HDjHaT6FTBXpBszRuzuZ0+a5Fr0Hk+HjL2YsLNMtZ69aliISzbVnH98cUieTGq1CuxNPuhX1GdA5R0nh0TRapgMJxC3sBwmgMMVwU8QC3l5Yw63dU8vQvH1ryne8KSpJ8dlyV95w-LRdB-P9AkA4CEB8a0qxzYwnE8H5jW8eDJQRJCkhbNIeFgaYyAbM8MAjDB1k2bY9ijLisVIXjxlnB502eRdRS+Dgc2+c0i2kBoODBUUDA0ytqyPCV4U9GU2MvdJxJ4xCSnEbte37QdhzHMTuMk6z2Bkt85MZT9dHtaRlN8dc6kCALvDBbwzA0jTwqApjjMbc8zJ9ZgQzEHBONcl80wZQ0fyCLSKyA7kjRZa1+UFYFQLFeKpNMokUrS7tMoknCcoXXzyNXa1aO8Txio3SFjC0jwfD8AIghCWr3KShrUVS9KWrIKQdFw995M6-KeqKsiBSaSLIUMYwvgaUFppY+q5VbAAhclUAECBEzETRqVWQSoxE9YACM7oep6wBezy8I2gjyKcbMbQMPqBqLBxPA4HxzD0RpaKhQy3WYkym2S1Fbvux6qGe6k7L7Ach1IEccHHH78f+wHaTndafNB-qId5aGyOBAK3GMQ7aM3KD9HOrHZqutIAAVewYCAwDp17I2EmMByl1AZbloGmcNPrRQRr5gpA8EOHA1daOghoDDg48EIu7G5tbSWKGl2XCYB4me1JxyKecxQVbVl36bW7ytZ-IxK1Usi90+dwaLtAWxT0YXEpoZDUQdp25YfTDMWfDWg8XcKeYR47+rIhwgOaVoxo6SbxQxhK+O9VPfedjAicz0gsLaxm886gvhtZLwYfsQVcz15HvzjoWrcxpPG9bE8baoAShOjUTVBnvjc9yxdeZ0XN-AAoejVXIxVx0vSqxrROG5T+frZF-iSYc8nKfHdf6+khnZO3zrd-3kij6gXhkFZGjhwpWhzNfVids0gLwfu3TuW8OqgxjsNNwlRAGeAcAjMUTgOQjwAryKBl12KcDgUnBB2dsI6kDj-FBbw0EYNLqufuuDpCsnATWRiroMAUBlvAAo5Cb443wsDZm5QAC0pgSpSOaIKeRCiFFOGIbbMWnAeBqEECcMQ7V8LlEaCVRwhs3heErCCSErR0ZCOgWojguIjgEhESDMRWtBSfHDiVMsrhRpmNRpYlRotSHoiofYlUt91QYVILokGzJ-zKVIiVBoAV3CmPQX46E08P4kPMqhBMnYoDRPEfYfwRhB6lyhMpH8wIALHQtpbIydVVFBNybefJlDFSFMNDoIUrhDCALAVpGsgpi6XysffWe4T1GEFco05xmsFLGBFJ8Q+5SnC5lMPlap3xBYGACcnJxnAFrNWmRJTpi4sE1kKhzQxIo3CDIFH4Lwoy9lzzSHjP6-sondzoeUHwUMjYinKV4XpDyRkGU8C8yZHA06qxbkTM5m0PC5muRuBwPUfFpIsRkhpM19kwM4DCv2rdXbtOxAi0GB0Pg7RuYeI2EEtkbLFLszJsy8W2Oscglx+c7QfFFICwxe8jAshNqubZTLIUHI4By0kkSsLkvKMYXeJhDGQnhvoY6e9FU82cGMjeNignIHJMQJgsABHf2QeUAUtKoYlxVdIUOEEPC0QuW4CV+KOAAFF3Y4HlYgK1HwbWAL3vDMwkVumRV0ofcI4QgA */\n id: \"SignTransactionDeviceAction\",\n initial: \"InitialState\",\n context: ({ input }) => ({\n input,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.OPEN_APP,\n },\n _internalState: {\n error: null,\n signature: null,\n appConfig: null,\n solanaTransactionContext: null,\n inspectorResult: null,\n },\n }),\n states: {\n InitialState: {\n always: [\n { target: \"GetAppConfig\", guard: \"skipOpenApp\" },\n { target: \"OpenAppDeviceAction\" },\n ],\n },\n OpenAppDeviceAction: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.OPEN_APP,\n }),\n }),\n invoke: {\n id: \"openAppStateMachine\",\n src: \"openAppStateMachine\",\n input: () => ({ appName: \"Solana\" }),\n onSnapshot: {\n actions: assign({\n intermediateValue: ({ event }) => ({\n ...event.snapshot.context.intermediateValue,\n step: signTransactionDAStateSteps.OPEN_APP,\n }),\n }),\n },\n onDone: {\n target: \"CheckOpenAppDeviceActionResult\",\n actions: assign({\n _internalState: ({ event, context }) =>\n event.output.caseOf({\n Right: () => context._internalState,\n Left: (error) => ({\n ...context._internalState,\n error,\n }),\n }),\n }),\n },\n },\n },\n CheckOpenAppDeviceActionResult: {\n always: [\n { target: \"GetAppConfig\", guard: \"noInternalError\" },\n { target: \"Error\" },\n ],\n },\n GetAppConfig: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.GET_APP_CONFIG,\n }),\n }),\n invoke: {\n id: \"getAppConfig\",\n src: \"getAppConfig\",\n onDone: {\n target: \"GetAppConfigResultCheck\",\n actions: assign({\n _internalState: ({ event, context }) =>\n isSuccessCommandResult(event.output)\n ? {\n ...context._internalState,\n appConfig: event.output.data,\n }\n : { ...context._internalState, error: event.output.error },\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n GetAppConfigResultCheck: {\n always: [\n { target: \"InspectTransaction\", guard: \"noInternalError\" },\n { target: \"Error\" },\n ],\n },\n InspectTransaction: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.INSPECT_TRANSACTION,\n }),\n }),\n invoke: {\n id: \"inspectTransaction\",\n src: \"inspectTransaction\",\n\n input: ({ context }) => ({\n serializedTransaction: context.input.transaction,\n resolutionContext:\n context.input.transactionOptions?.transactionResolutionContext,\n rpcUrl: context.input.transactionOptions?.solanaRPCURL,\n }),\n onDone: {\n target: \"AfterInspect\",\n actions: assign({\n _internalState: ({ context, event }) => ({\n ...context._internalState,\n inspectorResult: event.output,\n }),\n }),\n },\n onError: {\n target: \"SignTransaction\",\n },\n },\n },\n AfterInspect: {\n always: [\n { target: \"BuildContext\", guard: \"isAnSPLTransaction\" },\n { target: \"SignTransaction\" },\n ],\n },\n BuildContext: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.BUILD_TRANSACTION_CONTEXT,\n }),\n }),\n invoke: {\n id: \"buildContext\",\n src: \"buildContext\",\n input: ({ context }) => {\n const inspectorData =\n context._internalState.inspectorResult?.data;\n return {\n contextModule: context.input.contextModule,\n loggerFactory: this._loggerFactory,\n options: {\n tokenAddress: inspectorData?.tokenAddress,\n createATA: inspectorData?.createATA,\n tokenInternalId:\n context.input.transactionOptions\n ?.transactionResolutionContext?.tokenInternalId,\n templateId:\n context.input.transactionOptions\n ?.transactionResolutionContext?.templateId,\n },\n };\n },\n onDone: {\n target: \"ProvideContext\",\n actions: assign({\n _internalState: ({ event, context }) => ({\n ...context._internalState,\n solanaTransactionContext: {\n tlvDescriptor: event.output.tlvDescriptor,\n trustedNamePKICertificate:\n event.output.trustedNamePKICertificate,\n loadersResults: event.output.loadersResults,\n },\n }),\n }),\n },\n onError: {\n target: \"SignTransaction\",\n },\n },\n },\n ProvideContext: {\n entry: assign({\n intermediateValue: () => ({\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.PROVIDE_TRANSACTION_CONTEXT,\n }),\n }),\n invoke: {\n id: \"provideContext\",\n src: \"provideContext\",\n input: ({ context }) => {\n if (!context._internalState.solanaTransactionContext) {\n throw new UnknownDAError(\n \"Solana transaction context is not available\",\n );\n }\n return {\n ...context._internalState.solanaTransactionContext,\n transactionBytes: context.input.transaction,\n loggerFactory: this._loggerFactory,\n };\n },\n onDone: {\n target: \"SignTransaction\",\n },\n onError: {\n target: \"SignTransaction\",\n },\n },\n },\n SignTransaction: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n step: signTransactionDAStateSteps.SIGN_TRANSACTION,\n },\n }),\n invoke: {\n id: \"signTransaction\",\n src: \"signTransaction\",\n input: ({ context }) => {\n return {\n derivationPath: context.input.derivationPath,\n serializedTransaction: context.input.transaction,\n userInputType:\n context.input.transactionOptions?.transactionResolutionContext\n ?.userInputType,\n };\n },\n onDone: {\n target: \"SignTransactionResultCheck\",\n actions: assign({\n _internalState: ({ event, context }) => {\n if (!isSuccessCommandResult(event.output))\n return {\n ...context._internalState,\n error: event.output.error,\n };\n\n const data = event.output.data.extract();\n if (event.output.data.isJust() && data instanceof Uint8Array)\n return {\n ...context._internalState,\n signature: data,\n };\n\n return {\n ...context._internalState,\n error: new UnknownDAError(\"No Signature available\"),\n };\n },\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.SIGN_TRANSACTION,\n },\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n SignTransactionResultCheck: {\n always: [\n { guard: \"noInternalError\", target: \"Success\" },\n { target: \"Error\" },\n ],\n },\n Success: { type: \"final\" },\n Error: { type: \"final\" },\n },\n output: ({ context }) =>\n context._internalState.signature\n ? Right(context._internalState.signature)\n : Left(\n context._internalState.error ||\n new UnknownDAError(`No error or signature available`),\n ),\n });\n }\n\n extractDependencies(internalApi: InternalApi): MachineDependencies {\n const getAppConfig = async () =>\n internalApi.sendCommand(new GetAppConfigurationCommand());\n\n const buildContext = async (arg0: {\n input: BuildTransactionContextTaskArgs;\n }) => new BuildTransactionContextTask(internalApi, arg0.input).run();\n\n const provideContext = async (arg0: {\n input: ProvideSolanaTransactionContextTaskArgs;\n }) =>\n new ProvideSolanaTransactionContextTask(internalApi, arg0.input).run();\n\n const inspectTransaction = async (arg0: {\n serializedTransaction: Uint8Array;\n resolutionContext?: TransactionResolutionContext;\n rpcUrl?: string;\n }) =>\n Promise.resolve(\n new TransactionInspector(arg0.rpcUrl).inspectTransactionType(\n arg0.serializedTransaction,\n arg0.resolutionContext?.tokenAddress,\n arg0.resolutionContext?.createATA,\n ),\n );\n\n const signTransaction = async (arg0: {\n input: {\n derivationPath: string;\n serializedTransaction: Uint8Array;\n userInputType?: UserInputType;\n };\n }) =>\n new SignDataTask(internalApi, {\n commandFactory: (args) =>\n new SignTransactionCommand({\n serializedTransaction: args.chunkedData,\n more: args.more,\n extend: args.extend,\n userInputType: arg0.input.userInputType,\n }),\n derivationPath: arg0.input.derivationPath,\n sendingData: arg0.input.serializedTransaction,\n }).run();\n\n return {\n getAppConfig,\n buildContext,\n provideContext,\n signTransaction,\n inspectTransaction,\n };\n }\n}\n"],
5
+ "mappings": "AAAA,OAIE,iBAAAA,EAEA,0BAAAC,EAEA,uBAAAC,EAEA,kBAAAC,EACA,2BAAAC,EACA,sBAAAC,MACK,kCACP,OAAS,QAAAC,EAAkB,SAAAC,MAAa,YACxC,OAAS,UAAAC,EAAQ,eAAAC,EAAa,SAAAC,MAAa,SAE3C,OAME,+BAAAC,MACK,mDAOP,OAAS,8BAAAC,MAAkC,0DAC3C,OAAS,0BAAAC,MAA8B,sDAEvC,OAAS,sBAAAC,MAA0B,mDACnC,OACE,0BAAAC,EACA,wBAAAC,MACK,qDAEP,OACE,+BAAAC,MAGK,wDACP,OACE,uCAAAC,MAEK,0DACP,OAAS,gBAAAC,MAAoB,6CA2BtB,MAAMC,UAAoCf,CAM/C,CACiB,eAEjB,YAAYgB,EAIT,CACD,MAAM,CACJ,MAAOA,EAAK,MACZ,QAASA,EAAK,QACd,OAAQA,EAAK,cAAc,6BAA6B,CAC1D,CAAC,EACD,KAAK,eAAiBA,EAAK,aAC7B,CAEA,iBACEC,EAOA,CASA,KAAM,CACJ,gBAAAC,EACA,aAAAC,EACA,aAAAC,EACA,eAAAC,EACA,mBAAAC,CACF,EAAI,KAAK,oBAAoBL,CAAW,EAExC,OAAOZ,EAAM,CACX,MAAO,CACL,MAAO,CAAC,EACR,QAAS,CAAC,EACV,OAAQ,CAAC,CACX,EACA,OAAQ,CACN,oBAAqB,IAAIR,EAAoB,CAC3C,MAAO,CAAE,QAAS,QAAS,CAC7B,CAAC,EAAE,iBAAiBoB,CAAW,EAC/B,aAAcb,EAAYe,CAAY,EACtC,mBAAoBf,EAClB,CAAC,CACC,MAAAmB,CACF,IAOED,EAAmB,CACjB,sBAAuBC,EAAM,sBAC7B,kBAAmBA,EAAM,kBACzB,OAAQA,EAAM,MAChB,CAAC,CACL,EACA,aAAcnB,EAAYgB,CAAY,EACtC,eAAgBhB,EAAYiB,CAAc,EAC1C,gBAAiBjB,EAAYc,CAAe,CAC9C,EACA,OAAQ,CACN,gBAAiB,CAAC,CAAE,QAAAM,CAAQ,IAAMA,EAAQ,eAAe,QAAU,KACnE,YAAa,CAAC,CAAE,QAAAA,CAAQ,IACtBA,EAAQ,MAAM,oBAAoB,aAAe,GACnD,eAAgB,CAAC,CAAE,QAAAA,CAAQ,IACzB,IAAIf,EACFQ,EAAY,sBAAsB,EAClCO,EAAQ,eAAe,SACzB,EACG,wBAAwB,OAAO,EAC/B,mBAAmB7B,EAAc,MAAM,EACvC,MAAM,EACX,mBAAoB,CAAC,CAAE,QAAA6B,CAAQ,IAC7BA,EAAQ,eAAe,iBAAiB,kBACxCd,EAAuB,IACzB,qBAAsB,CAAC,CAAE,QAAAc,CAAQ,IAC/BA,EAAQ,eAAe,QAAU,MACjC,CAAC,CAACA,EAAQ,MAAM,oBAAoB,4BACxC,EACA,QAAS,CACP,qBAAsBrB,EAAO,CAC3B,eAAiBsB,IAAO,CACtB,GAAGA,EAAE,QAAQ,eACb,MAAO,IAAI3B,EACT2B,EAAE,MAAM,iBAAoB,MACxBA,EAAE,MAAM,MAAS,QACjB,OAAOA,EAAE,MAAM,KAAQ,CAC7B,CACF,EACF,CAAC,CACH,CACF,CAAC,EAAE,cAAc,CAEf,GAAI,8BACJ,QAAS,eACT,QAAS,CAAC,CAAE,MAAAF,CAAM,KAAO,CACvB,MAAAA,EACA,kBAAmB,CACjB,wBAAyBxB,EAAwB,KACjD,KAAMO,EAA4B,QACpC,EACA,eAAgB,CACd,MAAO,KACP,UAAW,KACX,UAAW,KACX,yBAA0B,KAC1B,gBAAiB,IACnB,CACF,GACA,OAAQ,CACN,aAAc,CACZ,OAAQ,CACN,CAAE,OAAQ,eAAgB,MAAO,aAAc,EAC/C,CAAE,OAAQ,qBAAsB,CAClC,CACF,EACA,oBAAqB,CACnB,MAAOH,EAAO,CACZ,kBAAmB,KAAO,CACxB,wBAAyBJ,EAAwB,KACjD,KAAMO,EAA4B,QACpC,EACF,CAAC,EACD,OAAQ,CACN,GAAI,sBACJ,IAAK,sBACL,MAAO,KAAO,CAAE,QAAS,QAAS,GAClC,WAAY,CACV,QAASH,EAAO,CACd,kBAAmB,CAAC,CAAE,MAAAuB,CAAM,KAAO,CACjC,GAAGA,EAAM,SAAS,QAAQ,kBAC1B,KAAMpB,EAA4B,QACpC,EACF,CAAC,CACH,EACA,OAAQ,CACN,OAAQ,iCACR,QAASH,EAAO,CACd,eAAgB,CAAC,CAAE,MAAAuB,EAAO,QAAAF,CAAQ,IAChCE,EAAM,OAAO,OAAO,CAClB,MAAO,IAAMF,EAAQ,eACrB,KAAOG,IAAW,CAChB,GAAGH,EAAQ,eACX,MAAAG,CACF,EACF,CAAC,CACL,CAAC,CACH,CACF,CACF,EACA,+BAAgC,CAC9B,OAAQ,CACN,CAAE,OAAQ,eAAgB,MAAO,iBAAkB,EACnD,CAAE,OAAQ,OAAQ,CACpB,CACF,EACA,aAAc,CACZ,MAAOxB,EAAO,CACZ,kBAAmB,KAAO,CACxB,wBAAyBJ,EAAwB,KACjD,KAAMO,EAA4B,cACpC,EACF,CAAC,EACD,OAAQ,CACN,GAAI,eACJ,IAAK,eACL,OAAQ,CACN,OAAQ,0BACR,QAASH,EAAO,CACd,eAAgB,CAAC,CAAE,MAAAuB,EAAO,QAAAF,CAAQ,IAChC5B,EAAuB8B,EAAM,MAAM,EAC/B,CACE,GAAGF,EAAQ,eACX,UAAWE,EAAM,OAAO,IAC1B,EACA,CAAE,GAAGF,EAAQ,eAAgB,MAAOE,EAAM,OAAO,KAAM,CAC/D,CAAC,CACH,EACA,QAAS,CACP,OAAQ,QACR,QAAS,sBACX,CACF,CACF,EACA,wBAAyB,CACvB,OAAQ,CACN,CAAE,OAAQ,qBAAsB,MAAO,iBAAkB,EACzD,CAAE,OAAQ,OAAQ,CACpB,CACF,EACA,mBAAoB,CAClB,MAAOvB,EAAO,CACZ,kBAAmB,KAAO,CACxB,wBAAyBJ,EAAwB,KACjD,KAAMO,EAA4B,mBACpC,EACF,CAAC,EACD,OAAQ,CACN,GAAI,qBACJ,IAAK,qBAEL,MAAO,CAAC,CAAE,QAAAkB,CAAQ,KAAO,CACvB,sBAAuBA,EAAQ,MAAM,YACrC,kBACEA,EAAQ,MAAM,oBAAoB,6BACpC,OAAQA,EAAQ,MAAM,oBAAoB,YAC5C,GACA,OAAQ,CACN,OAAQ,eACR,QAASrB,EAAO,CACd,eAAgB,CAAC,CAAE,QAAAqB,EAAS,MAAAE,CAAM,KAAO,CACvC,GAAGF,EAAQ,eACX,gBAAiBE,EAAM,MACzB,EACF,CAAC,CACH,EACA,QAAS,CACP,OAAQ,iBACV,CACF,CACF,EACA,aAAc,CACZ,OAAQ,CACN,CAAE,OAAQ,eAAgB,MAAO,oBAAqB,EACtD,CAAE,OAAQ,iBAAkB,CAC9B,CACF,EACA,aAAc,CACZ,MAAOvB,EAAO,CACZ,kBAAmB,KAAO,CACxB,wBAAyBJ,EAAwB,KACjD,KAAMO,EAA4B,yBACpC,EACF,CAAC,EACD,OAAQ,CACN,GAAI,eACJ,IAAK,eACL,MAAO,CAAC,CAAE,QAAAkB,CAAQ,IAAM,CACtB,MAAMI,EACJJ,EAAQ,eAAe,iBAAiB,KAC1C,MAAO,CACL,cAAeA,EAAQ,MAAM,cAC7B,cAAe,KAAK,eACpB,QAAS,CACP,aAAcI,GAAe,aAC7B,UAAWA,GAAe,UAC1B,gBACEJ,EAAQ,MAAM,oBACV,8BAA8B,gBACpC,WACEA,EAAQ,MAAM,oBACV,8BAA8B,UACtC,CACF,CACF,EACA,OAAQ,CACN,OAAQ,iBACR,QAASrB,EAAO,CACd,eAAgB,CAAC,CAAE,MAAAuB,EAAO,QAAAF,CAAQ,KAAO,CACvC,GAAGA,EAAQ,eACX,yBAA0B,CACxB,cAAeE,EAAM,OAAO,cAC5B,0BACEA,EAAM,OAAO,0BACf,eAAgBA,EAAM,OAAO,cAC/B,CACF,EACF,CAAC,CACH,EACA,QAAS,CACP,OAAQ,iBACV,CACF,CACF,EACA,eAAgB,CACd,MAAOvB,EAAO,CACZ,kBAAmB,KAAO,CACxB,wBAAyBJ,EAAwB,KACjD,KAAMO,EAA4B,2BACpC,EACF,CAAC,EACD,OAAQ,CACN,GAAI,iBACJ,IAAK,iBACL,MAAO,CAAC,CAAE,QAAAkB,CAAQ,IAAM,CACtB,GAAI,CAACA,EAAQ,eAAe,yBAC1B,MAAM,IAAI1B,EACR,6CACF,EAEF,MAAO,CACL,GAAG0B,EAAQ,eAAe,yBAC1B,iBAAkBA,EAAQ,MAAM,YAChC,cAAe,KAAK,cACtB,CACF,EACA,OAAQ,CACN,OAAQ,iBACV,EACA,QAAS,CACP,OAAQ,iBACV,CACF,CACF,EACA,gBAAiB,CACf,MAAOrB,EAAO,CACZ,kBAAmB,CACjB,wBAAyBJ,EAAwB,gBACjD,KAAMO,EAA4B,gBACpC,CACF,CAAC,EACD,OAAQ,CACN,GAAI,kBACJ,IAAK,kBACL,MAAO,CAAC,CAAE,QAAAkB,CAAQ,KACT,CACL,eAAgBA,EAAQ,MAAM,eAC9B,sBAAuBA,EAAQ,MAAM,YACrC,cACEA,EAAQ,MAAM,oBAAoB,8BAC9B,aACR,GAEF,OAAQ,CACN,OAAQ,6BACR,QAASrB,EAAO,CACd,eAAgB,CAAC,CAAE,MAAAuB,EAAO,QAAAF,CAAQ,IAAM,CACtC,GAAI,CAAC5B,EAAuB8B,EAAM,MAAM,EACtC,MAAO,CACL,GAAGF,EAAQ,eACX,MAAOE,EAAM,OAAO,KACtB,EAEF,MAAMG,EAAOH,EAAM,OAAO,KAAK,QAAQ,EACvC,OAAIA,EAAM,OAAO,KAAK,OAAO,GAAKG,aAAgB,WACzC,CACL,GAAGL,EAAQ,eACX,UAAWK,CACb,EAEK,CACL,GAAGL,EAAQ,eACX,MAAO,IAAI1B,EAAe,wBAAwB,CACpD,CACF,EACA,kBAAmB,CACjB,wBAAyBC,EAAwB,KACjD,KAAMO,EAA4B,gBACpC,CACF,CAAC,CACH,EACA,QAAS,CACP,OAAQ,QACR,QAAS,sBACX,CACF,CACF,EACA,2BAA4B,CAC1B,OAAQ,CACN,CAAE,MAAO,kBAAmB,OAAQ,SAAU,EAC9C,CAAE,OAAQ,OAAQ,CACpB,CACF,EACA,QAAS,CAAE,KAAM,OAAQ,EACzB,MAAO,CAAE,KAAM,OAAQ,CACzB,EACA,OAAQ,CAAC,CAAE,QAAAkB,CAAQ,IACjBA,EAAQ,eAAe,UACnBtB,EAAMsB,EAAQ,eAAe,SAAS,EACtCvB,EACEuB,EAAQ,eAAe,OACrB,IAAI1B,EAAe,iCAAiC,CACxD,CACR,CAAC,CACH,CAEA,oBAAoBmB,EAA+C,CA6CjE,MAAO,CACL,aA7CmB,SACnBA,EAAY,YAAY,IAAIV,CAA4B,EA6CxD,aA3CmB,MAAOuB,GAEtB,IAAIlB,EAA4BK,EAAaa,EAAK,KAAK,EAAE,IAAI,EA0CjE,eAxCqB,MAAOA,GAG5B,IAAIjB,EAAoCI,EAAaa,EAAK,KAAK,EAAE,IAAI,EAsCrE,gBAvBsB,MAAOA,GAO7B,IAAIhB,EAAaG,EAAa,CAC5B,eAAiBD,GACf,IAAIR,EAAuB,CACzB,sBAAuBQ,EAAK,YAC5B,KAAMA,EAAK,KACX,OAAQA,EAAK,OACb,cAAec,EAAK,MAAM,aAC5B,CAAC,EACH,eAAgBA,EAAK,MAAM,eAC3B,YAAaA,EAAK,MAAM,qBAC1B,CAAC,EAAE,IAAI,EAOP,mBArCyB,MAAOA,GAKhC,QAAQ,QACN,IAAInB,EAAqBmB,EAAK,MAAM,EAAE,uBACpCA,EAAK,sBACLA,EAAK,mBAAmB,aACxBA,EAAK,mBAAmB,SAC1B,CACF,CA2BF,CACF,CACF",
6
+ "names": ["DeviceModelId", "isSuccessCommandResult", "OpenAppDeviceAction", "UnknownDAError", "UserInteractionRequired", "XStateDeviceAction", "Left", "Right", "assign", "fromPromise", "setup", "signTransactionDAStateSteps", "GetAppConfigurationCommand", "SignTransactionCommand", "ApplicationChecker", "SolanaTransactionTypes", "TransactionInspector", "BuildTransactionContextTask", "ProvideSolanaTransactionContextTask", "SignDataTask", "SignTransactionDeviceAction", "args", "internalApi", "signTransaction", "getAppConfig", "buildContext", "provideContext", "inspectTransaction", "input", "context", "_", "event", "error", "inspectorData", "data", "arg0"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{CommandResultFactory as s,DeviceActionStatus as e,DeviceModelId as g,DeviceSessionStateType as N,DeviceStatus as I,InvalidStatusWordError as x,UserInteractionRequired as t}from"@ledgerhq/device-management-kit";import{Just as v,Nothing as E}from"purify-ts";import{beforeEach as O,describe as U,it as D,vi as a}from"vitest";import{signTransactionDAStateSteps as n}from"../../../api/app-binder/SignTransactionDeviceActionTypes";import{testDeviceActionStates as y}from"../../app-binder/device-action/__test-utils__/testDeviceActionStates";import{SolanaTransactionTypes as T}from"../../app-binder/services/TransactionInspector";import{makeDeviceActionInternalApiMock as _}from"./__test-utils__/makeInternalApi";import{SignTransactionDeviceAction as C}from"./SignTransactionDeviceAction";const R="44'/501'/0'/0'",V=new Uint8Array([222,173,190,239]),f={getSolanaContext:a.fn()};let o,d,p,S,m,l;function k(){return{getAppConfig:d,buildContext:p,provideContext:S,signTransaction:m,inspectTransaction:l}}U("SignTransactionDeviceAction (Solana)",()=>{O(()=>{o=_(),d=a.fn(),p=a.fn(),S=a.fn(),m=a.fn(),l=a.fn().mockResolvedValue({transactionType:T.SPL,data:{tokenAddress:null,createATA:!1}})}),D("happy path (skip open): getAppConfig -> inspect -> build -> provide -> sign",()=>new Promise((c,u)=>{o.getDeviceSessionState.mockReturnValue({sessionStateType:N.ReadyWithoutSecureChannel,deviceStatus:I.CONNECTED,installedApps:[],currentApp:{name:"Solana",version:"1.4.1"},deviceModelId:g.NANO_X,isSecureConnectionAllowed:!0}),d.mockResolvedValue(s({data:{}})),l.mockResolvedValue({transactionType:T.SPL});const i={tlvDescriptor:new Uint8Array([1]),trustedNamePKICertificate:{keyUsageNumber:0,payload:new Uint8Array([1])},loadersResults:[]};p.mockResolvedValue(i),S.mockResolvedValue(E);const r=new Uint8Array([170,187]);m.mockResolvedValue(s({data:v(r)}));const A=new C({input:{derivationPath:R,transaction:V,transactionOptions:{skipOpenApp:!0},contextModule:f}});a.spyOn(A,"extractDependencies").mockReturnValue(k());const P=[{intermediateValue:{requiredUserInteraction:t.None,step:n.GET_APP_CONFIG},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.None,step:n.INSPECT_TRANSACTION},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.None,step:n.BUILD_TRANSACTION_CONTEXT},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.None,step:n.PROVIDE_TRANSACTION_CONTEXT},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.SignTransaction,step:n.SIGN_TRANSACTION},status:e.Pending},{output:r,status:e.Completed}];y(A,P,o,{onDone:c,onError:u})})),D("failure in provideContext still signs",()=>new Promise((c,u)=>{o.getDeviceSessionState.mockReturnValue({sessionStateType:N.ReadyWithoutSecureChannel,deviceStatus:I.CONNECTED,installedApps:[],currentApp:{name:"Solana",version:"1.4.1"},deviceModelId:g.NANO_X,isSecureConnectionAllowed:!0}),d.mockResolvedValue(s({data:{}})),l.mockResolvedValue({transactionType:T.SPL}),p.mockResolvedValue({descriptor:new Uint8Array([2]),trustedNamePKICertificate:{keyUsageNumber:0,payload:new Uint8Array},challenge:void 0,addressResult:{tokenAccount:"",owner:"",contract:""},loadersResults:[]}),S.mockResolvedValue(v(s({error:new x("ctxErr")})));const i=new Uint8Array([254]);m.mockResolvedValue(s({data:v(i)}));const r=new C({input:{derivationPath:R,transaction:V,transactionOptions:{skipOpenApp:!0},contextModule:f}});a.spyOn(r,"extractDependencies").mockReturnValue(k());const A=[{intermediateValue:{requiredUserInteraction:t.None,step:n.GET_APP_CONFIG},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.None,step:n.INSPECT_TRANSACTION},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.None,step:n.BUILD_TRANSACTION_CONTEXT},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.None,step:n.PROVIDE_TRANSACTION_CONTEXT},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.SignTransaction,step:n.SIGN_TRANSACTION},status:e.Pending},{output:i,status:e.Completed}];y(r,A,o,{onDone:c,onError:u})})),D("buildContext throws \u2192 error",()=>new Promise((c,u)=>{o.getDeviceSessionState.mockReturnValue({sessionStateType:N.ReadyWithoutSecureChannel,deviceStatus:I.CONNECTED,installedApps:[],currentApp:{name:"Solana",version:"1.4.1"},deviceModelId:g.NANO_X,isSecureConnectionAllowed:!0}),d.mockResolvedValue(s({data:{}})),l.mockResolvedValue({transactionType:T.SPL}),p.mockRejectedValue(new x("bldErr"));const i=new C({input:{derivationPath:R,transaction:V,transactionOptions:{skipOpenApp:!0},contextModule:f}});a.spyOn(i,"extractDependencies").mockReturnValue(k());const r=[{intermediateValue:{requiredUserInteraction:t.None,step:n.GET_APP_CONFIG},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.None,step:n.INSPECT_TRANSACTION},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.None,step:n.BUILD_TRANSACTION_CONTEXT},status:e.Pending},{error:expect.anything(),status:e.Error}];y(i,r,o,{onDone:c,onError:u})}))});
1
+ import{CommandResultFactory as s,DeviceActionStatus as e,DeviceModelId as g,DeviceSessionStateType as I,DeviceStatus as v,InvalidStatusWordError as E,UserInteractionRequired as t}from"@ledgerhq/device-management-kit";import{Just as m,Nothing as f}from"purify-ts";import{beforeEach as _,describe as w,it as C,vi as a}from"vitest";import{signTransactionDAStateSteps as n}from"../../../api/app-binder/SignTransactionDeviceActionTypes";import{testDeviceActionStates as D}from"../../app-binder/device-action/__test-utils__/testDeviceActionStates";import{SolanaTransactionTypes as y}from"../../app-binder/services/TransactionInspector";import{makeDeviceActionInternalApiMock as q}from"./__test-utils__/makeInternalApi";import{SignTransactionDeviceAction as R}from"./SignTransactionDeviceAction";const V="44'/501'/0'/0'",P=new Uint8Array([222,173,190,239]),O=()=>({debug:a.fn(),info:a.fn(),warn:a.fn(),error:a.fn(),subscribers:[]}),k={getSolanaContext:a.fn()};let c,T,l,N,p,S;function x(){return{getAppConfig:T,buildContext:l,provideContext:N,signTransaction:p,inspectTransaction:S}}w("SignTransactionDeviceAction (Solana)",()=>{_(()=>{c=q(),T=a.fn(),l=a.fn(),N=a.fn(),p=a.fn(),S=a.fn().mockResolvedValue({transactionType:y.SPL,data:{tokenAddress:null,createATA:!1}})}),C("happy path (skip open): getAppConfig -> inspect -> build -> provide -> sign",()=>new Promise((u,d)=>{c.getDeviceSessionState.mockReturnValue({sessionStateType:I.ReadyWithoutSecureChannel,deviceStatus:v.CONNECTED,installedApps:[],currentApp:{name:"Solana",version:"1.4.1"},deviceModelId:g.NANO_X,isSecureConnectionAllowed:!0}),T.mockResolvedValue(s({data:{}})),S.mockResolvedValue({transactionType:y.SPL});const i={tlvDescriptor:new Uint8Array([1]),trustedNamePKICertificate:{keyUsageNumber:0,payload:new Uint8Array([1])},loadersResults:[]};l.mockResolvedValue(i),N.mockResolvedValue(f);const r=new Uint8Array([170,187]);p.mockResolvedValue(s({data:m(r)}));const o={derivationPath:V,transaction:P,transactionOptions:{skipOpenApp:!0},contextModule:k},A=new R({input:o,loggerFactory:O});a.spyOn(A,"extractDependencies").mockReturnValue(x());const U=[{intermediateValue:{requiredUserInteraction:t.None,step:n.GET_APP_CONFIG},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.None,step:n.INSPECT_TRANSACTION},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.None,step:n.BUILD_TRANSACTION_CONTEXT},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.None,step:n.PROVIDE_TRANSACTION_CONTEXT},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.SignTransaction,step:n.SIGN_TRANSACTION},status:e.Pending},{output:r,status:e.Completed}];D(A,U,c,{onDone:u,onError:d})})),C("inspectTransaction rejects, still signs (fallback)",()=>new Promise((u,d)=>{c.getDeviceSessionState.mockReturnValue({sessionStateType:I.ReadyWithoutSecureChannel,deviceStatus:v.CONNECTED,installedApps:[],currentApp:{name:"Solana",version:"1.4.1"},deviceModelId:g.NANO_X,isSecureConnectionAllowed:!0}),T.mockResolvedValue(s({data:{}})),S.mockRejectedValue(new E("inspErr"));const i=new Uint8Array([17,34]);p.mockResolvedValue(s({data:m(i)}));const r=new R({input:{derivationPath:V,transaction:P,transactionOptions:{skipOpenApp:!0},contextModule:k},loggerFactory:O});a.spyOn(r,"extractDependencies").mockReturnValue(x());const o=[{intermediateValue:{requiredUserInteraction:t.None,step:n.GET_APP_CONFIG},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.None,step:n.INSPECT_TRANSACTION},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.SignTransaction,step:n.SIGN_TRANSACTION},status:e.Pending},{output:i,status:e.Completed}];D(r,o,c,{onDone:()=>{expect(l).not.toHaveBeenCalled(),expect(N).not.toHaveBeenCalled(),u()},onError:d})})),C("buildContext throws, still signs (fallback)",()=>new Promise((u,d)=>{c.getDeviceSessionState.mockReturnValue({sessionStateType:I.ReadyWithoutSecureChannel,deviceStatus:v.CONNECTED,installedApps:[],currentApp:{name:"Solana",version:"1.4.1"},deviceModelId:g.NANO_X,isSecureConnectionAllowed:!0}),T.mockResolvedValue(s({data:{}})),S.mockResolvedValue({transactionType:y.SPL}),l.mockRejectedValue(new E("bldErr"));const i=new Uint8Array([202,254]);p.mockResolvedValue(s({data:m(i)}));const r=new R({input:{derivationPath:V,transaction:P,transactionOptions:{skipOpenApp:!0},contextModule:k},loggerFactory:O});a.spyOn(r,"extractDependencies").mockReturnValue(x());const o=[{intermediateValue:{requiredUserInteraction:t.None,step:n.GET_APP_CONFIG},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.None,step:n.INSPECT_TRANSACTION},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.None,step:n.BUILD_TRANSACTION_CONTEXT},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.SignTransaction,step:n.SIGN_TRANSACTION},status:e.Pending},{output:i,status:e.Completed}];D(r,o,c,{onDone:u,onError:d})})),C("provideContext rejects, still signs (fallback)",()=>new Promise((u,d)=>{c.getDeviceSessionState.mockReturnValue({sessionStateType:I.ReadyWithoutSecureChannel,deviceStatus:v.CONNECTED,installedApps:[],currentApp:{name:"Solana",version:"1.4.1"},deviceModelId:g.NANO_X,isSecureConnectionAllowed:!0}),T.mockResolvedValue(s({data:{}})),S.mockResolvedValue({transactionType:y.SPL});const i={tlvDescriptor:new Uint8Array([1]),trustedNamePKICertificate:{keyUsageNumber:0,payload:new Uint8Array([2])},loadersResults:[]};l.mockResolvedValue(i),N.mockRejectedValue(new E("provErr"));const r=new Uint8Array([51]);p.mockResolvedValue(s({data:m(r)}));const o=new R({input:{derivationPath:V,transaction:P,transactionOptions:{skipOpenApp:!0},contextModule:k},loggerFactory:O});a.spyOn(o,"extractDependencies").mockReturnValue(x());const A=[{intermediateValue:{requiredUserInteraction:t.None,step:n.GET_APP_CONFIG},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.None,step:n.INSPECT_TRANSACTION},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.None,step:n.BUILD_TRANSACTION_CONTEXT},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.None,step:n.PROVIDE_TRANSACTION_CONTEXT},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.SignTransaction,step:n.SIGN_TRANSACTION},status:e.Pending},{output:r,status:e.Completed}];D(o,A,c,{onDone:()=>{expect(l).toHaveBeenCalledTimes(1),expect(N).toHaveBeenCalledTimes(1),expect(p).toHaveBeenCalledTimes(1),u()},onError:d})})),C("failure in provideContext still signs",()=>new Promise((u,d)=>{c.getDeviceSessionState.mockReturnValue({sessionStateType:I.ReadyWithoutSecureChannel,deviceStatus:v.CONNECTED,installedApps:[],currentApp:{name:"Solana",version:"1.4.1"},deviceModelId:g.NANO_X,isSecureConnectionAllowed:!0}),T.mockResolvedValue(s({data:{}})),S.mockResolvedValue({transactionType:y.SPL}),l.mockResolvedValue({tlvDescriptor:new Uint8Array([2]),trustedNamePKICertificate:{keyUsageNumber:0,payload:new Uint8Array},loadersResults:[]}),N.mockResolvedValue(m(s({error:new E("ctxErr")})));const i=new Uint8Array([254]);p.mockResolvedValue(s({data:m(i)}));const r={derivationPath:V,transaction:P,transactionOptions:{skipOpenApp:!0},contextModule:k},o=new R({input:r,loggerFactory:O});a.spyOn(o,"extractDependencies").mockReturnValue(x());const A=[{intermediateValue:{requiredUserInteraction:t.None,step:n.GET_APP_CONFIG},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.None,step:n.INSPECT_TRANSACTION},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.None,step:n.BUILD_TRANSACTION_CONTEXT},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.None,step:n.PROVIDE_TRANSACTION_CONTEXT},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.SignTransaction,step:n.SIGN_TRANSACTION},status:e.Pending},{output:i,status:e.Completed}];D(o,A,c,{onDone:u,onError:d})})),C("buildContext throws \u2192 error",()=>new Promise((u,d)=>{c.getDeviceSessionState.mockReturnValue({sessionStateType:I.ReadyWithoutSecureChannel,deviceStatus:v.CONNECTED,installedApps:[],currentApp:{name:"Solana",version:"1.4.1"},deviceModelId:g.NANO_X,isSecureConnectionAllowed:!0}),T.mockResolvedValue(s({data:{}})),S.mockResolvedValue({transactionType:y.SPL}),l.mockRejectedValue(new E("bldErr"));const i=new Uint8Array([171,205]);p.mockResolvedValue(s({data:m(i)}));const r={derivationPath:V,transaction:P,transactionOptions:{skipOpenApp:!0},contextModule:k},o=new R({input:r,loggerFactory:O});a.spyOn(o,"extractDependencies").mockReturnValue(x());const A=[{intermediateValue:{requiredUserInteraction:t.None,step:n.GET_APP_CONFIG},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.None,step:n.INSPECT_TRANSACTION},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.None,step:n.BUILD_TRANSACTION_CONTEXT},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.SignTransaction,step:n.SIGN_TRANSACTION},status:e.Pending},{output:i,status:e.Completed}];D(o,A,c,{onDone:u,onError:d})}))});
2
2
  //# sourceMappingURL=SignTransactionDeviceAction.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/device-action/SignTransactionDeviceAction.test.ts"],
4
- "sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n CommandResultFactory,\n type DeviceActionState,\n DeviceActionStatus,\n DeviceModelId,\n DeviceSessionStateType,\n DeviceStatus,\n InvalidStatusWordError,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { Just, Nothing } from \"purify-ts\";\nimport { beforeEach, describe, it, vi } from \"vitest\";\n\nimport {\n type SignTransactionDAError,\n type SignTransactionDAInput,\n type SignTransactionDAIntermediateValue,\n signTransactionDAStateSteps,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { testDeviceActionStates } from \"@internal/app-binder/device-action/__test-utils__/testDeviceActionStates\";\nimport { SolanaTransactionTypes } from \"@internal/app-binder/services/TransactionInspector\";\nimport { type SolanaBuildContextResult } from \"@internal/app-binder/task/BuildTransactionContextTask\";\n\nimport { makeDeviceActionInternalApiMock } from \"./__test-utils__/makeInternalApi\";\nimport { SignTransactionDeviceAction } from \"./SignTransactionDeviceAction\";\n\nconst defaultDerivation = \"44'/501'/0'/0'\";\nconst exampleTx = new Uint8Array([0xde, 0xad, 0xbe, 0xef]);\n\nconst contextModuleStub: ContextModule = {\n getSolanaContext: vi.fn(),\n} as unknown as ContextModule;\n\nlet apiMock: ReturnType<typeof makeDeviceActionInternalApiMock>;\nlet getAppConfigMock: ReturnType<typeof vi.fn>;\nlet buildContextMock: ReturnType<typeof vi.fn>;\nlet provideContextMock: ReturnType<typeof vi.fn>;\nlet signMock: ReturnType<typeof vi.fn>;\nlet inspectTransactionMock: ReturnType<typeof vi.fn>;\n\nfunction extractDeps() {\n return {\n getAppConfig: getAppConfigMock,\n buildContext: buildContextMock,\n provideContext: provideContextMock,\n signTransaction: signMock,\n inspectTransaction: inspectTransactionMock,\n };\n}\n\ndescribe(\"SignTransactionDeviceAction (Solana)\", () => {\n beforeEach(() => {\n apiMock = makeDeviceActionInternalApiMock();\n getAppConfigMock = vi.fn();\n buildContextMock = vi.fn();\n provideContextMock = vi.fn();\n signMock = vi.fn();\n inspectTransactionMock = vi.fn().mockResolvedValue({\n transactionType: SolanaTransactionTypes.SPL,\n data: { tokenAddress: null, createATA: false },\n });\n });\n\n it(\"happy path (skip open): getAppConfig -> inspect -> build -> provide -> sign\", () =>\n new Promise<void>((resolve, reject) => {\n apiMock.getDeviceSessionState.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Solana\", version: \"1.4.1\" },\n deviceModelId: DeviceModelId.NANO_X,\n isSecureConnectionAllowed: true,\n });\n\n getAppConfigMock.mockResolvedValue(CommandResultFactory({ data: {} }));\n inspectTransactionMock.mockResolvedValue({\n transactionType: SolanaTransactionTypes.SPL,\n });\n\n const ctx: SolanaBuildContextResult = {\n tlvDescriptor: new Uint8Array([1]),\n trustedNamePKICertificate: {\n keyUsageNumber: 0,\n payload: new Uint8Array([0x01]),\n },\n loadersResults: [],\n };\n buildContextMock.mockResolvedValue(ctx);\n provideContextMock.mockResolvedValue(Nothing);\n\n const signature = new Uint8Array([0xaa, 0xbb]);\n signMock.mockResolvedValue(\n CommandResultFactory({ data: Just(signature) }),\n );\n\n const action = new SignTransactionDeviceAction({\n input: {\n derivationPath: defaultDerivation,\n transaction: exampleTx,\n transactionOptions: { skipOpenApp: true },\n contextModule: contextModuleStub,\n } as SignTransactionDAInput,\n });\n vi.spyOn(action, \"extractDependencies\").mockReturnValue(extractDeps());\n\n const expected = [\n // getAppConfig\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.GET_APP_CONFIG,\n },\n status: DeviceActionStatus.Pending,\n },\n // inspectTransaction\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.INSPECT_TRANSACTION,\n },\n status: DeviceActionStatus.Pending,\n },\n // buildContext\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.BUILD_TRANSACTION_CONTEXT,\n },\n status: DeviceActionStatus.Pending,\n },\n // provideContext\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.PROVIDE_TRANSACTION_CONTEXT,\n },\n status: DeviceActionStatus.Pending,\n },\n // signTransaction\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n step: signTransactionDAStateSteps.SIGN_TRANSACTION,\n },\n status: DeviceActionStatus.Pending,\n },\n // success\n { output: signature, status: DeviceActionStatus.Completed },\n ] as DeviceActionState<\n Uint8Array,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >[];\n\n testDeviceActionStates<\n Uint8Array,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >(action, expected, apiMock, { onDone: resolve, onError: reject });\n }));\n\n it(\"failure in provideContext still signs\", () =>\n new Promise<void>((resolve, reject) => {\n apiMock.getDeviceSessionState.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Solana\", version: \"1.4.1\" },\n deviceModelId: DeviceModelId.NANO_X,\n isSecureConnectionAllowed: true,\n });\n\n getAppConfigMock.mockResolvedValue(CommandResultFactory({ data: {} }));\n inspectTransactionMock.mockResolvedValue({\n transactionType: SolanaTransactionTypes.SPL,\n });\n\n buildContextMock.mockResolvedValue({\n descriptor: new Uint8Array([2]),\n trustedNamePKICertificate: {\n keyUsageNumber: 0,\n payload: new Uint8Array(),\n },\n challenge: undefined,\n addressResult: { tokenAccount: \"\", owner: \"\", contract: \"\" },\n loadersResults: [], // <-- include it\n });\n provideContextMock.mockResolvedValue(\n Just(\n CommandResultFactory({ error: new InvalidStatusWordError(\"ctxErr\") }),\n ),\n );\n const sig = new Uint8Array([0xfe]);\n signMock.mockResolvedValue(CommandResultFactory({ data: Just(sig) }));\n\n const action = new SignTransactionDeviceAction({\n input: {\n derivationPath: defaultDerivation,\n transaction: exampleTx,\n transactionOptions: { skipOpenApp: true },\n contextModule: contextModuleStub,\n } as SignTransactionDAInput,\n });\n vi.spyOn(action, \"extractDependencies\").mockReturnValue(extractDeps());\n\n const expected = [\n // getAppConfig\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.GET_APP_CONFIG,\n },\n status: DeviceActionStatus.Pending,\n },\n // inspectTransaction\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.INSPECT_TRANSACTION,\n },\n status: DeviceActionStatus.Pending,\n },\n // buildContext\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.BUILD_TRANSACTION_CONTEXT,\n },\n status: DeviceActionStatus.Pending,\n },\n // provideContext (returns error but continues)\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.PROVIDE_TRANSACTION_CONTEXT,\n },\n status: DeviceActionStatus.Pending,\n },\n // signTransaction\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n step: signTransactionDAStateSteps.SIGN_TRANSACTION,\n },\n status: DeviceActionStatus.Pending,\n },\n // success\n { output: sig, status: DeviceActionStatus.Completed },\n ] as DeviceActionState<\n Uint8Array,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >[];\n\n testDeviceActionStates<\n Uint8Array,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >(action, expected, apiMock, { onDone: resolve, onError: reject });\n }));\n\n it(\"buildContext throws \u2192 error\", () =>\n new Promise<void>((resolve, reject) => {\n apiMock.getDeviceSessionState.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Solana\", version: \"1.4.1\" },\n deviceModelId: DeviceModelId.NANO_X,\n isSecureConnectionAllowed: true,\n });\n\n getAppConfigMock.mockResolvedValue(CommandResultFactory({ data: {} }));\n inspectTransactionMock.mockResolvedValue({\n transactionType: SolanaTransactionTypes.SPL,\n });\n\n buildContextMock.mockRejectedValue(new InvalidStatusWordError(\"bldErr\"));\n\n const action = new SignTransactionDeviceAction({\n input: {\n derivationPath: defaultDerivation,\n transaction: exampleTx,\n transactionOptions: { skipOpenApp: true },\n contextModule: contextModuleStub,\n } as SignTransactionDAInput,\n });\n vi.spyOn(action, \"extractDependencies\").mockReturnValue(extractDeps());\n\n const expected = [\n // getAppConfig\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.GET_APP_CONFIG,\n },\n status: DeviceActionStatus.Pending,\n },\n // inspectTransaction\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.INSPECT_TRANSACTION,\n },\n status: DeviceActionStatus.Pending,\n },\n // buildContext (throws)\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.BUILD_TRANSACTION_CONTEXT,\n },\n status: DeviceActionStatus.Pending,\n },\n // error raised from buildContext\n {\n error: expect.anything() as unknown as SignTransactionDAError,\n status: DeviceActionStatus.Error,\n },\n ] as DeviceActionState<\n Uint8Array,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >[];\n\n testDeviceActionStates<\n Uint8Array,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >(action, expected, apiMock, { onDone: resolve, onError: reject });\n }));\n});\n"],
5
- "mappings": "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",
6
- "names": ["CommandResultFactory", "DeviceActionStatus", "DeviceModelId", "DeviceSessionStateType", "DeviceStatus", "InvalidStatusWordError", "UserInteractionRequired", "Just", "Nothing", "beforeEach", "describe", "it", "vi", "signTransactionDAStateSteps", "testDeviceActionStates", "SolanaTransactionTypes", "makeDeviceActionInternalApiMock", "SignTransactionDeviceAction", "defaultDerivation", "exampleTx", "contextModuleStub", "apiMock", "getAppConfigMock", "buildContextMock", "provideContextMock", "signMock", "inspectTransactionMock", "extractDeps", "resolve", "reject", "ctx", "signature", "action", "expected", "sig"]
4
+ "sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n CommandResultFactory,\n type DeviceActionState,\n DeviceActionStatus,\n DeviceModelId,\n DeviceSessionStateType,\n DeviceStatus,\n InvalidStatusWordError,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { Just, Nothing } from \"purify-ts\";\nimport { beforeEach, describe, it, vi } from \"vitest\";\n\nimport {\n type SignTransactionDAError,\n type SignTransactionDAInput,\n type SignTransactionDAIntermediateValue,\n signTransactionDAStateSteps,\n} from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { testDeviceActionStates } from \"@internal/app-binder/device-action/__test-utils__/testDeviceActionStates\";\nimport { SolanaTransactionTypes } from \"@internal/app-binder/services/TransactionInspector\";\nimport { type SolanaBuildContextResult } from \"@internal/app-binder/task/BuildTransactionContextTask\";\n\nimport { makeDeviceActionInternalApiMock } from \"./__test-utils__/makeInternalApi\";\nimport { SignTransactionDeviceAction } from \"./SignTransactionDeviceAction\";\n\nconst defaultDerivation = \"44'/501'/0'/0'\";\nconst exampleTx = new Uint8Array([0xde, 0xad, 0xbe, 0xef]);\n\nconst mockLoggerFactory = () => ({\n debug: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n subscribers: [],\n});\n\nconst contextModuleStub: ContextModule = {\n getSolanaContext: vi.fn(),\n} as unknown as ContextModule;\n\nlet apiMock: ReturnType<typeof makeDeviceActionInternalApiMock>;\nlet getAppConfigMock: ReturnType<typeof vi.fn>;\nlet buildContextMock: ReturnType<typeof vi.fn>;\nlet provideContextMock: ReturnType<typeof vi.fn>;\nlet signMock: ReturnType<typeof vi.fn>;\nlet inspectTransactionMock: ReturnType<typeof vi.fn>;\n\nfunction extractDeps() {\n return {\n getAppConfig: getAppConfigMock,\n buildContext: buildContextMock,\n provideContext: provideContextMock,\n signTransaction: signMock,\n inspectTransaction: inspectTransactionMock,\n };\n}\n\ndescribe(\"SignTransactionDeviceAction (Solana)\", () => {\n beforeEach(() => {\n apiMock = makeDeviceActionInternalApiMock();\n getAppConfigMock = vi.fn();\n buildContextMock = vi.fn();\n provideContextMock = vi.fn();\n signMock = vi.fn();\n inspectTransactionMock = vi.fn().mockResolvedValue({\n transactionType: SolanaTransactionTypes.SPL,\n data: { tokenAddress: null, createATA: false },\n });\n });\n\n it(\"happy path (skip open): getAppConfig -> inspect -> build -> provide -> sign\", () =>\n new Promise<void>((resolve, reject) => {\n apiMock.getDeviceSessionState.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Solana\", version: \"1.4.1\" },\n deviceModelId: DeviceModelId.NANO_X,\n isSecureConnectionAllowed: true,\n });\n\n getAppConfigMock.mockResolvedValue(CommandResultFactory({ data: {} }));\n inspectTransactionMock.mockResolvedValue({\n transactionType: SolanaTransactionTypes.SPL,\n });\n\n const ctx: SolanaBuildContextResult = {\n tlvDescriptor: new Uint8Array([1]),\n trustedNamePKICertificate: {\n keyUsageNumber: 0,\n payload: new Uint8Array([0x01]),\n },\n loadersResults: [],\n };\n buildContextMock.mockResolvedValue(ctx);\n provideContextMock.mockResolvedValue(Nothing);\n\n const signature = new Uint8Array([0xaa, 0xbb]);\n signMock.mockResolvedValue(\n CommandResultFactory({ data: Just(signature) }),\n );\n\n const input: SignTransactionDAInput = {\n derivationPath: defaultDerivation,\n transaction: exampleTx,\n transactionOptions: { skipOpenApp: true },\n contextModule: contextModuleStub,\n };\n\n const action = new SignTransactionDeviceAction({\n input,\n loggerFactory: mockLoggerFactory,\n });\n vi.spyOn(action, \"extractDependencies\").mockReturnValue(extractDeps());\n\n const expected = [\n // getAppConfig\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.GET_APP_CONFIG,\n },\n status: DeviceActionStatus.Pending,\n },\n // inspectTransaction\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.INSPECT_TRANSACTION,\n },\n status: DeviceActionStatus.Pending,\n },\n // buildContext\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.BUILD_TRANSACTION_CONTEXT,\n },\n status: DeviceActionStatus.Pending,\n },\n // provideContext\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.PROVIDE_TRANSACTION_CONTEXT,\n },\n status: DeviceActionStatus.Pending,\n },\n // signTransaction\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n step: signTransactionDAStateSteps.SIGN_TRANSACTION,\n },\n status: DeviceActionStatus.Pending,\n },\n // success\n { output: signature, status: DeviceActionStatus.Completed },\n ] as DeviceActionState<\n Uint8Array,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >[];\n\n testDeviceActionStates<\n Uint8Array,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >(action, expected, apiMock, { onDone: resolve, onError: reject });\n }));\n\n it(\"inspectTransaction rejects, still signs (fallback)\", () =>\n new Promise<void>((resolve, reject) => {\n apiMock.getDeviceSessionState.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Solana\", version: \"1.4.1\" },\n deviceModelId: DeviceModelId.NANO_X,\n isSecureConnectionAllowed: true,\n });\n\n getAppConfigMock.mockResolvedValue(CommandResultFactory({ data: {} }));\n\n // InspectTransaction fails, machine transitions to SignTransaction\n inspectTransactionMock.mockRejectedValue(\n new InvalidStatusWordError(\"inspErr\"),\n );\n\n const sig = new Uint8Array([0x11, 0x22]);\n signMock.mockResolvedValue(CommandResultFactory({ data: Just(sig) }));\n\n const action = new SignTransactionDeviceAction({\n input: {\n derivationPath: defaultDerivation,\n transaction: exampleTx,\n transactionOptions: { skipOpenApp: true },\n contextModule: contextModuleStub,\n },\n loggerFactory: mockLoggerFactory,\n });\n vi.spyOn(action, \"extractDependencies\").mockReturnValue(extractDeps());\n\n const expected = [\n // getAppConfig\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.GET_APP_CONFIG,\n },\n status: DeviceActionStatus.Pending,\n },\n // inspectTransaction\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.INSPECT_TRANSACTION,\n },\n status: DeviceActionStatus.Pending,\n },\n // signTransaction (fallback)\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n step: signTransactionDAStateSteps.SIGN_TRANSACTION,\n },\n status: DeviceActionStatus.Pending,\n },\n // success\n { output: sig, status: DeviceActionStatus.Completed },\n ] as DeviceActionState<\n Uint8Array,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >[];\n\n testDeviceActionStates(action, expected, apiMock, {\n onDone: () => {\n // we should not try to build/provide context if inspection failed\n expect(buildContextMock).not.toHaveBeenCalled();\n expect(provideContextMock).not.toHaveBeenCalled();\n resolve();\n },\n onError: reject,\n });\n }));\n\n it(\"buildContext throws, still signs (fallback)\", () =>\n new Promise<void>((resolve, reject) => {\n apiMock.getDeviceSessionState.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Solana\", version: \"1.4.1\" },\n deviceModelId: DeviceModelId.NANO_X,\n isSecureConnectionAllowed: true,\n });\n\n getAppConfigMock.mockResolvedValue(CommandResultFactory({ data: {} }));\n inspectTransactionMock.mockResolvedValue({\n transactionType: SolanaTransactionTypes.SPL,\n });\n\n // BuildContext fails, machine transitions to SignTransaction\n buildContextMock.mockRejectedValue(new InvalidStatusWordError(\"bldErr\"));\n\n const sig = new Uint8Array([0xca, 0xfe]);\n signMock.mockResolvedValue(CommandResultFactory({ data: Just(sig) }));\n\n const action = new SignTransactionDeviceAction({\n input: {\n derivationPath: defaultDerivation,\n transaction: exampleTx,\n transactionOptions: { skipOpenApp: true },\n contextModule: contextModuleStub,\n },\n loggerFactory: mockLoggerFactory,\n });\n vi.spyOn(action, \"extractDependencies\").mockReturnValue(extractDeps());\n\n const expected = [\n // getAppConfig\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.GET_APP_CONFIG,\n },\n status: DeviceActionStatus.Pending,\n },\n // inspectTransaction\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.INSPECT_TRANSACTION,\n },\n status: DeviceActionStatus.Pending,\n },\n // buildContext (fails, but we still saw the pending step)\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.BUILD_TRANSACTION_CONTEXT,\n },\n status: DeviceActionStatus.Pending,\n },\n // signTransaction (fallback)\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n step: signTransactionDAStateSteps.SIGN_TRANSACTION,\n },\n status: DeviceActionStatus.Pending,\n },\n // success\n { output: sig, status: DeviceActionStatus.Completed },\n ] as DeviceActionState<\n Uint8Array,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >[];\n\n testDeviceActionStates<\n Uint8Array,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >(action, expected, apiMock, { onDone: resolve, onError: reject });\n }));\n\n it(\"provideContext rejects, still signs (fallback)\", () =>\n new Promise<void>((resolve, reject) => {\n apiMock.getDeviceSessionState.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Solana\", version: \"1.4.1\" },\n deviceModelId: DeviceModelId.NANO_X,\n isSecureConnectionAllowed: true,\n });\n\n getAppConfigMock.mockResolvedValue(CommandResultFactory({ data: {} }));\n inspectTransactionMock.mockResolvedValue({\n transactionType: SolanaTransactionTypes.SPL,\n });\n\n const ctx: SolanaBuildContextResult = {\n tlvDescriptor: new Uint8Array([0x01]),\n trustedNamePKICertificate: {\n keyUsageNumber: 0,\n payload: new Uint8Array([0x02]),\n },\n loadersResults: [],\n };\n buildContextMock.mockResolvedValue(ctx);\n\n // ProvideContext rejects, machine transitions to SignTransaction\n provideContextMock.mockRejectedValue(\n new InvalidStatusWordError(\"provErr\"),\n );\n\n const sig = new Uint8Array([0x33]);\n signMock.mockResolvedValue(CommandResultFactory({ data: Just(sig) }));\n\n const action = new SignTransactionDeviceAction({\n input: {\n derivationPath: defaultDerivation,\n transaction: exampleTx,\n transactionOptions: { skipOpenApp: true },\n contextModule: contextModuleStub,\n },\n loggerFactory: mockLoggerFactory,\n });\n vi.spyOn(action, \"extractDependencies\").mockReturnValue(extractDeps());\n\n const expected = [\n // getAppConfig\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.GET_APP_CONFIG,\n },\n status: DeviceActionStatus.Pending,\n },\n // inspectTransaction\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.INSPECT_TRANSACTION,\n },\n status: DeviceActionStatus.Pending,\n },\n // buildContext\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.BUILD_TRANSACTION_CONTEXT,\n },\n status: DeviceActionStatus.Pending,\n },\n // provideContext\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.PROVIDE_TRANSACTION_CONTEXT,\n },\n status: DeviceActionStatus.Pending,\n },\n // signTransaction (fallback)\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n step: signTransactionDAStateSteps.SIGN_TRANSACTION,\n },\n status: DeviceActionStatus.Pending,\n },\n // success\n { output: sig, status: DeviceActionStatus.Completed },\n ] as DeviceActionState<\n Uint8Array,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >[];\n\n testDeviceActionStates(action, expected, apiMock, {\n onDone: () => {\n expect(buildContextMock).toHaveBeenCalledTimes(1);\n expect(provideContextMock).toHaveBeenCalledTimes(1);\n expect(signMock).toHaveBeenCalledTimes(1);\n resolve();\n },\n onError: reject,\n });\n }));\n\n it(\"failure in provideContext still signs\", () =>\n new Promise<void>((resolve, reject) => {\n apiMock.getDeviceSessionState.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Solana\", version: \"1.4.1\" },\n deviceModelId: DeviceModelId.NANO_X,\n isSecureConnectionAllowed: true,\n });\n\n getAppConfigMock.mockResolvedValue(CommandResultFactory({ data: {} }));\n inspectTransactionMock.mockResolvedValue({\n transactionType: SolanaTransactionTypes.SPL,\n });\n\n buildContextMock.mockResolvedValue({\n tlvDescriptor: new Uint8Array([2]),\n trustedNamePKICertificate: {\n keyUsageNumber: 0,\n payload: new Uint8Array(),\n },\n loadersResults: [],\n });\n provideContextMock.mockResolvedValue(\n Just(\n CommandResultFactory({ error: new InvalidStatusWordError(\"ctxErr\") }),\n ),\n );\n const sig = new Uint8Array([0xfe]);\n signMock.mockResolvedValue(CommandResultFactory({ data: Just(sig) }));\n\n const input: SignTransactionDAInput = {\n derivationPath: defaultDerivation,\n transaction: exampleTx,\n transactionOptions: { skipOpenApp: true },\n contextModule: contextModuleStub,\n };\n\n const action = new SignTransactionDeviceAction({\n input,\n loggerFactory: mockLoggerFactory,\n });\n vi.spyOn(action, \"extractDependencies\").mockReturnValue(extractDeps());\n\n const expected = [\n // getAppConfig\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.GET_APP_CONFIG,\n },\n status: DeviceActionStatus.Pending,\n },\n // inspectTransaction\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.INSPECT_TRANSACTION,\n },\n status: DeviceActionStatus.Pending,\n },\n // buildContext\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.BUILD_TRANSACTION_CONTEXT,\n },\n status: DeviceActionStatus.Pending,\n },\n // provideContext (returns error but continues)\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.PROVIDE_TRANSACTION_CONTEXT,\n },\n status: DeviceActionStatus.Pending,\n },\n // signTransaction\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n step: signTransactionDAStateSteps.SIGN_TRANSACTION,\n },\n status: DeviceActionStatus.Pending,\n },\n // success\n { output: sig, status: DeviceActionStatus.Completed },\n ] as DeviceActionState<\n Uint8Array,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >[];\n\n testDeviceActionStates<\n Uint8Array,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >(action, expected, apiMock, { onDone: resolve, onError: reject });\n }));\n\n it(\"buildContext throws \u2192 error\", () =>\n new Promise<void>((resolve, reject) => {\n apiMock.getDeviceSessionState.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Solana\", version: \"1.4.1\" },\n deviceModelId: DeviceModelId.NANO_X,\n isSecureConnectionAllowed: true,\n });\n\n getAppConfigMock.mockResolvedValue(CommandResultFactory({ data: {} }));\n inspectTransactionMock.mockResolvedValue({\n transactionType: SolanaTransactionTypes.SPL,\n });\n\n buildContextMock.mockRejectedValue(new InvalidStatusWordError(\"bldErr\"));\n\n const sig = new Uint8Array([0xab, 0xcd]);\n signMock.mockResolvedValue(CommandResultFactory({ data: Just(sig) }));\n\n const input: SignTransactionDAInput = {\n derivationPath: defaultDerivation,\n transaction: exampleTx,\n transactionOptions: { skipOpenApp: true },\n contextModule: contextModuleStub,\n };\n\n const action = new SignTransactionDeviceAction({\n input,\n loggerFactory: mockLoggerFactory,\n });\n vi.spyOn(action, \"extractDependencies\").mockReturnValue(extractDeps());\n\n const expected = [\n // getAppConfig\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.GET_APP_CONFIG,\n },\n status: DeviceActionStatus.Pending,\n },\n // inspectTransaction\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.INSPECT_TRANSACTION,\n },\n status: DeviceActionStatus.Pending,\n },\n // buildContext (throws)\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: signTransactionDAStateSteps.BUILD_TRANSACTION_CONTEXT,\n },\n status: DeviceActionStatus.Pending,\n },\n // signTransaction (fallback)\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n step: signTransactionDAStateSteps.SIGN_TRANSACTION,\n },\n status: DeviceActionStatus.Pending,\n },\n // success\n { output: sig, status: DeviceActionStatus.Completed },\n ] as DeviceActionState<\n Uint8Array,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >[];\n\n testDeviceActionStates<\n Uint8Array,\n SignTransactionDAInput,\n SignTransactionDAError,\n SignTransactionDAIntermediateValue\n >(action, expected, apiMock, { onDone: resolve, onError: reject });\n }));\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["CommandResultFactory", "DeviceActionStatus", "DeviceModelId", "DeviceSessionStateType", "DeviceStatus", "InvalidStatusWordError", "UserInteractionRequired", "Just", "Nothing", "beforeEach", "describe", "it", "vi", "signTransactionDAStateSteps", "testDeviceActionStates", "SolanaTransactionTypes", "makeDeviceActionInternalApiMock", "SignTransactionDeviceAction", "defaultDerivation", "exampleTx", "mockLoggerFactory", "contextModuleStub", "apiMock", "getAppConfigMock", "buildContextMock", "provideContextMock", "signMock", "inspectTransactionMock", "extractDeps", "resolve", "reject", "ctx", "signature", "input", "action", "expected", "sig"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{isSuccessCommandResult as s}from"@ledgerhq/device-management-kit";import{GetChallengeCommand as i}from"../../app-binder/command/GetChallengeCommand";class p{constructor(o,t){this.api=o;this.args=t}async run(){const{contextModule:o,options:t}=this.args,r=this.api.getDeviceSessionState();let a;const n=await this.api.sendCommand(new i);return s(n)&&(a=n.data.challenge),(await o.getSolanaContext({deviceModelId:r.deviceModelId,tokenAddress:t.tokenAddress,challenge:a,createATA:t.createATA,tokenInternalId:t.tokenInternalId,templateId:t.templateId})).caseOf({Left:e=>{throw e},Right:e=>({tlvDescriptor:e.tlvDescriptor,trustedNamePKICertificate:e.trustedNamePKICertificate,loadersResults:e.loadersResults})})}}export{p as BuildTransactionContextTask};
1
+ import{isSuccessCommandResult as l}from"@ledgerhq/device-management-kit";import{GetChallengeCommand as i}from"../../app-binder/command/GetChallengeCommand";class p{constructor(o,t){this.api=o;this.args=t;this._logger=t.loggerFactory("BuildTransactionContextTask")}_logger;async run(){this._logger.debug("[run] Starting BuildTransactionContextTask");const{contextModule:o,options:t}=this.args,s=this.api.getDeviceSessionState();let a;const n=await this.api.sendCommand(new i);if(l(n))a=n.data.challenge;else throw new Error("Failed to get challenge from device");const r={deviceModelId:s.deviceModelId,tokenAddress:t.tokenAddress,challenge:a,createATA:t.createATA,tokenInternalId:t.tokenInternalId,templateId:t.templateId};return this._logger.debug("[run] Calling contextModule.getSolanaContext",{data:{args:r}}),(await o.getSolanaContext(r)).caseOf({Left:e=>{throw this._logger.error("[run] Solana context result",{data:{error:{message:e.message,name:e.name,stack:e.stack}}}),e},Right:e=>(this._logger.debug("[run] Solana context result",{data:{result:e}}),e)})}}export{p as BuildTransactionContextTask};
2
2
  //# sourceMappingURL=BuildTransactionContextTask.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/task/BuildTransactionContextTask.ts"],
4
- "sourcesContent": ["import {\n type ContextModule,\n type PkiCertificate,\n type SolanaContextLoaderResults,\n} from \"@ledgerhq/context-module\";\nimport {\n type InternalApi,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type TransactionResolutionContext } from \"@api/model/TransactionResolutionContext\";\nimport { GetChallengeCommand } from \"@internal/app-binder/command/GetChallengeCommand\";\n\nexport type SolanaBuildContextResult = {\n trustedNamePKICertificate: PkiCertificate;\n tlvDescriptor: Uint8Array;\n loadersResults: SolanaContextLoaderResults;\n};\n\nexport type BuildTransactionContextTaskArgs = {\n readonly contextModule: ContextModule;\n readonly options: TransactionResolutionContext;\n};\n\nexport class BuildTransactionContextTask {\n constructor(\n private readonly api: InternalApi,\n private readonly args: BuildTransactionContextTaskArgs,\n ) {}\n\n async run(): Promise<SolanaBuildContextResult> {\n const { contextModule, options } = this.args;\n const deviceState = this.api.getDeviceSessionState();\n\n // get challenge\n let challenge: string | undefined;\n const challengeRes = await this.api.sendCommand(new GetChallengeCommand());\n if (isSuccessCommandResult(challengeRes)) {\n challenge = challengeRes.data.challenge;\n }\n\n // get Solana context\n const contextResult = await contextModule.getSolanaContext({\n deviceModelId: deviceState.deviceModelId,\n tokenAddress: options.tokenAddress,\n challenge,\n createATA: options.createATA,\n tokenInternalId: options.tokenInternalId,\n templateId: options.templateId,\n });\n\n return contextResult.caseOf({\n Left: (err) => {\n throw err;\n },\n Right: (ctx) => {\n return {\n tlvDescriptor: ctx.tlvDescriptor,\n trustedNamePKICertificate: ctx.trustedNamePKICertificate,\n loadersResults: ctx.loadersResults,\n };\n },\n });\n }\n}\n"],
5
- "mappings": "AAKA,OAEE,0BAAAA,MACK,kCAGP,OAAS,uBAAAC,MAA2B,mDAa7B,MAAMC,CAA4B,CACvC,YACmBC,EACAC,EACjB,CAFiB,SAAAD,EACA,UAAAC,CAChB,CAEH,MAAM,KAAyC,CAC7C,KAAM,CAAE,cAAAC,EAAe,QAAAC,CAAQ,EAAI,KAAK,KAClCC,EAAc,KAAK,IAAI,sBAAsB,EAGnD,IAAIC,EACJ,MAAMC,EAAe,MAAM,KAAK,IAAI,YAAY,IAAIR,CAAqB,EACzE,OAAID,EAAuBS,CAAY,IACrCD,EAAYC,EAAa,KAAK,YAIV,MAAMJ,EAAc,iBAAiB,CACzD,cAAeE,EAAY,cAC3B,aAAcD,EAAQ,aACtB,UAAAE,EACA,UAAWF,EAAQ,UACnB,gBAAiBA,EAAQ,gBACzB,WAAYA,EAAQ,UACtB,CAAC,GAEoB,OAAO,CAC1B,KAAOI,GAAQ,CACb,MAAMA,CACR,EACA,MAAQC,IACC,CACL,cAAeA,EAAI,cACnB,0BAA2BA,EAAI,0BAC/B,eAAgBA,EAAI,cACtB,EAEJ,CAAC,CACH,CACF",
6
- "names": ["isSuccessCommandResult", "GetChallengeCommand", "BuildTransactionContextTask", "api", "args", "contextModule", "options", "deviceState", "challenge", "challengeRes", "err", "ctx"]
4
+ "sourcesContent": ["import {\n type ContextModule,\n type PkiCertificate,\n type SolanaContextLoaderResults,\n} from \"@ledgerhq/context-module\";\nimport {\n type InternalApi,\n isSuccessCommandResult,\n type LoggerPublisherService,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type TransactionResolutionContext } from \"@api/model/TransactionResolutionContext\";\nimport { GetChallengeCommand } from \"@internal/app-binder/command/GetChallengeCommand\";\n\nexport type SolanaBuildContextResult = {\n trustedNamePKICertificate: PkiCertificate;\n tlvDescriptor: Uint8Array;\n loadersResults: SolanaContextLoaderResults;\n};\n\nexport type BuildTransactionContextTaskArgs = {\n readonly contextModule: ContextModule;\n readonly options: TransactionResolutionContext;\n readonly loggerFactory: (tag: string) => LoggerPublisherService;\n};\n\nexport class BuildTransactionContextTask {\n private readonly _logger: LoggerPublisherService;\n constructor(\n private readonly api: InternalApi,\n private readonly args: BuildTransactionContextTaskArgs,\n ) {\n this._logger = args.loggerFactory(\"BuildTransactionContextTask\");\n }\n\n async run(): Promise<SolanaBuildContextResult> {\n this._logger.debug(\"[run] Starting BuildTransactionContextTask\");\n const { contextModule, options } = this.args;\n const deviceState = this.api.getDeviceSessionState();\n\n // get challenge\n let challenge: string | undefined;\n const challengeRes = await this.api.sendCommand(new GetChallengeCommand());\n if (isSuccessCommandResult(challengeRes)) {\n challenge = challengeRes.data.challenge;\n } else {\n throw new Error(\"Failed to get challenge from device\");\n }\n\n const contextModuleGetSolanaContextArgs = {\n deviceModelId: deviceState.deviceModelId,\n tokenAddress: options.tokenAddress,\n challenge,\n createATA: options.createATA,\n tokenInternalId: options.tokenInternalId,\n templateId: options.templateId,\n };\n // get Solana context\n this._logger.debug(\"[run] Calling contextModule.getSolanaContext\", {\n data: {\n args: contextModuleGetSolanaContextArgs,\n },\n });\n const contextResult = await contextModule.getSolanaContext(\n contextModuleGetSolanaContextArgs,\n );\n\n return contextResult.caseOf({\n Left: (err) => {\n this._logger.error(\"[run] Solana context result\", {\n data: {\n error: {\n message: err.message,\n name: err.name,\n stack: err.stack,\n },\n },\n });\n throw err;\n },\n Right: (ctx) => {\n this._logger.debug(\"[run] Solana context result\", {\n data: {\n result: ctx,\n },\n });\n return ctx;\n },\n });\n }\n}\n"],
5
+ "mappings": "AAKA,OAEE,0BAAAA,MAEK,kCAGP,OAAS,uBAAAC,MAA2B,mDAc7B,MAAMC,CAA4B,CAEvC,YACmBC,EACAC,EACjB,CAFiB,SAAAD,EACA,UAAAC,EAEjB,KAAK,QAAUA,EAAK,cAAc,6BAA6B,CACjE,CANiB,QAQjB,MAAM,KAAyC,CAC7C,KAAK,QAAQ,MAAM,4CAA4C,EAC/D,KAAM,CAAE,cAAAC,EAAe,QAAAC,CAAQ,EAAI,KAAK,KAClCC,EAAc,KAAK,IAAI,sBAAsB,EAGnD,IAAIC,EACJ,MAAMC,EAAe,MAAM,KAAK,IAAI,YAAY,IAAIR,CAAqB,EACzE,GAAID,EAAuBS,CAAY,EACrCD,EAAYC,EAAa,KAAK,cAE9B,OAAM,IAAI,MAAM,qCAAqC,EAGvD,MAAMC,EAAoC,CACxC,cAAeH,EAAY,cAC3B,aAAcD,EAAQ,aACtB,UAAAE,EACA,UAAWF,EAAQ,UACnB,gBAAiBA,EAAQ,gBACzB,WAAYA,EAAQ,UACtB,EAEA,YAAK,QAAQ,MAAM,+CAAgD,CACjE,KAAM,CACJ,KAAMI,CACR,CACF,CAAC,GACqB,MAAML,EAAc,iBACxCK,CACF,GAEqB,OAAO,CAC1B,KAAOC,GAAQ,CACb,WAAK,QAAQ,MAAM,8BAA+B,CAChD,KAAM,CACJ,MAAO,CACL,QAASA,EAAI,QACb,KAAMA,EAAI,KACV,MAAOA,EAAI,KACb,CACF,CACF,CAAC,EACKA,CACR,EACA,MAAQC,IACN,KAAK,QAAQ,MAAM,8BAA+B,CAChD,KAAM,CACJ,OAAQA,CACV,CACF,CAAC,EACMA,EAEX,CAAC,CACH,CACF",
6
+ "names": ["isSuccessCommandResult", "GetChallengeCommand", "BuildTransactionContextTask", "api", "args", "contextModule", "options", "deviceState", "challenge", "challengeRes", "contextModuleGetSolanaContextArgs", "err", "ctx"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{CommandResultStatus as u,DeviceModelId as r}from"@ledgerhq/device-management-kit";import{Left as C,Right as m}from"purify-ts";import{beforeEach as f,describe as x,expect as e,it as d,vi as s}from"vitest";import{GetChallengeCommand as k}from"../../app-binder/command/GetChallengeCommand";import{BuildTransactionContextTask as c}from"./BuildTransactionContextTask";const n={getSolanaContext:s.fn()},i={contextModule:n,options:{tokenAddress:"someAddress",createATA:void 0}},t={tlvDescriptor:new Uint8Array([1,2,3]),trustedNamePKICertificate:{payload:new Uint8Array([170,187]),keyUsageNumber:1},loadersResults:[]};let a;x("BuildTransactionContextTask",()=>{f(()=>{s.resetAllMocks(),a={getDeviceSessionState:s.fn().mockReturnValue({deviceModelId:r.NANO_X}),sendCommand:s.fn().mockResolvedValue({status:u.Success,data:{challenge:"someChallenge"}})}}),d("returns context successfully when challenge command succeeds",async()=>{n.getSolanaContext.mockResolvedValue(m(t));const o=await new c(a,i).run();e(a.sendCommand).toHaveBeenCalledWith(e.any(k)),e(n.getSolanaContext).toHaveBeenCalledWith({deviceModelId:r.NANO_X,tokenAddress:"someAddress",challenge:"someChallenge",createATA:void 0}),e(o).toEqual({tlvDescriptor:t.tlvDescriptor,trustedNamePKICertificate:t.trustedNamePKICertificate,loadersResults:[]})}),d("returns context when challenge command fails (challenge undefined)",async()=>{a.sendCommand.mockResolvedValue({status:u.Error,data:{}}),n.getSolanaContext.mockResolvedValue(m(t));const o=await new c(a,i).run();e(n.getSolanaContext).toHaveBeenCalledWith({deviceModelId:r.NANO_X,tokenAddress:"someAddress",challenge:void 0,createATA:void 0}),e(o).toEqual({tlvDescriptor:t.tlvDescriptor,trustedNamePKICertificate:t.trustedNamePKICertificate,loadersResults:[]})}),d("throws if getSolanaContext returns Left",async()=>{const l=new Error("Solana context failure");n.getSolanaContext.mockResolvedValue(C(l));const o=new c(a,i);await e(o.run()).rejects.toThrow("Solana context failure")})});
1
+ import{CommandResultStatus as i,DeviceModelId as u}from"@ledgerhq/device-management-kit";import{Left as f,Right as m}from"purify-ts";import{beforeEach as C,describe as g,expect as t,it as l,vi as e}from"vitest";import{GetChallengeCommand as x}from"../../app-binder/command/GetChallengeCommand";import{BuildTransactionContextTask as c}from"./BuildTransactionContextTask";const k=()=>({debug:e.fn(),info:e.fn(),warn:e.fn(),error:e.fn(),subscribers:[]}),a={getSolanaContext:e.fn()},d={contextModule:a,loggerFactory:k,options:{tokenAddress:"someAddress",createATA:void 0}},s={tlvDescriptor:new Uint8Array([1,2,3]),trustedNamePKICertificate:{payload:new Uint8Array([170,187]),keyUsageNumber:1},loadersResults:[]};let o;g("BuildTransactionContextTask",()=>{C(()=>{e.resetAllMocks(),o={getDeviceSessionState:e.fn().mockReturnValue({deviceModelId:u.NANO_X}),sendCommand:e.fn().mockResolvedValue({status:i.Success,data:{challenge:"someChallenge"}})}}),l("returns context successfully when challenge command succeeds",async()=>{a.getSolanaContext.mockResolvedValue(m(s));const r=await new c(o,d).run();t(o.sendCommand).toHaveBeenCalledWith(t.any(x)),t(a.getSolanaContext).toHaveBeenCalledWith({deviceModelId:u.NANO_X,tokenAddress:"someAddress",challenge:"someChallenge",createATA:void 0}),t(r).toEqual({tlvDescriptor:s.tlvDescriptor,trustedNamePKICertificate:s.trustedNamePKICertificate,loadersResults:[]})}),l("throws if challenge command fails",async()=>{o.sendCommand.mockResolvedValue({status:i.Error,data:{}}),a.getSolanaContext.mockResolvedValue(m(s));const n=new c(o,d);await t(n.run()).rejects.toThrow("Failed to get challenge from device")}),l("throws if getSolanaContext returns Left",async()=>{const n=new Error("Solana context failure");a.getSolanaContext.mockResolvedValue(f(n));const r=new c(o,d);await t(r.run()).rejects.toThrow("Solana context failure")})});
2
2
  //# sourceMappingURL=BuildTransactionContextTask.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/task/BuildTransactionContextTask.test.ts"],
4
- "sourcesContent": ["/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n CommandResultStatus,\n DeviceModelId,\n type InternalApi,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { GetChallengeCommand } from \"@internal/app-binder/command/GetChallengeCommand\";\n\nimport {\n BuildTransactionContextTask,\n type SolanaBuildContextResult,\n} from \"./BuildTransactionContextTask\";\n\nconst contextModuleMock: ContextModule = {\n getSolanaContext: vi.fn(),\n} as unknown as ContextModule;\n\nconst defaultArgs = {\n contextModule: contextModuleMock,\n options: {\n tokenAddress: \"someAddress\",\n createATA: undefined,\n },\n};\n\nconst solanaContextRightPayload = {\n tlvDescriptor: new Uint8Array([1, 2, 3]),\n trustedNamePKICertificate: {\n payload: new Uint8Array([0xaa, 0xbb]),\n keyUsageNumber: 1,\n },\n loadersResults: [], // required by the task's return type\n} as const;\n\nlet apiMock: InternalApi;\n\ndescribe(\"BuildTransactionContextTask\", () => {\n beforeEach(() => {\n vi.resetAllMocks();\n\n apiMock = {\n getDeviceSessionState: vi\n .fn()\n .mockReturnValue({ deviceModelId: DeviceModelId.NANO_X }),\n sendCommand: vi.fn().mockResolvedValue({\n status: CommandResultStatus.Success,\n data: { challenge: \"someChallenge\" },\n }),\n } as unknown as InternalApi;\n });\n\n it(\"returns context successfully when challenge command succeeds\", async () => {\n (contextModuleMock.getSolanaContext as any).mockResolvedValue(\n Right(solanaContextRightPayload),\n );\n\n const task = new BuildTransactionContextTask(apiMock, defaultArgs);\n const result = await task.run();\n\n // challenge is fetched\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n expect.any(GetChallengeCommand),\n );\n\n // getSolanaContext called with challenge\n expect(contextModuleMock.getSolanaContext).toHaveBeenCalledWith({\n deviceModelId: DeviceModelId.NANO_X,\n tokenAddress: \"someAddress\",\n challenge: \"someChallenge\",\n createATA: undefined,\n });\n\n // matches SolanaBuildContextResult shape\n expect(result).toEqual<SolanaBuildContextResult>({\n tlvDescriptor: solanaContextRightPayload.tlvDescriptor,\n trustedNamePKICertificate:\n solanaContextRightPayload.trustedNamePKICertificate,\n loadersResults: [],\n });\n });\n\n it(\"returns context when challenge command fails (challenge undefined)\", async () => {\n (apiMock.sendCommand as any).mockResolvedValue({\n status: CommandResultStatus.Error,\n data: {},\n });\n (contextModuleMock.getSolanaContext as any).mockResolvedValue(\n Right(solanaContextRightPayload),\n );\n\n const task = new BuildTransactionContextTask(apiMock, defaultArgs);\n const result = await task.run();\n\n // getSolanaContext called without challenge\n expect(contextModuleMock.getSolanaContext).toHaveBeenCalledWith({\n deviceModelId: DeviceModelId.NANO_X,\n tokenAddress: \"someAddress\",\n challenge: undefined,\n createATA: undefined,\n });\n\n expect(result).toEqual<SolanaBuildContextResult>({\n tlvDescriptor: solanaContextRightPayload.tlvDescriptor,\n trustedNamePKICertificate:\n solanaContextRightPayload.trustedNamePKICertificate,\n loadersResults: [],\n });\n });\n\n it(\"throws if getSolanaContext returns Left\", async () => {\n const error = new Error(\"Solana context failure\");\n (contextModuleMock.getSolanaContext as any).mockResolvedValue(Left(error));\n\n const task = new BuildTransactionContextTask(apiMock, defaultArgs);\n\n await expect(task.run()).rejects.toThrow(\"Solana context failure\");\n });\n});\n"],
5
- "mappings": "AAIA,OACE,uBAAAA,EACA,iBAAAC,MAEK,kCACP,OAAS,QAAAC,EAAM,SAAAC,MAAa,YAC5B,OAAS,cAAAC,EAAY,YAAAC,EAAU,UAAAC,EAAQ,MAAAC,EAAI,MAAAC,MAAU,SAErD,OAAS,uBAAAC,MAA2B,mDAEpC,OACE,+BAAAC,MAEK,gCAEP,MAAMC,EAAmC,CACvC,iBAAkBH,EAAG,GAAG,CAC1B,EAEMI,EAAc,CAClB,cAAeD,EACf,QAAS,CACP,aAAc,cACd,UAAW,MACb,CACF,EAEME,EAA4B,CAChC,cAAe,IAAI,WAAW,CAAC,EAAG,EAAG,CAAC,CAAC,EACvC,0BAA2B,CACzB,QAAS,IAAI,WAAW,CAAC,IAAM,GAAI,CAAC,EACpC,eAAgB,CAClB,EACA,eAAgB,CAAC,CACnB,EAEA,IAAIC,EAEJT,EAAS,8BAA+B,IAAM,CAC5CD,EAAW,IAAM,CACfI,EAAG,cAAc,EAEjBM,EAAU,CACR,sBAAuBN,EACpB,GAAG,EACH,gBAAgB,CAAE,cAAeP,EAAc,MAAO,CAAC,EAC1D,YAAaO,EAAG,GAAG,EAAE,kBAAkB,CACrC,OAAQR,EAAoB,QAC5B,KAAM,CAAE,UAAW,eAAgB,CACrC,CAAC,CACH,CACF,CAAC,EAEDO,EAAG,+DAAgE,SAAY,CAC5EI,EAAkB,iBAAyB,kBAC1CR,EAAMU,CAAyB,CACjC,EAGA,MAAME,EAAS,MADF,IAAIL,EAA4BI,EAASF,CAAW,EACvC,IAAI,EAG9BN,EAAOQ,EAAQ,WAAW,EAAE,qBAC1BR,EAAO,IAAIG,CAAmB,CAChC,EAGAH,EAAOK,EAAkB,gBAAgB,EAAE,qBAAqB,CAC9D,cAAeV,EAAc,OAC7B,aAAc,cACd,UAAW,gBACX,UAAW,MACb,CAAC,EAGDK,EAAOS,CAAM,EAAE,QAAkC,CAC/C,cAAeF,EAA0B,cACzC,0BACEA,EAA0B,0BAC5B,eAAgB,CAAC,CACnB,CAAC,CACH,CAAC,EAEDN,EAAG,qEAAsE,SAAY,CAClFO,EAAQ,YAAoB,kBAAkB,CAC7C,OAAQd,EAAoB,MAC5B,KAAM,CAAC,CACT,CAAC,EACAW,EAAkB,iBAAyB,kBAC1CR,EAAMU,CAAyB,CACjC,EAGA,MAAME,EAAS,MADF,IAAIL,EAA4BI,EAASF,CAAW,EACvC,IAAI,EAG9BN,EAAOK,EAAkB,gBAAgB,EAAE,qBAAqB,CAC9D,cAAeV,EAAc,OAC7B,aAAc,cACd,UAAW,OACX,UAAW,MACb,CAAC,EAEDK,EAAOS,CAAM,EAAE,QAAkC,CAC/C,cAAeF,EAA0B,cACzC,0BACEA,EAA0B,0BAC5B,eAAgB,CAAC,CACnB,CAAC,CACH,CAAC,EAEDN,EAAG,0CAA2C,SAAY,CACxD,MAAMS,EAAQ,IAAI,MAAM,wBAAwB,EAC/CL,EAAkB,iBAAyB,kBAAkBT,EAAKc,CAAK,CAAC,EAEzE,MAAMC,EAAO,IAAIP,EAA4BI,EAASF,CAAW,EAEjE,MAAMN,EAAOW,EAAK,IAAI,CAAC,EAAE,QAAQ,QAAQ,wBAAwB,CACnE,CAAC,CACH,CAAC",
6
- "names": ["CommandResultStatus", "DeviceModelId", "Left", "Right", "beforeEach", "describe", "expect", "it", "vi", "GetChallengeCommand", "BuildTransactionContextTask", "contextModuleMock", "defaultArgs", "solanaContextRightPayload", "apiMock", "result", "error", "task"]
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n CommandResultStatus,\n DeviceModelId,\n type InternalApi,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { GetChallengeCommand } from \"@internal/app-binder/command/GetChallengeCommand\";\n\nimport {\n BuildTransactionContextTask,\n type SolanaBuildContextResult,\n} from \"./BuildTransactionContextTask\";\n\nconst mockLoggerFactory = () => ({\n debug: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n subscribers: [],\n});\n\nconst contextModuleMock: ContextModule = {\n getSolanaContext: vi.fn(),\n} as unknown as ContextModule;\n\nconst defaultArgs = {\n contextModule: contextModuleMock,\n loggerFactory: mockLoggerFactory,\n options: {\n tokenAddress: \"someAddress\",\n createATA: undefined,\n },\n};\n\nconst solanaContextRightPayload = {\n tlvDescriptor: new Uint8Array([1, 2, 3]),\n trustedNamePKICertificate: {\n payload: new Uint8Array([0xaa, 0xbb]),\n keyUsageNumber: 1,\n },\n loadersResults: [], // required by the task's return type\n} as const;\n\nlet apiMock: InternalApi;\n\ndescribe(\"BuildTransactionContextTask\", () => {\n beforeEach(() => {\n vi.resetAllMocks();\n\n apiMock = {\n getDeviceSessionState: vi\n .fn()\n .mockReturnValue({ deviceModelId: DeviceModelId.NANO_X }),\n sendCommand: vi.fn().mockResolvedValue({\n status: CommandResultStatus.Success,\n data: { challenge: \"someChallenge\" },\n }),\n } as unknown as InternalApi;\n });\n\n it(\"returns context successfully when challenge command succeeds\", async () => {\n (contextModuleMock.getSolanaContext as any).mockResolvedValue(\n Right(solanaContextRightPayload),\n );\n\n const task = new BuildTransactionContextTask(apiMock, defaultArgs);\n const result = await task.run();\n\n // challenge is fetched\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n expect.any(GetChallengeCommand),\n );\n\n // getSolanaContext called with challenge\n expect(contextModuleMock.getSolanaContext).toHaveBeenCalledWith({\n deviceModelId: DeviceModelId.NANO_X,\n tokenAddress: \"someAddress\",\n challenge: \"someChallenge\",\n createATA: undefined,\n });\n\n // matches SolanaBuildContextResult shape\n expect(result).toEqual<SolanaBuildContextResult>({\n tlvDescriptor: solanaContextRightPayload.tlvDescriptor,\n trustedNamePKICertificate:\n solanaContextRightPayload.trustedNamePKICertificate,\n loadersResults: [],\n });\n });\n\n it(\"throws if challenge command fails\", async () => {\n (apiMock.sendCommand as any).mockResolvedValue({\n status: CommandResultStatus.Error,\n data: {},\n });\n (contextModuleMock.getSolanaContext as any).mockResolvedValue(\n Right(solanaContextRightPayload),\n );\n\n const task = new BuildTransactionContextTask(apiMock, defaultArgs);\n\n await expect(task.run()).rejects.toThrow(\n \"Failed to get challenge from device\",\n );\n });\n\n it(\"throws if getSolanaContext returns Left\", async () => {\n const error = new Error(\"Solana context failure\");\n (contextModuleMock.getSolanaContext as any).mockResolvedValue(Left(error));\n\n const task = new BuildTransactionContextTask(apiMock, defaultArgs);\n\n await expect(task.run()).rejects.toThrow(\"Solana context failure\");\n });\n});\n"],
5
+ "mappings": "AAIA,OACE,uBAAAA,EACA,iBAAAC,MAEK,kCACP,OAAS,QAAAC,EAAM,SAAAC,MAAa,YAC5B,OAAS,cAAAC,EAAY,YAAAC,EAAU,UAAAC,EAAQ,MAAAC,EAAI,MAAAC,MAAU,SAErD,OAAS,uBAAAC,MAA2B,mDAEpC,OACE,+BAAAC,MAEK,gCAEP,MAAMC,EAAoB,KAAO,CAC/B,MAAOH,EAAG,GAAG,EACb,KAAMA,EAAG,GAAG,EACZ,KAAMA,EAAG,GAAG,EACZ,MAAOA,EAAG,GAAG,EACb,YAAa,CAAC,CAChB,GAEMI,EAAmC,CACvC,iBAAkBJ,EAAG,GAAG,CAC1B,EAEMK,EAAc,CAClB,cAAeD,EACf,cAAeD,EACf,QAAS,CACP,aAAc,cACd,UAAW,MACb,CACF,EAEMG,EAA4B,CAChC,cAAe,IAAI,WAAW,CAAC,EAAG,EAAG,CAAC,CAAC,EACvC,0BAA2B,CACzB,QAAS,IAAI,WAAW,CAAC,IAAM,GAAI,CAAC,EACpC,eAAgB,CAClB,EACA,eAAgB,CAAC,CACnB,EAEA,IAAIC,EAEJV,EAAS,8BAA+B,IAAM,CAC5CD,EAAW,IAAM,CACfI,EAAG,cAAc,EAEjBO,EAAU,CACR,sBAAuBP,EACpB,GAAG,EACH,gBAAgB,CAAE,cAAeP,EAAc,MAAO,CAAC,EAC1D,YAAaO,EAAG,GAAG,EAAE,kBAAkB,CACrC,OAAQR,EAAoB,QAC5B,KAAM,CAAE,UAAW,eAAgB,CACrC,CAAC,CACH,CACF,CAAC,EAEDO,EAAG,+DAAgE,SAAY,CAC5EK,EAAkB,iBAAyB,kBAC1CT,EAAMW,CAAyB,CACjC,EAGA,MAAME,EAAS,MADF,IAAIN,EAA4BK,EAASF,CAAW,EACvC,IAAI,EAG9BP,EAAOS,EAAQ,WAAW,EAAE,qBAC1BT,EAAO,IAAIG,CAAmB,CAChC,EAGAH,EAAOM,EAAkB,gBAAgB,EAAE,qBAAqB,CAC9D,cAAeX,EAAc,OAC7B,aAAc,cACd,UAAW,gBACX,UAAW,MACb,CAAC,EAGDK,EAAOU,CAAM,EAAE,QAAkC,CAC/C,cAAeF,EAA0B,cACzC,0BACEA,EAA0B,0BAC5B,eAAgB,CAAC,CACnB,CAAC,CACH,CAAC,EAEDP,EAAG,oCAAqC,SAAY,CACjDQ,EAAQ,YAAoB,kBAAkB,CAC7C,OAAQf,EAAoB,MAC5B,KAAM,CAAC,CACT,CAAC,EACAY,EAAkB,iBAAyB,kBAC1CT,EAAMW,CAAyB,CACjC,EAEA,MAAMG,EAAO,IAAIP,EAA4BK,EAASF,CAAW,EAEjE,MAAMP,EAAOW,EAAK,IAAI,CAAC,EAAE,QAAQ,QAC/B,qCACF,CACF,CAAC,EAEDV,EAAG,0CAA2C,SAAY,CACxD,MAAMW,EAAQ,IAAI,MAAM,wBAAwB,EAC/CN,EAAkB,iBAAyB,kBAAkBV,EAAKgB,CAAK,CAAC,EAEzE,MAAMD,EAAO,IAAIP,EAA4BK,EAASF,CAAW,EAEjE,MAAMP,EAAOW,EAAK,IAAI,CAAC,EAAE,QAAQ,QAAQ,wBAAwB,CACnE,CAAC,CACH,CAAC",
6
+ "names": ["CommandResultStatus", "DeviceModelId", "Left", "Right", "beforeEach", "describe", "expect", "it", "vi", "GetChallengeCommand", "BuildTransactionContextTask", "mockLoggerFactory", "contextModuleMock", "defaultArgs", "solanaContextRightPayload", "apiMock", "result", "task", "error"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{SolanaContextTypes as s}from"@ledgerhq/context-module";import{isSuccessCommandResult as u,LoadCertificateCommand as m}from"@ledgerhq/device-management-kit";import{Nothing as C}from"purify-ts";import{ProvideTLVTransactionInstructionDescriptorCommand as c}from"../../app-binder/command/ProvideTLVTransactionInstructionDescriptorCommand";import{ProvideTLVDescriptorCommand as f}from"../../app-binder/command/ProvideTLVDescriptorCommand";import{DefaultSolanaMessageNormaliser as y}from"../../app-binder/services/utils/DefaultSolanaMessageNormaliser";const S="test";class A{constructor(o,t,e=y){this.api=o;this.context=t;this.normaliser=e}async run(){const{tlvDescriptor:o,trustedNamePKICertificate:t,loadersResults:e,transactionBytes:r}=this.context;await this.api.sendCommand(new m({certificate:t.payload,keyUsage:t.keyUsageNumber})),await this.api.sendCommand(new f({payload:o}));for(const i of e)switch(i.type){case s.SOLANA_TOKEN:{const a=e.find(n=>n.type===s.SOLANA_TOKEN);a&&await this.provideTokenMetadataContext(a);break}case s.SOLANA_LIFI:{const a=e.find(n=>n.type===s.SOLANA_LIFI);a&&await this.provideSwapContext(a,r);break}case s.ERROR:break;default:break}return C}async provideTokenMetadataContext(o){const{payload:t,certificate:e}=o;if(t&&e){const r=await this.api.sendCommand(new m({certificate:e.payload,keyUsage:e.keyUsageNumber}));if(!u(r))throw new Error("[SignerSolana] ProvideSolanaTransactionContextTask: Failed to send tokenMetadataCertificate to device, latest firmware version required");await this.api.sendCommand(new c({kind:"descriptor",dataHex:t.solanaTokenDescriptor.data,signatureHex:t.solanaTokenDescriptor.signature,isFirstMessage:!0,swapSignatureTag:!1}))}}async provideSwapContext(o,t){const e=o.payload;if(e){const r=await this.normaliser.normaliseMessage(t);for(const[i,a]of r.compiledInstructions.entries()){const p=r.allKeys[a.programIdIndex]?.toBase58(),d=p?e[p]:void 0,l=d&&d.signatures[S];d&&l?await this.api.sendCommand(new c({kind:"descriptor",dataHex:d.data,signatureHex:l,isFirstMessage:i===0,swapSignatureTag:!0})):await this.api.sendCommand(new c({kind:"empty",isFirstMessage:i===0,swapSignatureTag:!0}))}}}}export{A as ProvideSolanaTransactionContextTask,S as SWAP_MODE};
1
+ import{SolanaContextTypes as o}from"@ledgerhq/context-module";import{isSuccessCommandResult as m,LoadCertificateCommand as g}from"@ledgerhq/device-management-kit";import{Nothing as u}from"purify-ts";import{ProvideTLVTransactionInstructionDescriptorCommand as l}from"../../app-binder/command/ProvideTLVTransactionInstructionDescriptorCommand";import{ProvideTLVDescriptorCommand as y}from"../../app-binder/command/ProvideTLVDescriptorCommand";import{DefaultSolanaMessageNormaliser as S}from"../../app-binder/services/utils/DefaultSolanaMessageNormaliser";const f="test";class A{constructor(i,e){this.api=i;this.args=e;this._logger=e.loggerFactory("ProvideSolanaTransactionContextTask"),this._normaliser=e.normaliser??S}_logger;_normaliser;async run(){this._logger.debug("[run] Starting ProvideSolanaTransactionContextTask");const{tlvDescriptor:i,trustedNamePKICertificate:e,loadersResults:a,transactionBytes:r}=this.args;await this.api.sendCommand(new g({certificate:e.payload,keyUsage:e.keyUsageNumber})),await this.api.sendCommand(new y({payload:i})),this._logger.debug("[run] Providing optional Solana context from loaders",{data:{loadersResults:a}});for(const s of a)switch(s.type){case o.SOLANA_TOKEN:{const t=a.find(n=>n.type===o.SOLANA_TOKEN);this._logger.debug(`[run] Providing ${o.SOLANA_TOKEN}`,{data:{args:{tokenMetadataResult:t}}}),t&&await this.provideTokenMetadataContext(t);break}case o.SOLANA_LIFI:{const t=a.find(n=>n.type===o.SOLANA_LIFI);this._logger.debug(`[run] Providing ${o.SOLANA_LIFI}`,{data:{args:{lifiDescriptorListResult:t,transactionBytes:r}}}),t&&await this.provideSwapContext(t,r);break}case o.ERROR:{this._logger.debug("[run] Loader result of type ERROR, skipping");break}default:{this._logger.debug("[run] Loader result of unknown type, skipping");break}}return u}async provideTokenMetadataContext(i){const{payload:e,certificate:a}=i;if(e&&a){const r=await this.api.sendCommand(new g({certificate:a.payload,keyUsage:a.keyUsageNumber}));if(!m(r))throw new Error("[SignerSolana] ProvideSolanaTransactionContextTask: Failed to send tokenMetadataCertificate to device, latest firmware version required");await this.api.sendCommand(new l({kind:"descriptor",dataHex:e.solanaTokenDescriptor.data,signatureHex:e.solanaTokenDescriptor.signature,isFirstMessage:!0,swapSignatureTag:!1}))}}async provideSwapContext(i,e){const a=i.payload;if(a){const r=await this._normaliser.normaliseMessage(e);for(const[s,t]of r.compiledInstructions.entries()){const p=r.allKeys[t.programIdIndex]?.toBase58(),d=p?a[p]:void 0,c=d&&d.signatures[f];d&&c?await this.api.sendCommand(new l({kind:"descriptor",dataHex:d.data,signatureHex:c,isFirstMessage:s===0,swapSignatureTag:!0})):await this.api.sendCommand(new l({kind:"empty",isFirstMessage:s===0,swapSignatureTag:!0}))}}}}export{A as ProvideSolanaTransactionContextTask,f as SWAP_MODE};
2
2
  //# sourceMappingURL=ProvideTransactionContextTask.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/task/ProvideTransactionContextTask.ts"],
4
- "sourcesContent": ["import {\n SolanaContextTypes,\n type SolanaLifiContextSuccess,\n type SolanaTokenContextSuccess,\n} from \"@ledgerhq/context-module\";\nimport {\n type CommandErrorResult,\n type InternalApi,\n isSuccessCommandResult,\n LoadCertificateCommand,\n} from \"@ledgerhq/device-management-kit\";\nimport { type Maybe, Nothing } from \"purify-ts\";\n\nimport { ProvideTLVTransactionInstructionDescriptorCommand } from \"@internal/app-binder//command/ProvideTLVTransactionInstructionDescriptorCommand\";\nimport { ProvideTLVDescriptorCommand } from \"@internal/app-binder/command/ProvideTLVDescriptorCommand\";\nimport { type SolanaAppErrorCodes } from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\nimport {\n DefaultSolanaMessageNormaliser,\n type SolanaMessageNormaliserConstructor,\n} from \"@internal/app-binder/services/utils/DefaultSolanaMessageNormaliser\";\n\nimport { type SolanaBuildContextResult } from \"./BuildTransactionContextTask\";\n\nexport const SWAP_MODE = \"test\";\n\nexport type ProvideSolanaTransactionContextTaskContext =\n SolanaBuildContextResult & {\n transactionBytes: Uint8Array;\n };\n\nexport class ProvideSolanaTransactionContextTask {\n constructor(\n private readonly api: InternalApi,\n private readonly context: ProvideSolanaTransactionContextTaskContext,\n private readonly normaliser: SolanaMessageNormaliserConstructor = DefaultSolanaMessageNormaliser,\n ) {}\n\n async run(): Promise<Maybe<CommandErrorResult<SolanaAppErrorCodes>>> {\n const {\n tlvDescriptor,\n trustedNamePKICertificate,\n loadersResults,\n transactionBytes,\n } = this.context;\n\n // --------------------------------------------------------------------\n // providing default solana context\n\n // send PKI certificate + signature\n await this.api.sendCommand(\n new LoadCertificateCommand({\n certificate: trustedNamePKICertificate.payload,\n keyUsage: trustedNamePKICertificate.keyUsageNumber,\n }),\n );\n\n // send signed descriptor\n await this.api.sendCommand(\n new ProvideTLVDescriptorCommand({ payload: tlvDescriptor }),\n );\n\n // --------------------------------------------------------------------\n // providing optional solana context via context module loaders results\n\n for (const loaderResult of loadersResults) {\n switch (loaderResult.type) {\n // always resolve SOLANA_TOKEN first\n case SolanaContextTypes.SOLANA_TOKEN: {\n const tokenMetadataResult = loadersResults.find(\n (res) => res.type === SolanaContextTypes.SOLANA_TOKEN,\n );\n if (tokenMetadataResult) {\n await this.provideTokenMetadataContext(tokenMetadataResult);\n }\n break;\n }\n\n case SolanaContextTypes.SOLANA_LIFI: {\n const lifiDescriptorListResult = loadersResults.find(\n (res) => res.type === SolanaContextTypes.SOLANA_LIFI,\n );\n if (lifiDescriptorListResult) {\n await this.provideSwapContext(\n lifiDescriptorListResult,\n transactionBytes,\n );\n }\n break;\n }\n\n case SolanaContextTypes.ERROR: {\n break;\n }\n\n default: {\n break;\n }\n }\n }\n\n return Nothing;\n }\n\n private async provideTokenMetadataContext(\n tokenMetadataResult: SolanaTokenContextSuccess,\n ): Promise<void> {\n const {\n payload: tokenMetadataPayload,\n certificate: tokenMetadataCertificate,\n } = tokenMetadataResult;\n\n if (tokenMetadataPayload && tokenMetadataCertificate) {\n // send token metadata certificate\n const tokenMetadataCertificateToDeviceResult = await this.api.sendCommand(\n new LoadCertificateCommand({\n certificate: tokenMetadataCertificate.payload,\n keyUsage: tokenMetadataCertificate.keyUsageNumber,\n }),\n );\n if (!isSuccessCommandResult(tokenMetadataCertificateToDeviceResult)) {\n // IMPORTANT, TO BE MAPPED TO LatestFirmwareVersionRequired(\"LatestFirmwareVersionRequired\") ERROR\n throw new Error(\n \"[SignerSolana] ProvideSolanaTransactionContextTask: Failed to send tokenMetadataCertificate to device, latest firmware version required\",\n );\n }\n\n // send token metadata signed descriptor\n await this.api.sendCommand(\n new ProvideTLVTransactionInstructionDescriptorCommand({\n kind: \"descriptor\",\n dataHex: tokenMetadataPayload.solanaTokenDescriptor.data,\n signatureHex: tokenMetadataPayload.solanaTokenDescriptor.signature,\n // token metadata is a single chunk, so this is always the first message\n isFirstMessage: true,\n swapSignatureTag: false,\n }),\n );\n }\n }\n\n private async provideSwapContext(\n lifiDescriptorListResult: SolanaLifiContextSuccess,\n transactionBytes: Uint8Array,\n ): Promise<void> {\n const lifiDescriptors = lifiDescriptorListResult.payload;\n\n if (lifiDescriptors) {\n const message = await this.normaliser.normaliseMessage(transactionBytes);\n\n for (const [\n index,\n instruction,\n ] of message.compiledInstructions.entries()) {\n const programId = message.allKeys[instruction.programIdIndex];\n const programIdStr = programId?.toBase58();\n const descriptor = programIdStr\n ? lifiDescriptors[programIdStr]\n : undefined;\n\n const sigHex = descriptor && descriptor.signatures[SWAP_MODE];\n\n if (descriptor && sigHex) {\n await this.api.sendCommand(\n new ProvideTLVTransactionInstructionDescriptorCommand({\n kind: \"descriptor\",\n dataHex: descriptor.data,\n signatureHex: sigHex,\n isFirstMessage: index === 0,\n swapSignatureTag: true,\n }),\n );\n } else {\n await this.api.sendCommand(\n new ProvideTLVTransactionInstructionDescriptorCommand({\n kind: \"empty\",\n isFirstMessage: index === 0,\n swapSignatureTag: true,\n }),\n );\n }\n }\n }\n }\n}\n"],
5
- "mappings": "AAAA,OACE,sBAAAA,MAGK,2BACP,OAGE,0BAAAC,EACA,0BAAAC,MACK,kCACP,OAAqB,WAAAC,MAAe,YAEpC,OAAS,qDAAAC,MAAyD,kFAClE,OAAS,+BAAAC,MAAmC,2DAE5C,OACE,kCAAAC,MAEK,qEAIA,MAAMC,EAAY,OAOlB,MAAMC,CAAoC,CAC/C,YACmBC,EACAC,EACAC,EAAiDL,EAClE,CAHiB,SAAAG,EACA,aAAAC,EACA,gBAAAC,CAChB,CAEH,MAAM,KAA+D,CACnE,KAAM,CACJ,cAAAC,EACA,0BAAAC,EACA,eAAAC,EACA,iBAAAC,CACF,EAAI,KAAK,QAMT,MAAM,KAAK,IAAI,YACb,IAAIb,EAAuB,CACzB,YAAaW,EAA0B,QACvC,SAAUA,EAA0B,cACtC,CAAC,CACH,EAGA,MAAM,KAAK,IAAI,YACb,IAAIR,EAA4B,CAAE,QAASO,CAAc,CAAC,CAC5D,EAKA,UAAWI,KAAgBF,EACzB,OAAQE,EAAa,KAAM,CAEzB,KAAKhB,EAAmB,aAAc,CACpC,MAAMiB,EAAsBH,EAAe,KACxCI,GAAQA,EAAI,OAASlB,EAAmB,YAC3C,EACIiB,GACF,MAAM,KAAK,4BAA4BA,CAAmB,EAE5D,KACF,CAEA,KAAKjB,EAAmB,YAAa,CACnC,MAAMmB,EAA2BL,EAAe,KAC7CI,GAAQA,EAAI,OAASlB,EAAmB,WAC3C,EACImB,GACF,MAAM,KAAK,mBACTA,EACAJ,CACF,EAEF,KACF,CAEA,KAAKf,EAAmB,MACtB,MAGF,QACE,KAEJ,CAGF,OAAOG,CACT,CAEA,MAAc,4BACZc,EACe,CACf,KAAM,CACJ,QAASG,EACT,YAAaC,CACf,EAAIJ,EAEJ,GAAIG,GAAwBC,EAA0B,CAEpD,MAAMC,EAAyC,MAAM,KAAK,IAAI,YAC5D,IAAIpB,EAAuB,CACzB,YAAamB,EAAyB,QACtC,SAAUA,EAAyB,cACrC,CAAC,CACH,EACA,GAAI,CAACpB,EAAuBqB,CAAsC,EAEhE,MAAM,IAAI,MACR,yIACF,EAIF,MAAM,KAAK,IAAI,YACb,IAAIlB,EAAkD,CACpD,KAAM,aACN,QAASgB,EAAqB,sBAAsB,KACpD,aAAcA,EAAqB,sBAAsB,UAEzD,eAAgB,GAChB,iBAAkB,EACpB,CAAC,CACH,CACF,CACF,CAEA,MAAc,mBACZD,EACAJ,EACe,CACf,MAAMQ,EAAkBJ,EAAyB,QAEjD,GAAII,EAAiB,CACnB,MAAMC,EAAU,MAAM,KAAK,WAAW,iBAAiBT,CAAgB,EAEvE,SAAW,CACTU,EACAC,CACF,IAAKF,EAAQ,qBAAqB,QAAQ,EAAG,CAE3C,MAAMG,EADYH,EAAQ,QAAQE,EAAY,cAAc,GAC5B,SAAS,EACnCE,EAAaD,EACfJ,EAAgBI,CAAY,EAC5B,OAEEE,EAASD,GAAcA,EAAW,WAAWrB,CAAS,EAExDqB,GAAcC,EAChB,MAAM,KAAK,IAAI,YACb,IAAIzB,EAAkD,CACpD,KAAM,aACN,QAASwB,EAAW,KACpB,aAAcC,EACd,eAAgBJ,IAAU,EAC1B,iBAAkB,EACpB,CAAC,CACH,EAEA,MAAM,KAAK,IAAI,YACb,IAAIrB,EAAkD,CACpD,KAAM,QACN,eAAgBqB,IAAU,EAC1B,iBAAkB,EACpB,CAAC,CACH,CAEJ,CACF,CACF,CACF",
6
- "names": ["SolanaContextTypes", "isSuccessCommandResult", "LoadCertificateCommand", "Nothing", "ProvideTLVTransactionInstructionDescriptorCommand", "ProvideTLVDescriptorCommand", "DefaultSolanaMessageNormaliser", "SWAP_MODE", "ProvideSolanaTransactionContextTask", "api", "context", "normaliser", "tlvDescriptor", "trustedNamePKICertificate", "loadersResults", "transactionBytes", "loaderResult", "tokenMetadataResult", "res", "lifiDescriptorListResult", "tokenMetadataPayload", "tokenMetadataCertificate", "tokenMetadataCertificateToDeviceResult", "lifiDescriptors", "message", "index", "instruction", "programIdStr", "descriptor", "sigHex"]
4
+ "sourcesContent": ["import {\n SolanaContextTypes,\n type SolanaLifiContextSuccess,\n type SolanaTokenContextSuccess,\n} from \"@ledgerhq/context-module\";\nimport {\n type CommandErrorResult,\n type InternalApi,\n isSuccessCommandResult,\n LoadCertificateCommand,\n type LoggerPublisherService,\n} from \"@ledgerhq/device-management-kit\";\nimport { type Maybe, Nothing } from \"purify-ts\";\n\nimport { ProvideTLVTransactionInstructionDescriptorCommand } from \"@internal/app-binder//command/ProvideTLVTransactionInstructionDescriptorCommand\";\nimport { ProvideTLVDescriptorCommand } from \"@internal/app-binder/command/ProvideTLVDescriptorCommand\";\nimport { type SolanaAppErrorCodes } from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\nimport {\n DefaultSolanaMessageNormaliser,\n type SolanaMessageNormaliserConstructor,\n} from \"@internal/app-binder/services/utils/DefaultSolanaMessageNormaliser\";\n\nimport { type SolanaBuildContextResult } from \"./BuildTransactionContextTask\";\n\nexport const SWAP_MODE = \"test\";\n\nexport type ProvideSolanaTransactionContextTaskArgs =\n SolanaBuildContextResult & {\n readonly transactionBytes: Uint8Array;\n readonly loggerFactory: (tag: string) => LoggerPublisherService;\n readonly normaliser?: SolanaMessageNormaliserConstructor;\n };\n\nexport class ProvideSolanaTransactionContextTask {\n private readonly _logger: LoggerPublisherService;\n private readonly _normaliser: SolanaMessageNormaliserConstructor;\n constructor(\n private readonly api: InternalApi,\n private readonly args: ProvideSolanaTransactionContextTaskArgs,\n ) {\n this._logger = args.loggerFactory(\"ProvideSolanaTransactionContextTask\");\n this._normaliser = args.normaliser ?? DefaultSolanaMessageNormaliser;\n }\n\n async run(): Promise<Maybe<CommandErrorResult<SolanaAppErrorCodes>>> {\n this._logger.debug(\"[run] Starting ProvideSolanaTransactionContextTask\");\n const {\n tlvDescriptor,\n trustedNamePKICertificate,\n loadersResults,\n transactionBytes,\n } = this.args;\n\n // --------------------------------------------------------------------\n // providing default solana context\n\n // send PKI certificate + signature\n await this.api.sendCommand(\n new LoadCertificateCommand({\n certificate: trustedNamePKICertificate.payload,\n keyUsage: trustedNamePKICertificate.keyUsageNumber,\n }),\n );\n\n // send signed descriptor\n await this.api.sendCommand(\n new ProvideTLVDescriptorCommand({ payload: tlvDescriptor }),\n );\n\n // --------------------------------------------------------------------\n // providing optional solana context via context module loaders results\n\n this._logger.debug(\"[run] Providing optional Solana context from loaders\", {\n data: { loadersResults },\n });\n for (const loaderResult of loadersResults) {\n switch (loaderResult.type) {\n // always resolve SOLANA_TOKEN first\n case SolanaContextTypes.SOLANA_TOKEN: {\n const tokenMetadataResult = loadersResults.find(\n (res) => res.type === SolanaContextTypes.SOLANA_TOKEN,\n );\n this._logger.debug(\n `[run] Providing ${SolanaContextTypes.SOLANA_TOKEN}`,\n { data: { args: { tokenMetadataResult } } },\n );\n if (tokenMetadataResult) {\n await this.provideTokenMetadataContext(tokenMetadataResult);\n }\n break;\n }\n\n case SolanaContextTypes.SOLANA_LIFI: {\n const lifiDescriptorListResult = loadersResults.find(\n (res) => res.type === SolanaContextTypes.SOLANA_LIFI,\n );\n this._logger.debug(\n `[run] Providing ${SolanaContextTypes.SOLANA_LIFI}`,\n { data: { args: { lifiDescriptorListResult, transactionBytes } } },\n );\n if (lifiDescriptorListResult) {\n await this.provideSwapContext(\n lifiDescriptorListResult,\n transactionBytes,\n );\n }\n break;\n }\n\n case SolanaContextTypes.ERROR: {\n this._logger.debug(`[run] Loader result of type ERROR, skipping`);\n break;\n }\n\n default: {\n this._logger.debug(`[run] Loader result of unknown type, skipping`);\n break;\n }\n }\n }\n\n return Nothing;\n }\n\n private async provideTokenMetadataContext(\n tokenMetadataResult: SolanaTokenContextSuccess,\n ): Promise<void> {\n const {\n payload: tokenMetadataPayload,\n certificate: tokenMetadataCertificate,\n } = tokenMetadataResult;\n\n if (tokenMetadataPayload && tokenMetadataCertificate) {\n // send token metadata certificate\n const tokenMetadataCertificateToDeviceResult = await this.api.sendCommand(\n new LoadCertificateCommand({\n certificate: tokenMetadataCertificate.payload,\n keyUsage: tokenMetadataCertificate.keyUsageNumber,\n }),\n );\n if (!isSuccessCommandResult(tokenMetadataCertificateToDeviceResult)) {\n // IMPORTANT, TO BE MAPPED TO LatestFirmwareVersionRequired(\"LatestFirmwareVersionRequired\") ERROR\n throw new Error(\n \"[SignerSolana] ProvideSolanaTransactionContextTask: Failed to send tokenMetadataCertificate to device, latest firmware version required\",\n );\n }\n\n // send token metadata signed descriptor\n await this.api.sendCommand(\n new ProvideTLVTransactionInstructionDescriptorCommand({\n kind: \"descriptor\",\n dataHex: tokenMetadataPayload.solanaTokenDescriptor.data,\n signatureHex: tokenMetadataPayload.solanaTokenDescriptor.signature,\n // token metadata is a single chunk, so this is always the first message\n isFirstMessage: true,\n swapSignatureTag: false,\n }),\n );\n }\n }\n\n private async provideSwapContext(\n lifiDescriptorListResult: SolanaLifiContextSuccess,\n transactionBytes: Uint8Array,\n ): Promise<void> {\n const lifiDescriptors = lifiDescriptorListResult.payload;\n\n if (lifiDescriptors) {\n const message = await this._normaliser.normaliseMessage(transactionBytes);\n\n for (const [\n index,\n instruction,\n ] of message.compiledInstructions.entries()) {\n const programId = message.allKeys[instruction.programIdIndex];\n const programIdStr = programId?.toBase58();\n const descriptor = programIdStr\n ? lifiDescriptors[programIdStr]\n : undefined;\n\n const sigHex = descriptor && descriptor.signatures[SWAP_MODE];\n\n if (descriptor && sigHex) {\n await this.api.sendCommand(\n new ProvideTLVTransactionInstructionDescriptorCommand({\n kind: \"descriptor\",\n dataHex: descriptor.data,\n signatureHex: sigHex,\n isFirstMessage: index === 0,\n swapSignatureTag: true,\n }),\n );\n } else {\n await this.api.sendCommand(\n new ProvideTLVTransactionInstructionDescriptorCommand({\n kind: \"empty\",\n isFirstMessage: index === 0,\n swapSignatureTag: true,\n }),\n );\n }\n }\n }\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["SolanaContextTypes", "isSuccessCommandResult", "LoadCertificateCommand", "Nothing", "ProvideTLVTransactionInstructionDescriptorCommand", "ProvideTLVDescriptorCommand", "DefaultSolanaMessageNormaliser", "SWAP_MODE", "ProvideSolanaTransactionContextTask", "api", "args", "tlvDescriptor", "trustedNamePKICertificate", "loadersResults", "transactionBytes", "loaderResult", "tokenMetadataResult", "res", "lifiDescriptorListResult", "tokenMetadataPayload", "tokenMetadataCertificate", "tokenMetadataCertificateToDeviceResult", "lifiDescriptors", "message", "index", "instruction", "programIdStr", "descriptor", "sigHex"]
7
7
  }