@ledgerhq/device-signer-kit-ethereum 1.1.0 → 1.2.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 (487) hide show
  1. package/README.md +162 -371
  2. package/lib/cjs/api/SignerEth.js +1 -1
  3. package/lib/cjs/api/SignerEth.js.map +1 -1
  4. package/lib/cjs/api/SignerEthBuilder.test.js +1 -1
  5. package/lib/cjs/api/SignerEthBuilder.test.js.map +1 -1
  6. package/lib/cjs/api/app-binder/GetAddressDeviceActionTypes.js +1 -1
  7. package/lib/cjs/api/app-binder/GetAddressDeviceActionTypes.js.map +1 -1
  8. package/lib/cjs/api/app-binder/SignPersonalMessageDeviceActionTypes.js +1 -1
  9. package/lib/cjs/api/app-binder/SignPersonalMessageDeviceActionTypes.js.map +1 -1
  10. package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js +1 -1
  11. package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js.map +1 -1
  12. package/lib/cjs/api/app-binder/SignTypedDataDeviceActionTypes.js +1 -1
  13. package/lib/cjs/api/app-binder/SignTypedDataDeviceActionTypes.js.map +1 -1
  14. package/lib/cjs/api/index.js +1 -1
  15. package/lib/cjs/api/index.js.map +2 -2
  16. package/lib/cjs/api/model/TransactionType.js +2 -0
  17. package/lib/cjs/api/model/TransactionType.js.map +7 -0
  18. package/lib/cjs/internal/DefaultSignerEth.js +1 -1
  19. package/lib/cjs/internal/DefaultSignerEth.js.map +2 -2
  20. package/lib/cjs/internal/DefaultSignerEth.test.js +1 -1
  21. package/lib/cjs/internal/DefaultSignerEth.test.js.map +2 -2
  22. package/lib/cjs/internal/address/use-case/GetAddressUseCase.test.js +1 -1
  23. package/lib/cjs/internal/address/use-case/GetAddressUseCase.test.js.map +2 -2
  24. package/lib/cjs/internal/app-binder/EthAppBinder.js +1 -1
  25. package/lib/cjs/internal/app-binder/EthAppBinder.js.map +3 -3
  26. package/lib/cjs/internal/app-binder/EthAppBinder.test.js +1 -1
  27. package/lib/cjs/internal/app-binder/EthAppBinder.test.js.map +3 -3
  28. package/lib/cjs/internal/app-binder/command/GetAddressCommand.js +1 -1
  29. package/lib/cjs/internal/app-binder/command/GetAddressCommand.js.map +3 -3
  30. package/lib/cjs/internal/app-binder/command/GetAddressCommand.test.js +1 -1
  31. package/lib/cjs/internal/app-binder/command/GetAddressCommand.test.js.map +2 -2
  32. package/lib/cjs/internal/app-binder/command/GetChallengeCommand.js +1 -1
  33. package/lib/cjs/internal/app-binder/command/GetChallengeCommand.js.map +3 -3
  34. package/lib/cjs/internal/app-binder/command/GetChallengeCommand.test.js +1 -1
  35. package/lib/cjs/internal/app-binder/command/GetChallengeCommand.test.js.map +2 -2
  36. package/lib/cjs/internal/app-binder/command/ProvideEnumCommand.js +1 -1
  37. package/lib/cjs/internal/app-binder/command/ProvideEnumCommand.js.map +3 -3
  38. package/lib/cjs/internal/app-binder/command/ProvideEnumCommand.test.js +1 -1
  39. package/lib/cjs/internal/app-binder/command/ProvideEnumCommand.test.js.map +3 -3
  40. package/lib/cjs/internal/app-binder/command/ProvideNFTInformationCommand.js +1 -1
  41. package/lib/cjs/internal/app-binder/command/ProvideNFTInformationCommand.js.map +3 -3
  42. package/lib/cjs/internal/app-binder/command/ProvideTokenInformationCommand.js +1 -1
  43. package/lib/cjs/internal/app-binder/command/ProvideTokenInformationCommand.js.map +3 -3
  44. package/lib/cjs/internal/app-binder/command/ProvideTransactionFieldDescriptionCommand.js +1 -1
  45. package/lib/cjs/internal/app-binder/command/ProvideTransactionFieldDescriptionCommand.js.map +3 -3
  46. package/lib/cjs/internal/app-binder/command/ProvideTransactionFieldDescriptionCommand.test.js +1 -1
  47. package/lib/cjs/internal/app-binder/command/ProvideTransactionFieldDescriptionCommand.test.js.map +3 -3
  48. package/lib/cjs/internal/app-binder/command/ProvideTransactionInformationCommand.js +1 -1
  49. package/lib/cjs/internal/app-binder/command/ProvideTransactionInformationCommand.js.map +3 -3
  50. package/lib/cjs/internal/app-binder/command/ProvideTransactionInformationCommand.test.js +1 -1
  51. package/lib/cjs/internal/app-binder/command/ProvideTransactionInformationCommand.test.js.map +3 -3
  52. package/lib/cjs/internal/app-binder/command/ProvideTrustedNameCommand.js +1 -1
  53. package/lib/cjs/internal/app-binder/command/ProvideTrustedNameCommand.js.map +3 -3
  54. package/lib/cjs/internal/app-binder/command/SendEIP712FilteringCommand.js +1 -1
  55. package/lib/cjs/internal/app-binder/command/SendEIP712FilteringCommand.js.map +3 -3
  56. package/lib/cjs/internal/app-binder/command/SendEIP712StructDefinitionCommand.js +1 -1
  57. package/lib/cjs/internal/app-binder/command/SendEIP712StructDefinitionCommand.js.map +3 -3
  58. package/lib/cjs/internal/app-binder/command/SendEIP712StructDefinitionCommand.test.js +1 -1
  59. package/lib/cjs/internal/app-binder/command/SendEIP712StructDefinitionCommand.test.js.map +2 -2
  60. package/lib/cjs/internal/app-binder/command/SendEIP712StructImplemCommand.js +1 -1
  61. package/lib/cjs/internal/app-binder/command/SendEIP712StructImplemCommand.js.map +3 -3
  62. package/lib/cjs/internal/app-binder/command/SetExternalPluginCommand.js +1 -1
  63. package/lib/cjs/internal/app-binder/command/SetExternalPluginCommand.js.map +3 -3
  64. package/lib/cjs/internal/app-binder/command/SetExternalPluginCommand.test.js +2 -2
  65. package/lib/cjs/internal/app-binder/command/SetExternalPluginCommand.test.js.map +3 -3
  66. package/lib/cjs/internal/app-binder/command/SetPluginCommand.js +1 -1
  67. package/lib/cjs/internal/app-binder/command/SetPluginCommand.js.map +3 -3
  68. package/lib/cjs/internal/app-binder/command/SetPluginCommand.test.js +2 -2
  69. package/lib/cjs/internal/app-binder/command/SetPluginCommand.test.js.map +3 -3
  70. package/lib/cjs/internal/app-binder/command/SignEIP712Command.js +1 -1
  71. package/lib/cjs/internal/app-binder/command/SignEIP712Command.js.map +3 -3
  72. package/lib/cjs/internal/app-binder/command/SignEIP712Command.test.js +1 -1
  73. package/lib/cjs/internal/app-binder/command/SignEIP712Command.test.js.map +2 -2
  74. package/lib/cjs/internal/app-binder/command/SignPersonalMessageCommand.js +1 -1
  75. package/lib/cjs/internal/app-binder/command/SignPersonalMessageCommand.js.map +3 -3
  76. package/lib/cjs/internal/app-binder/command/SignTransactionCommand.js +1 -1
  77. package/lib/cjs/internal/app-binder/command/SignTransactionCommand.js.map +3 -3
  78. package/lib/cjs/internal/app-binder/command/SignTransactionCommand.test.js +1 -1
  79. package/lib/cjs/internal/app-binder/command/SignTransactionCommand.test.js.map +2 -2
  80. package/lib/cjs/internal/app-binder/command/StartTransactionCommand.js +1 -1
  81. package/lib/cjs/internal/app-binder/command/StartTransactionCommand.js.map +3 -3
  82. package/lib/cjs/internal/app-binder/command/StartTransactionCommand.test.js +1 -1
  83. package/lib/cjs/internal/app-binder/command/StartTransactionCommand.test.js.map +3 -3
  84. package/lib/cjs/internal/app-binder/command/StoreTransactionCommand.js +1 -1
  85. package/lib/cjs/internal/app-binder/command/StoreTransactionCommand.js.map +3 -3
  86. package/lib/cjs/internal/app-binder/command/StoreTransactionCommand.test.js +1 -1
  87. package/lib/cjs/internal/app-binder/command/StoreTransactionCommand.test.js.map +3 -3
  88. package/lib/cjs/internal/app-binder/command/utils/ethAppErrors.js +2 -0
  89. package/lib/cjs/internal/app-binder/command/utils/ethAppErrors.js.map +7 -0
  90. package/lib/cjs/internal/app-binder/command/utils/ethAppErrors.test.js +2 -0
  91. package/lib/cjs/internal/app-binder/command/utils/ethAppErrors.test.js.map +7 -0
  92. package/lib/cjs/internal/app-binder/constant/plugins.js +2 -0
  93. package/lib/cjs/internal/app-binder/constant/plugins.js.map +7 -0
  94. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js +1 -1
  95. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js.map +3 -3
  96. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js +1 -1
  97. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js.map +3 -3
  98. package/lib/cjs/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.js +1 -1
  99. package/lib/cjs/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.js.map +3 -3
  100. package/lib/cjs/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.test.js +1 -1
  101. package/lib/cjs/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.test.js.map +3 -3
  102. package/lib/cjs/internal/app-binder/device-action/__test-utils__/makeInternalApi.js +1 -1
  103. package/lib/cjs/internal/app-binder/device-action/__test-utils__/makeInternalApi.js.map +3 -3
  104. package/lib/cjs/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.js +1 -1
  105. package/lib/cjs/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.js.map +2 -2
  106. package/lib/cjs/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.js +1 -1
  107. package/lib/cjs/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.js.map +3 -3
  108. package/lib/cjs/internal/app-binder/task/BuildEIP712ContextTask.js +1 -1
  109. package/lib/cjs/internal/app-binder/task/BuildEIP712ContextTask.js.map +3 -3
  110. package/lib/cjs/internal/app-binder/task/BuildEIP712ContextTask.test.js +1 -1
  111. package/lib/cjs/internal/app-binder/task/BuildEIP712ContextTask.test.js.map +3 -3
  112. package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.js +1 -1
  113. package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.js.map +3 -3
  114. package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.test.js +1 -1
  115. package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.test.js.map +3 -3
  116. package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.js +1 -1
  117. package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.js.map +3 -3
  118. package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.test.js +1 -1
  119. package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.test.js.map +2 -2
  120. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.js +1 -1
  121. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.js.map +2 -2
  122. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.test.js +1 -1
  123. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.test.js.map +2 -2
  124. package/lib/cjs/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.js +1 -1
  125. package/lib/cjs/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.js.map +3 -3
  126. package/lib/cjs/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.test.js +1 -1
  127. package/lib/cjs/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.test.js.map +3 -3
  128. package/lib/cjs/internal/app-binder/task/ProvideTransactionGenericContextTask.js +1 -1
  129. package/lib/cjs/internal/app-binder/task/ProvideTransactionGenericContextTask.js.map +3 -3
  130. package/lib/cjs/internal/app-binder/task/ProvideTransactionGenericContextTask.test.js +1 -1
  131. package/lib/cjs/internal/app-binder/task/ProvideTransactionGenericContextTask.test.js.map +3 -3
  132. package/lib/cjs/internal/app-binder/task/SendCommandInChunksTask.js +1 -1
  133. package/lib/cjs/internal/app-binder/task/SendCommandInChunksTask.js.map +2 -2
  134. package/lib/cjs/internal/app-binder/task/SendEIP712StructImplemTask.js +1 -1
  135. package/lib/cjs/internal/app-binder/task/SendEIP712StructImplemTask.js.map +2 -2
  136. package/lib/cjs/internal/app-binder/task/SendEIP712StructImplemTask.test.js +1 -1
  137. package/lib/cjs/internal/app-binder/task/SendEIP712StructImplemTask.test.js.map +2 -2
  138. package/lib/cjs/internal/app-binder/task/SendPayloadInChunksTask.js +1 -1
  139. package/lib/cjs/internal/app-binder/task/SendPayloadInChunksTask.js.map +2 -2
  140. package/lib/cjs/internal/app-binder/task/SendPayloadInChunksTask.test.js +1 -1
  141. package/lib/cjs/internal/app-binder/task/SendPayloadInChunksTask.test.js.map +2 -2
  142. package/lib/cjs/internal/app-binder/task/SendSignPersonalMessageTask.js +1 -1
  143. package/lib/cjs/internal/app-binder/task/SendSignPersonalMessageTask.js.map +2 -2
  144. package/lib/cjs/internal/app-binder/task/SendSignPersonalMessageTask.test.js +1 -1
  145. package/lib/cjs/internal/app-binder/task/SendSignPersonalMessageTask.test.js.map +2 -2
  146. package/lib/cjs/internal/app-binder/task/SendSignTransactionTask.js +1 -1
  147. package/lib/cjs/internal/app-binder/task/SendSignTransactionTask.js.map +3 -3
  148. package/lib/cjs/internal/app-binder/task/SendSignTransactionTask.test.js +1 -1
  149. package/lib/cjs/internal/app-binder/task/SendSignTransactionTask.test.js.map +3 -3
  150. package/lib/cjs/internal/message/use-case/SignMessageUseCase.test.js +1 -1
  151. package/lib/cjs/internal/message/use-case/SignMessageUseCase.test.js.map +2 -2
  152. package/lib/cjs/internal/transaction/di/transactionModule.js +1 -1
  153. package/lib/cjs/internal/transaction/di/transactionModule.js.map +3 -3
  154. package/lib/cjs/internal/transaction/di/transactionModule.test.js +1 -1
  155. package/lib/cjs/internal/transaction/di/transactionModule.test.js.map +2 -2
  156. package/lib/cjs/internal/transaction/service/mapper/EthersRawTransactionMapper.js +2 -0
  157. package/lib/cjs/internal/transaction/service/mapper/EthersRawTransactionMapper.js.map +7 -0
  158. package/lib/cjs/internal/transaction/service/mapper/EthersRawTransactionMapper.test.js +2 -0
  159. package/lib/cjs/internal/transaction/service/mapper/EthersRawTransactionMapper.test.js.map +7 -0
  160. package/lib/cjs/internal/transaction/service/mapper/TransactionMapper.js +1 -1
  161. package/lib/cjs/internal/transaction/service/mapper/TransactionMapper.js.map +1 -1
  162. package/lib/cjs/internal/transaction/service/mapper/TransactionMapperService.js +1 -1
  163. package/lib/cjs/internal/transaction/service/mapper/TransactionMapperService.js.map +2 -2
  164. package/lib/cjs/internal/transaction/service/mapper/TransactionMapperService.test.js +1 -1
  165. package/lib/cjs/internal/transaction/service/mapper/TransactionMapperService.test.js.map +2 -2
  166. package/lib/cjs/internal/transaction/service/mapper/model/TransactionMapperResult.js +1 -1
  167. package/lib/cjs/internal/transaction/service/mapper/model/TransactionMapperResult.js.map +1 -1
  168. package/lib/cjs/internal/transaction/service/parser/TransactionParserService.js +1 -1
  169. package/lib/cjs/internal/transaction/service/parser/TransactionParserService.js.map +3 -3
  170. package/lib/cjs/internal/transaction/service/parser/TransactionParserService.test.js +1 -1
  171. package/lib/cjs/internal/transaction/service/parser/TransactionParserService.test.js.map +3 -3
  172. package/lib/cjs/internal/transaction/use-case/SignTransactionUseCase.js +1 -1
  173. package/lib/cjs/internal/transaction/use-case/SignTransactionUseCase.js.map +2 -2
  174. package/lib/cjs/internal/transaction/use-case/SignTransactionUseCase.test.js +1 -1
  175. package/lib/cjs/internal/transaction/use-case/SignTransactionUseCase.test.js.map +3 -3
  176. package/lib/cjs/internal/typed-data/use-case/SignTypedDataUseCase.test.js +1 -1
  177. package/lib/cjs/internal/typed-data/use-case/SignTypedDataUseCase.test.js.map +2 -2
  178. package/lib/cjs/package.json +12 -12
  179. package/lib/esm/api/SignerEthBuilder.test.js +1 -1
  180. package/lib/esm/api/SignerEthBuilder.test.js.map +1 -1
  181. package/lib/esm/api/index.js +1 -1
  182. package/lib/esm/api/index.js.map +2 -2
  183. package/lib/esm/api/model/TransactionType.js +2 -0
  184. package/lib/esm/api/model/TransactionType.js.map +7 -0
  185. package/lib/esm/internal/DefaultSignerEth.js.map +2 -2
  186. package/lib/esm/internal/DefaultSignerEth.test.js +1 -1
  187. package/lib/esm/internal/DefaultSignerEth.test.js.map +2 -2
  188. package/lib/esm/internal/address/use-case/GetAddressUseCase.test.js +1 -1
  189. package/lib/esm/internal/address/use-case/GetAddressUseCase.test.js.map +2 -2
  190. package/lib/esm/internal/app-binder/EthAppBinder.js +1 -1
  191. package/lib/esm/internal/app-binder/EthAppBinder.js.map +3 -3
  192. package/lib/esm/internal/app-binder/EthAppBinder.test.js +1 -1
  193. package/lib/esm/internal/app-binder/EthAppBinder.test.js.map +3 -3
  194. package/lib/esm/internal/app-binder/command/GetAddressCommand.js +1 -1
  195. package/lib/esm/internal/app-binder/command/GetAddressCommand.js.map +3 -3
  196. package/lib/esm/internal/app-binder/command/GetAddressCommand.test.js +1 -1
  197. package/lib/esm/internal/app-binder/command/GetAddressCommand.test.js.map +2 -2
  198. package/lib/esm/internal/app-binder/command/GetChallengeCommand.js +1 -1
  199. package/lib/esm/internal/app-binder/command/GetChallengeCommand.js.map +3 -3
  200. package/lib/esm/internal/app-binder/command/GetChallengeCommand.test.js +1 -1
  201. package/lib/esm/internal/app-binder/command/GetChallengeCommand.test.js.map +2 -2
  202. package/lib/esm/internal/app-binder/command/ProvideEnumCommand.js +1 -1
  203. package/lib/esm/internal/app-binder/command/ProvideEnumCommand.js.map +3 -3
  204. package/lib/esm/internal/app-binder/command/ProvideEnumCommand.test.js +1 -1
  205. package/lib/esm/internal/app-binder/command/ProvideEnumCommand.test.js.map +3 -3
  206. package/lib/esm/internal/app-binder/command/ProvideNFTInformationCommand.js +1 -1
  207. package/lib/esm/internal/app-binder/command/ProvideNFTInformationCommand.js.map +3 -3
  208. package/lib/esm/internal/app-binder/command/ProvideTokenInformationCommand.js +1 -1
  209. package/lib/esm/internal/app-binder/command/ProvideTokenInformationCommand.js.map +3 -3
  210. package/lib/esm/internal/app-binder/command/ProvideTransactionFieldDescriptionCommand.js +1 -1
  211. package/lib/esm/internal/app-binder/command/ProvideTransactionFieldDescriptionCommand.js.map +3 -3
  212. package/lib/esm/internal/app-binder/command/ProvideTransactionFieldDescriptionCommand.test.js +1 -1
  213. package/lib/esm/internal/app-binder/command/ProvideTransactionFieldDescriptionCommand.test.js.map +3 -3
  214. package/lib/esm/internal/app-binder/command/ProvideTransactionInformationCommand.js +1 -1
  215. package/lib/esm/internal/app-binder/command/ProvideTransactionInformationCommand.js.map +3 -3
  216. package/lib/esm/internal/app-binder/command/ProvideTransactionInformationCommand.test.js +1 -1
  217. package/lib/esm/internal/app-binder/command/ProvideTransactionInformationCommand.test.js.map +3 -3
  218. package/lib/esm/internal/app-binder/command/ProvideTrustedNameCommand.js +1 -1
  219. package/lib/esm/internal/app-binder/command/ProvideTrustedNameCommand.js.map +3 -3
  220. package/lib/esm/internal/app-binder/command/SendEIP712FilteringCommand.js +1 -1
  221. package/lib/esm/internal/app-binder/command/SendEIP712FilteringCommand.js.map +3 -3
  222. package/lib/esm/internal/app-binder/command/SendEIP712StructDefinitionCommand.js +1 -1
  223. package/lib/esm/internal/app-binder/command/SendEIP712StructDefinitionCommand.js.map +3 -3
  224. package/lib/esm/internal/app-binder/command/SendEIP712StructDefinitionCommand.test.js +1 -1
  225. package/lib/esm/internal/app-binder/command/SendEIP712StructDefinitionCommand.test.js.map +2 -2
  226. package/lib/esm/internal/app-binder/command/SendEIP712StructImplemCommand.js +1 -1
  227. package/lib/esm/internal/app-binder/command/SendEIP712StructImplemCommand.js.map +3 -3
  228. package/lib/esm/internal/app-binder/command/SetExternalPluginCommand.js +1 -1
  229. package/lib/esm/internal/app-binder/command/SetExternalPluginCommand.js.map +3 -3
  230. package/lib/esm/internal/app-binder/command/SetExternalPluginCommand.test.js +2 -2
  231. package/lib/esm/internal/app-binder/command/SetExternalPluginCommand.test.js.map +3 -3
  232. package/lib/esm/internal/app-binder/command/SetPluginCommand.js +1 -1
  233. package/lib/esm/internal/app-binder/command/SetPluginCommand.js.map +3 -3
  234. package/lib/esm/internal/app-binder/command/SetPluginCommand.test.js +1 -1
  235. package/lib/esm/internal/app-binder/command/SetPluginCommand.test.js.map +3 -3
  236. package/lib/esm/internal/app-binder/command/SignEIP712Command.js +1 -1
  237. package/lib/esm/internal/app-binder/command/SignEIP712Command.js.map +3 -3
  238. package/lib/esm/internal/app-binder/command/SignEIP712Command.test.js +1 -1
  239. package/lib/esm/internal/app-binder/command/SignEIP712Command.test.js.map +2 -2
  240. package/lib/esm/internal/app-binder/command/SignPersonalMessageCommand.js +1 -1
  241. package/lib/esm/internal/app-binder/command/SignPersonalMessageCommand.js.map +3 -3
  242. package/lib/esm/internal/app-binder/command/SignTransactionCommand.js +1 -1
  243. package/lib/esm/internal/app-binder/command/SignTransactionCommand.js.map +3 -3
  244. package/lib/esm/internal/app-binder/command/SignTransactionCommand.test.js +1 -1
  245. package/lib/esm/internal/app-binder/command/SignTransactionCommand.test.js.map +2 -2
  246. package/lib/esm/internal/app-binder/command/StartTransactionCommand.js +1 -1
  247. package/lib/esm/internal/app-binder/command/StartTransactionCommand.js.map +3 -3
  248. package/lib/esm/internal/app-binder/command/StartTransactionCommand.test.js +1 -1
  249. package/lib/esm/internal/app-binder/command/StartTransactionCommand.test.js.map +3 -3
  250. package/lib/esm/internal/app-binder/command/StoreTransactionCommand.js +1 -1
  251. package/lib/esm/internal/app-binder/command/StoreTransactionCommand.js.map +3 -3
  252. package/lib/esm/internal/app-binder/command/StoreTransactionCommand.test.js +1 -1
  253. package/lib/esm/internal/app-binder/command/StoreTransactionCommand.test.js.map +3 -3
  254. package/lib/esm/internal/app-binder/command/utils/ethAppErrors.js +2 -0
  255. package/lib/esm/internal/app-binder/command/utils/ethAppErrors.js.map +7 -0
  256. package/lib/esm/internal/app-binder/command/utils/ethAppErrors.test.js +2 -0
  257. package/lib/esm/internal/app-binder/command/utils/ethAppErrors.test.js.map +7 -0
  258. package/lib/esm/internal/app-binder/constant/plugins.js +2 -0
  259. package/lib/esm/internal/app-binder/constant/plugins.js.map +7 -0
  260. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js +1 -1
  261. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js.map +3 -3
  262. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js +1 -1
  263. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js.map +3 -3
  264. package/lib/esm/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.js +1 -1
  265. package/lib/esm/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.js.map +3 -3
  266. package/lib/esm/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.test.js +1 -1
  267. package/lib/esm/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.test.js.map +3 -3
  268. package/lib/esm/internal/app-binder/device-action/__test-utils__/makeInternalApi.js +1 -1
  269. package/lib/esm/internal/app-binder/device-action/__test-utils__/makeInternalApi.js.map +3 -3
  270. package/lib/esm/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.js +1 -1
  271. package/lib/esm/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.js.map +2 -2
  272. package/lib/esm/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.js +1 -1
  273. package/lib/esm/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.js.map +3 -3
  274. package/lib/esm/internal/app-binder/task/BuildEIP712ContextTask.js +1 -1
  275. package/lib/esm/internal/app-binder/task/BuildEIP712ContextTask.js.map +3 -3
  276. package/lib/esm/internal/app-binder/task/BuildEIP712ContextTask.test.js +1 -1
  277. package/lib/esm/internal/app-binder/task/BuildEIP712ContextTask.test.js.map +3 -3
  278. package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.js +1 -1
  279. package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.js.map +3 -3
  280. package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.test.js +1 -1
  281. package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.test.js.map +3 -3
  282. package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.js +1 -1
  283. package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.js.map +3 -3
  284. package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.test.js +1 -1
  285. package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.test.js.map +2 -2
  286. package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.js +1 -1
  287. package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.js.map +2 -2
  288. package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.test.js +1 -1
  289. package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.test.js.map +2 -2
  290. package/lib/esm/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.js +1 -1
  291. package/lib/esm/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.js.map +3 -3
  292. package/lib/esm/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.test.js +1 -1
  293. package/lib/esm/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.test.js.map +3 -3
  294. package/lib/esm/internal/app-binder/task/ProvideTransactionGenericContextTask.js +1 -1
  295. package/lib/esm/internal/app-binder/task/ProvideTransactionGenericContextTask.js.map +3 -3
  296. package/lib/esm/internal/app-binder/task/ProvideTransactionGenericContextTask.test.js +1 -1
  297. package/lib/esm/internal/app-binder/task/ProvideTransactionGenericContextTask.test.js.map +3 -3
  298. package/lib/esm/internal/app-binder/task/SendCommandInChunksTask.js +1 -1
  299. package/lib/esm/internal/app-binder/task/SendCommandInChunksTask.js.map +2 -2
  300. package/lib/esm/internal/app-binder/task/SendEIP712StructImplemTask.js +1 -1
  301. package/lib/esm/internal/app-binder/task/SendEIP712StructImplemTask.js.map +2 -2
  302. package/lib/esm/internal/app-binder/task/SendEIP712StructImplemTask.test.js +1 -1
  303. package/lib/esm/internal/app-binder/task/SendEIP712StructImplemTask.test.js.map +2 -2
  304. package/lib/esm/internal/app-binder/task/SendPayloadInChunksTask.js +1 -1
  305. package/lib/esm/internal/app-binder/task/SendPayloadInChunksTask.js.map +2 -2
  306. package/lib/esm/internal/app-binder/task/SendPayloadInChunksTask.test.js +1 -1
  307. package/lib/esm/internal/app-binder/task/SendPayloadInChunksTask.test.js.map +2 -2
  308. package/lib/esm/internal/app-binder/task/SendSignPersonalMessageTask.js +1 -1
  309. package/lib/esm/internal/app-binder/task/SendSignPersonalMessageTask.js.map +2 -2
  310. package/lib/esm/internal/app-binder/task/SendSignPersonalMessageTask.test.js +1 -1
  311. package/lib/esm/internal/app-binder/task/SendSignPersonalMessageTask.test.js.map +2 -2
  312. package/lib/esm/internal/app-binder/task/SendSignTransactionTask.js +1 -1
  313. package/lib/esm/internal/app-binder/task/SendSignTransactionTask.js.map +3 -3
  314. package/lib/esm/internal/app-binder/task/SendSignTransactionTask.test.js +1 -1
  315. package/lib/esm/internal/app-binder/task/SendSignTransactionTask.test.js.map +2 -2
  316. package/lib/esm/internal/message/use-case/SignMessageUseCase.test.js +1 -1
  317. package/lib/esm/internal/message/use-case/SignMessageUseCase.test.js.map +2 -2
  318. package/lib/esm/internal/transaction/di/transactionModule.js +1 -1
  319. package/lib/esm/internal/transaction/di/transactionModule.js.map +3 -3
  320. package/lib/esm/internal/transaction/di/transactionModule.test.js +1 -1
  321. package/lib/esm/internal/transaction/di/transactionModule.test.js.map +2 -2
  322. package/lib/esm/internal/transaction/service/mapper/EthersRawTransactionMapper.js +2 -0
  323. package/lib/esm/internal/transaction/service/mapper/EthersRawTransactionMapper.js.map +7 -0
  324. package/lib/esm/internal/transaction/service/mapper/EthersRawTransactionMapper.test.js +2 -0
  325. package/lib/esm/internal/transaction/service/mapper/EthersRawTransactionMapper.test.js.map +7 -0
  326. package/lib/esm/internal/transaction/service/mapper/TransactionMapperService.js +1 -1
  327. package/lib/esm/internal/transaction/service/mapper/TransactionMapperService.js.map +2 -2
  328. package/lib/esm/internal/transaction/service/mapper/TransactionMapperService.test.js +1 -1
  329. package/lib/esm/internal/transaction/service/mapper/TransactionMapperService.test.js.map +2 -2
  330. package/lib/esm/internal/transaction/service/parser/TransactionParserService.js +1 -1
  331. package/lib/esm/internal/transaction/service/parser/TransactionParserService.js.map +2 -2
  332. package/lib/esm/internal/transaction/service/parser/TransactionParserService.test.js +1 -1
  333. package/lib/esm/internal/transaction/service/parser/TransactionParserService.test.js.map +2 -2
  334. package/lib/esm/internal/transaction/use-case/SignTransactionUseCase.js +1 -1
  335. package/lib/esm/internal/transaction/use-case/SignTransactionUseCase.js.map +2 -2
  336. package/lib/esm/internal/transaction/use-case/SignTransactionUseCase.test.js +1 -1
  337. package/lib/esm/internal/transaction/use-case/SignTransactionUseCase.test.js.map +3 -3
  338. package/lib/esm/internal/typed-data/use-case/SignTypedDataUseCase.test.js +1 -1
  339. package/lib/esm/internal/typed-data/use-case/SignTypedDataUseCase.test.js.map +2 -2
  340. package/lib/esm/package.json +12 -12
  341. package/lib/types/api/SignerEth.d.ts +1 -2
  342. package/lib/types/api/SignerEth.d.ts.map +1 -1
  343. package/lib/types/api/app-binder/GetAddressDeviceActionTypes.d.ts +3 -2
  344. package/lib/types/api/app-binder/GetAddressDeviceActionTypes.d.ts.map +1 -1
  345. package/lib/types/api/app-binder/SignPersonalMessageDeviceActionTypes.d.ts +3 -11
  346. package/lib/types/api/app-binder/SignPersonalMessageDeviceActionTypes.d.ts.map +1 -1
  347. package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts +4 -4
  348. package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts.map +1 -1
  349. package/lib/types/api/app-binder/SignTypedDataDeviceActionTypes.d.ts +3 -2
  350. package/lib/types/api/app-binder/SignTypedDataDeviceActionTypes.d.ts.map +1 -1
  351. package/lib/types/api/index.d.ts +2 -2
  352. package/lib/types/api/index.d.ts.map +1 -1
  353. package/lib/types/api/model/{Transaction.d.ts → TransactionType.d.ts} +1 -4
  354. package/lib/types/api/model/TransactionType.d.ts.map +1 -0
  355. package/lib/types/internal/DefaultSignerEth.d.ts +1 -2
  356. package/lib/types/internal/DefaultSignerEth.d.ts.map +1 -1
  357. package/lib/types/internal/app-binder/EthAppBinder.d.ts +1 -2
  358. package/lib/types/internal/app-binder/EthAppBinder.d.ts.map +1 -1
  359. package/lib/types/internal/app-binder/command/GetAddressCommand.d.ts +5 -3
  360. package/lib/types/internal/app-binder/command/GetAddressCommand.d.ts.map +1 -1
  361. package/lib/types/internal/app-binder/command/GetChallengeCommand.d.ts +4 -2
  362. package/lib/types/internal/app-binder/command/GetChallengeCommand.d.ts.map +1 -1
  363. package/lib/types/internal/app-binder/command/ProvideEnumCommand.d.ts +4 -2
  364. package/lib/types/internal/app-binder/command/ProvideEnumCommand.d.ts.map +1 -1
  365. package/lib/types/internal/app-binder/command/ProvideNFTInformationCommand.d.ts +4 -3
  366. package/lib/types/internal/app-binder/command/ProvideNFTInformationCommand.d.ts.map +1 -1
  367. package/lib/types/internal/app-binder/command/ProvideTokenInformationCommand.d.ts +4 -2
  368. package/lib/types/internal/app-binder/command/ProvideTokenInformationCommand.d.ts.map +1 -1
  369. package/lib/types/internal/app-binder/command/ProvideTransactionFieldDescriptionCommand.d.ts +4 -2
  370. package/lib/types/internal/app-binder/command/ProvideTransactionFieldDescriptionCommand.d.ts.map +1 -1
  371. package/lib/types/internal/app-binder/command/ProvideTransactionInformationCommand.d.ts +4 -2
  372. package/lib/types/internal/app-binder/command/ProvideTransactionInformationCommand.d.ts.map +1 -1
  373. package/lib/types/internal/app-binder/command/ProvideTrustedNameCommand.d.ts +4 -2
  374. package/lib/types/internal/app-binder/command/ProvideTrustedNameCommand.d.ts.map +1 -1
  375. package/lib/types/internal/app-binder/command/SendEIP712FilteringCommand.d.ts +4 -2
  376. package/lib/types/internal/app-binder/command/SendEIP712FilteringCommand.d.ts.map +1 -1
  377. package/lib/types/internal/app-binder/command/SendEIP712StructDefinitionCommand.d.ts +4 -2
  378. package/lib/types/internal/app-binder/command/SendEIP712StructDefinitionCommand.d.ts.map +1 -1
  379. package/lib/types/internal/app-binder/command/SendEIP712StructImplemCommand.d.ts +4 -2
  380. package/lib/types/internal/app-binder/command/SendEIP712StructImplemCommand.d.ts.map +1 -1
  381. package/lib/types/internal/app-binder/command/SetExternalPluginCommand.d.ts +5 -7
  382. package/lib/types/internal/app-binder/command/SetExternalPluginCommand.d.ts.map +1 -1
  383. package/lib/types/internal/app-binder/command/SetPluginCommand.d.ts +5 -7
  384. package/lib/types/internal/app-binder/command/SetPluginCommand.d.ts.map +1 -1
  385. package/lib/types/internal/app-binder/command/SignEIP712Command.d.ts +5 -3
  386. package/lib/types/internal/app-binder/command/SignEIP712Command.d.ts.map +1 -1
  387. package/lib/types/internal/app-binder/command/SignPersonalMessageCommand.d.ts +5 -3
  388. package/lib/types/internal/app-binder/command/SignPersonalMessageCommand.d.ts.map +1 -1
  389. package/lib/types/internal/app-binder/command/SignTransactionCommand.d.ts +5 -3
  390. package/lib/types/internal/app-binder/command/SignTransactionCommand.d.ts.map +1 -1
  391. package/lib/types/internal/app-binder/command/StartTransactionCommand.d.ts +4 -2
  392. package/lib/types/internal/app-binder/command/StartTransactionCommand.d.ts.map +1 -1
  393. package/lib/types/internal/app-binder/command/StoreTransactionCommand.d.ts +4 -2
  394. package/lib/types/internal/app-binder/command/StoreTransactionCommand.d.ts.map +1 -1
  395. package/lib/types/internal/app-binder/command/utils/ethAppErrors.d.ts +8 -0
  396. package/lib/types/internal/app-binder/command/utils/ethAppErrors.d.ts.map +1 -0
  397. package/lib/types/internal/app-binder/command/utils/ethAppErrors.test.d.ts +2 -0
  398. package/lib/types/internal/app-binder/command/utils/ethAppErrors.test.d.ts.map +1 -0
  399. package/lib/types/internal/app-binder/constant/plugins.d.ts +2 -0
  400. package/lib/types/internal/app-binder/constant/plugins.d.ts.map +1 -0
  401. package/lib/types/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.d.ts +9 -9
  402. package/lib/types/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.d.ts.map +1 -1
  403. package/lib/types/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.d.ts +11 -3
  404. package/lib/types/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.d.ts.map +1 -1
  405. package/lib/types/internal/app-binder/device-action/__test-utils__/makeInternalApi.d.ts +2 -1
  406. package/lib/types/internal/app-binder/device-action/__test-utils__/makeInternalApi.d.ts.map +1 -1
  407. package/lib/types/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.d.ts.map +1 -1
  408. package/lib/types/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.d.ts +5 -2
  409. package/lib/types/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.d.ts.map +1 -1
  410. package/lib/types/internal/app-binder/task/BuildEIP712ContextTask.d.ts.map +1 -1
  411. package/lib/types/internal/app-binder/task/BuildTransactionContextTask.d.ts +3 -3
  412. package/lib/types/internal/app-binder/task/BuildTransactionContextTask.d.ts.map +1 -1
  413. package/lib/types/internal/app-binder/task/ProvideEIP712ContextTask.d.ts +12 -5
  414. package/lib/types/internal/app-binder/task/ProvideEIP712ContextTask.d.ts.map +1 -1
  415. package/lib/types/internal/app-binder/task/ProvideTransactionContextTask.d.ts +3 -6
  416. package/lib/types/internal/app-binder/task/ProvideTransactionContextTask.d.ts.map +1 -1
  417. package/lib/types/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.d.ts +54 -12
  418. package/lib/types/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.d.ts.map +1 -1
  419. package/lib/types/internal/app-binder/task/ProvideTransactionGenericContextTask.d.ts +6 -6
  420. package/lib/types/internal/app-binder/task/ProvideTransactionGenericContextTask.d.ts.map +1 -1
  421. package/lib/types/internal/app-binder/task/SendCommandInChunksTask.d.ts +3 -2
  422. package/lib/types/internal/app-binder/task/SendCommandInChunksTask.d.ts.map +1 -1
  423. package/lib/types/internal/app-binder/task/SendEIP712StructImplemTask.d.ts +2 -1
  424. package/lib/types/internal/app-binder/task/SendEIP712StructImplemTask.d.ts.map +1 -1
  425. package/lib/types/internal/app-binder/task/SendPayloadInChunksTask.d.ts +2 -1
  426. package/lib/types/internal/app-binder/task/SendPayloadInChunksTask.d.ts.map +1 -1
  427. package/lib/types/internal/app-binder/task/SendSignPersonalMessageTask.d.ts +2 -1
  428. package/lib/types/internal/app-binder/task/SendSignPersonalMessageTask.d.ts.map +1 -1
  429. package/lib/types/internal/app-binder/task/SendSignTransactionTask.d.ts +3 -2
  430. package/lib/types/internal/app-binder/task/SendSignTransactionTask.d.ts.map +1 -1
  431. package/lib/types/internal/transaction/di/transactionModule.d.ts.map +1 -1
  432. package/lib/types/internal/transaction/service/mapper/EthersRawTransactionMapper.d.ts +7 -0
  433. package/lib/types/internal/transaction/service/mapper/EthersRawTransactionMapper.d.ts.map +1 -0
  434. package/lib/types/internal/transaction/service/mapper/EthersRawTransactionMapper.test.d.ts +2 -0
  435. package/lib/types/internal/transaction/service/mapper/EthersRawTransactionMapper.test.d.ts.map +1 -0
  436. package/lib/types/internal/transaction/service/mapper/TransactionMapper.d.ts +1 -2
  437. package/lib/types/internal/transaction/service/mapper/TransactionMapper.d.ts.map +1 -1
  438. package/lib/types/internal/transaction/service/mapper/TransactionMapperService.d.ts +1 -2
  439. package/lib/types/internal/transaction/service/mapper/TransactionMapperService.d.ts.map +1 -1
  440. package/lib/types/internal/transaction/service/mapper/model/TransactionMapperResult.d.ts +1 -1
  441. package/lib/types/internal/transaction/service/mapper/model/TransactionMapperResult.d.ts.map +1 -1
  442. package/lib/types/internal/transaction/service/parser/TransactionParserService.d.ts.map +1 -1
  443. package/lib/types/internal/transaction/use-case/SignTransactionUseCase.d.ts +1 -2
  444. package/lib/types/internal/transaction/use-case/SignTransactionUseCase.d.ts.map +1 -1
  445. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  446. package/package.json +14 -14
  447. package/lib/cjs/api/model/Transaction.js +0 -2
  448. package/lib/cjs/api/model/Transaction.js.map +0 -7
  449. package/lib/cjs/internal/app-binder/device-action/SignPersonalMessage/SignPersonalMessageDeviceAction.js +0 -2
  450. package/lib/cjs/internal/app-binder/device-action/SignPersonalMessage/SignPersonalMessageDeviceAction.js.map +0 -7
  451. package/lib/cjs/internal/app-binder/device-action/SignPersonalMessage/SignPersonalMessageDeviceAction.test.js +0 -2
  452. package/lib/cjs/internal/app-binder/device-action/SignPersonalMessage/SignPersonalMessageDeviceAction.test.js.map +0 -7
  453. package/lib/cjs/internal/transaction/service/mapper/EthersV5TransactionMapper.js +0 -2
  454. package/lib/cjs/internal/transaction/service/mapper/EthersV5TransactionMapper.js.map +0 -7
  455. package/lib/cjs/internal/transaction/service/mapper/EthersV5TransactionMapper.test.js +0 -2
  456. package/lib/cjs/internal/transaction/service/mapper/EthersV5TransactionMapper.test.js.map +0 -7
  457. package/lib/cjs/internal/transaction/service/mapper/EthersV6TransactionMapper.js +0 -2
  458. package/lib/cjs/internal/transaction/service/mapper/EthersV6TransactionMapper.js.map +0 -7
  459. package/lib/cjs/internal/transaction/service/mapper/EthersV6TransactionMapper.test.js +0 -2
  460. package/lib/cjs/internal/transaction/service/mapper/EthersV6TransactionMapper.test.js.map +0 -7
  461. package/lib/esm/api/model/Transaction.js +0 -2
  462. package/lib/esm/api/model/Transaction.js.map +0 -7
  463. package/lib/esm/internal/app-binder/device-action/SignPersonalMessage/SignPersonalMessageDeviceAction.js +0 -2
  464. package/lib/esm/internal/app-binder/device-action/SignPersonalMessage/SignPersonalMessageDeviceAction.js.map +0 -7
  465. package/lib/esm/internal/app-binder/device-action/SignPersonalMessage/SignPersonalMessageDeviceAction.test.js +0 -2
  466. package/lib/esm/internal/app-binder/device-action/SignPersonalMessage/SignPersonalMessageDeviceAction.test.js.map +0 -7
  467. package/lib/esm/internal/transaction/service/mapper/EthersV5TransactionMapper.js +0 -2
  468. package/lib/esm/internal/transaction/service/mapper/EthersV5TransactionMapper.js.map +0 -7
  469. package/lib/esm/internal/transaction/service/mapper/EthersV5TransactionMapper.test.js +0 -2
  470. package/lib/esm/internal/transaction/service/mapper/EthersV5TransactionMapper.test.js.map +0 -7
  471. package/lib/esm/internal/transaction/service/mapper/EthersV6TransactionMapper.js +0 -2
  472. package/lib/esm/internal/transaction/service/mapper/EthersV6TransactionMapper.js.map +0 -7
  473. package/lib/esm/internal/transaction/service/mapper/EthersV6TransactionMapper.test.js +0 -2
  474. package/lib/esm/internal/transaction/service/mapper/EthersV6TransactionMapper.test.js.map +0 -7
  475. package/lib/types/api/model/Transaction.d.ts.map +0 -1
  476. package/lib/types/internal/app-binder/device-action/SignPersonalMessage/SignPersonalMessageDeviceAction.d.ts +0 -17
  477. package/lib/types/internal/app-binder/device-action/SignPersonalMessage/SignPersonalMessageDeviceAction.d.ts.map +0 -1
  478. package/lib/types/internal/app-binder/device-action/SignPersonalMessage/SignPersonalMessageDeviceAction.test.d.ts +0 -2
  479. package/lib/types/internal/app-binder/device-action/SignPersonalMessage/SignPersonalMessageDeviceAction.test.d.ts.map +0 -1
  480. package/lib/types/internal/transaction/service/mapper/EthersV5TransactionMapper.d.ts +0 -10
  481. package/lib/types/internal/transaction/service/mapper/EthersV5TransactionMapper.d.ts.map +0 -1
  482. package/lib/types/internal/transaction/service/mapper/EthersV5TransactionMapper.test.d.ts +0 -2
  483. package/lib/types/internal/transaction/service/mapper/EthersV5TransactionMapper.test.d.ts.map +0 -1
  484. package/lib/types/internal/transaction/service/mapper/EthersV6TransactionMapper.d.ts +0 -9
  485. package/lib/types/internal/transaction/service/mapper/EthersV6TransactionMapper.d.ts.map +0 -1
  486. package/lib/types/internal/transaction/service/mapper/EthersV6TransactionMapper.test.d.ts +0 -2
  487. package/lib/types/internal/transaction/service/mapper/EthersV6TransactionMapper.test.d.ts.map +0 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/task/BuildTransactionContextTask.ts"],
