@ledgerhq/device-signer-kit-ethereum 0.0.0-rnble-transport-20250422084848 → 0.0.0-rnble-scan-permission-issue-20250929081059

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 (541) hide show
  1. package/README.md +53 -0
  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/SignDelegationAuthorizationTypes.js +2 -0
  7. package/lib/cjs/api/app-binder/SignDelegationAuthorizationTypes.js.map +7 -0
  8. package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js +1 -1
  9. package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js.map +2 -2
  10. package/lib/cjs/api/app-binder/SignTypedDataDeviceActionTypes.js +1 -1
  11. package/lib/cjs/api/app-binder/SignTypedDataDeviceActionTypes.js.map +2 -2
  12. package/lib/cjs/api/index.js +1 -1
  13. package/lib/cjs/api/index.js.map +3 -3
  14. package/lib/cjs/api/model/AddressOptions.js +1 -1
  15. package/lib/cjs/api/model/AddressOptions.js.map +1 -1
  16. package/lib/cjs/api/model/ClearSigningType.js +2 -0
  17. package/lib/cjs/api/model/ClearSigningType.js.map +7 -0
  18. package/lib/cjs/api/model/MessageOptions.js +2 -0
  19. package/lib/cjs/api/model/MessageOptions.js.map +7 -0
  20. package/lib/cjs/api/model/TransactionOptions.js +1 -1
  21. package/lib/cjs/api/model/TransactionOptions.js.map +1 -1
  22. package/lib/cjs/api/model/TypedDataOptions.js +2 -0
  23. package/lib/cjs/api/model/TypedDataOptions.js.map +7 -0
  24. package/lib/cjs/internal/DefaultSignerEth.js +1 -1
  25. package/lib/cjs/internal/DefaultSignerEth.js.map +3 -3
  26. package/lib/cjs/internal/DefaultSignerEth.test.js +1 -1
  27. package/lib/cjs/internal/DefaultSignerEth.test.js.map +3 -3
  28. package/lib/cjs/internal/address/di/addressModule.js +1 -1
  29. package/lib/cjs/internal/address/di/addressModule.js.map +3 -3
  30. package/lib/cjs/internal/address/di/addressModule.test.js +1 -1
  31. package/lib/cjs/internal/address/di/addressModule.test.js.map +2 -2
  32. package/lib/cjs/internal/address/use-case/GetAddressUseCase.js +1 -1
  33. package/lib/cjs/internal/address/use-case/GetAddressUseCase.js.map +2 -2
  34. package/lib/cjs/internal/address/use-case/GetAddressUseCase.test.js +1 -1
  35. package/lib/cjs/internal/address/use-case/GetAddressUseCase.test.js.map +2 -2
  36. package/lib/cjs/internal/app-binder/EthAppBinder.js +1 -1
  37. package/lib/cjs/internal/app-binder/EthAppBinder.js.map +3 -3
  38. package/lib/cjs/internal/app-binder/EthAppBinder.test.js +1 -1
  39. package/lib/cjs/internal/app-binder/EthAppBinder.test.js.map +3 -3
  40. package/lib/cjs/internal/app-binder/command/ProvideNetworkConfigurationCommand.js +2 -0
  41. package/lib/cjs/internal/app-binder/command/ProvideNetworkConfigurationCommand.js.map +7 -0
  42. package/lib/cjs/internal/app-binder/command/ProvideNetworkConfigurationCommand.test.js +2 -0
  43. package/lib/cjs/internal/app-binder/command/ProvideNetworkConfigurationCommand.test.js.map +7 -0
  44. package/lib/cjs/internal/app-binder/command/ProvideProxyInfoCommand.js +2 -0
  45. package/lib/cjs/internal/app-binder/command/ProvideProxyInfoCommand.js.map +7 -0
  46. package/lib/cjs/internal/app-binder/command/ProvideProxyInfoCommand.test.js +2 -0
  47. package/lib/cjs/internal/app-binder/command/ProvideProxyInfoCommand.test.js.map +7 -0
  48. package/lib/cjs/internal/app-binder/command/SendEIP712FilteringCommand.js +1 -1
  49. package/lib/cjs/internal/app-binder/command/SendEIP712FilteringCommand.js.map +3 -3
  50. package/lib/cjs/internal/app-binder/command/SendEIP712FilteringCommand.test.js +1 -1
  51. package/lib/cjs/internal/app-binder/command/SendEIP712FilteringCommand.test.js.map +3 -3
  52. package/lib/cjs/internal/app-binder/command/SignAuthorizationDelegationCommand.js +2 -0
  53. package/lib/cjs/internal/app-binder/command/SignAuthorizationDelegationCommand.js.map +7 -0
  54. package/lib/cjs/internal/app-binder/command/SignAuthorizationDelegationCommand.test.js +2 -0
  55. package/lib/cjs/internal/app-binder/command/SignAuthorizationDelegationCommand.test.js.map +7 -0
  56. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js +1 -1
  57. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js.map +3 -3
  58. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js +1 -1
  59. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js.map +3 -3
  60. package/lib/cjs/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.js +1 -1
  61. package/lib/cjs/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.js.map +3 -3
  62. package/lib/cjs/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.test.js +1 -1
  63. package/lib/cjs/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.test.js.map +3 -3
  64. package/lib/cjs/internal/app-binder/device-action/__test-utils__/makeInternalApi.js +1 -1
  65. package/lib/cjs/internal/app-binder/device-action/__test-utils__/makeInternalApi.js.map +3 -3
  66. package/lib/cjs/internal/app-binder/device-action/__test-utils__/testDeviceActionUntilStep.js +2 -0
  67. package/lib/cjs/internal/app-binder/device-action/__test-utils__/testDeviceActionUntilStep.js.map +7 -0
  68. package/lib/cjs/internal/app-binder/di/appBinderModule.js +1 -1
  69. package/lib/cjs/internal/app-binder/di/appBinderModule.js.map +3 -3
  70. package/lib/cjs/internal/app-binder/task/BuildBaseContexts.js +2 -0
  71. package/lib/cjs/internal/app-binder/task/BuildBaseContexts.js.map +7 -0
  72. package/lib/cjs/internal/app-binder/task/BuildBaseContexts.test.js +2 -0
  73. package/lib/cjs/internal/app-binder/task/BuildBaseContexts.test.js.map +7 -0
  74. package/lib/cjs/internal/app-binder/task/BuildEIP712ContextTask.js +1 -1
  75. package/lib/cjs/internal/app-binder/task/BuildEIP712ContextTask.js.map +3 -3
  76. package/lib/cjs/internal/app-binder/task/BuildEIP712ContextTask.test.js +1 -1
  77. package/lib/cjs/internal/app-binder/task/BuildEIP712ContextTask.test.js.map +3 -3
  78. package/lib/cjs/internal/app-binder/task/BuildFullContextsTask.js +2 -0
  79. package/lib/cjs/internal/app-binder/task/BuildFullContextsTask.js.map +7 -0
  80. package/lib/cjs/internal/app-binder/task/BuildFullContextsTask.test.js +2 -0
  81. package/lib/cjs/internal/app-binder/task/BuildFullContextsTask.test.js.map +7 -0
  82. package/lib/cjs/internal/app-binder/task/BuildSubcontextsTask.js +2 -0
  83. package/lib/cjs/internal/app-binder/task/BuildSubcontextsTask.js.map +7 -0
  84. package/lib/cjs/internal/app-binder/task/BuildSubcontextsTask.test.js +2 -0
  85. package/lib/cjs/internal/app-binder/task/BuildSubcontextsTask.test.js.map +7 -0
  86. package/lib/cjs/internal/app-binder/task/GetWeb3CheckTask.js +1 -1
  87. package/lib/cjs/internal/app-binder/task/GetWeb3CheckTask.js.map +3 -3
  88. package/lib/cjs/internal/app-binder/task/GetWeb3CheckTask.test.js +1 -1
  89. package/lib/cjs/internal/app-binder/task/GetWeb3CheckTask.test.js.map +3 -3
  90. package/lib/cjs/internal/app-binder/task/ParseNestedTransactionTask.js +2 -0
  91. package/lib/cjs/internal/app-binder/task/ParseNestedTransactionTask.js.map +7 -0
  92. package/lib/cjs/internal/app-binder/task/ParseNestedTransactionTask.test.js +2 -0
  93. package/lib/cjs/internal/app-binder/task/ParseNestedTransactionTask.test.js.map +7 -0
  94. package/lib/cjs/internal/app-binder/task/ParseTransactionTask.js +2 -0
  95. package/lib/cjs/internal/app-binder/task/ParseTransactionTask.js.map +7 -0
  96. package/lib/cjs/internal/app-binder/task/ParseTransactionTask.test.js +2 -0
  97. package/lib/cjs/internal/app-binder/task/ParseTransactionTask.test.js.map +7 -0
  98. package/lib/cjs/internal/app-binder/task/ProvideContextsTask.js +2 -0
  99. package/lib/cjs/internal/app-binder/task/ProvideContextsTask.js.map +7 -0
  100. package/lib/cjs/internal/app-binder/task/ProvideContextsTask.test.js +2 -0
  101. package/lib/cjs/internal/app-binder/task/ProvideContextsTask.test.js.map +7 -0
  102. package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.js +1 -1
  103. package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.js.map +3 -3
  104. package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.test.js +1 -1
  105. package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.test.js.map +3 -3
  106. package/lib/cjs/internal/app-binder/task/SendPayloadInChunksTask.js +1 -1
  107. package/lib/cjs/internal/app-binder/task/SendPayloadInChunksTask.js.map +3 -3
  108. package/lib/cjs/internal/app-binder/task/SendPayloadInChunksTask.test.js +1 -1
  109. package/lib/cjs/internal/app-binder/task/SendPayloadInChunksTask.test.js.map +3 -3
  110. package/lib/cjs/internal/app-binder/task/SendSignAuthorizationDelegationTask.js +2 -0
  111. package/lib/cjs/internal/app-binder/task/SendSignAuthorizationDelegationTask.js.map +7 -0
  112. package/lib/cjs/internal/app-binder/task/SendSignAuthorizationDelegationTask.test.js +2 -0
  113. package/lib/cjs/internal/app-binder/task/SendSignAuthorizationDelegationTask.test.js.map +7 -0
  114. package/lib/cjs/internal/app-binder/task/SendSignTransactionTask.js +1 -1
  115. package/lib/cjs/internal/app-binder/task/SendSignTransactionTask.js.map +3 -3
  116. package/lib/cjs/internal/app-binder/task/SendSignTransactionTask.test.js +1 -1
  117. package/lib/cjs/internal/app-binder/task/SendSignTransactionTask.test.js.map +3 -3
  118. package/lib/cjs/internal/app-binder/task/SignTypedDataLegacyTask.js +2 -0
  119. package/lib/cjs/internal/app-binder/task/SignTypedDataLegacyTask.js.map +7 -0
  120. package/lib/cjs/internal/app-binder/task/SignTypedDataLegacyTask.test.js +2 -0
  121. package/lib/cjs/internal/app-binder/task/SignTypedDataLegacyTask.test.js.map +7 -0
  122. package/lib/cjs/internal/di.js +1 -1
  123. package/lib/cjs/internal/di.js.map +3 -3
  124. package/lib/cjs/internal/eip7702/di/eip7702Module.js +2 -0
  125. package/lib/cjs/internal/eip7702/di/eip7702Module.js.map +7 -0
  126. package/lib/cjs/internal/eip7702/di/eip7702Module.test.js +2 -0
  127. package/lib/cjs/internal/eip7702/di/eip7702Module.test.js.map +7 -0
  128. package/lib/cjs/internal/eip7702/di/eip7702Types.js +2 -0
  129. package/lib/cjs/internal/eip7702/di/eip7702Types.js.map +7 -0
  130. package/lib/cjs/internal/eip7702/use-case/SignDelegationAuthorizationUseCase.js +2 -0
  131. package/lib/cjs/internal/eip7702/use-case/SignDelegationAuthorizationUseCase.js.map +7 -0
  132. package/lib/cjs/internal/eip7702/use-case/SignDelegationAuthorizationUseCase.test.js +2 -0
  133. package/lib/cjs/internal/eip7702/use-case/SignDelegationAuthorizationUseCase.test.js.map +7 -0
  134. package/lib/cjs/internal/message/di/messageModule.js +1 -1
  135. package/lib/cjs/internal/message/di/messageModule.js.map +3 -3
  136. package/lib/cjs/internal/message/di/messageModule.test.js +1 -1
  137. package/lib/cjs/internal/message/di/messageModule.test.js.map +2 -2
  138. package/lib/cjs/internal/message/use-case/SignMessageUseCase.js +1 -1
  139. package/lib/cjs/internal/message/use-case/SignMessageUseCase.js.map +3 -3
  140. package/lib/cjs/internal/message/use-case/SignMessageUseCase.test.js +1 -1
  141. package/lib/cjs/internal/message/use-case/SignMessageUseCase.test.js.map +2 -2
  142. package/lib/cjs/internal/shared/utils/ApplicationChecker.js +1 -1
  143. package/lib/cjs/internal/shared/utils/ApplicationChecker.js.map +3 -3
  144. package/lib/cjs/internal/shared/utils/ApplicationChecker.test.js +1 -1
  145. package/lib/cjs/internal/shared/utils/ApplicationChecker.test.js.map +2 -2
  146. package/lib/cjs/internal/transaction/di/transactionModule.js +1 -1
  147. package/lib/cjs/internal/transaction/di/transactionModule.js.map +3 -3
  148. package/lib/cjs/internal/transaction/di/transactionModule.test.js +1 -1
  149. package/lib/cjs/internal/transaction/di/transactionModule.test.js.map +2 -2
  150. package/lib/cjs/internal/transaction/service/mapper/EthersTransactionMapperService.js +2 -0
  151. package/lib/cjs/internal/transaction/service/mapper/EthersTransactionMapperService.js.map +7 -0
  152. package/lib/cjs/internal/transaction/service/mapper/EthersTransactionMapperService.test.js +2 -0
  153. package/lib/cjs/internal/transaction/service/mapper/EthersTransactionMapperService.test.js.map +7 -0
  154. package/lib/cjs/internal/transaction/service/mapper/TransactionMapperService.js +1 -1
  155. package/lib/cjs/internal/transaction/service/mapper/TransactionMapperService.js.map +3 -3
  156. package/lib/cjs/internal/transaction/service/parser/TransactionParserService.js +1 -1
  157. package/lib/cjs/internal/transaction/service/parser/TransactionParserService.js.map +3 -3
  158. package/lib/cjs/internal/transaction/service/parser/TransactionParserService.test.js +1 -1
  159. package/lib/cjs/internal/transaction/service/parser/TransactionParserService.test.js.map +3 -3
  160. package/lib/cjs/internal/typed-data/di/typedDataModule.js +1 -1
  161. package/lib/cjs/internal/typed-data/di/typedDataModule.js.map +3 -3
  162. package/lib/cjs/internal/typed-data/di/typedDataModule.test.js +1 -1
  163. package/lib/cjs/internal/typed-data/di/typedDataModule.test.js.map +2 -2
  164. package/lib/cjs/internal/typed-data/service/DefaultTypedDataParserService.js +1 -1
  165. package/lib/cjs/internal/typed-data/service/DefaultTypedDataParserService.js.map +2 -2
  166. package/lib/cjs/internal/typed-data/service/TypedDataParser.js +1 -1
  167. package/lib/cjs/internal/typed-data/service/TypedDataParser.js.map +3 -3
  168. package/lib/cjs/internal/typed-data/service/TypedDataParser.test.js +1 -1
  169. package/lib/cjs/internal/typed-data/service/TypedDataParser.test.js.map +2 -2
  170. package/lib/cjs/internal/typed-data/use-case/SignTypedDataUseCase.js +1 -1
  171. package/lib/cjs/internal/typed-data/use-case/SignTypedDataUseCase.js.map +3 -3
  172. package/lib/cjs/internal/typed-data/use-case/SignTypedDataUseCase.test.js +1 -1
  173. package/lib/cjs/internal/typed-data/use-case/SignTypedDataUseCase.test.js.map +2 -2
  174. package/lib/cjs/package.json +13 -14
  175. package/lib/esm/api/SignerEthBuilder.test.js +1 -1
  176. package/lib/esm/api/SignerEthBuilder.test.js.map +1 -1
  177. package/lib/esm/api/app-binder/SignDelegationAuthorizationTypes.js +1 -0
  178. package/lib/esm/api/app-binder/SignTransactionDeviceActionTypes.js +1 -1
  179. package/lib/esm/api/app-binder/SignTransactionDeviceActionTypes.js.map +2 -2
  180. package/lib/esm/api/app-binder/SignTypedDataDeviceActionTypes.js +1 -1
  181. package/lib/esm/api/app-binder/SignTypedDataDeviceActionTypes.js.map +2 -2
  182. package/lib/esm/api/index.js +1 -1
  183. package/lib/esm/api/index.js.map +2 -2
  184. package/lib/esm/api/model/ClearSigningType.js +2 -0
  185. package/lib/esm/api/model/ClearSigningType.js.map +7 -0
  186. package/lib/esm/api/model/MessageOptions.js +1 -0
  187. package/lib/esm/api/model/MessageOptions.js.map +7 -0
  188. package/lib/esm/api/model/TypedDataOptions.js +1 -0
  189. package/lib/esm/api/model/TypedDataOptions.js.map +7 -0
  190. package/lib/esm/internal/DefaultSignerEth.js +1 -1
  191. package/lib/esm/internal/DefaultSignerEth.js.map +3 -3
  192. package/lib/esm/internal/DefaultSignerEth.test.js +1 -1
  193. package/lib/esm/internal/DefaultSignerEth.test.js.map +3 -3
  194. package/lib/esm/internal/address/di/addressModule.js +1 -1
  195. package/lib/esm/internal/address/di/addressModule.js.map +3 -3
  196. package/lib/esm/internal/address/di/addressModule.test.js +1 -1
  197. package/lib/esm/internal/address/di/addressModule.test.js.map +2 -2
  198. package/lib/esm/internal/address/use-case/GetAddressUseCase.js +1 -1
  199. package/lib/esm/internal/address/use-case/GetAddressUseCase.js.map +2 -2
  200. package/lib/esm/internal/address/use-case/GetAddressUseCase.test.js +1 -1
  201. package/lib/esm/internal/address/use-case/GetAddressUseCase.test.js.map +2 -2
  202. package/lib/esm/internal/app-binder/EthAppBinder.js +1 -1
  203. package/lib/esm/internal/app-binder/EthAppBinder.js.map +3 -3
  204. package/lib/esm/internal/app-binder/EthAppBinder.test.js +1 -1
  205. package/lib/esm/internal/app-binder/EthAppBinder.test.js.map +3 -3
  206. package/lib/esm/internal/app-binder/command/ProvideNetworkConfigurationCommand.js +2 -0
  207. package/lib/esm/internal/app-binder/command/ProvideNetworkConfigurationCommand.js.map +7 -0
  208. package/lib/esm/internal/app-binder/command/ProvideNetworkConfigurationCommand.test.js +2 -0
  209. package/lib/esm/internal/app-binder/command/ProvideNetworkConfigurationCommand.test.js.map +7 -0
  210. package/lib/esm/internal/app-binder/command/ProvideProxyInfoCommand.js +2 -0
  211. package/lib/esm/internal/app-binder/command/ProvideProxyInfoCommand.js.map +7 -0
  212. package/lib/esm/internal/app-binder/command/ProvideProxyInfoCommand.test.js +2 -0
  213. package/lib/esm/internal/app-binder/command/ProvideProxyInfoCommand.test.js.map +7 -0
  214. package/lib/esm/internal/app-binder/command/SendEIP712FilteringCommand.js +1 -1
  215. package/lib/esm/internal/app-binder/command/SendEIP712FilteringCommand.js.map +3 -3
  216. package/lib/esm/internal/app-binder/command/SendEIP712FilteringCommand.test.js +1 -1
  217. package/lib/esm/internal/app-binder/command/SendEIP712FilteringCommand.test.js.map +3 -3
  218. package/lib/esm/internal/app-binder/command/SignAuthorizationDelegationCommand.js +2 -0
  219. package/lib/esm/internal/app-binder/command/SignAuthorizationDelegationCommand.js.map +7 -0
  220. package/lib/esm/internal/app-binder/command/SignAuthorizationDelegationCommand.test.js +2 -0
  221. package/lib/esm/internal/app-binder/command/SignAuthorizationDelegationCommand.test.js.map +7 -0
  222. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js +1 -1
  223. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js.map +3 -3
  224. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js +1 -1
  225. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js.map +3 -3
  226. package/lib/esm/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.js +1 -1
  227. package/lib/esm/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.js.map +3 -3
  228. package/lib/esm/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.test.js +1 -1
  229. package/lib/esm/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.test.js.map +3 -3
  230. package/lib/esm/internal/app-binder/device-action/__test-utils__/makeInternalApi.js +1 -1
  231. package/lib/esm/internal/app-binder/device-action/__test-utils__/makeInternalApi.js.map +3 -3
  232. package/lib/esm/internal/app-binder/device-action/__test-utils__/testDeviceActionUntilStep.js +2 -0
  233. package/lib/esm/internal/app-binder/device-action/__test-utils__/testDeviceActionUntilStep.js.map +7 -0
  234. package/lib/esm/internal/app-binder/di/appBinderModule.js +1 -1
  235. package/lib/esm/internal/app-binder/di/appBinderModule.js.map +3 -3
  236. package/lib/esm/internal/app-binder/task/BuildBaseContexts.js +2 -0
  237. package/lib/esm/internal/app-binder/task/BuildBaseContexts.js.map +7 -0
  238. package/lib/esm/internal/app-binder/task/BuildBaseContexts.test.js +2 -0
  239. package/lib/esm/internal/app-binder/task/BuildBaseContexts.test.js.map +7 -0
  240. package/lib/esm/internal/app-binder/task/BuildEIP712ContextTask.js +1 -1
  241. package/lib/esm/internal/app-binder/task/BuildEIP712ContextTask.js.map +3 -3
  242. package/lib/esm/internal/app-binder/task/BuildEIP712ContextTask.test.js +1 -1
  243. package/lib/esm/internal/app-binder/task/BuildEIP712ContextTask.test.js.map +3 -3
  244. package/lib/esm/internal/app-binder/task/BuildFullContextsTask.js +2 -0
  245. package/lib/esm/internal/app-binder/task/BuildFullContextsTask.js.map +7 -0
  246. package/lib/esm/internal/app-binder/task/BuildFullContextsTask.test.js +2 -0
  247. package/lib/esm/internal/app-binder/task/BuildFullContextsTask.test.js.map +7 -0
  248. package/lib/esm/internal/app-binder/task/BuildSubcontextsTask.js +2 -0
  249. package/lib/esm/internal/app-binder/task/BuildSubcontextsTask.js.map +7 -0
  250. package/lib/esm/internal/app-binder/task/BuildSubcontextsTask.test.js +2 -0
  251. package/lib/esm/internal/app-binder/task/BuildSubcontextsTask.test.js.map +7 -0
  252. package/lib/esm/internal/app-binder/task/GetWeb3CheckTask.js +1 -1
  253. package/lib/esm/internal/app-binder/task/GetWeb3CheckTask.js.map +3 -3
  254. package/lib/esm/internal/app-binder/task/GetWeb3CheckTask.test.js +1 -1
  255. package/lib/esm/internal/app-binder/task/GetWeb3CheckTask.test.js.map +3 -3
  256. package/lib/esm/internal/app-binder/task/ParseNestedTransactionTask.js +2 -0
  257. package/lib/esm/internal/app-binder/task/ParseNestedTransactionTask.js.map +7 -0
  258. package/lib/esm/internal/app-binder/task/ParseNestedTransactionTask.test.js +2 -0
  259. package/lib/esm/internal/app-binder/task/ParseNestedTransactionTask.test.js.map +7 -0
  260. package/lib/esm/internal/app-binder/task/ParseTransactionTask.js +2 -0
  261. package/lib/esm/internal/app-binder/task/ParseTransactionTask.js.map +7 -0
  262. package/lib/esm/internal/app-binder/task/ParseTransactionTask.test.js +2 -0
  263. package/lib/esm/internal/app-binder/task/ParseTransactionTask.test.js.map +7 -0
  264. package/lib/esm/internal/app-binder/task/ProvideContextsTask.js +2 -0
  265. package/lib/esm/internal/app-binder/task/ProvideContextsTask.js.map +7 -0
  266. package/lib/esm/internal/app-binder/task/ProvideContextsTask.test.js +2 -0
  267. package/lib/esm/internal/app-binder/task/ProvideContextsTask.test.js.map +7 -0
  268. package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.js +1 -1
  269. package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.js.map +3 -3
  270. package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.test.js +1 -1
  271. package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.test.js.map +3 -3
  272. package/lib/esm/internal/app-binder/task/SendPayloadInChunksTask.js +1 -1
  273. package/lib/esm/internal/app-binder/task/SendPayloadInChunksTask.js.map +3 -3
  274. package/lib/esm/internal/app-binder/task/SendPayloadInChunksTask.test.js +1 -1
  275. package/lib/esm/internal/app-binder/task/SendPayloadInChunksTask.test.js.map +3 -3
  276. package/lib/esm/internal/app-binder/task/SendSignAuthorizationDelegationTask.js +2 -0
  277. package/lib/esm/internal/app-binder/task/SendSignAuthorizationDelegationTask.js.map +7 -0
  278. package/lib/esm/internal/app-binder/task/SendSignAuthorizationDelegationTask.test.js +2 -0
  279. package/lib/esm/internal/app-binder/task/SendSignAuthorizationDelegationTask.test.js.map +7 -0
  280. package/lib/esm/internal/app-binder/task/SendSignTransactionTask.js +1 -1
  281. package/lib/esm/internal/app-binder/task/SendSignTransactionTask.js.map +3 -3
  282. package/lib/esm/internal/app-binder/task/SendSignTransactionTask.test.js +1 -1
  283. package/lib/esm/internal/app-binder/task/SendSignTransactionTask.test.js.map +3 -3
  284. package/lib/esm/internal/app-binder/task/SignTypedDataLegacyTask.js +2 -0
  285. package/lib/esm/internal/app-binder/task/SignTypedDataLegacyTask.js.map +7 -0
  286. package/lib/esm/internal/app-binder/task/SignTypedDataLegacyTask.test.js +2 -0
  287. package/lib/esm/internal/app-binder/task/SignTypedDataLegacyTask.test.js.map +7 -0
  288. package/lib/esm/internal/di.js +1 -1
  289. package/lib/esm/internal/di.js.map +3 -3
  290. package/lib/esm/internal/eip7702/di/eip7702Module.js +2 -0
  291. package/lib/esm/internal/eip7702/di/eip7702Module.js.map +7 -0
  292. package/lib/esm/internal/eip7702/di/eip7702Module.test.js +2 -0
  293. package/lib/esm/internal/eip7702/di/eip7702Module.test.js.map +7 -0
  294. package/lib/esm/internal/eip7702/di/eip7702Types.js +2 -0
  295. package/lib/esm/internal/eip7702/di/eip7702Types.js.map +7 -0
  296. package/lib/esm/internal/eip7702/use-case/SignDelegationAuthorizationUseCase.js +2 -0
  297. package/lib/esm/internal/eip7702/use-case/SignDelegationAuthorizationUseCase.js.map +7 -0
  298. package/lib/esm/internal/eip7702/use-case/SignDelegationAuthorizationUseCase.test.js +2 -0
  299. package/lib/esm/internal/eip7702/use-case/SignDelegationAuthorizationUseCase.test.js.map +7 -0
  300. package/lib/esm/internal/message/di/messageModule.js +1 -1
  301. package/lib/esm/internal/message/di/messageModule.js.map +3 -3
  302. package/lib/esm/internal/message/di/messageModule.test.js +1 -1
  303. package/lib/esm/internal/message/di/messageModule.test.js.map +2 -2
  304. package/lib/esm/internal/message/use-case/SignMessageUseCase.js +1 -1
  305. package/lib/esm/internal/message/use-case/SignMessageUseCase.js.map +3 -3
  306. package/lib/esm/internal/message/use-case/SignMessageUseCase.test.js +1 -1
  307. package/lib/esm/internal/message/use-case/SignMessageUseCase.test.js.map +2 -2
  308. package/lib/esm/internal/shared/utils/ApplicationChecker.js +1 -1
  309. package/lib/esm/internal/shared/utils/ApplicationChecker.js.map +3 -3
  310. package/lib/esm/internal/shared/utils/ApplicationChecker.test.js +1 -1
  311. package/lib/esm/internal/shared/utils/ApplicationChecker.test.js.map +2 -2
  312. package/lib/esm/internal/transaction/di/transactionModule.js +1 -1
  313. package/lib/esm/internal/transaction/di/transactionModule.js.map +3 -3
  314. package/lib/esm/internal/transaction/di/transactionModule.test.js +1 -1
  315. package/lib/esm/internal/transaction/di/transactionModule.test.js.map +2 -2
  316. package/lib/esm/internal/transaction/service/mapper/EthersTransactionMapperService.js +2 -0
  317. package/lib/esm/internal/transaction/service/mapper/EthersTransactionMapperService.js.map +7 -0
  318. package/lib/esm/internal/transaction/service/mapper/EthersTransactionMapperService.test.js +2 -0
  319. package/lib/esm/internal/transaction/service/mapper/EthersTransactionMapperService.test.js.map +7 -0
  320. package/lib/esm/internal/transaction/service/mapper/TransactionMapperService.js +0 -1
  321. package/lib/esm/internal/transaction/service/mapper/TransactionMapperService.js.map +4 -4
  322. package/lib/esm/internal/transaction/service/parser/TransactionParserService.js +1 -1
  323. package/lib/esm/internal/transaction/service/parser/TransactionParserService.js.map +3 -3
  324. package/lib/esm/internal/transaction/service/parser/TransactionParserService.test.js +1 -1
  325. package/lib/esm/internal/transaction/service/parser/TransactionParserService.test.js.map +3 -3
  326. package/lib/esm/internal/typed-data/di/typedDataModule.js +1 -1
  327. package/lib/esm/internal/typed-data/di/typedDataModule.js.map +3 -3
  328. package/lib/esm/internal/typed-data/di/typedDataModule.test.js +1 -1
  329. package/lib/esm/internal/typed-data/di/typedDataModule.test.js.map +2 -2
  330. package/lib/esm/internal/typed-data/service/DefaultTypedDataParserService.js +1 -1
  331. package/lib/esm/internal/typed-data/service/DefaultTypedDataParserService.js.map +2 -2
  332. package/lib/esm/internal/typed-data/service/TypedDataParser.js +1 -1
  333. package/lib/esm/internal/typed-data/service/TypedDataParser.js.map +3 -3
  334. package/lib/esm/internal/typed-data/service/TypedDataParser.test.js +1 -1
  335. package/lib/esm/internal/typed-data/service/TypedDataParser.test.js.map +2 -2
  336. package/lib/esm/internal/typed-data/use-case/SignTypedDataUseCase.js +1 -1
  337. package/lib/esm/internal/typed-data/use-case/SignTypedDataUseCase.js.map +3 -3
  338. package/lib/esm/internal/typed-data/use-case/SignTypedDataUseCase.test.js +1 -1
  339. package/lib/esm/internal/typed-data/use-case/SignTypedDataUseCase.test.js.map +2 -2
  340. package/lib/esm/package.json +13 -14
  341. package/lib/types/api/SignerEth.d.ts +8 -4
  342. package/lib/types/api/SignerEth.d.ts.map +1 -1
  343. package/lib/types/api/app-binder/SignDelegationAuthorizationTypes.d.ts +19 -0
  344. package/lib/types/api/app-binder/SignDelegationAuthorizationTypes.d.ts.map +1 -0
  345. package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts +17 -12
  346. package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts.map +1 -1
  347. package/lib/types/api/app-binder/SignTypedDataDeviceActionTypes.d.ts +11 -1
  348. package/lib/types/api/app-binder/SignTypedDataDeviceActionTypes.d.ts.map +1 -1
  349. package/lib/types/api/index.d.ts +5 -4
  350. package/lib/types/api/index.d.ts.map +1 -1
  351. package/lib/types/api/model/AddressOptions.d.ts +1 -0
  352. package/lib/types/api/model/AddressOptions.d.ts.map +1 -1
  353. package/lib/types/api/model/ClearSigningType.d.ts +5 -0
  354. package/lib/types/api/model/ClearSigningType.d.ts.map +1 -0
  355. package/lib/types/api/model/MessageOptions.d.ts +4 -0
  356. package/lib/types/api/model/MessageOptions.d.ts.map +1 -0
  357. package/lib/types/api/model/TransactionOptions.d.ts +1 -0
  358. package/lib/types/api/model/TransactionOptions.d.ts.map +1 -1
  359. package/lib/types/api/model/TypedDataOptions.d.ts +4 -0
  360. package/lib/types/api/model/TypedDataOptions.d.ts.map +1 -0
  361. package/lib/types/internal/DefaultSignerEth.d.ts +7 -3
  362. package/lib/types/internal/DefaultSignerEth.d.ts.map +1 -1
  363. package/lib/types/internal/address/di/addressModule.d.ts.map +1 -1
  364. package/lib/types/internal/address/use-case/GetAddressUseCase.d.ts.map +1 -1
  365. package/lib/types/internal/app-binder/EthAppBinder.d.ts +13 -3
  366. package/lib/types/internal/app-binder/EthAppBinder.d.ts.map +1 -1
  367. package/lib/types/internal/app-binder/command/ProvideNetworkConfigurationCommand.d.ts +28 -0
  368. package/lib/types/internal/app-binder/command/ProvideNetworkConfigurationCommand.d.ts.map +1 -0
  369. package/lib/types/internal/app-binder/command/ProvideNetworkConfigurationCommand.test.d.ts +2 -0
  370. package/lib/types/internal/app-binder/command/ProvideNetworkConfigurationCommand.test.d.ts.map +1 -0
  371. package/lib/types/internal/app-binder/command/ProvideProxyInfoCommand.d.ts +20 -0
  372. package/lib/types/internal/app-binder/command/ProvideProxyInfoCommand.d.ts.map +1 -0
  373. package/lib/types/internal/app-binder/command/ProvideProxyInfoCommand.test.d.ts +2 -0
  374. package/lib/types/internal/app-binder/command/ProvideProxyInfoCommand.test.d.ts.map +1 -0
  375. package/lib/types/internal/app-binder/command/SendEIP712FilteringCommand.d.ts +29 -1
  376. package/lib/types/internal/app-binder/command/SendEIP712FilteringCommand.d.ts.map +1 -1
  377. package/lib/types/internal/app-binder/command/SignAuthorizationDelegationCommand.d.ts +29 -0
  378. package/lib/types/internal/app-binder/command/SignAuthorizationDelegationCommand.d.ts.map +1 -0
  379. package/lib/types/internal/app-binder/command/SignAuthorizationDelegationCommand.test.d.ts +2 -0
  380. package/lib/types/internal/app-binder/command/SignAuthorizationDelegationCommand.test.d.ts.map +1 -0
  381. package/lib/types/internal/app-binder/command/utils/ethAppErrors.d.ts.map +1 -1
  382. package/lib/types/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.d.ts +15 -36
  383. package/lib/types/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.d.ts.map +1 -1
  384. package/lib/types/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.d.ts +5 -2
  385. package/lib/types/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.d.ts.map +1 -1
  386. package/lib/types/internal/app-binder/device-action/__test-utils__/makeInternalApi.d.ts.map +1 -1
  387. package/lib/types/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.d.ts.map +1 -1
  388. package/lib/types/internal/app-binder/device-action/__test-utils__/testDeviceActionUntilStep.d.ts +6 -0
  389. package/lib/types/internal/app-binder/device-action/__test-utils__/testDeviceActionUntilStep.d.ts.map +1 -0
  390. package/lib/types/internal/app-binder/di/appBinderModule.d.ts.map +1 -1
  391. package/lib/types/internal/app-binder/task/BuildBaseContexts.d.ts +49 -0
  392. package/lib/types/internal/app-binder/task/BuildBaseContexts.d.ts.map +1 -0
  393. package/lib/types/internal/app-binder/task/BuildBaseContexts.test.d.ts +2 -0
  394. package/lib/types/internal/app-binder/task/BuildBaseContexts.test.d.ts.map +1 -0
  395. package/lib/types/internal/app-binder/task/BuildEIP712ContextTask.d.ts +8 -1
  396. package/lib/types/internal/app-binder/task/BuildEIP712ContextTask.d.ts.map +1 -1
  397. package/lib/types/internal/app-binder/task/BuildFullContextsTask.d.ts +39 -0
  398. package/lib/types/internal/app-binder/task/BuildFullContextsTask.d.ts.map +1 -0
  399. package/lib/types/internal/app-binder/task/BuildFullContextsTask.test.d.ts +2 -0
  400. package/lib/types/internal/app-binder/task/BuildFullContextsTask.test.d.ts.map +1 -0
  401. package/lib/types/internal/app-binder/task/BuildSubcontextsTask.d.ts +28 -0
  402. package/lib/types/internal/app-binder/task/BuildSubcontextsTask.d.ts.map +1 -0
  403. package/lib/types/internal/app-binder/task/BuildSubcontextsTask.test.d.ts +2 -0
  404. package/lib/types/internal/app-binder/task/BuildSubcontextsTask.test.d.ts.map +1 -0
  405. package/lib/types/internal/app-binder/task/GetWeb3CheckTask.d.ts +2 -3
  406. package/lib/types/internal/app-binder/task/GetWeb3CheckTask.d.ts.map +1 -1
  407. package/lib/types/internal/app-binder/task/ParseNestedTransactionTask.d.ts +21 -0
  408. package/lib/types/internal/app-binder/task/ParseNestedTransactionTask.d.ts.map +1 -0
  409. package/lib/types/internal/app-binder/task/ParseNestedTransactionTask.test.d.ts +2 -0
  410. package/lib/types/internal/app-binder/task/ParseNestedTransactionTask.test.d.ts.map +1 -0
  411. package/lib/types/internal/app-binder/task/ParseTransactionTask.d.ts +17 -0
  412. package/lib/types/internal/app-binder/task/ParseTransactionTask.d.ts.map +1 -0
  413. package/lib/types/internal/app-binder/task/ParseTransactionTask.test.d.ts +2 -0
  414. package/lib/types/internal/app-binder/task/ParseTransactionTask.test.d.ts.map +1 -0
  415. package/lib/types/internal/app-binder/task/ProvideContextsTask.d.ts +44 -0
  416. package/lib/types/internal/app-binder/task/ProvideContextsTask.d.ts.map +1 -0
  417. package/lib/types/internal/app-binder/task/ProvideContextsTask.test.d.ts +2 -0
  418. package/lib/types/internal/app-binder/task/ProvideContextsTask.test.d.ts.map +1 -0
  419. package/lib/types/internal/app-binder/task/ProvideEIP712ContextTask.d.ts +14 -5
  420. package/lib/types/internal/app-binder/task/ProvideEIP712ContextTask.d.ts.map +1 -1
  421. package/lib/types/internal/app-binder/task/SendPayloadInChunksTask.d.ts +2 -2
  422. package/lib/types/internal/app-binder/task/SendPayloadInChunksTask.d.ts.map +1 -1
  423. package/lib/types/internal/app-binder/task/SendSignAuthorizationDelegationTask.d.ts +18 -0
  424. package/lib/types/internal/app-binder/task/SendSignAuthorizationDelegationTask.d.ts.map +1 -0
  425. package/lib/types/internal/app-binder/task/SendSignAuthorizationDelegationTask.test.d.ts +2 -0
  426. package/lib/types/internal/app-binder/task/SendSignAuthorizationDelegationTask.test.d.ts.map +1 -0
  427. package/lib/types/internal/app-binder/task/SendSignTransactionTask.d.ts +2 -1
  428. package/lib/types/internal/app-binder/task/SendSignTransactionTask.d.ts.map +1 -1
  429. package/lib/types/internal/app-binder/task/SignTypedDataLegacyTask.d.ts +12 -0
  430. package/lib/types/internal/app-binder/task/SignTypedDataLegacyTask.d.ts.map +1 -0
  431. package/lib/types/internal/app-binder/task/SignTypedDataLegacyTask.test.d.ts +2 -0
  432. package/lib/types/internal/app-binder/task/SignTypedDataLegacyTask.test.d.ts.map +1 -0
  433. package/lib/types/internal/di.d.ts.map +1 -1
  434. package/lib/types/internal/eip7702/di/eip7702Module.d.ts +3 -0
  435. package/lib/types/internal/eip7702/di/eip7702Module.d.ts.map +1 -0
  436. package/lib/types/internal/eip7702/di/eip7702Module.test.d.ts +2 -0
  437. package/lib/types/internal/eip7702/di/eip7702Module.test.d.ts.map +1 -0
  438. package/lib/types/internal/eip7702/di/eip7702Types.d.ts +4 -0
  439. package/lib/types/internal/eip7702/di/eip7702Types.d.ts.map +1 -0
  440. package/lib/types/internal/eip7702/use-case/SignDelegationAuthorizationUseCase.d.ts +8 -0
  441. package/lib/types/internal/eip7702/use-case/SignDelegationAuthorizationUseCase.d.ts.map +1 -0
  442. package/lib/types/internal/eip7702/use-case/SignDelegationAuthorizationUseCase.test.d.ts +2 -0
  443. package/lib/types/internal/eip7702/use-case/SignDelegationAuthorizationUseCase.test.d.ts.map +1 -0
  444. package/lib/types/internal/message/di/messageModule.d.ts.map +1 -1
  445. package/lib/types/internal/message/use-case/SignMessageUseCase.d.ts +2 -1
  446. package/lib/types/internal/message/use-case/SignMessageUseCase.d.ts.map +1 -1
  447. package/lib/types/internal/shared/utils/ApplicationChecker.d.ts.map +1 -1
  448. package/lib/types/internal/transaction/di/transactionModule.d.ts.map +1 -1
  449. package/lib/types/internal/transaction/service/mapper/EthersTransactionMapperService.d.ts +8 -0
  450. package/lib/types/internal/transaction/service/mapper/EthersTransactionMapperService.d.ts.map +1 -0
  451. package/lib/types/internal/transaction/service/mapper/EthersTransactionMapperService.test.d.ts +2 -0
  452. package/lib/types/internal/transaction/service/mapper/EthersTransactionMapperService.test.d.ts.map +1 -0
  453. package/lib/types/internal/transaction/service/mapper/TransactionMapperService.d.ts +4 -7
  454. package/lib/types/internal/transaction/service/mapper/TransactionMapperService.d.ts.map +1 -1
  455. package/lib/types/internal/transaction/service/parser/TransactionParserService.d.ts +2 -2
  456. package/lib/types/internal/transaction/service/parser/TransactionParserService.d.ts.map +1 -1
  457. package/lib/types/internal/typed-data/di/typedDataModule.d.ts.map +1 -1
  458. package/lib/types/internal/typed-data/service/TypedDataParser.d.ts +4 -2
  459. package/lib/types/internal/typed-data/service/TypedDataParser.d.ts.map +1 -1
  460. package/lib/types/internal/typed-data/use-case/SignTypedDataUseCase.d.ts +2 -1
  461. package/lib/types/internal/typed-data/use-case/SignTypedDataUseCase.d.ts.map +1 -1
  462. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  463. package/package.json +18 -19
  464. package/lib/cjs/internal/app-binder/constant/plugins.js +0 -2
  465. package/lib/cjs/internal/app-binder/constant/plugins.js.map +0 -7
  466. package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.js +0 -2
  467. package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.js.map +0 -7
  468. package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.test.js +0 -2
  469. package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.test.js.map +0 -7
  470. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.js +0 -2
  471. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.js.map +0 -7
  472. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.test.js +0 -2
  473. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.test.js.map +0 -7
  474. package/lib/cjs/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.js +0 -2
  475. package/lib/cjs/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.js.map +0 -7
  476. package/lib/cjs/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.test.js +0 -2
  477. package/lib/cjs/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.test.js.map +0 -7
  478. package/lib/cjs/internal/app-binder/task/ProvideTransactionGenericContextTask.js +0 -2
  479. package/lib/cjs/internal/app-binder/task/ProvideTransactionGenericContextTask.js.map +0 -7
  480. package/lib/cjs/internal/app-binder/task/ProvideTransactionGenericContextTask.test.js +0 -2
  481. package/lib/cjs/internal/app-binder/task/ProvideTransactionGenericContextTask.test.js.map +0 -7
  482. package/lib/cjs/internal/transaction/service/mapper/EthersRawTransactionMapper.js +0 -2
  483. package/lib/cjs/internal/transaction/service/mapper/EthersRawTransactionMapper.js.map +0 -7
  484. package/lib/cjs/internal/transaction/service/mapper/EthersRawTransactionMapper.test.js +0 -2
  485. package/lib/cjs/internal/transaction/service/mapper/EthersRawTransactionMapper.test.js.map +0 -7
  486. package/lib/cjs/internal/transaction/service/mapper/TransactionMapper.js +0 -2
  487. package/lib/cjs/internal/transaction/service/mapper/TransactionMapper.js.map +0 -7
  488. package/lib/cjs/internal/transaction/service/mapper/TransactionMapperService.test.js +0 -2
  489. package/lib/cjs/internal/transaction/service/mapper/TransactionMapperService.test.js.map +0 -7
  490. package/lib/esm/internal/app-binder/constant/plugins.js +0 -2
  491. package/lib/esm/internal/app-binder/constant/plugins.js.map +0 -7
  492. package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.js +0 -2
  493. package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.js.map +0 -7
  494. package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.test.js +0 -2
  495. package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.test.js.map +0 -7
  496. package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.js +0 -2
  497. package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.js.map +0 -7
  498. package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.test.js +0 -2
  499. package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.test.js.map +0 -7
  500. package/lib/esm/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.js +0 -2
  501. package/lib/esm/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.js.map +0 -7
  502. package/lib/esm/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.test.js +0 -2
  503. package/lib/esm/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.test.js.map +0 -7
  504. package/lib/esm/internal/app-binder/task/ProvideTransactionGenericContextTask.js +0 -2
  505. package/lib/esm/internal/app-binder/task/ProvideTransactionGenericContextTask.js.map +0 -7
  506. package/lib/esm/internal/app-binder/task/ProvideTransactionGenericContextTask.test.js +0 -2
  507. package/lib/esm/internal/app-binder/task/ProvideTransactionGenericContextTask.test.js.map +0 -7
  508. package/lib/esm/internal/transaction/service/mapper/EthersRawTransactionMapper.js +0 -2
  509. package/lib/esm/internal/transaction/service/mapper/EthersRawTransactionMapper.js.map +0 -7
  510. package/lib/esm/internal/transaction/service/mapper/EthersRawTransactionMapper.test.js +0 -2
  511. package/lib/esm/internal/transaction/service/mapper/EthersRawTransactionMapper.test.js.map +0 -7
  512. package/lib/esm/internal/transaction/service/mapper/TransactionMapper.js +0 -1
  513. package/lib/esm/internal/transaction/service/mapper/TransactionMapperService.test.js +0 -2
  514. package/lib/esm/internal/transaction/service/mapper/TransactionMapperService.test.js.map +0 -7
  515. package/lib/types/internal/app-binder/constant/plugins.d.ts +0 -2
  516. package/lib/types/internal/app-binder/constant/plugins.d.ts.map +0 -1
  517. package/lib/types/internal/app-binder/task/BuildTransactionContextTask.d.ts +0 -32
  518. package/lib/types/internal/app-binder/task/BuildTransactionContextTask.d.ts.map +0 -1
  519. package/lib/types/internal/app-binder/task/BuildTransactionContextTask.test.d.ts +0 -2
  520. package/lib/types/internal/app-binder/task/BuildTransactionContextTask.test.d.ts.map +0 -1
  521. package/lib/types/internal/app-binder/task/ProvideTransactionContextTask.d.ts +0 -38
  522. package/lib/types/internal/app-binder/task/ProvideTransactionContextTask.d.ts.map +0 -1
  523. package/lib/types/internal/app-binder/task/ProvideTransactionContextTask.test.d.ts +0 -2
  524. package/lib/types/internal/app-binder/task/ProvideTransactionContextTask.test.d.ts.map +0 -1
  525. package/lib/types/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.d.ts +0 -80
  526. package/lib/types/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.d.ts.map +0 -1
  527. package/lib/types/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.test.d.ts +0 -2
  528. package/lib/types/internal/app-binder/task/ProvideTransactionFieldDescriptionTask.test.d.ts.map +0 -1
  529. package/lib/types/internal/app-binder/task/ProvideTransactionGenericContextTask.d.ts +0 -28
  530. package/lib/types/internal/app-binder/task/ProvideTransactionGenericContextTask.d.ts.map +0 -1
  531. package/lib/types/internal/app-binder/task/ProvideTransactionGenericContextTask.test.d.ts +0 -2
  532. package/lib/types/internal/app-binder/task/ProvideTransactionGenericContextTask.test.d.ts.map +0 -1
  533. package/lib/types/internal/transaction/service/mapper/EthersRawTransactionMapper.d.ts +0 -7
  534. package/lib/types/internal/transaction/service/mapper/EthersRawTransactionMapper.d.ts.map +0 -1
  535. package/lib/types/internal/transaction/service/mapper/EthersRawTransactionMapper.test.d.ts +0 -2
  536. package/lib/types/internal/transaction/service/mapper/EthersRawTransactionMapper.test.d.ts.map +0 -1
  537. package/lib/types/internal/transaction/service/mapper/TransactionMapper.d.ts +0 -6
  538. package/lib/types/internal/transaction/service/mapper/TransactionMapper.d.ts.map +0 -1
  539. package/lib/types/internal/transaction/service/mapper/TransactionMapperService.test.d.ts +0 -2
  540. package/lib/types/internal/transaction/service/mapper/TransactionMapperService.test.d.ts.map +0 -1
  541. /package/lib/esm/{internal/transaction/service/mapper/TransactionMapper.js.map → api/app-binder/SignDelegationAuthorizationTypes.js.map} +0 -0
