@ledgerhq/device-signer-kit-ethereum 1.1.0 → 1.3.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 (543) 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/GetConfigCommandTypes.js +2 -0
  9. package/lib/cjs/api/app-binder/GetConfigCommandTypes.js.map +7 -0
  10. package/lib/cjs/api/app-binder/SignPersonalMessageDeviceActionTypes.js +1 -1
  11. package/lib/cjs/api/app-binder/SignPersonalMessageDeviceActionTypes.js.map +1 -1
  12. package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js +1 -1
  13. package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js.map +1 -1
  14. package/lib/cjs/api/app-binder/SignTypedDataDeviceActionTypes.js +1 -1
  15. package/lib/cjs/api/app-binder/SignTypedDataDeviceActionTypes.js.map +1 -1
  16. package/lib/cjs/api/index.js +1 -1
  17. package/lib/cjs/api/index.js.map +2 -2
  18. package/lib/cjs/api/model/TransactionType.js +2 -0
  19. package/lib/cjs/api/model/TransactionType.js.map +7 -0
  20. package/lib/cjs/index.js.map +1 -1
  21. package/lib/cjs/internal/DefaultSignerEth.js +1 -1
  22. package/lib/cjs/internal/DefaultSignerEth.js.map +2 -2
  23. package/lib/cjs/internal/DefaultSignerEth.test.js +1 -1
  24. package/lib/cjs/internal/DefaultSignerEth.test.js.map +2 -2
  25. package/lib/cjs/internal/address/use-case/GetAddressUseCase.test.js +1 -1
  26. package/lib/cjs/internal/address/use-case/GetAddressUseCase.test.js.map +2 -2
  27. package/lib/cjs/internal/app-binder/EthAppBinder.js +1 -1
  28. package/lib/cjs/internal/app-binder/EthAppBinder.js.map +3 -3
  29. package/lib/cjs/internal/app-binder/EthAppBinder.test.js +1 -1
  30. package/lib/cjs/internal/app-binder/EthAppBinder.test.js.map +3 -3
  31. package/lib/cjs/internal/app-binder/command/GetAddressCommand.js +1 -1
  32. package/lib/cjs/internal/app-binder/command/GetAddressCommand.js.map +3 -3
  33. package/lib/cjs/internal/app-binder/command/GetAddressCommand.test.js +1 -1
  34. package/lib/cjs/internal/app-binder/command/GetAddressCommand.test.js.map +2 -2
  35. package/lib/cjs/internal/app-binder/command/GetAppConfigurationCommand.js +2 -0
  36. package/lib/cjs/internal/app-binder/command/GetAppConfigurationCommand.js.map +7 -0
  37. package/lib/cjs/internal/app-binder/command/GetAppConfigurationCommand.test.js +2 -0
  38. package/lib/cjs/internal/app-binder/command/GetAppConfigurationCommand.test.js.map +7 -0
  39. package/lib/cjs/internal/app-binder/command/GetChallengeCommand.js +1 -1
  40. package/lib/cjs/internal/app-binder/command/GetChallengeCommand.js.map +3 -3
  41. package/lib/cjs/internal/app-binder/command/GetChallengeCommand.test.js +1 -1
  42. package/lib/cjs/internal/app-binder/command/GetChallengeCommand.test.js.map +2 -2
  43. package/lib/cjs/internal/app-binder/command/ProvideEnumCommand.js +1 -1
  44. package/lib/cjs/internal/app-binder/command/ProvideEnumCommand.js.map +3 -3
  45. package/lib/cjs/internal/app-binder/command/ProvideEnumCommand.test.js +1 -1
  46. package/lib/cjs/internal/app-binder/command/ProvideEnumCommand.test.js.map +3 -3
  47. package/lib/cjs/internal/app-binder/command/ProvideNFTInformationCommand.js +1 -1
  48. package/lib/cjs/internal/app-binder/command/ProvideNFTInformationCommand.js.map +3 -3
  49. package/lib/cjs/internal/app-binder/command/ProvideTokenInformationCommand.js +1 -1
  50. package/lib/cjs/internal/app-binder/command/ProvideTokenInformationCommand.js.map +3 -3
  51. package/lib/cjs/internal/app-binder/command/ProvideTransactionFieldDescriptionCommand.js +1 -1
  52. package/lib/cjs/internal/app-binder/command/ProvideTransactionFieldDescriptionCommand.js.map +3 -3
  53. package/lib/cjs/internal/app-binder/command/ProvideTransactionFieldDescriptionCommand.test.js +1 -1
  54. package/lib/cjs/internal/app-binder/command/ProvideTransactionFieldDescriptionCommand.test.js.map +3 -3
  55. package/lib/cjs/internal/app-binder/command/ProvideTransactionInformationCommand.js +1 -1
  56. package/lib/cjs/internal/app-binder/command/ProvideTransactionInformationCommand.js.map +3 -3
  57. package/lib/cjs/internal/app-binder/command/ProvideTransactionInformationCommand.test.js +1 -1
  58. package/lib/cjs/internal/app-binder/command/ProvideTransactionInformationCommand.test.js.map +3 -3
  59. package/lib/cjs/internal/app-binder/command/ProvideTrustedNameCommand.js +1 -1
  60. package/lib/cjs/internal/app-binder/command/ProvideTrustedNameCommand.js.map +3 -3
  61. package/lib/cjs/internal/app-binder/command/ProvideWeb3CheckCommand.js +2 -0
  62. package/lib/cjs/internal/app-binder/command/ProvideWeb3CheckCommand.js.map +7 -0
  63. package/lib/cjs/internal/app-binder/command/ProvideWeb3CheckCommand.test.js +2 -0
  64. package/lib/cjs/internal/app-binder/command/ProvideWeb3CheckCommand.test.js.map +7 -0
  65. package/lib/cjs/internal/app-binder/command/SendEIP712FilteringCommand.js +1 -1
  66. package/lib/cjs/internal/app-binder/command/SendEIP712FilteringCommand.js.map +3 -3
  67. package/lib/cjs/internal/app-binder/command/SendEIP712StructDefinitionCommand.js +1 -1
  68. package/lib/cjs/internal/app-binder/command/SendEIP712StructDefinitionCommand.js.map +3 -3
  69. package/lib/cjs/internal/app-binder/command/SendEIP712StructDefinitionCommand.test.js +1 -1
  70. package/lib/cjs/internal/app-binder/command/SendEIP712StructDefinitionCommand.test.js.map +2 -2
  71. package/lib/cjs/internal/app-binder/command/SendEIP712StructImplemCommand.js +1 -1
  72. package/lib/cjs/internal/app-binder/command/SendEIP712StructImplemCommand.js.map +3 -3
  73. package/lib/cjs/internal/app-binder/command/SetExternalPluginCommand.js +1 -1
  74. package/lib/cjs/internal/app-binder/command/SetExternalPluginCommand.js.map +3 -3
  75. package/lib/cjs/internal/app-binder/command/SetExternalPluginCommand.test.js +2 -2
  76. package/lib/cjs/internal/app-binder/command/SetExternalPluginCommand.test.js.map +3 -3
  77. package/lib/cjs/internal/app-binder/command/SetPluginCommand.js +1 -1
  78. package/lib/cjs/internal/app-binder/command/SetPluginCommand.js.map +3 -3
  79. package/lib/cjs/internal/app-binder/command/SetPluginCommand.test.js +2 -2
  80. package/lib/cjs/internal/app-binder/command/SetPluginCommand.test.js.map +3 -3
  81. package/lib/cjs/internal/app-binder/command/SignEIP712Command.js +1 -1
  82. package/lib/cjs/internal/app-binder/command/SignEIP712Command.js.map +3 -3
  83. package/lib/cjs/internal/app-binder/command/SignEIP712Command.test.js +1 -1
  84. package/lib/cjs/internal/app-binder/command/SignEIP712Command.test.js.map +2 -2
  85. package/lib/cjs/internal/app-binder/command/SignPersonalMessageCommand.js +1 -1
  86. package/lib/cjs/internal/app-binder/command/SignPersonalMessageCommand.js.map +3 -3
  87. package/lib/cjs/internal/app-binder/command/SignTransactionCommand.js +1 -1
  88. package/lib/cjs/internal/app-binder/command/SignTransactionCommand.js.map +3 -3
  89. package/lib/cjs/internal/app-binder/command/SignTransactionCommand.test.js +1 -1
  90. package/lib/cjs/internal/app-binder/command/SignTransactionCommand.test.js.map +2 -2
  91. package/lib/cjs/internal/app-binder/command/StartTransactionCommand.js +1 -1
  92. package/lib/cjs/internal/app-binder/command/StartTransactionCommand.js.map +3 -3
  93. package/lib/cjs/internal/app-binder/command/StartTransactionCommand.test.js +1 -1
  94. package/lib/cjs/internal/app-binder/command/StartTransactionCommand.test.js.map +3 -3
  95. package/lib/cjs/internal/app-binder/command/StoreTransactionCommand.js +1 -1
  96. package/lib/cjs/internal/app-binder/command/StoreTransactionCommand.js.map +3 -3
  97. package/lib/cjs/internal/app-binder/command/StoreTransactionCommand.test.js +1 -1
  98. package/lib/cjs/internal/app-binder/command/StoreTransactionCommand.test.js.map +3 -3
  99. package/lib/cjs/internal/app-binder/command/Web3CheckOptInCommand.js +2 -0
  100. package/lib/cjs/internal/app-binder/command/Web3CheckOptInCommand.js.map +7 -0
  101. package/lib/cjs/internal/app-binder/command/Web3CheckOptInCommand.test.js +2 -0
  102. package/lib/cjs/internal/app-binder/command/Web3CheckOptInCommand.test.js.map +7 -0
  103. package/lib/cjs/internal/app-binder/command/utils/ethAppErrors.js +2 -0
  104. package/lib/cjs/internal/app-binder/command/utils/ethAppErrors.js.map +7 -0
  105. package/lib/cjs/internal/app-binder/command/utils/ethAppErrors.test.js +2 -0
  106. package/lib/cjs/internal/app-binder/command/utils/ethAppErrors.test.js.map +7 -0
  107. package/lib/cjs/internal/app-binder/constant/plugins.js +2 -0
  108. package/lib/cjs/internal/app-binder/constant/plugins.js.map +7 -0
  109. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js +1 -1
  110. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js.map +3 -3
  111. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js +1 -1
  112. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js.map +3 -3
  113. package/lib/cjs/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.js +1 -1
  114. package/lib/cjs/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.js.map +3 -3
  115. package/lib/cjs/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.test.js +1 -1
  116. package/lib/cjs/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.test.js.map +3 -3
  117. package/lib/cjs/internal/app-binder/device-action/__test-utils__/makeInternalApi.js +1 -1
  118. package/lib/cjs/internal/app-binder/device-action/__test-utils__/makeInternalApi.js.map +3 -3
  119. package/lib/cjs/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.js +1 -1
  120. package/lib/cjs/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.js.map +2 -2
  121. package/lib/cjs/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.js +1 -1
  122. package/lib/cjs/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.js.map +3 -3
  123. package/lib/cjs/internal/app-binder/task/BuildEIP712ContextTask.js +1 -1
  124. package/lib/cjs/internal/app-binder/task/BuildEIP712ContextTask.js.map +3 -3
  125. package/lib/cjs/internal/app-binder/task/BuildEIP712ContextTask.test.js +1 -1
  126. package/lib/cjs/internal/app-binder/task/BuildEIP712ContextTask.test.js.map +3 -3
  127. package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.js +1 -1
  128. package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.js.map +3 -3
  129. package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.test.js +1 -1
  130. package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.test.js.map +3 -3
  131. package/lib/cjs/internal/app-binder/task/GetWeb3CheckTask.js +2 -0
  132. package/lib/cjs/internal/app-binder/task/GetWeb3CheckTask.js.map +7 -0
  133. package/lib/cjs/internal/app-binder/task/GetWeb3CheckTask.test.js +2 -0
  134. package/lib/cjs/internal/app-binder/task/GetWeb3CheckTask.test.js.map +7 -0
  135. package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.js +1 -1
  136. package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.js.map +3 -3
  137. package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.test.js +1 -1
  138. package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.test.js.map +3 -3
  139. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.js +1 -1
  140. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.js.map +3 -3
  141. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.test.js +1 -1
  142. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.test.js.map +2 -2
  143. package/lib/cjs/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.js +1 -1
  144. package/lib/cjs/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.js.map +3 -3
  145. package/lib/cjs/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.test.js +1 -1
  146. package/lib/cjs/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.test.js.map +3 -3
  147. package/lib/cjs/internal/app-binder/task/ProvideTransactionGenericContextTask.js +1 -1
  148. package/lib/cjs/internal/app-binder/task/ProvideTransactionGenericContextTask.js.map +3 -3
  149. package/lib/cjs/internal/app-binder/task/ProvideTransactionGenericContextTask.test.js +1 -1
  150. package/lib/cjs/internal/app-binder/task/ProvideTransactionGenericContextTask.test.js.map +3 -3
  151. package/lib/cjs/internal/app-binder/task/SendCommandInChunksTask.js +1 -1
  152. package/lib/cjs/internal/app-binder/task/SendCommandInChunksTask.js.map +2 -2
  153. package/lib/cjs/internal/app-binder/task/SendEIP712StructImplemTask.js +1 -1
  154. package/lib/cjs/internal/app-binder/task/SendEIP712StructImplemTask.js.map +2 -2
  155. package/lib/cjs/internal/app-binder/task/SendEIP712StructImplemTask.test.js +1 -1
  156. package/lib/cjs/internal/app-binder/task/SendEIP712StructImplemTask.test.js.map +2 -2
  157. package/lib/cjs/internal/app-binder/task/SendPayloadInChunksTask.js +1 -1
  158. package/lib/cjs/internal/app-binder/task/SendPayloadInChunksTask.js.map +2 -2
  159. package/lib/cjs/internal/app-binder/task/SendPayloadInChunksTask.test.js +1 -1
  160. package/lib/cjs/internal/app-binder/task/SendPayloadInChunksTask.test.js.map +2 -2
  161. package/lib/cjs/internal/app-binder/task/SendSignPersonalMessageTask.js +1 -1
  162. package/lib/cjs/internal/app-binder/task/SendSignPersonalMessageTask.js.map +2 -2
  163. package/lib/cjs/internal/app-binder/task/SendSignPersonalMessageTask.test.js +1 -1
  164. package/lib/cjs/internal/app-binder/task/SendSignPersonalMessageTask.test.js.map +2 -2
  165. package/lib/cjs/internal/app-binder/task/SendSignTransactionTask.js +1 -1
  166. package/lib/cjs/internal/app-binder/task/SendSignTransactionTask.js.map +3 -3
  167. package/lib/cjs/internal/app-binder/task/SendSignTransactionTask.test.js +1 -1
  168. package/lib/cjs/internal/app-binder/task/SendSignTransactionTask.test.js.map +3 -3
  169. package/lib/cjs/internal/message/use-case/SignMessageUseCase.test.js +1 -1
  170. package/lib/cjs/internal/message/use-case/SignMessageUseCase.test.js.map +2 -2
  171. package/lib/cjs/internal/transaction/di/transactionModule.js +1 -1
  172. package/lib/cjs/internal/transaction/di/transactionModule.js.map +3 -3
  173. package/lib/cjs/internal/transaction/di/transactionModule.test.js +1 -1
  174. package/lib/cjs/internal/transaction/di/transactionModule.test.js.map +2 -2
  175. package/lib/cjs/internal/transaction/service/mapper/EthersRawTransactionMapper.js +2 -0
  176. package/lib/cjs/internal/transaction/service/mapper/EthersRawTransactionMapper.js.map +7 -0
  177. package/lib/cjs/internal/transaction/service/mapper/EthersRawTransactionMapper.test.js +2 -0
  178. package/lib/cjs/internal/transaction/service/mapper/EthersRawTransactionMapper.test.js.map +7 -0
  179. package/lib/cjs/internal/transaction/service/mapper/TransactionMapper.js +1 -1
  180. package/lib/cjs/internal/transaction/service/mapper/TransactionMapper.js.map +1 -1
  181. package/lib/cjs/internal/transaction/service/mapper/TransactionMapperService.js +1 -1
  182. package/lib/cjs/internal/transaction/service/mapper/TransactionMapperService.js.map +2 -2
  183. package/lib/cjs/internal/transaction/service/mapper/TransactionMapperService.test.js +1 -1
  184. package/lib/cjs/internal/transaction/service/mapper/TransactionMapperService.test.js.map +2 -2
  185. package/lib/cjs/internal/transaction/service/mapper/model/TransactionMapperResult.js +1 -1
  186. package/lib/cjs/internal/transaction/service/mapper/model/TransactionMapperResult.js.map +1 -1
  187. package/lib/cjs/internal/transaction/service/parser/TransactionParserService.js +1 -1
  188. package/lib/cjs/internal/transaction/service/parser/TransactionParserService.js.map +3 -3
  189. package/lib/cjs/internal/transaction/service/parser/TransactionParserService.test.js +1 -1
  190. package/lib/cjs/internal/transaction/service/parser/TransactionParserService.test.js.map +3 -3
  191. package/lib/cjs/internal/transaction/use-case/SignTransactionUseCase.js +1 -1
  192. package/lib/cjs/internal/transaction/use-case/SignTransactionUseCase.js.map +2 -2
  193. package/lib/cjs/internal/transaction/use-case/SignTransactionUseCase.test.js +1 -1
  194. package/lib/cjs/internal/transaction/use-case/SignTransactionUseCase.test.js.map +3 -3
  195. package/lib/cjs/internal/typed-data/use-case/SignTypedDataUseCase.test.js +1 -1
  196. package/lib/cjs/internal/typed-data/use-case/SignTypedDataUseCase.test.js.map +2 -2
  197. package/lib/cjs/package.json +12 -12
  198. package/lib/esm/api/SignerEthBuilder.test.js +1 -1
  199. package/lib/esm/api/SignerEthBuilder.test.js.map +1 -1
  200. package/lib/esm/api/app-binder/GetConfigCommandTypes.js +1 -0
  201. package/lib/esm/api/app-binder/GetConfigCommandTypes.js.map +7 -0
  202. package/lib/esm/api/index.js +1 -1
  203. package/lib/esm/api/index.js.map +2 -2
  204. package/lib/esm/api/model/TransactionType.js +2 -0
  205. package/lib/esm/api/model/TransactionType.js.map +7 -0
  206. package/lib/esm/internal/DefaultSignerEth.js.map +2 -2
  207. package/lib/esm/internal/DefaultSignerEth.test.js +1 -1
  208. package/lib/esm/internal/DefaultSignerEth.test.js.map +2 -2
  209. package/lib/esm/internal/address/use-case/GetAddressUseCase.test.js +1 -1
  210. package/lib/esm/internal/address/use-case/GetAddressUseCase.test.js.map +2 -2
  211. package/lib/esm/internal/app-binder/EthAppBinder.js +1 -1
  212. package/lib/esm/internal/app-binder/EthAppBinder.js.map +3 -3
  213. package/lib/esm/internal/app-binder/EthAppBinder.test.js +1 -1
  214. package/lib/esm/internal/app-binder/EthAppBinder.test.js.map +3 -3
  215. package/lib/esm/internal/app-binder/command/GetAddressCommand.js +1 -1
  216. package/lib/esm/internal/app-binder/command/GetAddressCommand.js.map +3 -3
  217. package/lib/esm/internal/app-binder/command/GetAddressCommand.test.js +1 -1
  218. package/lib/esm/internal/app-binder/command/GetAddressCommand.test.js.map +2 -2
  219. package/lib/esm/internal/app-binder/command/GetAppConfigurationCommand.js +2 -0
  220. package/lib/esm/internal/app-binder/command/GetAppConfigurationCommand.js.map +7 -0
  221. package/lib/esm/internal/app-binder/command/GetAppConfigurationCommand.test.js +2 -0
  222. package/lib/esm/internal/app-binder/command/GetAppConfigurationCommand.test.js.map +7 -0
  223. package/lib/esm/internal/app-binder/command/GetChallengeCommand.js +1 -1
  224. package/lib/esm/internal/app-binder/command/GetChallengeCommand.js.map +3 -3
  225. package/lib/esm/internal/app-binder/command/GetChallengeCommand.test.js +1 -1
  226. package/lib/esm/internal/app-binder/command/GetChallengeCommand.test.js.map +2 -2
  227. package/lib/esm/internal/app-binder/command/ProvideEnumCommand.js +1 -1
  228. package/lib/esm/internal/app-binder/command/ProvideEnumCommand.js.map +3 -3
  229. package/lib/esm/internal/app-binder/command/ProvideEnumCommand.test.js +1 -1
  230. package/lib/esm/internal/app-binder/command/ProvideEnumCommand.test.js.map +3 -3
  231. package/lib/esm/internal/app-binder/command/ProvideNFTInformationCommand.js +1 -1
  232. package/lib/esm/internal/app-binder/command/ProvideNFTInformationCommand.js.map +3 -3
  233. package/lib/esm/internal/app-binder/command/ProvideTokenInformationCommand.js +1 -1
  234. package/lib/esm/internal/app-binder/command/ProvideTokenInformationCommand.js.map +3 -3
  235. package/lib/esm/internal/app-binder/command/ProvideTransactionFieldDescriptionCommand.js +1 -1
  236. package/lib/esm/internal/app-binder/command/ProvideTransactionFieldDescriptionCommand.js.map +3 -3
  237. package/lib/esm/internal/app-binder/command/ProvideTransactionFieldDescriptionCommand.test.js +1 -1
  238. package/lib/esm/internal/app-binder/command/ProvideTransactionFieldDescriptionCommand.test.js.map +3 -3
  239. package/lib/esm/internal/app-binder/command/ProvideTransactionInformationCommand.js +1 -1
  240. package/lib/esm/internal/app-binder/command/ProvideTransactionInformationCommand.js.map +3 -3
  241. package/lib/esm/internal/app-binder/command/ProvideTransactionInformationCommand.test.js +1 -1
  242. package/lib/esm/internal/app-binder/command/ProvideTransactionInformationCommand.test.js.map +3 -3
  243. package/lib/esm/internal/app-binder/command/ProvideTrustedNameCommand.js +1 -1
  244. package/lib/esm/internal/app-binder/command/ProvideTrustedNameCommand.js.map +3 -3
  245. package/lib/esm/internal/app-binder/command/ProvideWeb3CheckCommand.js +2 -0
  246. package/lib/esm/internal/app-binder/command/ProvideWeb3CheckCommand.js.map +7 -0
  247. package/lib/esm/internal/app-binder/command/ProvideWeb3CheckCommand.test.js +2 -0
  248. package/lib/esm/internal/app-binder/command/ProvideWeb3CheckCommand.test.js.map +7 -0
  249. package/lib/esm/internal/app-binder/command/SendEIP712FilteringCommand.js +1 -1
  250. package/lib/esm/internal/app-binder/command/SendEIP712FilteringCommand.js.map +3 -3
  251. package/lib/esm/internal/app-binder/command/SendEIP712StructDefinitionCommand.js +1 -1
  252. package/lib/esm/internal/app-binder/command/SendEIP712StructDefinitionCommand.js.map +3 -3
  253. package/lib/esm/internal/app-binder/command/SendEIP712StructDefinitionCommand.test.js +1 -1
  254. package/lib/esm/internal/app-binder/command/SendEIP712StructDefinitionCommand.test.js.map +2 -2
  255. package/lib/esm/internal/app-binder/command/SendEIP712StructImplemCommand.js +1 -1
  256. package/lib/esm/internal/app-binder/command/SendEIP712StructImplemCommand.js.map +3 -3
  257. package/lib/esm/internal/app-binder/command/SetExternalPluginCommand.js +1 -1
  258. package/lib/esm/internal/app-binder/command/SetExternalPluginCommand.js.map +3 -3
  259. package/lib/esm/internal/app-binder/command/SetExternalPluginCommand.test.js +2 -2
  260. package/lib/esm/internal/app-binder/command/SetExternalPluginCommand.test.js.map +3 -3
  261. package/lib/esm/internal/app-binder/command/SetPluginCommand.js +1 -1
  262. package/lib/esm/internal/app-binder/command/SetPluginCommand.js.map +3 -3
  263. package/lib/esm/internal/app-binder/command/SetPluginCommand.test.js +1 -1
  264. package/lib/esm/internal/app-binder/command/SetPluginCommand.test.js.map +3 -3
  265. package/lib/esm/internal/app-binder/command/SignEIP712Command.js +1 -1
  266. package/lib/esm/internal/app-binder/command/SignEIP712Command.js.map +3 -3
  267. package/lib/esm/internal/app-binder/command/SignEIP712Command.test.js +1 -1
  268. package/lib/esm/internal/app-binder/command/SignEIP712Command.test.js.map +2 -2
  269. package/lib/esm/internal/app-binder/command/SignPersonalMessageCommand.js +1 -1
  270. package/lib/esm/internal/app-binder/command/SignPersonalMessageCommand.js.map +3 -3
  271. package/lib/esm/internal/app-binder/command/SignTransactionCommand.js +1 -1
  272. package/lib/esm/internal/app-binder/command/SignTransactionCommand.js.map +3 -3
  273. package/lib/esm/internal/app-binder/command/SignTransactionCommand.test.js +1 -1
  274. package/lib/esm/internal/app-binder/command/SignTransactionCommand.test.js.map +2 -2
  275. package/lib/esm/internal/app-binder/command/StartTransactionCommand.js +1 -1
  276. package/lib/esm/internal/app-binder/command/StartTransactionCommand.js.map +3 -3
  277. package/lib/esm/internal/app-binder/command/StartTransactionCommand.test.js +1 -1
  278. package/lib/esm/internal/app-binder/command/StartTransactionCommand.test.js.map +3 -3
  279. package/lib/esm/internal/app-binder/command/StoreTransactionCommand.js +1 -1
  280. package/lib/esm/internal/app-binder/command/StoreTransactionCommand.js.map +3 -3
  281. package/lib/esm/internal/app-binder/command/StoreTransactionCommand.test.js +1 -1
  282. package/lib/esm/internal/app-binder/command/StoreTransactionCommand.test.js.map +3 -3
  283. package/lib/esm/internal/app-binder/command/Web3CheckOptInCommand.js +2 -0
  284. package/lib/esm/internal/app-binder/command/Web3CheckOptInCommand.js.map +7 -0
  285. package/lib/esm/internal/app-binder/command/Web3CheckOptInCommand.test.js +2 -0
  286. package/lib/esm/internal/app-binder/command/Web3CheckOptInCommand.test.js.map +7 -0
  287. package/lib/esm/internal/app-binder/command/utils/ethAppErrors.js +2 -0
  288. package/lib/esm/internal/app-binder/command/utils/ethAppErrors.js.map +7 -0
  289. package/lib/esm/internal/app-binder/command/utils/ethAppErrors.test.js +2 -0
  290. package/lib/esm/internal/app-binder/command/utils/ethAppErrors.test.js.map +7 -0
  291. package/lib/esm/internal/app-binder/constant/plugins.js +2 -0
  292. package/lib/esm/internal/app-binder/constant/plugins.js.map +7 -0
  293. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js +1 -1
  294. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js.map +3 -3
  295. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js +1 -1
  296. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js.map +3 -3
  297. package/lib/esm/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.js +1 -1
  298. package/lib/esm/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.js.map +3 -3
  299. package/lib/esm/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.test.js +1 -1
  300. package/lib/esm/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.test.js.map +3 -3
  301. package/lib/esm/internal/app-binder/device-action/__test-utils__/makeInternalApi.js +1 -1
  302. package/lib/esm/internal/app-binder/device-action/__test-utils__/makeInternalApi.js.map +3 -3
  303. package/lib/esm/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.js +1 -1
  304. package/lib/esm/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.js.map +2 -2
  305. package/lib/esm/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.js +1 -1
  306. package/lib/esm/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.js.map +3 -3
  307. package/lib/esm/internal/app-binder/task/BuildEIP712ContextTask.js +1 -1
  308. package/lib/esm/internal/app-binder/task/BuildEIP712ContextTask.js.map +3 -3
  309. package/lib/esm/internal/app-binder/task/BuildEIP712ContextTask.test.js +1 -1
  310. package/lib/esm/internal/app-binder/task/BuildEIP712ContextTask.test.js.map +3 -3
  311. package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.js +1 -1
  312. package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.js.map +3 -3
  313. package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.test.js +1 -1
  314. package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.test.js.map +3 -3
  315. package/lib/esm/internal/app-binder/task/GetWeb3CheckTask.js +2 -0
  316. package/lib/esm/internal/app-binder/task/GetWeb3CheckTask.js.map +7 -0
  317. package/lib/esm/internal/app-binder/task/GetWeb3CheckTask.test.js +2 -0
  318. package/lib/esm/internal/app-binder/task/GetWeb3CheckTask.test.js.map +7 -0
  319. package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.js +1 -1
  320. package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.js.map +3 -3
  321. package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.test.js +1 -1
  322. package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.test.js.map +3 -3
  323. package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.js +1 -1
  324. package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.js.map +3 -3
  325. package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.test.js +1 -1
  326. package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.test.js.map +2 -2
  327. package/lib/esm/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.js +1 -1
  328. package/lib/esm/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.js.map +3 -3
  329. package/lib/esm/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.test.js +1 -1
  330. package/lib/esm/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.test.js.map +3 -3
  331. package/lib/esm/internal/app-binder/task/ProvideTransactionGenericContextTask.js +1 -1
  332. package/lib/esm/internal/app-binder/task/ProvideTransactionGenericContextTask.js.map +3 -3
  333. package/lib/esm/internal/app-binder/task/ProvideTransactionGenericContextTask.test.js +1 -1
  334. package/lib/esm/internal/app-binder/task/ProvideTransactionGenericContextTask.test.js.map +3 -3
  335. package/lib/esm/internal/app-binder/task/SendCommandInChunksTask.js +1 -1
  336. package/lib/esm/internal/app-binder/task/SendCommandInChunksTask.js.map +2 -2
  337. package/lib/esm/internal/app-binder/task/SendEIP712StructImplemTask.js +1 -1
  338. package/lib/esm/internal/app-binder/task/SendEIP712StructImplemTask.js.map +2 -2
  339. package/lib/esm/internal/app-binder/task/SendEIP712StructImplemTask.test.js +1 -1
  340. package/lib/esm/internal/app-binder/task/SendEIP712StructImplemTask.test.js.map +2 -2
  341. package/lib/esm/internal/app-binder/task/SendPayloadInChunksTask.js +1 -1
  342. package/lib/esm/internal/app-binder/task/SendPayloadInChunksTask.js.map +2 -2
  343. package/lib/esm/internal/app-binder/task/SendPayloadInChunksTask.test.js +1 -1
  344. package/lib/esm/internal/app-binder/task/SendPayloadInChunksTask.test.js.map +2 -2
  345. package/lib/esm/internal/app-binder/task/SendSignPersonalMessageTask.js +1 -1
  346. package/lib/esm/internal/app-binder/task/SendSignPersonalMessageTask.js.map +2 -2
  347. package/lib/esm/internal/app-binder/task/SendSignPersonalMessageTask.test.js +1 -1
  348. package/lib/esm/internal/app-binder/task/SendSignPersonalMessageTask.test.js.map +2 -2
  349. package/lib/esm/internal/app-binder/task/SendSignTransactionTask.js +1 -1
  350. package/lib/esm/internal/app-binder/task/SendSignTransactionTask.js.map +3 -3
  351. package/lib/esm/internal/app-binder/task/SendSignTransactionTask.test.js +1 -1
  352. package/lib/esm/internal/app-binder/task/SendSignTransactionTask.test.js.map +2 -2
  353. package/lib/esm/internal/message/use-case/SignMessageUseCase.test.js +1 -1
  354. package/lib/esm/internal/message/use-case/SignMessageUseCase.test.js.map +2 -2
  355. package/lib/esm/internal/transaction/di/transactionModule.js +1 -1
  356. package/lib/esm/internal/transaction/di/transactionModule.js.map +3 -3
  357. package/lib/esm/internal/transaction/di/transactionModule.test.js +1 -1
  358. package/lib/esm/internal/transaction/di/transactionModule.test.js.map +2 -2
  359. package/lib/esm/internal/transaction/service/mapper/EthersRawTransactionMapper.js +2 -0
  360. package/lib/esm/internal/transaction/service/mapper/EthersRawTransactionMapper.js.map +7 -0
  361. package/lib/esm/internal/transaction/service/mapper/EthersRawTransactionMapper.test.js +2 -0
  362. package/lib/esm/internal/transaction/service/mapper/EthersRawTransactionMapper.test.js.map +7 -0
  363. package/lib/esm/internal/transaction/service/mapper/TransactionMapperService.js +1 -1
  364. package/lib/esm/internal/transaction/service/mapper/TransactionMapperService.js.map +2 -2
  365. package/lib/esm/internal/transaction/service/mapper/TransactionMapperService.test.js +1 -1
  366. package/lib/esm/internal/transaction/service/mapper/TransactionMapperService.test.js.map +2 -2
  367. package/lib/esm/internal/transaction/service/parser/TransactionParserService.js +1 -1
  368. package/lib/esm/internal/transaction/service/parser/TransactionParserService.js.map +2 -2
  369. package/lib/esm/internal/transaction/service/parser/TransactionParserService.test.js +1 -1
  370. package/lib/esm/internal/transaction/service/parser/TransactionParserService.test.js.map +2 -2
  371. package/lib/esm/internal/transaction/use-case/SignTransactionUseCase.js +1 -1
  372. package/lib/esm/internal/transaction/use-case/SignTransactionUseCase.js.map +2 -2
  373. package/lib/esm/internal/transaction/use-case/SignTransactionUseCase.test.js +1 -1
  374. package/lib/esm/internal/transaction/use-case/SignTransactionUseCase.test.js.map +3 -3
  375. package/lib/esm/internal/typed-data/use-case/SignTypedDataUseCase.test.js +1 -1
  376. package/lib/esm/internal/typed-data/use-case/SignTypedDataUseCase.test.js.map +2 -2
  377. package/lib/esm/package.json +12 -12
  378. package/lib/types/api/SignerEth.d.ts +1 -2
  379. package/lib/types/api/SignerEth.d.ts.map +1 -1
  380. package/lib/types/api/app-binder/GetAddressDeviceActionTypes.d.ts +3 -2
  381. package/lib/types/api/app-binder/GetAddressDeviceActionTypes.d.ts.map +1 -1
  382. package/lib/types/api/app-binder/GetConfigCommandTypes.d.ts +7 -0
  383. package/lib/types/api/app-binder/GetConfigCommandTypes.d.ts.map +1 -0
  384. package/lib/types/api/app-binder/SignPersonalMessageDeviceActionTypes.d.ts +3 -11
  385. package/lib/types/api/app-binder/SignPersonalMessageDeviceActionTypes.d.ts.map +1 -1
  386. package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts +6 -5
  387. package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts.map +1 -1
  388. package/lib/types/api/app-binder/SignTypedDataDeviceActionTypes.d.ts +3 -2
  389. package/lib/types/api/app-binder/SignTypedDataDeviceActionTypes.d.ts.map +1 -1
  390. package/lib/types/api/index.d.ts +2 -2
  391. package/lib/types/api/index.d.ts.map +1 -1
  392. package/lib/types/api/model/{Transaction.d.ts → TransactionType.d.ts} +1 -4
  393. package/lib/types/api/model/TransactionType.d.ts.map +1 -0
  394. package/lib/types/internal/DefaultSignerEth.d.ts +1 -2
  395. package/lib/types/internal/DefaultSignerEth.d.ts.map +1 -1
  396. package/lib/types/internal/app-binder/EthAppBinder.d.ts +1 -2
  397. package/lib/types/internal/app-binder/EthAppBinder.d.ts.map +1 -1
  398. package/lib/types/internal/app-binder/command/GetAddressCommand.d.ts +5 -3
  399. package/lib/types/internal/app-binder/command/GetAddressCommand.d.ts.map +1 -1
  400. package/lib/types/internal/app-binder/command/GetAppConfigurationCommand.d.ts +10 -0
  401. package/lib/types/internal/app-binder/command/GetAppConfigurationCommand.d.ts.map +1 -0
  402. package/lib/types/internal/app-binder/command/GetAppConfigurationCommand.test.d.ts +2 -0
  403. package/lib/types/internal/app-binder/command/GetAppConfigurationCommand.test.d.ts.map +1 -0
  404. package/lib/types/internal/app-binder/command/GetChallengeCommand.d.ts +4 -2
  405. package/lib/types/internal/app-binder/command/GetChallengeCommand.d.ts.map +1 -1
  406. package/lib/types/internal/app-binder/command/ProvideEnumCommand.d.ts +4 -2
  407. package/lib/types/internal/app-binder/command/ProvideEnumCommand.d.ts.map +1 -1
  408. package/lib/types/internal/app-binder/command/ProvideNFTInformationCommand.d.ts +4 -3
  409. package/lib/types/internal/app-binder/command/ProvideNFTInformationCommand.d.ts.map +1 -1
  410. package/lib/types/internal/app-binder/command/ProvideTokenInformationCommand.d.ts +4 -2
  411. package/lib/types/internal/app-binder/command/ProvideTokenInformationCommand.d.ts.map +1 -1
  412. package/lib/types/internal/app-binder/command/ProvideTransactionFieldDescriptionCommand.d.ts +4 -2
  413. package/lib/types/internal/app-binder/command/ProvideTransactionFieldDescriptionCommand.d.ts.map +1 -1
  414. package/lib/types/internal/app-binder/command/ProvideTransactionInformationCommand.d.ts +4 -2
  415. package/lib/types/internal/app-binder/command/ProvideTransactionInformationCommand.d.ts.map +1 -1
  416. package/lib/types/internal/app-binder/command/ProvideTrustedNameCommand.d.ts +4 -2
  417. package/lib/types/internal/app-binder/command/ProvideTrustedNameCommand.d.ts.map +1 -1
  418. package/lib/types/internal/app-binder/command/ProvideWeb3CheckCommand.d.ts +17 -0
  419. package/lib/types/internal/app-binder/command/ProvideWeb3CheckCommand.d.ts.map +1 -0
  420. package/lib/types/internal/app-binder/command/ProvideWeb3CheckCommand.test.d.ts +2 -0
  421. package/lib/types/internal/app-binder/command/ProvideWeb3CheckCommand.test.d.ts.map +1 -0
  422. package/lib/types/internal/app-binder/command/SendEIP712FilteringCommand.d.ts +4 -2
  423. package/lib/types/internal/app-binder/command/SendEIP712FilteringCommand.d.ts.map +1 -1
  424. package/lib/types/internal/app-binder/command/SendEIP712StructDefinitionCommand.d.ts +4 -2
  425. package/lib/types/internal/app-binder/command/SendEIP712StructDefinitionCommand.d.ts.map +1 -1
  426. package/lib/types/internal/app-binder/command/SendEIP712StructImplemCommand.d.ts +4 -2
  427. package/lib/types/internal/app-binder/command/SendEIP712StructImplemCommand.d.ts.map +1 -1
  428. package/lib/types/internal/app-binder/command/SetExternalPluginCommand.d.ts +5 -7
  429. package/lib/types/internal/app-binder/command/SetExternalPluginCommand.d.ts.map +1 -1
  430. package/lib/types/internal/app-binder/command/SetPluginCommand.d.ts +5 -7
  431. package/lib/types/internal/app-binder/command/SetPluginCommand.d.ts.map +1 -1
  432. package/lib/types/internal/app-binder/command/SignEIP712Command.d.ts +5 -3
  433. package/lib/types/internal/app-binder/command/SignEIP712Command.d.ts.map +1 -1
  434. package/lib/types/internal/app-binder/command/SignPersonalMessageCommand.d.ts +5 -3
  435. package/lib/types/internal/app-binder/command/SignPersonalMessageCommand.d.ts.map +1 -1
  436. package/lib/types/internal/app-binder/command/SignTransactionCommand.d.ts +5 -3
  437. package/lib/types/internal/app-binder/command/SignTransactionCommand.d.ts.map +1 -1
  438. package/lib/types/internal/app-binder/command/StartTransactionCommand.d.ts +4 -2
  439. package/lib/types/internal/app-binder/command/StartTransactionCommand.d.ts.map +1 -1
  440. package/lib/types/internal/app-binder/command/StoreTransactionCommand.d.ts +4 -2
  441. package/lib/types/internal/app-binder/command/StoreTransactionCommand.d.ts.map +1 -1
  442. package/lib/types/internal/app-binder/command/Web3CheckOptInCommand.d.ts +15 -0
  443. package/lib/types/internal/app-binder/command/Web3CheckOptInCommand.d.ts.map +1 -0
  444. package/lib/types/internal/app-binder/command/Web3CheckOptInCommand.test.d.ts +2 -0
  445. package/lib/types/internal/app-binder/command/Web3CheckOptInCommand.test.d.ts.map +1 -0
  446. package/lib/types/internal/app-binder/command/utils/ethAppErrors.d.ts +8 -0
  447. package/lib/types/internal/app-binder/command/utils/ethAppErrors.d.ts.map +1 -0
  448. package/lib/types/internal/app-binder/command/utils/ethAppErrors.test.d.ts +2 -0
  449. package/lib/types/internal/app-binder/command/utils/ethAppErrors.test.d.ts.map +1 -0
  450. package/lib/types/internal/app-binder/constant/plugins.d.ts +2 -0
  451. package/lib/types/internal/app-binder/constant/plugins.d.ts.map +1 -0
  452. package/lib/types/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.d.ts +22 -10
  453. package/lib/types/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.d.ts.map +1 -1
  454. package/lib/types/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.d.ts +12 -3
  455. package/lib/types/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.d.ts.map +1 -1
  456. package/lib/types/internal/app-binder/device-action/__test-utils__/makeInternalApi.d.ts +2 -1
  457. package/lib/types/internal/app-binder/device-action/__test-utils__/makeInternalApi.d.ts.map +1 -1
  458. package/lib/types/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.d.ts.map +1 -1
  459. package/lib/types/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.d.ts +5 -2
  460. package/lib/types/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.d.ts.map +1 -1
  461. package/lib/types/internal/app-binder/task/BuildEIP712ContextTask.d.ts +4 -1
  462. package/lib/types/internal/app-binder/task/BuildEIP712ContextTask.d.ts.map +1 -1
  463. package/lib/types/internal/app-binder/task/BuildTransactionContextTask.d.ts +3 -3
  464. package/lib/types/internal/app-binder/task/BuildTransactionContextTask.d.ts.map +1 -1
  465. package/lib/types/internal/app-binder/task/GetWeb3CheckTask.d.ts +31 -0
  466. package/lib/types/internal/app-binder/task/GetWeb3CheckTask.d.ts.map +1 -0
  467. package/lib/types/internal/app-binder/task/GetWeb3CheckTask.test.d.ts +2 -0
  468. package/lib/types/internal/app-binder/task/GetWeb3CheckTask.test.d.ts.map +1 -0
  469. package/lib/types/internal/app-binder/task/ProvideEIP712ContextTask.d.ts +14 -5
  470. package/lib/types/internal/app-binder/task/ProvideEIP712ContextTask.d.ts.map +1 -1
  471. package/lib/types/internal/app-binder/task/ProvideTransactionContextTask.d.ts +5 -7
  472. package/lib/types/internal/app-binder/task/ProvideTransactionContextTask.d.ts.map +1 -1
  473. package/lib/types/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.d.ts +54 -12
  474. package/lib/types/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.d.ts.map +1 -1
  475. package/lib/types/internal/app-binder/task/ProvideTransactionGenericContextTask.d.ts +7 -6
  476. package/lib/types/internal/app-binder/task/ProvideTransactionGenericContextTask.d.ts.map +1 -1
  477. package/lib/types/internal/app-binder/task/SendCommandInChunksTask.d.ts +3 -2
  478. package/lib/types/internal/app-binder/task/SendCommandInChunksTask.d.ts.map +1 -1
  479. package/lib/types/internal/app-binder/task/SendEIP712StructImplemTask.d.ts +2 -1
  480. package/lib/types/internal/app-binder/task/SendEIP712StructImplemTask.d.ts.map +1 -1
  481. package/lib/types/internal/app-binder/task/SendPayloadInChunksTask.d.ts +2 -1
  482. package/lib/types/internal/app-binder/task/SendPayloadInChunksTask.d.ts.map +1 -1
  483. package/lib/types/internal/app-binder/task/SendSignPersonalMessageTask.d.ts +2 -1
  484. package/lib/types/internal/app-binder/task/SendSignPersonalMessageTask.d.ts.map +1 -1
  485. package/lib/types/internal/app-binder/task/SendSignTransactionTask.d.ts +3 -2
  486. package/lib/types/internal/app-binder/task/SendSignTransactionTask.d.ts.map +1 -1
  487. package/lib/types/internal/transaction/di/transactionModule.d.ts.map +1 -1
  488. package/lib/types/internal/transaction/service/mapper/EthersRawTransactionMapper.d.ts +7 -0
  489. package/lib/types/internal/transaction/service/mapper/EthersRawTransactionMapper.d.ts.map +1 -0
  490. package/lib/types/internal/transaction/service/mapper/EthersRawTransactionMapper.test.d.ts +2 -0
  491. package/lib/types/internal/transaction/service/mapper/EthersRawTransactionMapper.test.d.ts.map +1 -0
  492. package/lib/types/internal/transaction/service/mapper/TransactionMapper.d.ts +1 -2
  493. package/lib/types/internal/transaction/service/mapper/TransactionMapper.d.ts.map +1 -1
  494. package/lib/types/internal/transaction/service/mapper/TransactionMapperService.d.ts +1 -2
  495. package/lib/types/internal/transaction/service/mapper/TransactionMapperService.d.ts.map +1 -1
  496. package/lib/types/internal/transaction/service/mapper/model/TransactionMapperResult.d.ts +1 -1
  497. package/lib/types/internal/transaction/service/mapper/model/TransactionMapperResult.d.ts.map +1 -1
  498. package/lib/types/internal/transaction/service/parser/TransactionParserService.d.ts.map +1 -1
  499. package/lib/types/internal/transaction/use-case/SignTransactionUseCase.d.ts +1 -2
  500. package/lib/types/internal/transaction/use-case/SignTransactionUseCase.d.ts.map +1 -1
  501. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  502. package/package.json +16 -16
  503. package/lib/cjs/api/model/Transaction.js +0 -2
  504. package/lib/cjs/api/model/Transaction.js.map +0 -7
  505. package/lib/cjs/internal/app-binder/device-action/SignPersonalMessage/SignPersonalMessageDeviceAction.js +0 -2
  506. package/lib/cjs/internal/app-binder/device-action/SignPersonalMessage/SignPersonalMessageDeviceAction.js.map +0 -7
  507. package/lib/cjs/internal/app-binder/device-action/SignPersonalMessage/SignPersonalMessageDeviceAction.test.js +0 -2
  508. package/lib/cjs/internal/app-binder/device-action/SignPersonalMessage/SignPersonalMessageDeviceAction.test.js.map +0 -7
  509. package/lib/cjs/internal/transaction/service/mapper/EthersV5TransactionMapper.js +0 -2
  510. package/lib/cjs/internal/transaction/service/mapper/EthersV5TransactionMapper.js.map +0 -7
  511. package/lib/cjs/internal/transaction/service/mapper/EthersV5TransactionMapper.test.js +0 -2
  512. package/lib/cjs/internal/transaction/service/mapper/EthersV5TransactionMapper.test.js.map +0 -7
  513. package/lib/cjs/internal/transaction/service/mapper/EthersV6TransactionMapper.js +0 -2
  514. package/lib/cjs/internal/transaction/service/mapper/EthersV6TransactionMapper.js.map +0 -7
  515. package/lib/cjs/internal/transaction/service/mapper/EthersV6TransactionMapper.test.js +0 -2
  516. package/lib/cjs/internal/transaction/service/mapper/EthersV6TransactionMapper.test.js.map +0 -7
  517. package/lib/esm/api/model/Transaction.js +0 -2
  518. package/lib/esm/api/model/Transaction.js.map +0 -7
  519. package/lib/esm/internal/app-binder/device-action/SignPersonalMessage/SignPersonalMessageDeviceAction.js +0 -2
  520. package/lib/esm/internal/app-binder/device-action/SignPersonalMessage/SignPersonalMessageDeviceAction.js.map +0 -7
  521. package/lib/esm/internal/app-binder/device-action/SignPersonalMessage/SignPersonalMessageDeviceAction.test.js +0 -2
  522. package/lib/esm/internal/app-binder/device-action/SignPersonalMessage/SignPersonalMessageDeviceAction.test.js.map +0 -7
  523. package/lib/esm/internal/transaction/service/mapper/EthersV5TransactionMapper.js +0 -2
  524. package/lib/esm/internal/transaction/service/mapper/EthersV5TransactionMapper.js.map +0 -7
  525. package/lib/esm/internal/transaction/service/mapper/EthersV5TransactionMapper.test.js +0 -2
  526. package/lib/esm/internal/transaction/service/mapper/EthersV5TransactionMapper.test.js.map +0 -7
  527. package/lib/esm/internal/transaction/service/mapper/EthersV6TransactionMapper.js +0 -2
  528. package/lib/esm/internal/transaction/service/mapper/EthersV6TransactionMapper.js.map +0 -7
  529. package/lib/esm/internal/transaction/service/mapper/EthersV6TransactionMapper.test.js +0 -2
  530. package/lib/esm/internal/transaction/service/mapper/EthersV6TransactionMapper.test.js.map +0 -7
  531. package/lib/types/api/model/Transaction.d.ts.map +0 -1
  532. package/lib/types/internal/app-binder/device-action/SignPersonalMessage/SignPersonalMessageDeviceAction.d.ts +0 -17
  533. package/lib/types/internal/app-binder/device-action/SignPersonalMessage/SignPersonalMessageDeviceAction.d.ts.map +0 -1
  534. package/lib/types/internal/app-binder/device-action/SignPersonalMessage/SignPersonalMessageDeviceAction.test.d.ts +0 -2
  535. package/lib/types/internal/app-binder/device-action/SignPersonalMessage/SignPersonalMessageDeviceAction.test.d.ts.map +0 -1
  536. package/lib/types/internal/transaction/service/mapper/EthersV5TransactionMapper.d.ts +0 -10
  537. package/lib/types/internal/transaction/service/mapper/EthersV5TransactionMapper.d.ts.map +0 -1
  538. package/lib/types/internal/transaction/service/mapper/EthersV5TransactionMapper.test.d.ts +0 -2
  539. package/lib/types/internal/transaction/service/mapper/EthersV5TransactionMapper.test.d.ts.map +0 -1
  540. package/lib/types/internal/transaction/service/mapper/EthersV6TransactionMapper.d.ts +0 -9
  541. package/lib/types/internal/transaction/service/mapper/EthersV6TransactionMapper.d.ts.map +0 -1
  542. package/lib/types/internal/transaction/service/mapper/EthersV6TransactionMapper.test.d.ts +0 -2
  543. 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": "AAAA,OAEE,wBAAAA,MAEK,2BACP,OACE,0BAAAC,MAEK,kCACP,OAAS,OAAAC,MAAW,SAuBb,MAAMC,CAA4B,CACvC,YACmBC,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,OAASjB,EAAqB,KACrD,EAEF,IAAIkB,EAA+D,CAAC,EACpE,MAAMC,EAAkBH,EAAyB,KAC9CI,GAAQA,EAAI,OAASpB,EAAqB,gBAC7C,EACA,GAAI,CAAC,KAAK,sBAAsB,GAAKmB,IAAoB,OACvDD,EAAmBF,EAAyB,OACzCI,GACCA,EAAI,OAASpB,EAAqB,kBAClCoB,EAAI,OAASpB,EAAqB,+BAClCoB,EAAI,OAASpB,EAAqB,IACtC,MACK,CACL,MAAMqB,EAAoBL,EAAyB,OAChDI,GACCA,EAAI,OAASpB,EAAqB,+BAClCoB,EAAI,OAASpB,EAAqB,IACtC,EACAkB,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,mBAAqBrB,EAAuB,WAGxDqB,EAAY,WAAW,OAAS,WAC3B,GAEFpB,EAAIoB,EAAY,WAAW,QAAS,QAAQ,CACrD,CACF",