4
- "sourcesContent": ["import {\n type ClearSignContextSuccess,\n ClearSignContextType,\n type ContextModule,\n} from \"@ledgerhq/context-module\";\nimport {\n DeviceSessionStateType,\n type InternalApi,\n} from \"@ledgerhq/device-management-kit\";\nimport { gte } from \"semver\";\n\nimport { type Transaction, type TransactionType } from \"@api/model/Transaction\";\nimport { type TransactionOptions } from \"@api/model/TransactionOptions\";\nimport { type TransactionMapperService } from \"@internal/transaction/service/mapper/TransactionMapperService\";\n\nimport { type GenericContext } from \"./ProvideTransactionGenericContextTask\";\n\nexport type BuildTransactionTaskResult = {\n readonly clearSignContexts: ClearSignContextSuccess[] | GenericContext;\n readonly serializedTransaction: Uint8Array;\n readonly chainId: number;\n readonly transactionType: TransactionType;\n};\n\nexport type BuildTransactionContextTaskArgs = {\n readonly contextModule: ContextModule;\n readonly mapper: TransactionMapperService;\n readonly transaction: Transaction;\n readonly options: TransactionOptions;\n readonly challenge: string;\n};\n\nexport class BuildTransactionContextTask {\n constructor(\n private readonly api: InternalApi,\n private readonly args: BuildTransactionContextTaskArgs,\n ) {}\n\n async run(): Promise<BuildTransactionTaskResult> {\n const { contextModule, mapper, transaction, options, challenge } =\n this.args;\n const parsed = mapper.mapTransactionToSubset(transaction);\n parsed.ifLeft((err) => {\n throw err;\n });\n const { subset, serializedTransaction, type } = parsed.unsafeCoerce();\n\n const clearSignContexts = await contextModule.getContexts({\n challenge,\n domain: options.domain,\n ...subset,\n });\n\n // TODO: for now we ignore the error contexts\n // as we consider that they are warnings and not blocking\n const clearSignContextsSuccess: ClearSignContextSuccess[] =\n clearSignContexts.filter(\n (context) => context.type !== ClearSignContextType.ERROR,\n );\n\n let filteredContexts: ClearSignContextSuccess[] | GenericContext = [];\n const transactionInfo = clearSignContextsSuccess.find(\n (ctx) => ctx.type === ClearSignContextType.TRANSACTION_INFO,\n );\n if (!this.supportsGenericParser() || transactionInfo === undefined) {\n filteredContexts = clearSignContextsSuccess.filter(\n (ctx) =>\n ctx.type !== ClearSignContextType.TRANSACTION_INFO &&\n ctx.type !== ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION &&\n ctx.type !== ClearSignContextType.ENUM,\n );\n } else {\n const transactionFields = clearSignContextsSuccess.filter(\n (ctx) =>\n ctx.type === ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION ||\n ctx.type === ClearSignContextType.ENUM,\n );\n filteredContexts = {\n transactionInfo: transactionInfo.payload,\n transactionFields,\n };\n }\n\n return {\n clearSignContexts: filteredContexts,\n serializedTransaction,\n chainId: subset.chainId,\n transactionType: type,\n };\n }\n\n private supportsGenericParser(): boolean {\n const deviceState = this.api.getDeviceSessionState();\n if (deviceState.sessionStateType === DeviceSessionStateType.Connected) {\n return false;\n }\n if (deviceState.currentApp.name !== \"Ethereum\") {\n return false;\n }\n return gte(deviceState.currentApp.version, \"1.14.0\");\n }\n}\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,iCAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAIO,oCACPC,EAGO,2CACPC,EAAoB,kBAuBb,MAAMJ,CAA4B,CACvC,YACmBK,EACAC,EACjB,CAFiB,SAAAD,EACA,UAAAC,CAChB,CAEH,MAAM,KAA2C,CAC/C,KAAM,CAAE,cAAAC,EAAe,OAAAC,EAAQ,YAAAC,EAAa,QAAAC,EAAS,UAAAC,CAAU,EAC7D,KAAK,KACDC,EAASJ,EAAO,uBAAuBC,CAAW,EACxDG,EAAO,OAAQC,GAAQ,CACrB,MAAMA,CACR,CAAC,EACD,KAAM,CAAE,OAAAC,EAAQ,sBAAAC,EAAuB,KAAAC,CAAK,EAAIJ,EAAO,aAAa,EAU9DK,GARoB,MAAMV,EAAc,YAAY,CACxD,UAAAI,EACA,OAAQD,EAAQ,OAChB,GAAGI,CACL,CAAC,GAKmB,OACfI,GAAYA,EAAQ,OAAS,uBAAqB,KACrD,EAEF,IAAIC,EAA+D,CAAC,EACpE,MAAMC,EAAkBH,EAAyB,KAC9CI,GAAQA,EAAI,OAAS,uBAAqB,gBAC7C,EACA,GAAI,CAAC,KAAK,sBAAsB,GAAKD,IAAoB,OACvDD,EAAmBF,EAAyB,OACzCI,GACCA,EAAI,OAAS,uBAAqB,kBAClCA,EAAI,OAAS,uBAAqB,+BAClCA,EAAI,OAAS,uBAAqB,IACtC,MACK,CACL,MAAMC,EAAoBL,EAAyB,OAChDI,GACCA,EAAI,OAAS,uBAAqB,+BAClCA,EAAI,OAAS,uBAAqB,IACtC,EACAF,EAAmB,CACjB,gBAAiBC,EAAgB,QACjC,kBAAAE,CACF,CACF,CAEA,MAAO,CACL,kBAAmBH,EACnB,sBAAAJ,EACA,QAASD,EAAO,QAChB,gBAAiBE,CACnB,CACF,CAEQ,uBAAiC,CACvC,MAAMO,EAAc,KAAK,IAAI,sBAAsB,EAInD,OAHIA,EAAY,mBAAqB,yBAAuB,WAGxDA,EAAY,WAAW,OAAS,WAC3B,MAEF,OAAIA,EAAY,WAAW,QAAS,QAAQ,CACrD,CACF",
6
- "names": ["BuildTransactionContextTask_exports", "__export", "BuildTransactionContextTask", "__toCommonJS", "import_context_module", "import_device_management_kit", "import_semver", "api", "args", "contextModule", "mapper", "transaction", "options", "challenge", "parsed", "err", "subset", "serializedTransaction", "type", "clearSignContextsSuccess", "context", "filteredContexts", "transactionInfo", "ctx", "transactionFields", "deviceState"]
4
+ "sourcesContent": ["import {\n type ClearSignContextSuccess,\n type ClearSignContextSuccessType,\n ClearSignContextType,\n type ContextModule,\n} from \"@ledgerhq/context-module\";\nimport {\n DeviceModelId,\n type DeviceSessionState,\n DeviceSessionStateType,\n type InternalApi,\n} from \"@ledgerhq/device-management-kit\";\nimport { gte } from \"semver\";\n\nimport { type TransactionOptions } from \"@api/model/TransactionOptions\";\nimport { type TransactionType } from \"@api/model/TransactionType\";\nimport { ETHEREUM_PLUGINS } from \"@internal/app-binder/constant/plugins\";\nimport { type TransactionMapperService } from \"@internal/transaction/service/mapper/TransactionMapperService\";\n\nimport { type GenericContext } from \"./ProvideTransactionGenericContextTask\";\n\nexport type BuildTransactionTaskResult = {\n readonly clearSignContexts: ClearSignContextSuccess[] | GenericContext;\n readonly serializedTransaction: Uint8Array;\n readonly chainId: number;\n readonly transactionType: TransactionType;\n};\n\nexport type BuildTransactionContextTaskArgs = {\n readonly contextModule: ContextModule;\n readonly mapper: TransactionMapperService;\n readonly transaction: Uint8Array;\n readonly options: TransactionOptions;\n readonly challenge: string | null;\n};\n\nexport class BuildTransactionContextTask {\n constructor(\n private readonly api: InternalApi,\n private readonly args: BuildTransactionContextTaskArgs,\n ) {}\n\n async run(): Promise<BuildTransactionTaskResult> {\n const { contextModule, mapper, transaction, options, challenge } =\n this.args;\n const deviceState = this.api.getDeviceSessionState();\n\n const parsed = mapper.mapTransactionToSubset(transaction);\n parsed.ifLeft((err) => {\n throw err;\n });\n const { subset, serializedTransaction, type } = parsed.unsafeCoerce();\n\n const clearSignContexts = await contextModule.getContexts({\n challenge: challenge ?? undefined,\n domain: options.domain,\n deviceModelId: deviceState.deviceModelId,\n ...subset,\n });\n\n // NOTE: we need to filter out the ENUM and ERROR types\n // ENUM are handled differently\n // ERROR are not handled at all for now\n const clearSignContextsSuccess: ClearSignContextSuccess<\n Exclude<ClearSignContextSuccessType, ClearSignContextType.ENUM>\n >[] = clearSignContexts.filter(\n (context) =>\n context.type !== ClearSignContextType.ERROR &&\n context.type !== ClearSignContextType.ENUM,\n );\n\n // Retrieve all ENUM contexts\n const transactionEnums: ClearSignContextSuccess<ClearSignContextType.ENUM>[] =\n clearSignContexts.filter(\n (context) => context.type === ClearSignContextType.ENUM,\n );\n\n let filteredContexts: ClearSignContextSuccess[] | GenericContext = [];\n const transactionInfo = clearSignContextsSuccess.find(\n (ctx) => ctx.type === ClearSignContextType.TRANSACTION_INFO,\n );\n\n if (transactionInfo && !transactionInfo.certificate) {\n throw new Error(\"Transaction info certificate is missing\");\n }\n\n // If the device does not support the generic parser,\n // we need to filter out the transaction info and transaction field description\n // as they are not supported by the device\n if (\n !this.supportsGenericParser(deviceState) ||\n transactionInfo === undefined\n ) {\n filteredContexts = clearSignContextsSuccess.filter(\n (ctx) =>\n ctx.type !== ClearSignContextType.TRANSACTION_INFO &&\n ctx.type !== ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n );\n } else {\n const transactionFields = clearSignContextsSuccess.filter(\n (ctx) =>\n ctx.type === ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n );\n filteredContexts = {\n transactionInfo: transactionInfo.payload,\n transactionInfoCertificate: transactionInfo.certificate!,\n transactionFields,\n transactionEnums,\n };\n }\n\n return {\n clearSignContexts: filteredContexts,\n serializedTransaction,\n chainId: subset.chainId,\n transactionType: type,\n };\n }\n\n private supportsGenericParser(deviceState: DeviceSessionState): boolean {\n if (deviceState.sessionStateType === DeviceSessionStateType.Connected) {\n return false;\n }\n\n if (\n deviceState.currentApp.name !== \"Ethereum\" &&\n !ETHEREUM_PLUGINS.includes(deviceState.currentApp.name)\n ) {\n // Sanity check, should never happen as open app is called before this task\n throw new Error(\"Unsupported app\");\n }\n\n if (deviceState.deviceModelId === DeviceModelId.NANO_S) {\n return false;\n }\n return gte(deviceState.currentApp.version, \"1.15.0\");\n }\n}\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,iCAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAKO,oCACPC,EAKO,2CACPC,EAAoB,kBAIpBC,EAAiC,iDAoB1B,MAAML,CAA4B,CACvC,YACmBM,EACAC,EACjB,CAFiB,SAAAD,EACA,UAAAC,CAChB,CAEH,MAAM,KAA2C,CAC/C,KAAM,CAAE,cAAAC,EAAe,OAAAC,EAAQ,YAAAC,EAAa,QAAAC,EAAS,UAAAC,CAAU,EAC7D,KAAK,KACDC,EAAc,KAAK,IAAI,sBAAsB,EAE7CC,EAASL,EAAO,uBAAuBC,CAAW,EACxDI,EAAO,OAAQC,GAAQ,CACrB,MAAMA,CACR,CAAC,EACD,KAAM,CAAE,OAAAC,EAAQ,sBAAAC,EAAuB,KAAAC,CAAK,EAAIJ,EAAO,aAAa,EAE9DK,EAAoB,MAAMX,EAAc,YAAY,CACxD,UAAWI,GAAa,OACxB,OAAQD,EAAQ,OAChB,cAAeE,EAAY,cAC3B,GAAGG,CACL,CAAC,EAKKI,EAEAD,EAAkB,OACrBE,GACCA,EAAQ,OAAS,uBAAqB,OACtCA,EAAQ,OAAS,uBAAqB,IAC1C,EAGMC,EACJH,EAAkB,OACfE,GAAYA,EAAQ,OAAS,uBAAqB,IACrD,EAEF,IAAIE,EAA+D,CAAC,EACpE,MAAMC,EAAkBJ,EAAyB,KAC9CK,GAAQA,EAAI,OAAS,uBAAqB,gBAC7C,EAEA,GAAID,GAAmB,CAACA,EAAgB,YACtC,MAAM,IAAI,MAAM,yCAAyC,EAM3D,GACE,CAAC,KAAK,sBAAsBX,CAAW,GACvCW,IAAoB,OAEpBD,EAAmBH,EAAyB,OACzCK,GACCA,EAAI,OAAS,uBAAqB,kBAClCA,EAAI,OAAS,uBAAqB,6BACtC,MACK,CACL,MAAMC,EAAoBN,EAAyB,OAChDK,GACCA,EAAI,OAAS,uBAAqB,6BACtC,EACAF,EAAmB,CACjB,gBAAiBC,EAAgB,QACjC,2BAA4BA,EAAgB,YAC5C,kBAAAE,EACA,iBAAAJ,CACF,CACF,CAEA,MAAO,CACL,kBAAmBC,EACnB,sBAAAN,EACA,QAASD,EAAO,QAChB,gBAAiBE,CACnB,CACF,CAEQ,sBAAsBL,EAA0C,CACtE,GAAIA,EAAY,mBAAqB,yBAAuB,UAC1D,MAAO,GAGT,GACEA,EAAY,WAAW,OAAS,YAChC,CAAC,mBAAiB,SAASA,EAAY,WAAW,IAAI,EAGtD,MAAM,IAAI,MAAM,iBAAiB,EAGnC,OAAIA,EAAY,gBAAkB,gBAAc,OACvC,MAEF,OAAIA,EAAY,WAAW,QAAS,QAAQ,CACrD,CACF",
6
+ "names": ["BuildTransactionContextTask_exports", "__export", "BuildTransactionContextTask", "__toCommonJS", "import_context_module", "import_device_management_kit", "import_semver", "import_plugins", "api", "args", "contextModule", "mapper", "transaction", "options", "challenge", "deviceState", "parsed", "err", "subset", "serializedTransaction", "type", "clearSignContexts", "clearSignContextsSuccess", "context", "transactionEnums", "filteredContexts", "transactionInfo", "ctx", "transactionFields"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var n=require("@ledgerhq/context-module"),a=require("@ledgerhq/device-management-kit"),y=require("ethers-v6"),i=require("purify-ts"),T=require("../../app-binder/device-action/__test-utils__/makeInternalApi"),u=require("./BuildTransactionContextTask");describe("BuildTransactionContextTask",()=>{const l={getContext:jest.fn(),getContexts:jest.fn(),getTypedDataFilters:jest.fn()},c={mapTransactionToSubset:jest.fn()},m={domain:"domain-name.eth"};let d,p;const o=(0,T.makeDeviceActionInternalApiMock)();beforeEach(()=>{jest.clearAllMocks(),d=new y.Transaction,d.chainId=1n,d.nonce=0,d.data="0x",p={contextModule:l,mapper:c,transaction:d,options:m,challenge:"challenge"}}),it("should build the transaction context without clear sign contexts",async()=>{const t=new Uint8Array([1,2,3]),e=[],s={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:t,type:0};c.mapTransactionToSubset.mockReturnValueOnce((0,i.Right)(s)),l.getContexts.mockResolvedValueOnce(e),o.getDeviceSessionState.mockReturnValueOnce({sessionStateType:a.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"}});const r=await new u.BuildTransactionContextTask(o,p).run();expect(r).toEqual({clearSignContexts:e,serializedTransaction:t,chainId:1,transactionType:0})}),it("should build the transaction context with clear sign contexts",async()=>{const t=new Uint8Array([1,2,3]),e=[{type:n.ClearSignContextType.TOKEN,payload:"payload-1"},{type:n.ClearSignContextType.NFT,payload:"payload-2"}],s={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:t,type:2};c.mapTransactionToSubset.mockReturnValueOnce((0,i.Right)(s)),l.getContexts.mockResolvedValueOnce(e),o.getDeviceSessionState.mockReturnValueOnce({sessionStateType:a.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"}});const r=await new u.BuildTransactionContextTask(o,p).run();expect(r).toEqual({clearSignContexts:e,serializedTransaction:t,chainId:1,transactionType:2})}),it("should build the transaction context with generic-parser context",async()=>{const t=new Uint8Array([1,2,3]),e=[{type:n.ClearSignContextType.TRANSACTION_INFO,payload:"payload-1"},{type:n.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"payload-2"},{type:n.ClearSignContextType.ENUM,payload:"payload-3"},{type:n.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"payload-4"}],s={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:t,type:2};c.mapTransactionToSubset.mockReturnValueOnce((0,i.Right)(s)),l.getContexts.mockResolvedValueOnce(e),o.getDeviceSessionState.mockReturnValueOnce({sessionStateType:a.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.14.0"}});const r=await new u.BuildTransactionContextTask(o,p).run();expect(r).toEqual({clearSignContexts:{transactionInfo:"payload-1",transactionFields:[...e.slice(1)]},serializedTransaction:t,chainId:1,transactionType:2})}),it("should call the mapper with the transaction",async()=>{const t=new Uint8Array([1,2,3]),e=[],s={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:t,type:0};c.mapTransactionToSubset.mockReturnValueOnce((0,i.Right)(s)),l.getContexts.mockResolvedValueOnce(e),o.getDeviceSessionState.mockReturnValueOnce({sessionStateType:a.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"}}),await new u.BuildTransactionContextTask(o,p).run(),expect(c.mapTransactionToSubset).toHaveBeenCalledWith(d)}),it("should call the context module with the correct parameters",async()=>{const t=new Uint8Array([1,2,3]),e=[],s={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:t,type:0};c.mapTransactionToSubset.mockReturnValueOnce((0,i.Right)(s)),l.getContexts.mockResolvedValueOnce(e),o.getDeviceSessionState.mockReturnValueOnce({sessionStateType:a.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"}}),await new u.BuildTransactionContextTask(o,p).run(),expect(l.getContexts).toHaveBeenCalledWith({challenge:"challenge",domain:"domain-name.eth",...s.subset})}),it("should throw an error if the mapper returns an error",async()=>{const t=new Error("error");c.mapTransactionToSubset.mockReturnValueOnce((0,i.Left)(t)),o.getDeviceSessionState.mockReturnValueOnce({sessionStateType:a.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"}});const e=new u.BuildTransactionContextTask(o,p);await expect(e.run()).rejects.toThrow(t)}),it("should exclude error contexts from the result",async()=>{const t=new Uint8Array([1,2,3]),e=[{type:n.ClearSignContextType.ERROR,error:new Error("error")},{type:n.ClearSignContextType.TOKEN,payload:"payload-1"},{type:n.ClearSignContextType.ERROR,error:new Error("error")},{type:n.ClearSignContextType.NFT,payload:"payload-2"}],s={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:t,type:0};c.mapTransactionToSubset.mockReturnValueOnce((0,i.Right)(s)),l.getContexts.mockResolvedValueOnce(e),o.getDeviceSessionState.mockReturnValueOnce({sessionStateType:a.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"}});const r=await new u.BuildTransactionContextTask(o,p).run();expect(r).toEqual({clearSignContexts:[e[1],e[3]],serializedTransaction:t,chainId:1,transactionType:0})}),it("should exclude generic-parser contexts from the result on old apps",async()=>{const t=new Uint8Array([1,2,3]),e=[{type:n.ClearSignContextType.TRANSACTION_INFO,payload:"transaction_info"},{type:n.ClearSignContextType.TOKEN,payload:"payload-1"},{type:n.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"transaction_field"},{type:n.ClearSignContextType.NFT,payload:"payload-2"},{type:n.ClearSignContextType.ENUM,payload:"enum"}],s={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:t,type:0};c.mapTransactionToSubset.mockReturnValueOnce((0,i.Right)(s)),l.getContexts.mockResolvedValueOnce(e),o.getDeviceSessionState.mockReturnValueOnce({sessionStateType:a.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"}});const r=await new u.BuildTransactionContextTask(o,p).run();expect(r).toEqual({clearSignContexts:[e[1],e[3]],serializedTransaction:t,chainId:1,transactionType:0})}),it("should exclude generic-parser contexts from the result if no transaction_info was found",async()=>{const t=new Uint8Array([1,2,3]),e=[{type:n.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"transaction_field"},{type:n.ClearSignContextType.TOKEN,payload:"payload-1"},{type:n.ClearSignContextType.ENUM,payload:"enum"},{type:n.ClearSignContextType.NFT,payload:"payload-2"}],s={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:t,type:0};c.mapTransactionToSubset.mockReturnValueOnce((0,i.Right)(s)),l.getContexts.mockResolvedValueOnce(e),o.getDeviceSessionState.mockReturnValueOnce({sessionStateType:a.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.14.0"}});const r=await new u.BuildTransactionContextTask(o,p).run();expect(r).toEqual({clearSignContexts:[e[1],e[3]],serializedTransaction:t,chainId:1,transactionType:0})}),it("should exclude legacy contexts from the result for generic-parser transactions",async()=>{const t=new Uint8Array([1,2,3]),e=[{type:n.ClearSignContextType.TOKEN,payload:"payload-1"},{type:n.ClearSignContextType.TRANSACTION_INFO,payload:"payload-2"},{type:n.ClearSignContextType.EXTERNAL_PLUGIN,payload:"payload-3"},{type:n.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"payload-4"}],s={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:t,type:2};c.mapTransactionToSubset.mockReturnValueOnce((0,i.Right)(s)),l.getContexts.mockResolvedValueOnce(e),o.getDeviceSessionState.mockReturnValueOnce({sessionStateType:a.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.14.0"}});const r=await new u.BuildTransactionContextTask(o,p).run();expect(r).toEqual({clearSignContexts:{transactionInfo:"payload-2",transactionFields:[e[3]]},serializedTransaction:t,chainId:1,transactionType:2})})});
1
+ "use strict";var a=require("@ledgerhq/context-module"),e=require("@ledgerhq/device-management-kit"),T=require("ethers"),l=require("purify-ts"),S=require("../../app-binder/constant/plugins"),C=require("../../app-binder/device-action/__test-utils__/makeInternalApi"),u=require("./BuildTransactionContextTask");describe("BuildTransactionContextTask",()=>{const p={getContext:vi.fn(),getContexts:vi.fn(),getTypedDataFilters:vi.fn()},r={mapTransactionToSubset:vi.fn()},x={domain:"domain-name.eth"},y=(0,e.hexaStringToBuffer)(T.Transaction.from({chainId:1n,nonce:0,data:"0x"}).unsignedSerialized),c={keyUsageNumber:1,payload:new Uint8Array([1,2,3])};let d;const o=(0,C.makeDeviceActionInternalApiMock)();beforeEach(()=>{vi.resetAllMocks(),d={contextModule:p,mapper:r,transaction:y,options:x,challenge:"challenge"}}),it("should build the transaction context without clear sign contexts",async()=>{const n=new Uint8Array([1,2,3]),t=[],s={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:n,type:0};r.mapTransactionToSubset.mockReturnValueOnce((0,l.Right)(s)),p.getContexts.mockResolvedValueOnce(t),o.getDeviceSessionState.mockReturnValueOnce({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"},deviceModelId:e.DeviceModelId.FLEX});const i=await new u.BuildTransactionContextTask(o,d).run();expect(i).toEqual({clearSignContexts:t,serializedTransaction:n,chainId:1,transactionType:0})}),it("should build the transaction context with clear sign contexts",async()=>{const n=new Uint8Array([1,2,3]),t=[{type:a.ClearSignContextType.TOKEN,payload:"payload-1"},{type:a.ClearSignContextType.NFT,payload:"payload-2"}],s={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:n,type:2};r.mapTransactionToSubset.mockReturnValueOnce((0,l.Right)(s)),p.getContexts.mockResolvedValueOnce(t),o.getDeviceSessionState.mockReturnValueOnce({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"},deviceModelId:e.DeviceModelId.FLEX});const i=await new u.BuildTransactionContextTask(o,d).run();expect(i).toEqual({clearSignContexts:t,serializedTransaction:n,chainId:1,transactionType:2})}),it("should build the transaction context with generic-parser context",async()=>{const n=new Uint8Array([1,2,3]),t=[{type:a.ClearSignContextType.TRANSACTION_INFO,payload:"payload-1",certificate:c},{type:a.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"payload-2"},{type:a.ClearSignContextType.ENUM,payload:"payload-3",id:1,value:2,certificate:c},{type:a.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"payload-4"}],s={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:n,type:2};r.mapTransactionToSubset.mockReturnValueOnce((0,l.Right)(s)),p.getContexts.mockResolvedValueOnce(t),o.getDeviceSessionState.mockReturnValueOnce({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.15.0"},deviceModelId:e.DeviceModelId.FLEX});const i=await new u.BuildTransactionContextTask(o,d).run();expect(i).toEqual({clearSignContexts:{transactionInfo:"payload-1",transactionInfoCertificate:c,transactionFields:[t[1],t[3]],transactionEnums:[t[2]]},serializedTransaction:n,chainId:1,transactionType:2})}),it("should build the transaction context with generic-parser context and a plugin instead of Ethereum app",async()=>{const n=new Uint8Array([1,2,3]),t=[{type:a.ClearSignContextType.TRANSACTION_INFO,payload:"payload-1",certificate:c},{type:a.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"payload-2"},{type:a.ClearSignContextType.ENUM,payload:"payload-3",id:1,value:2,certificate:c},{type:a.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"payload-4"}],s={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:n,type:2};r.mapTransactionToSubset.mockReturnValueOnce((0,l.Right)(s)),p.getContexts.mockResolvedValueOnce(t),o.getDeviceSessionState.mockReturnValueOnce({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:S.ETHEREUM_PLUGINS[0],version:"1.15.0"},deviceModelId:e.DeviceModelId.FLEX});const i=await new u.BuildTransactionContextTask(o,d).run();expect(i).toEqual({clearSignContexts:{transactionInfo:"payload-1",transactionInfoCertificate:c,transactionFields:[t[1],t[3]],transactionEnums:[t[2]]},serializedTransaction:n,chainId:1,transactionType:2})}),it("should call the mapper with the transaction",async()=>{const n=new Uint8Array([1,2,3]),t=[],s={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:n,type:0};r.mapTransactionToSubset.mockReturnValueOnce((0,l.Right)(s)),p.getContexts.mockResolvedValueOnce(t),o.getDeviceSessionState.mockReturnValueOnce({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"},deviceModelId:e.DeviceModelId.FLEX}),await new u.BuildTransactionContextTask(o,d).run(),expect(r.mapTransactionToSubset).toHaveBeenCalledWith(y)}),it("should call the context module with the correct parameters",async()=>{const n=new Uint8Array([1,2,3]),t=[],s={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:n,type:0};r.mapTransactionToSubset.mockReturnValueOnce((0,l.Right)(s)),p.getContexts.mockResolvedValueOnce(t),o.getDeviceSessionState.mockReturnValueOnce({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"},deviceModelId:e.DeviceModelId.FLEX}),await new u.BuildTransactionContextTask(o,d).run(),expect(p.getContexts).toHaveBeenCalledWith({deviceModelId:e.DeviceModelId.FLEX,challenge:"challenge",domain:"domain-name.eth",...s.subset})}),it("should throw an error if the mapper returns an error",async()=>{const n=new Error("error");r.mapTransactionToSubset.mockReturnValueOnce((0,l.Left)(n)),o.getDeviceSessionState.mockReturnValueOnce({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"},deviceModelId:e.DeviceModelId.FLEX});const t=new u.BuildTransactionContextTask(o,d);await expect(t.run()).rejects.toThrow(n)}),it("should exclude error contexts from the result",async()=>{const n=new Uint8Array([1,2,3]),t=[{type:a.ClearSignContextType.ERROR,error:new Error("error")},{type:a.ClearSignContextType.TOKEN,payload:"payload-1"},{type:a.ClearSignContextType.ERROR,error:new Error("error")},{type:a.ClearSignContextType.NFT,payload:"payload-2"}],s={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:n,type:0};r.mapTransactionToSubset.mockReturnValueOnce((0,l.Right)(s)),p.getContexts.mockResolvedValueOnce(t),o.getDeviceSessionState.mockReturnValueOnce({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"},deviceModelId:e.DeviceModelId.FLEX});const i=await new u.BuildTransactionContextTask(o,d).run();expect(i).toEqual({clearSignContexts:[t[1],t[3]],serializedTransaction:n,chainId:1,transactionType:0})}),it("should exclude generic-parser contexts from the result on old apps",async()=>{const n=new Uint8Array([1,2,3]),t=[{type:a.ClearSignContextType.TRANSACTION_INFO,payload:"transaction_info",certificate:c},{type:a.ClearSignContextType.TOKEN,payload:"payload-1"},{type:a.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"transaction_field"},{type:a.ClearSignContextType.NFT,payload:"payload-2"},{type:a.ClearSignContextType.ENUM,payload:"enum",id:1,value:2,certificate:c}],s={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:n,type:0};r.mapTransactionToSubset.mockReturnValueOnce((0,l.Right)(s)),p.getContexts.mockResolvedValueOnce(t),o.getDeviceSessionState.mockReturnValueOnce({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"},deviceModelId:e.DeviceModelId.FLEX});const i=await new u.BuildTransactionContextTask(o,d).run();expect(i).toEqual({clearSignContexts:[t[1],t[3]],serializedTransaction:n,chainId:1,transactionType:0})}),it("should exclude generic-parser contexts from the result if no transaction_info was found",async()=>{const n=new Uint8Array([1,2,3]),t=[{type:a.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"transaction_field"},{type:a.ClearSignContextType.TOKEN,payload:"payload-1"},{type:a.ClearSignContextType.ENUM,payload:"enum",id:1,value:2},{type:a.ClearSignContextType.NFT,payload:"payload-2"}],s={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:n,type:0};r.mapTransactionToSubset.mockReturnValueOnce((0,l.Right)(s)),p.getContexts.mockResolvedValueOnce(t),o.getDeviceSessionState.mockReturnValueOnce({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.14.0"},deviceModelId:e.DeviceModelId.FLEX});const i=await new u.BuildTransactionContextTask(o,d).run();expect(i).toEqual({clearSignContexts:[t[1],t[3]],serializedTransaction:n,chainId:1,transactionType:0})}),it("should exclude legacy contexts from the result for generic-parser transactions",async()=>{const n=new Uint8Array([1,2,3]),t=[{type:a.ClearSignContextType.TOKEN,payload:"payload-1"},{type:a.ClearSignContextType.TRANSACTION_INFO,payload:"payload-2",certificate:c},{type:a.ClearSignContextType.EXTERNAL_PLUGIN,payload:"payload-3"},{type:a.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"payload-4"},{type:a.ClearSignContextType.ENUM,payload:"payload-5",id:1,value:2,certificate:c}],s={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:n,type:2};r.mapTransactionToSubset.mockReturnValueOnce((0,l.Right)(s)),p.getContexts.mockResolvedValueOnce(t),o.getDeviceSessionState.mockReturnValueOnce({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.15.0"},deviceModelId:e.DeviceModelId.FLEX});const i=await new u.BuildTransactionContextTask(o,d).run();expect(i).toEqual({clearSignContexts:{transactionInfo:"payload-2",transactionInfoCertificate:c,transactionFields:[t[3]],transactionEnums:[t[4]]},serializedTransaction:n,chainId:1,transactionType:2})}),it("should exclude generic-parser contexts with a nano s device",async()=>{const n=new Uint8Array([1,2,3]),t=[{type:a.ClearSignContextType.TOKEN,payload:"payload-1"},{type:a.ClearSignContextType.TRANSACTION_INFO,payload:"payload-2",certificate:c},{type:a.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"payload-3"},{type:a.ClearSignContextType.ENUM,payload:"payload-4",id:1,value:2,certificate:c}],s={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:n,type:2};r.mapTransactionToSubset.mockReturnValueOnce((0,l.Right)(s)),p.getContexts.mockResolvedValueOnce(t),o.getDeviceSessionState.mockReturnValueOnce({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.14.0"},deviceModelId:e.DeviceModelId.NANO_S});const i=await new u.BuildTransactionContextTask(o,{...d,challenge:null}).run();expect(i).toEqual({clearSignContexts:[t[0]],serializedTransaction:n,chainId:1,transactionType:2})}),it("should exclude generic-parser contexts with an old app version",async()=>{const n=new Uint8Array([1,2,3]),t=[{type:a.ClearSignContextType.TOKEN,payload:"payload-1"},{type:a.ClearSignContextType.TRANSACTION_INFO,payload:"payload-2",certificate:c},{type:a.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"payload-3"},{type:a.ClearSignContextType.ENUM,payload:"payload-4",id:1,value:2,certificate:c}],s={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:n,type:2};r.mapTransactionToSubset.mockReturnValueOnce((0,l.Right)(s)),p.getContexts.mockResolvedValueOnce(t),o.getDeviceSessionState.mockReturnValueOnce({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"},deviceModelId:e.DeviceModelId.FLEX});const i=await new u.BuildTransactionContextTask(o,{...d,challenge:null}).run();expect(i).toEqual({clearSignContexts:[t[0]],serializedTransaction:n,chainId:1,transactionType:2})}),it("should exclude generic-parser contexts with a non ready device",async()=>{const n=new Uint8Array([1,2,3]),t=[{type:a.ClearSignContextType.TOKEN,payload:"payload-1"},{type:a.ClearSignContextType.TRANSACTION_INFO,payload:"payload-2",certificate:c},{type:a.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"payload-3"},{type:a.ClearSignContextType.ENUM,payload:"payload-4",id:1,value:2,certificate:c}],s={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:n,type:2};r.mapTransactionToSubset.mockReturnValueOnce((0,l.Right)(s)),p.getContexts.mockResolvedValueOnce(t),o.getDeviceSessionState.mockReturnValueOnce({sessionStateType:e.DeviceSessionStateType.Connected,deviceStatus:e.DeviceStatus.NOT_CONNECTED,deviceModelId:e.DeviceModelId.FLEX});const i=await new u.BuildTransactionContextTask(o,{...d,challenge:null}).run();expect(i).toEqual({clearSignContexts:[t[0]],serializedTransaction:n,chainId:1,transactionType:2})}),it("should throw an error if the app is not ethereum compatible",async()=>{const n=new Uint8Array([1,2,3]),t=[{type:a.ClearSignContextType.TRANSACTION_INFO,payload:"payload-1",certificate:c},{type:a.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"payload-2"},{type:a.ClearSignContextType.ENUM,payload:"payload-3",id:1,value:2,certificate:c}],s={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:n,type:2};r.mapTransactionToSubset.mockReturnValueOnce((0,l.Right)(s)),p.getContexts.mockResolvedValueOnce(t),o.getDeviceSessionState.mockReturnValueOnce({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Not Ethereum Compatible",version:"1.14.0"},deviceModelId:e.DeviceModelId.FLEX});const i=new u.BuildTransactionContextTask(o,d);await expect(i.run()).rejects.toThrow("Unsupported app")}),it("should return an error if the transaction info certificate is missing",async()=>{const n=new Uint8Array([1,2,3]),t=[{type:a.ClearSignContextType.TRANSACTION_INFO,payload:"payload-1"},{type:a.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"payload-2"},{type:a.ClearSignContextType.ENUM,payload:"payload-3",id:1,value:2}],s={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:n,type:2};r.mapTransactionToSubset.mockReturnValueOnce((0,l.Right)(s)),p.getContexts.mockResolvedValueOnce(t),o.getDeviceSessionState.mockReturnValueOnce({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.14.0"},deviceModelId:e.DeviceModelId.FLEX});const i=new u.BuildTransactionContextTask(o,d);await expect(i.run()).rejects.toThrow("Transaction info certificate is missing")})});
2
2
  //# sourceMappingURL=BuildTransactionContextTask.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/task/BuildTransactionContextTask.test.ts"],