@@ -0,0 +1,2 @@
1
+ "use strict";var e=require("@ledgerhq/context-module"),i=require("@ledgerhq/device-management-kit"),d=require("purify-ts"),b=require("../../app-binder/command/GetChallengeCommand"),N=require("../../app-binder/device-action/__test-utils__/makeInternalApi"),r=require("./BuildSubcontextsTask");describe("BuildSubcontextsTask",()=>{const x={getFieldContext:vi.fn()},p={extractValue:vi.fn()},o=(0,N.makeDeviceActionInternalApiMock)();let l;beforeEach(()=>{vi.resetAllMocks(),l={context:{type:e.ClearSignContextType.TRANSACTION_INFO,payload:"test payload"},contextOptional:[],transactionParser:p,subset:{chainId:1,data:"0x",selector:"0x",to:"0x",value:BigInt(0)},contextModule:x,deviceModelId:i.DeviceModelId.STAX}}),describe("when context type is a simple type",()=>{const c=[e.ClearSignContextType.TRANSACTION_INFO,e.ClearSignContextType.WEB3_CHECK,e.ClearSignContextType.PLUGIN,e.ClearSignContextType.EXTERNAL_PLUGIN,e.ClearSignContextType.DYNAMIC_NETWORK,e.ClearSignContextType.DYNAMIC_NETWORK_ICON,e.ClearSignContextType.ENUM,e.ClearSignContextType.TRUSTED_NAME,e.ClearSignContextType.TOKEN,e.ClearSignContextType.NFT];it.each(c)("should return context with empty subcontextCallbacks for %s",t=>{const n={...l,context:{type:t,payload:"test payload"}},s=new r.BuildSubcontextsTask(o,n).run();expect(s.subcontextCallbacks).toHaveLength(0)})}),describe("when context has a direct value reference",()=>{it("should create a callback to get context with the direct value",async()=>{const c={type:e.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"test payload",reference:{type:e.ClearSignContextReferenceType.TOKEN,value:"0x1234567890123456789012345678901234567890"}},t={...l,context:c},a={chainId:1,address:"0x1234567890123456789012345678901234567890"},n=new r.BuildSubcontextsTask(o,t).run();expect(n.subcontextCallbacks).toHaveLength(1);const s=n.subcontextCallbacks[0];await s(),expect(x.getFieldContext).toHaveBeenCalledWith(a,e.ClearSignContextType.TOKEN)}),it("should handle undefined value in reference",()=>{const c={type:e.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"test payload",reference:void 0},t={...l,context:c},a=new r.BuildSubcontextsTask(o,t).run();expect(a.subcontextCallbacks).toHaveLength(0)})}),describe("when context has a valuePath reference",()=>{beforeEach(()=>{o.sendCommand.mockResolvedValue((0,i.CommandResultFactory)({data:{challenge:"test-challenge"}}))}),describe("when extractValue returns Left (error)",()=>{it("should return context with empty subcontextCallbacks",()=>{const c={type:e.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"test payload",reference:{type:e.ClearSignContextReferenceType.TOKEN,valuePath:[{type:"SLICE",start:0,end:20}]}},t={...l,context:c};p.extractValue.mockReturnValue((0,d.Left)(new Error("Extraction failed")));const a=new r.BuildSubcontextsTask(o,t).run();expect(a.subcontextCallbacks).toHaveLength(0)})}),describe("when extractValue returns Right with values",()=>{describe("for ENUM type",()=>{it("should create callbacks for matching enum contexts",async()=>{const c={type:e.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"test payload",reference:{type:e.ClearSignContextReferenceType.ENUM,id:1,valuePath:[{type:"TUPLE",offset:0}]}},t={type:e.ClearSignContextType.ENUM,id:1,value:1,payload:"enum context 1"},a={type:e.ClearSignContextType.ENUM,id:1,value:2,payload:"enum context 2"},n={type:e.ClearSignContextType.ENUM,id:2,value:2,payload:"enum context 3"},s={...l,context:c,contextOptional:[t,a,n]},u=[new Uint8Array([1,2])];p.extractValue.mockReturnValue((0,d.Right)(u));const y=new r.BuildSubcontextsTask(o,s).run();expect(y.subcontextCallbacks).toHaveLength(1);const C=y.subcontextCallbacks[0],h=await C();expect(h).toEqual(a)}),it("should create callbacks for matching enum contexts with two values",async()=>{const c={type:e.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"test payload",reference:{type:e.ClearSignContextReferenceType.ENUM,id:1,valuePath:[{type:"TUPLE",offset:0}]}},t={type:e.ClearSignContextType.ENUM,id:1,value:1,payload:"enum context 1"},a={type:e.ClearSignContextType.ENUM,id:1,value:2,payload:"enum context 2"},n={type:e.ClearSignContextType.ENUM,id:2,value:2,payload:"enum context 3"},s={...l,context:c,contextOptional:[t,a,n]},u=[new Uint8Array([1,2]),new Uint8Array([3,2,1])];p.extractValue.mockReturnValue((0,d.Right)(u));const y=new r.BuildSubcontextsTask(o,s).run();expect(y.subcontextCallbacks).toHaveLength(2);const C=y.subcontextCallbacks[0],h=y.subcontextCallbacks[1],g=await C(),E=await h();expect(g).toEqual(a),expect(E).toEqual(t)}),it("should skip when enum value is undefined",()=>{const c={type:e.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"test payload",reference:{type:e.ClearSignContextReferenceType.ENUM,id:1,valuePath:[{type:"TUPLE",offset:0}]}},t={...l,context:c},a=[new Uint8Array([])];p.extractValue.mockReturnValue((0,d.Right)(a));const n=new r.BuildSubcontextsTask(o,t).run();expect(n.subcontextCallbacks).toHaveLength(0)}),it("should create callback with enum id 0",async()=>{const c={type:e.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"test payload",reference:{type:e.ClearSignContextReferenceType.ENUM,id:0,valuePath:[{type:"TUPLE",offset:0}]}},t={type:e.ClearSignContextType.ENUM,id:0,value:0,payload:"enum context 1"},a={type:e.ClearSignContextType.ENUM,id:1,value:1,payload:"enum context 2"},n={...l,context:c,contextOptional:[t,a]},s=[new Uint8Array([1,0])];p.extractValue.mockReturnValue((0,d.Right)(s));const u=new r.BuildSubcontextsTask(o,n).run();expect(u.subcontextCallbacks).toHaveLength(1);const y=u.subcontextCallbacks[0],C=await y();expect(C).toEqual(t)}),it("should skip when no matching enum context found",()=>{const c={type:e.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"test payload",reference:{type:e.ClearSignContextReferenceType.ENUM,id:1,valuePath:[{type:"TUPLE",offset:0}]}},t={type:e.ClearSignContextType.ENUM,id:2,value:2,payload:"enum context"},a={...l,context:c,contextOptional:[t]},n=[new Uint8Array([1,2])];p.extractValue.mockReturnValue((0,d.Right)(n));const s=new r.BuildSubcontextsTask(o,a).run();expect(s.subcontextCallbacks).toHaveLength(0)})}),describe("for TOKEN type",()=>{it("should create callbacks to get token context",async()=>{const c={type:e.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"test payload",reference:{type:e.ClearSignContextReferenceType.TOKEN,valuePath:[{type:"TUPLE",offset:0}]}},t={...l,context:c},a=[new Uint8Array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22])];p.extractValue.mockReturnValue((0,d.Right)(a)),x.getFieldContext.mockResolvedValue({type:e.ClearSignContextType.TOKEN,payload:"token result"});const n=new r.BuildSubcontextsTask(o,t).run();expect(n.subcontextCallbacks).toHaveLength(1);const s=n.subcontextCallbacks[0],u=await s();expect(u).toEqual({type:e.ClearSignContextType.TOKEN,payload:"token result"}),expect(x.getFieldContext).toHaveBeenCalledWith({chainId:1,address:"0x030405060708090a0b0c0d0e0f10111213141516"},e.ClearSignContextType.TOKEN)}),it("should create callbacks to get token as constant",async()=>{const c={type:e.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"test payload",reference:{type:e.ClearSignContextReferenceType.TOKEN,value:"0x030405060708090a0b0c0d0e0f10111213141516"}},t={...l,context:c};x.getFieldContext.mockResolvedValue({type:e.ClearSignContextType.TOKEN,payload:"token result"});const a=new r.BuildSubcontextsTask(o,t).run();expect(a.subcontextCallbacks).toHaveLength(1);const n=a.subcontextCallbacks[0],s=await n();expect(s).toEqual({type:e.ClearSignContextType.TOKEN,payload:"token result"}),expect(x.getFieldContext).toHaveBeenCalledWith({chainId:1,address:"0x030405060708090a0b0c0d0e0f10111213141516"},e.ClearSignContextType.TOKEN)})}),describe("for NFT type",()=>{it("should create callbacks to get NFT context",async()=>{const c={type:e.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"test payload",reference:{type:e.ClearSignContextReferenceType.NFT,valuePath:[{type:"TUPLE",offset:0}]}},t={...l,context:c},a=[new Uint8Array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22])];p.extractValue.mockReturnValue((0,d.Right)(a)),x.getFieldContext.mockResolvedValue({type:e.ClearSignContextType.NFT,payload:"nft result"});const n=new r.BuildSubcontextsTask(o,t).run();expect(n.subcontextCallbacks).toHaveLength(1);const s=n.subcontextCallbacks[0],u=await s();expect(u).toEqual({type:e.ClearSignContextType.NFT,payload:"nft result"}),expect(x.getFieldContext).toHaveBeenCalledWith({chainId:1,address:"0x030405060708090a0b0c0d0e0f10111213141516"},e.ClearSignContextType.NFT)}),it("should create callbacks to get NFT as constant",async()=>{const c={type:e.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"test payload",reference:{type:e.ClearSignContextReferenceType.NFT,value:"0x030405060708090a0b0c0d0e0f10111213141516"}},t={...l,context:c};x.getFieldContext.mockResolvedValue({type:e.ClearSignContextType.NFT,payload:"nft result"});const a=new r.BuildSubcontextsTask(o,t).run();expect(a.subcontextCallbacks).toHaveLength(1);const n=a.subcontextCallbacks[0],s=await n();expect(s).toEqual({type:e.ClearSignContextType.NFT,payload:"nft result"}),expect(x.getFieldContext).toHaveBeenCalledWith({chainId:1,address:"0x030405060708090a0b0c0d0e0f10111213141516"},e.ClearSignContextType.NFT)})}),describe("for TRUSTED_NAME type",()=>{it("should create callbacks to get trusted name context with challenge",async()=>{const c={type:e.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"test payload",reference:{type:e.ClearSignContextReferenceType.TRUSTED_NAME,valuePath:[{type:"TUPLE",offset:0}],types:["type1","type2"],sources:["source1","source2"]}},t={...l,context:c},a=[new Uint8Array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22])];p.extractValue.mockReturnValue((0,d.Right)(a)),x.getFieldContext.mockResolvedValue({type:e.ClearSignContextType.TRUSTED_NAME,payload:"trusted name result"});const n=new r.BuildSubcontextsTask(o,t).run();expect(n.subcontextCallbacks).toHaveLength(1);const s=n.subcontextCallbacks[0],u=await s();expect(u).toEqual({type:e.ClearSignContextType.TRUSTED_NAME,payload:"trusted name result"}),expect(o.sendCommand).toHaveBeenCalledWith(expect.any(b.GetChallengeCommand)),expect(x.getFieldContext).toHaveBeenCalledWith({chainId:1,address:"0x030405060708090a0b0c0d0e0f10111213141516",challenge:"test-challenge",types:["type1","type2"],sources:["source1","source2"],deviceModelId:i.DeviceModelId.STAX},e.ClearSignContextType.TRUSTED_NAME)}),it("should handle challenge command failure",async()=>{const c={type:e.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"test payload",reference:{type:e.ClearSignContextReferenceType.TRUSTED_NAME,valuePath:[{type:"TUPLE",offset:0}],types:["type1"],sources:["source1"]}},t={...l,context:c},a=[new Uint8Array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22])];p.extractValue.mockReturnValue((0,d.Right)(a));const n=new i.UnknownDeviceExchangeError("Failed");o.sendCommand.mockResolvedValueOnce((0,i.CommandResultFactory)({error:n}));const s=new r.BuildSubcontextsTask(o,t).run();expect(s.subcontextCallbacks).toHaveLength(1);const u=s.subcontextCallbacks[0],y=await u();expect(y).toEqual({error:new Error("Failed to get challenge"),type:e.ClearSignContextType.ERROR})})}),describe("for multiple values",()=>{it("should create callbacks for each extracted value",async()=>{const c={type:e.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"test payload",reference:{type:e.ClearSignContextReferenceType.TOKEN,valuePath:[{type:"TUPLE",offset:0}]}},t={...l,context:c},a=[new Uint8Array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22]),new Uint8Array([33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54])];p.extractValue.mockReturnValue((0,d.Right)(a)),x.getFieldContext.mockResolvedValueOnce({type:e.ClearSignContextType.TOKEN,payload:"token result 1"}),x.getFieldContext.mockResolvedValueOnce({type:e.ClearSignContextType.TOKEN,payload:"token result 2"});const n=new r.BuildSubcontextsTask(o,t).run();expect(n.subcontextCallbacks).toHaveLength(2);const s=n.subcontextCallbacks[0],u=n.subcontextCallbacks[1],y=await s(),C=await u();expect(y).toEqual({type:e.ClearSignContextType.TOKEN,payload:"token result 1"}),expect(C).toEqual({type:e.ClearSignContextType.TOKEN,payload:"token result 2"}),expect(x.getFieldContext).toHaveBeenCalledTimes(2),expect(x.getFieldContext).toHaveBeenNthCalledWith(1,{chainId:1,address:"0x030405060708090a0b0c0d0e0f10111213141516"},e.ClearSignContextType.TOKEN),expect(x.getFieldContext).toHaveBeenNthCalledWith(2,{chainId:1,address:"0x232425262728292a2b2c2d2e2f30313233343536"},e.ClearSignContextType.TOKEN)})})})}),describe("when context has no reference",()=>{it("should return context with empty subcontextCallbacks",()=>{const c={type:e.ClearSignContextType.TOKEN,payload:"test payload"},t={...l,context:c},a=new r.BuildSubcontextsTask(o,t).run();expect(a.subcontextCallbacks).toHaveLength(0)})}),describe("when context has reference but no valuePath",()=>{it("should return context with empty subcontextCallbacks",()=>{const c={type:e.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"test payload",reference:{type:e.ClearSignContextReferenceType.TOKEN,valuePath:void 0}},t={...l,context:c},a=new r.BuildSubcontextsTask(o,t).run();expect(a.subcontextCallbacks).toHaveLength(0)})}),describe("error handling",()=>{it("should throw error for uncovered context type",()=>{const t={...l,context:{type:"UNKNOWN_TYPE",payload:"test payload"}};expect(()=>new r.BuildSubcontextsTask(o,t).run()).toThrow("Uncovered type: UNKNOWN_TYPE")}),it("should throw error for uncovered reference type",()=>{const c={type:e.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"test payload",reference:{type:"UNKNOWN_REFERENCE_TYPE"}},t={...l,context:c};expect(()=>new r.BuildSubcontextsTask(o,t).run()).toThrow("Uncovered reference type: UNKNOWN_REFERENCE_TYPE")})}),describe("CALLDATA reference type",()=>{it("should return empty subcontextCallbacks for CALLDATA reference",()=>{const c={type:e.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"test payload",reference:{type:e.ClearSignContextReferenceType.CALLDATA,callee:[{type:"TUPLE",offset:0}],valuePath:[{type:"TUPLE",offset:0}]}},t={...l,context:c},a=new r.BuildSubcontextsTask(o,t).run();expect(a.subcontextCallbacks).toHaveLength(0)})}),describe("references without valuePath",()=>{it("should return empty subcontextCallbacks for ENUM reference without valuePath",()=>{const c={type:e.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"test payload",reference:{type:e.ClearSignContextReferenceType.ENUM,id:1,valuePath:void 0}},t={...l,context:c},a=new r.BuildSubcontextsTask(o,t).run();expect(a.subcontextCallbacks).toHaveLength(0)}),it("should return empty subcontextCallbacks for TRUSTED_NAME reference without valuePath",()=>{const c={type:e.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"test payload",reference:{type:e.ClearSignContextReferenceType.TRUSTED_NAME,types:["type1"],sources:["source1"],valuePath:void 0}},t={...l,context:c},a=new r.BuildSubcontextsTask(o,t).run();expect(a.subcontextCallbacks).toHaveLength(0)})}),describe("PROXY_INFO context type",()=>{beforeEach(()=>{o.sendCommand.mockResolvedValue((0,i.CommandResultFactory)({data:{challenge:"test-challenge"}}))}),it("should create callback to get proxy delegate call context",async()=>{const c={type:e.ClearSignContextType.PROXY_INFO,payload:"proxy payload"},t={...l,context:c,subset:{...l.subset,to:"0x1234567890123456789012345678901234567890",data:"0xabcdef"}};x.getFieldContext.mockResolvedValue({type:e.ClearSignContextType.PROXY_INFO,payload:"proxy result"});const a=new r.BuildSubcontextsTask(o,t).run();expect(a.subcontextCallbacks).toHaveLength(1);const n=a.subcontextCallbacks[0],s=await n();expect(s).toEqual({type:e.ClearSignContextType.PROXY_INFO,payload:"proxy result"}),expect(o.sendCommand).toHaveBeenCalledWith(expect.any(b.GetChallengeCommand)),expect(x.getFieldContext).toHaveBeenCalledWith({chainId:1,proxyAddress:"0x1234567890123456789012345678901234567890",calldata:"0xabcdef",deviceModelId:i.DeviceModelId.STAX,challenge:"test-challenge"},e.ClearSignContextType.PROXY_INFO)}),it("should handle challenge command failure",async()=>{const c={type:e.ClearSignContextType.PROXY_INFO,payload:"proxy payload"},t={...l,context:c,subset:{...l.subset,to:"0x1234567890123456789012345678901234567890",data:"0xabcdef"}},a=new i.UnknownDeviceExchangeError("Failed");o.sendCommand.mockResolvedValueOnce((0,i.CommandResultFactory)({error:a}));const n=new r.BuildSubcontextsTask(o,t).run();expect(n.subcontextCallbacks).toHaveLength(1);const s=n.subcontextCallbacks[0],u=await s();expect(u).toEqual({error:new Error("Failed to get challenge"),type:e.ClearSignContextType.ERROR}),expect(o.sendCommand).toHaveBeenCalledWith(expect.any(b.GetChallengeCommand)),expect(x.getFieldContext).not.toHaveBeenCalled()}),it("should handle missing proxy address",async()=>{const c={type:e.ClearSignContextType.PROXY_INFO,payload:"proxy payload"},t={...l,context:c,subset:{...l.subset,to:void 0,data:"0xabcdef"}},a=new r.BuildSubcontextsTask(o,t).run();expect(a.subcontextCallbacks).toHaveLength(1);const n=a.subcontextCallbacks[0],s=await n();expect(s).toEqual({error:new Error("Failed to get proxy address"),type:e.ClearSignContextType.ERROR}),expect(o.sendCommand).toHaveBeenCalledWith(expect.any(b.GetChallengeCommand)),expect(x.getFieldContext).not.toHaveBeenCalled()}),it("should use correct device model id in context",async()=>{const c={type:e.ClearSignContextType.PROXY_INFO,payload:"proxy payload"},t={...l,context:c,deviceModelId:i.DeviceModelId.NANO_SP,subset:{...l.subset,to:"0x1234567890123456789012345678901234567890",data:"0xabcdef"}};x.getFieldContext.mockResolvedValue({type:e.ClearSignContextType.PROXY_INFO,payload:"proxy result"});const a=new r.BuildSubcontextsTask(o,t).run();expect(a.subcontextCallbacks).toHaveLength(1);const n=a.subcontextCallbacks[0];await n(),expect(x.getFieldContext).toHaveBeenCalledWith({chainId:1,proxyAddress:"0x1234567890123456789012345678901234567890",calldata:"0xabcdef",deviceModelId:i.DeviceModelId.NANO_SP,challenge:"test-challenge"},e.ClearSignContextType.PROXY_INFO)})}),describe("edge cases",()=>{it("should handle value array shorter than 20 bytes for address extraction",async()=>{const c={type:e.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"test payload",reference:{type:e.ClearSignContextReferenceType.TOKEN,valuePath:[{type:"TUPLE",offset:0}]}},t={...l,context:c},a=[new Uint8Array([1,2,3])];p.extractValue.mockReturnValue((0,d.Right)(a)),x.getFieldContext.mockResolvedValue({type:e.ClearSignContextType.ERROR,message:"Invalid address"});const n=new r.BuildSubcontextsTask(o,t).run();expect(n.subcontextCallbacks).toHaveLength(1);const s=n.subcontextCallbacks[0],u=await s();expect(u).toEqual({type:e.ClearSignContextType.ERROR,message:"Invalid address"}),expect(x.getFieldContext).toHaveBeenCalledWith({chainId:1,address:"0x010203"},e.ClearSignContextType.TOKEN)}),it("should handle empty value array",async()=>{const c={type:e.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"test payload",reference:{type:e.ClearSignContextReferenceType.TOKEN,valuePath:[{type:"TUPLE",offset:0}]}},t={...l,context:c},a=[new Uint8Array([])];p.extractValue.mockReturnValue((0,d.Right)(a)),x.getFieldContext.mockResolvedValue({type:e.ClearSignContextType.TOKEN,payload:"token result"});const n=new r.BuildSubcontextsTask(o,t).run();expect(n.subcontextCallbacks).toHaveLength(1);const s=n.subcontextCallbacks[0],u=await s();expect(u).toEqual({type:e.ClearSignContextType.TOKEN,payload:"token result"}),expect(x.getFieldContext).toHaveBeenCalledWith({chainId:1,address:"0x"},e.ClearSignContextType.TOKEN)})})});
2
+ //# sourceMappingURL=BuildSubcontextsTask.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/internal/app-binder/task/BuildSubcontextsTask.test.ts"],
4
+ "sourcesContent": ["import {\n type ClearSignContextReference,\n ClearSignContextReferenceType,\n type ClearSignContextSuccess,\n ClearSignContextType,\n type ContextModule,\n type GenericPath,\n} from \"@ledgerhq/context-module\";\nimport {\n CommandResultFactory,\n DeviceModelId,\n UnknownDeviceExchangeError,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { GetChallengeCommand } from \"@internal/app-binder/command/GetChallengeCommand\";\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\nimport { type TransactionParserService } from \"@internal/transaction/service/parser/TransactionParserService\";\n\nimport {\n BuildSubcontextsTask,\n type BuildSubcontextsTaskArgs,\n} from \"./BuildSubcontextsTask\";\n\ndescribe(\"BuildSubcontextsTask\", () => {\n const contextModuleMock = {\n getFieldContext: vi.fn(),\n };\n const transactionParserMock = {\n extractValue: vi.fn(),\n };\n const apiMock = makeDeviceActionInternalApiMock();\n\n let defaultArgs: BuildSubcontextsTaskArgs;\n\n beforeEach(() => {\n vi.resetAllMocks();\n defaultArgs = {\n context: {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"test payload\",\n },\n contextOptional: [],\n transactionParser:\n transactionParserMock as unknown as TransactionParserService,\n subset: {\n chainId: 1,\n data: \"0x\",\n selector: \"0x\",\n to: \"0x\",\n value: BigInt(0),\n },\n contextModule: contextModuleMock as unknown as ContextModule,\n deviceModelId: DeviceModelId.STAX,\n };\n });\n\n describe(\"when context type is a simple type\", () => {\n const simpleTypes: ClearSignContextSuccess[\"type\"][] = [\n ClearSignContextType.TRANSACTION_INFO,\n ClearSignContextType.WEB3_CHECK,\n ClearSignContextType.PLUGIN,\n ClearSignContextType.EXTERNAL_PLUGIN,\n ClearSignContextType.DYNAMIC_NETWORK,\n ClearSignContextType.DYNAMIC_NETWORK_ICON,\n ClearSignContextType.ENUM,\n ClearSignContextType.TRUSTED_NAME,\n ClearSignContextType.TOKEN,\n ClearSignContextType.NFT,\n ];\n\n it.each(simpleTypes)(\n \"should return context with empty subcontextCallbacks for %s\",\n (type) => {\n // GIVEN\n const context: ClearSignContextSuccess = {\n type,\n payload: \"test payload\",\n } as ClearSignContextSuccess;\n const args = { ...defaultArgs, context };\n\n // WHEN\n const result = new BuildSubcontextsTask(apiMock, args).run();\n\n // THEN\n expect(result.subcontextCallbacks).toHaveLength(0);\n },\n );\n });\n\n describe(\"when context has a direct value reference\", () => {\n it(\"should create a callback to get context with the direct value\", async () => {\n // GIVEN\n const context: ClearSignContextSuccess = {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"test payload\",\n reference: {\n type: ClearSignContextReferenceType.TOKEN,\n value: \"0x1234567890123456789012345678901234567890\",\n },\n };\n const args = { ...defaultArgs, context };\n const expectedContext = {\n chainId: 1,\n address: \"0x1234567890123456789012345678901234567890\",\n };\n\n // WHEN\n const result = new BuildSubcontextsTask(apiMock, args).run();\n\n // THEN\n expect(result.subcontextCallbacks).toHaveLength(1);\n\n // Verify the callback calls getContext with correct parameters\n const callback = result.subcontextCallbacks[0]!;\n await callback();\n expect(contextModuleMock.getFieldContext).toHaveBeenCalledWith(\n expectedContext,\n ClearSignContextType.TOKEN,\n );\n });\n\n it(\"should handle undefined value in reference\", () => {\n // GIVEN\n const context: ClearSignContextSuccess = {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"test payload\",\n reference: undefined as unknown as ClearSignContextReference,\n };\n const args = { ...defaultArgs, context };\n\n // WHEN\n const result = new BuildSubcontextsTask(apiMock, args).run();\n\n // THEN\n expect(result.subcontextCallbacks).toHaveLength(0);\n });\n });\n\n describe(\"when context has a valuePath reference\", () => {\n beforeEach(() => {\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: { challenge: \"test-challenge\" } }),\n );\n });\n\n describe(\"when extractValue returns Left (error)\", () => {\n it(\"should return context with empty subcontextCallbacks\", () => {\n // GIVEN\n const context: ClearSignContextSuccess = {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"test payload\",\n reference: {\n type: ClearSignContextReferenceType.TOKEN,\n valuePath: [{ type: \"SLICE\", start: 0, end: 20 }],\n },\n };\n const args = { ...defaultArgs, context };\n transactionParserMock.extractValue.mockReturnValue(\n Left(new Error(\"Extraction failed\")),\n );\n\n // WHEN\n const result = new BuildSubcontextsTask(apiMock, args).run();\n\n // THEN\n expect(result.subcontextCallbacks).toHaveLength(0);\n });\n });\n\n describe(\"when extractValue returns Right with values\", () => {\n describe(\"for ENUM type\", () => {\n it(\"should create callbacks for matching enum contexts\", async () => {\n // GIVEN\n const context: ClearSignContextSuccess = {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"test payload\",\n reference: {\n type: ClearSignContextReferenceType.ENUM,\n id: 1,\n valuePath: [{ type: \"TUPLE\", offset: 0 }],\n },\n };\n // enum with the same id but different value\n const enumContext1: ClearSignContextSuccess = {\n type: ClearSignContextType.ENUM,\n id: 1,\n value: 1,\n payload: \"enum context 1\",\n };\n // enum to select, id and value match\n const enumContext2: ClearSignContextSuccess = {\n type: ClearSignContextType.ENUM,\n id: 1,\n value: 2,\n payload: \"enum context 2\",\n };\n // other enum context with different id\n const enumContext3: ClearSignContextSuccess = {\n type: ClearSignContextType.ENUM,\n id: 2,\n value: 2,\n payload: \"enum context 3\",\n };\n const args = {\n ...defaultArgs,\n context,\n contextOptional: [enumContext1, enumContext2, enumContext3],\n };\n const extractedValues = [new Uint8Array([0x01, 0x02])]; // Last byte is 2\n transactionParserMock.extractValue.mockReturnValue(\n Right(extractedValues),\n );\n\n // WHEN\n const result = new BuildSubcontextsTask(apiMock, args).run();\n\n // THEN\n expect(result.subcontextCallbacks).toHaveLength(1);\n const callback = result.subcontextCallbacks[0]!;\n const callbackResult = await callback();\n expect(callbackResult).toEqual(enumContext2);\n });\n\n it(\"should create callbacks for matching enum contexts with two values\", async () => {\n // GIVEN\n const context: ClearSignContextSuccess = {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"test payload\",\n reference: {\n type: ClearSignContextReferenceType.ENUM,\n id: 1,\n valuePath: [{ type: \"TUPLE\", offset: 0 }],\n },\n };\n // enum to select, id and value match\n const enumContext1: ClearSignContextSuccess = {\n type: ClearSignContextType.ENUM,\n id: 1,\n value: 1,\n payload: \"enum context 1\",\n };\n // enum to select, id and value match\n const enumContext2: ClearSignContextSuccess = {\n type: ClearSignContextType.ENUM,\n id: 1,\n value: 2,\n payload: \"enum context 2\",\n };\n // other enum context with different id\n const enumContext3: ClearSignContextSuccess = {\n type: ClearSignContextType.ENUM,\n id: 2,\n value: 2,\n payload: \"enum context 3\",\n };\n const args = {\n ...defaultArgs,\n context,\n contextOptional: [enumContext1, enumContext2, enumContext3],\n };\n const extractedValues = [\n new Uint8Array([0x01, 0x02]),\n new Uint8Array([0x03, 0x02, 0x01]),\n ]; // Last byte is 2\n transactionParserMock.extractValue.mockReturnValue(\n Right(extractedValues),\n );\n\n // WHEN\n const result = new BuildSubcontextsTask(apiMock, args).run();\n\n // THEN\n expect(result.subcontextCallbacks).toHaveLength(2);\n const callback1 = result.subcontextCallbacks[0]!;\n const callback2 = result.subcontextCallbacks[1]!;\n const callbackResult1 = await callback1();\n const callbackResult2 = await callback2();\n expect(callbackResult1).toEqual(enumContext2);\n expect(callbackResult2).toEqual(enumContext1);\n });\n\n it(\"should skip when enum value is undefined\", () => {\n // GIVEN\n const context: ClearSignContextSuccess = {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"test payload\",\n reference: {\n type: ClearSignContextReferenceType.ENUM,\n id: 1,\n valuePath: [{ type: \"TUPLE\", offset: 0 }],\n },\n };\n const args = { ...defaultArgs, context };\n const extractedValues = [new Uint8Array([])]; // Empty array\n transactionParserMock.extractValue.mockReturnValue(\n Right(extractedValues),\n );\n\n // WHEN\n const result = new BuildSubcontextsTask(apiMock, args).run();\n\n // THEN\n expect(result.subcontextCallbacks).toHaveLength(0);\n });\n\n it(\"should create callback with enum id 0\", async () => {\n // GIVEN\n const context: ClearSignContextSuccess = {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"test payload\",\n reference: {\n type: ClearSignContextReferenceType.ENUM,\n id: 0,\n valuePath: [{ type: \"TUPLE\", offset: 0 }],\n },\n };\n const enumContext1: ClearSignContextSuccess = {\n type: ClearSignContextType.ENUM,\n id: 0,\n value: 0,\n payload: \"enum context 1\",\n };\n const enumContext2: ClearSignContextSuccess = {\n type: ClearSignContextType.ENUM,\n id: 1,\n value: 1,\n payload: \"enum context 2\",\n };\n const args = {\n ...defaultArgs,\n context,\n contextOptional: [enumContext1, enumContext2],\n };\n const extractedValues = [new Uint8Array([0x01, 0x00])];\n transactionParserMock.extractValue.mockReturnValue(\n Right(extractedValues),\n );\n\n // WHEN\n const result = new BuildSubcontextsTask(apiMock, args).run();\n\n // THEN\n expect(result.subcontextCallbacks).toHaveLength(1);\n const callback = result.subcontextCallbacks[0]!;\n const callbackResult = await callback();\n expect(callbackResult).toEqual(enumContext1);\n });\n\n it(\"should skip when no matching enum context found\", () => {\n // GIVEN\n const context: ClearSignContextSuccess = {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"test payload\",\n reference: {\n type: ClearSignContextReferenceType.ENUM,\n id: 1,\n valuePath: [{ type: \"TUPLE\", offset: 0 }],\n },\n };\n const enumContext: ClearSignContextSuccess = {\n type: ClearSignContextType.ENUM,\n id: 2, // Different ID\n value: 2,\n payload: \"enum context\",\n };\n const args = {\n ...defaultArgs,\n context,\n contextOptional: [enumContext],\n };\n const extractedValues = [new Uint8Array([0x01, 0x02])];\n transactionParserMock.extractValue.mockReturnValue(\n Right(extractedValues),\n );\n\n // WHEN\n const result = new BuildSubcontextsTask(apiMock, args).run();\n\n // THEN\n expect(result.subcontextCallbacks).toHaveLength(0);\n });\n });\n\n describe(\"for TOKEN type\", () => {\n it(\"should create callbacks to get token context\", async () => {\n // GIVEN\n const context: ClearSignContextSuccess = {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"test payload\",\n reference: {\n type: ClearSignContextReferenceType.TOKEN,\n valuePath: [{ type: \"TUPLE\", offset: 0 }],\n },\n };\n const args = { ...defaultArgs, context };\n const extractedValues = [\n new Uint8Array([\n 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,\n 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,\n ]),\n ];\n transactionParserMock.extractValue.mockReturnValue(\n Right(extractedValues),\n );\n contextModuleMock.getFieldContext.mockResolvedValue({\n type: ClearSignContextType.TOKEN,\n payload: \"token result\",\n });\n\n // WHEN\n const result = new BuildSubcontextsTask(apiMock, args).run();\n\n // THEN\n expect(result.subcontextCallbacks).toHaveLength(1);\n const callback = result.subcontextCallbacks[0]!;\n const callbackResult = await callback();\n expect(callbackResult).toEqual({\n type: ClearSignContextType.TOKEN,\n payload: \"token result\",\n });\n expect(contextModuleMock.getFieldContext).toHaveBeenCalledWith(\n {\n chainId: 1,\n address: \"0x030405060708090a0b0c0d0e0f10111213141516\",\n },\n ClearSignContextType.TOKEN,\n );\n });\n\n it(\"should create callbacks to get token as constant\", async () => {\n // GIVEN\n const context: ClearSignContextSuccess = {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"test payload\",\n reference: {\n type: ClearSignContextReferenceType.TOKEN,\n value: \"0x030405060708090a0b0c0d0e0f10111213141516\",\n },\n };\n const args = { ...defaultArgs, context };\n contextModuleMock.getFieldContext.mockResolvedValue({\n type: ClearSignContextType.TOKEN,\n payload: \"token result\",\n });\n\n // WHEN\n const result = new BuildSubcontextsTask(apiMock, args).run();\n\n // THEN\n expect(result.subcontextCallbacks).toHaveLength(1);\n const callback = result.subcontextCallbacks[0]!;\n const callbackResult = await callback();\n expect(callbackResult).toEqual({\n type: ClearSignContextType.TOKEN,\n payload: \"token result\",\n });\n expect(contextModuleMock.getFieldContext).toHaveBeenCalledWith(\n {\n chainId: 1,\n address: \"0x030405060708090a0b0c0d0e0f10111213141516\",\n },\n ClearSignContextType.TOKEN,\n );\n });\n });\n\n describe(\"for NFT type\", () => {\n it(\"should create callbacks to get NFT context\", async () => {\n // GIVEN\n const context: ClearSignContextSuccess = {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"test payload\",\n reference: {\n type: ClearSignContextReferenceType.NFT,\n valuePath: [{ type: \"TUPLE\", offset: 0 }],\n },\n };\n const args = { ...defaultArgs, context };\n const extractedValues = [\n new Uint8Array([\n 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,\n 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,\n ]),\n ];\n transactionParserMock.extractValue.mockReturnValue(\n Right(extractedValues),\n );\n contextModuleMock.getFieldContext.mockResolvedValue({\n type: ClearSignContextType.NFT,\n payload: \"nft result\",\n });\n\n // WHEN\n const result = new BuildSubcontextsTask(apiMock, args).run();\n\n // THEN\n expect(result.subcontextCallbacks).toHaveLength(1);\n const callback = result.subcontextCallbacks[0]!;\n const callbackResult = await callback();\n expect(callbackResult).toEqual({\n type: ClearSignContextType.NFT,\n payload: \"nft result\",\n });\n expect(contextModuleMock.getFieldContext).toHaveBeenCalledWith(\n {\n chainId: 1,\n address: \"0x030405060708090a0b0c0d0e0f10111213141516\",\n },\n ClearSignContextType.NFT,\n );\n });\n\n it(\"should create callbacks to get NFT as constant\", async () => {\n // GIVEN\n const context: ClearSignContextSuccess = {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"test payload\",\n reference: {\n type: ClearSignContextReferenceType.NFT,\n value: \"0x030405060708090a0b0c0d0e0f10111213141516\",\n },\n };\n const args = { ...defaultArgs, context };\n contextModuleMock.getFieldContext.mockResolvedValue({\n type: ClearSignContextType.NFT,\n payload: \"nft result\",\n });\n\n // WHEN\n const result = new BuildSubcontextsTask(apiMock, args).run();\n\n // THEN\n expect(result.subcontextCallbacks).toHaveLength(1);\n const callback = result.subcontextCallbacks[0]!;\n const callbackResult = await callback();\n expect(callbackResult).toEqual({\n type: ClearSignContextType.NFT,\n payload: \"nft result\",\n });\n expect(contextModuleMock.getFieldContext).toHaveBeenCalledWith(\n {\n chainId: 1,\n address: \"0x030405060708090a0b0c0d0e0f10111213141516\",\n },\n ClearSignContextType.NFT,\n );\n });\n });\n\n describe(\"for TRUSTED_NAME type\", () => {\n it(\"should create callbacks to get trusted name context with challenge\", async () => {\n // GIVEN\n const context: ClearSignContextSuccess = {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"test payload\",\n reference: {\n type: ClearSignContextReferenceType.TRUSTED_NAME,\n valuePath: [{ type: \"TUPLE\", offset: 0 }],\n types: [\"type1\", \"type2\"],\n sources: [\"source1\", \"source2\"],\n },\n };\n const args = { ...defaultArgs, context };\n const extractedValues = [\n new Uint8Array([\n 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,\n 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,\n ]),\n ];\n transactionParserMock.extractValue.mockReturnValue(\n Right(extractedValues),\n );\n contextModuleMock.getFieldContext.mockResolvedValue({\n type: ClearSignContextType.TRUSTED_NAME,\n payload: \"trusted name result\",\n });\n\n // WHEN\n const result = new BuildSubcontextsTask(apiMock, args).run();\n\n // THEN\n expect(result.subcontextCallbacks).toHaveLength(1);\n const callback = result.subcontextCallbacks[0]!;\n const callbackResult = await callback();\n expect(callbackResult).toEqual({\n type: ClearSignContextType.TRUSTED_NAME,\n payload: \"trusted name result\",\n });\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n expect.any(GetChallengeCommand),\n );\n expect(contextModuleMock.getFieldContext).toHaveBeenCalledWith(\n {\n chainId: 1,\n address: \"0x030405060708090a0b0c0d0e0f10111213141516\",\n challenge: \"test-challenge\",\n types: [\"type1\", \"type2\"],\n sources: [\"source1\", \"source2\"],\n deviceModelId: DeviceModelId.STAX,\n },\n ClearSignContextType.TRUSTED_NAME,\n );\n });\n\n it(\"should handle challenge command failure\", async () => {\n // GIVEN\n const context: ClearSignContextSuccess = {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"test payload\",\n reference: {\n type: ClearSignContextReferenceType.TRUSTED_NAME,\n valuePath: [{ type: \"TUPLE\", offset: 0 }],\n types: [\"type1\"],\n sources: [\"source1\"],\n },\n };\n const args = { ...defaultArgs, context };\n const extractedValues = [\n new Uint8Array([\n 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,\n 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,\n ]),\n ];\n transactionParserMock.extractValue.mockReturnValue(\n Right(extractedValues),\n );\n const error = new UnknownDeviceExchangeError(\"Failed\");\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n error,\n }),\n );\n\n // WHEN\n const result = new BuildSubcontextsTask(apiMock, args).run();\n\n // THEN\n expect(result.subcontextCallbacks).toHaveLength(1);\n const callback = result.subcontextCallbacks[0]!;\n const callbackResult = await callback();\n expect(callbackResult).toEqual({\n error: new Error(\"Failed to get challenge\"),\n type: ClearSignContextType.ERROR,\n });\n });\n });\n\n describe(\"for multiple values\", () => {\n it(\"should create callbacks for each extracted value\", async () => {\n // GIVEN\n const context: ClearSignContextSuccess = {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"test payload\",\n reference: {\n type: ClearSignContextReferenceType.TOKEN,\n valuePath: [{ type: \"TUPLE\", offset: 0 }],\n },\n };\n const args = { ...defaultArgs, context };\n const extractedValues = [\n new Uint8Array([\n 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,\n 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,\n ]),\n new Uint8Array([\n 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b,\n 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36,\n ]),\n ];\n transactionParserMock.extractValue.mockReturnValue(\n Right(extractedValues),\n );\n contextModuleMock.getFieldContext.mockResolvedValueOnce({\n type: ClearSignContextType.TOKEN,\n payload: \"token result 1\",\n });\n contextModuleMock.getFieldContext.mockResolvedValueOnce({\n type: ClearSignContextType.TOKEN,\n payload: \"token result 2\",\n });\n\n // WHEN\n const result = new BuildSubcontextsTask(apiMock, args).run();\n\n // THEN\n expect(result.subcontextCallbacks).toHaveLength(2);\n const callback1 = result.subcontextCallbacks[0]!;\n const callback2 = result.subcontextCallbacks[1]!;\n const callbackResult1 = await callback1();\n const callbackResult2 = await callback2();\n expect(callbackResult1).toEqual({\n type: ClearSignContextType.TOKEN,\n payload: \"token result 1\",\n });\n expect(callbackResult2).toEqual({\n type: ClearSignContextType.TOKEN,\n payload: \"token result 2\",\n });\n expect(contextModuleMock.getFieldContext).toHaveBeenCalledTimes(2);\n expect(contextModuleMock.getFieldContext).toHaveBeenNthCalledWith(\n 1,\n {\n chainId: 1,\n address: \"0x030405060708090a0b0c0d0e0f10111213141516\",\n },\n ClearSignContextType.TOKEN,\n );\n expect(contextModuleMock.getFieldContext).toHaveBeenNthCalledWith(\n 2,\n {\n chainId: 1,\n address: \"0x232425262728292a2b2c2d2e2f30313233343536\",\n },\n ClearSignContextType.TOKEN,\n );\n });\n });\n });\n });\n\n describe(\"when context has no reference\", () => {\n it(\"should return context with empty subcontextCallbacks\", () => {\n // GIVEN\n const context: ClearSignContextSuccess = {\n type: ClearSignContextType.TOKEN,\n payload: \"test payload\",\n };\n const args = { ...defaultArgs, context };\n\n // WHEN\n const result = new BuildSubcontextsTask(apiMock, args).run();\n\n // THEN\n expect(result.subcontextCallbacks).toHaveLength(0);\n });\n });\n\n describe(\"when context has reference but no valuePath\", () => {\n it(\"should return context with empty subcontextCallbacks\", () => {\n // GIVEN\n const context: ClearSignContextSuccess = {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"test payload\",\n reference: {\n type: ClearSignContextReferenceType.TOKEN,\n valuePath: undefined as unknown as GenericPath,\n },\n };\n const args = { ...defaultArgs, context };\n\n // WHEN\n const result = new BuildSubcontextsTask(apiMock, args).run();\n\n // THEN\n expect(result.subcontextCallbacks).toHaveLength(0);\n });\n });\n\n describe(\"error handling\", () => {\n it(\"should throw error for uncovered context type\", () => {\n // GIVEN\n const context = {\n type: \"UNKNOWN_TYPE\" as ClearSignContextSuccess[\"type\"],\n payload: \"test payload\",\n } as ClearSignContextSuccess;\n const args = { ...defaultArgs, context };\n\n // WHEN / THEN\n expect(() => new BuildSubcontextsTask(apiMock, args).run()).toThrow(\n \"Uncovered type: UNKNOWN_TYPE\",\n );\n });\n\n it(\"should throw error for uncovered reference type\", () => {\n // GIVEN\n const context: ClearSignContextSuccess = {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"test payload\",\n reference: {\n type: \"UNKNOWN_REFERENCE_TYPE\" as ClearSignContextReference[\"type\"],\n } as ClearSignContextReference,\n };\n const args = { ...defaultArgs, context };\n\n // WHEN / THEN\n expect(() => new BuildSubcontextsTask(apiMock, args).run()).toThrow(\n \"Uncovered reference type: UNKNOWN_REFERENCE_TYPE\",\n );\n });\n });\n\n describe(\"CALLDATA reference type\", () => {\n it(\"should return empty subcontextCallbacks for CALLDATA reference\", () => {\n // GIVEN\n const context: ClearSignContextSuccess = {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"test payload\",\n reference: {\n type: ClearSignContextReferenceType.CALLDATA,\n callee: [{ type: \"TUPLE\", offset: 0 }],\n valuePath: [{ type: \"TUPLE\", offset: 0 }],\n },\n };\n const args = { ...defaultArgs, context };\n\n // WHEN\n const result = new BuildSubcontextsTask(apiMock, args).run();\n\n // THEN\n expect(result.subcontextCallbacks).toHaveLength(0);\n });\n });\n\n describe(\"references without valuePath\", () => {\n it(\"should return empty subcontextCallbacks for ENUM reference without valuePath\", () => {\n // GIVEN\n const context: ClearSignContextSuccess = {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"test payload\",\n reference: {\n type: ClearSignContextReferenceType.ENUM,\n id: 1,\n valuePath: undefined as unknown as GenericPath,\n },\n };\n const args = { ...defaultArgs, context };\n\n // WHEN\n const result = new BuildSubcontextsTask(apiMock, args).run();\n\n // THEN\n expect(result.subcontextCallbacks).toHaveLength(0);\n });\n\n it(\"should return empty subcontextCallbacks for TRUSTED_NAME reference without valuePath\", () => {\n // GIVEN\n const context: ClearSignContextSuccess = {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"test payload\",\n reference: {\n type: ClearSignContextReferenceType.TRUSTED_NAME,\n types: [\"type1\"],\n sources: [\"source1\"],\n valuePath: undefined as unknown as GenericPath,\n },\n };\n const args = { ...defaultArgs, context };\n\n // WHEN\n const result = new BuildSubcontextsTask(apiMock, args).run();\n\n // THEN\n expect(result.subcontextCallbacks).toHaveLength(0);\n });\n });\n\n describe(\"PROXY_INFO context type\", () => {\n beforeEach(() => {\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: { challenge: \"test-challenge\" } }),\n );\n });\n\n it(\"should create callback to get proxy delegate call context\", async () => {\n // GIVEN\n const context: ClearSignContextSuccess = {\n type: ClearSignContextType.PROXY_INFO,\n payload: \"proxy payload\",\n };\n const args = {\n ...defaultArgs,\n context,\n subset: {\n ...defaultArgs.subset,\n to: \"0x1234567890123456789012345678901234567890\",\n data: \"0xabcdef\",\n },\n };\n contextModuleMock.getFieldContext.mockResolvedValue({\n type: ClearSignContextType.PROXY_INFO,\n payload: \"proxy result\",\n });\n\n // WHEN\n const result = new BuildSubcontextsTask(apiMock, args).run();\n\n // THEN\n expect(result.subcontextCallbacks).toHaveLength(1);\n const callback = result.subcontextCallbacks[0]!;\n const callbackResult = await callback();\n\n expect(callbackResult).toEqual({\n type: ClearSignContextType.PROXY_INFO,\n payload: \"proxy result\",\n });\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n expect.any(GetChallengeCommand),\n );\n expect(contextModuleMock.getFieldContext).toHaveBeenCalledWith(\n {\n chainId: 1,\n proxyAddress: \"0x1234567890123456789012345678901234567890\",\n calldata: \"0xabcdef\",\n deviceModelId: DeviceModelId.STAX,\n challenge: \"test-challenge\",\n },\n ClearSignContextType.PROXY_INFO,\n );\n });\n\n it(\"should handle challenge command failure\", async () => {\n // GIVEN\n const context: ClearSignContextSuccess = {\n type: ClearSignContextType.PROXY_INFO,\n payload: \"proxy payload\",\n };\n const args = {\n ...defaultArgs,\n context,\n subset: {\n ...defaultArgs.subset,\n to: \"0x1234567890123456789012345678901234567890\",\n data: \"0xabcdef\",\n },\n };\n const error = new UnknownDeviceExchangeError(\"Failed\");\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n error,\n }),\n );\n\n // WHEN\n const result = new BuildSubcontextsTask(apiMock, args).run();\n\n // THEN\n expect(result.subcontextCallbacks).toHaveLength(1);\n const callback = result.subcontextCallbacks[0]!;\n const callbackResult = await callback();\n\n expect(callbackResult).toEqual({\n error: new Error(\"Failed to get challenge\"),\n type: ClearSignContextType.ERROR,\n });\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n expect.any(GetChallengeCommand),\n );\n expect(contextModuleMock.getFieldContext).not.toHaveBeenCalled();\n });\n\n it(\"should handle missing proxy address\", async () => {\n // GIVEN\n const context: ClearSignContextSuccess = {\n type: ClearSignContextType.PROXY_INFO,\n payload: \"proxy payload\",\n };\n const args = {\n ...defaultArgs,\n context,\n subset: {\n ...defaultArgs.subset,\n to: undefined,\n data: \"0xabcdef\",\n },\n };\n\n // WHEN\n const result = new BuildSubcontextsTask(apiMock, args).run();\n\n // THEN\n expect(result.subcontextCallbacks).toHaveLength(1);\n const callback = result.subcontextCallbacks[0]!;\n const callbackResult = await callback();\n\n expect(callbackResult).toEqual({\n error: new Error(\"Failed to get proxy address\"),\n type: ClearSignContextType.ERROR,\n });\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n expect.any(GetChallengeCommand),\n );\n expect(contextModuleMock.getFieldContext).not.toHaveBeenCalled();\n });\n\n it(\"should use correct device model id in context\", async () => {\n // GIVEN\n const context: ClearSignContextSuccess = {\n type: ClearSignContextType.PROXY_INFO,\n payload: \"proxy payload\",\n };\n const args = {\n ...defaultArgs,\n context,\n deviceModelId: DeviceModelId.NANO_SP,\n subset: {\n ...defaultArgs.subset,\n to: \"0x1234567890123456789012345678901234567890\",\n data: \"0xabcdef\",\n },\n };\n contextModuleMock.getFieldContext.mockResolvedValue({\n type: ClearSignContextType.PROXY_INFO,\n payload: \"proxy result\",\n });\n\n // WHEN\n const result = new BuildSubcontextsTask(apiMock, args).run();\n\n // THEN\n expect(result.subcontextCallbacks).toHaveLength(1);\n const callback = result.subcontextCallbacks[0]!;\n await callback();\n\n expect(contextModuleMock.getFieldContext).toHaveBeenCalledWith(\n {\n chainId: 1,\n proxyAddress: \"0x1234567890123456789012345678901234567890\",\n calldata: \"0xabcdef\",\n deviceModelId: DeviceModelId.NANO_SP,\n challenge: \"test-challenge\",\n },\n ClearSignContextType.PROXY_INFO,\n );\n });\n });\n\n describe(\"edge cases\", () => {\n it(\"should handle value array shorter than 20 bytes for address extraction\", async () => {\n // GIVEN\n const context: ClearSignContextSuccess = {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"test payload\",\n reference: {\n type: ClearSignContextReferenceType.TOKEN,\n valuePath: [{ type: \"TUPLE\", offset: 0 }],\n },\n };\n const args = { ...defaultArgs, context };\n const extractedValues = [new Uint8Array([0x01, 0x02, 0x03])]; // Only 3 bytes\n transactionParserMock.extractValue.mockReturnValue(\n Right(extractedValues),\n );\n contextModuleMock.getFieldContext.mockResolvedValue({\n type: ClearSignContextType.ERROR,\n message: \"Invalid address\",\n });\n\n // WHEN\n const result = new BuildSubcontextsTask(apiMock, args).run();\n\n // THEN\n expect(result.subcontextCallbacks).toHaveLength(1);\n const callback = result.subcontextCallbacks[0]!;\n const callbackResult = await callback();\n expect(callbackResult).toEqual({\n type: ClearSignContextType.ERROR,\n message: \"Invalid address\",\n });\n expect(contextModuleMock.getFieldContext).toHaveBeenCalledWith(\n {\n chainId: 1,\n address: \"0x010203\",\n },\n ClearSignContextType.TOKEN,\n );\n });\n\n it(\"should handle empty value array\", async () => {\n // GIVEN\n const context: ClearSignContextSuccess = {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"test payload\",\n reference: {\n type: ClearSignContextReferenceType.TOKEN,\n valuePath: [{ type: \"TUPLE\", offset: 0 }],\n },\n };\n const args = { ...defaultArgs, context };\n const extractedValues = [new Uint8Array([])]; // Empty array\n transactionParserMock.extractValue.mockReturnValue(\n Right(extractedValues),\n );\n contextModuleMock.getFieldContext.mockResolvedValue({\n type: ClearSignContextType.TOKEN,\n payload: \"token result\",\n });\n\n // WHEN\n const result = new BuildSubcontextsTask(apiMock, args).run();\n\n // THEN\n expect(result.subcontextCallbacks).toHaveLength(1);\n\n // Verify the callback calls getContext with empty address\n const callback = result.subcontextCallbacks[0]!;\n const callbackResult = await callback();\n expect(callbackResult).toEqual({\n type: ClearSignContextType.TOKEN,\n payload: \"token result\",\n });\n expect(contextModuleMock.getFieldContext).toHaveBeenCalledWith(\n {\n chainId: 1,\n address: \"0x\",\n },\n ClearSignContextType.TOKEN,\n );\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["import_context_module", "import_device_management_kit", "import_purify_ts", "import_GetChallengeCommand", "import_makeInternalApi", "import_BuildSubcontextsTask", "contextModuleMock", "transactionParserMock", "apiMock", "defaultArgs", "simpleTypes", "type", "args", "result", "context", "expectedContext", "callback", "enumContext1", "enumContext2", "enumContext3", "extractedValues", "callbackResult", "callback1", "callback2", "callbackResult1", "callbackResult2", "enumContext", "error"]
7
+ }
@@ -1,2 +1,2 @@
1
- "use strict";var c=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var x=(t,e)=>{for(var a in e)c(t,a,{get:e[a],enumerable:!0})},u=(t,e,a,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of y(e))!g.call(t,r)&&r!==a&&c(t,r,{get:()=>e[r],enumerable:!(s=k(e,r))||s.enumerable});return t};var T=t=>u(c({},"__esModule",{value:!0}),t);var m={};x(m,{GetWeb3CheckTask:()=>b});module.exports=T(m);var C=require("@ledgerhq/context-module"),i=require("@ledgerhq/device-management-kit"),d=require("../../app-binder/command/GetAddressCommand");class b{constructor(e,a){this.api=e;this.args=a}async run(){const e=await this.api.sendCommand(new d.GetAddressCommand({derivationPath:this.args.derivationPath,checkOnDevice:!1,returnChainCode:!1}));if(!(0,i.isSuccessCommandResult)(e))return{web3Check:null,error:e.error};const a=e.data.address,{deviceModelId:s}=this.api.getDeviceSessionState(),{contextModule:r}=this.args;let n;if(this.isRawTx(this.args)){const o=this.args.mapper.mapTransactionToSubset(this.args.transaction);if(o.isRight()){const{subset:l,serializedTransaction:p}=o.extract(),h={deviceModelId:s,from:a,rawTx:(0,i.bufferToHexaString)(p),chainId:l.chainId};n=await r.getWeb3Checks(h)}else throw o.extract()}else{const o={deviceModelId:s,from:a,data:this.args.data};n=await r.getWeb3Checks(o)}return n===null||n?.type!==C.ClearSignContextType.WEB3_CHECK?{web3Check:null}:{web3Check:n}}isRawTx(e){return"transaction"in e}}0&&(module.exports={GetWeb3CheckTask});
1
+ "use strict";var c=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var y=Object.prototype.hasOwnProperty;var u=(t,e)=>{for(var a in e)c(t,a,{get:e[a],enumerable:!0})},b=(t,e,a,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of p(e))!y.call(t,r)&&r!==a&&c(t,r,{get:()=>e[r],enumerable:!(s=k(e,r))||s.enumerable});return t};var g=t=>b(c({},"__esModule",{value:!0}),t);var T={};u(T,{GetWeb3CheckTask:()=>x});module.exports=g(T);var C=require("@ledgerhq/context-module"),o=require("@ledgerhq/device-management-kit"),d=require("../../app-binder/command/GetAddressCommand");class x{constructor(e,a){this.api=e;this.args=a}async run(){const e=await this.api.sendCommand(new d.GetAddressCommand({derivationPath:this.args.derivationPath,checkOnDevice:!1,returnChainCode:!1}));if(!(0,o.isSuccessCommandResult)(e))return{web3Check:null,error:e.error};const a=e.data.address,{deviceModelId:s}=this.api.getDeviceSessionState(),{contextModule:r}=this.args;let n;if(this.isRawTx(this.args)){const{subset:i,transaction:l}=this.args,h={deviceModelId:s,from:a,rawTx:(0,o.bufferToHexaString)(l),chainId:i.chainId};n=await r.getWeb3Checks(h)}else{const i={deviceModelId:s,from:a,data:this.args.data};n=await r.getWeb3Checks(i)}return n===null||n?.type!==C.ClearSignContextType.WEB3_CHECK?{web3Check:null}:{web3Check:n}}isRawTx(e){return"transaction"in e}}0&&(module.exports={GetWeb3CheckTask});
2
2
  //# sourceMappingURL=GetWeb3CheckTask.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
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 DmkError,\n type InternalApi,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type TypedData } from \"@api/model/TypedData\";\nimport { GetAddressCommand } from \"@internal/app-binder/command/GetAddressCommand\";\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 // 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 } = this.api.getDeviceSessionState();\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"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,sBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAMO,oCACPC,EAKO,2CAGPC,EAAkC,0DA2B3B,MAAMJ,CAAiB,CAC5B,YACmBK,EACAC,EACjB,CAFiB,SAAAD,EACA,UAAAC,CAChB,CAEH,MAAM,KAAuC,CAE3C,MAAMC,EAAmB,MAAM,KAAK,IAAI,YACtC,IAAI,oBAAkB,CACpB,eAAgB,KAAK,KAAK,eAC1B,cAAe,GACf,gBAAiB,EACnB,CAAC,CACH,EACA,GAAI,IAAC,0BAAuBA,CAAgB,EAC1C,MAAO,CACL,UAAW,KACX,MAAOA,EAAiB,KAC1B,EAGF,MAAMC,EAAUD,EAAiB,KAAK,QAChC,CAAE,cAAAE,CAAc,EAAI,KAAK,IAAI,sBAAsB,EACnD,CAAE,cAAAC,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,SAAO,sBAAmBM,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,OAAS,uBAAqB,WAEzC,CACL,UAAW,IACb,EAGK,CACL,UAAWA,CACb,CACF,CAEQ,QACNL,EACmC,CACnC,MAAO,gBAAiBA,CAC1B,CACF",
6
- "names": ["GetWeb3CheckTask_exports", "__export", "GetWeb3CheckTask", "__toCommonJS", "import_context_module", "import_device_management_kit", "import_GetAddressCommand", "api", "args", "getAddressResult", "address", "deviceModelId", "contextModule", "web3CheckContext", "parsed", "subset", "serializedTransaction", "web3Params"]
4
+ "sourcesContent": ["import {\n type ClearSignContext,\n type ClearSignContextSuccess,\n ClearSignContextType,\n type ContextModule,\n type TransactionSubset,\n type Web3CheckContext,\n} from \"@ledgerhq/context-module\";\nimport {\n bufferToHexaString,\n type DmkError,\n type InternalApi,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type TypedData } from \"@api/model/TypedData\";\nimport { GetAddressCommand } from \"@internal/app-binder/command/GetAddressCommand\";\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 subset: TransactionSubset;\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 // 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 } = this.api.getDeviceSessionState();\n const { contextModule } = this.args;\n let web3CheckContext: ClearSignContext | null;\n\n if (this.isRawTx(this.args)) {\n // Transaction simulation\n const { subset, transaction } = this.args;\n const web3Params: Web3CheckContext = {\n deviceModelId,\n from: address,\n rawTx: bufferToHexaString(transaction),\n chainId: subset.chainId,\n };\n web3CheckContext = await contextModule.getWeb3Checks(web3Params);\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"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,sBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAOO,oCACPC,EAKO,2CAGPC,EAAkC,0DA0B3B,MAAMJ,CAAiB,CAC5B,YACmBK,EACAC,EACjB,CAFiB,SAAAD,EACA,UAAAC,CAChB,CAEH,MAAM,KAAuC,CAE3C,MAAMC,EAAmB,MAAM,KAAK,IAAI,YACtC,IAAI,oBAAkB,CACpB,eAAgB,KAAK,KAAK,eAC1B,cAAe,GACf,gBAAiB,EACnB,CAAC,CACH,EACA,GAAI,IAAC,0BAAuBA,CAAgB,EAC1C,MAAO,CACL,UAAW,KACX,MAAOA,EAAiB,KAC1B,EAGF,MAAMC,EAAUD,EAAiB,KAAK,QAChC,CAAE,cAAAE,CAAc,EAAI,KAAK,IAAI,sBAAsB,EACnD,CAAE,cAAAC,CAAc,EAAI,KAAK,KAC/B,IAAIC,EAEJ,GAAI,KAAK,QAAQ,KAAK,IAAI,EAAG,CAE3B,KAAM,CAAE,OAAAC,EAAQ,YAAAC,CAAY,EAAI,KAAK,KAC/BC,EAA+B,CACnC,cAAAL,EACA,KAAMD,EACN,SAAO,sBAAmBK,CAAW,EACrC,QAASD,EAAO,OAClB,EACAD,EAAmB,MAAMD,EAAc,cAAcI,CAAU,CACjE,KAAO,CAEL,MAAMA,EAA+B,CACnC,cAAAL,EACA,KAAMD,EACN,KAAM,KAAK,KAAK,IAClB,EACAG,EAAmB,MAAMD,EAAc,cAAcI,CAAU,CACjE,CAEA,OACEH,IAAqB,MACrBA,GAAkB,OAAS,uBAAqB,WAEzC,CACL,UAAW,IACb,EAGK,CACL,UAAWA,CACb,CACF,CAEQ,QACNL,EACmC,CACnC,MAAO,gBAAiBA,CAC1B,CACF",
6
+ "names": ["GetWeb3CheckTask_exports", "__export", "GetWeb3CheckTask", "__toCommonJS", "import_context_module", "import_device_management_kit", "import_GetAddressCommand", "api", "args", "getAddressResult", "address", "deviceModelId", "contextModule", "web3CheckContext", "subset", "transaction", "web3Params"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("@ledgerhq/device-management-kit"),r=require("purify-ts"),i=require("../../app-binder/device-action/__test-utils__/makeInternalApi"),s=require("../../app-binder/task/GetWeb3CheckTask");describe("GetWeb3CheckTask",()=>{const a=(0,i.makeDeviceActionInternalApiMock)(),t={getWeb3Checks:vi.fn()},o={mapTransactionToSubset:vi.fn()},d=new Uint8Array([1,2,3,4]),c="44'/60'/0'/0/0";describe("run",()=>{beforeEach(()=>{vi.clearAllMocks(),a.getDeviceSessionState.mockReturnValueOnce({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.16.0"},deviceModelId:e.DeviceModelId.FLEX,isSecureConnectionAllowed:!0})}),describe("errors",()=>{it("should throw an error if mapTransactionToSubset assert.fails",async()=>{const n=new Error("error");a.sendCommand.mockResolvedValueOnce((0,e.CommandResultFactory)({data:{address:"address"}})),o.mapTransactionToSubset.mockReturnValue((0,r.Left)(n));try{await new s.GetWeb3CheckTask(a,{contextModule:t,mapper:o,transaction:d,derivationPath:c}).run(),assert.fail("should throw an error")}catch(u){expect(u).toEqual(n)}}),it("should return a context error if GetAddressCommand assert.fails",async()=>{o.mapTransactionToSubset.mockReturnValue((0,r.Right)({subset:{},serializedTransaction:new Uint8Array})),a.sendCommand.mockResolvedValueOnce((0,e.CommandResultFactory)({error:new e.InvalidStatusWordError("error")}));const n=await new s.GetWeb3CheckTask(a,{contextModule:t,mapper:o,transaction:d,derivationPath:c}).run();expect(n).toEqual({web3Check:null,error:new e.InvalidStatusWordError("error")})}),it("should return null if the type is not a ClearSignContextSuccess web3check",async()=>{o.mapTransactionToSubset.mockReturnValue((0,r.Right)({subset:{},serializedTransaction:new Uint8Array})),a.sendCommand.mockResolvedValueOnce((0,e.CommandResultFactory)({data:{address:"address"}})),t.getWeb3Checks.mockResolvedValue({type:"invalid-type",id:1});const n=await new s.GetWeb3CheckTask(a,{contextModule:t,mapper:o,transaction:d,derivationPath:c}).run();expect(n).toEqual({web3Check:null})})}),describe("success",()=>{it("should return null if the context module does not have a web3 check",async()=>{o.mapTransactionToSubset.mockReturnValue((0,r.Right)({subset:{},serializedTransaction:new Uint8Array})),a.sendCommand.mockResolvedValueOnce((0,e.CommandResultFactory)({data:{address:"address"}})),t.getWeb3Checks.mockResolvedValue(null);const n=await new s.GetWeb3CheckTask(a,{contextModule:t,mapper:o,transaction:d,derivationPath:c}).run();expect(n).toEqual({web3Check:null})}),it("should return a web3 check",async()=>{const n={type:"web3Check",id:1};o.mapTransactionToSubset.mockReturnValue((0,r.Right)({subset:{},serializedTransaction:new Uint8Array})),a.sendCommand.mockResolvedValueOnce((0,e.CommandResultFactory)({data:{address:"address"}})),t.getWeb3Checks.mockResolvedValue(n);const u=await new s.GetWeb3CheckTask(a,{contextModule:t,mapper:o,transaction:d,derivationPath:c}).run();expect(u).toEqual({web3Check:n})}),it("should return a web3 check for typed data",async()=>{const n={type:"web3Check",id:1};a.sendCommand.mockResolvedValueOnce((0,e.CommandResultFactory)({data:{address:"address"}})),t.getWeb3Checks.mockResolvedValue(n);const u=await new s.GetWeb3CheckTask(a,{contextModule:t,data:"typed data",derivationPath:c}).run();expect(u).toEqual({web3Check:n})}),it("should call the context module with the right parameters",async()=>{o.mapTransactionToSubset.mockReturnValue((0,r.Right)({subset:{chainId:15,from:"from"},serializedTransaction:new Uint8Array([1,2,3])})),a.sendCommand.mockResolvedValueOnce((0,e.CommandResultFactory)({data:{address:"address"}})),t.getWeb3Checks.mockResolvedValue(null),await new s.GetWeb3CheckTask(a,{contextModule:t,mapper:o,transaction:d,derivationPath:c}).run(),expect(t.getWeb3Checks).toHaveBeenCalledWith({deviceModelId:e.DeviceModelId.FLEX,from:"address",rawTx:"0x010203",chainId:15})})})})});
1
+ "use strict";var e=require("@ledgerhq/device-management-kit"),l=require("../../app-binder/device-action/__test-utils__/makeInternalApi"),n=require("../../app-binder/task/GetWeb3CheckTask");describe("GetWeb3CheckTask",()=>{const t=(0,l.makeDeviceActionInternalApiMock)(),o={getWeb3Checks:vi.fn()},d=new Uint8Array([1,2,3,4]),a="44'/60'/0'/0/0",c={chainId:15,to:"to",data:"0x060708090A",selector:"0x06070809",value:0n};describe("run",()=>{beforeEach(()=>{vi.clearAllMocks(),t.getDeviceSessionState.mockReturnValueOnce({sessionStateType:e.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:e.DeviceStatus.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.16.0"},deviceModelId:e.DeviceModelId.FLEX,isSecureConnectionAllowed:!0})}),describe("errors",()=>{it("should return a context error if GetAddressCommand assert.fails",async()=>{t.sendCommand.mockResolvedValueOnce((0,e.CommandResultFactory)({error:new e.InvalidStatusWordError("error")}));const s=await new n.GetWeb3CheckTask(t,{contextModule:o,subset:c,transaction:d,derivationPath:a}).run();expect(s).toEqual({web3Check:null,error:new e.InvalidStatusWordError("error")})}),it("should return null if the type is not a ClearSignContextSuccess web3check",async()=>{t.sendCommand.mockResolvedValueOnce((0,e.CommandResultFactory)({data:{address:"address"}})),o.getWeb3Checks.mockResolvedValue({type:"invalid-type",id:1});const s=await new n.GetWeb3CheckTask(t,{contextModule:o,subset:c,transaction:d,derivationPath:a}).run();expect(s).toEqual({web3Check:null})})}),describe("success",()=>{it("should return null if the context module does not have a web3 check",async()=>{t.sendCommand.mockResolvedValueOnce((0,e.CommandResultFactory)({data:{address:"address"}})),o.getWeb3Checks.mockResolvedValue(null);const s=await new n.GetWeb3CheckTask(t,{contextModule:o,subset:c,transaction:d,derivationPath:a}).run();expect(s).toEqual({web3Check:null})}),it("should return a web3 check",async()=>{const s={type:"web3Check",id:1};t.sendCommand.mockResolvedValueOnce((0,e.CommandResultFactory)({data:{address:"address"}})),o.getWeb3Checks.mockResolvedValue(s);const r=await new n.GetWeb3CheckTask(t,{contextModule:o,subset:c,transaction:d,derivationPath:a}).run();expect(r).toEqual({web3Check:s})}),it("should return a web3 check for typed data",async()=>{const s={type:"web3Check",id:1};t.sendCommand.mockResolvedValueOnce((0,e.CommandResultFactory)({data:{address:"address"}})),o.getWeb3Checks.mockResolvedValue(s);const r=await new n.GetWeb3CheckTask(t,{contextModule:o,data:"typed data",derivationPath:a}).run();expect(r).toEqual({web3Check:s})}),it("should call the context module with the right parameters",async()=>{t.sendCommand.mockResolvedValueOnce((0,e.CommandResultFactory)({data:{address:"address"}})),o.getWeb3Checks.mockResolvedValue(null),await new n.GetWeb3CheckTask(t,{contextModule:o,subset:c,transaction:d,derivationPath:a}).run(),expect(o.getWeb3Checks).toHaveBeenCalledWith({deviceModelId:e.DeviceModelId.FLEX,from:"address",rawTx:"0x01020304",chainId:15})})})})});
2
2
  //# sourceMappingURL=GetWeb3CheckTask.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
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(\"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({ 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 GetAddressCommand assert.fails\", async () => {\n // GIVEN\n mapperMock.mapTransactionToSubset.mockReturnValue(\n Right({ subset: {}, serializedTransaction: new Uint8Array() }),\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({ 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 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.mockResolvedValueOnce(\n CommandResultFactory({ data: { address: \"address\" } }),\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.mockResolvedValueOnce(\n CommandResultFactory({ data: { address: \"address\" } }),\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 return a web3 check for typed data\", async () => {\n // GIVEN\n const web3Check = { type: \"web3Check\", id: 1 };\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({ data: { address: \"address\" } }),\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({ 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": ["import_device_management_kit", "import_purify_ts", "import_makeInternalApi", "import_GetWeb3CheckTask", "apiMock", "contextModuleMock", "mapperMock", "transaction", "derivationPath", "error", "e", "result", "web3Check"]
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\";\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\";\n\ndescribe(\"GetWeb3CheckTask\", () => {\n const apiMock = makeDeviceActionInternalApiMock();\n const contextModuleMock = {\n getWeb3Checks: vi.fn(),\n };\n const transaction = new Uint8Array([0x01, 0x02, 0x03, 0x04]);\n const derivationPath = \"44'/60'/0'/0/0\";\n const defaultSubset = {\n chainId: 15,\n to: \"to\",\n data: \"0x060708090A\",\n selector: \"0x06070809\",\n value: 0n,\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 return a context error if GetAddressCommand assert.fails\", async () => {\n // GIVEN\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 subset: defaultSubset,\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 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 subset: defaultSubset,\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 the context module does not have a web3 check\", async () => {\n // GIVEN\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({ data: { address: \"address\" } }),\n );\n contextModuleMock.getWeb3Checks.mockResolvedValue(null);\n\n // WHEN\n const result = await new GetWeb3CheckTask(apiMock, {\n contextModule: contextModuleMock as unknown as ContextModule,\n subset: defaultSubset,\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 apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({ data: { address: \"address\" } }),\n );\n contextModuleMock.getWeb3Checks.mockResolvedValue(web3Check);\n\n // WHEN\n const result = await new GetWeb3CheckTask(apiMock, {\n contextModule: contextModuleMock as unknown as ContextModule,\n subset: defaultSubset,\n transaction,\n derivationPath,\n }).run();\n\n // THEN\n expect(result).toEqual({\n web3Check,\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.mockResolvedValueOnce(\n CommandResultFactory({ data: { address: \"address\" } }),\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 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 subset: defaultSubset,\n transaction,\n derivationPath,\n }).run();\n\n // THEN\n expect(contextModuleMock.getWeb3Checks).toHaveBeenCalledWith({\n deviceModelId: DeviceModelId.FLEX,\n from: \"address\",\n rawTx: \"0x01020304\",\n chainId: 15,\n });\n });\n });\n });\n});\n"],
5
+ "mappings": "aACA,IAAAA,EAMO,2CAGPC,EAAgD,6EAChDC,EAAiC,sDAEjC,SAAS,mBAAoB,IAAM,CACjC,MAAMC,KAAU,mCAAgC,EAC1CC,EAAoB,CACxB,cAAe,GAAG,GAAG,CACvB,EACMC,EAAc,IAAI,WAAW,CAAC,EAAM,EAAM,EAAM,CAAI,CAAC,EACrDC,EAAiB,iBACjBC,EAAgB,CACpB,QAAS,GACT,GAAI,KACJ,KAAM,eACN,SAAU,aACV,MAAO,EACT,EAEA,SAAS,MAAO,IAAM,CACpB,WAAW,IAAM,CACf,GAAG,cAAc,EAEjBJ,EAAQ,sBAAsB,oBAAoB,CAChD,iBAAkB,yBAAuB,0BACzC,aAAc,eAAa,UAC3B,cAAe,CAAC,EAChB,WAAY,CAAE,KAAM,WAAY,QAAS,QAAS,EAClD,cAAe,gBAAc,KAC7B,0BAA2B,EAC7B,CAAC,CACH,CAAC,EAED,SAAS,SAAU,IAAM,CACvB,GAAG,kEAAmE,SAAY,CAEhFA,EAAQ,YAAY,yBAClB,wBAAqB,CAAE,MAAO,IAAI,yBAAuB,OAAO,CAAE,CAAC,CACrE,EAGA,MAAMK,EAAS,MAAM,IAAI,mBAAiBL,EAAS,CACjD,cAAeC,EACf,OAAQG,EACR,YAAAF,EACA,eAAAC,CACF,CAAC,EAAE,IAAI,EAGP,OAAOE,CAAM,EAAE,QAAQ,CACrB,UAAW,KACX,MAAO,IAAI,yBAAuB,OAAO,CAC3C,CAAC,CACH,CAAC,EAED,GAAG,4EAA6E,SAAY,CAE1FL,EAAQ,YAAY,yBAClB,wBAAqB,CAAE,KAAM,CAAE,QAAS,SAAU,CAAE,CAAC,CACvD,EACAC,EAAkB,cAAc,kBAAkB,CAChD,KAAM,eACN,GAAI,CACN,CAAC,EAGD,MAAMI,EAAS,MAAM,IAAI,mBAAiBL,EAAS,CACjD,cAAeC,EACf,OAAQG,EACR,YAAAF,EACA,eAAAC,CACF,CAAC,EAAE,IAAI,EAGP,OAAOE,CAAM,EAAE,QAAQ,CACrB,UAAW,IACb,CAAC,CACH,CAAC,CACH,CAAC,EAED,SAAS,UAAW,IAAM,CACxB,GAAG,sEAAuE,SAAY,CAEpFL,EAAQ,YAAY,yBAClB,wBAAqB,CAAE,KAAM,CAAE,QAAS,SAAU,CAAE,CAAC,CACvD,EACAC,EAAkB,cAAc,kBAAkB,IAAI,EAGtD,MAAMI,EAAS,MAAM,IAAI,mBAAiBL,EAAS,CACjD,cAAeC,EACf,OAAQG,EACR,YAAAF,EACA,eAAAC,CACF,CAAC,EAAE,IAAI,EAGP,OAAOE,CAAM,EAAE,QAAQ,CACrB,UAAW,IACb,CAAC,CACH,CAAC,EAED,GAAG,6BAA8B,SAAY,CAE3C,MAAMC,EAAY,CAAE,KAAM,YAAa,GAAI,CAAE,EAC7CN,EAAQ,YAAY,yBAClB,wBAAqB,CAAE,KAAM,CAAE,QAAS,SAAU,CAAE,CAAC,CACvD,EACAC,EAAkB,cAAc,kBAAkBK,CAAS,EAG3D,MAAMD,EAAS,MAAM,IAAI,mBAAiBL,EAAS,CACjD,cAAeC,EACf,OAAQG,EACR,YAAAF,EACA,eAAAC,CACF,CAAC,EAAE,IAAI,EAGP,OAAOE,CAAM,EAAE,QAAQ,CACrB,UAAAC,CACF,CAAC,CACH,CAAC,EAED,GAAG,4CAA6C,SAAY,CAE1D,MAAMA,EAAY,CAAE,KAAM,YAAa,GAAI,CAAE,EAC7CN,EAAQ,YAAY,yBAClB,wBAAqB,CAAE,KAAM,CAAE,QAAS,SAAU,CAAE,CAAC,CACvD,EACAC,EAAkB,cAAc,kBAAkBK,CAAS,EAG3D,MAAMD,EAAS,MAAM,IAAI,mBAAiBL,EAAS,CACjD,cAAeC,EACf,KAAM,aACN,eAAAE,CACF,CAAC,EAAE,IAAI,EAGP,OAAOE,CAAM,EAAE,QAAQ,CACrB,UAAAC,CACF,CAAC,CACH,CAAC,EAED,GAAG,2DAA4D,SAAY,CAEzEN,EAAQ,YAAY,yBAClB,wBAAqB,CAAE,KAAM,CAAE,QAAS,SAAU,CAAE,CAAC,CACvD,EACAC,EAAkB,cAAc,kBAAkB,IAAI,EAGtD,MAAM,IAAI,mBAAiBD,EAAS,CAClC,cAAeC,EACf,OAAQG,EACR,YAAAF,EACA,eAAAC,CACF,CAAC,EAAE,IAAI,EAGP,OAAOF,EAAkB,aAAa,EAAE,qBAAqB,CAC3D,cAAe,gBAAc,KAC7B,KAAM,UACN,MAAO,aACP,QAAS,EACX,CAAC,CACH,CAAC,CACH,CAAC,CACH,CAAC,CACH,CAAC",
6
+ "names": ["import_device_management_kit", "import_makeInternalApi", "import_GetWeb3CheckTask", "apiMock", "contextModuleMock", "transaction", "derivationPath", "defaultSubset", "result", "web3Check"]
7
7
  }
@@ -0,0 +1,2 @@
1
+ "use strict";var l=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var A=(a,e)=>{for(var r in e)l(a,r,{get:e[r],enumerable:!0})},I=(a,e,r,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of b(e))!g.call(a,s)&&s!==r&&l(a,s,{get:()=>e[s],enumerable:!(t=y(e,s))||t.enumerable});return a};var N=a=>I(l({},"__esModule",{value:!0}),a);var E={};A(E,{ParseNestedTransactionTask:()=>m});module.exports=N(E);var p=require("@ledgerhq/context-module"),c=require("@ledgerhq/device-management-kit");const P=10;class m{constructor(e){this._args=e}run(){const{parser:e,subset:r,context:t}=this._args,s=[];if(!t.reference||t.reference.type!==p.ClearSignContextReferenceType.CALLDATA||!t.reference.valuePath)throw new Error("Invalid reference for nested call data. Expected a reference with type CALLDATA and a value path.");const{valuePath:x}=t.reference,i=e.extractValue(r,x).unsafeCoerce(),u=e.extractValue(r,t.reference.callee).unsafeCoerce(),S=t.reference.selector?e.extractValue(r,t.reference.selector).orDefault([]):[],C=t.reference.chainId?e.extractValue(r,t.reference.chainId).orDefault([]):[];for(let n=0;n<i.length;n++){const o=i[n],T=C[n],d=u[n]?.slice(Math.max(0,u[n].length-20)),f=S[n],h={data:o?(0,c.bufferToHexaString)(o):"0x",chainId:T?Number(T):r.chainId,to:d?(0,c.bufferToHexaString)(d):r.to,selector:f?(0,c.bufferToHexaString)(f):o?(0,c.bufferToHexaString)(o).slice(0,P):"0x"};s.push(h)}return{subsets:s}}}0&&(module.exports={ParseNestedTransactionTask});
2
+ //# sourceMappingURL=ParseNestedTransactionTask.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/internal/app-binder/task/ParseNestedTransactionTask.ts"],
4
+ "sourcesContent": ["import {\n ClearSignContextReferenceType,\n type ClearSignContextSuccess,\n type ClearSignContextType,\n type TransactionSubset,\n} from \"@ledgerhq/context-module\";\nimport { bufferToHexaString } from \"@ledgerhq/device-management-kit\";\n\nimport { type TransactionParserService } from \"@internal/transaction/service/parser/TransactionParserService\";\n\nconst DEFAULT_SELECTOR_LENGTH = 10;\n\nexport type ParseNestedTransactionTaskResult = {\n readonly subsets: TransactionSubset[];\n};\n\nexport type ParseNestedTransactionTaskArgs = {\n readonly parser: TransactionParserService;\n readonly subset: TransactionSubset;\n readonly context: ClearSignContextSuccess<ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION>;\n};\n\n/**\n * This task is used to construct the nested call data subset list from the transaction subset.\n * It will extract values from the transaction subset using the value path.\n *\n */\nexport class ParseNestedTransactionTask {\n constructor(private readonly _args: ParseNestedTransactionTaskArgs) {}\n\n run(): ParseNestedTransactionTaskResult {\n const { parser, subset, context } = this._args;\n const nestedSubsets: TransactionSubset[] = [];\n\n if (\n !context.reference ||\n context.reference.type !== ClearSignContextReferenceType.CALLDATA ||\n !context.reference.valuePath\n ) {\n throw new Error(\n \"Invalid reference for nested call data. Expected a reference with type CALLDATA and a value path.\",\n );\n }\n\n const { valuePath } = context.reference;\n\n // values and callee are required\n const extractedValues = parser\n .extractValue(subset, valuePath)\n .unsafeCoerce();\n const extractedTo = parser\n .extractValue(subset, context.reference.callee)\n .unsafeCoerce();\n\n // selector and chainId are optional\n const extractedSelectors = context.reference.selector\n ? parser.extractValue(subset, context.reference.selector).orDefault([])\n : [];\n const extractedChainId = context.reference.chainId\n ? parser.extractValue(subset, context.reference.chainId).orDefault([])\n : [];\n\n for (let i = 0; i < extractedValues.length; i++) {\n const data = extractedValues[i];\n const chainId = extractedChainId[i];\n const to = extractedTo[i]?.slice(\n Math.max(0, extractedTo[i]!.length - 20),\n );\n const selector = extractedSelectors[i];\n\n const nestedSubset: TransactionSubset = {\n data: data ? bufferToHexaString(data) : \"0x\", // ASK: Should we use 0x or return an error?\n chainId: chainId ? Number(chainId) : subset.chainId,\n to: to ? bufferToHexaString(to) : subset.to,\n selector: selector\n ? bufferToHexaString(selector)\n : data\n ? bufferToHexaString(data).slice(0, DEFAULT_SELECTOR_LENGTH)\n : \"0x\",\n };\n\n nestedSubsets.push(nestedSubset);\n }\n\n return {\n subsets: nestedSubsets,\n };\n }\n}\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,gCAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAKO,oCACPC,EAAmC,2CAInC,MAAMC,EAA0B,GAiBzB,MAAMJ,CAA2B,CACtC,YAA6BK,EAAuC,CAAvC,WAAAA,CAAwC,CAErE,KAAwC,CACtC,KAAM,CAAE,OAAAC,EAAQ,OAAAC,EAAQ,QAAAC,CAAQ,EAAI,KAAK,MACnCC,EAAqC,CAAC,EAE5C,GACE,CAACD,EAAQ,WACTA,EAAQ,UAAU,OAAS,gCAA8B,UACzD,CAACA,EAAQ,UAAU,UAEnB,MAAM,IAAI,MACR,mGACF,EAGF,KAAM,CAAE,UAAAE,CAAU,EAAIF,EAAQ,UAGxBG,EAAkBL,EACrB,aAAaC,EAAQG,CAAS,EAC9B,aAAa,EACVE,EAAcN,EACjB,aAAaC,EAAQC,EAAQ,UAAU,MAAM,EAC7C,aAAa,EAGVK,EAAqBL,EAAQ,UAAU,SACzCF,EAAO,aAAaC,EAAQC,EAAQ,UAAU,QAAQ,EAAE,UAAU,CAAC,CAAC,EACpE,CAAC,EACCM,EAAmBN,EAAQ,UAAU,QACvCF,EAAO,aAAaC,EAAQC,EAAQ,UAAU,OAAO,EAAE,UAAU,CAAC,CAAC,EACnE,CAAC,EAEL,QAASO,EAAI,EAAGA,EAAIJ,EAAgB,OAAQI,IAAK,CAC/C,MAAMC,EAAOL,EAAgBI,CAAC,EACxBE,EAAUH,EAAiBC,CAAC,EAC5BG,EAAKN,EAAYG,CAAC,GAAG,MACzB,KAAK,IAAI,EAAGH,EAAYG,CAAC,EAAG,OAAS,EAAE,CACzC,EACMI,EAAWN,EAAmBE,CAAC,EAE/BK,EAAkC,CACtC,KAAMJ,KAAO,sBAAmBA,CAAI,EAAI,KACxC,QAASC,EAAU,OAAOA,CAAO,EAAIV,EAAO,QAC5C,GAAIW,KAAK,sBAAmBA,CAAE,EAAIX,EAAO,GACzC,SAAUY,KACN,sBAAmBA,CAAQ,EAC3BH,KACE,sBAAmBA,CAAI,EAAE,MAAM,EAAGZ,CAAuB,EACzD,IACR,EAEAK,EAAc,KAAKW,CAAY,CACjC,CAEA,MAAO,CACL,QAASX,CACX,CACF,CACF",
6
+ "names": ["ParseNestedTransactionTask_exports", "__export", "ParseNestedTransactionTask", "__toCommonJS", "import_context_module", "import_device_management_kit", "DEFAULT_SELECTOR_LENGTH", "_args", "parser", "subset", "context", "nestedSubsets", "valuePath", "extractedValues", "extractedTo", "extractedSelectors", "extractedChainId", "i", "data", "chainId", "to", "selector", "nestedSubset"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var e=require("@ledgerhq/context-module"),s=require("purify-ts"),c=require("./ParseNestedTransactionTask");describe("ParseNestedTransactionTask",()=>{const n={extractValue:vi.fn()},u={chainId:1,to:"0x1234567890123456789012345678901234567890",data:"0x060708090A",selector:"0x06070809",value:0n},t=[{type:e.DataPathElementType.TUPLE,offset:1},{type:e.DataPathElementType.TUPLE,offset:2},{type:e.DataPathElementType.LEAF,leafType:e.DataPathLeafType.STATIC_LEAF}],x={type:e.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"test payload",reference:{type:e.ClearSignContextReferenceType.CALLDATA,valuePath:t,selector:t,callee:t,amount:t}};let o;beforeEach(()=>{vi.resetAllMocks(),o={parser:n,subset:u,context:x}}),describe("run",()=>{describe("error cases",()=>{it("should throw error when context has no reference",()=>{const a={type:e.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"test payload"},r={...o,context:a};expect(()=>new c.ParseNestedTransactionTask(r).run()).toThrow("Invalid reference for nested call data. Expected a reference with type CALLDATA and a value path.")}),it("should throw error when reference type is not CALLDATA",()=>{const a={type:e.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"test payload",reference:{type:e.ClearSignContextReferenceType.TOKEN,valuePath:t}},r={...o,context:a};expect(()=>new c.ParseNestedTransactionTask(r).run()).toThrow("Invalid reference for nested call data. Expected a reference with type CALLDATA and a value path.")}),it("should throw error when reference has no valuePath",()=>{const a={type:e.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"test payload",reference:{type:e.ClearSignContextReferenceType.CALLDATA,valuePath:void 0,selector:void 0,callee:void 0,amount:void 0,spender:void 0,chainId:void 0}},r={...o,context:a};expect(()=>new c.ParseNestedTransactionTask(r).run()).toThrow("Invalid reference for nested call data. Expected a reference with type CALLDATA and a value path.")}),it("should throw error when parser returns error",()=>{n.extractValue.mockReturnValue((0,s.Left)(new Error("Parser error")));const a={...o};expect(()=>new c.ParseNestedTransactionTask(a).run()).toThrow("Parser error")})}),describe("success cases",()=>{it("should return new subset with extracted data when all fields are provided",()=>{n.extractValue.mockReturnValueOnce((0,s.Right)([new Uint8Array([1,2,3,4])])),n.extractValue.mockReturnValueOnce((0,s.Right)([new Uint8Array([2,3,4,5])])),n.extractValue.mockReturnValueOnce((0,s.Right)([new Uint8Array([3,4,5,6])]));const a={type:e.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"test payload",reference:{type:e.ClearSignContextReferenceType.CALLDATA,valuePath:t,selector:t,callee:t,amount:t}},r={...o,context:a},l=new c.ParseNestedTransactionTask(r).run();expect(n.extractValue).toHaveBeenCalledWith(u,t),expect(l).toEqual({subsets:[{data:"0x01020304",chainId:1,selector:"0x03040506",to:"0x02030405"}]})}),it("should use data.slice(0, 10) as selector when selector is not provided",()=>{n.extractValue.mockReturnValueOnce((0,s.Right)([new Uint8Array([1,2,3,4,5,6,7,8,9,10])])),n.extractValue.mockReturnValueOnce((0,s.Right)([new Uint8Array([2,3,4,5])])),n.extractValue.mockReturnValueOnce((0,s.Left)(new Error("Parser error"))),n.extractValue.mockReturnValueOnce((0,s.Right)([new Uint8Array([3,4,5,6])]));const a={type:e.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"test payload",reference:{type:e.ClearSignContextReferenceType.CALLDATA,valuePath:t,callee:t,amount:t}},r={...o,context:a},l=new c.ParseNestedTransactionTask(r).run();expect(l.subsets[0]).toEqual({data:"0x0102030405060708090a",chainId:1,selector:"0x01020304",to:"0x02030405"})}),it("should use defaults values when no value are returned from parser",()=>{n.extractValue.mockReturnValueOnce((0,s.Right)([new Uint8Array([1,2,3,4])])),n.extractValue.mockReturnValue((0,s.Right)([]));const a={type:e.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"test payload",reference:{type:e.ClearSignContextReferenceType.CALLDATA,valuePath:t,selector:t,callee:t,amount:t}},r={...o,context:a},l=new c.ParseNestedTransactionTask(r).run();expect(l.subsets[0]).toEqual({data:"0x01020304",chainId:1,selector:"0x01020304",to:"0x1234567890123456789012345678901234567890"})}),it("should preserve chainId from original subset",()=>{n.extractValue.mockReturnValue((0,s.Right)([new Uint8Array([1,2,3,4])]));const a={...u,chainId:137},r={...o,subset:a},l=new c.ParseNestedTransactionTask(r).run();expect(l.subsets[0]?.chainId).toBe(137)})})})});
2
+ //# sourceMappingURL=ParseNestedTransactionTask.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/internal/app-binder/task/ParseNestedTransactionTask.test.ts"],
4
+ "sourcesContent": ["import {\n ClearSignContextReferenceType,\n type ClearSignContextSuccess,\n ClearSignContextType,\n type DataPathElement,\n DataPathElementType,\n DataPathLeafType,\n type GenericPath,\n type TransactionSubset,\n} from \"@ledgerhq/context-module\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { type TransactionParserService } from \"@internal/transaction/service/parser/TransactionParserService\";\n\nimport {\n ParseNestedTransactionTask,\n type ParseNestedTransactionTaskArgs,\n} from \"./ParseNestedTransactionTask\";\n\ndescribe(\"ParseNestedTransactionTask\", () => {\n const transactionParserMock = {\n extractValue: vi.fn(),\n };\n\n const defaultSubset: TransactionSubset = {\n chainId: 1,\n to: \"0x1234567890123456789012345678901234567890\",\n data: \"0x060708090A\",\n selector: \"0x06070809\",\n value: 0n,\n };\n\n const mockValuePath: DataPathElement[] = [\n {\n type: DataPathElementType.TUPLE,\n offset: 1,\n },\n {\n type: DataPathElementType.TUPLE,\n offset: 2,\n },\n {\n type: DataPathElementType.LEAF,\n leafType: DataPathLeafType.STATIC_LEAF,\n },\n ];\n\n const defaultContext: ClearSignContextSuccess<ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION> =\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"test payload\",\n reference: {\n type: ClearSignContextReferenceType.CALLDATA,\n valuePath: mockValuePath,\n selector: mockValuePath,\n callee: mockValuePath,\n amount: mockValuePath,\n },\n };\n\n let defaultArgs: ParseNestedTransactionTaskArgs;\n\n beforeEach(() => {\n vi.resetAllMocks();\n defaultArgs = {\n parser: transactionParserMock as unknown as TransactionParserService,\n subset: defaultSubset,\n context: defaultContext,\n };\n });\n\n describe(\"run\", () => {\n describe(\"error cases\", () => {\n it(\"should throw error when context has no reference\", () => {\n // GIVEN\n const contextWithoutReference: ClearSignContextSuccess<ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION> =\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"test payload\",\n };\n const args = { ...defaultArgs, context: contextWithoutReference };\n\n // WHEN & THEN\n expect(() => new ParseNestedTransactionTask(args).run()).toThrow(\n \"Invalid reference for nested call data. Expected a reference with type CALLDATA and a value path.\",\n );\n });\n\n it(\"should throw error when reference type is not CALLDATA\", () => {\n // GIVEN\n const contextWithWrongType: ClearSignContextSuccess<ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION> =\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"test payload\",\n reference: {\n type: ClearSignContextReferenceType.TOKEN,\n valuePath: mockValuePath,\n },\n };\n const args = { ...defaultArgs, context: contextWithWrongType };\n\n // WHEN & THEN\n expect(() => new ParseNestedTransactionTask(args).run()).toThrow(\n \"Invalid reference for nested call data. Expected a reference with type CALLDATA and a value path.\",\n );\n });\n\n it(\"should throw error when reference has no valuePath\", () => {\n // GIVEN\n const contextWithoutValuePath: ClearSignContextSuccess<ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION> =\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"test payload\",\n reference: {\n type: ClearSignContextReferenceType.CALLDATA,\n valuePath: undefined as unknown as GenericPath,\n selector: undefined as unknown as GenericPath,\n callee: undefined as unknown as GenericPath,\n amount: undefined as unknown as GenericPath,\n spender: undefined as unknown as GenericPath,\n chainId: undefined as unknown as GenericPath,\n },\n };\n const args = { ...defaultArgs, context: contextWithoutValuePath };\n\n // WHEN & THEN\n expect(() => new ParseNestedTransactionTask(args).run()).toThrow(\n \"Invalid reference for nested call data. Expected a reference with type CALLDATA and a value path.\",\n );\n });\n\n it(\"should throw error when parser returns error\", () => {\n // GIVEN\n transactionParserMock.extractValue.mockReturnValue(\n Left(new Error(\"Parser error\")),\n );\n const args = { ...defaultArgs };\n\n // WHEN & THEN\n expect(() => new ParseNestedTransactionTask(args).run()).toThrow(\n \"Parser error\",\n );\n });\n });\n\n describe(\"success cases\", () => {\n it(\"should return new subset with extracted data when all fields are provided\", () => {\n // GIVEN\n transactionParserMock.extractValue.mockReturnValueOnce(\n Right([new Uint8Array([0x01, 0x02, 0x03, 0x04])]),\n );\n transactionParserMock.extractValue.mockReturnValueOnce(\n Right([new Uint8Array([0x02, 0x03, 0x04, 0x05])]),\n );\n transactionParserMock.extractValue.mockReturnValueOnce(\n Right([new Uint8Array([0x03, 0x04, 0x05, 0x06])]),\n );\n\n const context: ClearSignContextSuccess<ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION> =\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"test payload\",\n reference: {\n type: ClearSignContextReferenceType.CALLDATA,\n valuePath: mockValuePath,\n selector: mockValuePath,\n callee: mockValuePath,\n amount: mockValuePath,\n },\n };\n\n const args = { ...defaultArgs, context };\n\n // WHEN\n const result = new ParseNestedTransactionTask(args).run();\n\n // THEN\n expect(transactionParserMock.extractValue).toHaveBeenCalledWith(\n defaultSubset,\n mockValuePath,\n );\n expect(result).toEqual({\n subsets: [\n {\n data: \"0x01020304\",\n chainId: 1,\n selector: \"0x03040506\",\n to: \"0x02030405\",\n },\n ],\n });\n });\n\n it(\"should use data.slice(0, 10) as selector when selector is not provided\", () => {\n // GIVEN\n transactionParserMock.extractValue.mockReturnValueOnce(\n Right([\n new Uint8Array([\n 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a,\n ]),\n ]),\n );\n transactionParserMock.extractValue.mockReturnValueOnce(\n Right([new Uint8Array([0x02, 0x03, 0x04, 0x05])]),\n );\n transactionParserMock.extractValue.mockReturnValueOnce(\n Left(new Error(\"Parser error\")),\n );\n transactionParserMock.extractValue.mockReturnValueOnce(\n Right([new Uint8Array([0x03, 0x04, 0x05, 0x06])]),\n );\n\n const context: ClearSignContextSuccess<ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION> =\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"test payload\",\n reference: {\n type: ClearSignContextReferenceType.CALLDATA,\n valuePath: mockValuePath,\n callee: mockValuePath,\n amount: mockValuePath,\n },\n };\n\n const args = { ...defaultArgs, context };\n\n // WHEN\n const result = new ParseNestedTransactionTask(args).run();\n\n // THEN\n expect(result.subsets[0]).toEqual({\n data: \"0x0102030405060708090a\",\n chainId: 1,\n selector: \"0x01020304\",\n to: \"0x02030405\",\n });\n });\n\n it(\"should use defaults values when no value are returned from parser\", () => {\n // GIVEN\n transactionParserMock.extractValue.mockReturnValueOnce(\n Right([new Uint8Array([0x01, 0x02, 0x03, 0x04])]),\n );\n transactionParserMock.extractValue.mockReturnValue(Right([]));\n\n const context: ClearSignContextSuccess<ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION> =\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"test payload\",\n reference: {\n type: ClearSignContextReferenceType.CALLDATA,\n valuePath: mockValuePath,\n selector: mockValuePath,\n callee: mockValuePath,\n amount: mockValuePath,\n },\n };\n\n const args = { ...defaultArgs, context };\n\n // WHEN\n const result = new ParseNestedTransactionTask(args).run();\n\n // THEN\n expect(result.subsets[0]).toEqual({\n data: \"0x01020304\",\n chainId: 1,\n selector: \"0x01020304\",\n to: \"0x1234567890123456789012345678901234567890\",\n });\n });\n\n it(\"should preserve chainId from original subset\", () => {\n // GIVEN\n transactionParserMock.extractValue.mockReturnValue(\n Right([new Uint8Array([0x01, 0x02, 0x03, 0x04])]),\n );\n\n const subsetWithDifferentChainId: TransactionSubset = {\n ...defaultSubset,\n chainId: 137, // Polygon\n };\n\n const args = { ...defaultArgs, subset: subsetWithDifferentChainId };\n\n // WHEN\n const result = new ParseNestedTransactionTask(args).run();\n\n // THEN\n expect(result.subsets[0]?.chainId).toBe(137);\n });\n });\n });\n});\n"],
5
+ "mappings": "aAAA,IAAAA,EASO,oCACPC,EAA4B,qBAI5BC,EAGO,wCAEP,SAAS,6BAA8B,IAAM,CAC3C,MAAMC,EAAwB,CAC5B,aAAc,GAAG,GAAG,CACtB,EAEMC,EAAmC,CACvC,QAAS,EACT,GAAI,6CACJ,KAAM,eACN,SAAU,aACV,MAAO,EACT,EAEMC,EAAmC,CACvC,CACE,KAAM,sBAAoB,MAC1B,OAAQ,CACV,EACA,CACE,KAAM,sBAAoB,MAC1B,OAAQ,CACV,EACA,CACE,KAAM,sBAAoB,KAC1B,SAAU,mBAAiB,WAC7B,CACF,EAEMC,EACJ,CACE,KAAM,uBAAqB,8BAC3B,QAAS,eACT,UAAW,CACT,KAAM,gCAA8B,SACpC,UAAWD,EACX,SAAUA,EACV,OAAQA,EACR,OAAQA,CACV,CACF,EAEF,IAAIE,EAEJ,WAAW,IAAM,CACf,GAAG,cAAc,EACjBA,EAAc,CACZ,OAAQJ,EACR,OAAQC,EACR,QAASE,CACX,CACF,CAAC,EAED,SAAS,MAAO,IAAM,CACpB,SAAS,cAAe,IAAM,CAC5B,GAAG,mDAAoD,IAAM,CAE3D,MAAME,EACJ,CACE,KAAM,uBAAqB,8BAC3B,QAAS,cACX,EACIC,EAAO,CAAE,GAAGF,EAAa,QAASC,CAAwB,EAGhE,OAAO,IAAM,IAAI,6BAA2BC,CAAI,EAAE,IAAI,CAAC,EAAE,QACvD,mGACF,CACF,CAAC,EAED,GAAG,yDAA0D,IAAM,CAEjE,MAAMC,EACJ,CACE,KAAM,uBAAqB,8BAC3B,QAAS,eACT,UAAW,CACT,KAAM,gCAA8B,MACpC,UAAWL,CACb,CACF,EACII,EAAO,CAAE,GAAGF,EAAa,QAASG,CAAqB,EAG7D,OAAO,IAAM,IAAI,6BAA2BD,CAAI,EAAE,IAAI,CAAC,EAAE,QACvD,mGACF,CACF,CAAC,EAED,GAAG,qDAAsD,IAAM,CAE7D,MAAME,EACJ,CACE,KAAM,uBAAqB,8BAC3B,QAAS,eACT,UAAW,CACT,KAAM,gCAA8B,SACpC,UAAW,OACX,SAAU,OACV,OAAQ,OACR,OAAQ,OACR,QAAS,OACT,QAAS,MACX,CACF,EACIF,EAAO,CAAE,GAAGF,EAAa,QAASI,CAAwB,EAGhE,OAAO,IAAM,IAAI,6BAA2BF,CAAI,EAAE,IAAI,CAAC,EAAE,QACvD,mGACF,CACF,CAAC,EAED,GAAG,+CAAgD,IAAM,CAEvDN,EAAsB,aAAa,mBACjC,QAAK,IAAI,MAAM,cAAc,CAAC,CAChC,EACA,MAAMM,EAAO,CAAE,GAAGF,CAAY,EAG9B,OAAO,IAAM,IAAI,6BAA2BE,CAAI,EAAE,IAAI,CAAC,EAAE,QACvD,cACF,CACF,CAAC,CACH,CAAC,EAED,SAAS,gBAAiB,IAAM,CAC9B,GAAG,4EAA6E,IAAM,CAEpFN,EAAsB,aAAa,uBACjC,SAAM,CAAC,IAAI,WAAW,CAAC,EAAM,EAAM,EAAM,CAAI,CAAC,CAAC,CAAC,CAClD,EACAA,EAAsB,aAAa,uBACjC,SAAM,CAAC,IAAI,WAAW,CAAC,EAAM,EAAM,EAAM,CAAI,CAAC,CAAC,CAAC,CAClD,EACAA,EAAsB,aAAa,uBACjC,SAAM,CAAC,IAAI,WAAW,CAAC,EAAM,EAAM,EAAM,CAAI,CAAC,CAAC,CAAC,CAClD,EAEA,MAAMS,EACJ,CACE,KAAM,uBAAqB,8BAC3B,QAAS,eACT,UAAW,CACT,KAAM,gCAA8B,SACpC,UAAWP,EACX,SAAUA,EACV,OAAQA,EACR,OAAQA,CACV,CACF,EAEII,EAAO,CAAE,GAAGF,EAAa,QAAAK,CAAQ,EAGjCC,EAAS,IAAI,6BAA2BJ,CAAI,EAAE,IAAI,EAGxD,OAAON,EAAsB,YAAY,EAAE,qBACzCC,EACAC,CACF,EACA,OAAOQ,CAAM,EAAE,QAAQ,CACrB,QAAS,CACP,CACE,KAAM,aACN,QAAS,EACT,SAAU,aACV,GAAI,YACN,CACF,CACF,CAAC,CACH,CAAC,EAED,GAAG,yEAA0E,IAAM,CAEjFV,EAAsB,aAAa,uBACjC,SAAM,CACJ,IAAI,WAAW,CACb,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACxD,CAAC,CACH,CAAC,CACH,EACAA,EAAsB,aAAa,uBACjC,SAAM,CAAC,IAAI,WAAW,CAAC,EAAM,EAAM,EAAM,CAAI,CAAC,CAAC,CAAC,CAClD,EACAA,EAAsB,aAAa,uBACjC,QAAK,IAAI,MAAM,cAAc,CAAC,CAChC,EACAA,EAAsB,aAAa,uBACjC,SAAM,CAAC,IAAI,WAAW,CAAC,EAAM,EAAM,EAAM,CAAI,CAAC,CAAC,CAAC,CAClD,EAEA,MAAMS,EACJ,CACE,KAAM,uBAAqB,8BAC3B,QAAS,eACT,UAAW,CACT,KAAM,gCAA8B,SACpC,UAAWP,EACX,OAAQA,EACR,OAAQA,CACV,CACF,EAEII,EAAO,CAAE,GAAGF,EAAa,QAAAK,CAAQ,EAGjCC,EAAS,IAAI,6BAA2BJ,CAAI,EAAE,IAAI,EAGxD,OAAOI,EAAO,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAChC,KAAM,yBACN,QAAS,EACT,SAAU,aACV,GAAI,YACN,CAAC,CACH,CAAC,EAED,GAAG,oEAAqE,IAAM,CAE5EV,EAAsB,aAAa,uBACjC,SAAM,CAAC,IAAI,WAAW,CAAC,EAAM,EAAM,EAAM,CAAI,CAAC,CAAC,CAAC,CAClD,EACAA,EAAsB,aAAa,mBAAgB,SAAM,CAAC,CAAC,CAAC,EAE5D,MAAMS,EACJ,CACE,KAAM,uBAAqB,8BAC3B,QAAS,eACT,UAAW,CACT,KAAM,gCAA8B,SACpC,UAAWP,EACX,SAAUA,EACV,OAAQA,EACR,OAAQA,CACV,CACF,EAEII,EAAO,CAAE,GAAGF,EAAa,QAAAK,CAAQ,EAGjCC,EAAS,IAAI,6BAA2BJ,CAAI,EAAE,IAAI,EAGxD,OAAOI,EAAO,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAChC,KAAM,aACN,QAAS,EACT,SAAU,aACV,GAAI,4CACN,CAAC,CACH,CAAC,EAED,GAAG,+CAAgD,IAAM,CAEvDV,EAAsB,aAAa,mBACjC,SAAM,CAAC,IAAI,WAAW,CAAC,EAAM,EAAM,EAAM,CAAI,CAAC,CAAC,CAAC,CAClD,EAEA,MAAMW,EAAgD,CACpD,GAAGV,EACH,QAAS,GACX,EAEMK,EAAO,CAAE,GAAGF,EAAa,OAAQO,CAA2B,EAG5DD,EAAS,IAAI,6BAA2BJ,CAAI,EAAE,IAAI,EAGxD,OAAOI,EAAO,QAAQ,CAAC,GAAG,OAAO,EAAE,KAAK,GAAG,CAC7C,CAAC,CACH,CAAC,CACH,CAAC,CACH,CAAC",
6
+ "names": ["import_context_module", "import_purify_ts", "import_ParseNestedTransactionTask", "transactionParserMock", "defaultSubset", "mockValuePath", "defaultContext", "defaultArgs", "contextWithoutReference", "args", "contextWithWrongType", "contextWithoutValuePath", "context", "result", "subsetWithDifferentChainId"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var n=Object.defineProperty;var o=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var i=(r,a)=>{for(var t in a)n(r,t,{get:a[t],enumerable:!0})},T=(r,a,t,e)=>{if(a&&typeof a=="object"||typeof a=="function")for(let s of p(a))!c.call(r,s)&&s!==t&&n(r,s,{get:()=>a[s],enumerable:!(e=o(a,s))||e.enumerable});return r};var y=r=>T(n({},"__esModule",{value:!0}),r);var m={};i(m,{ParseTransactionTask:()=>u});module.exports=y(m);class u{constructor(a){this._args=a}run(){const{mapper:a,transaction:t}=this._args,{subset:e,type:s}=a.mapTransactionToSubset(t).unsafeCoerce();return{subset:e,type:s}}}0&&(module.exports={ParseTransactionTask});
2
+ //# sourceMappingURL=ParseTransactionTask.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/internal/app-binder/task/ParseTransactionTask.ts"],
4
+ "sourcesContent": ["import { type TransactionSubset } from \"@ledgerhq/context-module\";\n\nimport { type TransactionType } from \"@api/model/TransactionType\";\nimport { type TransactionMapperService } from \"@internal/transaction/service/mapper/TransactionMapperService\";\n\nexport type ParseTransactionTaskResult = {\n readonly subset: TransactionSubset;\n readonly type: TransactionType;\n};\n\nexport type ParseTransactionTaskArgs = {\n readonly mapper: TransactionMapperService;\n readonly transaction: Uint8Array;\n};\n\nexport class ParseTransactionTask {\n constructor(private readonly _args: ParseTransactionTaskArgs) {}\n\n run(): ParseTransactionTaskResult {\n const { mapper, transaction } = this._args;\n\n const { subset, type } = mapper\n .mapTransactionToSubset(transaction)\n .unsafeCoerce();\n return { subset, type };\n }\n}\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,0BAAAE,IAAA,eAAAC,EAAAH,GAeO,MAAME,CAAqB,CAChC,YAA6BE,EAAiC,CAAjC,WAAAA,CAAkC,CAE/D,KAAkC,CAChC,KAAM,CAAE,OAAAC,EAAQ,YAAAC,CAAY,EAAI,KAAK,MAE/B,CAAE,OAAAC,EAAQ,KAAAC,CAAK,EAAIH,EACtB,uBAAuBC,CAAW,EAClC,aAAa,EAChB,MAAO,CAAE,OAAAC,EAAQ,KAAAC,CAAK,CACxB,CACF",
6
+ "names": ["ParseTransactionTask_exports", "__export", "ParseTransactionTask", "__toCommonJS", "_args", "mapper", "transaction", "subset", "type"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var r=require("purify-ts"),a=require("./ParseTransactionTask");describe("ParseTransactionTask",()=>{const t={mapTransactionToSubset:vi.fn()};let s,c,n;beforeEach(()=>{vi.resetAllMocks(),c=new Uint8Array([1,2,3,4]),n={subset:{chainId:1,to:"0x1234567890123456789012345678901234567890",data:"0x1234567890",selector:"0x12345678",value:1000n},serializedTransaction:new Uint8Array([5,6,7,8]),type:2},s={mapper:t,transaction:c}}),describe("run",()=>{it("should successfully parse transaction and return subset and type",()=>{t.mapTransactionToSubset.mockReturnValue((0,r.Right)(n));const e=new a.ParseTransactionTask(s).run();expect(t.mapTransactionToSubset).toHaveBeenCalledWith(c),expect(e).toEqual({subset:n.subset,type:n.type})}),it("should pass through the transaction data to the mapper",()=>{const e=new Uint8Array([10,11,12,13,14]),o={...s,transaction:e};t.mapTransactionToSubset.mockReturnValue((0,r.Right)(n)),new a.ParseTransactionTask(o).run(),expect(t.mapTransactionToSubset).toHaveBeenCalledWith(e)}),it("should return correct subset structure",()=>{const e={chainId:42,to:"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd",data:"0xdeadbeef",selector:"0xdeadbeef",value:2000n,from:"0x9876543210987654321098765432109876543210"},o={...n,subset:e,type:1};t.mapTransactionToSubset.mockReturnValue((0,r.Right)(o));const u=new a.ParseTransactionTask(s).run();expect(u.subset).toEqual(e),expect(u.type).toEqual(1)}),it("should throw when mapper returns Left (error)",()=>{const e=new Error("Invalid transaction format");t.mapTransactionToSubset.mockReturnValue((0,r.Left)(e)),expect(()=>new a.ParseTransactionTask(s).run()).toThrow()}),it("should throw when mapper returns Left with specific error message",()=>{const e=new Error("Pre-EIP-155 transactions are not supported");t.mapTransactionToSubset.mockReturnValue((0,r.Left)(e)),expect(()=>new a.ParseTransactionTask(s).run()).toThrow()})}),describe("constructor",()=>{it("should store args correctly",()=>{const e=new a.ParseTransactionTask(s);expect(e).toBeInstanceOf(a.ParseTransactionTask),t.mapTransactionToSubset.mockReturnValue((0,r.Right)(n));const o=e.run();expect(o).toBeDefined()})})});
2
+ //# sourceMappingURL=ParseTransactionTask.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/internal/app-binder/task/ParseTransactionTask.test.ts"],
4
+ "sourcesContent": ["import { type TransactionSubset } from \"@ledgerhq/context-module\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { type TransactionType } from \"@api/model/TransactionType\";\nimport { type TransactionMapperResult } from \"@internal/transaction/service/mapper/model/TransactionMapperResult\";\nimport { type TransactionMapperService } from \"@internal/transaction/service/mapper/TransactionMapperService\";\n\nimport {\n ParseTransactionTask,\n type ParseTransactionTaskArgs,\n} from \"./ParseTransactionTask\";\n\ndescribe(\"ParseTransactionTask\", () => {\n const mockMapper = {\n mapTransactionToSubset: vi.fn(),\n };\n\n let defaultArgs: ParseTransactionTaskArgs;\n let mockTransaction: Uint8Array;\n let mockMapperResult: TransactionMapperResult;\n\n beforeEach(() => {\n vi.resetAllMocks();\n\n mockTransaction = new Uint8Array([0x01, 0x02, 0x03, 0x04]);\n\n mockMapperResult = {\n subset: {\n chainId: 1,\n to: \"0x1234567890123456789012345678901234567890\",\n data: \"0x1234567890\",\n selector: \"0x12345678\",\n value: 1000n,\n },\n serializedTransaction: new Uint8Array([0x05, 0x06, 0x07, 0x08]),\n type: 2 as TransactionType,\n };\n\n defaultArgs = {\n mapper: mockMapper as unknown as TransactionMapperService,\n transaction: mockTransaction,\n };\n });\n\n describe(\"run\", () => {\n it(\"should successfully parse transaction and return subset and type\", () => {\n // GIVEN\n mockMapper.mapTransactionToSubset.mockReturnValue(\n Right(mockMapperResult),\n );\n\n // WHEN\n const result = new ParseTransactionTask(defaultArgs).run();\n\n // THEN\n expect(mockMapper.mapTransactionToSubset).toHaveBeenCalledWith(\n mockTransaction,\n );\n expect(result).toEqual({\n subset: mockMapperResult.subset,\n type: mockMapperResult.type,\n });\n });\n\n it(\"should pass through the transaction data to the mapper\", () => {\n // GIVEN\n const customTransaction = new Uint8Array([0x0a, 0x0b, 0x0c, 0x0d, 0x0e]);\n const customArgs = {\n ...defaultArgs,\n transaction: customTransaction,\n };\n mockMapper.mapTransactionToSubset.mockReturnValue(\n Right(mockMapperResult),\n );\n\n // WHEN\n new ParseTransactionTask(customArgs).run();\n\n // THEN\n expect(mockMapper.mapTransactionToSubset).toHaveBeenCalledWith(\n customTransaction,\n );\n });\n\n it(\"should return correct subset structure\", () => {\n // GIVEN\n const customSubset: TransactionSubset = {\n chainId: 42,\n to: \"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\",\n data: \"0xdeadbeef\",\n selector: \"0xdeadbeef\",\n value: 2000n,\n from: \"0x9876543210987654321098765432109876543210\",\n };\n const customMapperResult: TransactionMapperResult = {\n ...mockMapperResult,\n subset: customSubset,\n type: 1 as TransactionType,\n };\n mockMapper.mapTransactionToSubset.mockReturnValue(\n Right(customMapperResult),\n );\n\n // WHEN\n const result = new ParseTransactionTask(defaultArgs).run();\n\n // THEN\n expect(result.subset).toEqual(customSubset);\n expect(result.type).toEqual(1);\n });\n\n it(\"should throw when mapper returns Left (error)\", () => {\n // GIVEN\n const mappingError = new Error(\"Invalid transaction format\");\n mockMapper.mapTransactionToSubset.mockReturnValue(Left(mappingError));\n\n // WHEN / THEN\n expect(() => new ParseTransactionTask(defaultArgs).run()).toThrow();\n });\n\n it(\"should throw when mapper returns Left with specific error message\", () => {\n // GIVEN\n const specificError = new Error(\n \"Pre-EIP-155 transactions are not supported\",\n );\n mockMapper.mapTransactionToSubset.mockReturnValue(Left(specificError));\n\n // WHEN / THEN\n expect(() => new ParseTransactionTask(defaultArgs).run()).toThrow();\n });\n });\n\n describe(\"constructor\", () => {\n it(\"should store args correctly\", () => {\n // GIVEN / WHEN\n const task = new ParseTransactionTask(defaultArgs);\n\n // THEN\n expect(task).toBeInstanceOf(ParseTransactionTask);\n // We can't directly test private properties, but we can verify behavior\n mockMapper.mapTransactionToSubset.mockReturnValue(\n Right(mockMapperResult),\n );\n const result = task.run();\n expect(result).toBeDefined();\n });\n });\n});\n"],
5
+ "mappings": "aACA,IAAAA,EAA4B,qBAM5BC,EAGO,kCAEP,SAAS,uBAAwB,IAAM,CACrC,MAAMC,EAAa,CACjB,uBAAwB,GAAG,GAAG,CAChC,EAEA,IAAIC,EACAC,EACAC,EAEJ,WAAW,IAAM,CACf,GAAG,cAAc,EAEjBD,EAAkB,IAAI,WAAW,CAAC,EAAM,EAAM,EAAM,CAAI,CAAC,EAEzDC,EAAmB,CACjB,OAAQ,CACN,QAAS,EACT,GAAI,6CACJ,KAAM,eACN,SAAU,aACV,MAAO,KACT,EACA,sBAAuB,IAAI,WAAW,CAAC,EAAM,EAAM,EAAM,CAAI,CAAC,EAC9D,KAAM,CACR,EAEAF,EAAc,CACZ,OAAQD,EACR,YAAaE,CACf,CACF,CAAC,EAED,SAAS,MAAO,IAAM,CACpB,GAAG,mEAAoE,IAAM,CAE3EF,EAAW,uBAAuB,mBAChC,SAAMG,CAAgB,CACxB,EAGA,MAAMC,EAAS,IAAI,uBAAqBH,CAAW,EAAE,IAAI,EAGzD,OAAOD,EAAW,sBAAsB,EAAE,qBACxCE,CACF,EACA,OAAOE,CAAM,EAAE,QAAQ,CACrB,OAAQD,EAAiB,OACzB,KAAMA,EAAiB,IACzB,CAAC,CACH,CAAC,EAED,GAAG,yDAA0D,IAAM,CAEjE,MAAME,EAAoB,IAAI,WAAW,CAAC,GAAM,GAAM,GAAM,GAAM,EAAI,CAAC,EACjEC,EAAa,CACjB,GAAGL,EACH,YAAaI,CACf,EACAL,EAAW,uBAAuB,mBAChC,SAAMG,CAAgB,CACxB,EAGA,IAAI,uBAAqBG,CAAU,EAAE,IAAI,EAGzC,OAAON,EAAW,sBAAsB,EAAE,qBACxCK,CACF,CACF,CAAC,EAED,GAAG,yCAA0C,IAAM,CAEjD,MAAME,EAAkC,CACtC,QAAS,GACT,GAAI,6CACJ,KAAM,aACN,SAAU,aACV,MAAO,MACP,KAAM,4CACR,EACMC,EAA8C,CAClD,GAAGL,EACH,OAAQI,EACR,KAAM,CACR,EACAP,EAAW,uBAAuB,mBAChC,SAAMQ,CAAkB,CAC1B,EAGA,MAAMJ,EAAS,IAAI,uBAAqBH,CAAW,EAAE,IAAI,EAGzD,OAAOG,EAAO,MAAM,EAAE,QAAQG,CAAY,EAC1C,OAAOH,EAAO,IAAI,EAAE,QAAQ,CAAC,CAC/B,CAAC,EAED,GAAG,gDAAiD,IAAM,CAExD,MAAMK,EAAe,IAAI,MAAM,4BAA4B,EAC3DT,EAAW,uBAAuB,mBAAgB,QAAKS,CAAY,CAAC,EAGpE,OAAO,IAAM,IAAI,uBAAqBR,CAAW,EAAE,IAAI,CAAC,EAAE,QAAQ,CACpE,CAAC,EAED,GAAG,oEAAqE,IAAM,CAE5E,MAAMS,EAAgB,IAAI,MACxB,4CACF,EACAV,EAAW,uBAAuB,mBAAgB,QAAKU,CAAa,CAAC,EAGrE,OAAO,IAAM,IAAI,uBAAqBT,CAAW,EAAE,IAAI,CAAC,EAAE,QAAQ,CACpE,CAAC,CACH,CAAC,EAED,SAAS,cAAe,IAAM,CAC5B,GAAG,8BAA+B,IAAM,CAEtC,MAAMU,EAAO,IAAI,uBAAqBV,CAAW,EAGjD,OAAOU,CAAI,EAAE,eAAe,sBAAoB,EAEhDX,EAAW,uBAAuB,mBAChC,SAAMG,CAAgB,CACxB,EACA,MAAMC,EAASO,EAAK,IAAI,EACxB,OAAOP,CAAM,EAAE,YAAY,CAC7B,CAAC,CACH,CAAC,CACH,CAAC",
6
+ "names": ["import_purify_ts", "import_ParseTransactionTask", "mockMapper", "defaultArgs", "mockTransaction", "mockMapperResult", "result", "customTransaction", "customArgs", "customSubset", "customMapperResult", "mappingError", "specificError", "task"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var c=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var R=Object.prototype.hasOwnProperty;var A=(d,a)=>{for(var n in a)c(d,n,{get:a[n],enumerable:!0})},S=(d,a,n,s)=>{if(a&&typeof a=="object"||typeof a=="function")for(let t of x(a))!R.call(d,t)&&t!==n&&c(d,t,{get:()=>a[t],enumerable:!(s=E(a,t))||s.enumerable});return d};var D=d=>S(c({},"__esModule",{value:!0}),d);var g={};A(g,{ProvideContextsTask:()=>O});module.exports=D(g);var r=require("@ledgerhq/context-module"),i=require("@ledgerhq/device-management-kit"),h=require("@ledgerhq/signer-utils"),C=require("purify-ts"),k=require("../../app-binder/command/ProvideEnumCommand"),u=require("../../app-binder/command/ProvideNetworkConfigurationCommand"),p=require("../../app-binder/command/ProvideNFTInformationCommand"),T=require("../../app-binder/command/ProvideProxyInfoCommand"),y=require("../../app-binder/command/ProvideTokenInformationCommand"),f=require("../../app-binder/command/ProvideTransactionFieldDescriptionCommand"),I=require("../../app-binder/command/ProvideTransactionInformationCommand"),F=require("../../app-binder/command/ProvideTrustedNameCommand"),l=require("../../app-binder/command/ProvideWeb3CheckCommand"),_=require("../../app-binder/command/SetExternalPluginCommand"),P=require("../../app-binder/command/SetPluginCommand"),w=require("../../app-binder/command/StoreTransactionCommand"),v=require("./SendCommandInChunksTask"),N=require("./SendPayloadInChunksTask");class O{constructor(a,n,s=(o,e)=>new N.SendPayloadInChunksTask(o,e),t=(o,e)=>new v.SendCommandInChunksTask(o,e)){this._api=a;this._args=n;this._sendPayloadInChunksTaskFactory=s;this._sendCommandInChunksTaskFactory=t}async run(){let a=!1;for(const{context:n,subcontextCallbacks:s}of this._args.contexts){for(const o of s){const e=await o();if(e.type===r.ClearSignContextType.ERROR)continue;const m=await this.provideContext(e);if(!(0,i.isSuccessCommandResult)(m))return(0,C.Left)(m)}if(n.type===r.ClearSignContextType.PROXY_INFO)continue;if(!a&&this._args.serializedTransaction!==void 0&&n.type===r.ClearSignContextType.TRANSACTION_INFO){a=!0;const o=h.DerivationPathUtils.splitPath(this._args.derivationPath),e=new i.ByteArrayBuilder;e.add8BitUIntToData(o.length),o.forEach(m=>{e.add32BitUIntToData(m)}),e.addBufferToData(this._args.serializedTransaction),await this._sendCommandInChunksTaskFactory(this._api,{data:e.build(),commandFactory:m=>new w.StoreTransactionCommand({serializedTransaction:m.chunkedData,isFirstChunk:m.isFirstChunk})}).run()}const t=await this.provideContext(n);if(!(0,i.isSuccessCommandResult)(t))return(0,C.Left)(t)}return(0,C.Right)(void 0)}async provideContext({type:a,payload:n,certificate:s}){switch(s&&await this._api.sendCommand(new i.LoadCertificateCommand({keyUsage:s.keyUsageNumber,certificate:s.payload})),a){case r.ClearSignContextType.PLUGIN:return await this._api.sendCommand(new P.SetPluginCommand({payload:n}));case r.ClearSignContextType.EXTERNAL_PLUGIN:return await this._api.sendCommand(new _.SetExternalPluginCommand({payload:n}));case r.ClearSignContextType.NFT:return await this._api.sendCommand(new p.ProvideNFTInformationCommand({payload:n}));case r.ClearSignContextType.TOKEN:return await this._api.sendCommand(new y.ProvideTokenInformationCommand({payload:n}));case r.ClearSignContextType.TRANSACTION_INFO:return await this._sendPayloadInChunksTaskFactory(this._api,{payload:n,commandFactory:o=>new I.ProvideTransactionInformationCommand({data:o.chunkedData,isFirstChunk:o.isFirstChunk})}).run();case r.ClearSignContextType.TRUSTED_NAME:return this._sendPayloadInChunksTaskFactory(this._api,{payload:n,commandFactory:t=>new F.ProvideTrustedNameCommand({data:t.chunkedData,isFirstChunk:t.isFirstChunk})}).run();case r.ClearSignContextType.ENUM:return this._sendPayloadInChunksTaskFactory(this._api,{payload:n,commandFactory:t=>new k.ProvideEnumCommand({data:t.chunkedData,isFirstChunk:t.isFirstChunk})}).run();case r.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION:return this._sendPayloadInChunksTaskFactory(this._api,{payload:n,commandFactory:t=>new f.ProvideTransactionFieldDescriptionCommand({data:t.chunkedData,isFirstChunk:t.isFirstChunk})}).run();case r.ClearSignContextType.WEB3_CHECK:return this._sendPayloadInChunksTaskFactory(this._api,{payload:n,commandFactory:t=>new l.ProvideWeb3CheckCommand({payload:t.chunkedData,isFirstChunk:t.isFirstChunk})}).run();case r.ClearSignContextType.PROXY_INFO:return this._sendPayloadInChunksTaskFactory(this._api,{payload:n,commandFactory:t=>new T.ProvideProxyInfoCommand({data:t.chunkedData,isFirstChunk:t.isFirstChunk})}).run();case r.ClearSignContextType.DYNAMIC_NETWORK:return this._sendPayloadInChunksTaskFactory(this._api,{payload:n,commandFactory:t=>new u.ProvideNetworkConfigurationCommand({data:t.chunkedData,isFirstChunk:t.isFirstChunk,configurationType:u.NetworkConfigurationType.CONFIGURATION})}).run();case r.ClearSignContextType.DYNAMIC_NETWORK_ICON:return this._sendPayloadInChunksTaskFactory(this._api,{payload:n,commandFactory:t=>new u.ProvideNetworkConfigurationCommand({data:t.chunkedData,isFirstChunk:t.isFirstChunk,configurationType:u.NetworkConfigurationType.ICON}),withPayloadLength:!1}).run();default:{const t=a;return(0,i.CommandResultFactory)({error:new i.InvalidStatusWordError(`The context type [${t}] is not covered`)})}}}}0&&(module.exports={ProvideContextsTask});
2
+ //# sourceMappingURL=ProvideContextsTask.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/internal/app-binder/task/ProvideContextsTask.ts"],
4
+ "sourcesContent": ["import {\n type ClearSignContextSuccess,\n ClearSignContextType,\n} from \"@ledgerhq/context-module\";\nimport {\n ByteArrayBuilder,\n type CommandErrorResult,\n type CommandResult,\n CommandResultFactory,\n type InternalApi,\n InvalidStatusWordError,\n isSuccessCommandResult,\n LoadCertificateCommand,\n} from \"@ledgerhq/device-management-kit\";\nimport { DerivationPathUtils } from \"@ledgerhq/signer-utils\";\nimport { type Either, Left, Right } from \"purify-ts\";\n\nimport { ProvideEnumCommand } from \"@internal/app-binder/command/ProvideEnumCommand\";\nimport {\n NetworkConfigurationType,\n ProvideNetworkConfigurationCommand,\n} from \"@internal/app-binder/command/ProvideNetworkConfigurationCommand\";\nimport { ProvideNFTInformationCommand } from \"@internal/app-binder/command/ProvideNFTInformationCommand\";\nimport { ProvideProxyInfoCommand } from \"@internal/app-binder/command/ProvideProxyInfoCommand\";\nimport { ProvideTokenInformationCommand } from \"@internal/app-binder/command/ProvideTokenInformationCommand\";\nimport { ProvideTransactionFieldDescriptionCommand } from \"@internal/app-binder/command/ProvideTransactionFieldDescriptionCommand\";\nimport { ProvideTransactionInformationCommand } from \"@internal/app-binder/command/ProvideTransactionInformationCommand\";\nimport { ProvideTrustedNameCommand } from \"@internal/app-binder/command/ProvideTrustedNameCommand\";\nimport { ProvideWeb3CheckCommand } from \"@internal/app-binder/command/ProvideWeb3CheckCommand\";\nimport { SetExternalPluginCommand } from \"@internal/app-binder/command/SetExternalPluginCommand\";\nimport { SetPluginCommand } from \"@internal/app-binder/command/SetPluginCommand\";\nimport { StoreTransactionCommand } from \"@internal/app-binder/command/StoreTransactionCommand\";\nimport { type EthErrorCodes } from \"@internal/app-binder/command/utils/ethAppErrors\";\n\nimport { type ContextWithSubContexts } from \"./BuildFullContextsTask\";\nimport {\n SendCommandInChunksTask,\n type SendCommandInChunksTaskArgs,\n} from \"./SendCommandInChunksTask\";\nimport {\n SendPayloadInChunksTask,\n type SendPayloadInChunksTaskArgs,\n} from \"./SendPayloadInChunksTask\";\n\nexport type ProvideContextsTaskArgs = {\n /**\n * The list of clear sign context with subcontexts callback to provide.\n */\n contexts: ContextWithSubContexts[];\n /**\n * The derivation path to provide.\n */\n derivationPath: string;\n /**\n * The serialized transaction to provide.\n * This parameter is optional in the case there is no transaction at all, for instance\n * if there is only a standalone calldata embedded in a message.\n */\n serializedTransaction?: Uint8Array;\n};\n\nexport type ProvideContextsTaskResult = Either<\n CommandErrorResult<EthErrorCodes>,\n void\n>;\n\n/**\n * This task is responsible for providing the transaction context to the device.\n * It will send the subcontexts callbacks in order and finish with the context.\n */\nexport class ProvideContextsTask {\n constructor(\n private _api: InternalApi,\n private _args: ProvideContextsTaskArgs,\n private _sendPayloadInChunksTaskFactory = (\n api: InternalApi,\n args: SendPayloadInChunksTaskArgs<unknown>,\n ) => new SendPayloadInChunksTask(api, args),\n private _sendCommandInChunksTaskFactory = (\n api: InternalApi,\n args: SendCommandInChunksTaskArgs<unknown>,\n ) => new SendCommandInChunksTask(api, args),\n ) {}\n\n async run(): Promise<ProvideContextsTaskResult> {\n let transactionInfoProvided = false;\n\n for (const { context, subcontextCallbacks } of this._args.contexts) {\n for (const callback of subcontextCallbacks) {\n const subcontext = await callback();\n\n if (subcontext.type === ClearSignContextType.ERROR) {\n // silently ignore error subcontexts\n continue;\n }\n\n const res = await this.provideContext(subcontext);\n if (!isSuccessCommandResult(res)) {\n return Left(res);\n }\n }\n\n if (context.type === ClearSignContextType.PROXY_INFO) {\n // In this specific case, the context is not valid as the challenge is not valid on the first call\n // the real data is provided in the subcontext callback\n continue;\n }\n\n if (\n !transactionInfoProvided &&\n this._args.serializedTransaction !== undefined &&\n context.type === ClearSignContextType.TRANSACTION_INFO\n ) {\n // Send the serialized transaction for the first TRANSACTION_INFO.\n // All other TRANSACTION_INFO contexts will be ignored as it will be for nested calldata.\n transactionInfoProvided = true;\n\n const paths = DerivationPathUtils.splitPath(this._args.derivationPath);\n const builder = new ByteArrayBuilder();\n builder.add8BitUIntToData(paths.length);\n paths.forEach((path) => {\n builder.add32BitUIntToData(path);\n });\n builder.addBufferToData(this._args.serializedTransaction);\n await this._sendCommandInChunksTaskFactory(this._api, {\n data: builder.build(),\n commandFactory: (args) =>\n new StoreTransactionCommand({\n serializedTransaction: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n }\n\n const res = await this.provideContext(context);\n if (!isSuccessCommandResult(res)) {\n return Left(res);\n }\n }\n\n return Right(void 0);\n }\n\n /**\n * This method will send the context to the device.\n *\n * @param context The clear sign context to provide.\n * @returns A promise that resolves when the command is sent.\n */\n async provideContext({\n type,\n payload,\n certificate,\n }: ClearSignContextSuccess): Promise<CommandResult<unknown, EthErrorCodes>> {\n // if a certificate is provided, we load it before sending the command\n if (certificate) {\n await this._api.sendCommand(\n new LoadCertificateCommand({\n keyUsage: certificate.keyUsageNumber,\n certificate: certificate.payload,\n }),\n );\n }\n\n switch (type) {\n case ClearSignContextType.PLUGIN: {\n return await this._api.sendCommand(new SetPluginCommand({ payload }));\n }\n case ClearSignContextType.EXTERNAL_PLUGIN: {\n return await this._api.sendCommand(\n new SetExternalPluginCommand({ payload }),\n );\n }\n case ClearSignContextType.NFT: {\n return await this._api.sendCommand(\n new ProvideNFTInformationCommand({ payload }),\n );\n }\n case ClearSignContextType.TOKEN: {\n return await this._api.sendCommand(\n new ProvideTokenInformationCommand({ payload }),\n );\n }\n case ClearSignContextType.TRANSACTION_INFO: {\n const transactionInfoResult =\n await this._sendPayloadInChunksTaskFactory(this._api, {\n payload,\n commandFactory: (args) =>\n new ProvideTransactionInformationCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n\n return transactionInfoResult;\n }\n case ClearSignContextType.TRUSTED_NAME: {\n return this._sendPayloadInChunksTaskFactory(this._api, {\n payload,\n commandFactory: (args) =>\n new ProvideTrustedNameCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n }\n case ClearSignContextType.ENUM:\n return this._sendPayloadInChunksTaskFactory(this._api, {\n payload,\n commandFactory: (args) =>\n new ProvideEnumCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n case ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION:\n return this._sendPayloadInChunksTaskFactory(this._api, {\n payload,\n commandFactory: (args) =>\n new ProvideTransactionFieldDescriptionCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n case ClearSignContextType.WEB3_CHECK:\n return this._sendPayloadInChunksTaskFactory(this._api, {\n payload,\n commandFactory: (args) =>\n new ProvideWeb3CheckCommand({\n payload: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n case ClearSignContextType.PROXY_INFO:\n return this._sendPayloadInChunksTaskFactory(this._api, {\n payload,\n commandFactory: (args) =>\n new ProvideProxyInfoCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n }),\n }).run();\n case ClearSignContextType.DYNAMIC_NETWORK:\n // Dynamic network configuration uses the existing ProvideNetworkConfiguration command\n // but is provided as part of the context flow\n return this._sendPayloadInChunksTaskFactory(this._api, {\n payload,\n commandFactory: (args) =>\n new ProvideNetworkConfigurationCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n configurationType: NetworkConfigurationType.CONFIGURATION,\n }),\n }).run();\n case ClearSignContextType.DYNAMIC_NETWORK_ICON: {\n return this._sendPayloadInChunksTaskFactory(this._api, {\n payload,\n commandFactory: (args) =>\n new ProvideNetworkConfigurationCommand({\n data: args.chunkedData,\n isFirstChunk: args.isFirstChunk,\n configurationType: NetworkConfigurationType.ICON,\n }),\n withPayloadLength: false,\n }).run();\n }\n default: {\n const uncoveredType: never = type;\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n `The context type [${uncoveredType}] is not covered`,\n ),\n });\n }\n }\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["ProvideContextsTask_exports", "__export", "ProvideContextsTask", "__toCommonJS", "import_context_module", "import_device_management_kit", "import_signer_utils", "import_purify_ts", "import_ProvideEnumCommand", "import_ProvideNetworkConfigurationCommand", "import_ProvideNFTInformationCommand", "import_ProvideProxyInfoCommand", "import_ProvideTokenInformationCommand", "import_ProvideTransactionFieldDescriptionCommand", "import_ProvideTransactionInformationCommand", "import_ProvideTrustedNameCommand", "import_ProvideWeb3CheckCommand", "import_SetExternalPluginCommand", "import_SetPluginCommand", "import_StoreTransactionCommand", "import_SendCommandInChunksTask", "import_SendPayloadInChunksTask", "_api", "_args", "_sendPayloadInChunksTaskFactory", "api", "args", "_sendCommandInChunksTaskFactory", "transactionInfoProvided", "context", "subcontextCallbacks", "callback", "subcontext", "res", "paths", "builder", "path", "type", "payload", "certificate", "uncoveredType"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var a=require("@ledgerhq/context-module"),x=require("@ledgerhq/device-management-kit"),m=require("purify-ts"),E=require("../../app-binder/command/ProvideEnumCommand"),F=require("../../app-binder/command/ProvideNetworkConfigurationCommand"),f=require("../../app-binder/command/ProvideNFTInformationCommand"),b=require("../../app-binder/command/ProvideProxyInfoCommand"),h=require("../../app-binder/command/ProvideTokenInformationCommand"),A=require("../../app-binder/command/ProvideTransactionFieldDescriptionCommand"),P=require("../../app-binder/command/ProvideTransactionInformationCommand"),N=require("../../app-binder/command/ProvideTrustedNameCommand"),B=require("../../app-binder/command/ProvideWeb3CheckCommand"),R=require("../../app-binder/command/SetExternalPluginCommand"),g=require("../../app-binder/command/SetPluginCommand"),w=require("../../app-binder/command/StoreTransactionCommand"),O=require("../../app-binder/device-action/__test-utils__/makeInternalApi"),i=require("./ProvideContextsTask"),U=require("./SendCommandInChunksTask"),H=require("./SendPayloadInChunksTask");describe("ProvideContextsTask",()=>{const e=(0,O.makeDeviceActionInternalApiMock)(),c=(0,x.CommandResultFactory)({data:void 0}),T=(0,x.CommandResultFactory)({data:void 0,error:{}});beforeEach(()=>{vi.resetAllMocks()}),describe("run",()=>{const o=vi.fn(),u=vi.fn(),r=vi.fn(),d=vi.fn();beforeEach(()=>{vi.clearAllMocks(),r.mockImplementation((t,s)=>({run:()=>u(t,s)})),d.mockImplementation((t,s)=>({run:()=>o(t,s)}))}),describe("with no subcontexts",()=>{it("should provide the transaction context for a TRANSACTION_INFO context",async()=>{const t={contexts:[{context:{type:a.ClearSignContextType.TRANSACTION_INFO,payload:"0x00",certificate:{keyUsageNumber:1,payload:new Uint8Array([1,2,3])}},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};u.mockResolvedValue(c),o.mockResolvedValue(c),e.sendCommand.mockResolvedValue(c);const n=await new i.ProvideContextsTask(e,t,d,r).run();expect(n).toEqual((0,m.Right)(void 0)),expect(u).toHaveBeenCalledTimes(1),expect(r).toHaveBeenCalledWith(e,{data:new Uint8Array([5,128,0,0,44,128,0,0,60,128,0,0,0,0,0,0,0,0,0,0,0]),commandFactory:expect.any(Function)});const y=r.mock.calls[0][1].commandFactory,l={chunkedData:new Uint8Array([1,2,3,4]),isFirstChunk:!0},p=y(l);expect(p).toBeInstanceOf(w.StoreTransactionCommand),expect(e.sendCommand).toHaveBeenCalledTimes(1),expect(e.sendCommand).toHaveBeenCalledWith(expect.any(x.LoadCertificateCommand)),expect(o).toHaveBeenCalledTimes(1),expect(o).toHaveBeenCalledWith(e,{payload:"0x00",commandFactory:expect.any(Function)});const k=o.mock.calls[0][1].commandFactory,v=k(l);expect(v).toBeInstanceOf(P.ProvideTransactionInformationCommand)}),it("should provide the transaction context for a TRANSACTION_INFO context without certificate",async()=>{const t={contexts:[{context:{type:a.ClearSignContextType.TRANSACTION_INFO,payload:"0x00"},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};u.mockResolvedValue(c),o.mockResolvedValue(c),e.sendCommand.mockResolvedValue(c);const n=await new i.ProvideContextsTask(e,t,d,r).run();expect(n).toEqual((0,m.Right)(void 0)),expect(u).toHaveBeenCalledTimes(1),expect(r).toHaveBeenCalledWith(e,{data:new Uint8Array([5,128,0,0,44,128,0,0,60,128,0,0,0,0,0,0,0,0,0,0,0]),commandFactory:expect.any(Function)});const y=r.mock.calls[0][1].commandFactory,l={chunkedData:new Uint8Array([1,2,3,4]),isFirstChunk:!0},p=y(l);expect(p).toBeInstanceOf(w.StoreTransactionCommand),expect(e.sendCommand).toHaveBeenCalledTimes(0),expect(o).toHaveBeenCalledTimes(1),expect(o).toHaveBeenCalledWith(e,{payload:"0x00",commandFactory:expect.any(Function)});const k=o.mock.calls[0][1].commandFactory,v=k(l);expect(v).toBeInstanceOf(P.ProvideTransactionInformationCommand)}),it.each([[a.ClearSignContextType.PLUGIN,g.SetPluginCommand],[a.ClearSignContextType.EXTERNAL_PLUGIN,R.SetExternalPluginCommand],[a.ClearSignContextType.NFT,f.ProvideNFTInformationCommand],[a.ClearSignContextType.TOKEN,h.ProvideTokenInformationCommand]])("should provide the transaction context by calling sendCommand for a %s context",async(t,s)=>{const n={contexts:[{context:{type:t,payload:"payload"},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};e.sendCommand.mockResolvedValue(c);const y=await new i.ProvideContextsTask(e,n,d,r).run();expect(y).toEqual((0,m.Right)(void 0)),expect(e.sendCommand).toHaveBeenCalledTimes(1),expect(e.sendCommand).toHaveBeenCalledWith(expect.any(s))}),it.each([[a.ClearSignContextType.ENUM,E.ProvideEnumCommand],[a.ClearSignContextType.TRUSTED_NAME,N.ProvideTrustedNameCommand],[a.ClearSignContextType.WEB3_CHECK,B.ProvideWeb3CheckCommand],[a.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,A.ProvideTransactionFieldDescriptionCommand],[a.ClearSignContextType.DYNAMIC_NETWORK_ICON,F.ProvideNetworkConfigurationCommand,!1],[a.ClearSignContextType.DYNAMIC_NETWORK,F.ProvideNetworkConfigurationCommand]])("should provide the transaction context by calling sendPayloadInChunksTask for a %s context",async(t,s,n=void 0)=>{const C={contexts:[{context:{type:t,payload:"payload",id:1,value:1},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};o.mockResolvedValue(c);const l=await new i.ProvideContextsTask(e,C,d,r).run();expect(l).toEqual((0,m.Right)(void 0)),expect(o).toHaveBeenCalledTimes(1),n===void 0?expect(o).toHaveBeenCalledWith(e,{payload:"payload",commandFactory:expect.any(Function)}):expect(o).toHaveBeenCalledWith(e,{payload:"payload",commandFactory:expect.any(Function),withPayloadLength:n});const I=d.mock.calls[0][1].commandFactory,k={chunkedData:new Uint8Array([1,2,3]),isFirstChunk:!0},v=I(k);expect(v).toBeInstanceOf(s)}),it("should only provide the subcontexts if the context is a PROXY_INFO",async()=>{const t={contexts:[{context:{type:a.ClearSignContextType.PROXY_INFO,payload:"payload"},subcontextCallbacks:[()=>Promise.resolve({type:a.ClearSignContextType.PROXY_INFO,payload:"subcontext payload"})]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};o.mockResolvedValue(c);const n=await new i.ProvideContextsTask(e,t,d,r).run();expect(n).toEqual((0,m.Right)(void 0)),expect(o).toHaveBeenCalledTimes(1),expect(o).toHaveBeenCalledWith(e,{payload:"subcontext payload",commandFactory:expect.any(Function)});const y=d.mock.calls[0][1].commandFactory,l={chunkedData:new Uint8Array([1,2,3]),isFirstChunk:!0},p=y(l);expect(p).toBeInstanceOf(b.ProvideProxyInfoCommand)}),it("should skip the subcontexts if the context is an error",async()=>{const t={contexts:[{context:{type:a.ClearSignContextType.TOKEN,payload:"payload",certificate:{keyUsageNumber:1,payload:new Uint8Array([1,2,3])}},subcontextCallbacks:[()=>Promise.resolve({type:a.ClearSignContextType.ERROR,error:new Error("error")})]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};o.mockResolvedValue(c),e.sendCommand.mockResolvedValue(c);const n=await new i.ProvideContextsTask(e,t,d,r).run();expect(n).toEqual((0,m.Right)(void 0)),expect(o).toHaveBeenCalledTimes(0),expect(u).toHaveBeenCalledTimes(0),expect(e.sendCommand).toHaveBeenCalledTimes(2),expect(e.sendCommand).toHaveBeenNthCalledWith(1,expect.any(x.LoadCertificateCommand)),expect(e.sendCommand).toHaveBeenNthCalledWith(2,expect.any(h.ProvideTokenInformationCommand))})}),describe("with subcontexts",()=>{it("should provide the transaction context and subcontext for a TRANSACTION_FIELD_DESCRIPTION context",async()=>{const t={contexts:[{context:{type:a.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:"payload"},subcontextCallbacks:[()=>Promise.resolve({type:a.ClearSignContextType.TOKEN,payload:"payload"})]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};o.mockResolvedValue(c),e.sendCommand.mockResolvedValue(c);const n=await new i.ProvideContextsTask(e,t,d,r).run();expect(n).toEqual((0,m.Right)(void 0)),expect(o).toHaveBeenCalledTimes(1),expect(o).toHaveBeenCalledWith(e,{payload:"payload",commandFactory:expect.any(Function)});const y=d.mock.calls[0][1].commandFactory,l={chunkedData:new Uint8Array([1,2,3]),isFirstChunk:!0},p=y(l);expect(p).toBeInstanceOf(A.ProvideTransactionFieldDescriptionCommand),expect(e.sendCommand).toHaveBeenCalledTimes(1),expect(e.sendCommand).toHaveBeenCalledWith(expect.any(h.ProvideTokenInformationCommand))}),it("should provide the transaction context and subcontexts for a TRUSTED_NAME context",async()=>{const t={contexts:[{context:{type:a.ClearSignContextType.TRUSTED_NAME,payload:"payload"},subcontextCallbacks:[()=>Promise.resolve({type:a.ClearSignContextType.NFT,payload:"payload1"}),()=>Promise.resolve({type:a.ClearSignContextType.TOKEN,payload:"payload2"})]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};o.mockResolvedValue(c),e.sendCommand.mockResolvedValue(c);const n=await new i.ProvideContextsTask(e,t,d,r).run();expect(n).toEqual((0,m.Right)(void 0)),expect(o).toHaveBeenCalledTimes(1),expect(o).toHaveBeenCalledWith(e,{payload:"payload",commandFactory:expect.any(Function)});const y=d.mock.calls[0][1].commandFactory,l={chunkedData:new Uint8Array([1,2,3]),isFirstChunk:!0},p=y(l);expect(p).toBeInstanceOf(N.ProvideTrustedNameCommand),expect(e.sendCommand).toHaveBeenCalledTimes(2),expect(e.sendCommand).toHaveBeenNthCalledWith(1,expect.any(f.ProvideNFTInformationCommand)),expect(e.sendCommand).toHaveBeenNthCalledWith(2,expect.any(h.ProvideTokenInformationCommand))})}),describe("with subcontexts and certificate",()=>{it("should provide the transaction context and subcontexts for a TRUSTED_NAME context",async()=>{const t={contexts:[{context:{type:a.ClearSignContextType.TRUSTED_NAME,payload:"payload",certificate:{keyUsageNumber:1,payload:new Uint8Array([1,2,3])}},subcontextCallbacks:[()=>Promise.resolve({type:a.ClearSignContextType.NFT,payload:"payload1",certificate:{keyUsageNumber:2,payload:new Uint8Array([4,5,6])}})]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};o.mockResolvedValue(c),e.sendCommand.mockResolvedValue(c),await new i.ProvideContextsTask(e,t,d,r).run(),expect(e.sendCommand).toHaveBeenCalledTimes(3),expect(e.sendCommand).toHaveBeenNthCalledWith(1,expect.any(x.LoadCertificateCommand)),expect(e.sendCommand).toHaveBeenNthCalledWith(2,expect.any(f.ProvideNFTInformationCommand)),expect(e.sendCommand).toHaveBeenNthCalledWith(3,expect.any(x.LoadCertificateCommand))})}),describe("with error",()=>{it("should return an error if the provideContext fails",async()=>{const t={contexts:[{context:{type:a.ClearSignContextType.TOKEN,payload:"payload"},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};e.sendCommand.mockResolvedValue(T);const n=await new i.ProvideContextsTask(e,t,d,r).run();expect(n).toEqual((0,m.Left)(T))}),it("should return an error if the provide subcontext fails",async()=>{const t={contexts:[{context:{type:a.ClearSignContextType.TOKEN,payload:"payload"},subcontextCallbacks:[()=>Promise.resolve({type:a.ClearSignContextType.TOKEN,payload:"payload"})]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"};e.sendCommand.mockResolvedValue(T);const n=await new i.ProvideContextsTask(e,t,d,r).run();expect(n).toEqual((0,m.Left)(T))}),it("should return an error if the type is not supported",async()=>{const t={contexts:[{context:{type:"unsupported",payload:"payload"},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"},n=await new i.ProvideContextsTask(e,t,d,r).run();expect(n).toEqual((0,m.Left)((0,x.CommandResultFactory)({error:new x.InvalidStatusWordError("The context type [unsupported] is not covered")})))})}),describe("factory types",()=>{it("should have a sendPayloadInChunksTaskFactory by default",()=>{const t=new i.ProvideContextsTask(e,{contexts:[{context:{type:a.ClearSignContextType.TOKEN,payload:"payload"},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"});expect(t._sendPayloadInChunksTaskFactory).toBeDefined();const s=t._sendPayloadInChunksTaskFactory(e,{payload:"payload",commandFactory:()=>new A.ProvideTransactionFieldDescriptionCommand({data:new Uint8Array,isFirstChunk:!0})});expect(s).toBeInstanceOf(H.SendPayloadInChunksTask)}),it("should have a sendCommandInChunksTaskFactory by default",()=>{const t=new i.ProvideContextsTask(e,{contexts:[{context:{type:a.ClearSignContextType.TOKEN,payload:"payload"},subcontextCallbacks:[]}],serializedTransaction:new Uint8Array,derivationPath:"44'/60'/0'/0/0"});expect(t._sendCommandInChunksTaskFactory).toBeDefined();const s=t._sendCommandInChunksTaskFactory(e,{data:new Uint8Array,commandFactory:()=>new w.StoreTransactionCommand({serializedTransaction:new Uint8Array,isFirstChunk:!0})});expect(s).toBeInstanceOf(U.SendCommandInChunksTask)})})})});
2
+ //# sourceMappingURL=ProvideContextsTask.test.js.map