6
- "names": ["ClearSignContextType", "DeviceSessionStateType", "gte", "BuildTransactionContextTask", "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": "AAAA,OAGE,wBAAAA,MAEK,2BACP,OACE,iBAAAC,EAEA,0BAAAC,MAEK,kCACP,OAAS,OAAAC,MAAW,SAIpB,OAAS,oBAAAC,MAAwB,wCAoB1B,MAAMC,CAA4B,CACvC,YACmBC,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,OAASrB,EAAqB,OACtCqB,EAAQ,OAASrB,EAAqB,IAC1C,EAGMsB,EACJH,EAAkB,OACfE,GAAYA,EAAQ,OAASrB,EAAqB,IACrD,EAEF,IAAIuB,EAA+D,CAAC,EACpE,MAAMC,EAAkBJ,EAAyB,KAC9CK,GAAQA,EAAI,OAASzB,EAAqB,gBAC7C,EAEA,GAAIwB,GAAmB,CAACA,EAAgB,YACtC,MAAM,IAAI,MAAM,yCAAyC,EAM3D,GACE,CAAC,KAAK,sBAAsBX,CAAW,GACvCW,IAAoB,OAEpBD,EAAmBH,EAAyB,OACzCK,GACCA,EAAI,OAASzB,EAAqB,kBAClCyB,EAAI,OAASzB,EAAqB,6BACtC,MACK,CACL,MAAM0B,EAAoBN,EAAyB,OAChDK,GACCA,EAAI,OAASzB,EAAqB,6BACtC,EACAuB,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,mBAAqBX,EAAuB,UAC1D,MAAO,GAGT,GACEW,EAAY,WAAW,OAAS,YAChC,CAACT,EAAiB,SAASS,EAAY,WAAW,IAAI,EAGtD,MAAM,IAAI,MAAM,iBAAiB,EAGnC,OAAIA,EAAY,gBAAkBZ,EAAc,OACvC,GAEFE,EAAIU,EAAY,WAAW,QAAS,QAAQ,CACrD,CACF",
6
+ "names": ["ClearSignContextType", "DeviceModelId", "DeviceSessionStateType", "gte", "ETHEREUM_PLUGINS", "BuildTransactionContextTask", "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
- import{ClearSignContextType as n}from"@ledgerhq/context-module";import{DeviceSessionStateType as l,DeviceStatus as p}from"@ledgerhq/device-management-kit";import{Transaction as m}from"ethers-v6";import{Left as x,Right as d}from"purify-ts";import{makeDeviceActionInternalApiMock as S}from"../../app-binder/device-action/__test-utils__/makeInternalApi";import{BuildTransactionContextTask as u}from"./BuildTransactionContextTask";describe("BuildTransactionContextTask",()=>{const c={getContext:jest.fn(),getContexts:jest.fn(),getTypedDataFilters:jest.fn()},r={mapTransactionToSubset:jest.fn()},T={domain:"domain-name.eth"};let y,i;const a=S();beforeEach(()=>{jest.clearAllMocks(),y=new m,y.chainId=1n,y.nonce=0,y.data="0x",i={contextModule:c,mapper:r,transaction:y,options:T,challenge:"challenge"}}),it("should build the transaction context without clear sign contexts",async()=>{const t=new Uint8Array([1,2,3]),e=[],o={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:t,type:0};r.mapTransactionToSubset.mockReturnValueOnce(d(o)),c.getContexts.mockResolvedValueOnce(e),a.getDeviceSessionState.mockReturnValueOnce({sessionStateType:l.ReadyWithoutSecureChannel,deviceStatus:p.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"}});const s=await new u(a,i).run();expect(s).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.TOKEN,payload:"payload-1"},{type:n.NFT,payload:"payload-2"}],o={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:t,type:2};r.mapTransactionToSubset.mockReturnValueOnce(d(o)),c.getContexts.mockResolvedValueOnce(e),a.getDeviceSessionState.mockReturnValueOnce({sessionStateType:l.ReadyWithoutSecureChannel,deviceStatus:p.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"}});const s=await new u(a,i).run();expect(s).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.TRANSACTION_INFO,payload:"payload-1"},{type:n.TRANSACTION_FIELD_DESCRIPTION,payload:"payload-2"},{type:n.ENUM,payload:"payload-3"},{type:n.TRANSACTION_FIELD_DESCRIPTION,payload:"payload-4"}],o={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:t,type:2};r.mapTransactionToSubset.mockReturnValueOnce(d(o)),c.getContexts.mockResolvedValueOnce(e),a.getDeviceSessionState.mockReturnValueOnce({sessionStateType:l.ReadyWithoutSecureChannel,deviceStatus:p.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.14.0"}});const s=await new u(a,i).run();expect(s).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=[],o={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:t,type:0};r.mapTransactionToSubset.mockReturnValueOnce(d(o)),c.getContexts.mockResolvedValueOnce(e),a.getDeviceSessionState.mockReturnValueOnce({sessionStateType:l.ReadyWithoutSecureChannel,deviceStatus:p.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"}}),await new u(a,i).run(),expect(r.mapTransactionToSubset).toHaveBeenCalledWith(y)}),it("should call the context module with the correct parameters",async()=>{const t=new Uint8Array([1,2,3]),e=[],o={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:t,type:0};r.mapTransactionToSubset.mockReturnValueOnce(d(o)),c.getContexts.mockResolvedValueOnce(e),a.getDeviceSessionState.mockReturnValueOnce({sessionStateType:l.ReadyWithoutSecureChannel,deviceStatus:p.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"}}),await new u(a,i).run(),expect(c.getContexts).toHaveBeenCalledWith({challenge:"challenge",domain:"domain-name.eth",...o.subset})}),it("should throw an error if the mapper returns an error",async()=>{const t=new Error("error");r.mapTransactionToSubset.mockReturnValueOnce(x(t)),a.getDeviceSessionState.mockReturnValueOnce({sessionStateType:l.ReadyWithoutSecureChannel,deviceStatus:p.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"}});const e=new u(a,i);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.ERROR,error:new Error("error")},{type:n.TOKEN,payload:"payload-1"},{type:n.ERROR,error:new Error("error")},{type:n.NFT,payload:"payload-2"}],o={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:t,type:0};r.mapTransactionToSubset.mockReturnValueOnce(d(o)),c.getContexts.mockResolvedValueOnce(e),a.getDeviceSessionState.mockReturnValueOnce({sessionStateType:l.ReadyWithoutSecureChannel,deviceStatus:p.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"}});const s=await new u(a,i).run();expect(s).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.TRANSACTION_INFO,payload:"transaction_info"},{type:n.TOKEN,payload:"payload-1"},{type:n.TRANSACTION_FIELD_DESCRIPTION,payload:"transaction_field"},{type:n.NFT,payload:"payload-2"},{type:n.ENUM,payload:"enum"}],o={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:t,type:0};r.mapTransactionToSubset.mockReturnValueOnce(d(o)),c.getContexts.mockResolvedValueOnce(e),a.getDeviceSessionState.mockReturnValueOnce({sessionStateType:l.ReadyWithoutSecureChannel,deviceStatus:p.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"}});const s=await new u(a,i).run();expect(s).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.TRANSACTION_FIELD_DESCRIPTION,payload:"transaction_field"},{type:n.TOKEN,payload:"payload-1"},{type:n.ENUM,payload:"enum"},{type:n.NFT,payload:"payload-2"}],o={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:t,type:0};r.mapTransactionToSubset.mockReturnValueOnce(d(o)),c.getContexts.mockResolvedValueOnce(e),a.getDeviceSessionState.mockReturnValueOnce({sessionStateType:l.ReadyWithoutSecureChannel,deviceStatus:p.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.14.0"}});const s=await new u(a,i).run();expect(s).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.TOKEN,payload:"payload-1"},{type:n.TRANSACTION_INFO,payload:"payload-2"},{type:n.EXTERNAL_PLUGIN,payload:"payload-3"},{type:n.TRANSACTION_FIELD_DESCRIPTION,payload:"payload-4"}],o={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:t,type:2};r.mapTransactionToSubset.mockReturnValueOnce(d(o)),c.getContexts.mockResolvedValueOnce(e),a.getDeviceSessionState.mockReturnValueOnce({sessionStateType:l.ReadyWithoutSecureChannel,deviceStatus:p.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.14.0"}});const s=await new u(a,i).run();expect(s).toEqual({clearSignContexts:{transactionInfo:"payload-2",transactionFields:[e[3]]},serializedTransaction:t,chainId:1,transactionType:2})})});
1
+ import{ClearSignContextType as t}from"@ledgerhq/context-module";import{DeviceModelId as p,DeviceSessionStateType as d,DeviceStatus as u,hexaStringToBuffer as x}from"@ledgerhq/device-management-kit";import{Transaction as m}from"ethers";import{Left as R,Right as T}from"purify-ts";import{ETHEREUM_PLUGINS as h}from"../../app-binder/constant/plugins";import{makeDeviceActionInternalApiMock as E}from"../../app-binder/device-action/__test-utils__/makeInternalApi";import{BuildTransactionContextTask as y}from"./BuildTransactionContextTask";describe("BuildTransactionContextTask",()=>{const r={getContext:vi.fn(),getContexts:vi.fn(),getTypedDataFilters:vi.fn(),getWeb3Checks:vi.fn()},c={mapTransactionToSubset:vi.fn()},C={domain:"domain-name.eth"},S=x(m.from({chainId:1n,nonce:0,data:"0x"}).unsignedSerialized),i={keyUsageNumber:1,payload:new Uint8Array([1,2,3])};let l;const n=E();beforeEach(()=>{vi.resetAllMocks(),l={contextModule:r,mapper:c,transaction:S,options:C,challenge:"challenge"}}),it("should build the transaction context without clear sign contexts",async()=>{const a=new Uint8Array([1,2,3]),e=[],o={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:a,type:0};c.mapTransactionToSubset.mockReturnValueOnce(T(o)),r.getContexts.mockResolvedValueOnce(e),n.getDeviceSessionState.mockReturnValueOnce({sessionStateType:d.ReadyWithoutSecureChannel,deviceStatus:u.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"},deviceModelId:p.FLEX,isSecureConnectionAllowed:!1});const s=await new y(n,l).run();expect(s).toEqual({clearSignContexts:e,serializedTransaction:a,chainId:1,transactionType:0})}),it("should build the transaction context with clear sign contexts",async()=>{const a=new Uint8Array([1,2,3]),e=[{type:t.TOKEN,payload:"payload-1"},{type:t.NFT,payload:"payload-2"}],o={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:a,type:2};c.mapTransactionToSubset.mockReturnValueOnce(T(o)),r.getContexts.mockResolvedValueOnce(e),n.getDeviceSessionState.mockReturnValueOnce({sessionStateType:d.ReadyWithoutSecureChannel,deviceStatus:u.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"},deviceModelId:p.FLEX,isSecureConnectionAllowed:!1});const s=await new y(n,l).run();expect(s).toEqual({clearSignContexts:e,serializedTransaction:a,chainId:1,transactionType:2})}),it("should build the transaction context with generic-parser context",async()=>{const a=new Uint8Array([1,2,3]),e=[{type:t.TRANSACTION_INFO,payload:"payload-1",certificate:i},{type:t.TRANSACTION_FIELD_DESCRIPTION,payload:"payload-2"},{type:t.ENUM,payload:"payload-3",id:1,value:2,certificate:i},{type:t.TRANSACTION_FIELD_DESCRIPTION,payload:"payload-4"}],o={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:a,type:2};c.mapTransactionToSubset.mockReturnValueOnce(T(o)),r.getContexts.mockResolvedValueOnce(e),n.getDeviceSessionState.mockReturnValueOnce({sessionStateType:d.ReadyWithoutSecureChannel,deviceStatus:u.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.15.0"},deviceModelId:p.FLEX,isSecureConnectionAllowed:!1});const s=await new y(n,l).run();expect(s).toEqual({clearSignContexts:{transactionInfo:"payload-1",transactionInfoCertificate:i,transactionFields:[e[1],e[3]],transactionEnums:[e[2]]},serializedTransaction:a,chainId:1,transactionType:2})}),it("should build the transaction context with generic-parser context and a plugin instead of Ethereum app",async()=>{const a=new Uint8Array([1,2,3]),e=[{type:t.TRANSACTION_INFO,payload:"payload-1",certificate:i},{type:t.TRANSACTION_FIELD_DESCRIPTION,payload:"payload-2"},{type:t.ENUM,payload:"payload-3",id:1,value:2,certificate:i},{type:t.TRANSACTION_FIELD_DESCRIPTION,payload:"payload-4"}],o={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:a,type:2};c.mapTransactionToSubset.mockReturnValueOnce(T(o)),r.getContexts.mockResolvedValueOnce(e),n.getDeviceSessionState.mockReturnValueOnce({sessionStateType:d.ReadyWithoutSecureChannel,deviceStatus:u.CONNECTED,installedApps:[],currentApp:{name:h[0],version:"1.15.0"},deviceModelId:p.FLEX,isSecureConnectionAllowed:!1});const s=await new y(n,l).run();expect(s).toEqual({clearSignContexts:{transactionInfo:"payload-1",transactionInfoCertificate:i,transactionFields:[e[1],e[3]],transactionEnums:[e[2]]},serializedTransaction:a,chainId:1,transactionType:2})}),it("should call the mapper with the transaction",async()=>{const a=new Uint8Array([1,2,3]),e=[],o={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:a,type:0};c.mapTransactionToSubset.mockReturnValueOnce(T(o)),r.getContexts.mockResolvedValueOnce(e),n.getDeviceSessionState.mockReturnValueOnce({sessionStateType:d.ReadyWithoutSecureChannel,deviceStatus:u.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"},deviceModelId:p.FLEX,isSecureConnectionAllowed:!1}),await new y(n,l).run(),expect(c.mapTransactionToSubset).toHaveBeenCalledWith(S)}),it("should call the context module with the correct parameters",async()=>{const a=new Uint8Array([1,2,3]),e=[],o={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:a,type:0};c.mapTransactionToSubset.mockReturnValueOnce(T(o)),r.getContexts.mockResolvedValueOnce(e),n.getDeviceSessionState.mockReturnValueOnce({sessionStateType:d.ReadyWithoutSecureChannel,deviceStatus:u.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"},deviceModelId:p.FLEX,isSecureConnectionAllowed:!1}),await new y(n,l).run(),expect(r.getContexts).toHaveBeenCalledWith({deviceModelId:p.FLEX,challenge:"challenge",domain:"domain-name.eth",...o.subset})}),it("should throw an error if the mapper returns an error",async()=>{const a=new Error("error");c.mapTransactionToSubset.mockReturnValueOnce(R(a)),n.getDeviceSessionState.mockReturnValueOnce({sessionStateType:d.ReadyWithoutSecureChannel,deviceStatus:u.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"},deviceModelId:p.FLEX,isSecureConnectionAllowed:!1});const e=new y(n,l);await expect(e.run()).rejects.toThrow(a)}),it("should exclude error contexts from the result",async()=>{const a=new Uint8Array([1,2,3]),e=[{type:t.ERROR,error:new Error("error")},{type:t.TOKEN,payload:"payload-1"},{type:t.ERROR,error:new Error("error")},{type:t.NFT,payload:"payload-2"}],o={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:a,type:0};c.mapTransactionToSubset.mockReturnValueOnce(T(o)),r.getContexts.mockResolvedValueOnce(e),n.getDeviceSessionState.mockReturnValueOnce({sessionStateType:d.ReadyWithoutSecureChannel,deviceStatus:u.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"},deviceModelId:p.FLEX,isSecureConnectionAllowed:!1});const s=await new y(n,l).run();expect(s).toEqual({clearSignContexts:[e[1],e[3]],serializedTransaction:a,chainId:1,transactionType:0})}),it("should exclude generic-parser contexts from the result on old apps",async()=>{const a=new Uint8Array([1,2,3]),e=[{type:t.TRANSACTION_INFO,payload:"transaction_info",certificate:i},{type:t.TOKEN,payload:"payload-1"},{type:t.TRANSACTION_FIELD_DESCRIPTION,payload:"transaction_field"},{type:t.NFT,payload:"payload-2"},{type:t.ENUM,payload:"enum",id:1,value:2,certificate:i}],o={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:a,type:0};c.mapTransactionToSubset.mockReturnValueOnce(T(o)),r.getContexts.mockResolvedValueOnce(e),n.getDeviceSessionState.mockReturnValueOnce({sessionStateType:d.ReadyWithoutSecureChannel,deviceStatus:u.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"},deviceModelId:p.FLEX,isSecureConnectionAllowed:!1});const s=await new y(n,l).run();expect(s).toEqual({clearSignContexts:[e[1],e[3]],serializedTransaction:a,chainId:1,transactionType:0})}),it("should exclude generic-parser contexts from the result if no transaction_info was found",async()=>{const a=new Uint8Array([1,2,3]),e=[{type:t.TRANSACTION_FIELD_DESCRIPTION,payload:"transaction_field"},{type:t.TOKEN,payload:"payload-1"},{type:t.ENUM,payload:"enum",id:1,value:2},{type:t.NFT,payload:"payload-2"}],o={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:a,type:0};c.mapTransactionToSubset.mockReturnValueOnce(T(o)),r.getContexts.mockResolvedValueOnce(e),n.getDeviceSessionState.mockReturnValueOnce({sessionStateType:d.ReadyWithoutSecureChannel,deviceStatus:u.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.14.0"},deviceModelId:p.FLEX,isSecureConnectionAllowed:!1});const s=await new y(n,l).run();expect(s).toEqual({clearSignContexts:[e[1],e[3]],serializedTransaction:a,chainId:1,transactionType:0})}),it("should exclude legacy contexts from the result for generic-parser transactions",async()=>{const a=new Uint8Array([1,2,3]),e=[{type:t.TOKEN,payload:"payload-1"},{type:t.TRANSACTION_INFO,payload:"payload-2",certificate:i},{type:t.EXTERNAL_PLUGIN,payload:"payload-3"},{type:t.TRANSACTION_FIELD_DESCRIPTION,payload:"payload-4"},{type:t.ENUM,payload:"payload-5",id:1,value:2,certificate:i}],o={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:a,type:2};c.mapTransactionToSubset.mockReturnValueOnce(T(o)),r.getContexts.mockResolvedValueOnce(e),n.getDeviceSessionState.mockReturnValueOnce({sessionStateType:d.ReadyWithoutSecureChannel,deviceStatus:u.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.15.0"},deviceModelId:p.FLEX,isSecureConnectionAllowed:!1});const s=await new y(n,l).run();expect(s).toEqual({clearSignContexts:{transactionInfo:"payload-2",transactionInfoCertificate:i,transactionFields:[e[3]],transactionEnums:[e[4]]},serializedTransaction:a,chainId:1,transactionType:2})}),it("should exclude generic-parser contexts with a nano s device",async()=>{const a=new Uint8Array([1,2,3]),e=[{type:t.TOKEN,payload:"payload-1"},{type:t.TRANSACTION_INFO,payload:"payload-2",certificate:i},{type:t.TRANSACTION_FIELD_DESCRIPTION,payload:"payload-3"},{type:t.ENUM,payload:"payload-4",id:1,value:2,certificate:i}],o={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:a,type:2};c.mapTransactionToSubset.mockReturnValueOnce(T(o)),r.getContexts.mockResolvedValueOnce(e),n.getDeviceSessionState.mockReturnValueOnce({sessionStateType:d.ReadyWithoutSecureChannel,deviceStatus:u.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.14.0"},deviceModelId:p.NANO_S,isSecureConnectionAllowed:!1});const s=await new y(n,{...l,challenge:null}).run();expect(s).toEqual({clearSignContexts:[e[0]],serializedTransaction:a,chainId:1,transactionType:2})}),it("should exclude generic-parser contexts with an old app version",async()=>{const a=new Uint8Array([1,2,3]),e=[{type:t.TOKEN,payload:"payload-1"},{type:t.TRANSACTION_INFO,payload:"payload-2",certificate:i},{type:t.TRANSACTION_FIELD_DESCRIPTION,payload:"payload-3"},{type:t.ENUM,payload:"payload-4",id:1,value:2,certificate:i}],o={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:a,type:2};c.mapTransactionToSubset.mockReturnValueOnce(T(o)),r.getContexts.mockResolvedValueOnce(e),n.getDeviceSessionState.mockReturnValueOnce({sessionStateType:d.ReadyWithoutSecureChannel,deviceStatus:u.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"},deviceModelId:p.FLEX,isSecureConnectionAllowed:!1});const s=await new y(n,{...l,challenge:null}).run();expect(s).toEqual({clearSignContexts:[e[0]],serializedTransaction:a,chainId:1,transactionType:2})}),it("should exclude generic-parser contexts with a non ready device",async()=>{const a=new Uint8Array([1,2,3]),e=[{type:t.TOKEN,payload:"payload-1"},{type:t.TRANSACTION_INFO,payload:"payload-2",certificate:i},{type:t.TRANSACTION_FIELD_DESCRIPTION,payload:"payload-3"},{type:t.ENUM,payload:"payload-4",id:1,value:2,certificate:i}],o={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:a,type:2};c.mapTransactionToSubset.mockReturnValueOnce(T(o)),r.getContexts.mockResolvedValueOnce(e),n.getDeviceSessionState.mockReturnValueOnce({sessionStateType:d.Connected,deviceStatus:u.NOT_CONNECTED,deviceModelId:p.FLEX});const s=await new y(n,{...l,challenge:null}).run();expect(s).toEqual({clearSignContexts:[e[0]],serializedTransaction:a,chainId:1,transactionType:2})}),it("should throw an error if the app is not ethereum compatible",async()=>{const a=new Uint8Array([1,2,3]),e=[{type:t.TRANSACTION_INFO,payload:"payload-1",certificate:i},{type:t.TRANSACTION_FIELD_DESCRIPTION,payload:"payload-2"},{type:t.ENUM,payload:"payload-3",id:1,value:2,certificate:i}],o={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:a,type:2};c.mapTransactionToSubset.mockReturnValueOnce(T(o)),r.getContexts.mockResolvedValueOnce(e),n.getDeviceSessionState.mockReturnValueOnce({sessionStateType:d.ReadyWithoutSecureChannel,deviceStatus:u.CONNECTED,installedApps:[],currentApp:{name:"Not Ethereum Compatible",version:"1.14.0"},deviceModelId:p.FLEX,isSecureConnectionAllowed:!1});const s=new y(n,l);await expect(s.run()).rejects.toThrow("Unsupported app")}),it("should return an error if the transaction info certificate is missing",async()=>{const a=new Uint8Array([1,2,3]),e=[{type:t.TRANSACTION_INFO,payload:"payload-1"},{type:t.TRANSACTION_FIELD_DESCRIPTION,payload:"payload-2"},{type:t.ENUM,payload:"payload-3",id:1,value:2}],o={subset:{chainId:1,to:void 0,data:"0x"},serializedTransaction:a,type:2};c.mapTransactionToSubset.mockReturnValueOnce(T(o)),r.getContexts.mockResolvedValueOnce(e),n.getDeviceSessionState.mockReturnValueOnce({sessionStateType:d.ReadyWithoutSecureChannel,deviceStatus:u.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.14.0"},deviceModelId:p.FLEX,isSecureConnectionAllowed:!1});const s=new y(n,l);await expect(s.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": ["ClearSignContextType", "DeviceSessionStateType", "DeviceStatus", "Transaction", "Left", "Right", "makeDeviceActionInternalApiMock", "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 getWeb3Checks: 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 isSecureConnectionAllowed: false,\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 isSecureConnectionAllowed: false,\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 isSecureConnectionAllowed: false,\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 isSecureConnectionAllowed: false,\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 isSecureConnectionAllowed: false,\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 isSecureConnectionAllowed: false,\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 isSecureConnectionAllowed: false,\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 isSecureConnectionAllowed: false,\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 isSecureConnectionAllowed: false,\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 isSecureConnectionAllowed: false,\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 isSecureConnectionAllowed: false,\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 isSecureConnectionAllowed: false,\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 isSecureConnectionAllowed: false,\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 isSecureConnectionAllowed: false,\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 isSecureConnectionAllowed: false,\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": "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",
6
+ "names": ["ClearSignContextType", "DeviceModelId", "DeviceSessionStateType", "DeviceStatus", "hexaStringToBuffer", "Transaction", "Left", "Right", "ETHEREUM_PLUGINS", "makeDeviceActionInternalApiMock", "BuildTransactionContextTask", "contextModuleMock", "mapperMock", "defaultOptions", "defaultTransaction", "defaultCertificate", "defaultArgs", "apiMock", "serializedTransaction", "clearSignContexts", "mapperResult", "result", "error", "task"]
7
7
  }
@@ -0,0 +1,2 @@
1
+ import{ClearSignContextType as h}from"@ledgerhq/context-module";import{bufferToHexaString as u,DeviceSessionStateType as k,isSuccessCommandResult as o}from"@ledgerhq/device-management-kit";import{gte as b}from"semver";import{GetAddressCommand as m}from"../../app-binder/command/GetAddressCommand";import{GetAppConfiguration as y}from"../../app-binder/command/GetAppConfigurationCommand";import{Web3CheckOptInCommand as g}from"../../app-binder/command/Web3CheckOptInCommand";class v{constructor(e,r){this.api=e;this.args=r}async run(){const e=this.api.getDeviceSessionState();if(!this.isSupported(e))return{web3Check:null};const r=await this.api.sendCommand(new y);if(!o(r))return{web3Check:null,error:r.error};let n=r.data.web3ChecksEnabled;if(!n&&!r.data.web3ChecksOptIn){const t=await this.api.sendCommand(new g);if(!o(t))return{web3Check:null,error:t.error};n=t.data.enabled}if(!n)return{web3Check:null};const s=await this.api.sendCommand(new m({derivationPath:this.args.derivationPath,checkOnDevice:!1,returnChainCode:!1}));if(!o(s))return{web3Check:null,error:s.error};const i=s.data.address,{deviceModelId:c}=e,{contextModule:p}=this.args;let a;if(this.isRawTx(this.args)){const t=this.args.mapper.mapTransactionToSubset(this.args.transaction);if(t.isRight()){const{subset:C,serializedTransaction:l}=t.extract(),d={deviceModelId:c,from:i,rawTx:u(l),chainId:C.chainId};a=await p.getWeb3Checks(d)}else throw t.extract()}else{const t={deviceModelId:c,from:i,data:this.args.data};a=await p.getWeb3Checks(t)}return a===null||a?.type!==h.WEB3_CHECK?{web3Check:null}:{web3Check:a}}isRawTx(e){return"transaction"in e}isSupported(e){return e.sessionStateType!==k.Connected&&e.currentApp.name==="Ethereum"&&b(e.currentApp.version,"1.16.0")}}export{v as GetWeb3CheckTask};
2
+ //# sourceMappingURL=GetWeb3CheckTask.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/internal/app-binder/task/GetWeb3CheckTask.ts"],
4
+ "sourcesContent": ["import {\n type ClearSignContext,\n type ClearSignContextSuccess,\n ClearSignContextType,\n type ContextModule,\n type Web3CheckContext,\n} from \"@ledgerhq/context-module\";\nimport {\n bufferToHexaString,\n type DeviceSessionState,\n DeviceSessionStateType,\n type DmkError,\n type InternalApi,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\nimport { gte } from \"semver\";\n\nimport { type TypedData } from \"@api/model/TypedData\";\nimport { GetAddressCommand } from \"@internal/app-binder/command/GetAddressCommand\";\nimport { GetAppConfiguration } from \"@internal/app-binder/command/GetAppConfigurationCommand\";\nimport { Web3CheckOptInCommand } from \"@internal/app-binder/command/Web3CheckOptInCommand\";\nimport { type TransactionMapperService } from \"@internal/transaction/service/mapper/TransactionMapperService\";\n\nexport type GetWeb3CheckTaskResult =\n | {\n readonly web3Check: ClearSignContextSuccess<ClearSignContextType.WEB3_CHECK> | null;\n }\n | {\n readonly web3Check: null;\n error: DmkError;\n };\n\nexport type GetWeb3CheckTypedDataTaskArgs = {\n readonly contextModule: ContextModule;\n readonly derivationPath: string;\n readonly data: TypedData;\n};\nexport type GetWeb3CheckRawTxTaskArgs = {\n readonly contextModule: ContextModule;\n readonly derivationPath: string;\n readonly mapper: TransactionMapperService;\n readonly transaction: Uint8Array;\n};\nexport type GetWeb3CheckTaskArgs =\n | GetWeb3CheckTypedDataTaskArgs\n | GetWeb3CheckRawTxTaskArgs;\n\nexport class GetWeb3CheckTask {\n constructor(\n private readonly api: InternalApi,\n private readonly args: GetWeb3CheckTaskArgs,\n ) {}\n\n async run(): Promise<GetWeb3CheckTaskResult> {\n // Early return on old applications\n const sessionState = this.api.getDeviceSessionState();\n if (!this.isSupported(sessionState)) {\n return {\n web3Check: null,\n };\n }\n\n // Get app configuration\n const configResult = await this.api.sendCommand(new GetAppConfiguration());\n if (!isSuccessCommandResult(configResult)) {\n return {\n web3Check: null,\n error: configResult.error,\n };\n }\n let web3ChecksEnabled = configResult.data.web3ChecksEnabled;\n\n // If feature is disabled and opt-in was not done, trigger it on the device\n if (!web3ChecksEnabled && !configResult.data.web3ChecksOptIn) {\n const web3CheckStatus = await this.api.sendCommand(\n new Web3CheckOptInCommand(),\n );\n if (!isSuccessCommandResult(web3CheckStatus)) {\n return {\n web3Check: null,\n error: web3CheckStatus.error,\n };\n }\n web3ChecksEnabled = web3CheckStatus.data.enabled;\n }\n\n // Only do Web3 Check if it is activated\n if (!web3ChecksEnabled) {\n return {\n web3Check: null,\n };\n }\n\n // Get sender address\n const getAddressResult = await this.api.sendCommand(\n new GetAddressCommand({\n derivationPath: this.args.derivationPath,\n checkOnDevice: false,\n returnChainCode: false,\n }),\n );\n if (!isSuccessCommandResult(getAddressResult)) {\n return {\n web3Check: null,\n error: getAddressResult.error,\n };\n }\n\n const address = getAddressResult.data.address;\n const { deviceModelId } = sessionState;\n const { contextModule } = this.args;\n let web3CheckContext: ClearSignContext | null;\n\n if (this.isRawTx(this.args)) {\n // Transaction simulation\n const parsed = this.args.mapper.mapTransactionToSubset(\n this.args.transaction,\n );\n if (parsed.isRight()) {\n const { subset, serializedTransaction } = parsed.extract();\n const web3Params: Web3CheckContext = {\n deviceModelId,\n from: address,\n rawTx: bufferToHexaString(serializedTransaction),\n chainId: subset.chainId,\n };\n web3CheckContext = await contextModule.getWeb3Checks(web3Params);\n } else {\n throw parsed.extract();\n }\n } else {\n // Typed data simulation\n const web3Params: Web3CheckContext = {\n deviceModelId,\n from: address,\n data: this.args.data,\n };\n web3CheckContext = await contextModule.getWeb3Checks(web3Params);\n }\n\n if (\n web3CheckContext === null ||\n web3CheckContext?.type !== ClearSignContextType.WEB3_CHECK\n ) {\n return {\n web3Check: null,\n };\n }\n\n return {\n web3Check: web3CheckContext,\n };\n }\n\n private isRawTx(\n args: GetWeb3CheckTaskArgs,\n ): args is GetWeb3CheckRawTxTaskArgs {\n return \"transaction\" in args;\n }\n\n private isSupported(deviceState: DeviceSessionState): boolean {\n return (\n deviceState.sessionStateType !== DeviceSessionStateType.Connected &&\n deviceState.currentApp.name === \"Ethereum\" &&\n gte(deviceState.currentApp.version, \"1.16.0\")\n );\n }\n}\n"],
5
+ "mappings": "AAAA,OAGE,wBAAAA,MAGK,2BACP,OACE,sBAAAC,EAEA,0BAAAC,EAGA,0BAAAC,MACK,kCACP,OAAS,OAAAC,MAAW,SAGpB,OAAS,qBAAAC,MAAyB,iDAClC,OAAS,uBAAAC,MAA2B,0DACpC,OAAS,yBAAAC,MAA6B,qDA2B/B,MAAMC,CAAiB,CAC5B,YACmBC,EACAC,EACjB,CAFiB,SAAAD,EACA,UAAAC,CAChB,CAEH,MAAM,KAAuC,CAE3C,MAAMC,EAAe,KAAK,IAAI,sBAAsB,EACpD,GAAI,CAAC,KAAK,YAAYA,CAAY,EAChC,MAAO,CACL,UAAW,IACb,EAIF,MAAMC,EAAe,MAAM,KAAK,IAAI,YAAY,IAAIN,CAAqB,EACzE,GAAI,CAACH,EAAuBS,CAAY,EACtC,MAAO,CACL,UAAW,KACX,MAAOA,EAAa,KACtB,EAEF,IAAIC,EAAoBD,EAAa,KAAK,kBAG1C,GAAI,CAACC,GAAqB,CAACD,EAAa,KAAK,gBAAiB,CAC5D,MAAME,EAAkB,MAAM,KAAK,IAAI,YACrC,IAAIP,CACN,EACA,GAAI,CAACJ,EAAuBW,CAAe,EACzC,MAAO,CACL,UAAW,KACX,MAAOA,EAAgB,KACzB,EAEFD,EAAoBC,EAAgB,KAAK,OAC3C,CAGA,GAAI,CAACD,EACH,MAAO,CACL,UAAW,IACb,EAIF,MAAME,EAAmB,MAAM,KAAK,IAAI,YACtC,IAAIV,EAAkB,CACpB,eAAgB,KAAK,KAAK,eAC1B,cAAe,GACf,gBAAiB,EACnB,CAAC,CACH,EACA,GAAI,CAACF,EAAuBY,CAAgB,EAC1C,MAAO,CACL,UAAW,KACX,MAAOA,EAAiB,KAC1B,EAGF,MAAMC,EAAUD,EAAiB,KAAK,QAChC,CAAE,cAAAE,CAAc,EAAIN,EACpB,CAAE,cAAAO,CAAc,EAAI,KAAK,KAC/B,IAAIC,EAEJ,GAAI,KAAK,QAAQ,KAAK,IAAI,EAAG,CAE3B,MAAMC,EAAS,KAAK,KAAK,OAAO,uBAC9B,KAAK,KAAK,WACZ,EACA,GAAIA,EAAO,QAAQ,EAAG,CACpB,KAAM,CAAE,OAAAC,EAAQ,sBAAAC,CAAsB,EAAIF,EAAO,QAAQ,EACnDG,EAA+B,CACnC,cAAAN,EACA,KAAMD,EACN,MAAOf,EAAmBqB,CAAqB,EAC/C,QAASD,EAAO,OAClB,EACAF,EAAmB,MAAMD,EAAc,cAAcK,CAAU,CACjE,KACE,OAAMH,EAAO,QAAQ,CAEzB,KAAO,CAEL,MAAMG,EAA+B,CACnC,cAAAN,EACA,KAAMD,EACN,KAAM,KAAK,KAAK,IAClB,EACAG,EAAmB,MAAMD,EAAc,cAAcK,CAAU,CACjE,CAEA,OACEJ,IAAqB,MACrBA,GAAkB,OAASnB,EAAqB,WAEzC,CACL,UAAW,IACb,EAGK,CACL,UAAWmB,CACb,CACF,CAEQ,QACNT,EACmC,CACnC,MAAO,gBAAiBA,CAC1B,CAEQ,YAAYc,EAA0C,CAC5D,OACEA,EAAY,mBAAqBtB,EAAuB,WACxDsB,EAAY,WAAW,OAAS,YAChCpB,EAAIoB,EAAY,WAAW,QAAS,QAAQ,CAEhD,CACF",
6
+ "names": ["ClearSignContextType", "bufferToHexaString", "DeviceSessionStateType", "isSuccessCommandResult", "gte", "GetAddressCommand", "GetAppConfiguration", "Web3CheckOptInCommand", "GetWeb3CheckTask", "api", "args", "sessionState", "configResult", "web3ChecksEnabled", "web3CheckStatus", "getAddressResult", "address", "deviceModelId", "contextModule", "web3CheckContext", "parsed", "subset", "serializedTransaction", "web3Params", "deviceState"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{CommandResultFactory as o,DeviceModelId as i,DeviceSessionStateType as m,DeviceStatus as k,InvalidStatusWordError as d}from"@ledgerhq/device-management-kit";import{Left as p,Right as u}from"purify-ts";import{makeDeviceActionInternalApiMock as w}from"../../app-binder/device-action/__test-utils__/makeInternalApi";import{GetWeb3CheckTask as r}from"../../app-binder/task/GetWeb3CheckTask";describe("GetWeb3CheckTask",()=>{const e=w(),t={getWeb3Checks:vi.fn()},a={mapTransactionToSubset:vi.fn()},c=new Uint8Array([1,2,3,4]),s="44'/60'/0'/0/0";describe("old apps",()=>{beforeEach(()=>{vi.clearAllMocks(),e.getDeviceSessionState.mockReturnValueOnce({sessionStateType:m.ReadyWithoutSecureChannel,deviceStatus:k.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.15.0"},deviceModelId:i.FLEX,isSecureConnectionAllowed:!0})}),it("should return null on old applications",async()=>{a.mapTransactionToSubset.mockReturnValue(u({subset:{},serializedTransaction:new Uint8Array})),e.sendCommand.mockResolvedValue(o({data:{web3ChecksEnabled:!0,web3ChecksOptIn:!0}})),t.getWeb3Checks.mockResolvedValue({type:"web3Check",id:1});const n=await new r(e,{contextModule:t,mapper:a,transaction:c,derivationPath:s}).run();expect(n).toEqual({web3Check:null})})}),describe("run",()=>{beforeEach(()=>{vi.clearAllMocks(),e.getDeviceSessionState.mockReturnValueOnce({sessionStateType:m.ReadyWithoutSecureChannel,deviceStatus:k.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.16.0"},deviceModelId:i.FLEX,isSecureConnectionAllowed:!0})}),describe("errors",()=>{it("should throw an error if mapTransactionToSubset assert.fails",async()=>{const n=new Error("error");e.sendCommand.mockResolvedValueOnce(o({data:{web3ChecksEnabled:!0,web3ChecksOptIn:!0}})),e.sendCommand.mockResolvedValueOnce(o({data:{address:"address"}})),a.mapTransactionToSubset.mockReturnValue(p(n));try{await new r(e,{contextModule:t,mapper:a,transaction:c,derivationPath:s}).run(),assert.fail("should throw an error")}catch(l){expect(l).toEqual(n)}}),it("should return a context error if GetAppConfiguration assert.fails",async()=>{a.mapTransactionToSubset.mockReturnValue(u({subset:{},serializedTransaction:new Uint8Array})),e.sendCommand.mockResolvedValue(o({error:new d("error")}));const n=await new r(e,{contextModule:t,mapper:a,transaction:c,derivationPath:s}).run();expect(n).toEqual({web3Check:null,error:new d("error")})}),it("should return a context error if Web3CheckOptInCommand assert.fails",async()=>{a.mapTransactionToSubset.mockReturnValue(u({subset:{},serializedTransaction:new Uint8Array})),e.sendCommand.mockResolvedValueOnce(o({data:{web3ChecksEnabled:!1,web3ChecksOptIn:!1}})),e.sendCommand.mockResolvedValue(o({error:new d("error")}));const n=await new r(e,{contextModule:t,mapper:a,transaction:c,derivationPath:s}).run();expect(n).toEqual({web3Check:null,error:new d("error")})}),it("should return a context error if GetAddressCommand assert.fails",async()=>{a.mapTransactionToSubset.mockReturnValue(u({subset:{},serializedTransaction:new Uint8Array})),e.sendCommand.mockResolvedValueOnce(o({data:{web3ChecksEnabled:!0,web3ChecksOptIn:!0}})),e.sendCommand.mockResolvedValueOnce(o({error:new d("error")}));const n=await new r(e,{contextModule:t,mapper:a,transaction:c,derivationPath:s}).run();expect(n).toEqual({web3Check:null,error:new d("error")})}),it("should return null if the type is not a ClearSignContextSuccess web3check",async()=>{a.mapTransactionToSubset.mockReturnValue(u({subset:{},serializedTransaction:new Uint8Array})),e.sendCommand.mockResolvedValueOnce(o({data:{web3ChecksEnabled:!0,web3ChecksOptIn:!0}})),e.sendCommand.mockResolvedValueOnce(o({data:{address:"address"}})),t.getWeb3Checks.mockResolvedValue({type:"invalid-type",id:1});const n=await new r(e,{contextModule:t,mapper:a,transaction:c,derivationPath:s}).run();expect(n).toEqual({web3Check:null})})}),describe("success",()=>{it("should return null if web3ChecksEnabled is false",async()=>{a.mapTransactionToSubset.mockReturnValue(u({subset:{},serializedTransaction:new Uint8Array})),e.sendCommand.mockResolvedValue(o({data:{web3ChecksEnabled:!1,web3ChecksOptIn:!0}}));const n=await new r(e,{contextModule:t,mapper:a,transaction:c,derivationPath:s}).run();expect(n).toEqual({web3Check:null})}),it("should return null if the context module does not have a web3 check",async()=>{a.mapTransactionToSubset.mockReturnValue(u({subset:{},serializedTransaction:new Uint8Array})),e.sendCommand.mockResolvedValue(o({data:{web3ChecksEnabled:!0,web3ChecksOptIn:!0}})),t.getWeb3Checks.mockResolvedValue(null);const n=await new r(e,{contextModule:t,mapper:a,transaction:c,derivationPath:s}).run();expect(n).toEqual({web3Check:null})}),it("should return a web3 check",async()=>{const n={type:"web3Check",id:1};a.mapTransactionToSubset.mockReturnValue(u({subset:{},serializedTransaction:new Uint8Array})),e.sendCommand.mockResolvedValue(o({data:{web3ChecksEnabled:!0,web3ChecksOptIn:!0}})),t.getWeb3Checks.mockResolvedValue(n);const l=await new r(e,{contextModule:t,mapper:a,transaction:c,derivationPath:s}).run();expect(l).toEqual({web3Check:n})}),it("should opt-in and then return the web3check",async()=>{const n={type:"web3Check",id:1};a.mapTransactionToSubset.mockReturnValue(u({subset:{},serializedTransaction:new Uint8Array})),e.sendCommand.mockResolvedValueOnce(o({data:{web3ChecksEnabled:!1,web3ChecksOptIn:!1}})),e.sendCommand.mockResolvedValueOnce(o({data:{enabled:!0}})),t.getWeb3Checks.mockResolvedValue(n);const l=await new r(e,{contextModule:t,mapper:a,transaction:c,derivationPath:s}).run();expect(l).toEqual({web3Check:n})}),it("should opt-in and then return a null if disabled",async()=>{const n={type:"web3Check",id:1};a.mapTransactionToSubset.mockReturnValue(u({subset:{},serializedTransaction:new Uint8Array})),e.sendCommand.mockResolvedValueOnce(o({data:{web3ChecksEnabled:!1,web3ChecksOptIn:!1}})),e.sendCommand.mockResolvedValueOnce(o({data:{enabled:!1}})),t.getWeb3Checks.mockResolvedValue(n);const l=await new r(e,{contextModule:t,mapper:a,transaction:c,derivationPath:s}).run();expect(l).toEqual({web3Check:null})}),it("should return a web3 check for typed data",async()=>{const n={type:"web3Check",id:1};e.sendCommand.mockResolvedValue(o({data:{web3ChecksEnabled:!0,web3ChecksOptIn:!0}})),t.getWeb3Checks.mockResolvedValue(n);const l=await new r(e,{contextModule:t,data:"typed data",derivationPath:s}).run();expect(l).toEqual({web3Check:n})}),it("should call the context module with the right parameters",async()=>{a.mapTransactionToSubset.mockReturnValue(u({subset:{chainId:15,from:"from"},serializedTransaction:new Uint8Array([1,2,3])})),e.sendCommand.mockResolvedValueOnce(o({data:{web3ChecksEnabled:!0,web3ChecksOptIn:!0}})),e.sendCommand.mockResolvedValueOnce(o({data:{address:"address"}})),t.getWeb3Checks.mockResolvedValue(null),await new r(e,{contextModule:t,mapper:a,transaction:c,derivationPath:s}).run(),expect(t.getWeb3Checks).toHaveBeenCalledWith({deviceModelId:i.FLEX,from:"address",rawTx:"0x010203",chainId:15})})})})});
2
+ //# sourceMappingURL=GetWeb3CheckTask.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/internal/app-binder/task/GetWeb3CheckTask.test.ts"],
4
+ "sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n CommandResultFactory,\n DeviceModelId,\n DeviceSessionStateType,\n DeviceStatus,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { type TypedData } from \"@api/model/TypedData\";\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\nimport { GetWeb3CheckTask } from \"@internal/app-binder/task/GetWeb3CheckTask\";\nimport { type TransactionMapperService } from \"@internal/transaction/service/mapper/TransactionMapperService\";\n\ndescribe(\"GetWeb3CheckTask\", () => {\n const apiMock = makeDeviceActionInternalApiMock();\n const contextModuleMock = {\n getWeb3Checks: vi.fn(),\n };\n const mapperMock = {\n mapTransactionToSubset: vi.fn(),\n };\n const transaction = new Uint8Array([0x01, 0x02, 0x03, 0x04]);\n const derivationPath = \"44'/60'/0'/0/0\";\n\n describe(\"old apps\", () => {\n beforeEach(() => {\n vi.clearAllMocks();\n\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 isSecureConnectionAllowed: true,\n });\n });\n\n it(\"should return null on old applications\", async () => {\n // GIVEN\n mapperMock.mapTransactionToSubset.mockReturnValue(\n Right({ subset: {}, serializedTransaction: new Uint8Array() }),\n );\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({\n data: { web3ChecksEnabled: true, web3ChecksOptIn: true },\n }),\n );\n contextModuleMock.getWeb3Checks.mockResolvedValue({\n type: \"web3Check\",\n id: 1,\n });\n\n // WHEN\n const result = await new GetWeb3CheckTask(apiMock, {\n contextModule: contextModuleMock as unknown as ContextModule,\n mapper: mapperMock as unknown as TransactionMapperService,\n transaction,\n derivationPath,\n }).run();\n\n // THEN\n expect(result).toEqual({\n web3Check: null,\n });\n });\n });\n\n describe(\"run\", () => {\n beforeEach(() => {\n vi.clearAllMocks();\n\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.16.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: true,\n });\n });\n\n describe(\"errors\", () => {\n it(\"should throw an error if mapTransactionToSubset assert.fails\", async () => {\n // GIVEN\n const error = new Error(\"error\");\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n data: { web3ChecksEnabled: true, web3ChecksOptIn: true },\n }),\n );\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({ data: { address: \"address\" } }),\n );\n mapperMock.mapTransactionToSubset.mockReturnValue(Left(error));\n\n // WHEN\n try {\n await new GetWeb3CheckTask(apiMock, {\n contextModule: contextModuleMock as unknown as ContextModule,\n mapper: mapperMock as unknown as TransactionMapperService,\n transaction,\n derivationPath,\n }).run();\n assert.fail(\"should throw an error\");\n } catch (e) {\n // THEN\n expect(e).toEqual(error);\n }\n });\n\n it(\"should return a context error if GetAppConfiguration assert.fails\", async () => {\n // GIVEN\n mapperMock.mapTransactionToSubset.mockReturnValue(\n Right({ subset: {}, serializedTransaction: new Uint8Array() }),\n );\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ error: new InvalidStatusWordError(\"error\") }),\n );\n\n // WHEN\n const result = await new GetWeb3CheckTask(apiMock, {\n contextModule: contextModuleMock as unknown as ContextModule,\n mapper: mapperMock as unknown as TransactionMapperService,\n transaction,\n derivationPath,\n }).run();\n\n // THEN\n expect(result).toEqual({\n web3Check: null,\n error: new InvalidStatusWordError(\"error\"),\n });\n });\n\n it(\"should return a context error if Web3CheckOptInCommand assert.fails\", async () => {\n // GIVEN\n mapperMock.mapTransactionToSubset.mockReturnValue(\n Right({ subset: {}, serializedTransaction: new Uint8Array() }),\n );\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n data: { web3ChecksEnabled: false, web3ChecksOptIn: false },\n }),\n );\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ error: new InvalidStatusWordError(\"error\") }),\n );\n\n // WHEN\n const result = await new GetWeb3CheckTask(apiMock, {\n contextModule: contextModuleMock as unknown as ContextModule,\n mapper: mapperMock as unknown as TransactionMapperService,\n transaction,\n derivationPath,\n }).run();\n\n // THEN\n expect(result).toEqual({\n web3Check: null,\n error: new InvalidStatusWordError(\"error\"),\n });\n });\n\n it(\"should return a context error if GetAddressCommand assert.fails\", async () => {\n // GIVEN\n mapperMock.mapTransactionToSubset.mockReturnValue(\n Right({ subset: {}, serializedTransaction: new Uint8Array() }),\n );\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n data: { web3ChecksEnabled: true, web3ChecksOptIn: true },\n }),\n );\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({ error: new InvalidStatusWordError(\"error\") }),\n );\n\n // WHEN\n const result = await new GetWeb3CheckTask(apiMock, {\n contextModule: contextModuleMock as unknown as ContextModule,\n mapper: mapperMock as unknown as TransactionMapperService,\n transaction,\n derivationPath,\n }).run();\n\n // THEN\n expect(result).toEqual({\n web3Check: null,\n error: new InvalidStatusWordError(\"error\"),\n });\n });\n\n it(\"should return null if the type is not a ClearSignContextSuccess web3check\", async () => {\n // GIVEN\n mapperMock.mapTransactionToSubset.mockReturnValue(\n Right({ subset: {}, serializedTransaction: new Uint8Array() }),\n );\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n data: { web3ChecksEnabled: true, web3ChecksOptIn: true },\n }),\n );\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({ data: { address: \"address\" } }),\n );\n contextModuleMock.getWeb3Checks.mockResolvedValue({\n type: \"invalid-type\",\n id: 1,\n });\n\n // WHEN\n const result = await new GetWeb3CheckTask(apiMock, {\n contextModule: contextModuleMock as unknown as ContextModule,\n mapper: mapperMock as unknown as TransactionMapperService,\n transaction,\n derivationPath,\n }).run();\n\n // THEN\n expect(result).toEqual({\n web3Check: null,\n });\n });\n });\n\n describe(\"success\", () => {\n it(\"should return null if web3ChecksEnabled is false\", async () => {\n // GIVEN\n mapperMock.mapTransactionToSubset.mockReturnValue(\n Right({ subset: {}, serializedTransaction: new Uint8Array() }),\n );\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({\n data: { web3ChecksEnabled: false, web3ChecksOptIn: true },\n }),\n );\n\n // WHEN\n const result = await new GetWeb3CheckTask(apiMock, {\n contextModule: contextModuleMock as unknown as ContextModule,\n mapper: mapperMock as unknown as TransactionMapperService,\n transaction,\n derivationPath,\n }).run();\n\n // THEN\n expect(result).toEqual({\n web3Check: null,\n });\n });\n\n it(\"should return null if the context module does not have a web3 check\", async () => {\n // GIVEN\n mapperMock.mapTransactionToSubset.mockReturnValue(\n Right({ subset: {}, serializedTransaction: new Uint8Array() }),\n );\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({\n data: { web3ChecksEnabled: true, web3ChecksOptIn: true },\n }),\n );\n contextModuleMock.getWeb3Checks.mockResolvedValue(null);\n\n // WHEN\n const result = await new GetWeb3CheckTask(apiMock, {\n contextModule: contextModuleMock as unknown as ContextModule,\n mapper: mapperMock as unknown as TransactionMapperService,\n transaction,\n derivationPath,\n }).run();\n\n // THEN\n expect(result).toEqual({\n web3Check: null,\n });\n });\n\n it(\"should return a web3 check\", async () => {\n // GIVEN\n const web3Check = { type: \"web3Check\", id: 1 };\n mapperMock.mapTransactionToSubset.mockReturnValue(\n Right({ subset: {}, serializedTransaction: new Uint8Array() }),\n );\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({\n data: { web3ChecksEnabled: true, web3ChecksOptIn: true },\n }),\n );\n contextModuleMock.getWeb3Checks.mockResolvedValue(web3Check);\n\n // WHEN\n const result = await new GetWeb3CheckTask(apiMock, {\n contextModule: contextModuleMock as unknown as ContextModule,\n mapper: mapperMock as unknown as TransactionMapperService,\n transaction,\n derivationPath,\n }).run();\n\n // THEN\n expect(result).toEqual({\n web3Check,\n });\n });\n\n it(\"should opt-in and then return the web3check\", async () => {\n // GIVEN\n const web3Check = { type: \"web3Check\", id: 1 };\n mapperMock.mapTransactionToSubset.mockReturnValue(\n Right({ subset: {}, serializedTransaction: new Uint8Array() }),\n );\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n data: { web3ChecksEnabled: false, web3ChecksOptIn: false },\n }),\n );\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({ data: { enabled: true } }),\n );\n contextModuleMock.getWeb3Checks.mockResolvedValue(web3Check);\n\n // WHEN\n const result = await new GetWeb3CheckTask(apiMock, {\n contextModule: contextModuleMock as unknown as ContextModule,\n mapper: mapperMock as unknown as TransactionMapperService,\n transaction,\n derivationPath,\n }).run();\n\n // THEN\n expect(result).toEqual({\n web3Check,\n });\n });\n\n it(\"should opt-in and then return a null if disabled\", async () => {\n // GIVEN\n const web3Check = { type: \"web3Check\", id: 1 };\n mapperMock.mapTransactionToSubset.mockReturnValue(\n Right({ subset: {}, serializedTransaction: new Uint8Array() }),\n );\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n data: { web3ChecksEnabled: false, web3ChecksOptIn: false },\n }),\n );\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({ data: { enabled: false } }),\n );\n contextModuleMock.getWeb3Checks.mockResolvedValue(web3Check);\n\n // WHEN\n const result = await new GetWeb3CheckTask(apiMock, {\n contextModule: contextModuleMock as unknown as ContextModule,\n mapper: mapperMock as unknown as TransactionMapperService,\n transaction,\n derivationPath,\n }).run();\n\n // THEN\n expect(result).toEqual({\n web3Check: null,\n });\n });\n\n it(\"should return a web3 check for typed data\", async () => {\n // GIVEN\n const web3Check = { type: \"web3Check\", id: 1 };\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({\n data: { web3ChecksEnabled: true, web3ChecksOptIn: true },\n }),\n );\n contextModuleMock.getWeb3Checks.mockResolvedValue(web3Check);\n\n // WHEN\n const result = await new GetWeb3CheckTask(apiMock, {\n contextModule: contextModuleMock as unknown as ContextModule,\n data: \"typed data\" as unknown as TypedData,\n derivationPath,\n }).run();\n\n // THEN\n expect(result).toEqual({\n web3Check,\n });\n });\n\n it(\"should call the context module with the right parameters\", async () => {\n // GIVEN\n mapperMock.mapTransactionToSubset.mockReturnValue(\n Right({\n subset: { chainId: 15, from: \"from\" },\n serializedTransaction: new Uint8Array([0x01, 0x02, 0x03]),\n }),\n );\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n data: { web3ChecksEnabled: true, web3ChecksOptIn: true },\n }),\n );\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({ data: { address: \"address\" } }),\n );\n contextModuleMock.getWeb3Checks.mockResolvedValue(null);\n\n // WHEN\n await new GetWeb3CheckTask(apiMock, {\n contextModule: contextModuleMock as unknown as ContextModule,\n mapper: mapperMock as unknown as TransactionMapperService,\n transaction,\n derivationPath,\n }).run();\n\n // THEN\n expect(contextModuleMock.getWeb3Checks).toHaveBeenCalledWith({\n deviceModelId: DeviceModelId.FLEX,\n from: \"address\",\n rawTx: \"0x010203\",\n chainId: 15,\n });\n });\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["CommandResultFactory", "DeviceModelId", "DeviceSessionStateType", "DeviceStatus", "InvalidStatusWordError", "Left", "Right", "makeDeviceActionInternalApiMock", "GetWeb3CheckTask", "apiMock", "contextModuleMock", "mapperMock", "transaction", "derivationPath", "result", "error", "e", "web3Check"]
7
+ }
@@ -1,2 +1,2 @@
1
- import{VERIFYING_CONTRACT_TOKEN_INDEX as x}from"@ledgerhq/context-module";import{CommandResultFactory as w,isSuccessCommandResult as i}from"@ledgerhq/device-management-kit";import{Maybe as g,Nothing as l}from"purify-ts";import{ProvideTokenInformationCommand as S}from"../../app-binder/command/ProvideTokenInformationCommand";import{Eip712FilterType as o,SendEIP712FilteringCommand as m}from"../../app-binder/command/SendEIP712FilteringCommand";import{SendEIP712StructDefinitionCommand as C,StructDefinitionCommand as h}from"../../app-binder/command/SendEIP712StructDefinitionCommand";import{StructImplemType as c}from"../../app-binder/command/SendEIP712StructImplemCommand";import{SendEIP712StructImplemTask as y}from"../../app-binder/task/SendEIP712StructImplemTask";import{TypedDataValueArray as I,TypedDataValueRoot as k}from"../../typed-data/model/Types";const T=5;class J{constructor(e,t){this.api=e;this.args=t}async run(){let e=w({data:void 0});const t=Object.entries(this.args.types).sort(([n],[r])=>n.localeCompare(r));for(const[n,r]of t){if(e=await this.api.sendCommand(new C({command:h.Name,name:n})),!i(e))return e;for(const[s,d]of Object.entries(r))if(e=await this.api.sendCommand(new C({command:h.Field,name:s,type:d})),!i(e))return e}if(this.args.clearSignContext.isJust()&&(e=await this.api.sendCommand(new m({type:o.Activation})),!i(e)))return e;for(const n of this.args.domain)if(e=await this.getImplementationTask(n).run(),!i(e))return e;if(this.args.clearSignContext.isJust()&&(e=await this.api.sendCommand(new m({type:o.MessageInfo,displayName:this.args.clearSignContext.extract().messageInfo.displayName,filtersCount:this.args.clearSignContext.extract().messageInfo.filtersCount,signature:this.args.clearSignContext.extract().messageInfo.signature})),!i(e)))return e;const a={indexes:{},nextIndex:0};for(const n of this.args.message){const r=await this.provideTokenInformation(n,a);if(r.isJust())return r.extract();const s=await this.filterValue(n,a);if(s.isJust()&&!i(s.extract()))return s.extract();if(e=await this.getImplementationTask(n).run(),!i(e))return e;if(this.args.clearSignContext.isJust()&&n.value instanceof I&&n.value.length===0){const p=Object.entries(this.args.clearSignContext.extract().filters).filter(([u,f])=>u.startsWith(`${n.path}.[]`)).map(([u,f])=>f);for(const u of p)if(e=await this.api.sendCommand(new m({type:o.DiscardedPath,path:u.path})),!i(e)||(e=await this.provideFiltering(u,a,!0),!i(e)))return e}}return e}getImplementationTask(e){return e.value instanceof k?new y(this.api,{type:c.ROOT,value:e.value.root}):e.value instanceof I?new y(this.api,{type:c.ARRAY,value:e.value.length}):new y(this.api,{type:c.FIELD,value:e.value.data})}async provideTokenInformation(e,t){if(this.args.clearSignContext.isJust()){const a=this.args.clearSignContext.extract().filters[e.path];if(a!==void 0&&(a.type==="amount"||a.type==="token")&&t.indexes[a.tokenIndex]===void 0){const n=a.tokenIndex,s=this.args.clearSignContext.extract().tokens[n];if(s===void 0)return l;const d=await this.api.sendCommand(new S({payload:s}));if(!i(d))return g.of(d);let{tokenIndex:p}=d.data;t.nextIndex=(p+1)%T,Number(n)===x&&(p=x),t.indexes[Number(n)]=p}}return l}async filterValue(e,t){if(this.args.clearSignContext.isJust()){const a=this.args.clearSignContext.extract().filters[e.path];return a===void 0?l:g.of(await this.provideFiltering(a,t,!1))}return l}async provideFiltering(e,t,a){switch(e.type){case"datetime":return await this.api.sendCommand(new m({type:o.Datetime,discarded:a,displayName:e.displayName,signature:e.signature}));case"raw":return await this.api.sendCommand(new m({type:o.Raw,discarded:a,displayName:e.displayName,signature:e.signature}));case"token":return this.sanitizeDeviceIndex(e.tokenIndex,t),await this.api.sendCommand(new m({type:o.Token,discarded:a,tokenIndex:t.indexes[e.tokenIndex],signature:e.signature}));case"amount":return this.sanitizeDeviceIndex(e.tokenIndex,t),await this.api.sendCommand(new m({type:o.Amount,discarded:a,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)%T)}}export{J as ProvideEIP712ContextTask};
1
+ import{VERIFYING_CONTRACT_TOKEN_INDEX as h}from"@ledgerhq/context-module";import{CommandResultFactory as x,InvalidStatusWordError as v,isSuccessCommandResult as r,LoadCertificateCommand as D}from"@ledgerhq/device-management-kit";import{Maybe as I,Nothing as c}from"purify-ts";import{ProvideTokenInformationCommand as R}from"../../app-binder/command/ProvideTokenInformationCommand";import{ProvideWeb3CheckCommand as A}from"../../app-binder/command/ProvideWeb3CheckCommand";import{Eip712FilterType as m,SendEIP712FilteringCommand as d}from"../../app-binder/command/SendEIP712FilteringCommand";import{SendEIP712StructDefinitionCommand as T,StructDefinitionCommand as k}from"../../app-binder/command/SendEIP712StructDefinitionCommand";import{StructImplemType as y}from"../../app-binder/command/SendEIP712StructImplemCommand";import{SendEIP712StructImplemTask as f}from"../../app-binder/task/SendEIP712StructImplemTask";import{TypedDataValueArray as S,TypedDataValueRoot as P}from"../../typed-data/model/Types";import{SendPayloadInChunksTask as b}from"./SendPayloadInChunksTask";const w=5;class K{constructor(e,a){this.api=e;this.args=a}async run(){this.args.web3Check&&(this.args.web3Check.certificate&&await this.api.sendCommand(new D({keyUsage:this.args.web3Check.certificate.keyUsageNumber,certificate:this.args.web3Check.certificate.payload})),await new b(this.api,{payload:this.args.web3Check.payload,commandFactory:t=>new A({payload:t.chunkedData,isFirstChunk:t.isFirstChunk})}).run());const e=x({data:void 0}),a=Object.entries(this.args.types).sort(([t],[i])=>t.localeCompare(i));for(const[t,i]of a){const s=await this.api.sendCommand(new T({command:k.Name,name:t}));if(!r(s))return s;for(const[p,o]of Object.entries(i)){const u=await this.api.sendCommand(new T({command:k.Field,name:p,type:o}));if(!r(u))return u}}if(this.args.clearSignContext.isJust()){const t=await this.api.sendCommand(new d({type:m.Activation}));if(!r(t))return t}for(const t of this.args.domain){const s=await this.getImplementationTask(t).run();if(!r(s))return s}if(this.args.clearSignContext.isJust()){const t=this.args.clearSignContext.extract(),i=await this.api.sendCommand(new d({type:m.MessageInfo,displayName:t.messageInfo.displayName,filtersCount:t.messageInfo.filtersCount,signature:t.messageInfo.signature}));if(!r(i))return i}const n={indexes:{},nextIndex:0};for(const t of this.args.message){const i=await this.provideTokenInformation(t,n);if(i.isJust())return i.extract();const s=await this.filterValue(t,n);if(s.isJust()&&!r(s.extract()))return s.extract();const o=await this.getImplementationTask(t).run();if(!r(o))return o;if(this.args.clearSignContext.isJust()&&t.value instanceof S&&t.value.length===0){const E=Object.entries(this.args.clearSignContext.extract().filters).filter(([l])=>l.startsWith(`${t.path}.[]`)).map(([,l])=>l);for(const l of E){const C=await this.api.sendCommand(new d({type:m.DiscardedPath,path:l.path}));if(!r(C))return C;const g=await this.provideFiltering(l,n,!0);if(!r(g))return g}}}return e}getImplementationTask(e){return e.value instanceof P?new f(this.api,{type:y.ROOT,value:e.value.root}):e.value instanceof S?new f(this.api,{type:y.ARRAY,value:e.value.length}):new f(this.api,{type:y.FIELD,value:e.value.data})}async provideTokenInformation(e,a){if(this.args.clearSignContext.isJust()){const n=this.args.clearSignContext.extract().filters[e.path];if(n!==void 0&&(n.type==="amount"||n.type==="token")&&a.indexes[n.tokenIndex]===void 0){const t=n.tokenIndex,s=this.args.clearSignContext.extract().tokens[t];if(s===void 0)return c;const p=await this.api.sendCommand(new R({payload:s}));if(!r(p))return I.of(p);let{tokenIndex:o}=p.data;a.nextIndex=(o+1)%w,Number(t)===h&&(o=h),a.indexes[Number(t)]=o}}return c}async filterValue(e,a){if(this.args.clearSignContext.isJust()){const n=this.args.clearSignContext.extract().filters[e.path];if(n===void 0)return c;const t=await this.provideFiltering(n,a,!1);return I.of(t)}return c}async provideFiltering(e,a,n){switch(e.type){case"datetime":return await this.api.sendCommand(new d({type:m.Datetime,discarded:n,displayName:e.displayName,signature:e.signature}));case"raw":return await this.api.sendCommand(new d({type:m.Raw,discarded:n,displayName:e.displayName,signature:e.signature}));case"token":return this.sanitizeDeviceIndex(e.tokenIndex,a),await this.api.sendCommand(new d({type:m.Token,discarded:n,tokenIndex:a.indexes[e.tokenIndex],signature:e.signature}));case"amount":return this.sanitizeDeviceIndex(e.tokenIndex,a),await this.api.sendCommand(new d({type:m.Amount,discarded:n,displayName:e.displayName,tokenIndex:a.indexes[e.tokenIndex],signature:e.signature}));default:return x({error:new v("ProvideEIP712ContextTask/provideFiltering - Unhandled filter type")})}}sanitizeDeviceIndex(e,a){a.indexes[e]===void 0&&(a.indexes[e]=a.nextIndex,a.nextIndex=(a.nextIndex+1)%w)}}export{K as 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": "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",
6
- "names": ["VERIFYING_CONTRACT_TOKEN_INDEX", "CommandResultFactory", "isSuccessCommandResult", "Maybe", "Nothing", "ProvideTokenInformationCommand", "Eip712FilterType", "SendEIP712FilteringCommand", "SendEIP712StructDefinitionCommand", "StructDefinitionCommand", "StructImplemType", "SendEIP712StructImplemTask", "TypedDataValueArray", "TypedDataValueRoot", "DEVICE_ASSETS_MAX", "ProvideEIP712ContextTask", "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 {\n type ClearSignContextSuccess,\n type ClearSignContextType,\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 LoadCertificateCommand,\n} from \"@ledgerhq/device-management-kit\";\nimport { Maybe, Nothing } from \"purify-ts\";\n\nimport { ProvideTokenInformationCommand } from \"@internal/app-binder/command/ProvideTokenInformationCommand\";\nimport { ProvideWeb3CheckCommand } from \"@internal/app-binder/command/ProvideWeb3CheckCommand\";\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\nimport { SendPayloadInChunksTask } from \"./SendPayloadInChunksTask\";\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 web3Check: ClearSignContextSuccess<ClearSignContextType.WEB3_CHECK> | null;\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 // Send message simulation first\n if (this.args.web3Check) {\n if (this.args.web3Check.certificate) {\n await this.api.sendCommand(\n new LoadCertificateCommand({\n keyUsage: this.args.web3Check.certificate.keyUsageNumber,\n certificate: this.args.web3Check.certificate.payload,\n }),\n );\n }\n await new SendPayloadInChunksTask(this.api, {\n payload: this.args.web3Check.payload,\n commandFactory: (args) =>\n new ProvideWeb3CheckCommand({\n payload: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n }\n\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": ["VERIFYING_CONTRACT_TOKEN_INDEX", "CommandResultFactory", "InvalidStatusWordError", "isSuccessCommandResult", "LoadCertificateCommand", "Maybe", "Nothing", "ProvideTokenInformationCommand", "ProvideWeb3CheckCommand", "Eip712FilterType", "SendEIP712FilteringCommand", "SendEIP712StructDefinitionCommand", "StructDefinitionCommand", "StructImplemType", "SendEIP712StructImplemTask", "TypedDataValueArray", "TypedDataValueRoot", "SendPayloadInChunksTask", "DEVICE_ASSETS_MAX", "ProvideEIP712ContextTask", "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
  }