4
- "sourcesContent": ["import {\n type ClearSignContext,\n ClearSignContextType,\n} from \"@ledgerhq/context-module\";\nimport {\n DeviceSessionStateType,\n DeviceStatus,\n} from \"@ledgerhq/device-management-kit\";\nimport { Transaction } from \"ethers-v6\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\nimport { type TransactionMapperResult } from \"@internal/transaction/service/mapper/model/TransactionMapperResult\";\nimport { type TransactionMapperService } from \"@internal/transaction/service/mapper/TransactionMapperService\";\n\nimport {\n BuildTransactionContextTask,\n type BuildTransactionContextTaskArgs,\n} from \"./BuildTransactionContextTask\";\n\ndescribe(\"BuildTransactionContextTask\", () => {\n const contextModuleMock = {\n getContext: jest.fn(),\n getContexts: jest.fn(),\n getTypedDataFilters: jest.fn(),\n };\n const mapperMock = {\n mapTransactionToSubset: jest.fn(),\n };\n const defaultOptions = {\n domain: \"domain-name.eth\",\n };\n let defaultTransaction: Transaction;\n let defaultArgs: BuildTransactionContextTaskArgs;\n const apiMock = makeDeviceActionInternalApiMock();\n\n beforeEach(() => {\n jest.clearAllMocks();\n\n defaultTransaction = new Transaction();\n defaultTransaction.chainId = 1n;\n defaultTransaction.nonce = 0;\n defaultTransaction.data = \"0x\";\n\n defaultArgs = {\n contextModule: contextModuleMock,\n mapper: mapperMock as unknown as TransactionMapperService,\n transaction: defaultTransaction,\n options: defaultOptions,\n challenge: \"challenge\",\n };\n });\n\n it(\"should build the transaction context without clear sign contexts\", async () => {\n // GIVEN\n const serializedTransaction = new Uint8Array([0x01, 0x02, 0x03]);\n const clearSignContexts: ClearSignContext[] = [];\n const mapperResult: TransactionMapperResult = {\n subset: { chainId: 1, to: undefined, data: \"0x\" },\n serializedTransaction,\n type: 0,\n };\n mapperMock.mapTransactionToSubset.mockReturnValueOnce(Right(mapperResult));\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n });\n\n // WHEN\n const result = await new BuildTransactionContextTask(\n apiMock,\n defaultArgs,\n ).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts,\n serializedTransaction,\n chainId: 1,\n transactionType: 0,\n });\n });\n\n it(\"should build the transaction context with clear sign contexts\", async () => {\n // GIVEN\n const serializedTransaction = new Uint8Array([0x01, 0x02, 0x03]);\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TOKEN,\n payload: \"payload-1\",\n },\n {\n type: ClearSignContextType.NFT,\n payload: \"payload-2\",\n },\n ];\n const mapperResult: TransactionMapperResult = {\n subset: { chainId: 1, to: undefined, data: \"0x\" },\n serializedTransaction,\n type: 2,\n };\n mapperMock.mapTransactionToSubset.mockReturnValueOnce(Right(mapperResult));\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n });\n\n // WHEN\n const result = await new BuildTransactionContextTask(\n apiMock,\n defaultArgs,\n ).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts,\n serializedTransaction,\n chainId: 1,\n transactionType: 2,\n });\n });\n\n it(\"should build the transaction context with generic-parser context\", async () => {\n // GIVEN\n const serializedTransaction = new Uint8Array([0x01, 0x02, 0x03]);\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"payload-1\",\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload-2\",\n },\n {\n type: ClearSignContextType.ENUM,\n payload: \"payload-3\",\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload-4\",\n },\n ];\n const mapperResult: TransactionMapperResult = {\n subset: { chainId: 1, to: undefined, data: \"0x\" },\n serializedTransaction,\n type: 2,\n };\n mapperMock.mapTransactionToSubset.mockReturnValueOnce(Right(mapperResult));\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.14.0\" },\n });\n\n // WHEN\n const result = await new BuildTransactionContextTask(\n apiMock,\n defaultArgs,\n ).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: {\n transactionInfo: \"payload-1\",\n transactionFields: [...clearSignContexts.slice(1)],\n },\n serializedTransaction,\n chainId: 1,\n transactionType: 2,\n });\n });\n\n it(\"should call the mapper with the transaction\", async () => {\n // GIVEN\n const serializedTransaction = new Uint8Array([0x01, 0x02, 0x03]);\n const clearSignContexts: ClearSignContext[] = [];\n const mapperResult: TransactionMapperResult = {\n subset: { chainId: 1, to: undefined, data: \"0x\" },\n serializedTransaction,\n type: 0,\n };\n mapperMock.mapTransactionToSubset.mockReturnValueOnce(Right(mapperResult));\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n });\n\n // WHEN\n await new BuildTransactionContextTask(apiMock, defaultArgs).run();\n\n // THEN\n expect(mapperMock.mapTransactionToSubset).toHaveBeenCalledWith(\n defaultTransaction,\n );\n });\n\n it(\"should call the context module with the correct parameters\", async () => {\n // GIVEN\n const serializedTransaction = new Uint8Array([0x01, 0x02, 0x03]);\n const clearSignContexts: ClearSignContext[] = [];\n const mapperResult: TransactionMapperResult = {\n subset: { chainId: 1, to: undefined, data: \"0x\" },\n serializedTransaction,\n type: 0,\n };\n mapperMock.mapTransactionToSubset.mockReturnValueOnce(Right(mapperResult));\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n });\n\n // WHEN\n await new BuildTransactionContextTask(apiMock, defaultArgs).run();\n\n // THEN\n expect(contextModuleMock.getContexts).toHaveBeenCalledWith({\n challenge: \"challenge\",\n domain: \"domain-name.eth\",\n ...mapperResult.subset,\n });\n });\n\n it(\"should throw an error if the mapper returns an error\", async () => {\n // GIVEN\n const error = new Error(\"error\");\n mapperMock.mapTransactionToSubset.mockReturnValueOnce(Left(error));\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n });\n\n // WHEN\n const task = new BuildTransactionContextTask(apiMock, defaultArgs);\n\n // THEN\n await expect(task.run()).rejects.toThrow(error);\n });\n\n it(\"should exclude error contexts from the result\", async () => {\n // GIVEN\n const serializedTransaction = new Uint8Array([0x01, 0x02, 0x03]);\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.ERROR,\n error: new Error(\"error\"),\n },\n {\n type: ClearSignContextType.TOKEN,\n payload: \"payload-1\",\n },\n {\n type: ClearSignContextType.ERROR,\n error: new Error(\"error\"),\n },\n {\n type: ClearSignContextType.NFT,\n payload: \"payload-2\",\n },\n ];\n const mapperResult: TransactionMapperResult = {\n subset: { chainId: 1, to: undefined, data: \"0x\" },\n serializedTransaction,\n type: 0,\n };\n mapperMock.mapTransactionToSubset.mockReturnValueOnce(Right(mapperResult));\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n });\n\n // WHEN\n const result = await new BuildTransactionContextTask(\n apiMock,\n defaultArgs,\n ).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: [clearSignContexts[1], clearSignContexts[3]],\n serializedTransaction,\n chainId: 1,\n transactionType: 0,\n });\n });\n\n it(\"should exclude generic-parser contexts from the result on old apps\", async () => {\n // GIVEN\n const serializedTransaction = new Uint8Array([0x01, 0x02, 0x03]);\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"transaction_info\",\n },\n {\n type: ClearSignContextType.TOKEN,\n payload: \"payload-1\",\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"transaction_field\",\n },\n {\n type: ClearSignContextType.NFT,\n payload: \"payload-2\",\n },\n {\n type: ClearSignContextType.ENUM,\n payload: \"enum\",\n },\n ];\n const mapperResult: TransactionMapperResult = {\n subset: { chainId: 1, to: undefined, data: \"0x\" },\n serializedTransaction,\n type: 0,\n };\n mapperMock.mapTransactionToSubset.mockReturnValueOnce(Right(mapperResult));\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n });\n\n // WHEN\n const result = await new BuildTransactionContextTask(\n apiMock,\n defaultArgs,\n ).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: [clearSignContexts[1], clearSignContexts[3]],\n serializedTransaction,\n chainId: 1,\n transactionType: 0,\n });\n });\n\n it(\"should exclude generic-parser contexts from the result if no transaction_info was found\", async () => {\n // GIVEN\n const serializedTransaction = new Uint8Array([0x01, 0x02, 0x03]);\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"transaction_field\",\n },\n {\n type: ClearSignContextType.TOKEN,\n payload: \"payload-1\",\n },\n {\n type: ClearSignContextType.ENUM,\n payload: \"enum\",\n },\n {\n type: ClearSignContextType.NFT,\n payload: \"payload-2\",\n },\n ];\n const mapperResult: TransactionMapperResult = {\n subset: { chainId: 1, to: undefined, data: \"0x\" },\n serializedTransaction,\n type: 0,\n };\n mapperMock.mapTransactionToSubset.mockReturnValueOnce(Right(mapperResult));\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.14.0\" },\n });\n\n // WHEN\n const result = await new BuildTransactionContextTask(\n apiMock,\n defaultArgs,\n ).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: [clearSignContexts[1], clearSignContexts[3]],\n serializedTransaction,\n chainId: 1,\n transactionType: 0,\n });\n });\n\n it(\"should exclude legacy contexts from the result for generic-parser transactions\", async () => {\n // GIVEN\n const serializedTransaction = new Uint8Array([0x01, 0x02, 0x03]);\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TOKEN,\n payload: \"payload-1\",\n },\n {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"payload-2\",\n },\n {\n type: ClearSignContextType.EXTERNAL_PLUGIN,\n payload: \"payload-3\",\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload-4\",\n },\n ];\n const mapperResult: TransactionMapperResult = {\n subset: { chainId: 1, to: undefined, data: \"0x\" },\n serializedTransaction,\n type: 2,\n };\n mapperMock.mapTransactionToSubset.mockReturnValueOnce(Right(mapperResult));\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.14.0\" },\n });\n\n // WHEN\n const result = await new BuildTransactionContextTask(\n apiMock,\n defaultArgs,\n ).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: {\n transactionInfo: \"payload-2\",\n transactionFields: [clearSignContexts[3]],\n },\n serializedTransaction,\n chainId: 1,\n transactionType: 2,\n });\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["import_context_module", "import_device_management_kit", "import_ethers_v6", "import_purify_ts", "import_makeInternalApi", "import_BuildTransactionContextTask", "contextModuleMock", "mapperMock", "defaultOptions", "defaultTransaction", "defaultArgs", "apiMock", "serializedTransaction", "clearSignContexts", "mapperResult", "result", "error", "task"]
4
+ "sourcesContent": ["import {\n type ClearSignContext,\n ClearSignContextType,\n type PkiCertificate,\n} from \"@ledgerhq/context-module\";\nimport {\n DeviceModelId,\n DeviceSessionStateType,\n DeviceStatus,\n hexaStringToBuffer,\n} from \"@ledgerhq/device-management-kit\";\nimport { Transaction } from \"ethers\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { ETHEREUM_PLUGINS } from \"@internal/app-binder/constant/plugins\";\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\nimport { type TransactionMapperResult } from \"@internal/transaction/service/mapper/model/TransactionMapperResult\";\nimport { type TransactionMapperService } from \"@internal/transaction/service/mapper/TransactionMapperService\";\n\nimport {\n BuildTransactionContextTask,\n type BuildTransactionContextTaskArgs,\n} from \"./BuildTransactionContextTask\";\n\ndescribe(\"BuildTransactionContextTask\", () => {\n const contextModuleMock = {\n getContext: vi.fn(),\n getContexts: vi.fn(),\n getTypedDataFilters: vi.fn(),\n };\n const mapperMock = {\n mapTransactionToSubset: vi.fn(),\n };\n const defaultOptions = {\n domain: \"domain-name.eth\",\n };\n const defaultTransaction: Uint8Array = hexaStringToBuffer(\n Transaction.from({\n chainId: 1n,\n nonce: 0,\n data: \"0x\",\n }).unsignedSerialized,\n )!;\n const defaultCertificate: PkiCertificate = {\n keyUsageNumber: 1,\n payload: new Uint8Array([0x01, 0x02, 0x03]),\n };\n\n let defaultArgs: BuildTransactionContextTaskArgs;\n const apiMock = makeDeviceActionInternalApiMock();\n\n beforeEach(() => {\n vi.resetAllMocks();\n\n defaultArgs = {\n contextModule: contextModuleMock,\n mapper: mapperMock as unknown as TransactionMapperService,\n transaction: defaultTransaction,\n options: defaultOptions,\n challenge: \"challenge\",\n };\n });\n\n it(\"should build the transaction context without clear sign contexts\", async () => {\n // GIVEN\n const serializedTransaction = new Uint8Array([0x01, 0x02, 0x03]);\n const clearSignContexts: ClearSignContext[] = [];\n const mapperResult: TransactionMapperResult = {\n subset: { chainId: 1, to: undefined, data: \"0x\" },\n serializedTransaction,\n type: 0,\n };\n mapperMock.mapTransactionToSubset.mockReturnValueOnce(Right(mapperResult));\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n deviceModelId: DeviceModelId.FLEX,\n });\n\n // WHEN\n const result = await new BuildTransactionContextTask(\n apiMock,\n defaultArgs,\n ).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts,\n serializedTransaction,\n chainId: 1,\n transactionType: 0,\n });\n });\n\n it(\"should build the transaction context with clear sign contexts\", async () => {\n // GIVEN\n const serializedTransaction = new Uint8Array([0x01, 0x02, 0x03]);\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TOKEN,\n payload: \"payload-1\",\n },\n {\n type: ClearSignContextType.NFT,\n payload: \"payload-2\",\n },\n ];\n const mapperResult: TransactionMapperResult = {\n subset: { chainId: 1, to: undefined, data: \"0x\" },\n serializedTransaction,\n type: 2,\n };\n mapperMock.mapTransactionToSubset.mockReturnValueOnce(Right(mapperResult));\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n deviceModelId: DeviceModelId.FLEX,\n });\n\n // WHEN\n const result = await new BuildTransactionContextTask(\n apiMock,\n defaultArgs,\n ).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts,\n serializedTransaction,\n chainId: 1,\n transactionType: 2,\n });\n });\n\n it(\"should build the transaction context with generic-parser context\", async () => {\n // GIVEN\n const serializedTransaction = new Uint8Array([0x01, 0x02, 0x03]);\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"payload-1\",\n certificate: defaultCertificate,\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload-2\",\n },\n {\n type: ClearSignContextType.ENUM,\n payload: \"payload-3\",\n id: 1,\n value: 2,\n certificate: defaultCertificate,\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload-4\",\n },\n ];\n const mapperResult: TransactionMapperResult = {\n subset: { chainId: 1, to: undefined, data: \"0x\" },\n serializedTransaction,\n type: 2,\n };\n mapperMock.mapTransactionToSubset.mockReturnValueOnce(Right(mapperResult));\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.15.0\" },\n deviceModelId: DeviceModelId.FLEX,\n });\n\n // WHEN\n const result = await new BuildTransactionContextTask(\n apiMock,\n defaultArgs,\n ).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: {\n transactionInfo: \"payload-1\",\n transactionInfoCertificate: defaultCertificate,\n transactionFields: [clearSignContexts[1], clearSignContexts[3]],\n transactionEnums: [clearSignContexts[2]],\n },\n serializedTransaction,\n chainId: 1,\n transactionType: 2,\n });\n });\n\n it(\"should build the transaction context with generic-parser context and a plugin instead of Ethereum app\", async () => {\n // GIVEN\n const serializedTransaction = new Uint8Array([0x01, 0x02, 0x03]);\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"payload-1\",\n certificate: defaultCertificate,\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload-2\",\n },\n {\n type: ClearSignContextType.ENUM,\n payload: \"payload-3\",\n id: 1,\n value: 2,\n certificate: defaultCertificate,\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload-4\",\n },\n ];\n const mapperResult: TransactionMapperResult = {\n subset: { chainId: 1, to: undefined, data: \"0x\" },\n serializedTransaction,\n type: 2,\n };\n mapperMock.mapTransactionToSubset.mockReturnValueOnce(Right(mapperResult));\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: ETHEREUM_PLUGINS[0]!, version: \"1.15.0\" },\n deviceModelId: DeviceModelId.FLEX,\n });\n\n // WHEN\n const result = await new BuildTransactionContextTask(\n apiMock,\n defaultArgs,\n ).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: {\n transactionInfo: \"payload-1\",\n transactionInfoCertificate: defaultCertificate,\n transactionFields: [clearSignContexts[1], clearSignContexts[3]],\n transactionEnums: [clearSignContexts[2]],\n },\n serializedTransaction,\n chainId: 1,\n transactionType: 2,\n });\n });\n\n it(\"should call the mapper with the transaction\", async () => {\n // GIVEN\n const serializedTransaction = new Uint8Array([0x01, 0x02, 0x03]);\n const clearSignContexts: ClearSignContext[] = [];\n const mapperResult: TransactionMapperResult = {\n subset: { chainId: 1, to: undefined, data: \"0x\" },\n serializedTransaction,\n type: 0,\n };\n mapperMock.mapTransactionToSubset.mockReturnValueOnce(Right(mapperResult));\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n deviceModelId: DeviceModelId.FLEX,\n });\n\n // WHEN\n await new BuildTransactionContextTask(apiMock, defaultArgs).run();\n\n // THEN\n expect(mapperMock.mapTransactionToSubset).toHaveBeenCalledWith(\n defaultTransaction,\n );\n });\n\n it(\"should call the context module with the correct parameters\", async () => {\n // GIVEN\n const serializedTransaction = new Uint8Array([0x01, 0x02, 0x03]);\n const clearSignContexts: ClearSignContext[] = [];\n const mapperResult: TransactionMapperResult = {\n subset: { chainId: 1, to: undefined, data: \"0x\" },\n serializedTransaction,\n type: 0,\n };\n mapperMock.mapTransactionToSubset.mockReturnValueOnce(Right(mapperResult));\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n deviceModelId: DeviceModelId.FLEX,\n });\n\n // WHEN\n await new BuildTransactionContextTask(apiMock, defaultArgs).run();\n\n // THEN\n expect(contextModuleMock.getContexts).toHaveBeenCalledWith({\n deviceModelId: DeviceModelId.FLEX,\n challenge: \"challenge\",\n domain: \"domain-name.eth\",\n ...mapperResult.subset,\n });\n });\n\n it(\"should throw an error if the mapper returns an error\", async () => {\n // GIVEN\n const error = new Error(\"error\");\n mapperMock.mapTransactionToSubset.mockReturnValueOnce(Left(error));\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n deviceModelId: DeviceModelId.FLEX,\n });\n\n // WHEN\n const task = new BuildTransactionContextTask(apiMock, defaultArgs);\n\n // THEN\n await expect(task.run()).rejects.toThrow(error);\n });\n\n it(\"should exclude error contexts from the result\", async () => {\n // GIVEN\n const serializedTransaction = new Uint8Array([0x01, 0x02, 0x03]);\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.ERROR,\n error: new Error(\"error\"),\n },\n {\n type: ClearSignContextType.TOKEN,\n payload: \"payload-1\",\n },\n {\n type: ClearSignContextType.ERROR,\n error: new Error(\"error\"),\n },\n {\n type: ClearSignContextType.NFT,\n payload: \"payload-2\",\n },\n ];\n const mapperResult: TransactionMapperResult = {\n subset: { chainId: 1, to: undefined, data: \"0x\" },\n serializedTransaction,\n type: 0,\n };\n mapperMock.mapTransactionToSubset.mockReturnValueOnce(Right(mapperResult));\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n deviceModelId: DeviceModelId.FLEX,\n });\n\n // WHEN\n const result = await new BuildTransactionContextTask(\n apiMock,\n defaultArgs,\n ).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: [clearSignContexts[1], clearSignContexts[3]],\n serializedTransaction,\n chainId: 1,\n transactionType: 0,\n });\n });\n\n it(\"should exclude generic-parser contexts from the result on old apps\", async () => {\n // GIVEN\n const serializedTransaction = new Uint8Array([0x01, 0x02, 0x03]);\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"transaction_info\",\n certificate: defaultCertificate,\n },\n {\n type: ClearSignContextType.TOKEN,\n payload: \"payload-1\",\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"transaction_field\",\n },\n {\n type: ClearSignContextType.NFT,\n payload: \"payload-2\",\n },\n {\n type: ClearSignContextType.ENUM,\n payload: \"enum\",\n id: 1,\n value: 2,\n certificate: defaultCertificate,\n },\n ];\n const mapperResult: TransactionMapperResult = {\n subset: { chainId: 1, to: undefined, data: \"0x\" },\n serializedTransaction,\n type: 0,\n };\n mapperMock.mapTransactionToSubset.mockReturnValueOnce(Right(mapperResult));\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n deviceModelId: DeviceModelId.FLEX,\n });\n\n // WHEN\n const result = await new BuildTransactionContextTask(\n apiMock,\n defaultArgs,\n ).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: [clearSignContexts[1], clearSignContexts[3]],\n serializedTransaction,\n chainId: 1,\n transactionType: 0,\n });\n });\n\n it(\"should exclude generic-parser contexts from the result if no transaction_info was found\", async () => {\n // GIVEN\n const serializedTransaction = new Uint8Array([0x01, 0x02, 0x03]);\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"transaction_field\",\n },\n {\n type: ClearSignContextType.TOKEN,\n payload: \"payload-1\",\n },\n {\n type: ClearSignContextType.ENUM,\n payload: \"enum\",\n id: 1,\n value: 2,\n },\n {\n type: ClearSignContextType.NFT,\n payload: \"payload-2\",\n },\n ];\n const mapperResult: TransactionMapperResult = {\n subset: { chainId: 1, to: undefined, data: \"0x\" },\n serializedTransaction,\n type: 0,\n };\n mapperMock.mapTransactionToSubset.mockReturnValueOnce(Right(mapperResult));\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.14.0\" },\n deviceModelId: DeviceModelId.FLEX,\n });\n\n // WHEN\n const result = await new BuildTransactionContextTask(\n apiMock,\n defaultArgs,\n ).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: [clearSignContexts[1], clearSignContexts[3]],\n serializedTransaction,\n chainId: 1,\n transactionType: 0,\n });\n });\n\n it(\"should exclude legacy contexts from the result for generic-parser transactions\", async () => {\n // GIVEN\n const serializedTransaction = new Uint8Array([0x01, 0x02, 0x03]);\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TOKEN,\n payload: \"payload-1\",\n },\n {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"payload-2\",\n certificate: defaultCertificate,\n },\n {\n type: ClearSignContextType.EXTERNAL_PLUGIN,\n payload: \"payload-3\",\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload-4\",\n },\n {\n type: ClearSignContextType.ENUM,\n payload: \"payload-5\",\n id: 1,\n value: 2,\n certificate: defaultCertificate,\n },\n ];\n const mapperResult: TransactionMapperResult = {\n subset: { chainId: 1, to: undefined, data: \"0x\" },\n serializedTransaction,\n type: 2,\n };\n mapperMock.mapTransactionToSubset.mockReturnValueOnce(Right(mapperResult));\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.15.0\" },\n deviceModelId: DeviceModelId.FLEX,\n });\n\n // WHEN\n const result = await new BuildTransactionContextTask(\n apiMock,\n defaultArgs,\n ).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: {\n transactionInfo: \"payload-2\",\n transactionInfoCertificate: defaultCertificate,\n transactionFields: [clearSignContexts[3]],\n transactionEnums: [clearSignContexts[4]],\n },\n serializedTransaction,\n chainId: 1,\n transactionType: 2,\n });\n });\n\n it(\"should exclude generic-parser contexts with a nano s device\", async () => {\n // GIVEN\n const serializedTransaction = new Uint8Array([0x01, 0x02, 0x03]);\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TOKEN,\n payload: \"payload-1\",\n },\n {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"payload-2\",\n certificate: defaultCertificate,\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload-3\",\n },\n {\n type: ClearSignContextType.ENUM,\n payload: \"payload-4\",\n id: 1,\n value: 2,\n certificate: defaultCertificate,\n },\n ];\n const mapperResult: TransactionMapperResult = {\n subset: { chainId: 1, to: undefined, data: \"0x\" },\n serializedTransaction,\n type: 2,\n };\n mapperMock.mapTransactionToSubset.mockReturnValueOnce(Right(mapperResult));\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.14.0\" },\n deviceModelId: DeviceModelId.NANO_S,\n });\n\n // WHEN\n const result = await new BuildTransactionContextTask(apiMock, {\n ...defaultArgs,\n challenge: null,\n }).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: [clearSignContexts[0]],\n serializedTransaction,\n chainId: 1,\n transactionType: 2,\n });\n });\n\n it(\"should exclude generic-parser contexts with an old app version\", async () => {\n // GIVEN\n const serializedTransaction = new Uint8Array([0x01, 0x02, 0x03]);\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TOKEN,\n payload: \"payload-1\",\n },\n {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"payload-2\",\n certificate: defaultCertificate,\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload-3\",\n },\n {\n type: ClearSignContextType.ENUM,\n payload: \"payload-4\",\n id: 1,\n value: 2,\n certificate: defaultCertificate,\n },\n ];\n const mapperResult: TransactionMapperResult = {\n subset: { chainId: 1, to: undefined, data: \"0x\" },\n serializedTransaction,\n type: 2,\n };\n mapperMock.mapTransactionToSubset.mockReturnValueOnce(Right(mapperResult));\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n deviceModelId: DeviceModelId.FLEX,\n });\n\n // WHEN\n const result = await new BuildTransactionContextTask(apiMock, {\n ...defaultArgs,\n challenge: null,\n }).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: [clearSignContexts[0]],\n serializedTransaction,\n chainId: 1,\n transactionType: 2,\n });\n });\n\n it(\"should exclude generic-parser contexts with a non ready device\", async () => {\n // GIVEN\n const serializedTransaction = new Uint8Array([0x01, 0x02, 0x03]);\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TOKEN,\n payload: \"payload-1\",\n },\n {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"payload-2\",\n certificate: defaultCertificate,\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload-3\",\n },\n {\n type: ClearSignContextType.ENUM,\n payload: \"payload-4\",\n id: 1,\n value: 2,\n certificate: defaultCertificate,\n },\n ];\n const mapperResult: TransactionMapperResult = {\n subset: { chainId: 1, to: undefined, data: \"0x\" },\n serializedTransaction,\n type: 2,\n };\n mapperMock.mapTransactionToSubset.mockReturnValueOnce(Right(mapperResult));\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.Connected,\n deviceStatus: DeviceStatus.NOT_CONNECTED,\n deviceModelId: DeviceModelId.FLEX,\n });\n\n // WHEN\n const result = await new BuildTransactionContextTask(apiMock, {\n ...defaultArgs,\n challenge: null,\n }).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: [clearSignContexts[0]],\n serializedTransaction,\n chainId: 1,\n transactionType: 2,\n });\n });\n\n it(\"should throw an error if the app is not ethereum compatible\", async () => {\n // GIVEN\n const serializedTransaction = new Uint8Array([0x01, 0x02, 0x03]);\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"payload-1\",\n certificate: defaultCertificate,\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload-2\",\n },\n {\n type: ClearSignContextType.ENUM,\n payload: \"payload-3\",\n id: 1,\n value: 2,\n certificate: defaultCertificate,\n },\n ];\n const mapperResult: TransactionMapperResult = {\n subset: { chainId: 1, to: undefined, data: \"0x\" },\n serializedTransaction,\n type: 2,\n };\n mapperMock.mapTransactionToSubset.mockReturnValueOnce(Right(mapperResult));\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Not Ethereum Compatible\", version: \"1.14.0\" },\n deviceModelId: DeviceModelId.FLEX,\n });\n\n // WHEN\n const task = new BuildTransactionContextTask(apiMock, defaultArgs);\n\n // THEN\n await expect(task.run()).rejects.toThrow(\"Unsupported app\");\n });\n\n it(\"should return an error if the transaction info certificate is missing\", async () => {\n // GIVEN\n const serializedTransaction = new Uint8Array([0x01, 0x02, 0x03]);\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"payload-1\",\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload-2\",\n },\n {\n type: ClearSignContextType.ENUM,\n payload: \"payload-3\",\n id: 1,\n value: 2,\n },\n ];\n const mapperResult: TransactionMapperResult = {\n subset: { chainId: 1, to: undefined, data: \"0x\" },\n serializedTransaction,\n type: 2,\n };\n mapperMock.mapTransactionToSubset.mockReturnValueOnce(Right(mapperResult));\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.14.0\" },\n deviceModelId: DeviceModelId.FLEX,\n });\n\n // WHEN\n const task = new BuildTransactionContextTask(apiMock, defaultArgs);\n\n // THEN\n await expect(task.run()).rejects.toThrow(\n \"Transaction info certificate is missing\",\n );\n });\n});\n"],
5
+ "mappings": "aAAA,IAAAA,EAIO,oCACPC,EAKO,2CACPC,EAA4B,kBAC5BC,EAA4B,qBAE5BC,EAAiC,iDACjCC,EAAgD,6EAIhDC,EAGO,yCAEP,SAAS,8BAA+B,IAAM,CAC5C,MAAMC,EAAoB,CACxB,WAAY,GAAG,GAAG,EAClB,YAAa,GAAG,GAAG,EACnB,oBAAqB,GAAG,GAAG,CAC7B,EACMC,EAAa,CACjB,uBAAwB,GAAG,GAAG,CAChC,EACMC,EAAiB,CACrB,OAAQ,iBACV,EACMC,KAAiC,sBACrC,cAAY,KAAK,CACf,QAAS,GACT,MAAO,EACP,KAAM,IACR,CAAC,EAAE,kBACL,EACMC,EAAqC,CACzC,eAAgB,EAChB,QAAS,IAAI,WAAW,CAAC,EAAM,EAAM,CAAI,CAAC,CAC5C,EAEA,IAAIC,EACJ,MAAMC,KAAU,mCAAgC,EAEhD,WAAW,IAAM,CACf,GAAG,cAAc,EAEjBD,EAAc,CACZ,cAAeL,EACf,OAAQC,EACR,YAAaE,EACb,QAASD,EACT,UAAW,WACb,CACF,CAAC,EAED,GAAG,mEAAoE,SAAY,CAEjF,MAAMK,EAAwB,IAAI,WAAW,CAAC,EAAM,EAAM,CAAI,CAAC,EACzDC,EAAwC,CAAC,EACzCC,EAAwC,CAC5C,OAAQ,CAAE,QAAS,EAAG,GAAI,OAAW,KAAM,IAAK,EAChD,sBAAAF,EACA,KAAM,CACR,EACAN,EAAW,uBAAuB,uBAAoB,SAAMQ,CAAY,CAAC,EACzET,EAAkB,YAAY,sBAAsBQ,CAAiB,EACrEF,EAAQ,sBAAsB,oBAAoB,CAChD,iBAAkB,yBAAuB,0BACzC,aAAc,eAAa,UAC3B,cAAe,CAAC,EAChB,WAAY,CAAE,KAAM,WAAY,QAAS,QAAS,EAClD,cAAe,gBAAc,IAC/B,CAAC,EAGD,MAAMI,EAAS,MAAM,IAAI,8BACvBJ,EACAD,CACF,EAAE,IAAI,EAGN,OAAOK,CAAM,EAAE,QAAQ,CACrB,kBAAAF,EACA,sBAAAD,EACA,QAAS,EACT,gBAAiB,CACnB,CAAC,CACH,CAAC,EAED,GAAG,gEAAiE,SAAY,CAE9E,MAAMA,EAAwB,IAAI,WAAW,CAAC,EAAM,EAAM,CAAI,CAAC,EACzDC,EAAwC,CAC5C,CACE,KAAM,uBAAqB,MAC3B,QAAS,WACX,EACA,CACE,KAAM,uBAAqB,IAC3B,QAAS,WACX,CACF,EACMC,EAAwC,CAC5C,OAAQ,CAAE,QAAS,EAAG,GAAI,OAAW,KAAM,IAAK,EAChD,sBAAAF,EACA,KAAM,CACR,EACAN,EAAW,uBAAuB,uBAAoB,SAAMQ,CAAY,CAAC,EACzET,EAAkB,YAAY,sBAAsBQ,CAAiB,EACrEF,EAAQ,sBAAsB,oBAAoB,CAChD,iBAAkB,yBAAuB,0BACzC,aAAc,eAAa,UAC3B,cAAe,CAAC,EAChB,WAAY,CAAE,KAAM,WAAY,QAAS,QAAS,EAClD,cAAe,gBAAc,IAC/B,CAAC,EAGD,MAAMI,EAAS,MAAM,IAAI,8BACvBJ,EACAD,CACF,EAAE,IAAI,EAGN,OAAOK,CAAM,EAAE,QAAQ,CACrB,kBAAAF,EACA,sBAAAD,EACA,QAAS,EACT,gBAAiB,CACnB,CAAC,CACH,CAAC,EAED,GAAG,mEAAoE,SAAY,CAEjF,MAAMA,EAAwB,IAAI,WAAW,CAAC,EAAM,EAAM,CAAI,CAAC,EACzDC,EAAwC,CAC5C,CACE,KAAM,uBAAqB,iBAC3B,QAAS,YACT,YAAaJ,CACf,EACA,CACE,KAAM,uBAAqB,8BAC3B,QAAS,WACX,EACA,CACE,KAAM,uBAAqB,KAC3B,QAAS,YACT,GAAI,EACJ,MAAO,EACP,YAAaA,CACf,EACA,CACE,KAAM,uBAAqB,8BAC3B,QAAS,WACX,CACF,EACMK,EAAwC,CAC5C,OAAQ,CAAE,QAAS,EAAG,GAAI,OAAW,KAAM,IAAK,EAChD,sBAAAF,EACA,KAAM,CACR,EACAN,EAAW,uBAAuB,uBAAoB,SAAMQ,CAAY,CAAC,EACzET,EAAkB,YAAY,sBAAsBQ,CAAiB,EACrEF,EAAQ,sBAAsB,oBAAoB,CAChD,iBAAkB,yBAAuB,0BACzC,aAAc,eAAa,UAC3B,cAAe,CAAC,EAChB,WAAY,CAAE,KAAM,WAAY,QAAS,QAAS,EAClD,cAAe,gBAAc,IAC/B,CAAC,EAGD,MAAMI,EAAS,MAAM,IAAI,8BACvBJ,EACAD,CACF,EAAE,IAAI,EAGN,OAAOK,CAAM,EAAE,QAAQ,CACrB,kBAAmB,CACjB,gBAAiB,YACjB,2BAA4BN,EAC5B,kBAAmB,CAACI,EAAkB,CAAC,EAAGA,EAAkB,CAAC,CAAC,EAC9D,iBAAkB,CAACA,EAAkB,CAAC,CAAC,CACzC,EACA,sBAAAD,EACA,QAAS,EACT,gBAAiB,CACnB,CAAC,CACH,CAAC,EAED,GAAG,wGAAyG,SAAY,CAEtH,MAAMA,EAAwB,IAAI,WAAW,CAAC,EAAM,EAAM,CAAI,CAAC,EACzDC,EAAwC,CAC5C,CACE,KAAM,uBAAqB,iBAC3B,QAAS,YACT,YAAaJ,CACf,EACA,CACE,KAAM,uBAAqB,8BAC3B,QAAS,WACX,EACA,CACE,KAAM,uBAAqB,KAC3B,QAAS,YACT,GAAI,EACJ,MAAO,EACP,YAAaA,CACf,EACA,CACE,KAAM,uBAAqB,8BAC3B,QAAS,WACX,CACF,EACMK,EAAwC,CAC5C,OAAQ,CAAE,QAAS,EAAG,GAAI,OAAW,KAAM,IAAK,EAChD,sBAAAF,EACA,KAAM,CACR,EACAN,EAAW,uBAAuB,uBAAoB,SAAMQ,CAAY,CAAC,EACzET,EAAkB,YAAY,sBAAsBQ,CAAiB,EACrEF,EAAQ,sBAAsB,oBAAoB,CAChD,iBAAkB,yBAAuB,0BACzC,aAAc,eAAa,UAC3B,cAAe,CAAC,EAChB,WAAY,CAAE,KAAM,mBAAiB,CAAC,EAAI,QAAS,QAAS,EAC5D,cAAe,gBAAc,IAC/B,CAAC,EAGD,MAAMI,EAAS,MAAM,IAAI,8BACvBJ,EACAD,CACF,EAAE,IAAI,EAGN,OAAOK,CAAM,EAAE,QAAQ,CACrB,kBAAmB,CACjB,gBAAiB,YACjB,2BAA4BN,EAC5B,kBAAmB,CAACI,EAAkB,CAAC,EAAGA,EAAkB,CAAC,CAAC,EAC9D,iBAAkB,CAACA,EAAkB,CAAC,CAAC,CACzC,EACA,sBAAAD,EACA,QAAS,EACT,gBAAiB,CACnB,CAAC,CACH,CAAC,EAED,GAAG,8CAA+C,SAAY,CAE5D,MAAMA,EAAwB,IAAI,WAAW,CAAC,EAAM,EAAM,CAAI,CAAC,EACzDC,EAAwC,CAAC,EACzCC,EAAwC,CAC5C,OAAQ,CAAE,QAAS,EAAG,GAAI,OAAW,KAAM,IAAK,EAChD,sBAAAF,EACA,KAAM,CACR,EACAN,EAAW,uBAAuB,uBAAoB,SAAMQ,CAAY,CAAC,EACzET,EAAkB,YAAY,sBAAsBQ,CAAiB,EACrEF,EAAQ,sBAAsB,oBAAoB,CAChD,iBAAkB,yBAAuB,0BACzC,aAAc,eAAa,UAC3B,cAAe,CAAC,EAChB,WAAY,CAAE,KAAM,WAAY,QAAS,QAAS,EAClD,cAAe,gBAAc,IAC/B,CAAC,EAGD,MAAM,IAAI,8BAA4BA,EAASD,CAAW,EAAE,IAAI,EAGhE,OAAOJ,EAAW,sBAAsB,EAAE,qBACxCE,CACF,CACF,CAAC,EAED,GAAG,6DAA8D,SAAY,CAE3E,MAAMI,EAAwB,IAAI,WAAW,CAAC,EAAM,EAAM,CAAI,CAAC,EACzDC,EAAwC,CAAC,EACzCC,EAAwC,CAC5C,OAAQ,CAAE,QAAS,EAAG,GAAI,OAAW,KAAM,IAAK,EAChD,sBAAAF,EACA,KAAM,CACR,EACAN,EAAW,uBAAuB,uBAAoB,SAAMQ,CAAY,CAAC,EACzET,EAAkB,YAAY,sBAAsBQ,CAAiB,EACrEF,EAAQ,sBAAsB,oBAAoB,CAChD,iBAAkB,yBAAuB,0BACzC,aAAc,eAAa,UAC3B,cAAe,CAAC,EAChB,WAAY,CAAE,KAAM,WAAY,QAAS,QAAS,EAClD,cAAe,gBAAc,IAC/B,CAAC,EAGD,MAAM,IAAI,8BAA4BA,EAASD,CAAW,EAAE,IAAI,EAGhE,OAAOL,EAAkB,WAAW,EAAE,qBAAqB,CACzD,cAAe,gBAAc,KAC7B,UAAW,YACX,OAAQ,kBACR,GAAGS,EAAa,MAClB,CAAC,CACH,CAAC,EAED,GAAG,uDAAwD,SAAY,CAErE,MAAME,EAAQ,IAAI,MAAM,OAAO,EAC/BV,EAAW,uBAAuB,uBAAoB,QAAKU,CAAK,CAAC,EACjEL,EAAQ,sBAAsB,oBAAoB,CAChD,iBAAkB,yBAAuB,0BACzC,aAAc,eAAa,UAC3B,cAAe,CAAC,EAChB,WAAY,CAAE,KAAM,WAAY,QAAS,QAAS,EAClD,cAAe,gBAAc,IAC/B,CAAC,EAGD,MAAMM,EAAO,IAAI,8BAA4BN,EAASD,CAAW,EAGjE,MAAM,OAAOO,EAAK,IAAI,CAAC,EAAE,QAAQ,QAAQD,CAAK,CAChD,CAAC,EAED,GAAG,gDAAiD,SAAY,CAE9D,MAAMJ,EAAwB,IAAI,WAAW,CAAC,EAAM,EAAM,CAAI,CAAC,EACzDC,EAAwC,CAC5C,CACE,KAAM,uBAAqB,MAC3B,MAAO,IAAI,MAAM,OAAO,CAC1B,EACA,CACE,KAAM,uBAAqB,MAC3B,QAAS,WACX,EACA,CACE,KAAM,uBAAqB,MAC3B,MAAO,IAAI,MAAM,OAAO,CAC1B,EACA,CACE,KAAM,uBAAqB,IAC3B,QAAS,WACX,CACF,EACMC,EAAwC,CAC5C,OAAQ,CAAE,QAAS,EAAG,GAAI,OAAW,KAAM,IAAK,EAChD,sBAAAF,EACA,KAAM,CACR,EACAN,EAAW,uBAAuB,uBAAoB,SAAMQ,CAAY,CAAC,EACzET,EAAkB,YAAY,sBAAsBQ,CAAiB,EACrEF,EAAQ,sBAAsB,oBAAoB,CAChD,iBAAkB,yBAAuB,0BACzC,aAAc,eAAa,UAC3B,cAAe,CAAC,EAChB,WAAY,CAAE,KAAM,WAAY,QAAS,QAAS,EAClD,cAAe,gBAAc,IAC/B,CAAC,EAGD,MAAMI,EAAS,MAAM,IAAI,8BACvBJ,EACAD,CACF,EAAE,IAAI,EAGN,OAAOK,CAAM,EAAE,QAAQ,CACrB,kBAAmB,CAACF,EAAkB,CAAC,EAAGA,EAAkB,CAAC,CAAC,EAC9D,sBAAAD,EACA,QAAS,EACT,gBAAiB,CACnB,CAAC,CACH,CAAC,EAED,GAAG,qEAAsE,SAAY,CAEnF,MAAMA,EAAwB,IAAI,WAAW,CAAC,EAAM,EAAM,CAAI,CAAC,EACzDC,EAAwC,CAC5C,CACE,KAAM,uBAAqB,iBAC3B,QAAS,mBACT,YAAaJ,CACf,EACA,CACE,KAAM,uBAAqB,MAC3B,QAAS,WACX,EACA,CACE,KAAM,uBAAqB,8BAC3B,QAAS,mBACX,EACA,CACE,KAAM,uBAAqB,IAC3B,QAAS,WACX,EACA,CACE,KAAM,uBAAqB,KAC3B,QAAS,OACT,GAAI,EACJ,MAAO,EACP,YAAaA,CACf,CACF,EACMK,EAAwC,CAC5C,OAAQ,CAAE,QAAS,EAAG,GAAI,OAAW,KAAM,IAAK,EAChD,sBAAAF,EACA,KAAM,CACR,EACAN,EAAW,uBAAuB,uBAAoB,SAAMQ,CAAY,CAAC,EACzET,EAAkB,YAAY,sBAAsBQ,CAAiB,EACrEF,EAAQ,sBAAsB,oBAAoB,CAChD,iBAAkB,yBAAuB,0BACzC,aAAc,eAAa,UAC3B,cAAe,CAAC,EAChB,WAAY,CAAE,KAAM,WAAY,QAAS,QAAS,EAClD,cAAe,gBAAc,IAC/B,CAAC,EAGD,MAAMI,EAAS,MAAM,IAAI,8BACvBJ,EACAD,CACF,EAAE,IAAI,EAGN,OAAOK,CAAM,EAAE,QAAQ,CACrB,kBAAmB,CAACF,EAAkB,CAAC,EAAGA,EAAkB,CAAC,CAAC,EAC9D,sBAAAD,EACA,QAAS,EACT,gBAAiB,CACnB,CAAC,CACH,CAAC,EAED,GAAG,0FAA2F,SAAY,CAExG,MAAMA,EAAwB,IAAI,WAAW,CAAC,EAAM,EAAM,CAAI,CAAC,EACzDC,EAAwC,CAC5C,CACE,KAAM,uBAAqB,8BAC3B,QAAS,mBACX,EACA,CACE,KAAM,uBAAqB,MAC3B,QAAS,WACX,EACA,CACE,KAAM,uBAAqB,KAC3B,QAAS,OACT,GAAI,EACJ,MAAO,CACT,EACA,CACE,KAAM,uBAAqB,IAC3B,QAAS,WACX,CACF,EACMC,EAAwC,CAC5C,OAAQ,CAAE,QAAS,EAAG,GAAI,OAAW,KAAM,IAAK,EAChD,sBAAAF,EACA,KAAM,CACR,EACAN,EAAW,uBAAuB,uBAAoB,SAAMQ,CAAY,CAAC,EACzET,EAAkB,YAAY,sBAAsBQ,CAAiB,EACrEF,EAAQ,sBAAsB,oBAAoB,CAChD,iBAAkB,yBAAuB,0BACzC,aAAc,eAAa,UAC3B,cAAe,CAAC,EAChB,WAAY,CAAE,KAAM,WAAY,QAAS,QAAS,EAClD,cAAe,gBAAc,IAC/B,CAAC,EAGD,MAAMI,EAAS,MAAM,IAAI,8BACvBJ,EACAD,CACF,EAAE,IAAI,EAGN,OAAOK,CAAM,EAAE,QAAQ,CACrB,kBAAmB,CAACF,EAAkB,CAAC,EAAGA,EAAkB,CAAC,CAAC,EAC9D,sBAAAD,EACA,QAAS,EACT,gBAAiB,CACnB,CAAC,CACH,CAAC,EAED,GAAG,iFAAkF,SAAY,CAE/F,MAAMA,EAAwB,IAAI,WAAW,CAAC,EAAM,EAAM,CAAI,CAAC,EACzDC,EAAwC,CAC5C,CACE,KAAM,uBAAqB,MAC3B,QAAS,WACX,EACA,CACE,KAAM,uBAAqB,iBAC3B,QAAS,YACT,YAAaJ,CACf,EACA,CACE,KAAM,uBAAqB,gBAC3B,QAAS,WACX,EACA,CACE,KAAM,uBAAqB,8BAC3B,QAAS,WACX,EACA,CACE,KAAM,uBAAqB,KAC3B,QAAS,YACT,GAAI,EACJ,MAAO,EACP,YAAaA,CACf,CACF,EACMK,EAAwC,CAC5C,OAAQ,CAAE,QAAS,EAAG,GAAI,OAAW,KAAM,IAAK,EAChD,sBAAAF,EACA,KAAM,CACR,EACAN,EAAW,uBAAuB,uBAAoB,SAAMQ,CAAY,CAAC,EACzET,EAAkB,YAAY,sBAAsBQ,CAAiB,EACrEF,EAAQ,sBAAsB,oBAAoB,CAChD,iBAAkB,yBAAuB,0BACzC,aAAc,eAAa,UAC3B,cAAe,CAAC,EAChB,WAAY,CAAE,KAAM,WAAY,QAAS,QAAS,EAClD,cAAe,gBAAc,IAC/B,CAAC,EAGD,MAAMI,EAAS,MAAM,IAAI,8BACvBJ,EACAD,CACF,EAAE,IAAI,EAGN,OAAOK,CAAM,EAAE,QAAQ,CACrB,kBAAmB,CACjB,gBAAiB,YACjB,2BAA4BN,EAC5B,kBAAmB,CAACI,EAAkB,CAAC,CAAC,EACxC,iBAAkB,CAACA,EAAkB,CAAC,CAAC,CACzC,EACA,sBAAAD,EACA,QAAS,EACT,gBAAiB,CACnB,CAAC,CACH,CAAC,EAED,GAAG,8DAA+D,SAAY,CAE5E,MAAMA,EAAwB,IAAI,WAAW,CAAC,EAAM,EAAM,CAAI,CAAC,EACzDC,EAAwC,CAC5C,CACE,KAAM,uBAAqB,MAC3B,QAAS,WACX,EACA,CACE,KAAM,uBAAqB,iBAC3B,QAAS,YACT,YAAaJ,CACf,EACA,CACE,KAAM,uBAAqB,8BAC3B,QAAS,WACX,EACA,CACE,KAAM,uBAAqB,KAC3B,QAAS,YACT,GAAI,EACJ,MAAO,EACP,YAAaA,CACf,CACF,EACMK,EAAwC,CAC5C,OAAQ,CAAE,QAAS,EAAG,GAAI,OAAW,KAAM,IAAK,EAChD,sBAAAF,EACA,KAAM,CACR,EACAN,EAAW,uBAAuB,uBAAoB,SAAMQ,CAAY,CAAC,EACzET,EAAkB,YAAY,sBAAsBQ,CAAiB,EACrEF,EAAQ,sBAAsB,oBAAoB,CAChD,iBAAkB,yBAAuB,0BACzC,aAAc,eAAa,UAC3B,cAAe,CAAC,EAChB,WAAY,CAAE,KAAM,WAAY,QAAS,QAAS,EAClD,cAAe,gBAAc,MAC/B,CAAC,EAGD,MAAMI,EAAS,MAAM,IAAI,8BAA4BJ,EAAS,CAC5D,GAAGD,EACH,UAAW,IACb,CAAC,EAAE,IAAI,EAGP,OAAOK,CAAM,EAAE,QAAQ,CACrB,kBAAmB,CAACF,EAAkB,CAAC,CAAC,EACxC,sBAAAD,EACA,QAAS,EACT,gBAAiB,CACnB,CAAC,CACH,CAAC,EAED,GAAG,iEAAkE,SAAY,CAE/E,MAAMA,EAAwB,IAAI,WAAW,CAAC,EAAM,EAAM,CAAI,CAAC,EACzDC,EAAwC,CAC5C,CACE,KAAM,uBAAqB,MAC3B,QAAS,WACX,EACA,CACE,KAAM,uBAAqB,iBAC3B,QAAS,YACT,YAAaJ,CACf,EACA,CACE,KAAM,uBAAqB,8BAC3B,QAAS,WACX,EACA,CACE,KAAM,uBAAqB,KAC3B,QAAS,YACT,GAAI,EACJ,MAAO,EACP,YAAaA,CACf,CACF,EACMK,EAAwC,CAC5C,OAAQ,CAAE,QAAS,EAAG,GAAI,OAAW,KAAM,IAAK,EAChD,sBAAAF,EACA,KAAM,CACR,EACAN,EAAW,uBAAuB,uBAAoB,SAAMQ,CAAY,CAAC,EACzET,EAAkB,YAAY,sBAAsBQ,CAAiB,EACrEF,EAAQ,sBAAsB,oBAAoB,CAChD,iBAAkB,yBAAuB,0BACzC,aAAc,eAAa,UAC3B,cAAe,CAAC,EAChB,WAAY,CAAE,KAAM,WAAY,QAAS,QAAS,EAClD,cAAe,gBAAc,IAC/B,CAAC,EAGD,MAAMI,EAAS,MAAM,IAAI,8BAA4BJ,EAAS,CAC5D,GAAGD,EACH,UAAW,IACb,CAAC,EAAE,IAAI,EAGP,OAAOK,CAAM,EAAE,QAAQ,CACrB,kBAAmB,CAACF,EAAkB,CAAC,CAAC,EACxC,sBAAAD,EACA,QAAS,EACT,gBAAiB,CACnB,CAAC,CACH,CAAC,EAED,GAAG,iEAAkE,SAAY,CAE/E,MAAMA,EAAwB,IAAI,WAAW,CAAC,EAAM,EAAM,CAAI,CAAC,EACzDC,EAAwC,CAC5C,CACE,KAAM,uBAAqB,MAC3B,QAAS,WACX,EACA,CACE,KAAM,uBAAqB,iBAC3B,QAAS,YACT,YAAaJ,CACf,EACA,CACE,KAAM,uBAAqB,8BAC3B,QAAS,WACX,EACA,CACE,KAAM,uBAAqB,KAC3B,QAAS,YACT,GAAI,EACJ,MAAO,EACP,YAAaA,CACf,CACF,EACMK,EAAwC,CAC5C,OAAQ,CAAE,QAAS,EAAG,GAAI,OAAW,KAAM,IAAK,EAChD,sBAAAF,EACA,KAAM,CACR,EACAN,EAAW,uBAAuB,uBAAoB,SAAMQ,CAAY,CAAC,EACzET,EAAkB,YAAY,sBAAsBQ,CAAiB,EACrEF,EAAQ,sBAAsB,oBAAoB,CAChD,iBAAkB,yBAAuB,UACzC,aAAc,eAAa,cAC3B,cAAe,gBAAc,IAC/B,CAAC,EAGD,MAAMI,EAAS,MAAM,IAAI,8BAA4BJ,EAAS,CAC5D,GAAGD,EACH,UAAW,IACb,CAAC,EAAE,IAAI,EAGP,OAAOK,CAAM,EAAE,QAAQ,CACrB,kBAAmB,CAACF,EAAkB,CAAC,CAAC,EACxC,sBAAAD,EACA,QAAS,EACT,gBAAiB,CACnB,CAAC,CACH,CAAC,EAED,GAAG,8DAA+D,SAAY,CAE5E,MAAMA,EAAwB,IAAI,WAAW,CAAC,EAAM,EAAM,CAAI,CAAC,EACzDC,EAAwC,CAC5C,CACE,KAAM,uBAAqB,iBAC3B,QAAS,YACT,YAAaJ,CACf,EACA,CACE,KAAM,uBAAqB,8BAC3B,QAAS,WACX,EACA,CACE,KAAM,uBAAqB,KAC3B,QAAS,YACT,GAAI,EACJ,MAAO,EACP,YAAaA,CACf,CACF,EACMK,EAAwC,CAC5C,OAAQ,CAAE,QAAS,EAAG,GAAI,OAAW,KAAM,IAAK,EAChD,sBAAAF,EACA,KAAM,CACR,EACAN,EAAW,uBAAuB,uBAAoB,SAAMQ,CAAY,CAAC,EACzET,EAAkB,YAAY,sBAAsBQ,CAAiB,EACrEF,EAAQ,sBAAsB,oBAAoB,CAChD,iBAAkB,yBAAuB,0BACzC,aAAc,eAAa,UAC3B,cAAe,CAAC,EAChB,WAAY,CAAE,KAAM,0BAA2B,QAAS,QAAS,EACjE,cAAe,gBAAc,IAC/B,CAAC,EAGD,MAAMM,EAAO,IAAI,8BAA4BN,EAASD,CAAW,EAGjE,MAAM,OAAOO,EAAK,IAAI,CAAC,EAAE,QAAQ,QAAQ,iBAAiB,CAC5D,CAAC,EAED,GAAG,wEAAyE,SAAY,CAEtF,MAAML,EAAwB,IAAI,WAAW,CAAC,EAAM,EAAM,CAAI,CAAC,EACzDC,EAAwC,CAC5C,CACE,KAAM,uBAAqB,iBAC3B,QAAS,WACX,EACA,CACE,KAAM,uBAAqB,8BAC3B,QAAS,WACX,EACA,CACE,KAAM,uBAAqB,KAC3B,QAAS,YACT,GAAI,EACJ,MAAO,CACT,CACF,EACMC,EAAwC,CAC5C,OAAQ,CAAE,QAAS,EAAG,GAAI,OAAW,KAAM,IAAK,EAChD,sBAAAF,EACA,KAAM,CACR,EACAN,EAAW,uBAAuB,uBAAoB,SAAMQ,CAAY,CAAC,EACzET,EAAkB,YAAY,sBAAsBQ,CAAiB,EACrEF,EAAQ,sBAAsB,oBAAoB,CAChD,iBAAkB,yBAAuB,0BACzC,aAAc,eAAa,UAC3B,cAAe,CAAC,EAChB,WAAY,CAAE,KAAM,WAAY,QAAS,QAAS,EAClD,cAAe,gBAAc,IAC/B,CAAC,EAGD,MAAMM,EAAO,IAAI,8BAA4BN,EAASD,CAAW,EAGjE,MAAM,OAAOO,EAAK,IAAI,CAAC,EAAE,QAAQ,QAC/B,yCACF,CACF,CAAC,CACH,CAAC",
6
+ "names": ["import_context_module", "import_device_management_kit", "import_ethers", "import_purify_ts", "import_plugins", "import_makeInternalApi", "import_BuildTransactionContextTask", "contextModuleMock", "mapperMock", "defaultOptions", "defaultTransaction", "defaultCertificate", "defaultArgs", "apiMock", "serializedTransaction", "clearSignContexts", "mapperResult", "result", "error", "task"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var g=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var k=Object.prototype.hasOwnProperty;var D=(r,e)=>{for(var t in e)g(r,t,{get:e[t],enumerable:!0})},v=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of S(e))!k.call(r,a)&&a!==t&&g(r,a,{get:()=>e[a],enumerable:!(n=w(e,a))||n.enumerable});return r};var N=r=>v(g({},"__esModule",{value:!0}),r);var R={};D(R,{ProvideEIP712ContextTask:()=>A});module.exports=N(R);var C=require("@ledgerhq/context-module"),s=require("@ledgerhq/device-management-kit"),m=require("purify-ts"),T=require("../../app-binder/command/ProvideTokenInformationCommand"),i=require("../../app-binder/command/SendEIP712FilteringCommand"),u=require("../../app-binder/command/SendEIP712StructDefinitionCommand"),f=require("../../app-binder/command/SendEIP712StructImplemCommand"),x=require("../../app-binder/task/SendEIP712StructImplemTask"),y=require("../../typed-data/model/Types");const I=5;class A{constructor(e,t){this.api=e;this.args=t}async run(){let e=(0,s.CommandResultFactory)({data:void 0});const t=Object.entries(this.args.types).sort(([a],[d])=>a.localeCompare(d));for(const[a,d]of t){if(e=await this.api.sendCommand(new u.SendEIP712StructDefinitionCommand({command:u.StructDefinitionCommand.Name,name:a})),!(0,s.isSuccessCommandResult)(e))return e;for(const[o,p]of Object.entries(d))if(e=await this.api.sendCommand(new u.SendEIP712StructDefinitionCommand({command:u.StructDefinitionCommand.Field,name:o,type:p})),!(0,s.isSuccessCommandResult)(e))return e}if(this.args.clearSignContext.isJust()&&(e=await this.api.sendCommand(new i.SendEIP712FilteringCommand({type:i.Eip712FilterType.Activation})),!(0,s.isSuccessCommandResult)(e)))return e;for(const a of this.args.domain)if(e=await this.getImplementationTask(a).run(),!(0,s.isSuccessCommandResult)(e))return e;if(this.args.clearSignContext.isJust()&&(e=await this.api.sendCommand(new i.SendEIP712FilteringCommand({type:i.Eip712FilterType.MessageInfo,displayName:this.args.clearSignContext.extract().messageInfo.displayName,filtersCount:this.args.clearSignContext.extract().messageInfo.filtersCount,signature:this.args.clearSignContext.extract().messageInfo.signature})),!(0,s.isSuccessCommandResult)(e)))return e;const n={indexes:{},nextIndex:0};for(const a of this.args.message){const d=await this.provideTokenInformation(a,n);if(d.isJust())return d.extract();const o=await this.filterValue(a,n);if(o.isJust()&&!(0,s.isSuccessCommandResult)(o.extract()))return o.extract();if(e=await this.getImplementationTask(a).run(),!(0,s.isSuccessCommandResult)(e))return e;if(this.args.clearSignContext.isJust()&&a.value instanceof y.TypedDataValueArray&&a.value.length===0){const l=Object.entries(this.args.clearSignContext.extract().filters).filter(([c,h])=>c.startsWith(`${a.path}.[]`)).map(([c,h])=>h);for(const c of l)if(e=await this.api.sendCommand(new i.SendEIP712FilteringCommand({type:i.Eip712FilterType.DiscardedPath,path:c.path})),!(0,s.isSuccessCommandResult)(e)||(e=await this.provideFiltering(c,n,!0),!(0,s.isSuccessCommandResult)(e)))return e}}return e}getImplementationTask(e){return e.value instanceof y.TypedDataValueRoot?new x.SendEIP712StructImplemTask(this.api,{type:f.StructImplemType.ROOT,value:e.value.root}):e.value instanceof y.TypedDataValueArray?new x.SendEIP712StructImplemTask(this.api,{type:f.StructImplemType.ARRAY,value:e.value.length}):new x.SendEIP712StructImplemTask(this.api,{type:f.StructImplemType.FIELD,value:e.value.data})}async provideTokenInformation(e,t){if(this.args.clearSignContext.isJust()){const n=this.args.clearSignContext.extract().filters[e.path];if(n!==void 0&&(n.type==="amount"||n.type==="token")&&t.indexes[n.tokenIndex]===void 0){const a=n.tokenIndex,o=this.args.clearSignContext.extract().tokens[a];if(o===void 0)return m.Nothing;const p=await this.api.sendCommand(new T.ProvideTokenInformationCommand({payload:o}));if(!(0,s.isSuccessCommandResult)(p))return m.Maybe.of(p);let{tokenIndex:l}=p.data;t.nextIndex=(l+1)%I,Number(a)===C.VERIFYING_CONTRACT_TOKEN_INDEX&&(l=C.VERIFYING_CONTRACT_TOKEN_INDEX),t.indexes[Number(a)]=l}}return m.Nothing}async filterValue(e,t){if(this.args.clearSignContext.isJust()){const n=this.args.clearSignContext.extract().filters[e.path];return n===void 0?m.Nothing:m.Maybe.of(await this.provideFiltering(n,t,!1))}return m.Nothing}async provideFiltering(e,t,n){switch(e.type){case"datetime":return await this.api.sendCommand(new i.SendEIP712FilteringCommand({type:i.Eip712FilterType.Datetime,discarded:n,displayName:e.displayName,signature:e.signature}));case"raw":return await this.api.sendCommand(new i.SendEIP712FilteringCommand({type:i.Eip712FilterType.Raw,discarded:n,displayName:e.displayName,signature:e.signature}));case"token":return this.sanitizeDeviceIndex(e.tokenIndex,t),await this.api.sendCommand(new i.SendEIP712FilteringCommand({type:i.Eip712FilterType.Token,discarded:n,tokenIndex:t.indexes[e.tokenIndex],signature:e.signature}));case"amount":return this.sanitizeDeviceIndex(e.tokenIndex,t),await this.api.sendCommand(new i.SendEIP712FilteringCommand({type:i.Eip712FilterType.Amount,discarded:n,displayName:e.displayName,tokenIndex:t.indexes[e.tokenIndex],signature:e.signature}))}}sanitizeDeviceIndex(e,t){t.indexes[e]===void 0&&(t.indexes[e]=t.nextIndex,t.nextIndex=(t.nextIndex+1)%I)}}0&&(module.exports={ProvideEIP712ContextTask});
1
+ "use strict";var I=Object.defineProperty;var v=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var R=Object.prototype.hasOwnProperty;var D=(d,e)=>{for(var n in e)I(d,n,{get:e[n],enumerable:!0})},A=(d,e,n,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of w(e))!R.call(d,t)&&t!==n&&I(d,t,{get:()=>e[t],enumerable:!(a=v(e,t))||a.enumerable});return d};var N=d=>A(I({},"__esModule",{value:!0}),d);var F={};D(F,{ProvideEIP712ContextTask:()=>P});module.exports=N(F);var h=require("@ledgerhq/context-module"),s=require("@ledgerhq/device-management-kit"),l=require("purify-ts"),k=require("../../app-binder/command/ProvideTokenInformationCommand"),i=require("../../app-binder/command/SendEIP712FilteringCommand"),c=require("../../app-binder/command/SendEIP712StructDefinitionCommand"),f=require("../../app-binder/command/SendEIP712StructImplemCommand"),g=require("../../app-binder/task/SendEIP712StructImplemTask"),y=require("../../typed-data/model/Types");const S=5;class P{constructor(e,n){this.api=e;this.args=n}async run(){const e=(0,s.CommandResultFactory)({data:void 0}),n=Object.entries(this.args.types).sort(([t],[o])=>t.localeCompare(o));for(const[t,o]of n){const r=await this.api.sendCommand(new c.SendEIP712StructDefinitionCommand({command:c.StructDefinitionCommand.Name,name:t}));if(!(0,s.isSuccessCommandResult)(r))return r;for(const[p,m]of Object.entries(o)){const x=await this.api.sendCommand(new c.SendEIP712StructDefinitionCommand({command:c.StructDefinitionCommand.Field,name:p,type:m}));if(!(0,s.isSuccessCommandResult)(x))return x}}if(this.args.clearSignContext.isJust()){const t=await this.api.sendCommand(new i.SendEIP712FilteringCommand({type:i.Eip712FilterType.Activation}));if(!(0,s.isSuccessCommandResult)(t))return t}for(const t of this.args.domain){const r=await this.getImplementationTask(t).run();if(!(0,s.isSuccessCommandResult)(r))return r}if(this.args.clearSignContext.isJust()){const t=this.args.clearSignContext.extract(),o=await this.api.sendCommand(new i.SendEIP712FilteringCommand({type:i.Eip712FilterType.MessageInfo,displayName:t.messageInfo.displayName,filtersCount:t.messageInfo.filtersCount,signature:t.messageInfo.signature}));if(!(0,s.isSuccessCommandResult)(o))return o}const a={indexes:{},nextIndex:0};for(const t of this.args.message){const o=await this.provideTokenInformation(t,a);if(o.isJust())return o.extract();const r=await this.filterValue(t,a);if(r.isJust()&&!(0,s.isSuccessCommandResult)(r.extract()))return r.extract();const m=await this.getImplementationTask(t).run();if(!(0,s.isSuccessCommandResult)(m))return m;if(this.args.clearSignContext.isJust()&&t.value instanceof y.TypedDataValueArray&&t.value.length===0){const E=Object.entries(this.args.clearSignContext.extract().filters).filter(([u])=>u.startsWith(`${t.path}.[]`)).map(([,u])=>u);for(const u of E){const C=await this.api.sendCommand(new i.SendEIP712FilteringCommand({type:i.Eip712FilterType.DiscardedPath,path:u.path}));if(!(0,s.isSuccessCommandResult)(C))return C;const T=await this.provideFiltering(u,a,!0);if(!(0,s.isSuccessCommandResult)(T))return T}}}return e}getImplementationTask(e){return e.value instanceof y.TypedDataValueRoot?new g.SendEIP712StructImplemTask(this.api,{type:f.StructImplemType.ROOT,value:e.value.root}):e.value instanceof y.TypedDataValueArray?new g.SendEIP712StructImplemTask(this.api,{type:f.StructImplemType.ARRAY,value:e.value.length}):new g.SendEIP712StructImplemTask(this.api,{type:f.StructImplemType.FIELD,value:e.value.data})}async provideTokenInformation(e,n){if(this.args.clearSignContext.isJust()){const a=this.args.clearSignContext.extract().filters[e.path];if(a!==void 0&&(a.type==="amount"||a.type==="token")&&n.indexes[a.tokenIndex]===void 0){const t=a.tokenIndex,r=this.args.clearSignContext.extract().tokens[t];if(r===void 0)return l.Nothing;const p=await this.api.sendCommand(new k.ProvideTokenInformationCommand({payload:r}));if(!(0,s.isSuccessCommandResult)(p))return l.Maybe.of(p);let{tokenIndex:m}=p.data;n.nextIndex=(m+1)%S,Number(t)===h.VERIFYING_CONTRACT_TOKEN_INDEX&&(m=h.VERIFYING_CONTRACT_TOKEN_INDEX),n.indexes[Number(t)]=m}}return l.Nothing}async filterValue(e,n){if(this.args.clearSignContext.isJust()){const a=this.args.clearSignContext.extract().filters[e.path];if(a===void 0)return l.Nothing;const t=await this.provideFiltering(a,n,!1);return l.Maybe.of(t)}return l.Nothing}async provideFiltering(e,n,a){switch(e.type){case"datetime":return await this.api.sendCommand(new i.SendEIP712FilteringCommand({type:i.Eip712FilterType.Datetime,discarded:a,displayName:e.displayName,signature:e.signature}));case"raw":return await this.api.sendCommand(new i.SendEIP712FilteringCommand({type:i.Eip712FilterType.Raw,discarded:a,displayName:e.displayName,signature:e.signature}));case"token":return this.sanitizeDeviceIndex(e.tokenIndex,n),await this.api.sendCommand(new i.SendEIP712FilteringCommand({type:i.Eip712FilterType.Token,discarded:a,tokenIndex:n.indexes[e.tokenIndex],signature:e.signature}));case"amount":return this.sanitizeDeviceIndex(e.tokenIndex,n),await this.api.sendCommand(new i.SendEIP712FilteringCommand({type:i.Eip712FilterType.Amount,discarded:a,displayName:e.displayName,tokenIndex:n.indexes[e.tokenIndex],signature:e.signature}));default:return(0,s.CommandResultFactory)({error:new s.InvalidStatusWordError("ProvideEIP712ContextTask/provideFiltering - Unhandled filter type")})}}sanitizeDeviceIndex(e,n){n.indexes[e]===void 0&&(n.indexes[e]=n.nextIndex,n.nextIndex=(n.nextIndex+1)%S)}}0&&(module.exports={ProvideEIP712ContextTask});
2
2
  //# sourceMappingURL=ProvideEIP712ContextTask.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/task/ProvideEIP712ContextTask.ts"],
