@ledgerhq/device-signer-kit-ethereum 1.9.4 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/lib/cjs/api/SignerEthBuilder.js +1 -1
  2. package/lib/cjs/api/SignerEthBuilder.js.map +3 -3
  3. package/lib/cjs/api/SignerEthBuilder.test.js +1 -1
  4. package/lib/cjs/api/SignerEthBuilder.test.js.map +3 -3
  5. package/lib/cjs/internal/app-binder/EthAppBinder.js +1 -1
  6. package/lib/cjs/internal/app-binder/EthAppBinder.js.map +3 -3
  7. package/lib/cjs/internal/app-binder/EthAppBinder.test.js +1 -1
  8. package/lib/cjs/internal/app-binder/EthAppBinder.test.js.map +3 -3
  9. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js +1 -1
  10. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js.map +3 -3
  11. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js +1 -1
  12. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js.map +3 -3
  13. package/lib/cjs/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.js +1 -1
  14. package/lib/cjs/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.js.map +3 -3
  15. package/lib/cjs/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.test.js +1 -1
  16. package/lib/cjs/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.test.js.map +3 -3
  17. package/lib/cjs/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.js +1 -1
  18. package/lib/cjs/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.js.map +3 -3
  19. package/lib/cjs/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.test.js +1 -1
  20. package/lib/cjs/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.test.js.map +3 -3
  21. package/lib/cjs/internal/app-binder/task/BuildEIP712ContextTask.js +1 -1
  22. package/lib/cjs/internal/app-binder/task/BuildEIP712ContextTask.js.map +3 -3
  23. package/lib/cjs/internal/app-binder/task/BuildEIP712ContextTask.test.js +1 -1
  24. package/lib/cjs/internal/app-binder/task/BuildEIP712ContextTask.test.js.map +3 -3
  25. package/lib/cjs/internal/app-binder/task/BuildFullContextsTask.js +1 -1
  26. package/lib/cjs/internal/app-binder/task/BuildFullContextsTask.js.map +3 -3
  27. package/lib/cjs/internal/app-binder/task/BuildFullContextsTask.test.js +1 -1
  28. package/lib/cjs/internal/app-binder/task/BuildFullContextsTask.test.js.map +3 -3
  29. package/lib/cjs/internal/app-binder/task/BuildSafeAddressContextTask.js +1 -1
  30. package/lib/cjs/internal/app-binder/task/BuildSafeAddressContextTask.js.map +3 -3
  31. package/lib/cjs/internal/app-binder/task/BuildSafeAddressContextTask.test.js +1 -1
  32. package/lib/cjs/internal/app-binder/task/BuildSafeAddressContextTask.test.js.map +3 -3
  33. package/lib/cjs/internal/app-binder/task/BuildSubcontextsTask.js +1 -1
  34. package/lib/cjs/internal/app-binder/task/BuildSubcontextsTask.js.map +2 -2
  35. package/lib/cjs/internal/app-binder/task/BuildSubcontextsTask.test.js +1 -1
  36. package/lib/cjs/internal/app-binder/task/BuildSubcontextsTask.test.js.map +2 -2
  37. package/lib/cjs/internal/app-binder/task/ProvideContextTask.js +1 -1
  38. package/lib/cjs/internal/app-binder/task/ProvideContextTask.js.map +2 -2
  39. package/lib/cjs/internal/app-binder/task/ProvideContextTask.test.js +1 -1
  40. package/lib/cjs/internal/app-binder/task/ProvideContextTask.test.js.map +3 -3
  41. package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.js +1 -1
  42. package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.js.map +3 -3
  43. package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.test.js +1 -1
  44. package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.test.js.map +3 -3
  45. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextsTask.js +1 -1
  46. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextsTask.js.map +3 -3
  47. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextsTask.test.js +1 -1
  48. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextsTask.test.js.map +3 -3
  49. package/lib/cjs/internal/app-binder/task/SendSignAuthorizationDelegationTask.js +1 -1
  50. package/lib/cjs/internal/app-binder/task/SendSignAuthorizationDelegationTask.js.map +2 -2
  51. package/lib/cjs/internal/app-binder/task/SendSignAuthorizationDelegationTask.test.js +1 -1
  52. package/lib/cjs/internal/app-binder/task/SendSignAuthorizationDelegationTask.test.js.map +3 -3
  53. package/lib/cjs/internal/app-binder/task/SendSignPersonalMessageTask.js +1 -1
  54. package/lib/cjs/internal/app-binder/task/SendSignPersonalMessageTask.js.map +2 -2
  55. package/lib/cjs/internal/app-binder/task/SendSignPersonalMessageTask.test.js +1 -1
  56. package/lib/cjs/internal/app-binder/task/SendSignPersonalMessageTask.test.js.map +3 -3
  57. package/lib/cjs/internal/app-binder/task/SendSignTransactionTask.js +1 -1
  58. package/lib/cjs/internal/app-binder/task/SendSignTransactionTask.js.map +2 -2
  59. package/lib/cjs/internal/app-binder/task/SendSignTransactionTask.test.js +1 -1
  60. package/lib/cjs/internal/app-binder/task/SendSignTransactionTask.test.js.map +3 -3
  61. package/lib/cjs/internal/app-binder/task/SignTypedDataLegacyTask.js +1 -1
  62. package/lib/cjs/internal/app-binder/task/SignTypedDataLegacyTask.js.map +3 -3
  63. package/lib/cjs/internal/app-binder/task/SignTypedDataLegacyTask.test.js +1 -1
  64. package/lib/cjs/internal/app-binder/task/SignTypedDataLegacyTask.test.js.map +3 -3
  65. package/lib/cjs/internal/di.js +1 -1
  66. package/lib/cjs/internal/di.js.map +3 -3
  67. package/lib/cjs/internal/externalTypes.js +1 -1
  68. package/lib/cjs/internal/externalTypes.js.map +2 -2
  69. package/lib/cjs/package.json +2 -2
  70. package/lib/esm/api/SignerEthBuilder.js +1 -1
  71. package/lib/esm/api/SignerEthBuilder.js.map +3 -3
  72. package/lib/esm/api/SignerEthBuilder.test.js +1 -1
  73. package/lib/esm/api/SignerEthBuilder.test.js.map +3 -3
  74. package/lib/esm/internal/app-binder/EthAppBinder.js +1 -1
  75. package/lib/esm/internal/app-binder/EthAppBinder.js.map +3 -3
  76. package/lib/esm/internal/app-binder/EthAppBinder.test.js +1 -1
  77. package/lib/esm/internal/app-binder/EthAppBinder.test.js.map +3 -3
  78. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js +1 -1
  79. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js.map +3 -3
  80. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js +1 -1
  81. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js.map +3 -3
  82. package/lib/esm/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.js +1 -1
  83. package/lib/esm/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.js.map +3 -3
  84. package/lib/esm/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.test.js +1 -1
  85. package/lib/esm/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.test.js.map +3 -3
  86. package/lib/esm/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.js +1 -1
  87. package/lib/esm/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.js.map +3 -3
  88. package/lib/esm/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.test.js +1 -1
  89. package/lib/esm/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.test.js.map +3 -3
  90. package/lib/esm/internal/app-binder/task/BuildEIP712ContextTask.js +1 -1
  91. package/lib/esm/internal/app-binder/task/BuildEIP712ContextTask.js.map +3 -3
  92. package/lib/esm/internal/app-binder/task/BuildEIP712ContextTask.test.js +1 -1
  93. package/lib/esm/internal/app-binder/task/BuildEIP712ContextTask.test.js.map +3 -3
  94. package/lib/esm/internal/app-binder/task/BuildFullContextsTask.js +1 -1
  95. package/lib/esm/internal/app-binder/task/BuildFullContextsTask.js.map +3 -3
  96. package/lib/esm/internal/app-binder/task/BuildFullContextsTask.test.js +1 -1
  97. package/lib/esm/internal/app-binder/task/BuildFullContextsTask.test.js.map +3 -3
  98. package/lib/esm/internal/app-binder/task/BuildSafeAddressContextTask.js +1 -1
  99. package/lib/esm/internal/app-binder/task/BuildSafeAddressContextTask.js.map +3 -3
  100. package/lib/esm/internal/app-binder/task/BuildSafeAddressContextTask.test.js +1 -1
  101. package/lib/esm/internal/app-binder/task/BuildSafeAddressContextTask.test.js.map +3 -3
  102. package/lib/esm/internal/app-binder/task/BuildSubcontextsTask.js +1 -1
  103. package/lib/esm/internal/app-binder/task/BuildSubcontextsTask.js.map +2 -2
  104. package/lib/esm/internal/app-binder/task/BuildSubcontextsTask.test.js +1 -1
  105. package/lib/esm/internal/app-binder/task/BuildSubcontextsTask.test.js.map +2 -2
  106. package/lib/esm/internal/app-binder/task/ProvideContextTask.js +1 -1
  107. package/lib/esm/internal/app-binder/task/ProvideContextTask.js.map +2 -2
  108. package/lib/esm/internal/app-binder/task/ProvideContextTask.test.js +1 -1
  109. package/lib/esm/internal/app-binder/task/ProvideContextTask.test.js.map +3 -3
  110. package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.js +1 -1
  111. package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.js.map +3 -3
  112. package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.test.js +1 -1
  113. package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.test.js.map +3 -3
  114. package/lib/esm/internal/app-binder/task/ProvideTransactionContextsTask.js +1 -1
  115. package/lib/esm/internal/app-binder/task/ProvideTransactionContextsTask.js.map +3 -3
  116. package/lib/esm/internal/app-binder/task/ProvideTransactionContextsTask.test.js +1 -1
  117. package/lib/esm/internal/app-binder/task/ProvideTransactionContextsTask.test.js.map +3 -3
  118. package/lib/esm/internal/app-binder/task/SendSignAuthorizationDelegationTask.js +1 -1
  119. package/lib/esm/internal/app-binder/task/SendSignAuthorizationDelegationTask.js.map +2 -2
  120. package/lib/esm/internal/app-binder/task/SendSignAuthorizationDelegationTask.test.js +1 -1
  121. package/lib/esm/internal/app-binder/task/SendSignAuthorizationDelegationTask.test.js.map +3 -3
  122. package/lib/esm/internal/app-binder/task/SendSignPersonalMessageTask.js +1 -1
  123. package/lib/esm/internal/app-binder/task/SendSignPersonalMessageTask.js.map +2 -2
  124. package/lib/esm/internal/app-binder/task/SendSignPersonalMessageTask.test.js +1 -1
  125. package/lib/esm/internal/app-binder/task/SendSignPersonalMessageTask.test.js.map +3 -3
  126. package/lib/esm/internal/app-binder/task/SendSignTransactionTask.js +1 -1
  127. package/lib/esm/internal/app-binder/task/SendSignTransactionTask.js.map +2 -2
  128. package/lib/esm/internal/app-binder/task/SendSignTransactionTask.test.js +1 -1
  129. package/lib/esm/internal/app-binder/task/SendSignTransactionTask.test.js.map +3 -3
  130. package/lib/esm/internal/app-binder/task/SignTypedDataLegacyTask.js +1 -1
  131. package/lib/esm/internal/app-binder/task/SignTypedDataLegacyTask.js.map +3 -3
  132. package/lib/esm/internal/app-binder/task/SignTypedDataLegacyTask.test.js +1 -1
  133. package/lib/esm/internal/app-binder/task/SignTypedDataLegacyTask.test.js.map +3 -3
  134. package/lib/esm/internal/di.js +1 -1
  135. package/lib/esm/internal/di.js.map +3 -3
  136. package/lib/esm/internal/externalTypes.js +1 -1
  137. package/lib/esm/internal/externalTypes.js.map +2 -2
  138. package/lib/esm/package.json +2 -2
  139. package/lib/types/api/SignerEthBuilder.d.ts.map +1 -1
  140. package/lib/types/internal/app-binder/EthAppBinder.d.ts +3 -2
  141. package/lib/types/internal/app-binder/EthAppBinder.d.ts.map +1 -1
  142. package/lib/types/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.d.ts +7 -1
  143. package/lib/types/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.d.ts.map +1 -1
  144. package/lib/types/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.d.ts +7 -1
  145. package/lib/types/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.d.ts.map +1 -1
  146. package/lib/types/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.d.ts +7 -1
  147. package/lib/types/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.d.ts.map +1 -1
  148. package/lib/types/internal/app-binder/task/BuildEIP712ContextTask.d.ts +3 -2
  149. package/lib/types/internal/app-binder/task/BuildEIP712ContextTask.d.ts.map +1 -1
  150. package/lib/types/internal/app-binder/task/BuildFullContextsTask.d.ts +2 -1
  151. package/lib/types/internal/app-binder/task/BuildFullContextsTask.d.ts.map +1 -1
  152. package/lib/types/internal/app-binder/task/BuildSafeAddressContextTask.d.ts +2 -1
  153. package/lib/types/internal/app-binder/task/BuildSafeAddressContextTask.d.ts.map +1 -1
  154. package/lib/types/internal/app-binder/task/BuildSubcontextsTask.d.ts.map +1 -1
  155. package/lib/types/internal/app-binder/task/ProvideContextTask.d.ts +5 -1
  156. package/lib/types/internal/app-binder/task/ProvideContextTask.d.ts.map +1 -1
  157. package/lib/types/internal/app-binder/task/ProvideEIP712ContextTask.d.ts +2 -1
  158. package/lib/types/internal/app-binder/task/ProvideEIP712ContextTask.d.ts.map +1 -1
  159. package/lib/types/internal/app-binder/task/ProvideTransactionContextsTask.d.ts +5 -1
  160. package/lib/types/internal/app-binder/task/ProvideTransactionContextsTask.d.ts.map +1 -1
  161. package/lib/types/internal/app-binder/task/SendSignAuthorizationDelegationTask.d.ts +3 -1
  162. package/lib/types/internal/app-binder/task/SendSignAuthorizationDelegationTask.d.ts.map +1 -1
  163. package/lib/types/internal/app-binder/task/SendSignPersonalMessageTask.d.ts +3 -1
  164. package/lib/types/internal/app-binder/task/SendSignPersonalMessageTask.d.ts.map +1 -1
  165. package/lib/types/internal/app-binder/task/SendSignTransactionTask.d.ts +3 -1
  166. package/lib/types/internal/app-binder/task/SendSignTransactionTask.d.ts.map +1 -1
  167. package/lib/types/internal/app-binder/task/SignTypedDataLegacyTask.d.ts +3 -2
  168. package/lib/types/internal/app-binder/task/SignTypedDataLegacyTask.d.ts.map +1 -1
  169. package/lib/types/internal/di.d.ts.map +1 -1
  170. package/lib/types/internal/externalTypes.d.ts +1 -0
  171. package/lib/types/internal/externalTypes.d.ts.map +1 -1
  172. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  173. package/package.json +9 -9
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/task/ProvideEIP712ContextTask.test.ts"],
4
- "sourcesContent": ["import {\n type ClearSignContextSuccess,\n ClearSignContextType,\n TypedDataCalldataParamPresence,\n type TypedDataClearSignContextSuccess,\n} from \"@ledgerhq/context-module\";\nimport {\n CommandResultFactory,\n DeviceModelId,\n hexaStringToBuffer,\n UnknownDeviceExchangeError,\n} from \"@ledgerhq/device-management-kit\";\nimport { Just, Nothing } from \"purify-ts\";\n\nimport { ProvideProxyInfoCommand } from \"@internal/app-binder/command/ProvideProxyInfoCommand\";\nimport { ProvideTokenInformationCommand } from \"@internal/app-binder/command/ProvideTokenInformationCommand\";\nimport {\n CalldataParamPresence,\n Eip712FilterType,\n SendEIP712FilteringCommand,\n} from \"@internal/app-binder/command/SendEIP712FilteringCommand\";\nimport {\n SendEIP712StructDefinitionCommand,\n StructDefinitionCommand,\n} from \"@internal/app-binder/command/SendEIP712StructDefinitionCommand\";\nimport {\n SendEIP712StructImplemCommand,\n StructImplemType,\n} from \"@internal/app-binder/command/SendEIP712StructImplemCommand\";\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\nimport {\n type FieldType,\n PrimitiveType,\n StructType,\n TypedDataValueArray,\n TypedDataValueField,\n TypedDataValueRoot,\n} from \"@internal/typed-data/model/Types\";\n\nimport {\n ProvideEIP712ContextTask,\n type ProvideEIP712ContextTaskArgs,\n} from \"./ProvideEIP712ContextTask\";\n\ndescribe(\"ProvideEIP712ContextTask\", () => {\n const apiMock = makeDeviceActionInternalApiMock();\n const provideContextFactoryMock = vi.fn();\n const contextModuleMock = {\n getFieldContext: vi.fn(),\n getContexts: vi.fn(),\n getTypedDataFilters: vi.fn(),\n getSolanaContext: vi.fn(),\n };\n\n const TEST_TYPES = {\n EIP712Domain: {\n name: new PrimitiveType(\"string\", \"string\", Nothing),\n chainId: new PrimitiveType(\"uint256\", \"uint\", Just(32)),\n verifyingContract: new PrimitiveType(\"address\", \"address\", Nothing),\n },\n PermitSingle: {\n details: new StructType(\"PermitDetails\"),\n spender: new PrimitiveType(\"address\", \"address\", Nothing),\n sigDeadline: new PrimitiveType(\"uint256\", \"uint\", Just(32)),\n },\n PermitDetails: {\n token: new PrimitiveType(\"address\", \"address\", Nothing),\n amount: new PrimitiveType(\"uint160\", \"uint\", Just(20)),\n expiration: new PrimitiveType(\"uint48\", \"uint\", Just(6)),\n nonce: new PrimitiveType(\"uint48\", \"uint\", Just(6)),\n },\n };\n const TEST_DOMAIN_VALUES = [\n {\n path: \"\",\n type: \"\",\n value: new TypedDataValueRoot(\"EIP712Domain\"),\n },\n {\n path: \"name\",\n type: \"string\",\n value: new TypedDataValueField(new TextEncoder().encode(\"Permit2\")),\n },\n {\n path: \"chainId\",\n type: \"uint256\",\n value: new TypedDataValueField(Uint8Array.from([137])),\n },\n {\n path: \"verifyingContract\",\n type: \"address\",\n value: new TypedDataValueField(\n hexaStringToBuffer(\"0x000000000022d473030f116ddee9f6b43ac78ba3\")!,\n ),\n },\n ];\n const TEST_MESSAGE_VALUES = [\n {\n path: \"\",\n type: \"\",\n value: new TypedDataValueRoot(\"PermitSingle\"),\n },\n {\n path: \"details.token\",\n type: \"address\",\n value: new TypedDataValueField(\n hexaStringToBuffer(\"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\")!,\n ),\n },\n {\n path: \"details.amount\",\n type: \"uint160\",\n value: new TypedDataValueField(Uint8Array.from([0x12])),\n },\n {\n path: \"details.expiration\",\n type: \"uint48\",\n value: new TypedDataValueField(Uint8Array.from([0x12])),\n },\n {\n path: \"details.nonce\",\n type: \"uint48\",\n value: new TypedDataValueField(Uint8Array.from([0x00])),\n },\n {\n path: \"spender\",\n type: \"address\",\n value: new TypedDataValueField(\n hexaStringToBuffer(\"0xec7be89e9d109e7e3fec59c222cf297125fefda2\")!,\n ),\n },\n {\n path: \"sigDeadline\",\n type: \"uint256\",\n value: new TypedDataValueField(Uint8Array.from([0x12])),\n },\n ];\n const TEST_CLEAR_SIGN_CONTEXT: TypedDataClearSignContextSuccess = {\n type: \"success\",\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 4,\n signature:\n \"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3\",\n },\n trustedNamesAddresses: {},\n calldatas: {},\n proxy: undefined,\n tokens: {\n 0: \"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\",\n 255: \"payload-0x000000000022d473030f116ddee9f6b43ac78ba3\",\n },\n filters: {\n \"details.amount\": {\n displayName: \"Amount allowance\",\n path: \"details.amount\",\n signature:\n \"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n tokenIndex: 255,\n type: \"amount\",\n },\n \"details.expiration\": {\n displayName: \"Approval expire\",\n path: \"details.expiration\",\n signature:\n \"3044022056b3381e4540629ad73bc434ec49d80523234b82f62340fbb77157fb0eb21a680220459fe9cf6ca309f9c7dfc6d4711fea1848dba661563c57f77b3c2dc480b3a63b\",\n type: \"datetime\",\n },\n \"details.token\": {\n displayName: \"Amount allowance\",\n path: \"details.token\",\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n tokenIndex: 0,\n type: \"token\",\n },\n spender: {\n displayName: \"Approve to spender\",\n path: \"spender\",\n signature:\n \"3044022033e5713d9cb9bc375b56a9fb53b736c81ea3c4ac5cfb2d3ca7f8b8f0558fe2430220543ca4fef6d6f725f29e343f167fe9dd582aa856ecb5797259050eb990a1befb\",\n type: \"raw\",\n },\n },\n };\n\n const ADDRESS = new PrimitiveType(\"address\", \"address\", Nothing);\n const STRING = new PrimitiveType(\"string\", \"string\", Nothing);\n const UINT256 = new PrimitiveType(\"uint256\", \"uint\", Just(32));\n const UINT160 = new PrimitiveType(\"uint160\", \"uint\", Just(20));\n const UINT48 = new PrimitiveType(\"uint48\", \"uint\", Just(6));\n const CUSTOM = (name: string) => new StructType(name);\n\n const sendStructDefName = (name: string) =>\n new SendEIP712StructDefinitionCommand({\n command: StructDefinitionCommand.Name,\n name,\n });\n const sendStructDefField = (name: string, type: FieldType) =>\n new SendEIP712StructDefinitionCommand({\n command: StructDefinitionCommand.Field,\n name,\n type,\n });\n const sendStructImplRoot = (value: string) =>\n new SendEIP712StructImplemCommand({\n type: StructImplemType.ROOT,\n value,\n });\n const sendStructImplArray = (value: number) =>\n new SendEIP712StructImplemCommand({\n type: StructImplemType.ARRAY,\n value,\n });\n const sendStructImplField = (data: Uint8Array) =>\n new SendEIP712StructImplemCommand({\n type: StructImplemType.FIELD,\n value: {\n data,\n isLastChunk: true,\n },\n });\n\n beforeEach(() => {\n vi.resetAllMocks();\n provideContextFactoryMock.mockReturnValue({\n run: async () => undefined,\n });\n });\n\n it(\"Send context with no clear signing context\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n deviceModelId: DeviceModelId.STAX,\n derivationPath: \"44'/60'/0'/0/0\",\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Nothing,\n calldatasContexts: {},\n };\n // WHEN\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n await new ProvideEIP712ContextTask(\n apiMock,\n contextModuleMock,\n args,\n provideContextFactoryMock,\n ).run();\n\n // THEN\n expect(apiMock.sendCommand.mock.calls).toHaveLength(24);\n // Send Struct definitions\n expect(apiMock.sendCommand.mock.calls[0]![0]).toStrictEqual(\n sendStructDefName(\"EIP712Domain\"),\n );\n expect(apiMock.sendCommand.mock.calls[1]![0]).toStrictEqual(\n sendStructDefField(\"name\", STRING),\n );\n expect(apiMock.sendCommand.mock.calls[2]![0]).toStrictEqual(\n sendStructDefField(\"chainId\", UINT256),\n );\n expect(apiMock.sendCommand.mock.calls[3]![0]).toStrictEqual(\n sendStructDefField(\"verifyingContract\", ADDRESS),\n );\n expect(apiMock.sendCommand.mock.calls[4]![0]).toStrictEqual(\n sendStructDefName(\"PermitDetails\"),\n );\n expect(apiMock.sendCommand.mock.calls[5]![0]).toStrictEqual(\n sendStructDefField(\"token\", ADDRESS),\n );\n expect(apiMock.sendCommand.mock.calls[6]![0]).toStrictEqual(\n sendStructDefField(\"amount\", UINT160),\n );\n expect(apiMock.sendCommand.mock.calls[7]![0]).toStrictEqual(\n sendStructDefField(\"expiration\", UINT48),\n );\n expect(apiMock.sendCommand.mock.calls[8]![0]).toStrictEqual(\n sendStructDefField(\"nonce\", UINT48),\n );\n expect(apiMock.sendCommand.mock.calls[9]![0]).toStrictEqual(\n sendStructDefName(\"PermitSingle\"),\n );\n expect(apiMock.sendCommand.mock.calls[10]![0]).toStrictEqual(\n sendStructDefField(\"details\", CUSTOM(\"PermitDetails\")),\n );\n expect(apiMock.sendCommand.mock.calls[11]![0]).toStrictEqual(\n sendStructDefField(\"spender\", ADDRESS),\n );\n expect(apiMock.sendCommand.mock.calls[12]![0]).toStrictEqual(\n sendStructDefField(\"sigDeadline\", UINT256),\n );\n // Send the domain values\n expect(apiMock.sendCommand.mock.calls[13]![0]).toStrictEqual(\n sendStructImplRoot(\"EIP712Domain\"),\n );\n expect(apiMock.sendCommand.mock.calls[14]![0]).toStrictEqual(\n sendStructImplField(\n Uint8Array.from([0x00, 0x07, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x32]),\n ),\n );\n expect(apiMock.sendCommand.mock.calls[15]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x89])),\n );\n expect(apiMock.sendCommand.mock.calls[16]![0]).toStrictEqual(\n sendStructImplField(\n Uint8Array.from([\n 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0xd4, 0x73, 0x03,\n 0x0f, 0x11, 0x6d, 0xde, 0xe9, 0xf6, 0xb4, 0x3a, 0xc7, 0x8b, 0xa3,\n ]),\n ),\n );\n // Send the message values\n expect(apiMock.sendCommand.mock.calls[17]![0]).toStrictEqual(\n sendStructImplRoot(\"PermitSingle\"),\n );\n expect(apiMock.sendCommand.mock.calls[18]![0]).toStrictEqual(\n sendStructImplField(\n Uint8Array.from([\n 0x00, 0x14, 0x7c, 0xeb, 0x23, 0xfd, 0x6b, 0xc0, 0xad, 0xd5, 0x9e,\n 0x62, 0xac, 0x25, 0x57, 0x82, 0x70, 0xcf, 0xf1, 0xb9, 0xf6, 0x19,\n ]),\n ),\n );\n expect(apiMock.sendCommand.mock.calls[19]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x12])),\n );\n expect(apiMock.sendCommand.mock.calls[20]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x12])),\n );\n expect(apiMock.sendCommand.mock.calls[21]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x00])),\n );\n expect(apiMock.sendCommand.mock.calls[22]![0]).toStrictEqual(\n sendStructImplField(\n Uint8Array.from([\n 0x00, 0x14, 0xec, 0x7b, 0xe8, 0x9e, 0x9d, 0x10, 0x9e, 0x7e, 0x3f,\n 0xec, 0x59, 0xc2, 0x22, 0xcf, 0x29, 0x71, 0x25, 0xfe, 0xfd, 0xa2,\n ]),\n ),\n );\n expect(apiMock.sendCommand.mock.calls[23]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x12])),\n );\n });\n\n it(\"Send context with transaction check\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n deviceModelId: DeviceModelId.STAX,\n derivationPath: \"44'/60'/0'/0/0\",\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Nothing,\n calldatasContexts: {},\n transactionChecks: {\n type: ClearSignContextType.TRANSACTION_CHECK,\n payload: \"transactionCheck\",\n certificate: {\n keyUsageNumber: 1,\n payload: new Uint8Array([0x01, 0x02, 0x03]),\n },\n },\n };\n // WHEN\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n await new ProvideEIP712ContextTask(\n apiMock,\n contextModuleMock,\n args,\n provideContextFactoryMock,\n ).run();\n\n // THEN\n expect(apiMock.sendCommand.mock.calls).toHaveLength(25);\n });\n\n it(\"Send context with clear signing\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n deviceModelId: DeviceModelId.STAX,\n derivationPath: \"44'/60'/0'/0/0\",\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Just(TEST_CLEAR_SIGN_CONTEXT),\n calldatasContexts: {},\n };\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: { tokenIndex: 4 } })) // First token provided\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: { tokenIndex: 5 } })); // Second token provided\n // WHEN\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n await new ProvideEIP712ContextTask(\n apiMock,\n contextModuleMock,\n args,\n provideContextFactoryMock,\n ).run();\n\n // THEN\n expect(apiMock.sendCommand.mock.calls).toHaveLength(32);\n // Send Struct definitions\n expect(apiMock.sendCommand.mock.calls[0]![0]).toStrictEqual(\n sendStructDefName(\"EIP712Domain\"),\n );\n expect(apiMock.sendCommand.mock.calls[1]![0]).toStrictEqual(\n sendStructDefField(\"name\", STRING),\n );\n expect(apiMock.sendCommand.mock.calls[2]![0]).toStrictEqual(\n sendStructDefField(\"chainId\", UINT256),\n );\n expect(apiMock.sendCommand.mock.calls[3]![0]).toStrictEqual(\n sendStructDefField(\"verifyingContract\", ADDRESS),\n );\n expect(apiMock.sendCommand.mock.calls[4]![0]).toStrictEqual(\n sendStructDefName(\"PermitDetails\"),\n );\n expect(apiMock.sendCommand.mock.calls[5]![0]).toStrictEqual(\n sendStructDefField(\"token\", ADDRESS),\n );\n expect(apiMock.sendCommand.mock.calls[6]![0]).toStrictEqual(\n sendStructDefField(\"amount\", UINT160),\n );\n expect(apiMock.sendCommand.mock.calls[7]![0]).toStrictEqual(\n sendStructDefField(\"expiration\", UINT48),\n );\n expect(apiMock.sendCommand.mock.calls[8]![0]).toStrictEqual(\n sendStructDefField(\"nonce\", UINT48),\n );\n expect(apiMock.sendCommand.mock.calls[9]![0]).toStrictEqual(\n sendStructDefName(\"PermitSingle\"),\n );\n expect(apiMock.sendCommand.mock.calls[10]![0]).toStrictEqual(\n sendStructDefField(\"details\", CUSTOM(\"PermitDetails\")),\n );\n expect(apiMock.sendCommand.mock.calls[11]![0]).toStrictEqual(\n sendStructDefField(\"spender\", ADDRESS),\n );\n expect(apiMock.sendCommand.mock.calls[12]![0]).toStrictEqual(\n sendStructDefField(\"sigDeadline\", UINT256),\n );\n // Activate the filtering\n expect(apiMock.sendCommand.mock.calls[13]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({ type: Eip712FilterType.Activation }),\n );\n // Send the domain values\n expect(apiMock.sendCommand.mock.calls[14]![0]).toStrictEqual(\n sendStructImplRoot(\"EIP712Domain\"),\n );\n expect(apiMock.sendCommand.mock.calls[15]![0]).toStrictEqual(\n sendStructImplField(\n Uint8Array.from([0x00, 0x07, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x32]),\n ),\n );\n expect(apiMock.sendCommand.mock.calls[16]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x89])),\n );\n expect(apiMock.sendCommand.mock.calls[17]![0]).toStrictEqual(\n sendStructImplField(\n Uint8Array.from([\n 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0xd4, 0x73, 0x03,\n 0x0f, 0x11, 0x6d, 0xde, 0xe9, 0xf6, 0xb4, 0x3a, 0xc7, 0x8b, 0xa3,\n ]),\n ),\n );\n // Send the message information filter\n expect(apiMock.sendCommand.mock.calls[18]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.MessageInfo,\n displayName: \"Permit2\",\n filtersCount: 4,\n signature:\n \"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3\",\n }),\n );\n // Send the message values with corresponding filters\n expect(apiMock.sendCommand.mock.calls[19]![0]).toStrictEqual(\n sendStructImplRoot(\"PermitSingle\"),\n );\n expect(apiMock.sendCommand.mock.calls[20]![0]).toStrictEqual(\n new ProvideTokenInformationCommand({\n payload: \"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\",\n }),\n );\n expect(apiMock.sendCommand.mock.calls[21]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Token,\n discarded: false,\n tokenIndex: 4,\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n }),\n );\n expect(apiMock.sendCommand.mock.calls[22]![0]).toStrictEqual(\n sendStructImplField(\n Uint8Array.from([\n 0x00, 0x14, 0x7c, 0xeb, 0x23, 0xfd, 0x6b, 0xc0, 0xad, 0xd5, 0x9e,\n 0x62, 0xac, 0x25, 0x57, 0x82, 0x70, 0xcf, 0xf1, 0xb9, 0xf6, 0x19,\n ]),\n ),\n );\n expect(apiMock.sendCommand.mock.calls[23]![0]).toStrictEqual(\n new ProvideTokenInformationCommand({\n payload: \"payload-0x000000000022d473030f116ddee9f6b43ac78ba3\",\n }),\n );\n expect(apiMock.sendCommand.mock.calls[24]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Amount,\n discarded: false,\n displayName: \"Amount allowance\",\n tokenIndex: 255,\n signature:\n \"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n }),\n );\n expect(apiMock.sendCommand.mock.calls[25]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x12])),\n );\n expect(apiMock.sendCommand.mock.calls[26]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Datetime,\n discarded: false,\n displayName: \"Approval expire\",\n signature:\n \"3044022056b3381e4540629ad73bc434ec49d80523234b82f62340fbb77157fb0eb21a680220459fe9cf6ca309f9c7dfc6d4711fea1848dba661563c57f77b3c2dc480b3a63b\",\n }),\n );\n expect(apiMock.sendCommand.mock.calls[27]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x12])),\n );\n expect(apiMock.sendCommand.mock.calls[28]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x00])),\n );\n expect(apiMock.sendCommand.mock.calls[29]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Raw,\n discarded: false,\n displayName: \"Approve to spender\",\n signature:\n \"3044022033e5713d9cb9bc375b56a9fb53b736c81ea3c4ac5cfb2d3ca7f8b8f0558fe2430220543ca4fef6d6f725f29e343f167fe9dd582aa856ecb5797259050eb990a1befb\",\n }),\n );\n expect(apiMock.sendCommand.mock.calls[30]![0]).toStrictEqual(\n sendStructImplField(\n Uint8Array.from([\n 0x00, 0x14, 0xec, 0x7b, 0xe8, 0x9e, 0x9d, 0x10, 0x9e, 0x7e, 0x3f,\n 0xec, 0x59, 0xc2, 0x22, 0xcf, 0x29, 0x71, 0x25, 0xfe, 0xfd, 0xa2,\n ]),\n ),\n );\n expect(apiMock.sendCommand.mock.calls[31]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x12])),\n );\n });\n\n it(\"Both tokens unavailable\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n deviceModelId: DeviceModelId.STAX,\n derivationPath: \"44'/60'/0'/0/0\",\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Just({\n type: \"success\",\n messageInfo: TEST_CLEAR_SIGN_CONTEXT.messageInfo,\n filters: TEST_CLEAR_SIGN_CONTEXT.filters,\n trustedNamesAddresses: {},\n calldatas: {},\n proxy: undefined,\n tokens: {},\n }),\n calldatasContexts: {},\n };\n\n // WHEN\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n await new ProvideEIP712ContextTask(\n apiMock,\n contextModuleMock,\n args,\n provideContextFactoryMock,\n ).run();\n\n // THEN\n expect(apiMock.sendCommand).not.toHaveBeenCalledWith(\n new ProvideTokenInformationCommand({\n payload: \"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\",\n }),\n );\n expect(apiMock.sendCommand).not.toHaveBeenCalledWith(\n new ProvideTokenInformationCommand({\n payload: \"payload-0x000000000022d473030f116ddee9f6b43ac78ba3\",\n }),\n );\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Token,\n discarded: false,\n tokenIndex: 0,\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n }),\n );\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Amount,\n discarded: false,\n displayName: \"Amount allowance\",\n tokenIndex: 1,\n signature:\n \"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n }),\n );\n });\n\n it(\"Provide calldata filters\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n deviceModelId: DeviceModelId.STAX,\n derivationPath: \"44'/60'/0'/0/0\",\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Just({\n type: \"success\",\n messageInfo: TEST_CLEAR_SIGN_CONTEXT.messageInfo,\n filters: {\n \"details.amount\": {\n displayName: \"Value\",\n path: \"details.amount\",\n signature:\n \"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n calldataIndex: 0,\n type: \"calldata-value\",\n },\n \"details.expiration\": {\n displayName: \"Callee\",\n path: \"details.expiration\",\n signature:\n \"304502201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n calldataIndex: 0,\n type: \"calldata-callee\",\n },\n spender: {\n displayName: \"Spender\",\n path: \"spender\",\n signature:\n \"304602201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n calldataIndex: 0,\n type: \"calldata-spender\",\n },\n \"details.token\": {\n displayName: \"Chain ID\",\n path: \"details.token\",\n signature:\n \"304702201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n calldataIndex: 0,\n type: \"calldata-chain-id\",\n },\n \"details.nonce\": {\n displayName: \"Chain ID\",\n path: \"details.nonce\",\n signature:\n \"304802201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n calldataIndex: 1,\n type: \"calldata-selector\",\n },\n sigDeadline: {\n displayName: \"Amount\",\n path: \"sigDeadline\",\n signature:\n \"304902201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n calldataIndex: 1,\n type: \"calldata-amount\",\n },\n },\n trustedNamesAddresses: {},\n calldatas: {\n 0: {\n filter: {\n calldataIndex: 0,\n displayName: \"Transaction\",\n valueFlag: true,\n calleeFlag: TypedDataCalldataParamPresence.Present,\n chainIdFlag: false,\n selectorFlag: false,\n amountFlag: true,\n spenderFlag: TypedDataCalldataParamPresence.VerifyingContract,\n signature:\n \"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e\",\n },\n subset: {\n chainId: 0x1234,\n data: \"0x6a76120200000000000000000000000023f8abfc2824c397ccb3da89ae772984107ddb99\",\n from: \"0x8ceb23fd6bc0add59e62ac25578270cff1b9f619\",\n selector: \"0x778899aa\",\n to: \"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\",\n value: 4200000000000000n,\n },\n },\n 1: {\n filter: {\n calldataIndex: 1,\n displayName: \"Transaction\",\n valueFlag: true,\n calleeFlag: TypedDataCalldataParamPresence.Present,\n chainIdFlag: false,\n selectorFlag: false,\n amountFlag: true,\n spenderFlag: TypedDataCalldataParamPresence.VerifyingContract,\n signature:\n \"3045932100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e\",\n },\n subset: {\n chainId: 0x1235,\n data: \"0x6a76120200000000000000000000000023f8abfc2824c397ccb3da89ae772984107ddb99\",\n from: \"0x8ceb23fd6bc0add59e62ac25578270cff1b9f619\",\n selector: \"0x778899aa\",\n to: \"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\",\n value: 4300000000000000n,\n },\n },\n },\n proxy: undefined,\n tokens: {},\n }),\n calldatasContexts: {\n 0: [],\n },\n };\n\n // WHEN\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n await new ProvideEIP712ContextTask(\n apiMock,\n contextModuleMock,\n args,\n provideContextFactoryMock,\n ).run();\n\n // THEN\n expect(provideContextFactoryMock).toHaveBeenCalledTimes(1);\n expect(provideContextFactoryMock).toHaveBeenCalledWith({\n contexts: [],\n derivationPath: \"44'/60'/0'/0/0\",\n });\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.CalldataInfo,\n discarded: false,\n calldataIndex: 0,\n valueFlag: true,\n calleeFlag: CalldataParamPresence.Present,\n chainIdFlag: false,\n selectorFlag: false,\n amountFlag: true,\n spenderFlag: CalldataParamPresence.VerifyingContract,\n signature:\n \"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e\",\n }),\n );\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.CalldataValue,\n discarded: false,\n calldataIndex: 0,\n signature:\n \"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n }),\n );\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.CalldataCallee,\n discarded: false,\n calldataIndex: 0,\n signature:\n \"304502201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n }),\n );\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.CalldataSpender,\n discarded: false,\n calldataIndex: 0,\n signature:\n \"304602201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n }),\n );\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.CalldataChainId,\n discarded: false,\n calldataIndex: 0,\n signature:\n \"304702201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n }),\n );\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.CalldataInfo,\n discarded: false,\n calldataIndex: 1,\n valueFlag: true,\n calleeFlag: CalldataParamPresence.Present,\n chainIdFlag: false,\n selectorFlag: false,\n amountFlag: true,\n spenderFlag: CalldataParamPresence.VerifyingContract,\n signature:\n \"3045932100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e\",\n }),\n );\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.CalldataSelector,\n discarded: false,\n calldataIndex: 1,\n signature:\n \"304802201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n }),\n );\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.CalldataAmount,\n discarded: false,\n calldataIndex: 1,\n signature:\n \"304902201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n }),\n );\n });\n\n it(\"First token unavailable\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n deviceModelId: DeviceModelId.STAX,\n derivationPath: \"44'/60'/0'/0/0\",\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Just({\n type: \"success\",\n messageInfo: TEST_CLEAR_SIGN_CONTEXT.messageInfo,\n filters: TEST_CLEAR_SIGN_CONTEXT.filters,\n trustedNamesAddresses: {},\n calldatas: {},\n proxy: undefined,\n tokens: { 255: \"payload-0x000000000022d473030f116ddee9f6b43ac78ba3\" },\n }),\n calldatasContexts: {},\n };\n\n // WHEN\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: { tokenIndex: 4 } }),\n );\n await new ProvideEIP712ContextTask(\n apiMock,\n contextModuleMock,\n args,\n provideContextFactoryMock,\n ).run();\n\n // THEN\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Token,\n discarded: false,\n tokenIndex: 0,\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n }),\n );\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Amount,\n discarded: false,\n displayName: \"Amount allowance\",\n tokenIndex: 255,\n signature:\n \"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n }),\n );\n });\n\n it(\"Second token unavailable\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n deviceModelId: DeviceModelId.STAX,\n derivationPath: \"44'/60'/0'/0/0\",\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Just({\n type: \"success\",\n messageInfo: TEST_CLEAR_SIGN_CONTEXT.messageInfo,\n filters: TEST_CLEAR_SIGN_CONTEXT.filters,\n trustedNamesAddresses: {},\n calldatas: {},\n proxy: undefined,\n tokens: { 0: \"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\" },\n }),\n calldatasContexts: {},\n };\n\n // WHEN\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: { tokenIndex: 4 } }),\n );\n await new ProvideEIP712ContextTask(\n apiMock,\n contextModuleMock,\n args,\n provideContextFactoryMock,\n ).run();\n\n // THEN\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Token,\n discarded: false,\n tokenIndex: 4,\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n }),\n );\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Amount,\n discarded: false,\n displayName: \"Amount allowance\",\n tokenIndex: 0,\n signature:\n \"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n }),\n );\n });\n\n it(\"Provide proxy\", async () => {\n // GIVEN\n const proxy: ClearSignContextSuccess<ClearSignContextType.PROXY_INFO> = {\n type: ClearSignContextType.PROXY_INFO,\n payload: \"0x010203\",\n };\n const clearSignContext: TypedDataClearSignContextSuccess = {\n ...TEST_CLEAR_SIGN_CONTEXT,\n proxy,\n };\n const args: ProvideEIP712ContextTaskArgs = {\n deviceModelId: DeviceModelId.STAX,\n derivationPath: \"44'/60'/0'/0/0\",\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Just(clearSignContext),\n calldatasContexts: {},\n };\n\n // WHEN\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: { tokenIndex: 4 } }),\n );\n await new ProvideEIP712ContextTask(\n apiMock,\n contextModuleMock,\n args,\n provideContextFactoryMock,\n ).run();\n\n // THEN\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new ProvideProxyInfoCommand({\n data: hexaStringToBuffer(\"0x0003010203\")!,\n isFirstChunk: true,\n }),\n );\n });\n\n it(\"Error when providing tokens\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n deviceModelId: DeviceModelId.STAX,\n derivationPath: \"44'/60'/0'/0/0\",\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Just(TEST_CLEAR_SIGN_CONTEXT),\n calldatasContexts: {},\n };\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError(\"error\"),\n }),\n );\n // WHEN\n const promise = new ProvideEIP712ContextTask(\n apiMock,\n contextModuleMock,\n args,\n provideContextFactoryMock,\n ).run();\n\n // THEN\n await expect(promise).resolves.toStrictEqual(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError(\"error\"),\n }),\n );\n });\n\n it(\"Error when sending struct definitions\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n deviceModelId: DeviceModelId.STAX,\n derivationPath: \"44'/60'/0'/0/0\",\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Just(TEST_CLEAR_SIGN_CONTEXT),\n calldatasContexts: {},\n };\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: { tokenIndex: 4 } }))\n .mockResolvedValueOnce(CommandResultFactory({ data: { tokenIndex: 5 } }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError(\"error\"),\n }),\n );\n // WHEN\n const promise = new ProvideEIP712ContextTask(\n apiMock,\n contextModuleMock,\n args,\n provideContextFactoryMock,\n ).run();\n\n // THEN\n await expect(promise).resolves.toStrictEqual(\n CommandResultFactory({ error: new UnknownDeviceExchangeError(\"error\") }),\n );\n });\n\n it(\"Error when sending struct implementations\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n deviceModelId: DeviceModelId.STAX,\n derivationPath: \"44'/60'/0'/0/0\",\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Nothing,\n calldatasContexts: {},\n };\n // WHEN\n apiMock.sendCommand\n // Struct definitions\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n // Struct implementations\n .mockResolvedValueOnce(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError(\"error\"),\n }),\n )\n .mockResolvedValue(CommandResultFactory({ data: undefined }));\n const promise = new ProvideEIP712ContextTask(\n apiMock,\n contextModuleMock,\n args,\n provideContextFactoryMock,\n ).run();\n\n // THEN\n await expect(promise).resolves.toStrictEqual(\n CommandResultFactory({ error: new UnknownDeviceExchangeError(\"error\") }),\n );\n });\n\n it(\"Send struct array\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n deviceModelId: DeviceModelId.STAX,\n derivationPath: \"44'/60'/0'/0/0\",\n types: {},\n domain: [],\n message: [\n // Array containing an element\n {\n path: \"spenders\",\n type: \"address[]\",\n value: new TypedDataValueArray(1),\n },\n {\n path: \"spenders.[]\",\n type: \"address\",\n value: new TypedDataValueField(\n hexaStringToBuffer(\"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\")!,\n ),\n },\n // Empty array\n {\n path: \"beneficiaries\",\n type: \"address[]\",\n value: new TypedDataValueArray(0),\n },\n ],\n clearSignContext: Just({\n type: \"success\",\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 2,\n signature: \"sig\",\n },\n trustedNamesAddresses: {},\n calldatas: {},\n proxy: undefined,\n tokens: {},\n filters: {\n \"spenders.[]\": {\n displayName: \"Spender\",\n path: \"spenders.[]\",\n signature: \"sig\",\n type: \"raw\",\n },\n \"beneficiaries.[]\": {\n displayName: \"Beneficiary\",\n path: \"beneficiaries.[]\",\n signature: \"sig\",\n type: \"raw\",\n },\n },\n }),\n calldatasContexts: {},\n };\n // WHEN\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n await new ProvideEIP712ContextTask(\n apiMock,\n contextModuleMock,\n args,\n provideContextFactoryMock,\n ).run();\n\n // THEN\n // Activate the filtering\n expect(apiMock.sendCommand.mock.calls[0]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({ type: Eip712FilterType.Activation }),\n );\n // Send the message information filter\n expect(apiMock.sendCommand.mock.calls[1]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.MessageInfo,\n displayName: \"Permit2\",\n filtersCount: 2,\n signature: \"sig\",\n }),\n );\n // Send first array containing 1 element\n expect(apiMock.sendCommand.mock.calls[2]![0]).toStrictEqual(\n sendStructImplArray(1),\n );\n expect(apiMock.sendCommand.mock.calls[3]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Raw,\n discarded: false,\n displayName: \"Spender\",\n signature: \"sig\",\n }),\n );\n expect(apiMock.sendCommand.mock.calls[4]![0]).toStrictEqual(\n sendStructImplField(\n Uint8Array.from([\n 0x00, 0x14, 0x7c, 0xeb, 0x23, 0xfd, 0x6b, 0xc0, 0xad, 0xd5, 0x9e,\n 0x62, 0xac, 0x25, 0x57, 0x82, 0x70, 0xcf, 0xf1, 0xb9, 0xf6, 0x19,\n ]),\n ),\n );\n // Send second empty array, with discarded filter\n expect(apiMock.sendCommand.mock.calls[5]![0]).toStrictEqual(\n sendStructImplArray(0),\n );\n expect(apiMock.sendCommand.mock.calls[6]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.DiscardedPath,\n path: \"beneficiaries.[]\",\n }),\n );\n expect(apiMock.sendCommand.mock.calls[7]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Raw,\n discarded: true,\n displayName: \"Beneficiary\",\n signature: \"sig\",\n }),\n );\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["ClearSignContextType", "TypedDataCalldataParamPresence", "CommandResultFactory", "DeviceModelId", "hexaStringToBuffer", "UnknownDeviceExchangeError", "Just", "Nothing", "ProvideProxyInfoCommand", "ProvideTokenInformationCommand", "CalldataParamPresence", "Eip712FilterType", "SendEIP712FilteringCommand", "SendEIP712StructDefinitionCommand", "StructDefinitionCommand", "SendEIP712StructImplemCommand", "StructImplemType", "makeDeviceActionInternalApiMock", "PrimitiveType", "StructType", "TypedDataValueArray", "TypedDataValueField", "TypedDataValueRoot", "ProvideEIP712ContextTask", "apiMock", "provideContextFactoryMock", "contextModuleMock", "TEST_TYPES", "TEST_DOMAIN_VALUES", "TEST_MESSAGE_VALUES", "TEST_CLEAR_SIGN_CONTEXT", "ADDRESS", "STRING", "UINT256", "UINT160", "UINT48", "CUSTOM", "name", "sendStructDefName", "sendStructDefField", "type", "sendStructImplRoot", "value", "sendStructImplArray", "sendStructImplField", "data", "args", "proxy", "clearSignContext", "promise"]
4
+ "sourcesContent": ["import {\n type ClearSignContextSuccess,\n ClearSignContextType,\n TypedDataCalldataParamPresence,\n type TypedDataClearSignContextSuccess,\n} from \"@ledgerhq/context-module\";\nimport {\n CommandResultFactory,\n DeviceModelId,\n hexaStringToBuffer,\n LoadCertificateCommand,\n UnknownDeviceExchangeError,\n} from \"@ledgerhq/device-management-kit\";\nimport { Just, Nothing } from \"purify-ts\";\n\nimport { ProvideProxyInfoCommand } from \"@internal/app-binder/command/ProvideProxyInfoCommand\";\nimport { ProvideTokenInformationCommand } from \"@internal/app-binder/command/ProvideTokenInformationCommand\";\nimport {\n CalldataParamPresence,\n Eip712FilterType,\n SendEIP712FilteringCommand,\n} from \"@internal/app-binder/command/SendEIP712FilteringCommand\";\nimport {\n SendEIP712StructDefinitionCommand,\n StructDefinitionCommand,\n} from \"@internal/app-binder/command/SendEIP712StructDefinitionCommand\";\nimport {\n SendEIP712StructImplemCommand,\n StructImplemType,\n} from \"@internal/app-binder/command/SendEIP712StructImplemCommand\";\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\nimport {\n type FieldType,\n PrimitiveType,\n StructType,\n TypedDataValueArray,\n TypedDataValueField,\n TypedDataValueRoot,\n} from \"@internal/typed-data/model/Types\";\n\nimport {\n ProvideEIP712ContextTask,\n type ProvideEIP712ContextTaskArgs,\n} from \"./ProvideEIP712ContextTask\";\n\nconst mockLogger = {\n debug: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n subscribers: [],\n};\n\ndescribe(\"ProvideEIP712ContextTask\", () => {\n const apiMock = makeDeviceActionInternalApiMock();\n const provideContextFactoryMock = vi.fn();\n const contextModuleMock = {\n getFieldContext: vi.fn(),\n getContexts: vi.fn(),\n getTypedDataFilters: vi.fn(),\n getSolanaContext: vi.fn(),\n };\n\n const TEST_TYPES = {\n EIP712Domain: {\n name: new PrimitiveType(\"string\", \"string\", Nothing),\n chainId: new PrimitiveType(\"uint256\", \"uint\", Just(32)),\n verifyingContract: new PrimitiveType(\"address\", \"address\", Nothing),\n },\n PermitSingle: {\n details: new StructType(\"PermitDetails\"),\n spender: new PrimitiveType(\"address\", \"address\", Nothing),\n sigDeadline: new PrimitiveType(\"uint256\", \"uint\", Just(32)),\n },\n PermitDetails: {\n token: new PrimitiveType(\"address\", \"address\", Nothing),\n amount: new PrimitiveType(\"uint160\", \"uint\", Just(20)),\n expiration: new PrimitiveType(\"uint48\", \"uint\", Just(6)),\n nonce: new PrimitiveType(\"uint48\", \"uint\", Just(6)),\n },\n };\n const TEST_DOMAIN_VALUES = [\n {\n path: \"\",\n type: \"\",\n value: new TypedDataValueRoot(\"EIP712Domain\"),\n },\n {\n path: \"name\",\n type: \"string\",\n value: new TypedDataValueField(new TextEncoder().encode(\"Permit2\")),\n },\n {\n path: \"chainId\",\n type: \"uint256\",\n value: new TypedDataValueField(Uint8Array.from([137])),\n },\n {\n path: \"verifyingContract\",\n type: \"address\",\n value: new TypedDataValueField(\n hexaStringToBuffer(\"0x000000000022d473030f116ddee9f6b43ac78ba3\")!,\n ),\n },\n ];\n const TEST_MESSAGE_VALUES = [\n {\n path: \"\",\n type: \"\",\n value: new TypedDataValueRoot(\"PermitSingle\"),\n },\n {\n path: \"details.token\",\n type: \"address\",\n value: new TypedDataValueField(\n hexaStringToBuffer(\"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\")!,\n ),\n },\n {\n path: \"details.amount\",\n type: \"uint160\",\n value: new TypedDataValueField(Uint8Array.from([0x12])),\n },\n {\n path: \"details.expiration\",\n type: \"uint48\",\n value: new TypedDataValueField(Uint8Array.from([0x12])),\n },\n {\n path: \"details.nonce\",\n type: \"uint48\",\n value: new TypedDataValueField(Uint8Array.from([0x00])),\n },\n {\n path: \"spender\",\n type: \"address\",\n value: new TypedDataValueField(\n hexaStringToBuffer(\"0xec7be89e9d109e7e3fec59c222cf297125fefda2\")!,\n ),\n },\n {\n path: \"sigDeadline\",\n type: \"uint256\",\n value: new TypedDataValueField(Uint8Array.from([0x12])),\n },\n ];\n const TEST_CLEAR_SIGN_CONTEXT: TypedDataClearSignContextSuccess = {\n type: \"success\",\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 4,\n signature:\n \"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3\",\n },\n trustedNamesAddresses: {},\n calldatas: {},\n proxy: undefined,\n tokens: {\n 0: \"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\",\n 255: \"payload-0x000000000022d473030f116ddee9f6b43ac78ba3\",\n },\n filters: {\n \"details.amount\": {\n displayName: \"Amount allowance\",\n path: \"details.amount\",\n signature:\n \"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n tokenIndex: 255,\n type: \"amount\",\n },\n \"details.expiration\": {\n displayName: \"Approval expire\",\n path: \"details.expiration\",\n signature:\n \"3044022056b3381e4540629ad73bc434ec49d80523234b82f62340fbb77157fb0eb21a680220459fe9cf6ca309f9c7dfc6d4711fea1848dba661563c57f77b3c2dc480b3a63b\",\n type: \"datetime\",\n },\n \"details.token\": {\n displayName: \"Amount allowance\",\n path: \"details.token\",\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n tokenIndex: 0,\n type: \"token\",\n },\n spender: {\n displayName: \"Approve to spender\",\n path: \"spender\",\n signature:\n \"3044022033e5713d9cb9bc375b56a9fb53b736c81ea3c4ac5cfb2d3ca7f8b8f0558fe2430220543ca4fef6d6f725f29e343f167fe9dd582aa856ecb5797259050eb990a1befb\",\n type: \"raw\",\n },\n },\n };\n\n const ADDRESS = new PrimitiveType(\"address\", \"address\", Nothing);\n const STRING = new PrimitiveType(\"string\", \"string\", Nothing);\n const UINT256 = new PrimitiveType(\"uint256\", \"uint\", Just(32));\n const UINT160 = new PrimitiveType(\"uint160\", \"uint\", Just(20));\n const UINT48 = new PrimitiveType(\"uint48\", \"uint\", Just(6));\n const CUSTOM = (name: string) => new StructType(name);\n\n const sendStructDefName = (name: string) =>\n new SendEIP712StructDefinitionCommand({\n command: StructDefinitionCommand.Name,\n name,\n });\n const sendStructDefField = (name: string, type: FieldType) =>\n new SendEIP712StructDefinitionCommand({\n command: StructDefinitionCommand.Field,\n name,\n type,\n });\n const sendStructImplRoot = (value: string) =>\n new SendEIP712StructImplemCommand({\n type: StructImplemType.ROOT,\n value,\n });\n const sendStructImplArray = (value: number) =>\n new SendEIP712StructImplemCommand({\n type: StructImplemType.ARRAY,\n value,\n });\n const sendStructImplField = (data: Uint8Array) =>\n new SendEIP712StructImplemCommand({\n type: StructImplemType.FIELD,\n value: {\n data,\n isLastChunk: true,\n },\n });\n\n beforeEach(() => {\n vi.resetAllMocks();\n provideContextFactoryMock.mockReturnValue({\n run: async () => undefined,\n });\n });\n\n it(\"Send context with no clear signing context\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n deviceModelId: DeviceModelId.STAX,\n derivationPath: \"44'/60'/0'/0/0\",\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Nothing,\n calldatasContexts: {},\n logger: mockLogger,\n };\n // WHEN\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n await new ProvideEIP712ContextTask(\n apiMock,\n contextModuleMock,\n args,\n provideContextFactoryMock,\n ).run();\n\n // THEN\n expect(apiMock.sendCommand.mock.calls).toHaveLength(24);\n // Send Struct definitions\n expect(apiMock.sendCommand.mock.calls[0]![0]).toStrictEqual(\n sendStructDefName(\"EIP712Domain\"),\n );\n expect(apiMock.sendCommand.mock.calls[1]![0]).toStrictEqual(\n sendStructDefField(\"name\", STRING),\n );\n expect(apiMock.sendCommand.mock.calls[2]![0]).toStrictEqual(\n sendStructDefField(\"chainId\", UINT256),\n );\n expect(apiMock.sendCommand.mock.calls[3]![0]).toStrictEqual(\n sendStructDefField(\"verifyingContract\", ADDRESS),\n );\n expect(apiMock.sendCommand.mock.calls[4]![0]).toStrictEqual(\n sendStructDefName(\"PermitDetails\"),\n );\n expect(apiMock.sendCommand.mock.calls[5]![0]).toStrictEqual(\n sendStructDefField(\"token\", ADDRESS),\n );\n expect(apiMock.sendCommand.mock.calls[6]![0]).toStrictEqual(\n sendStructDefField(\"amount\", UINT160),\n );\n expect(apiMock.sendCommand.mock.calls[7]![0]).toStrictEqual(\n sendStructDefField(\"expiration\", UINT48),\n );\n expect(apiMock.sendCommand.mock.calls[8]![0]).toStrictEqual(\n sendStructDefField(\"nonce\", UINT48),\n );\n expect(apiMock.sendCommand.mock.calls[9]![0]).toStrictEqual(\n sendStructDefName(\"PermitSingle\"),\n );\n expect(apiMock.sendCommand.mock.calls[10]![0]).toStrictEqual(\n sendStructDefField(\"details\", CUSTOM(\"PermitDetails\")),\n );\n expect(apiMock.sendCommand.mock.calls[11]![0]).toStrictEqual(\n sendStructDefField(\"spender\", ADDRESS),\n );\n expect(apiMock.sendCommand.mock.calls[12]![0]).toStrictEqual(\n sendStructDefField(\"sigDeadline\", UINT256),\n );\n // Send the domain values\n expect(apiMock.sendCommand.mock.calls[13]![0]).toStrictEqual(\n sendStructImplRoot(\"EIP712Domain\"),\n );\n expect(apiMock.sendCommand.mock.calls[14]![0]).toStrictEqual(\n sendStructImplField(\n Uint8Array.from([0x00, 0x07, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x32]),\n ),\n );\n expect(apiMock.sendCommand.mock.calls[15]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x89])),\n );\n expect(apiMock.sendCommand.mock.calls[16]![0]).toStrictEqual(\n sendStructImplField(\n Uint8Array.from([\n 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0xd4, 0x73, 0x03,\n 0x0f, 0x11, 0x6d, 0xde, 0xe9, 0xf6, 0xb4, 0x3a, 0xc7, 0x8b, 0xa3,\n ]),\n ),\n );\n // Send the message values\n expect(apiMock.sendCommand.mock.calls[17]![0]).toStrictEqual(\n sendStructImplRoot(\"PermitSingle\"),\n );\n expect(apiMock.sendCommand.mock.calls[18]![0]).toStrictEqual(\n sendStructImplField(\n Uint8Array.from([\n 0x00, 0x14, 0x7c, 0xeb, 0x23, 0xfd, 0x6b, 0xc0, 0xad, 0xd5, 0x9e,\n 0x62, 0xac, 0x25, 0x57, 0x82, 0x70, 0xcf, 0xf1, 0xb9, 0xf6, 0x19,\n ]),\n ),\n );\n expect(apiMock.sendCommand.mock.calls[19]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x12])),\n );\n expect(apiMock.sendCommand.mock.calls[20]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x12])),\n );\n expect(apiMock.sendCommand.mock.calls[21]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x00])),\n );\n expect(apiMock.sendCommand.mock.calls[22]![0]).toStrictEqual(\n sendStructImplField(\n Uint8Array.from([\n 0x00, 0x14, 0xec, 0x7b, 0xe8, 0x9e, 0x9d, 0x10, 0x9e, 0x7e, 0x3f,\n 0xec, 0x59, 0xc2, 0x22, 0xcf, 0x29, 0x71, 0x25, 0xfe, 0xfd, 0xa2,\n ]),\n ),\n );\n expect(apiMock.sendCommand.mock.calls[23]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x12])),\n );\n });\n\n it(\"Send context with transaction check\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n deviceModelId: DeviceModelId.STAX,\n derivationPath: \"44'/60'/0'/0/0\",\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Nothing,\n calldatasContexts: {},\n transactionChecks: {\n type: ClearSignContextType.TRANSACTION_CHECK,\n payload: \"transactionCheck\",\n certificate: {\n keyUsageNumber: 1,\n payload: new Uint8Array([0x01, 0x02, 0x03]),\n },\n },\n logger: mockLogger,\n };\n // WHEN\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n await new ProvideEIP712ContextTask(\n apiMock,\n contextModuleMock,\n args,\n provideContextFactoryMock,\n ).run();\n\n // THEN\n expect(apiMock.sendCommand.mock.calls).toHaveLength(25);\n });\n\n it(\"Send context with clear signing\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n deviceModelId: DeviceModelId.STAX,\n derivationPath: \"44'/60'/0'/0/0\",\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Just(TEST_CLEAR_SIGN_CONTEXT),\n calldatasContexts: {},\n logger: mockLogger,\n };\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: { tokenIndex: 4 } })) // First token provided\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: { tokenIndex: 5 } })); // Second token provided\n // WHEN\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n await new ProvideEIP712ContextTask(\n apiMock,\n contextModuleMock,\n args,\n provideContextFactoryMock,\n ).run();\n\n // THEN\n expect(apiMock.sendCommand.mock.calls).toHaveLength(32);\n // Send Struct definitions\n expect(apiMock.sendCommand.mock.calls[0]![0]).toStrictEqual(\n sendStructDefName(\"EIP712Domain\"),\n );\n expect(apiMock.sendCommand.mock.calls[1]![0]).toStrictEqual(\n sendStructDefField(\"name\", STRING),\n );\n expect(apiMock.sendCommand.mock.calls[2]![0]).toStrictEqual(\n sendStructDefField(\"chainId\", UINT256),\n );\n expect(apiMock.sendCommand.mock.calls[3]![0]).toStrictEqual(\n sendStructDefField(\"verifyingContract\", ADDRESS),\n );\n expect(apiMock.sendCommand.mock.calls[4]![0]).toStrictEqual(\n sendStructDefName(\"PermitDetails\"),\n );\n expect(apiMock.sendCommand.mock.calls[5]![0]).toStrictEqual(\n sendStructDefField(\"token\", ADDRESS),\n );\n expect(apiMock.sendCommand.mock.calls[6]![0]).toStrictEqual(\n sendStructDefField(\"amount\", UINT160),\n );\n expect(apiMock.sendCommand.mock.calls[7]![0]).toStrictEqual(\n sendStructDefField(\"expiration\", UINT48),\n );\n expect(apiMock.sendCommand.mock.calls[8]![0]).toStrictEqual(\n sendStructDefField(\"nonce\", UINT48),\n );\n expect(apiMock.sendCommand.mock.calls[9]![0]).toStrictEqual(\n sendStructDefName(\"PermitSingle\"),\n );\n expect(apiMock.sendCommand.mock.calls[10]![0]).toStrictEqual(\n sendStructDefField(\"details\", CUSTOM(\"PermitDetails\")),\n );\n expect(apiMock.sendCommand.mock.calls[11]![0]).toStrictEqual(\n sendStructDefField(\"spender\", ADDRESS),\n );\n expect(apiMock.sendCommand.mock.calls[12]![0]).toStrictEqual(\n sendStructDefField(\"sigDeadline\", UINT256),\n );\n // Activate the filtering\n expect(apiMock.sendCommand.mock.calls[13]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({ type: Eip712FilterType.Activation }),\n );\n // Send the domain values\n expect(apiMock.sendCommand.mock.calls[14]![0]).toStrictEqual(\n sendStructImplRoot(\"EIP712Domain\"),\n );\n expect(apiMock.sendCommand.mock.calls[15]![0]).toStrictEqual(\n sendStructImplField(\n Uint8Array.from([0x00, 0x07, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x32]),\n ),\n );\n expect(apiMock.sendCommand.mock.calls[16]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x89])),\n );\n expect(apiMock.sendCommand.mock.calls[17]![0]).toStrictEqual(\n sendStructImplField(\n Uint8Array.from([\n 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0xd4, 0x73, 0x03,\n 0x0f, 0x11, 0x6d, 0xde, 0xe9, 0xf6, 0xb4, 0x3a, 0xc7, 0x8b, 0xa3,\n ]),\n ),\n );\n // Send the message information filter\n expect(apiMock.sendCommand.mock.calls[18]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.MessageInfo,\n displayName: \"Permit2\",\n filtersCount: 4,\n signature:\n \"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3\",\n }),\n );\n // Send the message values with corresponding filters\n expect(apiMock.sendCommand.mock.calls[19]![0]).toStrictEqual(\n sendStructImplRoot(\"PermitSingle\"),\n );\n expect(apiMock.sendCommand.mock.calls[20]![0]).toStrictEqual(\n new ProvideTokenInformationCommand({\n payload: \"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\",\n }),\n );\n expect(apiMock.sendCommand.mock.calls[21]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Token,\n discarded: false,\n tokenIndex: 4,\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n }),\n );\n expect(apiMock.sendCommand.mock.calls[22]![0]).toStrictEqual(\n sendStructImplField(\n Uint8Array.from([\n 0x00, 0x14, 0x7c, 0xeb, 0x23, 0xfd, 0x6b, 0xc0, 0xad, 0xd5, 0x9e,\n 0x62, 0xac, 0x25, 0x57, 0x82, 0x70, 0xcf, 0xf1, 0xb9, 0xf6, 0x19,\n ]),\n ),\n );\n expect(apiMock.sendCommand.mock.calls[23]![0]).toStrictEqual(\n new ProvideTokenInformationCommand({\n payload: \"payload-0x000000000022d473030f116ddee9f6b43ac78ba3\",\n }),\n );\n expect(apiMock.sendCommand.mock.calls[24]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Amount,\n discarded: false,\n displayName: \"Amount allowance\",\n tokenIndex: 255,\n signature:\n \"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n }),\n );\n expect(apiMock.sendCommand.mock.calls[25]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x12])),\n );\n expect(apiMock.sendCommand.mock.calls[26]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Datetime,\n discarded: false,\n displayName: \"Approval expire\",\n signature:\n \"3044022056b3381e4540629ad73bc434ec49d80523234b82f62340fbb77157fb0eb21a680220459fe9cf6ca309f9c7dfc6d4711fea1848dba661563c57f77b3c2dc480b3a63b\",\n }),\n );\n expect(apiMock.sendCommand.mock.calls[27]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x12])),\n );\n expect(apiMock.sendCommand.mock.calls[28]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x00])),\n );\n expect(apiMock.sendCommand.mock.calls[29]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Raw,\n discarded: false,\n displayName: \"Approve to spender\",\n signature:\n \"3044022033e5713d9cb9bc375b56a9fb53b736c81ea3c4ac5cfb2d3ca7f8b8f0558fe2430220543ca4fef6d6f725f29e343f167fe9dd582aa856ecb5797259050eb990a1befb\",\n }),\n );\n expect(apiMock.sendCommand.mock.calls[30]![0]).toStrictEqual(\n sendStructImplField(\n Uint8Array.from([\n 0x00, 0x14, 0xec, 0x7b, 0xe8, 0x9e, 0x9d, 0x10, 0x9e, 0x7e, 0x3f,\n 0xec, 0x59, 0xc2, 0x22, 0xcf, 0x29, 0x71, 0x25, 0xfe, 0xfd, 0xa2,\n ]),\n ),\n );\n expect(apiMock.sendCommand.mock.calls[31]![0]).toStrictEqual(\n sendStructImplField(Uint8Array.from([0x00, 0x01, 0x12])),\n );\n });\n\n it(\"Both tokens unavailable\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n deviceModelId: DeviceModelId.STAX,\n derivationPath: \"44'/60'/0'/0/0\",\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Just({\n type: \"success\",\n messageInfo: TEST_CLEAR_SIGN_CONTEXT.messageInfo,\n filters: TEST_CLEAR_SIGN_CONTEXT.filters,\n trustedNamesAddresses: {},\n calldatas: {},\n proxy: undefined,\n tokens: {},\n }),\n calldatasContexts: {},\n logger: mockLogger,\n };\n\n // WHEN\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n await new ProvideEIP712ContextTask(\n apiMock,\n contextModuleMock,\n args,\n provideContextFactoryMock,\n ).run();\n\n // THEN\n expect(apiMock.sendCommand).not.toHaveBeenCalledWith(\n new ProvideTokenInformationCommand({\n payload: \"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\",\n }),\n );\n expect(apiMock.sendCommand).not.toHaveBeenCalledWith(\n new ProvideTokenInformationCommand({\n payload: \"payload-0x000000000022d473030f116ddee9f6b43ac78ba3\",\n }),\n );\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Token,\n discarded: false,\n tokenIndex: 0,\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n }),\n );\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Amount,\n discarded: false,\n displayName: \"Amount allowance\",\n tokenIndex: 1,\n signature:\n \"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n }),\n );\n });\n\n it(\"Provide calldata filters\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n deviceModelId: DeviceModelId.STAX,\n derivationPath: \"44'/60'/0'/0/0\",\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Just({\n type: \"success\",\n messageInfo: TEST_CLEAR_SIGN_CONTEXT.messageInfo,\n filters: {\n \"details.amount\": {\n displayName: \"Value\",\n path: \"details.amount\",\n signature:\n \"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n calldataIndex: 0,\n type: \"calldata-value\",\n },\n \"details.expiration\": {\n displayName: \"Callee\",\n path: \"details.expiration\",\n signature:\n \"304502201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n calldataIndex: 0,\n type: \"calldata-callee\",\n },\n spender: {\n displayName: \"Spender\",\n path: \"spender\",\n signature:\n \"304602201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n calldataIndex: 0,\n type: \"calldata-spender\",\n },\n \"details.token\": {\n displayName: \"Chain ID\",\n path: \"details.token\",\n signature:\n \"304702201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n calldataIndex: 0,\n type: \"calldata-chain-id\",\n },\n \"details.nonce\": {\n displayName: \"Chain ID\",\n path: \"details.nonce\",\n signature:\n \"304802201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n calldataIndex: 1,\n type: \"calldata-selector\",\n },\n sigDeadline: {\n displayName: \"Amount\",\n path: \"sigDeadline\",\n signature:\n \"304902201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n calldataIndex: 1,\n type: \"calldata-amount\",\n },\n },\n trustedNamesAddresses: {},\n calldatas: {\n 0: {\n filter: {\n calldataIndex: 0,\n displayName: \"Transaction\",\n valueFlag: true,\n calleeFlag: TypedDataCalldataParamPresence.Present,\n chainIdFlag: false,\n selectorFlag: false,\n amountFlag: true,\n spenderFlag: TypedDataCalldataParamPresence.VerifyingContract,\n signature:\n \"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e\",\n },\n subset: {\n chainId: 0x1234,\n data: \"0x6a76120200000000000000000000000023f8abfc2824c397ccb3da89ae772984107ddb99\",\n from: \"0x8ceb23fd6bc0add59e62ac25578270cff1b9f619\",\n selector: \"0x778899aa\",\n to: \"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\",\n value: 4200000000000000n,\n },\n },\n 1: {\n filter: {\n calldataIndex: 1,\n displayName: \"Transaction\",\n valueFlag: true,\n calleeFlag: TypedDataCalldataParamPresence.Present,\n chainIdFlag: false,\n selectorFlag: false,\n amountFlag: true,\n spenderFlag: TypedDataCalldataParamPresence.VerifyingContract,\n signature:\n \"3045932100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e\",\n },\n subset: {\n chainId: 0x1235,\n data: \"0x6a76120200000000000000000000000023f8abfc2824c397ccb3da89ae772984107ddb99\",\n from: \"0x8ceb23fd6bc0add59e62ac25578270cff1b9f619\",\n selector: \"0x778899aa\",\n to: \"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\",\n value: 4300000000000000n,\n },\n },\n },\n proxy: undefined,\n tokens: {},\n }),\n calldatasContexts: {\n 0: [],\n },\n logger: mockLogger,\n };\n\n // WHEN\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n await new ProvideEIP712ContextTask(\n apiMock,\n contextModuleMock,\n args,\n provideContextFactoryMock,\n ).run();\n\n // THEN\n expect(provideContextFactoryMock).toHaveBeenCalledTimes(1);\n expect(provideContextFactoryMock).toHaveBeenCalledWith({\n contexts: [],\n derivationPath: \"44'/60'/0'/0/0\",\n logger: mockLogger,\n });\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.CalldataInfo,\n discarded: false,\n calldataIndex: 0,\n valueFlag: true,\n calleeFlag: CalldataParamPresence.Present,\n chainIdFlag: false,\n selectorFlag: false,\n amountFlag: true,\n spenderFlag: CalldataParamPresence.VerifyingContract,\n signature:\n \"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e\",\n }),\n );\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.CalldataValue,\n discarded: false,\n calldataIndex: 0,\n signature:\n \"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n }),\n );\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.CalldataCallee,\n discarded: false,\n calldataIndex: 0,\n signature:\n \"304502201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n }),\n );\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.CalldataSpender,\n discarded: false,\n calldataIndex: 0,\n signature:\n \"304602201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n }),\n );\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.CalldataChainId,\n discarded: false,\n calldataIndex: 0,\n signature:\n \"304702201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n }),\n );\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.CalldataInfo,\n discarded: false,\n calldataIndex: 1,\n valueFlag: true,\n calleeFlag: CalldataParamPresence.Present,\n chainIdFlag: false,\n selectorFlag: false,\n amountFlag: true,\n spenderFlag: CalldataParamPresence.VerifyingContract,\n signature:\n \"3045932100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e\",\n }),\n );\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.CalldataSelector,\n discarded: false,\n calldataIndex: 1,\n signature:\n \"304802201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n }),\n );\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.CalldataAmount,\n discarded: false,\n calldataIndex: 1,\n signature:\n \"304902201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n }),\n );\n });\n\n it(\"First token unavailable\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n deviceModelId: DeviceModelId.STAX,\n derivationPath: \"44'/60'/0'/0/0\",\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Just({\n type: \"success\",\n messageInfo: TEST_CLEAR_SIGN_CONTEXT.messageInfo,\n filters: TEST_CLEAR_SIGN_CONTEXT.filters,\n trustedNamesAddresses: {},\n calldatas: {},\n proxy: undefined,\n tokens: { 255: \"payload-0x000000000022d473030f116ddee9f6b43ac78ba3\" },\n }),\n calldatasContexts: {},\n logger: mockLogger,\n };\n\n // WHEN\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: { tokenIndex: 4 } }),\n );\n await new ProvideEIP712ContextTask(\n apiMock,\n contextModuleMock,\n args,\n provideContextFactoryMock,\n ).run();\n\n // THEN\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Token,\n discarded: false,\n tokenIndex: 0,\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n }),\n );\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Amount,\n discarded: false,\n displayName: \"Amount allowance\",\n tokenIndex: 255,\n signature:\n \"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n }),\n );\n });\n\n it(\"Second token unavailable\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n deviceModelId: DeviceModelId.STAX,\n derivationPath: \"44'/60'/0'/0/0\",\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Just({\n type: \"success\",\n messageInfo: TEST_CLEAR_SIGN_CONTEXT.messageInfo,\n filters: TEST_CLEAR_SIGN_CONTEXT.filters,\n trustedNamesAddresses: {},\n calldatas: {},\n proxy: undefined,\n tokens: { 0: \"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\" },\n }),\n calldatasContexts: {},\n logger: mockLogger,\n };\n\n // WHEN\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: { tokenIndex: 4 } }),\n );\n await new ProvideEIP712ContextTask(\n apiMock,\n contextModuleMock,\n args,\n provideContextFactoryMock,\n ).run();\n\n // THEN\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Token,\n discarded: false,\n tokenIndex: 4,\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n }),\n );\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Amount,\n discarded: false,\n displayName: \"Amount allowance\",\n tokenIndex: 0,\n signature:\n \"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n }),\n );\n });\n\n it(\"Provide proxy\", async () => {\n // GIVEN\n const proxy: ClearSignContextSuccess<ClearSignContextType.PROXY_INFO> = {\n type: ClearSignContextType.PROXY_INFO,\n payload: \"0x010203\",\n };\n const clearSignContext: TypedDataClearSignContextSuccess = {\n ...TEST_CLEAR_SIGN_CONTEXT,\n proxy,\n };\n const args: ProvideEIP712ContextTaskArgs = {\n deviceModelId: DeviceModelId.STAX,\n derivationPath: \"44'/60'/0'/0/0\",\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Just(clearSignContext),\n calldatasContexts: {},\n logger: mockLogger,\n };\n\n // WHEN\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: { tokenIndex: 4 } }),\n );\n await new ProvideEIP712ContextTask(\n apiMock,\n contextModuleMock,\n args,\n provideContextFactoryMock,\n ).run();\n\n // THEN\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new ProvideProxyInfoCommand({\n data: hexaStringToBuffer(\"0x0003010203\")!,\n isFirstChunk: true,\n }),\n );\n });\n\n it(\"Send certificate from clearSignContext\", async () => {\n // GIVEN\n const certificatePayload = new Uint8Array([0x01, 0x02, 0x03, 0x04, 0x05]);\n const keyUsage = 2;\n const clearSignContext: TypedDataClearSignContextSuccess = {\n ...TEST_CLEAR_SIGN_CONTEXT,\n certificate: {\n keyUsageNumber: keyUsage,\n payload: certificatePayload,\n },\n };\n const args: ProvideEIP712ContextTaskArgs = {\n deviceModelId: DeviceModelId.STAX,\n derivationPath: \"44'/60'/0'/0/0\",\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Just(clearSignContext),\n calldatasContexts: {},\n logger: mockLogger,\n };\n\n // WHEN\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: { tokenIndex: 4 } }),\n );\n await new ProvideEIP712ContextTask(\n apiMock,\n contextModuleMock,\n args,\n provideContextFactoryMock,\n ).run();\n\n // THEN\n // Verify LoadCertificateCommand was called with correct parameters\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new LoadCertificateCommand({\n keyUsage: keyUsage,\n certificate: certificatePayload,\n }),\n );\n\n // Verify the certificate was loaded before struct definitions (should be first call)\n const calls = apiMock.sendCommand.mock.calls;\n const certificateCallIndex = calls.findIndex(\n (call) => call[0] instanceof LoadCertificateCommand,\n );\n expect(certificateCallIndex).toBeGreaterThanOrEqual(0);\n\n // Verify it was called before struct definitions\n const firstStructDefCallIndex = calls.findIndex(\n (call) => call[0] instanceof SendEIP712StructDefinitionCommand,\n );\n expect(certificateCallIndex).toBeLessThan(firstStructDefCallIndex);\n });\n\n it(\"Do not send certificate when not provided in clearSignContext\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n deviceModelId: DeviceModelId.STAX,\n derivationPath: \"44'/60'/0'/0/0\",\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Just(TEST_CLEAR_SIGN_CONTEXT), // No certificate in this context\n calldatasContexts: {},\n logger: mockLogger,\n };\n\n // WHEN\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: { tokenIndex: 4 } }),\n );\n await new ProvideEIP712ContextTask(\n apiMock,\n contextModuleMock,\n args,\n provideContextFactoryMock,\n ).run();\n\n // THEN\n // Verify LoadCertificateCommand was not called\n const calls = apiMock.sendCommand.mock.calls;\n const certificateCallIndex = calls.findIndex(\n (call) => call[0] instanceof LoadCertificateCommand,\n );\n expect(certificateCallIndex).toBe(-1);\n });\n\n it(\"Error when providing tokens\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n deviceModelId: DeviceModelId.STAX,\n derivationPath: \"44'/60'/0'/0/0\",\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Just(TEST_CLEAR_SIGN_CONTEXT),\n calldatasContexts: {},\n logger: mockLogger,\n };\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError(\"error\"),\n }),\n );\n // WHEN\n const promise = new ProvideEIP712ContextTask(\n apiMock,\n contextModuleMock,\n args,\n provideContextFactoryMock,\n ).run();\n\n // THEN\n await expect(promise).resolves.toStrictEqual(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError(\"error\"),\n }),\n );\n });\n\n it(\"Error when sending struct definitions\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n deviceModelId: DeviceModelId.STAX,\n derivationPath: \"44'/60'/0'/0/0\",\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Just(TEST_CLEAR_SIGN_CONTEXT),\n calldatasContexts: {},\n logger: mockLogger,\n };\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: { tokenIndex: 4 } }))\n .mockResolvedValueOnce(CommandResultFactory({ data: { tokenIndex: 5 } }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError(\"error\"),\n }),\n );\n // WHEN\n const promise = new ProvideEIP712ContextTask(\n apiMock,\n contextModuleMock,\n args,\n provideContextFactoryMock,\n ).run();\n\n // THEN\n await expect(promise).resolves.toStrictEqual(\n CommandResultFactory({ error: new UnknownDeviceExchangeError(\"error\") }),\n );\n });\n\n it(\"Error when sending struct implementations\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n deviceModelId: DeviceModelId.STAX,\n derivationPath: \"44'/60'/0'/0/0\",\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Nothing,\n calldatasContexts: {},\n logger: mockLogger,\n };\n // WHEN\n apiMock.sendCommand\n // Struct definitions\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n // Struct implementations\n .mockResolvedValueOnce(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError(\"error\"),\n }),\n )\n .mockResolvedValue(CommandResultFactory({ data: undefined }));\n const promise = new ProvideEIP712ContextTask(\n apiMock,\n contextModuleMock,\n args,\n provideContextFactoryMock,\n ).run();\n\n // THEN\n await expect(promise).resolves.toStrictEqual(\n CommandResultFactory({ error: new UnknownDeviceExchangeError(\"error\") }),\n );\n });\n\n it(\"Send struct array\", async () => {\n // GIVEN\n const args: ProvideEIP712ContextTaskArgs = {\n deviceModelId: DeviceModelId.STAX,\n derivationPath: \"44'/60'/0'/0/0\",\n types: {},\n domain: [],\n message: [\n // Array containing an element\n {\n path: \"spenders\",\n type: \"address[]\",\n value: new TypedDataValueArray(1),\n },\n {\n path: \"spenders.[]\",\n type: \"address\",\n value: new TypedDataValueField(\n hexaStringToBuffer(\"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\")!,\n ),\n },\n // Empty array\n {\n path: \"beneficiaries\",\n type: \"address[]\",\n value: new TypedDataValueArray(0),\n },\n ],\n clearSignContext: Just({\n type: \"success\",\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 2,\n signature: \"sig\",\n },\n trustedNamesAddresses: {},\n calldatas: {},\n proxy: undefined,\n tokens: {},\n filters: {\n \"spenders.[]\": {\n displayName: \"Spender\",\n path: \"spenders.[]\",\n signature: \"sig\",\n type: \"raw\",\n },\n \"beneficiaries.[]\": {\n displayName: \"Beneficiary\",\n path: \"beneficiaries.[]\",\n signature: \"sig\",\n type: \"raw\",\n },\n },\n }),\n calldatasContexts: {},\n logger: mockLogger,\n };\n // WHEN\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n await new ProvideEIP712ContextTask(\n apiMock,\n contextModuleMock,\n args,\n provideContextFactoryMock,\n ).run();\n\n // THEN\n // Activate the filtering\n expect(apiMock.sendCommand.mock.calls[0]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({ type: Eip712FilterType.Activation }),\n );\n // Send the message information filter\n expect(apiMock.sendCommand.mock.calls[1]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.MessageInfo,\n displayName: \"Permit2\",\n filtersCount: 2,\n signature: \"sig\",\n }),\n );\n // Send first array containing 1 element\n expect(apiMock.sendCommand.mock.calls[2]![0]).toStrictEqual(\n sendStructImplArray(1),\n );\n expect(apiMock.sendCommand.mock.calls[3]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Raw,\n discarded: false,\n displayName: \"Spender\",\n signature: \"sig\",\n }),\n );\n expect(apiMock.sendCommand.mock.calls[4]![0]).toStrictEqual(\n sendStructImplField(\n Uint8Array.from([\n 0x00, 0x14, 0x7c, 0xeb, 0x23, 0xfd, 0x6b, 0xc0, 0xad, 0xd5, 0x9e,\n 0x62, 0xac, 0x25, 0x57, 0x82, 0x70, 0xcf, 0xf1, 0xb9, 0xf6, 0x19,\n ]),\n ),\n );\n // Send second empty array, with discarded filter\n expect(apiMock.sendCommand.mock.calls[5]![0]).toStrictEqual(\n sendStructImplArray(0),\n );\n expect(apiMock.sendCommand.mock.calls[6]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.DiscardedPath,\n path: \"beneficiaries.[]\",\n }),\n );\n expect(apiMock.sendCommand.mock.calls[7]![0]).toStrictEqual(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Raw,\n discarded: true,\n displayName: \"Beneficiary\",\n signature: \"sig\",\n }),\n );\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["ClearSignContextType", "TypedDataCalldataParamPresence", "CommandResultFactory", "DeviceModelId", "hexaStringToBuffer", "LoadCertificateCommand", "UnknownDeviceExchangeError", "Just", "Nothing", "ProvideProxyInfoCommand", "ProvideTokenInformationCommand", "CalldataParamPresence", "Eip712FilterType", "SendEIP712FilteringCommand", "SendEIP712StructDefinitionCommand", "StructDefinitionCommand", "SendEIP712StructImplemCommand", "StructImplemType", "makeDeviceActionInternalApiMock", "PrimitiveType", "StructType", "TypedDataValueArray", "TypedDataValueField", "TypedDataValueRoot", "ProvideEIP712ContextTask", "mockLogger", "apiMock", "provideContextFactoryMock", "contextModuleMock", "TEST_TYPES", "TEST_DOMAIN_VALUES", "TEST_MESSAGE_VALUES", "TEST_CLEAR_SIGN_CONTEXT", "ADDRESS", "STRING", "UINT256", "UINT160", "UINT48", "CUSTOM", "name", "sendStructDefName", "sendStructDefField", "type", "sendStructImplRoot", "value", "sendStructImplArray", "sendStructImplField", "data", "args", "proxy", "clearSignContext", "certificatePayload", "keyUsage", "calls", "certificateCallIndex", "call", "firstStructDefCallIndex", "promise"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{ClearSignContextType as i}from"@ledgerhq/context-module";import{ByteArrayBuilder as d,isSuccessCommandResult as c}from"@ledgerhq/device-management-kit";import{DerivationPathUtils as p}from"@ledgerhq/signer-utils";import{Left as m,Right as C}from"purify-ts";import{StoreTransactionCommand as u}from"../../app-binder/command/StoreTransactionCommand";import{ProvideContextTask as h}from"./ProvideContextTask";import{SendCommandInChunksTask as T}from"./SendCommandInChunksTask";class P{constructor(a,r,s=(n,t)=>new h(n,t),e=(n,t)=>new T(n,t)){this._api=a;this._args=r;this._provideContextTaskFactory=s;this._sendCommandInChunksTaskFactory=e}async run(){let a=!1;for(const{context:r,subcontextCallbacks:s}of this._args.contexts){for(const n of s){const t=await n();t.type!==i.ERROR&&await this._provideContextTaskFactory(this._api,{context:t}).run()}if(r.type===i.PROXY_INFO)continue;if(!a&&this._args.serializedTransaction!==void 0&&r.type===i.TRANSACTION_INFO){a=!0;const n=p.splitPath(this._args.derivationPath),t=new d;t.add8BitUIntToData(n.length),n.forEach(o=>{t.add32BitUIntToData(o)}),t.addBufferToData(this._args.serializedTransaction),await this._sendCommandInChunksTaskFactory(this._api,{data:t.build(),commandFactory:o=>new u({serializedTransaction:o.chunkedData,isFirstChunk:o.isFirstChunk})}).run()}const e=await this._provideContextTaskFactory(this._api,{context:r}).run();if(!c(e))return m(e)}return C(void 0)}}export{P as ProvideTransactionContextsTask};
1
+ import{ClearSignContextType as s}from"@ledgerhq/context-module";import{ByteArrayBuilder as d,isSuccessCommandResult as c}from"@ledgerhq/device-management-kit";import{DerivationPathUtils as p}from"@ledgerhq/signer-utils";import{Left as g,Right as h}from"purify-ts";import{StoreTransactionCommand as l}from"../../app-binder/command/StoreTransactionCommand";import{ProvideContextTask as u}from"./ProvideContextTask";import{SendCommandInChunksTask as m}from"./SendCommandInChunksTask";class P{constructor(n,r,i=(e,t)=>new u(e,t),o=(e,t)=>new m(e,t)){this._api=n;this._args=r;this._provideContextTaskFactory=i;this._sendCommandInChunksTaskFactory=o}async run(){this._args.logger.debug("[run] Starting ProvideTransactionContextsTask",{data:{derivationPath:this._args.derivationPath,contextTypes:this._args.contexts.map(r=>r.context.type),subcontextCounts:this._args.contexts.map(r=>r.subcontextCallbacks.length),transactionLength:this._args.serializedTransaction?.length}});let n=!1;for(const{context:r,subcontextCallbacks:i}of this._args.contexts){for(const e of i){const t=await e();t.type!==s.ERROR&&await this._provideContextTaskFactory(this._api,{context:t,logger:this._args.logger}).run()}if(r.type===s.PROXY_INFO)continue;if(!n&&this._args.serializedTransaction!==void 0&&r.type===s.TRANSACTION_INFO){n=!0;const e=p.splitPath(this._args.derivationPath),t=new d;t.add8BitUIntToData(e.length),e.forEach(a=>{t.add32BitUIntToData(a)}),t.addBufferToData(this._args.serializedTransaction),await this._sendCommandInChunksTaskFactory(this._api,{data:t.build(),commandFactory:a=>new l({serializedTransaction:a.chunkedData,isFirstChunk:a.isFirstChunk})}).run()}const o=await this._provideContextTaskFactory(this._api,{context:r,logger:this._args.logger}).run();if(!c(o))return this._args.logger.error("[run] Failed to provide context",{data:{contextType:r.type,error:o.error}}),g(o)}return this._args.logger.debug("[run] ProvideTransactionContextsTask completed successfully"),h(void 0)}}export{P as ProvideTransactionContextsTask};
2
2
  //# sourceMappingURL=ProvideTransactionContextsTask.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/task/ProvideTransactionContextsTask.ts"],
4
- "sourcesContent": ["import { ClearSignContextType } from \"@ledgerhq/context-module\";\nimport {\n ByteArrayBuilder,\n type CommandErrorResult,\n type InternalApi,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\nimport { DerivationPathUtils } from \"@ledgerhq/signer-utils\";\nimport { type Either, Left, Right } from \"purify-ts\";\n\nimport { StoreTransactionCommand } from \"@internal/app-binder/command/StoreTransactionCommand\";\nimport { type EthErrorCodes } from \"@internal/app-binder/command/utils/ethAppErrors\";\n\nimport { type ContextWithSubContexts } from \"./BuildFullContextsTask\";\nimport {\n ProvideContextTask,\n type ProvideContextTaskArgs,\n} from \"./ProvideContextTask\";\nimport {\n SendCommandInChunksTask,\n type SendCommandInChunksTaskArgs,\n} from \"./SendCommandInChunksTask\";\n\nexport type ProvideTransactionContextsTaskArgs = {\n /**\n * The list of clear sign context with subcontexts callback to provide.\n */\n contexts: ContextWithSubContexts[];\n /**\n * The derivation path to provide.\n */\n derivationPath: string;\n /**\n * The serialized transaction to provide.\n * This parameter is optional in the case there is no transaction at all, for instance\n * if there is only a standalone calldata embedded in a message.\n */\n serializedTransaction?: Uint8Array;\n};\n\nexport type ProvideTransactionContextsTaskResult = Either<\n CommandErrorResult<EthErrorCodes>,\n void\n>;\n\n/**\n * This task is responsible for providing the transaction context to the device.\n * It will send the subcontexts callbacks in order and finish with the context.\n */\nexport class ProvideTransactionContextsTask {\n constructor(\n private _api: InternalApi,\n private _args: ProvideTransactionContextsTaskArgs,\n private _provideContextTaskFactory = (\n api: InternalApi,\n args: ProvideContextTaskArgs,\n ) => new ProvideContextTask(api, args),\n private _sendCommandInChunksTaskFactory = (\n api: InternalApi,\n args: SendCommandInChunksTaskArgs<unknown>,\n ) => new SendCommandInChunksTask(api, args),\n ) {}\n\n async run(): Promise<ProvideTransactionContextsTaskResult> {\n let transactionInfoProvided = false;\n\n for (const { context, subcontextCallbacks } of this._args.contexts) {\n for (const callback of subcontextCallbacks) {\n const subcontext = await callback();\n\n if (subcontext.type === ClearSignContextType.ERROR) {\n // silently ignore error subcontexts\n continue;\n }\n\n // Don't fail immediately on subcontext errors because the main context may still be successful\n await this._provideContextTaskFactory(this._api, {\n context: subcontext,\n }).run();\n }\n\n if (context.type === ClearSignContextType.PROXY_INFO) {\n // In this specific case, the context is not valid as the challenge is not valid on the first call\n // the real data is provided in the subcontext callback\n continue;\n }\n\n if (\n !transactionInfoProvided &&\n this._args.serializedTransaction !== undefined &&\n context.type === ClearSignContextType.TRANSACTION_INFO\n ) {\n // Send the serialized transaction for the first TRANSACTION_INFO.\n // All other TRANSACTION_INFO contexts will be ignored as it will be for nested calldata.\n transactionInfoProvided = true;\n\n const paths = DerivationPathUtils.splitPath(this._args.derivationPath);\n const builder = new ByteArrayBuilder();\n builder.add8BitUIntToData(paths.length);\n paths.forEach((path) => {\n builder.add32BitUIntToData(path);\n });\n builder.addBufferToData(this._args.serializedTransaction);\n await this._sendCommandInChunksTaskFactory(this._api, {\n data: builder.build(),\n commandFactory: (args) =>\n new StoreTransactionCommand({\n serializedTransaction: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n }\n\n const res = await this._provideContextTaskFactory(this._api, {\n context,\n }).run();\n if (!isSuccessCommandResult(res)) {\n return Left(res);\n }\n }\n\n return Right(void 0);\n }\n}\n"],
5
- "mappings": "AAAA,OAAS,wBAAAA,MAA4B,2BACrC,OACE,oBAAAC,EAGA,0BAAAC,MACK,kCACP,OAAS,uBAAAC,MAA2B,yBACpC,OAAsB,QAAAC,EAAM,SAAAC,MAAa,YAEzC,OAAS,2BAAAC,MAA+B,uDAIxC,OACE,sBAAAC,MAEK,uBACP,OACE,2BAAAC,MAEK,4BA4BA,MAAMC,CAA+B,CAC1C,YACUC,EACAC,EACAC,EAA6B,CACnCC,EACAC,IACG,IAAIP,EAAmBM,EAAKC,CAAI,EAC7BC,EAAkC,CACxCF,EACAC,IACG,IAAIN,EAAwBK,EAAKC,CAAI,EAC1C,CAVQ,UAAAJ,EACA,WAAAC,EACA,gCAAAC,EAIA,qCAAAG,CAIP,CAEH,MAAM,KAAqD,CACzD,IAAIC,EAA0B,GAE9B,SAAW,CAAE,QAAAC,EAAS,oBAAAC,CAAoB,IAAK,KAAK,MAAM,SAAU,CAClE,UAAWC,KAAYD,EAAqB,CAC1C,MAAME,EAAa,MAAMD,EAAS,EAE9BC,EAAW,OAASpB,EAAqB,OAM7C,MAAM,KAAK,2BAA2B,KAAK,KAAM,CAC/C,QAASoB,CACX,CAAC,EAAE,IAAI,CACT,CAEA,GAAIH,EAAQ,OAASjB,EAAqB,WAGxC,SAGF,GACE,CAACgB,GACD,KAAK,MAAM,wBAA0B,QACrCC,EAAQ,OAASjB,EAAqB,iBACtC,CAGAgB,EAA0B,GAE1B,MAAMK,EAAQlB,EAAoB,UAAU,KAAK,MAAM,cAAc,EAC/DmB,EAAU,IAAIrB,EACpBqB,EAAQ,kBAAkBD,EAAM,MAAM,EACtCA,EAAM,QAASE,GAAS,CACtBD,EAAQ,mBAAmBC,CAAI,CACjC,CAAC,EACDD,EAAQ,gBAAgB,KAAK,MAAM,qBAAqB,EACxD,MAAM,KAAK,gCAAgC,KAAK,KAAM,CACpD,KAAMA,EAAQ,MAAM,EACpB,eAAiBR,GACf,IAAIR,EAAwB,CAC1B,sBAAuBQ,EAAK,YAC5B,aAAcA,EAAK,YACrB,CAAC,CACL,CAAC,EAAE,IAAI,CACT,CAEA,MAAMU,EAAM,MAAM,KAAK,2BAA2B,KAAK,KAAM,CAC3D,QAAAP,CACF,CAAC,EAAE,IAAI,EACP,GAAI,CAACf,EAAuBsB,CAAG,EAC7B,OAAOpB,EAAKoB,CAAG,CAEnB,CAEA,OAAOnB,EAAM,MAAM,CACrB,CACF",
6
- "names": ["ClearSignContextType", "ByteArrayBuilder", "isSuccessCommandResult", "DerivationPathUtils", "Left", "Right", "StoreTransactionCommand", "ProvideContextTask", "SendCommandInChunksTask", "ProvideTransactionContextsTask", "_api", "_args", "_provideContextTaskFactory", "api", "args", "_sendCommandInChunksTaskFactory", "transactionInfoProvided", "context", "subcontextCallbacks", "callback", "subcontext", "paths", "builder", "path", "res"]
4
+ "sourcesContent": ["import { ClearSignContextType } from \"@ledgerhq/context-module\";\nimport {\n ByteArrayBuilder,\n type CommandErrorResult,\n type InternalApi,\n isSuccessCommandResult,\n type LoggerPublisherService,\n} from \"@ledgerhq/device-management-kit\";\nimport { DerivationPathUtils } from \"@ledgerhq/signer-utils\";\nimport { type Either, Left, Right } from \"purify-ts\";\n\nimport { StoreTransactionCommand } from \"@internal/app-binder/command/StoreTransactionCommand\";\nimport { type EthErrorCodes } from \"@internal/app-binder/command/utils/ethAppErrors\";\n\nimport { type ContextWithSubContexts } from \"./BuildFullContextsTask\";\nimport {\n ProvideContextTask,\n type ProvideContextTaskArgs,\n} from \"./ProvideContextTask\";\nimport {\n SendCommandInChunksTask,\n type SendCommandInChunksTaskArgs,\n} from \"./SendCommandInChunksTask\";\n\nexport type ProvideTransactionContextsTaskArgs = {\n /**\n * The list of clear sign context with subcontexts callback to provide.\n */\n contexts: ContextWithSubContexts[];\n /**\n * The derivation path to provide.\n */\n derivationPath: string;\n /**\n * The serialized transaction to provide.\n * This parameter is optional in the case there is no transaction at all, for instance\n * if there is only a standalone calldata embedded in a message.\n */\n serializedTransaction?: Uint8Array;\n /**\n * Logger for debugging.\n */\n logger: LoggerPublisherService;\n};\n\nexport type ProvideTransactionContextsTaskResult = Either<\n CommandErrorResult<EthErrorCodes>,\n void\n>;\n\n/**\n * This task is responsible for providing the transaction context to the device.\n * It will send the subcontexts callbacks in order and finish with the context.\n */\nexport class ProvideTransactionContextsTask {\n constructor(\n private _api: InternalApi,\n private _args: ProvideTransactionContextsTaskArgs,\n private _provideContextTaskFactory = (\n api: InternalApi,\n args: ProvideContextTaskArgs,\n ) => new ProvideContextTask(api, args),\n private _sendCommandInChunksTaskFactory = (\n api: InternalApi,\n args: SendCommandInChunksTaskArgs<unknown>,\n ) => new SendCommandInChunksTask(api, args),\n ) {}\n\n async run(): Promise<ProvideTransactionContextsTaskResult> {\n this._args.logger.debug(\"[run] Starting ProvideTransactionContextsTask\", {\n data: {\n derivationPath: this._args.derivationPath,\n contextTypes: this._args.contexts.map((c) => c.context.type),\n subcontextCounts: this._args.contexts.map(\n (c) => c.subcontextCallbacks.length,\n ),\n transactionLength: this._args.serializedTransaction?.length,\n },\n });\n\n let transactionInfoProvided = false;\n\n for (const { context, subcontextCallbacks } of this._args.contexts) {\n for (const callback of subcontextCallbacks) {\n const subcontext = await callback();\n\n if (subcontext.type === ClearSignContextType.ERROR) {\n // silently ignore error subcontexts\n continue;\n }\n\n // Don't fail immediately on subcontext errors because the main context may still be successful\n await this._provideContextTaskFactory(this._api, {\n context: subcontext,\n logger: this._args.logger,\n }).run();\n }\n\n if (context.type === ClearSignContextType.PROXY_INFO) {\n // In this specific case, the context is not valid as the challenge is not valid on the first call\n // the real data is provided in the subcontext callback\n continue;\n }\n\n if (\n !transactionInfoProvided &&\n this._args.serializedTransaction !== undefined &&\n context.type === ClearSignContextType.TRANSACTION_INFO\n ) {\n // Send the serialized transaction for the first TRANSACTION_INFO.\n // All other TRANSACTION_INFO contexts will be ignored as it will be for nested calldata.\n transactionInfoProvided = true;\n\n const paths = DerivationPathUtils.splitPath(this._args.derivationPath);\n const builder = new ByteArrayBuilder();\n builder.add8BitUIntToData(paths.length);\n paths.forEach((path) => {\n builder.add32BitUIntToData(path);\n });\n builder.addBufferToData(this._args.serializedTransaction);\n await this._sendCommandInChunksTaskFactory(this._api, {\n data: builder.build(),\n commandFactory: (args) =>\n new StoreTransactionCommand({\n serializedTransaction: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n }\n\n const res = await this._provideContextTaskFactory(this._api, {\n context,\n logger: this._args.logger,\n }).run();\n if (!isSuccessCommandResult(res)) {\n this._args.logger.error(\"[run] Failed to provide context\", {\n data: { contextType: context.type, error: res.error },\n });\n return Left(res);\n }\n }\n\n this._args.logger.debug(\n \"[run] ProvideTransactionContextsTask completed successfully\",\n );\n return Right(void 0);\n }\n}\n"],
5
+ "mappings": "AAAA,OAAS,wBAAAA,MAA4B,2BACrC,OACE,oBAAAC,EAGA,0BAAAC,MAEK,kCACP,OAAS,uBAAAC,MAA2B,yBACpC,OAAsB,QAAAC,EAAM,SAAAC,MAAa,YAEzC,OAAS,2BAAAC,MAA+B,uDAIxC,OACE,sBAAAC,MAEK,uBACP,OACE,2BAAAC,MAEK,4BAgCA,MAAMC,CAA+B,CAC1C,YACUC,EACAC,EACAC,EAA6B,CACnCC,EACAC,IACG,IAAIP,EAAmBM,EAAKC,CAAI,EAC7BC,EAAkC,CACxCF,EACAC,IACG,IAAIN,EAAwBK,EAAKC,CAAI,EAC1C,CAVQ,UAAAJ,EACA,WAAAC,EACA,gCAAAC,EAIA,qCAAAG,CAIP,CAEH,MAAM,KAAqD,CACzD,KAAK,MAAM,OAAO,MAAM,gDAAiD,CACvE,KAAM,CACJ,eAAgB,KAAK,MAAM,eAC3B,aAAc,KAAK,MAAM,SAAS,IAAKC,GAAMA,EAAE,QAAQ,IAAI,EAC3D,iBAAkB,KAAK,MAAM,SAAS,IACnCA,GAAMA,EAAE,oBAAoB,MAC/B,EACA,kBAAmB,KAAK,MAAM,uBAAuB,MACvD,CACF,CAAC,EAED,IAAIC,EAA0B,GAE9B,SAAW,CAAE,QAAAC,EAAS,oBAAAC,CAAoB,IAAK,KAAK,MAAM,SAAU,CAClE,UAAWC,KAAYD,EAAqB,CAC1C,MAAME,EAAa,MAAMD,EAAS,EAE9BC,EAAW,OAASrB,EAAqB,OAM7C,MAAM,KAAK,2BAA2B,KAAK,KAAM,CAC/C,QAASqB,EACT,OAAQ,KAAK,MAAM,MACrB,CAAC,EAAE,IAAI,CACT,CAEA,GAAIH,EAAQ,OAASlB,EAAqB,WAGxC,SAGF,GACE,CAACiB,GACD,KAAK,MAAM,wBAA0B,QACrCC,EAAQ,OAASlB,EAAqB,iBACtC,CAGAiB,EAA0B,GAE1B,MAAMK,EAAQnB,EAAoB,UAAU,KAAK,MAAM,cAAc,EAC/DoB,EAAU,IAAItB,EACpBsB,EAAQ,kBAAkBD,EAAM,MAAM,EACtCA,EAAM,QAASE,GAAS,CACtBD,EAAQ,mBAAmBC,CAAI,CACjC,CAAC,EACDD,EAAQ,gBAAgB,KAAK,MAAM,qBAAqB,EACxD,MAAM,KAAK,gCAAgC,KAAK,KAAM,CACpD,KAAMA,EAAQ,MAAM,EACpB,eAAiBT,GACf,IAAIR,EAAwB,CAC1B,sBAAuBQ,EAAK,YAC5B,aAAcA,EAAK,YACrB,CAAC,CACL,CAAC,EAAE,IAAI,CACT,CAEA,MAAMW,EAAM,MAAM,KAAK,2BAA2B,KAAK,KAAM,CAC3D,QAAAP,EACA,OAAQ,KAAK,MAAM,MACrB,CAAC,EAAE,IAAI,EACP,GAAI,CAAChB,EAAuBuB,CAAG,EAC7B,YAAK,MAAM,OAAO,MAAM,kCAAmC,CACzD,KAAM,CAAE,YAAaP,EAAQ,KAAM,MAAOO,EAAI,KAAM,CACtD,CAAC,EACMrB,EAAKqB,CAAG,CAEnB,CAEA,YAAK,MAAM,OAAO,MAChB,6DACF,EACOpB,EAAM,MAAM,CACrB,CACF",
6
+ "names": ["ClearSignContextType", "ByteArrayBuilder", "isSuccessCommandResult", "DerivationPathUtils", "Left", "Right", "StoreTransactionCommand", "ProvideContextTask", "SendCommandInChunksTask", "ProvideTransactionContextsTask", "_api", "_args", "_provideContextTaskFactory", "api", "args", "_sendCommandInChunksTaskFactory", "c", "transactionInfoProvided", "context", "subcontextCallbacks", "callback", "subcontext", "paths", "builder", "path", "res"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{ClearSignContextType as t}from"@ledgerhq/context-module";import{CommandResultFactory as y}from"@ledgerhq/device-management-kit";import{Left as u,Right as d}from"purify-ts";import{StoreTransactionCommand as C}from"../../app-binder/command/StoreTransactionCommand";import{makeDeviceActionInternalApiMock as m}from"../../app-binder/device-action/__test-utils__/makeInternalApi";import{ProvideTransactionContextsTask as l}from"./ProvideTransactionContextsTask";describe("ProvideTransactionContextsTask",()=>{const o=m(),r=y({data:void 0}),p=y({data:void 0,error:{}});beforeEach(()=>{vi.resetAllMocks()}),describe("run",()=>{const e=vi.fn(),x=vi.fn(),i=vi.fn(),s=vi.fn();beforeEach(()=>{vi.clearAllMocks(),i.mockImplementation((a,c)=>({run:()=>e(a,c)})),s.mockImplementation((a,c)=>({run:()=>x(a,c)}))}),describe("with no subcontexts",()=>{it("should provide the transaction context for a TRANSACTION_INFO context",async()=>{const a={contexts:[{context:{type:t.TRANSACTION_INFO,payload:"0x00"},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};x.mockResolvedValue(r),e.mockResolvedValue(r);const n=await new l(o,a,i,s).run();expect(n).toEqual(d(void 0)),expect(x).toHaveBeenCalledTimes(1),expect(s).toHaveBeenCalledWith(o,{data:new Uint8Array([5,128,0,0,44,128,0,0,60,128,0,0,0,0,0,0,0,0,0,0,0]),commandFactory:expect.any(Function)});const T=s.mock.calls[0][1].commandFactory,k={chunkedData:new Uint8Array([1,2,3,4]),isFirstChunk:!0},v=T(k);expect(v).toBeInstanceOf(C),expect(e).toHaveBeenCalledTimes(1),expect(e).toHaveBeenCalledWith(o,{context:{type:t.TRANSACTION_INFO,payload:"0x00"}})}),it("should provide context without serialized transaction when not provided",async()=>{const a={contexts:[{context:{type:t.TOKEN,payload:"payload"},subcontextCallbacks:[]}],derivationPath:"44'/60'/0'/0/0"};e.mockResolvedValue(r);const n=await new l(o,a,i,s).run();expect(n).toEqual(d(void 0)),expect(x).not.toHaveBeenCalled(),expect(e).toHaveBeenCalledTimes(1)}),it("should skip PROXY_INFO context and only provide subcontexts",async()=>{const a={contexts:[{context:{type:t.PROXY_INFO,payload:"payload"},subcontextCallbacks:[()=>Promise.resolve({type:t.PROXY_INFO,payload:"subcontext payload"})]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};e.mockResolvedValue(r);const n=await new l(o,a,i,s).run();expect(n).toEqual(d(void 0)),expect(e).toHaveBeenCalledTimes(1),expect(e).toHaveBeenCalledWith(o,{context:{type:t.PROXY_INFO,payload:"subcontext payload"}})}),it("should skip ERROR subcontexts silently",async()=>{const a={contexts:[{context:{type:t.TOKEN,payload:"payload"},subcontextCallbacks:[()=>Promise.resolve({type:t.ERROR,error:new Error("error")})]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};e.mockResolvedValue(r);const n=await new l(o,a,i,s).run();expect(n).toEqual(d(void 0)),expect(e).toHaveBeenCalledTimes(1),expect(e).toHaveBeenCalledWith(o,{context:{type:t.TOKEN,payload:"payload"}})}),it("should only store transaction once for first TRANSACTION_INFO context",async()=>{const a={contexts:[{context:{type:t.TRANSACTION_INFO,payload:"payload1"},subcontextCallbacks:[]},{context:{type:t.TRANSACTION_INFO,payload:"payload2"},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array([1,2,3]),derivationPath:"44'/60'/0'/0/0"};x.mockResolvedValue(r),e.mockResolvedValue(r);const n=await new l(o,a,i,s).run();expect(n).toEqual(d(void 0)),expect(x).toHaveBeenCalledTimes(1),expect(e).toHaveBeenCalledTimes(2)})}),describe("with subcontexts",()=>{it("should provide subcontexts before the main context",async()=>{const a={contexts:[{context:{type:t.TRANSACTION_FIELD_DESCRIPTION,payload:"main payload"},subcontextCallbacks:[()=>Promise.resolve({type:t.TOKEN,payload:"subcontext payload"})]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};e.mockResolvedValue(r);const n=await new l(o,a,i,s).run();expect(n).toEqual(d(void 0)),expect(e).toHaveBeenCalledTimes(2),expect(e).toHaveBeenNthCalledWith(1,o,{context:{type:t.TOKEN,payload:"subcontext payload"}}),expect(e).toHaveBeenNthCalledWith(2,o,{context:{type:t.TRANSACTION_FIELD_DESCRIPTION,payload:"main payload"}})}),it("should provide multiple subcontexts in order",async()=>{const a={contexts:[{context:{type:t.TRUSTED_NAME,payload:"main payload"},subcontextCallbacks:[()=>Promise.resolve({type:t.NFT,payload:"subcontext1"}),()=>Promise.resolve({type:t.TOKEN,payload:"subcontext2"})]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};e.mockResolvedValue(r);const n=await new l(o,a,i,s).run();expect(n).toEqual(d(void 0)),expect(e).toHaveBeenCalledTimes(3),expect(e).toHaveBeenNthCalledWith(1,o,{context:{type:t.NFT,payload:"subcontext1"}}),expect(e).toHaveBeenNthCalledWith(2,o,{context:{type:t.TOKEN,payload:"subcontext2"}}),expect(e).toHaveBeenNthCalledWith(3,o,{context:{type:t.TRUSTED_NAME,payload:"main payload"}})}),it("should continue providing main context even if subcontext fails",async()=>{const a={contexts:[{context:{type:t.TRANSACTION_FIELD_DESCRIPTION,payload:"main payload"},subcontextCallbacks:[()=>Promise.resolve({type:t.TOKEN,payload:"subcontext payload"})]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};e.mockResolvedValueOnce(p).mockResolvedValueOnce(r);const n=await new l(o,a,i,s).run();expect(n).toEqual(d(void 0)),expect(e).toHaveBeenCalledTimes(2)})}),describe("with multiple contexts",()=>{it("should provide all contexts in order",async()=>{const a={contexts:[{context:{type:t.TOKEN,payload:"payload1"},subcontextCallbacks:[]},{context:{type:t.NFT,payload:"payload2"},subcontextCallbacks:[]},{context:{type:t.TRUSTED_NAME,payload:"payload3"},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};e.mockResolvedValue(r);const n=await new l(o,a,i,s).run();expect(n).toEqual(d(void 0)),expect(e).toHaveBeenCalledTimes(3),expect(e).toHaveBeenNthCalledWith(1,o,{context:{type:t.TOKEN,payload:"payload1"}}),expect(e).toHaveBeenNthCalledWith(2,o,{context:{type:t.NFT,payload:"payload2"}}),expect(e).toHaveBeenNthCalledWith(3,o,{context:{type:t.TRUSTED_NAME,payload:"payload3"}})})}),describe("error handling",()=>{it("should return error if main context fails",async()=>{const a={contexts:[{context:{type:t.TOKEN,payload:"payload"},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};e.mockResolvedValue(p);const n=await new l(o,a,i,s).run();expect(n).toEqual(u(p))}),it("should stop providing contexts after first main context failure",async()=>{const a={contexts:[{context:{type:t.TOKEN,payload:"payload1"},subcontextCallbacks:[]},{context:{type:t.NFT,payload:"payload2"},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};e.mockResolvedValue(p);const n=await new l(o,a,i,s).run();expect(n).toEqual(u(p)),expect(e).toHaveBeenCalledTimes(1)})}),describe("derivation path handling",()=>{it("should correctly parse and include derivation path in StoreTransaction",async()=>{const a={contexts:[{context:{type:t.TRANSACTION_INFO,payload:"payload"},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array([170,187,204]),derivationPath:"44'/60'/0'/0/0"};x.mockResolvedValue(r),e.mockResolvedValue(r),await new l(o,a,i,s).run(),expect(s).toHaveBeenCalledWith(o,expect.objectContaining({data:new Uint8Array([5,128,0,0,44,128,0,0,60,128,0,0,0,0,0,0,0,0,0,0,0,170,187,204])}))})}),describe("factory types",()=>{it("should have default factories",()=>{const a=new l(o,{contexts:[{context:{type:t.TOKEN,payload:"payload"},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"});expect(a._provideContextTaskFactory).toBeDefined(),expect(a._sendCommandInChunksTaskFactory).toBeDefined()})})})});
1
+ import{ClearSignContextType as t}from"@ledgerhq/context-module";import{CommandResultFactory as u}from"@ledgerhq/device-management-kit";import{Left as v,Right as x}from"purify-ts";import{StoreTransactionCommand as m}from"../../app-binder/command/StoreTransactionCommand";import{makeDeviceActionInternalApiMock as g}from"../../app-binder/device-action/__test-utils__/makeInternalApi";import{ProvideTransactionContextsTask as d}from"./ProvideTransactionContextsTask";const n={debug:vi.fn(),info:vi.fn(),warn:vi.fn(),error:vi.fn(),subscribers:[]};describe("ProvideTransactionContextsTask",()=>{const o=g(),l=u({data:void 0}),y=u({data:void 0,error:{}});beforeEach(()=>{vi.resetAllMocks()}),describe("run",()=>{const e=vi.fn(),p=vi.fn(),i=vi.fn(),r=vi.fn();beforeEach(()=>{vi.clearAllMocks(),i.mockImplementation((a,c)=>({run:()=>e(a,c)})),r.mockImplementation((a,c)=>({run:()=>p(a,c)}))}),describe("with no subcontexts",()=>{it("should provide the transaction context for a TRANSACTION_INFO context",async()=>{const a={contexts:[{context:{type:t.TRANSACTION_INFO,payload:"0x00"},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0",logger:n};p.mockResolvedValue(l),e.mockResolvedValue(l);const s=await new d(o,a,i,r).run();expect(s).toEqual(x(void 0)),expect(p).toHaveBeenCalledTimes(1),expect(r).toHaveBeenCalledWith(o,{data:new Uint8Array([5,128,0,0,44,128,0,0,60,128,0,0,0,0,0,0,0,0,0,0,0]),commandFactory:expect.any(Function)});const T=r.mock.calls[0][1].commandFactory,k={chunkedData:new Uint8Array([1,2,3,4]),isFirstChunk:!0},C=T(k);expect(C).toBeInstanceOf(m),expect(e).toHaveBeenCalledTimes(1),expect(e).toHaveBeenCalledWith(o,{context:{type:t.TRANSACTION_INFO,payload:"0x00"},logger:n})}),it("should provide context without serialized transaction when not provided",async()=>{const a={contexts:[{context:{type:t.TOKEN,payload:"payload"},subcontextCallbacks:[]}],derivationPath:"44'/60'/0'/0/0",logger:n};e.mockResolvedValue(l);const s=await new d(o,a,i,r).run();expect(s).toEqual(x(void 0)),expect(p).not.toHaveBeenCalled(),expect(e).toHaveBeenCalledTimes(1)}),it("should skip PROXY_INFO context and only provide subcontexts",async()=>{const a={contexts:[{context:{type:t.PROXY_INFO,payload:"payload"},subcontextCallbacks:[()=>Promise.resolve({type:t.PROXY_INFO,payload:"subcontext payload"})]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0",logger:n};e.mockResolvedValue(l);const s=await new d(o,a,i,r).run();expect(s).toEqual(x(void 0)),expect(e).toHaveBeenCalledTimes(1),expect(e).toHaveBeenCalledWith(o,{context:{type:t.PROXY_INFO,payload:"subcontext payload"},logger:n})}),it("should skip ERROR subcontexts silently",async()=>{const a={contexts:[{context:{type:t.TOKEN,payload:"payload"},subcontextCallbacks:[()=>Promise.resolve({type:t.ERROR,error:new Error("error")})]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0",logger:n};e.mockResolvedValue(l);const s=await new d(o,a,i,r).run();expect(s).toEqual(x(void 0)),expect(e).toHaveBeenCalledTimes(1),expect(e).toHaveBeenCalledWith(o,{context:{type:t.TOKEN,payload:"payload"},logger:n})}),it("should only store transaction once for first TRANSACTION_INFO context",async()=>{const a={contexts:[{context:{type:t.TRANSACTION_INFO,payload:"payload1"},subcontextCallbacks:[]},{context:{type:t.TRANSACTION_INFO,payload:"payload2"},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array([1,2,3]),derivationPath:"44'/60'/0'/0/0",logger:n};p.mockResolvedValue(l),e.mockResolvedValue(l);const s=await new d(o,a,i,r).run();expect(s).toEqual(x(void 0)),expect(p).toHaveBeenCalledTimes(1),expect(e).toHaveBeenCalledTimes(2)})}),describe("with subcontexts",()=>{it("should provide subcontexts before the main context",async()=>{const a={contexts:[{context:{type:t.TRANSACTION_FIELD_DESCRIPTION,payload:"main payload"},subcontextCallbacks:[()=>Promise.resolve({type:t.TOKEN,payload:"subcontext payload"})]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0",logger:n};e.mockResolvedValue(l);const s=await new d(o,a,i,r).run();expect(s).toEqual(x(void 0)),expect(e).toHaveBeenCalledTimes(2),expect(e).toHaveBeenNthCalledWith(1,o,{context:{type:t.TOKEN,payload:"subcontext payload"},logger:n}),expect(e).toHaveBeenNthCalledWith(2,o,{context:{type:t.TRANSACTION_FIELD_DESCRIPTION,payload:"main payload"},logger:n})}),it("should provide multiple subcontexts in order",async()=>{const a={contexts:[{context:{type:t.TRUSTED_NAME,payload:"main payload"},subcontextCallbacks:[()=>Promise.resolve({type:t.NFT,payload:"subcontext1"}),()=>Promise.resolve({type:t.TOKEN,payload:"subcontext2"})]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0",logger:n};e.mockResolvedValue(l);const s=await new d(o,a,i,r).run();expect(s).toEqual(x(void 0)),expect(e).toHaveBeenCalledTimes(3),expect(e).toHaveBeenNthCalledWith(1,o,{context:{type:t.NFT,payload:"subcontext1"},logger:n}),expect(e).toHaveBeenNthCalledWith(2,o,{context:{type:t.TOKEN,payload:"subcontext2"},logger:n}),expect(e).toHaveBeenNthCalledWith(3,o,{context:{type:t.TRUSTED_NAME,payload:"main payload"},logger:n})}),it("should continue providing main context even if subcontext fails",async()=>{const a={contexts:[{context:{type:t.TRANSACTION_FIELD_DESCRIPTION,payload:"main payload"},subcontextCallbacks:[()=>Promise.resolve({type:t.TOKEN,payload:"subcontext payload"})]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0",logger:n};e.mockResolvedValueOnce(y).mockResolvedValueOnce(l);const s=await new d(o,a,i,r).run();expect(s).toEqual(x(void 0)),expect(e).toHaveBeenCalledTimes(2)})}),describe("with multiple contexts",()=>{it("should provide all contexts in order",async()=>{const a={contexts:[{context:{type:t.TOKEN,payload:"payload1"},subcontextCallbacks:[]},{context:{type:t.NFT,payload:"payload2"},subcontextCallbacks:[]},{context:{type:t.TRUSTED_NAME,payload:"payload3"},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0",logger:n};e.mockResolvedValue(l);const s=await new d(o,a,i,r).run();expect(s).toEqual(x(void 0)),expect(e).toHaveBeenCalledTimes(3),expect(e).toHaveBeenNthCalledWith(1,o,{context:{type:t.TOKEN,payload:"payload1"},logger:n}),expect(e).toHaveBeenNthCalledWith(2,o,{context:{type:t.NFT,payload:"payload2"},logger:n}),expect(e).toHaveBeenNthCalledWith(3,o,{context:{type:t.TRUSTED_NAME,payload:"payload3"},logger:n})})}),describe("error handling",()=>{it("should return error if main context fails",async()=>{const a={contexts:[{context:{type:t.TOKEN,payload:"payload"},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0",logger:n};e.mockResolvedValue(y);const s=await new d(o,a,i,r).run();expect(s).toEqual(v(y))}),it("should stop providing contexts after first main context failure",async()=>{const a={contexts:[{context:{type:t.TOKEN,payload:"payload1"},subcontextCallbacks:[]},{context:{type:t.NFT,payload:"payload2"},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0",logger:n};e.mockResolvedValue(y);const s=await new d(o,a,i,r).run();expect(s).toEqual(v(y)),expect(e).toHaveBeenCalledTimes(1)})}),describe("derivation path handling",()=>{it("should correctly parse and include derivation path in StoreTransaction",async()=>{const a={contexts:[{context:{type:t.TRANSACTION_INFO,payload:"payload"},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array([170,187,204]),derivationPath:"44'/60'/0'/0/0",logger:n};p.mockResolvedValue(l),e.mockResolvedValue(l),await new d(o,a,i,r).run(),expect(r).toHaveBeenCalledWith(o,expect.objectContaining({data:new Uint8Array([5,128,0,0,44,128,0,0,60,128,0,0,0,0,0,0,0,0,0,0,0,170,187,204])}))})}),describe("factory types",()=>{it("should have default factories",()=>{const a=new d(o,{contexts:[{context:{type:t.TOKEN,payload:"payload"},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0",logger:n});expect(a._provideContextTaskFactory).toBeDefined(),expect(a._sendCommandInChunksTaskFactory).toBeDefined()})})})});
2
2
  //# sourceMappingURL=ProvideTransactionContextsTask.test.js.map