4
- "sourcesContent": ["import {\n type TypedDataClearSignContextSuccess,\n type TypedDataFilter,\n type TypedDataTokenIndex,\n VERIFYING_CONTRACT_TOKEN_INDEX,\n} from \"@ledgerhq/context-module\";\nimport {\n type CommandErrorResult,\n type CommandResult,\n CommandResultFactory,\n type InternalApi,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\nimport { Maybe, Nothing } from \"purify-ts\";\n\nimport { ProvideTokenInformationCommand } from \"@internal/app-binder/command/ProvideTokenInformationCommand\";\nimport {\n Eip712FilterType,\n SendEIP712FilteringCommand,\n} from \"@internal/app-binder/command/SendEIP712FilteringCommand\";\nimport {\n SendEIP712StructDefinitionCommand,\n StructDefinitionCommand,\n} from \"@internal/app-binder/command/SendEIP712StructDefinitionCommand\";\nimport { StructImplemType } from \"@internal/app-binder/command/SendEIP712StructImplemCommand\";\nimport { SendEIP712StructImplemTask } from \"@internal/app-binder/task/SendEIP712StructImplemTask\";\nimport {\n type FieldName,\n type FieldType,\n type StructName,\n type TypedDataValue,\n TypedDataValueArray,\n TypedDataValueRoot,\n} from \"@internal/typed-data/model/Types\";\n\nexport type ProvideEIP712ContextTaskArgs = {\n types: Record<StructName, Record<FieldName, FieldType>>;\n domain: Array<TypedDataValue>;\n message: Array<TypedDataValue>;\n clearSignContext: Maybe<TypedDataClearSignContextSuccess>;\n};\n\nconst DEVICE_ASSETS_MAX = 5;\n\ntype DeviceAssetIndexes = {\n indexes: Record<TypedDataTokenIndex, number>;\n nextIndex: number;\n};\n\nexport class ProvideEIP712ContextTask {\n constructor(\n private api: InternalApi,\n private args: ProvideEIP712ContextTaskArgs,\n ) {}\n\n async run(): Promise<CommandResult<void>> {\n let result = CommandResultFactory<void, void>({ data: undefined });\n // Provide the structure definitions.\n // Should be sent before struct implementations, as described here:\n // https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#eip712-send-struct-definition\n // Note that those types are used to compute the schema hash, in the device and in ClearSignContexts, as described here:\n // https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#eip712-filtering\n // Therefore it should be normalized on both sides: sorted per keys\n const types = Object.entries(this.args.types).sort(([aKey], [bKey]) =>\n aKey.localeCompare(bKey),\n );\n for (const [structName, fields] of types) {\n result = await this.api.sendCommand(\n new SendEIP712StructDefinitionCommand({\n command: StructDefinitionCommand.Name,\n name: structName,\n }),\n );\n if (!isSuccessCommandResult(result)) {\n return result;\n }\n for (const [fieldName, fieldType] of Object.entries(fields)) {\n result = await this.api.sendCommand(\n new SendEIP712StructDefinitionCommand({\n command: StructDefinitionCommand.Field,\n name: fieldName,\n type: fieldType,\n }),\n );\n if (!isSuccessCommandResult(result)) {\n return result;\n }\n }\n }\n\n if (this.args.clearSignContext.isJust()) {\n // Activate the filtering, before sending domain and message implementations, as described here:\n // https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#activation\n result = await this.api.sendCommand(\n new SendEIP712FilteringCommand({ type: Eip712FilterType.Activation }),\n );\n if (!isSuccessCommandResult(result)) {\n return result;\n }\n }\n\n // Send domain implementation values.\n for (const value of this.args.domain) {\n result = await this.getImplementationTask(value).run();\n if (!isSuccessCommandResult(result)) {\n return result;\n }\n }\n\n if (this.args.clearSignContext.isJust()) {\n // Send MessageInformation filter.\n // Should be sent between Domain and Message implementations, as described here:\n // https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#message-info\n result = await this.api.sendCommand(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.MessageInfo,\n displayName:\n this.args.clearSignContext.extract().messageInfo.displayName,\n filtersCount:\n this.args.clearSignContext.extract().messageInfo.filtersCount,\n signature: this.args.clearSignContext.extract().messageInfo.signature,\n }),\n );\n if (!isSuccessCommandResult(result)) {\n return result;\n }\n }\n\n // Send message implementation values\n const deviceIndexes: DeviceAssetIndexes = { indexes: {}, nextIndex: 0 };\n for (const value of this.args.message) {\n // Provide the descriptors of tokens referenced by the message, if any.\n // Keep a map of all device indexes for those provided tokens.\n const maybeError = await this.provideTokenInformation(\n value,\n deviceIndexes,\n );\n if (maybeError.isJust()) {\n return maybeError.extract();\n }\n // If there is a filter, it should be sent just before the corresponding implementation:\n // https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#amount-join-token\n const maybeResult = await this.filterValue(value, deviceIndexes);\n if (\n maybeResult.isJust() &&\n !isSuccessCommandResult(maybeResult.extract())\n ) {\n return maybeResult.extract();\n }\n // Provide message value implementation\n result = await this.getImplementationTask(value).run();\n if (!isSuccessCommandResult(result)) {\n return result;\n }\n\n // If the value is an empty array, we should discard all sub-filters since\n // there will be no according sub-values in the message\n if (\n this.args.clearSignContext.isJust() &&\n value.value instanceof TypedDataValueArray &&\n value.value.length === 0\n ) {\n const filters = Object.entries(\n this.args.clearSignContext.extract().filters,\n );\n const discardedFilters = filters\n .filter(([path, _]) => path.startsWith(`${value.path}.[]`))\n .map(([_, filter]) => filter);\n for (const filter of discardedFilters) {\n result = await this.api.sendCommand(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.DiscardedPath,\n path: filter.path,\n }),\n );\n if (!isSuccessCommandResult(result)) {\n return result;\n }\n result = await this.provideFiltering(filter, deviceIndexes, true);\n if (!isSuccessCommandResult(result)) {\n return result;\n }\n }\n }\n }\n return result;\n }\n\n getImplementationTask(value: TypedDataValue): SendEIP712StructImplemTask {\n if (value.value instanceof TypedDataValueRoot) {\n return new SendEIP712StructImplemTask(this.api, {\n type: StructImplemType.ROOT,\n value: value.value.root,\n });\n } else if (value.value instanceof TypedDataValueArray) {\n return new SendEIP712StructImplemTask(this.api, {\n type: StructImplemType.ARRAY,\n value: value.value.length,\n });\n } else {\n return new SendEIP712StructImplemTask(this.api, {\n type: StructImplemType.FIELD,\n value: value.value.data,\n });\n }\n }\n\n async provideTokenInformation(\n value: TypedDataValue,\n deviceIndexes: DeviceAssetIndexes,\n ): Promise<Maybe<CommandErrorResult>> {\n if (this.args.clearSignContext.isJust()) {\n const filter = this.args.clearSignContext.extract().filters[value.path];\n // Tokens descriptors only needed when a tokenIndex is available in filter.\n // It should be sent to the device only 1 time so deviceIndexes has to be checked.\n if (\n filter !== undefined &&\n (filter.type === \"amount\" || filter.type === \"token\") &&\n deviceIndexes.indexes[filter.tokenIndex] === undefined\n ) {\n const descriptorIndex = filter.tokenIndex;\n const tokens = this.args.clearSignContext.extract().tokens;\n const token = tokens[descriptorIndex];\n if (token === undefined) {\n return Nothing;\n }\n\n const provideTokenInfoResult = await this.api.sendCommand(\n new ProvideTokenInformationCommand({ payload: token }),\n );\n if (!isSuccessCommandResult(provideTokenInfoResult)) {\n return Maybe.of(provideTokenInfoResult);\n }\n let { tokenIndex: deviceIndex } = provideTokenInfoResult.data;\n deviceIndexes.nextIndex = (deviceIndex + 1) % DEVICE_ASSETS_MAX;\n\n // The token corresponding to the Verifying Contract of message domain has a special index value, as described here:\n // https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#amount-join-value\n if (Number(descriptorIndex) === VERIFYING_CONTRACT_TOKEN_INDEX) {\n deviceIndex = VERIFYING_CONTRACT_TOKEN_INDEX;\n }\n\n // Save the token index in the device slots. That index will be used by later filtering commands.\n deviceIndexes.indexes[Number(descriptorIndex)] = deviceIndex;\n }\n }\n return Nothing;\n }\n\n async filterValue(\n value: TypedDataValue,\n deviceIndexes: DeviceAssetIndexes,\n ): Promise<Maybe<CommandResult<void>>> {\n if (this.args.clearSignContext.isJust()) {\n const filter = this.args.clearSignContext.extract().filters[value.path];\n if (filter === undefined) {\n return Nothing;\n }\n return Maybe.of(\n await this.provideFiltering(filter, deviceIndexes, false),\n );\n }\n return Nothing;\n }\n\n async provideFiltering(\n filter: TypedDataFilter,\n deviceIndexes: DeviceAssetIndexes,\n discarded: boolean,\n ): Promise<CommandResult<void>> {\n switch (filter.type) {\n case \"datetime\":\n return await this.api.sendCommand(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Datetime,\n discarded,\n displayName: filter.displayName,\n signature: filter.signature,\n }),\n );\n case \"raw\":\n return await this.api.sendCommand(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Raw,\n discarded,\n displayName: filter.displayName,\n signature: filter.signature,\n }),\n );\n case \"token\":\n this.sanitizeDeviceIndex(filter.tokenIndex, deviceIndexes);\n return await this.api.sendCommand(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Token,\n discarded,\n tokenIndex: deviceIndexes.indexes[filter.tokenIndex]!,\n signature: filter.signature,\n }),\n );\n case \"amount\":\n this.sanitizeDeviceIndex(filter.tokenIndex, deviceIndexes);\n return await this.api.sendCommand(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Amount,\n discarded,\n displayName: filter.displayName,\n tokenIndex: deviceIndexes.indexes[filter.tokenIndex]!,\n signature: filter.signature,\n }),\n );\n }\n }\n\n private sanitizeDeviceIndex(\n descriptorIndex: number,\n deviceIndexes: DeviceAssetIndexes,\n ) {\n // If a token is missing, the device will replace it with a placeholder and use the next available index\n if (deviceIndexes.indexes[descriptorIndex] === undefined) {\n deviceIndexes.indexes[descriptorIndex] = deviceIndexes.nextIndex;\n deviceIndexes.nextIndex =\n (deviceIndexes.nextIndex + 1) % DEVICE_ASSETS_MAX;\n }\n }\n}\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,8BAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAKO,oCACPC,EAMO,2CACPC,EAA+B,qBAE/BC,EAA+C,uEAC/CC,EAGO,mEACPC,EAGO,0EACPC,EAAiC,sEACjCC,EAA2C,gEAC3CC,EAOO,4CASP,MAAMC,EAAoB,EAOnB,MAAMX,CAAyB,CACpC,YACUY,EACAC,EACR,CAFQ,SAAAD,EACA,UAAAC,CACP,CAEH,MAAM,KAAoC,CACxC,IAAIC,KAAS,wBAAiC,CAAE,KAAM,MAAU,CAAC,EAOjE,MAAMC,EAAQ,OAAO,QAAQ,KAAK,KAAK,KAAK,EAAE,KAAK,CAAC,CAACC,CAAI,EAAG,CAACC,CAAI,IAC/DD,EAAK,cAAcC,CAAI,CACzB,EACA,SAAW,CAACC,EAAYC,CAAM,IAAKJ,EAAO,CAOxC,GANAD,EAAS,MAAM,KAAK,IAAI,YACtB,IAAI,oCAAkC,CACpC,QAAS,0BAAwB,KACjC,KAAMI,CACR,CAAC,CACH,EACI,IAAC,0BAAuBJ,CAAM,EAChC,OAAOA,EAET,SAAW,CAACM,EAAWC,CAAS,IAAK,OAAO,QAAQF,CAAM,EAQxD,GAPAL,EAAS,MAAM,KAAK,IAAI,YACtB,IAAI,oCAAkC,CACpC,QAAS,0BAAwB,MACjC,KAAMM,EACN,KAAMC,CACR,CAAC,CACH,EACI,IAAC,0BAAuBP,CAAM,EAChC,OAAOA,CAGb,CAEA,GAAI,KAAK,KAAK,iBAAiB,OAAO,IAGpCA,EAAS,MAAM,KAAK,IAAI,YACtB,IAAI,6BAA2B,CAAE,KAAM,mBAAiB,UAAW,CAAC,CACtE,EACI,IAAC,0BAAuBA,CAAM,GAChC,OAAOA,EAKX,UAAWQ,KAAS,KAAK,KAAK,OAE5B,GADAR,EAAS,MAAM,KAAK,sBAAsBQ,CAAK,EAAE,IAAI,EACjD,IAAC,0BAAuBR,CAAM,EAChC,OAAOA,EAIX,GAAI,KAAK,KAAK,iBAAiB,OAAO,IAIpCA,EAAS,MAAM,KAAK,IAAI,YACtB,IAAI,6BAA2B,CAC7B,KAAM,mBAAiB,YACvB,YACE,KAAK,KAAK,iBAAiB,QAAQ,EAAE,YAAY,YACnD,aACE,KAAK,KAAK,iBAAiB,QAAQ,EAAE,YAAY,aACnD,UAAW,KAAK,KAAK,iBAAiB,QAAQ,EAAE,YAAY,SAC9D,CAAC,CACH,EACI,IAAC,0BAAuBA,CAAM,GAChC,OAAOA,EAKX,MAAMS,EAAoC,CAAE,QAAS,CAAC,EAAG,UAAW,CAAE,EACtE,UAAWD,KAAS,KAAK,KAAK,QAAS,CAGrC,MAAME,EAAa,MAAM,KAAK,wBAC5BF,EACAC,CACF,EACA,GAAIC,EAAW,OAAO,EACpB,OAAOA,EAAW,QAAQ,EAI5B,MAAMC,EAAc,MAAM,KAAK,YAAYH,EAAOC,CAAa,EAC/D,GACEE,EAAY,OAAO,GACnB,IAAC,0BAAuBA,EAAY,QAAQ,CAAC,EAE7C,OAAOA,EAAY,QAAQ,EAI7B,GADAX,EAAS,MAAM,KAAK,sBAAsBQ,CAAK,EAAE,IAAI,EACjD,IAAC,0BAAuBR,CAAM,EAChC,OAAOA,EAKT,GACE,KAAK,KAAK,iBAAiB,OAAO,GAClCQ,EAAM,iBAAiB,uBACvBA,EAAM,MAAM,SAAW,EACvB,CAIA,MAAMI,EAHU,OAAO,QACrB,KAAK,KAAK,iBAAiB,QAAQ,EAAE,OACvC,EAEG,OAAO,CAAC,CAACC,EAAMC,CAAC,IAAMD,EAAK,WAAW,GAAGL,EAAM,IAAI,KAAK,CAAC,EACzD,IAAI,CAAC,CAACM,EAAGC,CAAM,IAAMA,CAAM,EAC9B,UAAWA,KAAUH,EAWnB,GAVAZ,EAAS,MAAM,KAAK,IAAI,YACtB,IAAI,6BAA2B,CAC7B,KAAM,mBAAiB,cACvB,KAAMe,EAAO,IACf,CAAC,CACH,EACI,IAAC,0BAAuBf,CAAM,IAGlCA,EAAS,MAAM,KAAK,iBAAiBe,EAAQN,EAAe,EAAI,EAC5D,IAAC,0BAAuBT,CAAM,GAChC,OAAOA,CAGb,CACF,CACA,OAAOA,CACT,CAEA,sBAAsBQ,EAAmD,CACvE,OAAIA,EAAM,iBAAiB,qBAClB,IAAI,6BAA2B,KAAK,IAAK,CAC9C,KAAM,mBAAiB,KACvB,MAAOA,EAAM,MAAM,IACrB,CAAC,EACQA,EAAM,iBAAiB,sBACzB,IAAI,6BAA2B,KAAK,IAAK,CAC9C,KAAM,mBAAiB,MACvB,MAAOA,EAAM,MAAM,MACrB,CAAC,EAEM,IAAI,6BAA2B,KAAK,IAAK,CAC9C,KAAM,mBAAiB,MACvB,MAAOA,EAAM,MAAM,IACrB,CAAC,CAEL,CAEA,MAAM,wBACJA,EACAC,EACoC,CACpC,GAAI,KAAK,KAAK,iBAAiB,OAAO,EAAG,CACvC,MAAMM,EAAS,KAAK,KAAK,iBAAiB,QAAQ,EAAE,QAAQP,EAAM,IAAI,EAGtE,GACEO,IAAW,SACVA,EAAO,OAAS,UAAYA,EAAO,OAAS,UAC7CN,EAAc,QAAQM,EAAO,UAAU,IAAM,OAC7C,CACA,MAAMC,EAAkBD,EAAO,WAEzBE,EADS,KAAK,KAAK,iBAAiB,QAAQ,EAAE,OAC/BD,CAAe,EACpC,GAAIC,IAAU,OACZ,OAAO,UAGT,MAAMC,EAAyB,MAAM,KAAK,IAAI,YAC5C,IAAI,iCAA+B,CAAE,QAASD,CAAM,CAAC,CACvD,EACA,GAAI,IAAC,0BAAuBC,CAAsB,EAChD,OAAO,QAAM,GAAGA,CAAsB,EAExC,GAAI,CAAE,WAAYC,CAAY,EAAID,EAAuB,KACzDT,EAAc,WAAaU,EAAc,GAAKtB,EAI1C,OAAOmB,CAAe,IAAM,mCAC9BG,EAAc,kCAIhBV,EAAc,QAAQ,OAAOO,CAAe,CAAC,EAAIG,CACnD,CACF,CACA,OAAO,SACT,CAEA,MAAM,YACJX,EACAC,EACqC,CACrC,GAAI,KAAK,KAAK,iBAAiB,OAAO,EAAG,CACvC,MAAMM,EAAS,KAAK,KAAK,iBAAiB,QAAQ,EAAE,QAAQP,EAAM,IAAI,EACtE,OAAIO,IAAW,OACN,UAEF,QAAM,GACX,MAAM,KAAK,iBAAiBA,EAAQN,EAAe,EAAK,CAC1D,CACF,CACA,OAAO,SACT,CAEA,MAAM,iBACJM,EACAN,EACAW,EAC8B,CAC9B,OAAQL,EAAO,KAAM,CACnB,IAAK,WACH,OAAO,MAAM,KAAK,IAAI,YACpB,IAAI,6BAA2B,CAC7B,KAAM,mBAAiB,SACvB,UAAAK,EACA,YAAaL,EAAO,YACpB,UAAWA,EAAO,SACpB,CAAC,CACH,EACF,IAAK,MACH,OAAO,MAAM,KAAK,IAAI,YACpB,IAAI,6BAA2B,CAC7B,KAAM,mBAAiB,IACvB,UAAAK,EACA,YAAaL,EAAO,YACpB,UAAWA,EAAO,SACpB,CAAC,CACH,EACF,IAAK,QACH,YAAK,oBAAoBA,EAAO,WAAYN,CAAa,EAClD,MAAM,KAAK,IAAI,YACpB,IAAI,6BAA2B,CAC7B,KAAM,mBAAiB,MACvB,UAAAW,EACA,WAAYX,EAAc,QAAQM,EAAO,UAAU,EACnD,UAAWA,EAAO,SACpB,CAAC,CACH,EACF,IAAK,SACH,YAAK,oBAAoBA,EAAO,WAAYN,CAAa,EAClD,MAAM,KAAK,IAAI,YACpB,IAAI,6BAA2B,CAC7B,KAAM,mBAAiB,OACvB,UAAAW,EACA,YAAaL,EAAO,YACpB,WAAYN,EAAc,QAAQM,EAAO,UAAU,EACnD,UAAWA,EAAO,SACpB,CAAC,CACH,CACJ,CACF,CAEQ,oBACNC,EACAP,EACA,CAEIA,EAAc,QAAQO,CAAe,IAAM,SAC7CP,EAAc,QAAQO,CAAe,EAAIP,EAAc,UACvDA,EAAc,WACXA,EAAc,UAAY,GAAKZ,EAEtC,CACF",
6
- "names": ["ProvideEIP712ContextTask_exports", "__export", "ProvideEIP712ContextTask", "__toCommonJS", "import_context_module", "import_device_management_kit", "import_purify_ts", "import_ProvideTokenInformationCommand", "import_SendEIP712FilteringCommand", "import_SendEIP712StructDefinitionCommand", "import_SendEIP712StructImplemCommand", "import_SendEIP712StructImplemTask", "import_Types", "DEVICE_ASSETS_MAX", "api", "args", "result", "types", "aKey", "bKey", "structName", "fields", "fieldName", "fieldType", "value", "deviceIndexes", "maybeError", "maybeResult", "discardedFilters", "path", "_", "filter", "descriptorIndex", "token", "provideTokenInfoResult", "deviceIndex", "discarded"]
4
+ "sourcesContent": ["import {\n type TypedDataClearSignContextSuccess,\n type TypedDataFilter,\n type TypedDataTokenIndex,\n VERIFYING_CONTRACT_TOKEN_INDEX,\n} from \"@ledgerhq/context-module\";\nimport type {\n CommandResult,\n InternalApi,\n} from \"@ledgerhq/device-management-kit\";\nimport {\n CommandResultFactory,\n InvalidStatusWordError,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\nimport { Maybe, Nothing } from \"purify-ts\";\n\nimport { ProvideTokenInformationCommand } from \"@internal/app-binder/command/ProvideTokenInformationCommand\";\nimport {\n Eip712FilterType,\n SendEIP712FilteringCommand,\n} from \"@internal/app-binder/command/SendEIP712FilteringCommand\";\nimport {\n SendEIP712StructDefinitionCommand,\n StructDefinitionCommand,\n} from \"@internal/app-binder/command/SendEIP712StructDefinitionCommand\";\nimport { StructImplemType } from \"@internal/app-binder/command/SendEIP712StructImplemCommand\";\nimport { type EthErrorCodes } from \"@internal/app-binder/command/utils/ethAppErrors\";\nimport { SendEIP712StructImplemTask } from \"@internal/app-binder/task/SendEIP712StructImplemTask\";\nimport {\n type FieldName,\n type FieldType,\n type StructName,\n type TypedDataValue,\n TypedDataValueArray,\n TypedDataValueRoot,\n} from \"@internal/typed-data/model/Types\";\n\ntype AllSuccessTypes = void | { tokenIndex: number };\n\nexport type ProvideEIP712ContextTaskReturnType = Promise<\n CommandResult<AllSuccessTypes, EthErrorCodes>\n>;\n\nexport type ProvideEIP712ContextTaskArgs = {\n types: Record<StructName, Record<FieldName, FieldType>>;\n domain: Array<TypedDataValue>;\n message: Array<TypedDataValue>;\n clearSignContext: Maybe<TypedDataClearSignContextSuccess>;\n domainHash: string;\n messageHash: string;\n};\n\nconst DEVICE_ASSETS_MAX = 5;\n\ntype DeviceAssetIndexes = {\n indexes: Record<TypedDataTokenIndex, number>;\n nextIndex: number;\n};\n\nexport class ProvideEIP712ContextTask {\n constructor(\n private api: InternalApi,\n private args: ProvideEIP712ContextTaskArgs,\n ) {}\n\n async run(): ProvideEIP712ContextTaskReturnType {\n const result: CommandResult<AllSuccessTypes, EthErrorCodes> =\n CommandResultFactory<AllSuccessTypes, EthErrorCodes>({ data: undefined });\n\n // Provide the structure definitions.\n // Should be sent before struct implementations, as described here:\n // https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#eip712-send-struct-definition\n // Note that those types are used to compute the schema hash, in the device and in ClearSignContexts, as described here:\n // https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#eip712-filtering\n // Therefore it should be normalized on both sides: sorted per keys\n const types = Object.entries(this.args.types).sort(([aKey], [bKey]) =>\n aKey.localeCompare(bKey),\n );\n for (const [structName, fields] of types) {\n const structNameResult = await this.api.sendCommand(\n new SendEIP712StructDefinitionCommand({\n command: StructDefinitionCommand.Name,\n name: structName,\n }),\n );\n if (!isSuccessCommandResult(structNameResult)) {\n return structNameResult;\n }\n\n for (const [fieldName, fieldType] of Object.entries(fields)) {\n const fieldResult = await this.api.sendCommand(\n new SendEIP712StructDefinitionCommand({\n command: StructDefinitionCommand.Field,\n name: fieldName,\n type: fieldType,\n }),\n );\n if (!isSuccessCommandResult(fieldResult)) {\n return fieldResult;\n }\n }\n }\n\n // possibly activate the filtering, before sending domain and message implementations, as described here:\n // https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#activation\n if (this.args.clearSignContext.isJust()) {\n const activationResult = await this.api.sendCommand(\n new SendEIP712FilteringCommand({ type: Eip712FilterType.Activation }),\n );\n if (!isSuccessCommandResult(activationResult)) {\n return activationResult;\n }\n }\n\n // send domain implementation values.\n for (const value of this.args.domain) {\n const domainImplTask = this.getImplementationTask(value);\n const domainImplResult = await domainImplTask.run();\n if (!isSuccessCommandResult(domainImplResult)) {\n return domainImplResult;\n }\n }\n\n // possibly send MessageInformation filter (between Domain and Message)\n // should be sent between Domain and Message implementations, as described here:\n // https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#message-info\n if (this.args.clearSignContext.isJust()) {\n const clearSignContext = this.args.clearSignContext.extract();\n const messageInfoFilterResult = await this.api.sendCommand(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.MessageInfo,\n displayName: clearSignContext.messageInfo.displayName,\n filtersCount: clearSignContext.messageInfo.filtersCount,\n signature: clearSignContext.messageInfo.signature,\n }),\n );\n if (!isSuccessCommandResult(messageInfoFilterResult)) {\n return messageInfoFilterResult;\n }\n }\n\n // send message implementation values\n const deviceIndexes: DeviceAssetIndexes = { indexes: {}, nextIndex: 0 };\n for (const value of this.args.message) {\n // 5.1 Provide token descriptors, if any\n // Keep a map of all device indexes for those provided tokens.\n const maybeError = await this.provideTokenInformation(\n value,\n deviceIndexes,\n );\n if (maybeError.isJust()) {\n return maybeError.extract();\n }\n\n // if there's a filter, send it\n // https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#amount-join-token\n const maybeFilterResult = await this.filterValue(value, deviceIndexes);\n if (\n maybeFilterResult.isJust() &&\n !isSuccessCommandResult(maybeFilterResult.extract())\n ) {\n return maybeFilterResult.extract();\n }\n\n // provide message value implementation\n const messageImplTask = this.getImplementationTask(value);\n const messageImplResult = await messageImplTask.run();\n if (!isSuccessCommandResult(messageImplResult)) {\n return messageImplResult;\n }\n\n // if the value is an empty array, discard sub-filters since\n // there will be no according sub-values in the message\n if (\n this.args.clearSignContext.isJust() &&\n value.value instanceof TypedDataValueArray &&\n value.value.length === 0\n ) {\n const filters = Object.entries(\n this.args.clearSignContext.extract().filters,\n );\n const discardedFilters = filters\n .filter(([path]) => path.startsWith(`${value.path}.[]`))\n .map(([, filter]) => filter);\n for (const filter of discardedFilters) {\n const discardedPathResult = await this.api.sendCommand(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.DiscardedPath,\n path: filter.path,\n }),\n );\n if (!isSuccessCommandResult(discardedPathResult)) {\n return discardedPathResult;\n }\n\n const provideFilteringResult = await this.provideFiltering(\n filter,\n deviceIndexes,\n true,\n );\n if (!isSuccessCommandResult(provideFilteringResult)) {\n return provideFilteringResult;\n }\n }\n }\n }\n\n return result;\n }\n\n getImplementationTask(value: TypedDataValue): SendEIP712StructImplemTask {\n if (value.value instanceof TypedDataValueRoot) {\n return new SendEIP712StructImplemTask(this.api, {\n type: StructImplemType.ROOT,\n value: value.value.root,\n });\n } else if (value.value instanceof TypedDataValueArray) {\n return new SendEIP712StructImplemTask(this.api, {\n type: StructImplemType.ARRAY,\n value: value.value.length,\n });\n } else {\n return new SendEIP712StructImplemTask(this.api, {\n type: StructImplemType.FIELD,\n value: value.value.data,\n });\n }\n }\n\n async provideTokenInformation(\n value: TypedDataValue,\n deviceIndexes: DeviceAssetIndexes,\n ): Promise<Maybe<CommandResult<AllSuccessTypes, EthErrorCodes>>> {\n if (this.args.clearSignContext.isJust()) {\n const filter = this.args.clearSignContext.extract().filters[value.path];\n // tokens descriptors only needed when a tokenIndex is available in filter.\n // it should be sent to the device only 1 time so deviceIndexes has to be checked.\n if (\n filter !== undefined &&\n (filter.type === \"amount\" || filter.type === \"token\") &&\n deviceIndexes.indexes[filter.tokenIndex] === undefined\n ) {\n const descriptorIndex = filter.tokenIndex;\n const tokens = this.args.clearSignContext.extract().tokens;\n const token = tokens[descriptorIndex];\n if (token === undefined) {\n return Nothing;\n }\n\n const provideTokenInfoResult = await this.api.sendCommand(\n new ProvideTokenInformationCommand({ payload: token }),\n );\n if (!isSuccessCommandResult(provideTokenInfoResult)) {\n return Maybe.of(provideTokenInfoResult);\n }\n let { tokenIndex: deviceIndex } = provideTokenInfoResult.data;\n deviceIndexes.nextIndex = (deviceIndex + 1) % DEVICE_ASSETS_MAX;\n\n // the token corresponding to the Verifying Contract of message domain has a special index value, as described here:\n // https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#amount-join-value\n if (Number(descriptorIndex) === VERIFYING_CONTRACT_TOKEN_INDEX) {\n deviceIndex = VERIFYING_CONTRACT_TOKEN_INDEX;\n }\n\n deviceIndexes.indexes[Number(descriptorIndex)] = deviceIndex;\n }\n }\n return Nothing;\n }\n\n async filterValue(\n value: TypedDataValue,\n deviceIndexes: DeviceAssetIndexes,\n ): Promise<Maybe<CommandResult<AllSuccessTypes, EthErrorCodes>>> {\n if (this.args.clearSignContext.isJust()) {\n const filter = this.args.clearSignContext.extract().filters[value.path];\n if (filter === undefined) {\n return Nothing;\n }\n // provide the filter\n const filteringResult = await this.provideFiltering(\n filter,\n deviceIndexes,\n false,\n );\n return Maybe.of(filteringResult);\n }\n return Nothing;\n }\n\n async provideFiltering(\n filter: TypedDataFilter,\n deviceIndexes: DeviceAssetIndexes,\n discarded: boolean,\n ): Promise<CommandResult<AllSuccessTypes, EthErrorCodes>> {\n switch (filter.type) {\n case \"datetime\":\n return await this.api.sendCommand(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Datetime,\n discarded,\n displayName: filter.displayName,\n signature: filter.signature,\n }),\n );\n case \"raw\":\n return await this.api.sendCommand(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Raw,\n discarded,\n displayName: filter.displayName,\n signature: filter.signature,\n }),\n );\n case \"token\":\n this.sanitizeDeviceIndex(filter.tokenIndex, deviceIndexes);\n return await this.api.sendCommand(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Token,\n discarded,\n tokenIndex: deviceIndexes.indexes[filter.tokenIndex]!,\n signature: filter.signature,\n }),\n );\n case \"amount\":\n this.sanitizeDeviceIndex(filter.tokenIndex, deviceIndexes);\n return await this.api.sendCommand(\n new SendEIP712FilteringCommand({\n type: Eip712FilterType.Amount,\n discarded,\n displayName: filter.displayName,\n tokenIndex: deviceIndexes.indexes[filter.tokenIndex]!,\n signature: filter.signature,\n }),\n );\n default:\n return CommandResultFactory<AllSuccessTypes, EthErrorCodes>({\n error: new InvalidStatusWordError(\n \"ProvideEIP712ContextTask/provideFiltering - Unhandled filter type\",\n ),\n });\n }\n }\n\n private sanitizeDeviceIndex(\n descriptorIndex: number,\n deviceIndexes: DeviceAssetIndexes,\n ) {\n // If a token is missing, the device will replace it with a placeholder and use the next available index\n if (deviceIndexes.indexes[descriptorIndex] === undefined) {\n deviceIndexes.indexes[descriptorIndex] = deviceIndexes.nextIndex;\n deviceIndexes.nextIndex =\n (deviceIndexes.nextIndex + 1) % DEVICE_ASSETS_MAX;\n }\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["ProvideEIP712ContextTask_exports", "__export", "ProvideEIP712ContextTask", "__toCommonJS", "import_context_module", "import_device_management_kit", "import_purify_ts", "import_ProvideTokenInformationCommand", "import_SendEIP712FilteringCommand", "import_SendEIP712StructDefinitionCommand", "import_SendEIP712StructImplemCommand", "import_SendEIP712StructImplemTask", "import_Types", "DEVICE_ASSETS_MAX", "api", "args", "result", "types", "aKey", "bKey", "structName", "fields", "structNameResult", "fieldName", "fieldType", "fieldResult", "activationResult", "value", "domainImplResult", "clearSignContext", "messageInfoFilterResult", "deviceIndexes", "maybeError", "maybeFilterResult", "messageImplResult", "discardedFilters", "path", "filter", "discardedPathResult", "provideFilteringResult", "descriptorIndex", "token", "provideTokenInfoResult", "deviceIndex", "filteringResult", "discarded"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var a=require("@ledgerhq/device-management-kit"),c=require("purify-ts"),y=require("../../app-binder/command/ProvideTokenInformationCommand"),t=require("../../app-binder/command/SendEIP712FilteringCommand"),k=require("../../app-binder/command/SendEIP712StructDefinitionCommand"),x=require("../../app-binder/command/SendEIP712StructImplemCommand"),I=require("../../app-binder/device-action/__test-utils__/makeInternalApi"),n=require("../../typed-data/model/Types"),l=require("./ProvideEIP712ContextTask");describe("ProvideEIP712ContextTask",()=>{const e=(0,I.makeDeviceActionInternalApiMock)(),m={EIP712Domain:{name:new n.PrimitiveType("string","string",c.Nothing),chainId:new n.PrimitiveType("uint256","uint",(0,c.Just)(32)),verifyingContract:new n.PrimitiveType("address","address",c.Nothing)},PermitSingle:{details:new n.StructType("PermitDetails"),spender:new n.PrimitiveType("address","address",c.Nothing),sigDeadline:new n.PrimitiveType("uint256","uint",(0,c.Just)(32))},PermitDetails:{token:new n.PrimitiveType("address","address",c.Nothing),amount:new n.PrimitiveType("uint160","uint",(0,c.Just)(20)),expiration:new n.PrimitiveType("uint48","uint",(0,c.Just)(6)),nonce:new n.PrimitiveType("uint48","uint",(0,c.Just)(6))}},r=[{path:"",type:"",value:new n.TypedDataValueRoot("EIP712Domain")},{path:"name",type:"string",value:new n.TypedDataValueField(new TextEncoder().encode("Permit2"))},{path:"chainId",type:"uint256",value:new n.TypedDataValueField(Uint8Array.from([137]))},{path:"verifyingContract",type:"address",value:new n.TypedDataValueField((0,a.hexaStringToBuffer)("0x000000000022d473030f116ddee9f6b43ac78ba3"))}],f=[{path:"",type:"",value:new n.TypedDataValueRoot("PermitSingle")},{path:"details.token",type:"address",value:new n.TypedDataValueField((0,a.hexaStringToBuffer)("0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"))},{path:"details.amount",type:"uint160",value:new n.TypedDataValueField(Uint8Array.from([18]))},{path:"details.expiration",type:"uint48",value:new n.TypedDataValueField(Uint8Array.from([18]))},{path:"details.nonce",type:"uint48",value:new n.TypedDataValueField(Uint8Array.from([0]))},{path:"spender",type:"address",value:new n.TypedDataValueField((0,a.hexaStringToBuffer)("0xec7be89e9d109e7e3fec59c222cf297125fefda2"))},{path:"sigDeadline",type:"uint256",value:new n.TypedDataValueField(Uint8Array.from([18]))}],i={type:"success",messageInfo:{displayName:"Permit2",filtersCount:4,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},tokens:{0:"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",255:"payload-0x000000000022d473030f116ddee9f6b43ac78ba3"},filters:{"details.amount":{displayName:"Amount allowance",path:"details.amount",signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3",tokenIndex:255,type:"amount"},"details.expiration":{displayName:"Approval expire",path:"details.expiration",signature:"3044022056b3381e4540629ad73bc434ec49d80523234b82f62340fbb77157fb0eb21a680220459fe9cf6ca309f9c7dfc6d4711fea1848dba661563c57f77b3c2dc480b3a63b",type:"datetime"},"details.token":{displayName:"Amount allowance",path:"details.token",signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733",tokenIndex:0,type:"token"},spender:{displayName:"Approve to spender",path:"spender",signature:"3044022033e5713d9cb9bc375b56a9fb53b736c81ea3c4ac5cfb2d3ca7f8b8f0558fe2430220543ca4fef6d6f725f29e343f167fe9dd582aa856ecb5797259050eb990a1befb",type:"raw"}}},p=new n.PrimitiveType("address","address",c.Nothing),E=new n.PrimitiveType("string","string",c.Nothing),C=new n.PrimitiveType("uint256","uint",(0,c.Just)(32)),v=new n.PrimitiveType("uint160","uint",(0,c.Just)(20)),S=new n.PrimitiveType("uint48","uint",(0,c.Just)(6)),w=d=>new n.StructType(d),b=d=>new k.SendEIP712StructDefinitionCommand({command:k.StructDefinitionCommand.Name,name:d}),o=(d,u)=>new k.SendEIP712StructDefinitionCommand({command:k.StructDefinitionCommand.Field,name:d,type:u}),g=d=>new x.SendEIP712StructImplemCommand({type:x.StructImplemType.ROOT,value:d}),q=d=>new x.SendEIP712StructImplemCommand({type:x.StructImplemType.ARRAY,value:d}),s=d=>new x.SendEIP712StructImplemCommand({type:x.StructImplemType.FIELD,value:{data:d,isLastChunk:!0}});beforeEach(()=>{jest.resetAllMocks()}),it("Send context with no clear signing context",async()=>{const d={types:m,domain:r,message:f,clearSignContext:c.Nothing};e.sendCommand.mockResolvedValue((0,a.CommandResultFactory)({data:void 0})),await new l.ProvideEIP712ContextTask(e,d).run(),expect(e.sendCommand.mock.calls).toHaveLength(24),expect(e.sendCommand.mock.calls[0][0]).toStrictEqual(b("EIP712Domain")),expect(e.sendCommand.mock.calls[1][0]).toStrictEqual(o("name",E)),expect(e.sendCommand.mock.calls[2][0]).toStrictEqual(o("chainId",C)),expect(e.sendCommand.mock.calls[3][0]).toStrictEqual(o("verifyingContract",p)),expect(e.sendCommand.mock.calls[4][0]).toStrictEqual(b("PermitDetails")),expect(e.sendCommand.mock.calls[5][0]).toStrictEqual(o("token",p)),expect(e.sendCommand.mock.calls[6][0]).toStrictEqual(o("amount",v)),expect(e.sendCommand.mock.calls[7][0]).toStrictEqual(o("expiration",S)),expect(e.sendCommand.mock.calls[8][0]).toStrictEqual(o("nonce",S)),expect(e.sendCommand.mock.calls[9][0]).toStrictEqual(b("PermitSingle")),expect(e.sendCommand.mock.calls[10][0]).toStrictEqual(o("details",w("PermitDetails"))),expect(e.sendCommand.mock.calls[11][0]).toStrictEqual(o("spender",p)),expect(e.sendCommand.mock.calls[12][0]).toStrictEqual(o("sigDeadline",C)),expect(e.sendCommand.mock.calls[13][0]).toStrictEqual(g("EIP712Domain")),expect(e.sendCommand.mock.calls[14][0]).toStrictEqual(s(Uint8Array.from([0,7,80,101,114,109,105,116,50]))),expect(e.sendCommand.mock.calls[15][0]).toStrictEqual(s(Uint8Array.from([0,1,137]))),expect(e.sendCommand.mock.calls[16][0]).toStrictEqual(s(Uint8Array.from([0,20,0,0,0,0,0,34,212,115,3,15,17,109,222,233,246,180,58,199,139,163]))),expect(e.sendCommand.mock.calls[17][0]).toStrictEqual(g("PermitSingle")),expect(e.sendCommand.mock.calls[18][0]).toStrictEqual(s(Uint8Array.from([0,20,124,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,25]))),expect(e.sendCommand.mock.calls[19][0]).toStrictEqual(s(Uint8Array.from([0,1,18]))),expect(e.sendCommand.mock.calls[20][0]).toStrictEqual(s(Uint8Array.from([0,1,18]))),expect(e.sendCommand.mock.calls[21][0]).toStrictEqual(s(Uint8Array.from([0,1,0]))),expect(e.sendCommand.mock.calls[22][0]).toStrictEqual(s(Uint8Array.from([0,20,236,123,232,158,157,16,158,126,63,236,89,194,34,207,41,113,37,254,253,162]))),expect(e.sendCommand.mock.calls[23][0]).toStrictEqual(s(Uint8Array.from([0,1,18])))}),it("Send context with clear signing",async()=>{const d={types:m,domain:r,message:f,clearSignContext:(0,c.Just)(i)};e.sendCommand.mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:{tokenIndex:4}})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:{tokenIndex:5}})),e.sendCommand.mockResolvedValue((0,a.CommandResultFactory)({data:void 0})),await new l.ProvideEIP712ContextTask(e,d).run(),expect(e.sendCommand.mock.calls).toHaveLength(32),expect(e.sendCommand.mock.calls[0][0]).toStrictEqual(b("EIP712Domain")),expect(e.sendCommand.mock.calls[1][0]).toStrictEqual(o("name",E)),expect(e.sendCommand.mock.calls[2][0]).toStrictEqual(o("chainId",C)),expect(e.sendCommand.mock.calls[3][0]).toStrictEqual(o("verifyingContract",p)),expect(e.sendCommand.mock.calls[4][0]).toStrictEqual(b("PermitDetails")),expect(e.sendCommand.mock.calls[5][0]).toStrictEqual(o("token",p)),expect(e.sendCommand.mock.calls[6][0]).toStrictEqual(o("amount",v)),expect(e.sendCommand.mock.calls[7][0]).toStrictEqual(o("expiration",S)),expect(e.sendCommand.mock.calls[8][0]).toStrictEqual(o("nonce",S)),expect(e.sendCommand.mock.calls[9][0]).toStrictEqual(b("PermitSingle")),expect(e.sendCommand.mock.calls[10][0]).toStrictEqual(o("details",w("PermitDetails"))),expect(e.sendCommand.mock.calls[11][0]).toStrictEqual(o("spender",p)),expect(e.sendCommand.mock.calls[12][0]).toStrictEqual(o("sigDeadline",C)),expect(e.sendCommand.mock.calls[13][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Activation})),expect(e.sendCommand.mock.calls[14][0]).toStrictEqual(g("EIP712Domain")),expect(e.sendCommand.mock.calls[15][0]).toStrictEqual(s(Uint8Array.from([0,7,80,101,114,109,105,116,50]))),expect(e.sendCommand.mock.calls[16][0]).toStrictEqual(s(Uint8Array.from([0,1,137]))),expect(e.sendCommand.mock.calls[17][0]).toStrictEqual(s(Uint8Array.from([0,20,0,0,0,0,0,34,212,115,3,15,17,109,222,233,246,180,58,199,139,163]))),expect(e.sendCommand.mock.calls[18][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.MessageInfo,displayName:"Permit2",filtersCount:4,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"})),expect(e.sendCommand.mock.calls[19][0]).toStrictEqual(g("PermitSingle")),expect(e.sendCommand.mock.calls[20][0]).toStrictEqual(new y.ProvideTokenInformationCommand({payload:"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"})),expect(e.sendCommand.mock.calls[21][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Token,discarded:!1,tokenIndex:4,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"})),expect(e.sendCommand.mock.calls[22][0]).toStrictEqual(s(Uint8Array.from([0,20,124,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,25]))),expect(e.sendCommand.mock.calls[23][0]).toStrictEqual(new y.ProvideTokenInformationCommand({payload:"payload-0x000000000022d473030f116ddee9f6b43ac78ba3"})),expect(e.sendCommand.mock.calls[24][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Amount,discarded:!1,displayName:"Amount allowance",tokenIndex:255,signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3"})),expect(e.sendCommand.mock.calls[25][0]).toStrictEqual(s(Uint8Array.from([0,1,18]))),expect(e.sendCommand.mock.calls[26][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Datetime,discarded:!1,displayName:"Approval expire",signature:"3044022056b3381e4540629ad73bc434ec49d80523234b82f62340fbb77157fb0eb21a680220459fe9cf6ca309f9c7dfc6d4711fea1848dba661563c57f77b3c2dc480b3a63b"})),expect(e.sendCommand.mock.calls[27][0]).toStrictEqual(s(Uint8Array.from([0,1,18]))),expect(e.sendCommand.mock.calls[28][0]).toStrictEqual(s(Uint8Array.from([0,1,0]))),expect(e.sendCommand.mock.calls[29][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Raw,discarded:!1,displayName:"Approve to spender",signature:"3044022033e5713d9cb9bc375b56a9fb53b736c81ea3c4ac5cfb2d3ca7f8b8f0558fe2430220543ca4fef6d6f725f29e343f167fe9dd582aa856ecb5797259050eb990a1befb"})),expect(e.sendCommand.mock.calls[30][0]).toStrictEqual(s(Uint8Array.from([0,20,236,123,232,158,157,16,158,126,63,236,89,194,34,207,41,113,37,254,253,162]))),expect(e.sendCommand.mock.calls[31][0]).toStrictEqual(s(Uint8Array.from([0,1,18])))}),it("Both tokens unavailable",async()=>{const d={types:m,domain:r,message:f,clearSignContext:(0,c.Just)({type:"success",messageInfo:i.messageInfo,filters:i.filters,tokens:{}})};e.sendCommand.mockResolvedValue((0,a.CommandResultFactory)({data:void 0})),await new l.ProvideEIP712ContextTask(e,d).run(),expect(e.sendCommand).not.toHaveBeenCalledWith(new y.ProvideTokenInformationCommand({payload:"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"})),expect(e.sendCommand).not.toHaveBeenCalledWith(new y.ProvideTokenInformationCommand({payload:"payload-0x000000000022d473030f116ddee9f6b43ac78ba3"})),expect(e.sendCommand).toHaveBeenCalledWith(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Token,discarded:!1,tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"})),expect(e.sendCommand).toHaveBeenCalledWith(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Amount,discarded:!1,displayName:"Amount allowance",tokenIndex:1,signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3"}))}),it("First token unavailable",async()=>{const d={types:m,domain:r,message:f,clearSignContext:(0,c.Just)({type:"success",messageInfo:i.messageInfo,filters:i.filters,tokens:{255:"payload-0x000000000022d473030f116ddee9f6b43ac78ba3"}})};e.sendCommand.mockResolvedValue((0,a.CommandResultFactory)({data:{tokenIndex:4}})),await new l.ProvideEIP712ContextTask(e,d).run(),expect(e.sendCommand).toHaveBeenCalledWith(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Token,discarded:!1,tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"})),expect(e.sendCommand).toHaveBeenCalledWith(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Amount,discarded:!1,displayName:"Amount allowance",tokenIndex:255,signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3"}))}),it("Second token unavailable",async()=>{const d={types:m,domain:r,message:f,clearSignContext:(0,c.Just)({type:"success",messageInfo:i.messageInfo,filters:i.filters,tokens:{0:"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"}})};e.sendCommand.mockResolvedValue((0,a.CommandResultFactory)({data:{tokenIndex:4}})),await new l.ProvideEIP712ContextTask(e,d).run(),expect(e.sendCommand).toHaveBeenCalledWith(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Token,discarded:!1,tokenIndex:4,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"})),expect(e.sendCommand).toHaveBeenCalledWith(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Amount,discarded:!1,displayName:"Amount allowance",tokenIndex:0,signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3"}))}),it("Error when providing tokens",async()=>{const d={types:m,domain:r,message:f,clearSignContext:(0,c.Just)(i)};e.sendCommand.mockResolvedValueOnce((0,a.CommandResultFactory)({error:new a.UnknownDeviceExchangeError("error")}));const u=new l.ProvideEIP712ContextTask(e,d).run();await expect(u).resolves.toStrictEqual((0,a.CommandResultFactory)({error:new a.UnknownDeviceExchangeError("error")}))}),it("Error when sending struct definitions",async()=>{const d={types:m,domain:r,message:f,clearSignContext:(0,c.Just)(i)};e.sendCommand.mockResolvedValueOnce((0,a.CommandResultFactory)({data:{tokenIndex:4}})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:{tokenIndex:5}})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({error:new a.UnknownDeviceExchangeError("error")}));const u=new l.ProvideEIP712ContextTask(e,d).run();await expect(u).resolves.toStrictEqual((0,a.CommandResultFactory)({error:new a.UnknownDeviceExchangeError("error")}))}),it("Error when sending struct implementations",async()=>{const d={types:m,domain:r,message:f,clearSignContext:c.Nothing};e.sendCommand.mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({error:new a.UnknownDeviceExchangeError("error")})).mockResolvedValue((0,a.CommandResultFactory)({data:void 0}));const u=new l.ProvideEIP712ContextTask(e,d).run();await expect(u).resolves.toStrictEqual((0,a.CommandResultFactory)({error:new a.UnknownDeviceExchangeError("error")}))}),it("Send struct array",async()=>{const d={types:{},domain:[],message:[{path:"spenders",type:"address[]",value:new n.TypedDataValueArray(1)},{path:"spenders.[]",type:"address",value:new n.TypedDataValueField((0,a.hexaStringToBuffer)("0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"))},{path:"beneficiaries",type:"address[]",value:new n.TypedDataValueArray(0)}],clearSignContext:(0,c.Just)({type:"success",messageInfo:{displayName:"Permit2",filtersCount:2,signature:"sig"},tokens:{},filters:{"spenders.[]":{displayName:"Spender",path:"spenders.[]",signature:"sig",type:"raw"},"beneficiaries.[]":{displayName:"Beneficiary",path:"beneficiaries.[]",signature:"sig",type:"raw"}}})};e.sendCommand.mockResolvedValue((0,a.CommandResultFactory)({data:void 0})),await new l.ProvideEIP712ContextTask(e,d).run(),expect(e.sendCommand.mock.calls[0][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Activation})),expect(e.sendCommand.mock.calls[1][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.MessageInfo,displayName:"Permit2",filtersCount:2,signature:"sig"})),expect(e.sendCommand.mock.calls[2][0]).toStrictEqual(q(1)),expect(e.sendCommand.mock.calls[3][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Raw,discarded:!1,displayName:"Spender",signature:"sig"})),expect(e.sendCommand.mock.calls[4][0]).toStrictEqual(s(Uint8Array.from([0,20,124,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,25]))),expect(e.sendCommand.mock.calls[5][0]).toStrictEqual(q(0)),expect(e.sendCommand.mock.calls[6][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.DiscardedPath,path:"beneficiaries.[]"})),expect(e.sendCommand.mock.calls[7][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Raw,discarded:!0,displayName:"Beneficiary",signature:"sig"}))})});
1
+ "use strict";var a=require("@ledgerhq/device-management-kit"),c=require("purify-ts"),y=require("../../app-binder/command/ProvideTokenInformationCommand"),t=require("../../app-binder/command/SendEIP712FilteringCommand"),k=require("../../app-binder/command/SendEIP712StructDefinitionCommand"),f=require("../../app-binder/command/SendEIP712StructImplemCommand"),h=require("../../app-binder/device-action/__test-utils__/makeInternalApi"),n=require("../../typed-data/model/Types"),m=require("./ProvideEIP712ContextTask");describe("ProvideEIP712ContextTask",()=>{const e=(0,h.makeDeviceActionInternalApiMock)(),i={EIP712Domain:{name:new n.PrimitiveType("string","string",c.Nothing),chainId:new n.PrimitiveType("uint256","uint",(0,c.Just)(32)),verifyingContract:new n.PrimitiveType("address","address",c.Nothing)},PermitSingle:{details:new n.StructType("PermitDetails"),spender:new n.PrimitiveType("address","address",c.Nothing),sigDeadline:new n.PrimitiveType("uint256","uint",(0,c.Just)(32))},PermitDetails:{token:new n.PrimitiveType("address","address",c.Nothing),amount:new n.PrimitiveType("uint160","uint",(0,c.Just)(20)),expiration:new n.PrimitiveType("uint48","uint",(0,c.Just)(6)),nonce:new n.PrimitiveType("uint48","uint",(0,c.Just)(6))}},r=[{path:"",type:"",value:new n.TypedDataValueRoot("EIP712Domain")},{path:"name",type:"string",value:new n.TypedDataValueField(new TextEncoder().encode("Permit2"))},{path:"chainId",type:"uint256",value:new n.TypedDataValueField(Uint8Array.from([137]))},{path:"verifyingContract",type:"address",value:new n.TypedDataValueField((0,a.hexaStringToBuffer)("0x000000000022d473030f116ddee9f6b43ac78ba3"))}],x=[{path:"",type:"",value:new n.TypedDataValueRoot("PermitSingle")},{path:"details.token",type:"address",value:new n.TypedDataValueField((0,a.hexaStringToBuffer)("0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"))},{path:"details.amount",type:"uint160",value:new n.TypedDataValueField(Uint8Array.from([18]))},{path:"details.expiration",type:"uint48",value:new n.TypedDataValueField(Uint8Array.from([18]))},{path:"details.nonce",type:"uint48",value:new n.TypedDataValueField(Uint8Array.from([0]))},{path:"spender",type:"address",value:new n.TypedDataValueField((0,a.hexaStringToBuffer)("0xec7be89e9d109e7e3fec59c222cf297125fefda2"))},{path:"sigDeadline",type:"uint256",value:new n.TypedDataValueField(Uint8Array.from([18]))}],l={type:"success",messageInfo:{displayName:"Permit2",filtersCount:4,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},tokens:{0:"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",255:"payload-0x000000000022d473030f116ddee9f6b43ac78ba3"},filters:{"details.amount":{displayName:"Amount allowance",path:"details.amount",signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3",tokenIndex:255,type:"amount"},"details.expiration":{displayName:"Approval expire",path:"details.expiration",signature:"3044022056b3381e4540629ad73bc434ec49d80523234b82f62340fbb77157fb0eb21a680220459fe9cf6ca309f9c7dfc6d4711fea1848dba661563c57f77b3c2dc480b3a63b",type:"datetime"},"details.token":{displayName:"Amount allowance",path:"details.token",signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733",tokenIndex:0,type:"token"},spender:{displayName:"Approve to spender",path:"spender",signature:"3044022033e5713d9cb9bc375b56a9fb53b736c81ea3c4ac5cfb2d3ca7f8b8f0558fe2430220543ca4fef6d6f725f29e343f167fe9dd582aa856ecb5797259050eb990a1befb",type:"raw"}}},p=new n.PrimitiveType("address","address",c.Nothing),v=new n.PrimitiveType("string","string",c.Nothing),C=new n.PrimitiveType("uint256","uint",(0,c.Just)(32)),E=new n.PrimitiveType("uint160","uint",(0,c.Just)(20)),g=new n.PrimitiveType("uint48","uint",(0,c.Just)(6)),w=d=>new n.StructType(d),b=d=>new k.SendEIP712StructDefinitionCommand({command:k.StructDefinitionCommand.Name,name:d}),o=(d,u)=>new k.SendEIP712StructDefinitionCommand({command:k.StructDefinitionCommand.Field,name:d,type:u}),S=d=>new f.SendEIP712StructImplemCommand({type:f.StructImplemType.ROOT,value:d}),q=d=>new f.SendEIP712StructImplemCommand({type:f.StructImplemType.ARRAY,value:d}),s=d=>new f.SendEIP712StructImplemCommand({type:f.StructImplemType.FIELD,value:{data:d,isLastChunk:!0}});beforeEach(()=>{vi.resetAllMocks()}),it("Send context with no clear signing context",async()=>{const d={types:i,domain:r,message:x,clearSignContext:c.Nothing,domainHash:"0x",messageHash:"0x"};e.sendCommand.mockResolvedValue((0,a.CommandResultFactory)({data:void 0})),await new m.ProvideEIP712ContextTask(e,d).run(),expect(e.sendCommand.mock.calls).toHaveLength(24),expect(e.sendCommand.mock.calls[0][0]).toStrictEqual(b("EIP712Domain")),expect(e.sendCommand.mock.calls[1][0]).toStrictEqual(o("name",v)),expect(e.sendCommand.mock.calls[2][0]).toStrictEqual(o("chainId",C)),expect(e.sendCommand.mock.calls[3][0]).toStrictEqual(o("verifyingContract",p)),expect(e.sendCommand.mock.calls[4][0]).toStrictEqual(b("PermitDetails")),expect(e.sendCommand.mock.calls[5][0]).toStrictEqual(o("token",p)),expect(e.sendCommand.mock.calls[6][0]).toStrictEqual(o("amount",E)),expect(e.sendCommand.mock.calls[7][0]).toStrictEqual(o("expiration",g)),expect(e.sendCommand.mock.calls[8][0]).toStrictEqual(o("nonce",g)),expect(e.sendCommand.mock.calls[9][0]).toStrictEqual(b("PermitSingle")),expect(e.sendCommand.mock.calls[10][0]).toStrictEqual(o("details",w("PermitDetails"))),expect(e.sendCommand.mock.calls[11][0]).toStrictEqual(o("spender",p)),expect(e.sendCommand.mock.calls[12][0]).toStrictEqual(o("sigDeadline",C)),expect(e.sendCommand.mock.calls[13][0]).toStrictEqual(S("EIP712Domain")),expect(e.sendCommand.mock.calls[14][0]).toStrictEqual(s(Uint8Array.from([0,7,80,101,114,109,105,116,50]))),expect(e.sendCommand.mock.calls[15][0]).toStrictEqual(s(Uint8Array.from([0,1,137]))),expect(e.sendCommand.mock.calls[16][0]).toStrictEqual(s(Uint8Array.from([0,20,0,0,0,0,0,34,212,115,3,15,17,109,222,233,246,180,58,199,139,163]))),expect(e.sendCommand.mock.calls[17][0]).toStrictEqual(S("PermitSingle")),expect(e.sendCommand.mock.calls[18][0]).toStrictEqual(s(Uint8Array.from([0,20,124,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,25]))),expect(e.sendCommand.mock.calls[19][0]).toStrictEqual(s(Uint8Array.from([0,1,18]))),expect(e.sendCommand.mock.calls[20][0]).toStrictEqual(s(Uint8Array.from([0,1,18]))),expect(e.sendCommand.mock.calls[21][0]).toStrictEqual(s(Uint8Array.from([0,1,0]))),expect(e.sendCommand.mock.calls[22][0]).toStrictEqual(s(Uint8Array.from([0,20,236,123,232,158,157,16,158,126,63,236,89,194,34,207,41,113,37,254,253,162]))),expect(e.sendCommand.mock.calls[23][0]).toStrictEqual(s(Uint8Array.from([0,1,18])))}),it("Send context with clear signing",async()=>{const d={types:i,domain:r,message:x,clearSignContext:(0,c.Just)(l),domainHash:"0x",messageHash:"0x"};e.sendCommand.mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:{tokenIndex:4}})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:{tokenIndex:5}})),e.sendCommand.mockResolvedValue((0,a.CommandResultFactory)({data:void 0})),await new m.ProvideEIP712ContextTask(e,d).run(),expect(e.sendCommand.mock.calls).toHaveLength(32),expect(e.sendCommand.mock.calls[0][0]).toStrictEqual(b("EIP712Domain")),expect(e.sendCommand.mock.calls[1][0]).toStrictEqual(o("name",v)),expect(e.sendCommand.mock.calls[2][0]).toStrictEqual(o("chainId",C)),expect(e.sendCommand.mock.calls[3][0]).toStrictEqual(o("verifyingContract",p)),expect(e.sendCommand.mock.calls[4][0]).toStrictEqual(b("PermitDetails")),expect(e.sendCommand.mock.calls[5][0]).toStrictEqual(o("token",p)),expect(e.sendCommand.mock.calls[6][0]).toStrictEqual(o("amount",E)),expect(e.sendCommand.mock.calls[7][0]).toStrictEqual(o("expiration",g)),expect(e.sendCommand.mock.calls[8][0]).toStrictEqual(o("nonce",g)),expect(e.sendCommand.mock.calls[9][0]).toStrictEqual(b("PermitSingle")),expect(e.sendCommand.mock.calls[10][0]).toStrictEqual(o("details",w("PermitDetails"))),expect(e.sendCommand.mock.calls[11][0]).toStrictEqual(o("spender",p)),expect(e.sendCommand.mock.calls[12][0]).toStrictEqual(o("sigDeadline",C)),expect(e.sendCommand.mock.calls[13][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Activation})),expect(e.sendCommand.mock.calls[14][0]).toStrictEqual(S("EIP712Domain")),expect(e.sendCommand.mock.calls[15][0]).toStrictEqual(s(Uint8Array.from([0,7,80,101,114,109,105,116,50]))),expect(e.sendCommand.mock.calls[16][0]).toStrictEqual(s(Uint8Array.from([0,1,137]))),expect(e.sendCommand.mock.calls[17][0]).toStrictEqual(s(Uint8Array.from([0,20,0,0,0,0,0,34,212,115,3,15,17,109,222,233,246,180,58,199,139,163]))),expect(e.sendCommand.mock.calls[18][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.MessageInfo,displayName:"Permit2",filtersCount:4,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"})),expect(e.sendCommand.mock.calls[19][0]).toStrictEqual(S("PermitSingle")),expect(e.sendCommand.mock.calls[20][0]).toStrictEqual(new y.ProvideTokenInformationCommand({payload:"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"})),expect(e.sendCommand.mock.calls[21][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Token,discarded:!1,tokenIndex:4,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"})),expect(e.sendCommand.mock.calls[22][0]).toStrictEqual(s(Uint8Array.from([0,20,124,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,25]))),expect(e.sendCommand.mock.calls[23][0]).toStrictEqual(new y.ProvideTokenInformationCommand({payload:"payload-0x000000000022d473030f116ddee9f6b43ac78ba3"})),expect(e.sendCommand.mock.calls[24][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Amount,discarded:!1,displayName:"Amount allowance",tokenIndex:255,signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3"})),expect(e.sendCommand.mock.calls[25][0]).toStrictEqual(s(Uint8Array.from([0,1,18]))),expect(e.sendCommand.mock.calls[26][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Datetime,discarded:!1,displayName:"Approval expire",signature:"3044022056b3381e4540629ad73bc434ec49d80523234b82f62340fbb77157fb0eb21a680220459fe9cf6ca309f9c7dfc6d4711fea1848dba661563c57f77b3c2dc480b3a63b"})),expect(e.sendCommand.mock.calls[27][0]).toStrictEqual(s(Uint8Array.from([0,1,18]))),expect(e.sendCommand.mock.calls[28][0]).toStrictEqual(s(Uint8Array.from([0,1,0]))),expect(e.sendCommand.mock.calls[29][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Raw,discarded:!1,displayName:"Approve to spender",signature:"3044022033e5713d9cb9bc375b56a9fb53b736c81ea3c4ac5cfb2d3ca7f8b8f0558fe2430220543ca4fef6d6f725f29e343f167fe9dd582aa856ecb5797259050eb990a1befb"})),expect(e.sendCommand.mock.calls[30][0]).toStrictEqual(s(Uint8Array.from([0,20,236,123,232,158,157,16,158,126,63,236,89,194,34,207,41,113,37,254,253,162]))),expect(e.sendCommand.mock.calls[31][0]).toStrictEqual(s(Uint8Array.from([0,1,18])))}),it("Both tokens unavailable",async()=>{const d={types:i,domain:r,message:x,clearSignContext:(0,c.Just)({type:"success",messageInfo:l.messageInfo,filters:l.filters,tokens:{}}),domainHash:"0x",messageHash:"0x"};e.sendCommand.mockResolvedValue((0,a.CommandResultFactory)({data:void 0})),await new m.ProvideEIP712ContextTask(e,d).run(),expect(e.sendCommand).not.toHaveBeenCalledWith(new y.ProvideTokenInformationCommand({payload:"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"})),expect(e.sendCommand).not.toHaveBeenCalledWith(new y.ProvideTokenInformationCommand({payload:"payload-0x000000000022d473030f116ddee9f6b43ac78ba3"})),expect(e.sendCommand).toHaveBeenCalledWith(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Token,discarded:!1,tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"})),expect(e.sendCommand).toHaveBeenCalledWith(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Amount,discarded:!1,displayName:"Amount allowance",tokenIndex:1,signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3"}))}),it("First token unavailable",async()=>{const d={types:i,domain:r,message:x,clearSignContext:(0,c.Just)({type:"success",messageInfo:l.messageInfo,filters:l.filters,tokens:{255:"payload-0x000000000022d473030f116ddee9f6b43ac78ba3"}}),domainHash:"0x",messageHash:"0x"};e.sendCommand.mockResolvedValue((0,a.CommandResultFactory)({data:{tokenIndex:4}})),await new m.ProvideEIP712ContextTask(e,d).run(),expect(e.sendCommand).toHaveBeenCalledWith(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Token,discarded:!1,tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"})),expect(e.sendCommand).toHaveBeenCalledWith(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Amount,discarded:!1,displayName:"Amount allowance",tokenIndex:255,signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3"}))}),it("Second token unavailable",async()=>{const d={types:i,domain:r,message:x,clearSignContext:(0,c.Just)({type:"success",messageInfo:l.messageInfo,filters:l.filters,tokens:{0:"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"}}),domainHash:"0x",messageHash:"0x"};e.sendCommand.mockResolvedValue((0,a.CommandResultFactory)({data:{tokenIndex:4}})),await new m.ProvideEIP712ContextTask(e,d).run(),expect(e.sendCommand).toHaveBeenCalledWith(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Token,discarded:!1,tokenIndex:4,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"})),expect(e.sendCommand).toHaveBeenCalledWith(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Amount,discarded:!1,displayName:"Amount allowance",tokenIndex:0,signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3"}))}),it("Error when providing tokens",async()=>{const d={types:i,domain:r,message:x,clearSignContext:(0,c.Just)(l),domainHash:"0x",messageHash:"0x"};e.sendCommand.mockResolvedValueOnce((0,a.CommandResultFactory)({error:new a.UnknownDeviceExchangeError("error")}));const u=new m.ProvideEIP712ContextTask(e,d).run();await expect(u).resolves.toStrictEqual((0,a.CommandResultFactory)({error:new a.UnknownDeviceExchangeError("error")}))}),it("Error when sending struct definitions",async()=>{const d={types:i,domain:r,message:x,clearSignContext:(0,c.Just)(l),domainHash:"0x",messageHash:"0x"};e.sendCommand.mockResolvedValueOnce((0,a.CommandResultFactory)({data:{tokenIndex:4}})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:{tokenIndex:5}})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({error:new a.UnknownDeviceExchangeError("error")}));const u=new m.ProvideEIP712ContextTask(e,d).run();await expect(u).resolves.toStrictEqual((0,a.CommandResultFactory)({error:new a.UnknownDeviceExchangeError("error")}))}),it("Error when sending struct implementations",async()=>{const d={types:i,domain:r,message:x,clearSignContext:c.Nothing,domainHash:"0x",messageHash:"0x"};e.sendCommand.mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({data:void 0})).mockResolvedValueOnce((0,a.CommandResultFactory)({error:new a.UnknownDeviceExchangeError("error")})).mockResolvedValue((0,a.CommandResultFactory)({data:void 0}));const u=new m.ProvideEIP712ContextTask(e,d).run();await expect(u).resolves.toStrictEqual((0,a.CommandResultFactory)({error:new a.UnknownDeviceExchangeError("error")}))}),it("Send struct array",async()=>{const d={domainHash:"0x",messageHash:"0x",types:{},domain:[],message:[{path:"spenders",type:"address[]",value:new n.TypedDataValueArray(1)},{path:"spenders.[]",type:"address",value:new n.TypedDataValueField((0,a.hexaStringToBuffer)("0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"))},{path:"beneficiaries",type:"address[]",value:new n.TypedDataValueArray(0)}],clearSignContext:(0,c.Just)({type:"success",messageInfo:{displayName:"Permit2",filtersCount:2,signature:"sig"},tokens:{},filters:{"spenders.[]":{displayName:"Spender",path:"spenders.[]",signature:"sig",type:"raw"},"beneficiaries.[]":{displayName:"Beneficiary",path:"beneficiaries.[]",signature:"sig",type:"raw"}}})};e.sendCommand.mockResolvedValue((0,a.CommandResultFactory)({data:void 0})),await new m.ProvideEIP712ContextTask(e,d).run(),expect(e.sendCommand.mock.calls[0][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Activation})),expect(e.sendCommand.mock.calls[1][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.MessageInfo,displayName:"Permit2",filtersCount:2,signature:"sig"})),expect(e.sendCommand.mock.calls[2][0]).toStrictEqual(q(1)),expect(e.sendCommand.mock.calls[3][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Raw,discarded:!1,displayName:"Spender",signature:"sig"})),expect(e.sendCommand.mock.calls[4][0]).toStrictEqual(s(Uint8Array.from([0,20,124,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,25]))),expect(e.sendCommand.mock.calls[5][0]).toStrictEqual(q(0)),expect(e.sendCommand.mock.calls[6][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.DiscardedPath,path:"beneficiaries.[]"})),expect(e.sendCommand.mock.calls[7][0]).toStrictEqual(new t.SendEIP712FilteringCommand({type:t.Eip712FilterType.Raw,discarded:!0,displayName:"Beneficiary",signature:"sig"}))})});
2
2
  //# sourceMappingURL=ProvideEIP712ContextTask.test.js.map