@ledgerhq/context-module 1.6.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (533) hide show
  1. package/lib/cjs/package.json +2 -2
  2. package/lib/cjs/src/ContextModule.js +1 -1
  3. package/lib/cjs/src/ContextModule.js.map +1 -1
  4. package/lib/cjs/src/ContextModuleBuilder.js +1 -1
  5. package/lib/cjs/src/ContextModuleBuilder.js.map +3 -3
  6. package/lib/cjs/src/ContextModuleBuilder.test.js +1 -1
  7. package/lib/cjs/src/ContextModuleBuilder.test.js.map +3 -3
  8. package/lib/cjs/src/DefaultContextModule.js +1 -1
  9. package/lib/cjs/src/DefaultContextModule.js.map +3 -3
  10. package/lib/cjs/src/DefaultContextModule.test.js +1 -1
  11. package/lib/cjs/src/DefaultContextModule.test.js.map +3 -3
  12. package/lib/cjs/src/calldata/data/CalldataDescriptorDataSource.js +2 -0
  13. package/lib/cjs/src/calldata/data/CalldataDescriptorDataSource.js.map +7 -0
  14. package/lib/cjs/src/calldata/data/HttpCalldataDescriptorDataSource.js +2 -0
  15. package/lib/cjs/src/calldata/data/HttpCalldataDescriptorDataSource.js.map +7 -0
  16. package/lib/cjs/src/calldata/data/HttpCalldataDescriptorDataSource.test.js +2 -0
  17. package/lib/cjs/src/calldata/data/HttpCalldataDescriptorDataSource.test.js.map +7 -0
  18. package/lib/cjs/src/calldata/data/dto/CalldataDto.js +2 -0
  19. package/lib/cjs/src/calldata/data/dto/CalldataDto.js.map +7 -0
  20. package/lib/cjs/src/calldata/di/calldataModuleFactory.js +2 -0
  21. package/lib/cjs/src/calldata/di/calldataModuleFactory.js.map +7 -0
  22. package/lib/cjs/src/calldata/di/calldataTypes.js +2 -0
  23. package/lib/cjs/src/calldata/di/calldataTypes.js.map +7 -0
  24. package/lib/cjs/src/calldata/domain/CalldataContextLoader.js +2 -0
  25. package/lib/cjs/src/calldata/domain/CalldataContextLoader.js.map +7 -0
  26. package/lib/cjs/src/calldata/domain/CalldataContextLoader.test.js +2 -0
  27. package/lib/cjs/src/calldata/domain/CalldataContextLoader.test.js.map +7 -0
  28. package/lib/cjs/src/config/model/ContextModuleConfig.js +1 -1
  29. package/lib/cjs/src/config/model/ContextModuleConfig.js.map +1 -1
  30. package/lib/cjs/src/di.js +1 -1
  31. package/lib/cjs/src/di.js.map +3 -3
  32. package/lib/cjs/src/dynamic-network/data/DynamicNetworkDataSource.js +2 -0
  33. package/lib/cjs/src/dynamic-network/data/DynamicNetworkDataSource.js.map +7 -0
  34. package/lib/cjs/src/dynamic-network/data/HttpDynamicNetworkDataSource.js +2 -0
  35. package/lib/cjs/src/dynamic-network/data/HttpDynamicNetworkDataSource.js.map +7 -0
  36. package/lib/cjs/src/dynamic-network/data/HttpDynamicNetworkDataSource.test.js +2 -0
  37. package/lib/cjs/src/dynamic-network/data/HttpDynamicNetworkDataSource.test.js.map +7 -0
  38. package/lib/cjs/src/dynamic-network/data/dto/DynamicNetworkApiResponseDto.js +2 -0
  39. package/lib/cjs/src/dynamic-network/data/dto/DynamicNetworkApiResponseDto.js.map +7 -0
  40. package/lib/cjs/src/dynamic-network/di/dynamicNetworkModuleFactory.js +2 -0
  41. package/lib/cjs/src/dynamic-network/di/dynamicNetworkModuleFactory.js.map +7 -0
  42. package/lib/cjs/src/dynamic-network/di/dynamicNetworkTypes.js +2 -0
  43. package/lib/cjs/src/dynamic-network/di/dynamicNetworkTypes.js.map +7 -0
  44. package/lib/cjs/src/dynamic-network/domain/DynamicNetworkContextLoader.js +2 -0
  45. package/lib/cjs/src/dynamic-network/domain/DynamicNetworkContextLoader.js.map +7 -0
  46. package/lib/cjs/src/dynamic-network/domain/DynamicNetworkContextLoader.test.js +2 -0
  47. package/lib/cjs/src/dynamic-network/domain/DynamicNetworkContextLoader.test.js.map +7 -0
  48. package/lib/cjs/src/dynamic-network/model/DynamicNetworkConfiguration.js +2 -0
  49. package/lib/cjs/src/dynamic-network/model/DynamicNetworkConfiguration.js.map +7 -0
  50. package/lib/cjs/src/external-plugin/domain/ExternalPluginContextLoader.js +1 -1
  51. package/lib/cjs/src/external-plugin/domain/ExternalPluginContextLoader.js.map +3 -3
  52. package/lib/cjs/src/external-plugin/domain/ExternalPluginContextLoader.test.js +1 -1
  53. package/lib/cjs/src/external-plugin/domain/ExternalPluginContextLoader.test.js.map +3 -3
  54. package/lib/cjs/src/index.js +1 -1
  55. package/lib/cjs/src/index.js.map +2 -2
  56. package/lib/cjs/src/nft/data/HttpNftDataSource.js +1 -1
  57. package/lib/cjs/src/nft/data/HttpNftDataSource.js.map +2 -2
  58. package/lib/cjs/src/nft/data/HttpNftDataSource.test.js +1 -1
  59. package/lib/cjs/src/nft/data/HttpNftDataSource.test.js.map +2 -2
  60. package/lib/cjs/src/nft/di/nftModuleFactory.js +1 -1
  61. package/lib/cjs/src/nft/di/nftModuleFactory.js.map +3 -3
  62. package/lib/cjs/src/nft/di/nftTypes.js +1 -1
  63. package/lib/cjs/src/nft/di/nftTypes.js.map +2 -2
  64. package/lib/cjs/src/nft/domain/NftContextFieldLoader.js +2 -0
  65. package/lib/cjs/src/nft/domain/NftContextFieldLoader.js.map +7 -0
  66. package/lib/cjs/src/nft/domain/NftContextFieldLoader.test.js +2 -0
  67. package/lib/cjs/src/nft/domain/NftContextFieldLoader.test.js.map +7 -0
  68. package/lib/cjs/src/nft/domain/NftContextLoader.js +1 -1
  69. package/lib/cjs/src/nft/domain/NftContextLoader.js.map +3 -3
  70. package/lib/cjs/src/nft/domain/NftContextLoader.test.js +1 -1
  71. package/lib/cjs/src/nft/domain/NftContextLoader.test.js.map +3 -3
  72. package/lib/cjs/src/pki/domain/DefaultPkiCertificateLoader.js +1 -1
  73. package/lib/cjs/src/pki/domain/DefaultPkiCertificateLoader.js.map +3 -3
  74. package/lib/cjs/src/pki/domain/DefaultPkiCertificateLoader.test.js +1 -1
  75. package/lib/cjs/src/pki/domain/DefaultPkiCertificateLoader.test.js.map +3 -3
  76. package/lib/cjs/src/pki/model/PkiCertificateInfo.js +1 -1
  77. package/lib/cjs/src/pki/model/PkiCertificateInfo.js.map +1 -1
  78. package/lib/cjs/src/proxy/data/HttpProxyDataSource.js +2 -0
  79. package/lib/cjs/src/proxy/data/HttpProxyDataSource.js.map +7 -0
  80. package/lib/cjs/src/proxy/data/HttpProxyDataSource.test.js +2 -0
  81. package/lib/cjs/src/proxy/data/HttpProxyDataSource.test.js.map +7 -0
  82. package/lib/cjs/src/proxy/data/HttpSafeProxyDataSource.js +2 -0
  83. package/lib/cjs/src/proxy/data/HttpSafeProxyDataSource.js.map +7 -0
  84. package/lib/cjs/src/proxy/data/HttpSafeProxyDataSource.test.js +2 -0
  85. package/lib/cjs/src/proxy/data/HttpSafeProxyDataSource.test.js.map +7 -0
  86. package/lib/cjs/src/proxy/data/ProxyDataSource.js +2 -0
  87. package/lib/cjs/src/proxy/data/ProxyDataSource.js.map +7 -0
  88. package/lib/cjs/src/proxy/data/dto/ProxyDelegateCallDto.js +2 -0
  89. package/lib/cjs/src/proxy/data/dto/ProxyDelegateCallDto.js.map +7 -0
  90. package/lib/cjs/src/{transaction → proxy}/data/dto/ProxyImplementationAddressDto.js.map +1 -1
  91. package/lib/cjs/src/proxy/data/dto/SafeProxyImplementationAddressDto.js +2 -0
  92. package/lib/cjs/src/proxy/data/dto/SafeProxyImplementationAddressDto.js.map +7 -0
  93. package/lib/cjs/src/proxy/di/proxyModuleFactory.js +2 -0
  94. package/lib/cjs/src/proxy/di/proxyModuleFactory.js.map +7 -0
  95. package/lib/cjs/src/proxy/di/proxyModuleFactory.test.js +2 -0
  96. package/lib/cjs/src/proxy/di/proxyModuleFactory.test.js.map +7 -0
  97. package/lib/cjs/src/proxy/di/proxyTypes.js +2 -0
  98. package/lib/cjs/src/proxy/di/proxyTypes.js.map +7 -0
  99. package/lib/cjs/src/proxy/domain/ProxyContextFieldLoader.js +2 -0
  100. package/lib/cjs/src/proxy/domain/ProxyContextFieldLoader.js.map +7 -0
  101. package/lib/cjs/src/proxy/domain/ProxyContextFieldLoader.test.js +2 -0
  102. package/lib/cjs/src/proxy/domain/ProxyContextFieldLoader.test.js.map +7 -0
  103. package/lib/cjs/src/proxy/model/ProxyDelegateCall.js +2 -0
  104. package/lib/cjs/src/proxy/model/ProxyDelegateCall.js.map +7 -0
  105. package/lib/cjs/src/shared/domain/ContextFieldLoader.js +2 -0
  106. package/lib/cjs/src/shared/domain/ContextFieldLoader.js.map +7 -0
  107. package/lib/cjs/src/shared/domain/ContextLoader.js +1 -1
  108. package/lib/cjs/src/shared/domain/ContextLoader.js.map +1 -1
  109. package/lib/cjs/src/shared/model/ClearSignContext.js +1 -1
  110. package/lib/cjs/src/shared/model/ClearSignContext.js.map +3 -3
  111. package/lib/cjs/src/shared/model/TransactionSubset.js +1 -1
  112. package/lib/cjs/src/shared/model/TransactionSubset.js.map +1 -1
  113. package/lib/cjs/src/shared/model/TypedDataClearSignContext.js +1 -1
  114. package/lib/cjs/src/shared/model/TypedDataClearSignContext.js.map +3 -3
  115. package/lib/cjs/src/shared/model/TypedDataContext.js +1 -1
  116. package/lib/cjs/src/shared/model/TypedDataContext.js.map +1 -1
  117. package/lib/cjs/src/shared/utils/KeyUsageMapper.js +1 -1
  118. package/lib/cjs/src/shared/utils/KeyUsageMapper.js.map +2 -2
  119. package/lib/cjs/src/solana/data/HttpSolanaOwnerInfoDataSource.js +1 -1
  120. package/lib/cjs/src/solana/data/HttpSolanaOwnerInfoDataSource.js.map +2 -2
  121. package/lib/cjs/src/solana/data/HttpSolanaOwnerInfoDataSource.test.js +1 -1
  122. package/lib/cjs/src/solana/data/HttpSolanaOwnerInfoDataSource.test.js.map +2 -2
  123. package/lib/cjs/src/token/di/tokenModuleFactory.js +1 -1
  124. package/lib/cjs/src/token/di/tokenModuleFactory.js.map +3 -3
  125. package/lib/cjs/src/token/di/tokenTypes.js +1 -1
  126. package/lib/cjs/src/token/di/tokenTypes.js.map +2 -2
  127. package/lib/cjs/src/token/domain/TokenContextFieldLoader.js +2 -0
  128. package/lib/cjs/src/token/domain/TokenContextFieldLoader.js.map +7 -0
  129. package/lib/cjs/src/token/domain/TokenContextFieldLoader.test.js +2 -0
  130. package/lib/cjs/src/token/domain/TokenContextFieldLoader.test.js.map +7 -0
  131. package/lib/cjs/src/token/domain/TokenContextLoader.js +1 -1
  132. package/lib/cjs/src/token/domain/TokenContextLoader.js.map +3 -3
  133. package/lib/cjs/src/token/domain/TokenContextLoader.test.js +1 -1
  134. package/lib/cjs/src/token/domain/TokenContextLoader.test.js.map +3 -3
  135. package/lib/cjs/src/trusted-name/data/HttpTrustedNameDataSource.js +1 -1
  136. package/lib/cjs/src/trusted-name/data/HttpTrustedNameDataSource.js.map +3 -3
  137. package/lib/cjs/src/trusted-name/data/HttpTrustedNameDataSource.test.js +1 -1
  138. package/lib/cjs/src/trusted-name/data/HttpTrustedNameDataSource.test.js.map +2 -2
  139. package/lib/cjs/src/trusted-name/data/TrustedNameDataSource.js +1 -1
  140. package/lib/cjs/src/trusted-name/data/TrustedNameDataSource.js.map +1 -1
  141. package/lib/cjs/src/trusted-name/data/TrustedNameDto.js +1 -1
  142. package/lib/cjs/src/trusted-name/data/TrustedNameDto.js.map +1 -1
  143. package/lib/cjs/src/trusted-name/di/trustedNameModuleFactory.js +1 -1
  144. package/lib/cjs/src/trusted-name/di/trustedNameModuleFactory.js.map +3 -3
  145. package/lib/cjs/src/trusted-name/di/trustedNameTypes.js +1 -1
  146. package/lib/cjs/src/trusted-name/di/trustedNameTypes.js.map +2 -2
  147. package/lib/cjs/src/trusted-name/domain/TrustedNameContextFieldLoader.js +2 -0
  148. package/lib/cjs/src/trusted-name/domain/TrustedNameContextFieldLoader.js.map +7 -0
  149. package/lib/cjs/src/trusted-name/domain/TrustedNameContextFieldLoader.test.js +2 -0
  150. package/lib/cjs/src/trusted-name/domain/TrustedNameContextFieldLoader.test.js.map +7 -0
  151. package/lib/cjs/src/trusted-name/domain/TrustedNameContextLoader.js +1 -1
  152. package/lib/cjs/src/trusted-name/domain/TrustedNameContextLoader.js.map +3 -3
  153. package/lib/cjs/src/trusted-name/domain/TrustedNameContextLoader.test.js +1 -1
  154. package/lib/cjs/src/trusted-name/domain/TrustedNameContextLoader.test.js.map +3 -3
  155. package/lib/cjs/src/typed-data/data/FiltersDto.js +1 -1
  156. package/lib/cjs/src/typed-data/data/FiltersDto.js.map +1 -1
  157. package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.js +1 -1
  158. package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.js.map +3 -3
  159. package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.test.js +1 -1
  160. package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.test.js.map +3 -3
  161. package/lib/cjs/src/typed-data/data/TypedDataDataSource.js +1 -1
  162. package/lib/cjs/src/typed-data/data/TypedDataDataSource.js.map +1 -1
  163. package/lib/cjs/src/typed-data/domain/DefaultTypedDataContextLoader.js +1 -1
  164. package/lib/cjs/src/typed-data/domain/DefaultTypedDataContextLoader.js.map +3 -3
  165. package/lib/cjs/src/typed-data/domain/DefaultTypedDataContextLoader.test.js +1 -1
  166. package/lib/cjs/src/typed-data/domain/DefaultTypedDataContextLoader.test.js.map +3 -3
  167. package/lib/cjs/src/uniswap/domain/UniswapContextLoader.js +1 -1
  168. package/lib/cjs/src/uniswap/domain/UniswapContextLoader.js.map +3 -3
  169. package/lib/cjs/src/uniswap/domain/UniswapContextLoader.test.js +1 -1
  170. package/lib/cjs/src/uniswap/domain/UniswapContextLoader.test.js.map +3 -3
  171. package/lib/esm/package.json +2 -2
  172. package/lib/esm/src/ContextModuleBuilder.js +1 -1
  173. package/lib/esm/src/ContextModuleBuilder.js.map +3 -3
  174. package/lib/esm/src/ContextModuleBuilder.test.js +1 -1
  175. package/lib/esm/src/ContextModuleBuilder.test.js.map +3 -3
  176. package/lib/esm/src/DefaultContextModule.js +1 -1
  177. package/lib/esm/src/DefaultContextModule.js.map +3 -3
  178. package/lib/esm/src/DefaultContextModule.test.js +1 -1
  179. package/lib/esm/src/DefaultContextModule.test.js.map +3 -3
  180. package/lib/esm/src/calldata/data/CalldataDescriptorDataSource.js +1 -0
  181. package/lib/esm/src/calldata/data/HttpCalldataDescriptorDataSource.js +2 -0
  182. package/lib/esm/src/calldata/data/HttpCalldataDescriptorDataSource.js.map +7 -0
  183. package/lib/esm/src/calldata/data/HttpCalldataDescriptorDataSource.test.js +2 -0
  184. package/lib/esm/src/calldata/data/HttpCalldataDescriptorDataSource.test.js.map +7 -0
  185. package/lib/esm/src/calldata/di/calldataModuleFactory.js +2 -0
  186. package/lib/esm/src/calldata/di/calldataModuleFactory.js.map +7 -0
  187. package/lib/esm/src/calldata/di/calldataTypes.js +2 -0
  188. package/lib/esm/src/calldata/di/calldataTypes.js.map +7 -0
  189. package/lib/esm/src/calldata/domain/CalldataContextLoader.js +2 -0
  190. package/lib/esm/src/calldata/domain/CalldataContextLoader.js.map +7 -0
  191. package/lib/esm/src/calldata/domain/CalldataContextLoader.test.js +2 -0
  192. package/lib/esm/src/calldata/domain/CalldataContextLoader.test.js.map +7 -0
  193. package/lib/esm/src/di.js +1 -1
  194. package/lib/esm/src/di.js.map +3 -3
  195. package/lib/esm/src/dynamic-network/data/DynamicNetworkDataSource.js +1 -0
  196. package/lib/esm/src/dynamic-network/data/HttpDynamicNetworkDataSource.js +2 -0
  197. package/lib/esm/src/dynamic-network/data/HttpDynamicNetworkDataSource.js.map +7 -0
  198. package/lib/esm/src/dynamic-network/data/HttpDynamicNetworkDataSource.test.js +2 -0
  199. package/lib/esm/src/dynamic-network/data/HttpDynamicNetworkDataSource.test.js.map +7 -0
  200. package/lib/esm/src/dynamic-network/data/dto/DynamicNetworkApiResponseDto.js +1 -0
  201. package/lib/esm/src/dynamic-network/di/dynamicNetworkModuleFactory.js +2 -0
  202. package/lib/esm/src/dynamic-network/di/dynamicNetworkModuleFactory.js.map +7 -0
  203. package/lib/esm/src/dynamic-network/di/dynamicNetworkTypes.js +2 -0
  204. package/lib/esm/src/dynamic-network/di/dynamicNetworkTypes.js.map +7 -0
  205. package/lib/esm/src/dynamic-network/domain/DynamicNetworkContextLoader.js +2 -0
  206. package/lib/esm/src/dynamic-network/domain/DynamicNetworkContextLoader.js.map +7 -0
  207. package/lib/esm/src/dynamic-network/domain/DynamicNetworkContextLoader.test.js +2 -0
  208. package/lib/esm/src/dynamic-network/domain/DynamicNetworkContextLoader.test.js.map +7 -0
  209. package/lib/esm/src/dynamic-network/model/DynamicNetworkConfiguration.js +1 -0
  210. package/lib/esm/src/external-plugin/domain/ExternalPluginContextLoader.js +1 -1
  211. package/lib/esm/src/external-plugin/domain/ExternalPluginContextLoader.js.map +3 -3
  212. package/lib/esm/src/external-plugin/domain/ExternalPluginContextLoader.test.js +1 -1
  213. package/lib/esm/src/external-plugin/domain/ExternalPluginContextLoader.test.js.map +3 -3
  214. package/lib/esm/src/index.js +1 -1
  215. package/lib/esm/src/index.js.map +2 -2
  216. package/lib/esm/src/nft/data/HttpNftDataSource.js +1 -1
  217. package/lib/esm/src/nft/data/HttpNftDataSource.js.map +2 -2
  218. package/lib/esm/src/nft/data/HttpNftDataSource.test.js +1 -1
  219. package/lib/esm/src/nft/data/HttpNftDataSource.test.js.map +2 -2
  220. package/lib/esm/src/nft/di/nftModuleFactory.js +1 -1
  221. package/lib/esm/src/nft/di/nftModuleFactory.js.map +3 -3
  222. package/lib/esm/src/nft/di/nftTypes.js +1 -1
  223. package/lib/esm/src/nft/di/nftTypes.js.map +2 -2
  224. package/lib/esm/src/nft/domain/NftContextFieldLoader.js +2 -0
  225. package/lib/esm/src/nft/domain/NftContextFieldLoader.js.map +7 -0
  226. package/lib/esm/src/nft/domain/NftContextFieldLoader.test.js +2 -0
  227. package/lib/esm/src/nft/domain/NftContextFieldLoader.test.js.map +7 -0
  228. package/lib/esm/src/nft/domain/NftContextLoader.js +1 -1
  229. package/lib/esm/src/nft/domain/NftContextLoader.js.map +3 -3
  230. package/lib/esm/src/nft/domain/NftContextLoader.test.js +1 -1
  231. package/lib/esm/src/nft/domain/NftContextLoader.test.js.map +3 -3
  232. package/lib/esm/src/pki/domain/DefaultPkiCertificateLoader.js +1 -1
  233. package/lib/esm/src/pki/domain/DefaultPkiCertificateLoader.js.map +3 -3
  234. package/lib/esm/src/pki/domain/DefaultPkiCertificateLoader.test.js +1 -1
  235. package/lib/esm/src/pki/domain/DefaultPkiCertificateLoader.test.js.map +3 -3
  236. package/lib/esm/src/proxy/data/HttpProxyDataSource.js +2 -0
  237. package/lib/esm/src/proxy/data/HttpProxyDataSource.js.map +7 -0
  238. package/lib/esm/src/proxy/data/HttpProxyDataSource.test.js +2 -0
  239. package/lib/esm/src/proxy/data/HttpProxyDataSource.test.js.map +7 -0
  240. package/lib/esm/src/proxy/data/HttpSafeProxyDataSource.js +2 -0
  241. package/lib/esm/src/proxy/data/HttpSafeProxyDataSource.js.map +7 -0
  242. package/lib/esm/src/proxy/data/HttpSafeProxyDataSource.test.js +2 -0
  243. package/lib/esm/src/proxy/data/HttpSafeProxyDataSource.test.js.map +7 -0
  244. package/lib/esm/src/proxy/data/ProxyDataSource.js +1 -0
  245. package/lib/esm/src/proxy/data/dto/ProxyImplementationAddressDto.js.map +7 -0
  246. package/lib/esm/src/proxy/data/dto/SafeProxyImplementationAddressDto.js +1 -0
  247. package/lib/esm/src/proxy/data/dto/SafeProxyImplementationAddressDto.js.map +7 -0
  248. package/lib/esm/src/proxy/di/proxyModuleFactory.js +2 -0
  249. package/lib/esm/src/proxy/di/proxyModuleFactory.js.map +7 -0
  250. package/lib/esm/src/proxy/di/proxyModuleFactory.test.js +2 -0
  251. package/lib/esm/src/proxy/di/proxyModuleFactory.test.js.map +7 -0
  252. package/lib/esm/src/proxy/di/proxyTypes.js +2 -0
  253. package/lib/esm/src/proxy/di/proxyTypes.js.map +7 -0
  254. package/lib/esm/src/proxy/domain/ProxyContextFieldLoader.js +2 -0
  255. package/lib/esm/src/proxy/domain/ProxyContextFieldLoader.js.map +7 -0
  256. package/lib/esm/src/proxy/domain/ProxyContextFieldLoader.test.js +2 -0
  257. package/lib/esm/src/proxy/domain/ProxyContextFieldLoader.test.js.map +7 -0
  258. package/lib/esm/src/proxy/model/ProxyDelegateCall.js.map +7 -0
  259. package/lib/esm/src/shared/domain/ContextFieldLoader.js +1 -0
  260. package/lib/esm/src/shared/domain/ContextFieldLoader.js.map +7 -0
  261. package/lib/esm/src/shared/model/ClearSignContext.js +1 -1
  262. package/lib/esm/src/shared/model/ClearSignContext.js.map +3 -3
  263. package/lib/esm/src/shared/model/TypedDataClearSignContext.js +1 -1
  264. package/lib/esm/src/shared/model/TypedDataClearSignContext.js.map +3 -3
  265. package/lib/esm/src/shared/utils/KeyUsageMapper.js +1 -1
  266. package/lib/esm/src/shared/utils/KeyUsageMapper.js.map +2 -2
  267. package/lib/esm/src/solana/data/HttpSolanaOwnerInfoDataSource.js +1 -1
  268. package/lib/esm/src/solana/data/HttpSolanaOwnerInfoDataSource.js.map +2 -2
  269. package/lib/esm/src/solana/data/HttpSolanaOwnerInfoDataSource.test.js +1 -1
  270. package/lib/esm/src/solana/data/HttpSolanaOwnerInfoDataSource.test.js.map +2 -2
  271. package/lib/esm/src/token/di/tokenModuleFactory.js +1 -1
  272. package/lib/esm/src/token/di/tokenModuleFactory.js.map +3 -3
  273. package/lib/esm/src/token/di/tokenTypes.js +1 -1
  274. package/lib/esm/src/token/di/tokenTypes.js.map +2 -2
  275. package/lib/esm/src/token/domain/TokenContextFieldLoader.js +2 -0
  276. package/lib/esm/src/token/domain/TokenContextFieldLoader.js.map +7 -0
  277. package/lib/esm/src/token/domain/TokenContextFieldLoader.test.js +2 -0
  278. package/lib/esm/src/token/domain/TokenContextFieldLoader.test.js.map +7 -0
  279. package/lib/esm/src/token/domain/TokenContextLoader.js +1 -1
  280. package/lib/esm/src/token/domain/TokenContextLoader.js.map +3 -3
  281. package/lib/esm/src/token/domain/TokenContextLoader.test.js +1 -1
  282. package/lib/esm/src/token/domain/TokenContextLoader.test.js.map +3 -3
  283. package/lib/esm/src/trusted-name/data/HttpTrustedNameDataSource.js +1 -1
  284. package/lib/esm/src/trusted-name/data/HttpTrustedNameDataSource.js.map +3 -3
  285. package/lib/esm/src/trusted-name/data/HttpTrustedNameDataSource.test.js +1 -1
  286. package/lib/esm/src/trusted-name/data/HttpTrustedNameDataSource.test.js.map +2 -2
  287. package/lib/esm/src/trusted-name/di/trustedNameModuleFactory.js +1 -1
  288. package/lib/esm/src/trusted-name/di/trustedNameModuleFactory.js.map +3 -3
  289. package/lib/esm/src/trusted-name/di/trustedNameTypes.js +1 -1
  290. package/lib/esm/src/trusted-name/di/trustedNameTypes.js.map +2 -2
  291. package/lib/esm/src/trusted-name/domain/TrustedNameContextFieldLoader.js +2 -0
  292. package/lib/esm/src/trusted-name/domain/TrustedNameContextFieldLoader.js.map +7 -0
  293. package/lib/esm/src/trusted-name/domain/TrustedNameContextFieldLoader.test.js +2 -0
  294. package/lib/esm/src/trusted-name/domain/TrustedNameContextFieldLoader.test.js.map +7 -0
  295. package/lib/esm/src/trusted-name/domain/TrustedNameContextLoader.js +1 -1
  296. package/lib/esm/src/trusted-name/domain/TrustedNameContextLoader.js.map +3 -3
  297. package/lib/esm/src/trusted-name/domain/TrustedNameContextLoader.test.js +1 -1
  298. package/lib/esm/src/trusted-name/domain/TrustedNameContextLoader.test.js.map +3 -3
  299. package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.js +1 -1
  300. package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.js.map +3 -3
  301. package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.test.js +1 -1
  302. package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.test.js.map +3 -3
  303. package/lib/esm/src/typed-data/domain/DefaultTypedDataContextLoader.js +1 -1
  304. package/lib/esm/src/typed-data/domain/DefaultTypedDataContextLoader.js.map +3 -3
  305. package/lib/esm/src/typed-data/domain/DefaultTypedDataContextLoader.test.js +1 -1
  306. package/lib/esm/src/typed-data/domain/DefaultTypedDataContextLoader.test.js.map +3 -3
  307. package/lib/esm/src/uniswap/domain/UniswapContextLoader.js +1 -1
  308. package/lib/esm/src/uniswap/domain/UniswapContextLoader.js.map +3 -3
  309. package/lib/esm/src/uniswap/domain/UniswapContextLoader.test.js +1 -1
  310. package/lib/esm/src/uniswap/domain/UniswapContextLoader.test.js.map +3 -3
  311. package/lib/types/src/ContextModule.d.ts +3 -4
  312. package/lib/types/src/ContextModule.d.ts.map +1 -1
  313. package/lib/types/src/ContextModuleBuilder.d.ts +8 -1
  314. package/lib/types/src/ContextModuleBuilder.d.ts.map +1 -1
  315. package/lib/types/src/DefaultContextModule.d.ts +4 -3
  316. package/lib/types/src/DefaultContextModule.d.ts.map +1 -1
  317. package/lib/types/src/{transaction/data/TransactionDataSource.d.ts → calldata/data/CalldataDescriptorDataSource.d.ts} +4 -4
  318. package/lib/types/src/calldata/data/CalldataDescriptorDataSource.d.ts.map +1 -0
  319. package/lib/types/src/{transaction/data/HttpTransactionDataSource.d.ts → calldata/data/HttpCalldataDescriptorDataSource.d.ts} +6 -5
  320. package/lib/types/src/calldata/data/HttpCalldataDescriptorDataSource.d.ts.map +1 -0
  321. package/lib/types/src/calldata/data/HttpCalldataDescriptorDataSource.test.d.ts +2 -0
  322. package/lib/types/src/calldata/data/HttpCalldataDescriptorDataSource.test.d.ts.map +1 -0
  323. package/lib/types/src/{transaction → calldata}/data/dto/CalldataDto.d.ts +10 -1
  324. package/lib/types/src/calldata/data/dto/CalldataDto.d.ts.map +1 -0
  325. package/lib/types/src/calldata/di/calldataModuleFactory.d.ts +3 -0
  326. package/lib/types/src/calldata/di/calldataModuleFactory.d.ts.map +1 -0
  327. package/lib/types/src/calldata/di/calldataTypes.d.ts +6 -0
  328. package/lib/types/src/calldata/di/calldataTypes.d.ts.map +1 -0
  329. package/lib/types/src/calldata/domain/CalldataContextLoader.d.ts +23 -0
  330. package/lib/types/src/calldata/domain/CalldataContextLoader.d.ts.map +1 -0
  331. package/lib/types/src/calldata/domain/CalldataContextLoader.test.d.ts +2 -0
  332. package/lib/types/src/calldata/domain/CalldataContextLoader.test.d.ts.map +1 -0
  333. package/lib/types/src/config/model/ContextModuleConfig.d.ts +8 -1
  334. package/lib/types/src/config/model/ContextModuleConfig.d.ts.map +1 -1
  335. package/lib/types/src/di.d.ts.map +1 -1
  336. package/lib/types/src/dynamic-network/data/DynamicNetworkDataSource.d.ts +6 -0
  337. package/lib/types/src/dynamic-network/data/DynamicNetworkDataSource.d.ts.map +1 -0
  338. package/lib/types/src/dynamic-network/data/HttpDynamicNetworkDataSource.d.ts +13 -0
  339. package/lib/types/src/dynamic-network/data/HttpDynamicNetworkDataSource.d.ts.map +1 -0
  340. package/lib/types/src/dynamic-network/data/HttpDynamicNetworkDataSource.test.d.ts +2 -0
  341. package/lib/types/src/dynamic-network/data/HttpDynamicNetworkDataSource.test.d.ts.map +1 -0
  342. package/lib/types/src/dynamic-network/data/dto/DynamicNetworkApiResponseDto.d.ts +14 -0
  343. package/lib/types/src/dynamic-network/data/dto/DynamicNetworkApiResponseDto.d.ts.map +1 -0
  344. package/lib/types/src/dynamic-network/di/dynamicNetworkModuleFactory.d.ts +3 -0
  345. package/lib/types/src/dynamic-network/di/dynamicNetworkModuleFactory.d.ts.map +1 -0
  346. package/lib/types/src/dynamic-network/di/dynamicNetworkTypes.d.ts +5 -0
  347. package/lib/types/src/dynamic-network/di/dynamicNetworkTypes.d.ts.map +1 -0
  348. package/lib/types/src/dynamic-network/domain/DynamicNetworkContextLoader.d.ts +19 -0
  349. package/lib/types/src/dynamic-network/domain/DynamicNetworkContextLoader.d.ts.map +1 -0
  350. package/lib/types/src/dynamic-network/domain/DynamicNetworkContextLoader.test.d.ts +2 -0
  351. package/lib/types/src/dynamic-network/domain/DynamicNetworkContextLoader.test.d.ts.map +1 -0
  352. package/lib/types/src/dynamic-network/model/DynamicNetworkConfiguration.d.ts +16 -0
  353. package/lib/types/src/dynamic-network/model/DynamicNetworkConfiguration.d.ts.map +1 -0
  354. package/lib/types/src/external-plugin/domain/ExternalPluginContextLoader.d.ts +11 -4
  355. package/lib/types/src/external-plugin/domain/ExternalPluginContextLoader.d.ts.map +1 -1
  356. package/lib/types/src/index.d.ts +42 -1
  357. package/lib/types/src/index.d.ts.map +1 -1
  358. package/lib/types/src/nft/di/nftModuleFactory.d.ts.map +1 -1
  359. package/lib/types/src/nft/di/nftTypes.d.ts +1 -0
  360. package/lib/types/src/nft/di/nftTypes.d.ts.map +1 -1
  361. package/lib/types/src/nft/domain/NftContextFieldLoader.d.ts +15 -0
  362. package/lib/types/src/nft/domain/NftContextFieldLoader.d.ts.map +1 -0
  363. package/lib/types/src/nft/domain/NftContextFieldLoader.test.d.ts +2 -0
  364. package/lib/types/src/nft/domain/NftContextFieldLoader.test.d.ts.map +1 -0
  365. package/lib/types/src/nft/domain/NftContextLoader.d.ts +10 -5
  366. package/lib/types/src/nft/domain/NftContextLoader.d.ts.map +1 -1
  367. package/lib/types/src/pki/domain/DefaultPkiCertificateLoader.d.ts.map +1 -1
  368. package/lib/types/src/pki/model/PkiCertificateInfo.d.ts +1 -2
  369. package/lib/types/src/pki/model/PkiCertificateInfo.d.ts.map +1 -1
  370. package/lib/types/src/proxy/data/HttpProxyDataSource.d.ts +13 -0
  371. package/lib/types/src/proxy/data/HttpProxyDataSource.d.ts.map +1 -0
  372. package/lib/types/src/proxy/data/HttpProxyDataSource.test.d.ts.map +1 -0
  373. package/lib/types/src/proxy/data/HttpSafeProxyDataSource.d.ts +13 -0
  374. package/lib/types/src/proxy/data/HttpSafeProxyDataSource.d.ts.map +1 -0
  375. package/lib/types/src/proxy/data/HttpSafeProxyDataSource.test.d.ts +2 -0
  376. package/lib/types/src/proxy/data/HttpSafeProxyDataSource.test.d.ts.map +1 -0
  377. package/lib/types/src/proxy/data/ProxyDataSource.d.ts +17 -0
  378. package/lib/types/src/proxy/data/ProxyDataSource.d.ts.map +1 -0
  379. package/lib/types/src/proxy/data/dto/ProxyDelegateCallDto.d.ts +5 -0
  380. package/lib/types/src/proxy/data/dto/ProxyDelegateCallDto.d.ts.map +1 -0
  381. package/lib/types/src/proxy/data/dto/ProxyImplementationAddressDto.d.ts.map +1 -0
  382. package/lib/types/src/proxy/data/dto/SafeProxyImplementationAddressDto.d.ts +10 -0
  383. package/lib/types/src/proxy/data/dto/SafeProxyImplementationAddressDto.d.ts.map +1 -0
  384. package/lib/types/src/proxy/di/proxyModuleFactory.d.ts +4 -0
  385. package/lib/types/src/proxy/di/proxyModuleFactory.d.ts.map +1 -0
  386. package/lib/types/src/proxy/di/proxyModuleFactory.test.d.ts +2 -0
  387. package/lib/types/src/proxy/di/proxyModuleFactory.test.d.ts.map +1 -0
  388. package/lib/types/src/proxy/di/proxyTypes.d.ts +5 -0
  389. package/lib/types/src/proxy/di/proxyTypes.d.ts.map +1 -0
  390. package/lib/types/src/proxy/domain/ProxyContextFieldLoader.d.ts +21 -0
  391. package/lib/types/src/proxy/domain/ProxyContextFieldLoader.d.ts.map +1 -0
  392. package/lib/types/src/proxy/domain/ProxyContextFieldLoader.test.d.ts +2 -0
  393. package/lib/types/src/proxy/domain/ProxyContextFieldLoader.test.d.ts.map +1 -0
  394. package/lib/types/src/proxy/model/ProxyDelegateCall.d.ts +7 -0
  395. package/lib/types/src/proxy/model/ProxyDelegateCall.d.ts.map +1 -0
  396. package/lib/types/src/shared/domain/ContextFieldLoader.d.ts +15 -0
  397. package/lib/types/src/shared/domain/ContextFieldLoader.d.ts.map +1 -0
  398. package/lib/types/src/shared/domain/ContextLoader.d.ts +13 -5
  399. package/lib/types/src/shared/domain/ContextLoader.d.ts.map +1 -1
  400. package/lib/types/src/shared/model/ClearSignContext.d.ts +29 -8
  401. package/lib/types/src/shared/model/ClearSignContext.d.ts.map +1 -1
  402. package/lib/types/src/shared/model/TransactionSubset.d.ts +1 -0
  403. package/lib/types/src/shared/model/TransactionSubset.d.ts.map +1 -1
  404. package/lib/types/src/shared/model/TypedDataClearSignContext.d.ts +33 -1
  405. package/lib/types/src/shared/model/TypedDataClearSignContext.d.ts.map +1 -1
  406. package/lib/types/src/shared/model/TypedDataContext.d.ts +3 -0
  407. package/lib/types/src/shared/model/TypedDataContext.d.ts.map +1 -1
  408. package/lib/types/src/shared/utils/KeyUsageMapper.d.ts +1 -2
  409. package/lib/types/src/shared/utils/KeyUsageMapper.d.ts.map +1 -1
  410. package/lib/types/src/token/di/tokenModuleFactory.d.ts.map +1 -1
  411. package/lib/types/src/token/di/tokenTypes.d.ts +1 -0
  412. package/lib/types/src/token/di/tokenTypes.d.ts.map +1 -1
  413. package/lib/types/src/token/domain/TokenContextFieldLoader.d.ts +14 -0
  414. package/lib/types/src/token/domain/TokenContextFieldLoader.d.ts.map +1 -0
  415. package/lib/types/src/token/domain/TokenContextFieldLoader.test.d.ts +2 -0
  416. package/lib/types/src/token/domain/TokenContextFieldLoader.test.d.ts.map +1 -0
  417. package/lib/types/src/token/domain/TokenContextLoader.d.ts +10 -5
  418. package/lib/types/src/token/domain/TokenContextLoader.d.ts.map +1 -1
  419. package/lib/types/src/trusted-name/data/HttpTrustedNameDataSource.d.ts +7 -3
  420. package/lib/types/src/trusted-name/data/HttpTrustedNameDataSource.d.ts.map +1 -1
  421. package/lib/types/src/trusted-name/data/TrustedNameDataSource.d.ts +7 -2
  422. package/lib/types/src/trusted-name/data/TrustedNameDataSource.d.ts.map +1 -1
  423. package/lib/types/src/trusted-name/data/TrustedNameDto.d.ts +4 -5
  424. package/lib/types/src/trusted-name/data/TrustedNameDto.d.ts.map +1 -1
  425. package/lib/types/src/trusted-name/di/trustedNameModuleFactory.d.ts.map +1 -1
  426. package/lib/types/src/trusted-name/di/trustedNameTypes.d.ts +1 -0
  427. package/lib/types/src/trusted-name/di/trustedNameTypes.d.ts.map +1 -1
  428. package/lib/types/src/trusted-name/domain/TrustedNameContextFieldLoader.d.ts +22 -0
  429. package/lib/types/src/trusted-name/domain/TrustedNameContextFieldLoader.d.ts.map +1 -0
  430. package/lib/types/src/trusted-name/domain/TrustedNameContextFieldLoader.test.d.ts +2 -0
  431. package/lib/types/src/trusted-name/domain/TrustedNameContextFieldLoader.test.d.ts.map +1 -0
  432. package/lib/types/src/trusted-name/domain/TrustedNameContextLoader.d.ts +14 -6
  433. package/lib/types/src/trusted-name/domain/TrustedNameContextLoader.d.ts.map +1 -1
  434. package/lib/types/src/typed-data/data/FiltersDto.d.ts +32 -2
  435. package/lib/types/src/typed-data/data/FiltersDto.d.ts.map +1 -1
  436. package/lib/types/src/typed-data/data/HttpTypedDataDataSource.d.ts +3 -0
  437. package/lib/types/src/typed-data/data/HttpTypedDataDataSource.d.ts.map +1 -1
  438. package/lib/types/src/typed-data/data/HttpTypedDataDataSource.test.d.ts +1 -0
  439. package/lib/types/src/typed-data/data/HttpTypedDataDataSource.test.d.ts.map +1 -1
  440. package/lib/types/src/typed-data/data/TypedDataDataSource.d.ts +2 -1
  441. package/lib/types/src/typed-data/data/TypedDataDataSource.d.ts.map +1 -1
  442. package/lib/types/src/typed-data/domain/DefaultTypedDataContextLoader.d.ts +12 -1
  443. package/lib/types/src/typed-data/domain/DefaultTypedDataContextLoader.d.ts.map +1 -1
  444. package/lib/types/src/uniswap/domain/UniswapContextLoader.d.ts +11 -4
  445. package/lib/types/src/uniswap/domain/UniswapContextLoader.d.ts.map +1 -1
  446. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  447. package/package.json +3 -3
  448. package/lib/cjs/src/shared/model/TransactionContext.js +0 -2
  449. package/lib/cjs/src/shared/model/TransactionContext.js.map +0 -7
  450. package/lib/cjs/src/transaction/data/HttpProxyDataSource.js +0 -2
  451. package/lib/cjs/src/transaction/data/HttpProxyDataSource.js.map +0 -7
  452. package/lib/cjs/src/transaction/data/HttpProxyDataSource.test.js +0 -2
  453. package/lib/cjs/src/transaction/data/HttpProxyDataSource.test.js.map +0 -7
  454. package/lib/cjs/src/transaction/data/HttpTransactionDataSource.js +0 -2
  455. package/lib/cjs/src/transaction/data/HttpTransactionDataSource.js.map +0 -7
  456. package/lib/cjs/src/transaction/data/HttpTransactionDataSource.test.js +0 -2
  457. package/lib/cjs/src/transaction/data/HttpTransactionDataSource.test.js.map +0 -7
  458. package/lib/cjs/src/transaction/data/TransactionDataSource.js +0 -2
  459. package/lib/cjs/src/transaction/data/TransactionDataSource.js.map +0 -7
  460. package/lib/cjs/src/transaction/data/dto/CalldataDto.js +0 -2
  461. package/lib/cjs/src/transaction/data/dto/CalldataDto.js.map +0 -7
  462. package/lib/cjs/src/transaction/data/dto/ProxyDelegateCallDto.js +0 -2
  463. package/lib/cjs/src/transaction/data/dto/ProxyDelegateCallDto.js.map +0 -7
  464. package/lib/cjs/src/transaction/di/transactionModuleFactory.js +0 -2
  465. package/lib/cjs/src/transaction/di/transactionModuleFactory.js.map +0 -7
  466. package/lib/cjs/src/transaction/di/transactionTypes.js +0 -2
  467. package/lib/cjs/src/transaction/di/transactionTypes.js.map +0 -7
  468. package/lib/cjs/src/transaction/domain/TransactionContextLoader.js +0 -2
  469. package/lib/cjs/src/transaction/domain/TransactionContextLoader.js.map +0 -7
  470. package/lib/cjs/src/transaction/domain/TransactionContextLoader.test.js +0 -2
  471. package/lib/cjs/src/transaction/domain/TransactionContextLoader.test.js.map +0 -7
  472. package/lib/cjs/src/transaction/model/ProxyDelegateCall.js +0 -2
  473. package/lib/cjs/src/transaction/model/ProxyDelegateCall.js.map +0 -7
  474. package/lib/cjs/src/transaction/model/ProxyImplementationAddress.js +0 -2
  475. package/lib/cjs/src/transaction/model/ProxyImplementationAddress.js.map +0 -7
  476. package/lib/esm/src/shared/model/TransactionContext.js +0 -1
  477. package/lib/esm/src/transaction/data/HttpProxyDataSource.js +0 -2
  478. package/lib/esm/src/transaction/data/HttpProxyDataSource.js.map +0 -7
  479. package/lib/esm/src/transaction/data/HttpProxyDataSource.test.js +0 -2
  480. package/lib/esm/src/transaction/data/HttpProxyDataSource.test.js.map +0 -7
  481. package/lib/esm/src/transaction/data/HttpTransactionDataSource.js +0 -2
  482. package/lib/esm/src/transaction/data/HttpTransactionDataSource.js.map +0 -7
  483. package/lib/esm/src/transaction/data/HttpTransactionDataSource.test.js +0 -2
  484. package/lib/esm/src/transaction/data/HttpTransactionDataSource.test.js.map +0 -7
  485. package/lib/esm/src/transaction/data/TransactionDataSource.js +0 -1
  486. package/lib/esm/src/transaction/di/transactionModuleFactory.js +0 -2
  487. package/lib/esm/src/transaction/di/transactionModuleFactory.js.map +0 -7
  488. package/lib/esm/src/transaction/di/transactionTypes.js +0 -2
  489. package/lib/esm/src/transaction/di/transactionTypes.js.map +0 -7
  490. package/lib/esm/src/transaction/domain/TransactionContextLoader.js +0 -2
  491. package/lib/esm/src/transaction/domain/TransactionContextLoader.js.map +0 -7
  492. package/lib/esm/src/transaction/domain/TransactionContextLoader.test.js +0 -2
  493. package/lib/esm/src/transaction/domain/TransactionContextLoader.test.js.map +0 -7
  494. package/lib/esm/src/transaction/model/ProxyImplementationAddress.js +0 -1
  495. package/lib/types/src/shared/model/TransactionContext.d.ts +0 -21
  496. package/lib/types/src/shared/model/TransactionContext.d.ts.map +0 -1
  497. package/lib/types/src/transaction/data/HttpProxyDataSource.d.ts +0 -32
  498. package/lib/types/src/transaction/data/HttpProxyDataSource.d.ts.map +0 -1
  499. package/lib/types/src/transaction/data/HttpProxyDataSource.test.d.ts.map +0 -1
  500. package/lib/types/src/transaction/data/HttpTransactionDataSource.d.ts.map +0 -1
  501. package/lib/types/src/transaction/data/HttpTransactionDataSource.test.d.ts +0 -2
  502. package/lib/types/src/transaction/data/HttpTransactionDataSource.test.d.ts.map +0 -1
  503. package/lib/types/src/transaction/data/TransactionDataSource.d.ts.map +0 -1
  504. package/lib/types/src/transaction/data/dto/CalldataDto.d.ts.map +0 -1
  505. package/lib/types/src/transaction/data/dto/ProxyDelegateCallDto.d.ts +0 -5
  506. package/lib/types/src/transaction/data/dto/ProxyDelegateCallDto.d.ts.map +0 -1
  507. package/lib/types/src/transaction/data/dto/ProxyImplementationAddressDto.d.ts.map +0 -1
  508. package/lib/types/src/transaction/di/transactionModuleFactory.d.ts +0 -3
  509. package/lib/types/src/transaction/di/transactionModuleFactory.d.ts.map +0 -1
  510. package/lib/types/src/transaction/di/transactionTypes.d.ts +0 -6
  511. package/lib/types/src/transaction/di/transactionTypes.d.ts.map +0 -1
  512. package/lib/types/src/transaction/domain/TransactionContextLoader.d.ts +0 -10
  513. package/lib/types/src/transaction/domain/TransactionContextLoader.d.ts.map +0 -1
  514. package/lib/types/src/transaction/domain/TransactionContextLoader.test.d.ts +0 -2
  515. package/lib/types/src/transaction/domain/TransactionContextLoader.test.d.ts.map +0 -1
  516. package/lib/types/src/transaction/model/ProxyDelegateCall.d.ts +0 -5
  517. package/lib/types/src/transaction/model/ProxyDelegateCall.d.ts.map +0 -1
  518. package/lib/types/src/transaction/model/ProxyImplementationAddress.d.ts +0 -4
  519. package/lib/types/src/transaction/model/ProxyImplementationAddress.d.ts.map +0 -1
  520. /package/lib/cjs/src/{transaction → proxy}/data/dto/ProxyImplementationAddressDto.js +0 -0
  521. /package/lib/esm/src/{shared/model/TransactionContext.js.map → calldata/data/CalldataDescriptorDataSource.js.map} +0 -0
  522. /package/lib/esm/src/{transaction → calldata}/data/dto/CalldataDto.js +0 -0
  523. /package/lib/esm/src/{transaction → calldata}/data/dto/CalldataDto.js.map +0 -0
  524. /package/lib/esm/src/{transaction/data/TransactionDataSource.js.map → dynamic-network/data/DynamicNetworkDataSource.js.map} +0 -0
  525. /package/lib/esm/src/{transaction/data/dto/ProxyDelegateCallDto.js.map → dynamic-network/data/dto/DynamicNetworkApiResponseDto.js.map} +0 -0
  526. /package/lib/esm/src/{transaction/data/dto/ProxyImplementationAddressDto.js.map → dynamic-network/model/DynamicNetworkConfiguration.js.map} +0 -0
  527. /package/lib/esm/src/{transaction/model/ProxyDelegateCall.js.map → proxy/data/ProxyDataSource.js.map} +0 -0
  528. /package/lib/esm/src/{transaction → proxy}/data/dto/ProxyDelegateCallDto.js +0 -0
  529. /package/lib/esm/src/{transaction/model/ProxyImplementationAddress.js.map → proxy/data/dto/ProxyDelegateCallDto.js.map} +0 -0
  530. /package/lib/esm/src/{transaction → proxy}/data/dto/ProxyImplementationAddressDto.js +0 -0
  531. /package/lib/esm/src/{transaction → proxy}/model/ProxyDelegateCall.js +0 -0
  532. /package/lib/types/src/{transaction → proxy}/data/HttpProxyDataSource.test.d.ts +0 -0
  533. /package/lib/types/src/{transaction → proxy}/data/dto/ProxyImplementationAddressDto.d.ts +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/typed-data/domain/DefaultTypedDataContextLoader.ts"],
4
- "sourcesContent": ["import type { HexaString } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport type {\n TypedDataClearSignContext,\n TypedDataFilter,\n TypedDataFilterPath,\n TypedDataToken,\n TypedDataTokenIndex,\n} from \"@/shared/model/TypedDataClearSignContext\";\nimport { VERIFYING_CONTRACT_TOKEN_INDEX } from \"@/shared/model/TypedDataClearSignContext\";\nimport type { TypedDataContext } from \"@/shared/model/TypedDataContext\";\nimport type { TokenDataSource } from \"@/token/data/TokenDataSource\";\nimport { tokenTypes } from \"@/token/di/tokenTypes\";\nimport type { TypedDataDataSource } from \"@/typed-data/data/TypedDataDataSource\";\nimport { typedDataTypes } from \"@/typed-data/di/typedDataTypes\";\nimport type { TypedDataContextLoader } from \"@/typed-data/domain/TypedDataContextLoader\";\n\n@injectable()\nexport class DefaultTypedDataContextLoader implements TypedDataContextLoader {\n constructor(\n @inject(typedDataTypes.TypedDataDataSource)\n private dataSource: TypedDataDataSource,\n @inject(tokenTypes.TokenDataSource)\n private tokenDataSource: TokenDataSource,\n ) {}\n\n async load(typedData: TypedDataContext): Promise<TypedDataClearSignContext> {\n // Get the typed data filters from the data source\n const data = await this.dataSource.getTypedDataFilters({\n address: typedData.verifyingContract,\n chainId: typedData.chainId,\n version: typedData.version,\n schema: typedData.schema,\n });\n\n // If there was an error getting the typed data filters, return an error immediately\n if (data.isLeft()) {\n return {\n type: \"error\",\n error: data.extract(),\n };\n }\n\n // Else, extract the message info and filters\n const { messageInfo, filters } = data.unsafeCoerce();\n\n // Loop through the typed data filters to extract informations\n const mappedFilters: Record<TypedDataFilterPath, TypedDataFilter> = {};\n const mappedTrustedNames: Record<TypedDataFilterPath, HexaString> = {};\n const mappedTokens: Record<TypedDataTokenIndex, TypedDataToken> = {};\n for (const filter of filters) {\n // Add the filter to the clear signing context\n mappedFilters[filter.path] = filter;\n\n // If the filter is a trusted name, get the according address from typed message values.\n // don't fetch the descriptor yet since a device challenge will be needed.\n if (filter.type === \"trusted-name\") {\n const values = typedData.fieldsValues.filter(\n (entry) => entry.path === filter.path,\n );\n if (values.length !== 0) {\n const value = values[0]!;\n const address = this.convertAddressToHexaString(value.value);\n mappedTrustedNames[filter.path] = address;\n }\n continue;\n }\n\n // If the filter references a token, retrieve its descriptor from the tokens data source\n if (filter.type !== \"token\" && filter.type !== \"amount\") {\n continue; // no token reference\n }\n const tokenIndex = filter.tokenIndex;\n if (mappedTokens[tokenIndex] !== undefined) {\n continue; // Already fetched for a previous filter\n }\n\n // If the filter is a token, get token address from typed message values, and fetch descriptor\n if (filter.type === \"token\") {\n const values = typedData.fieldsValues.filter(\n (entry) => entry.path === filter.path,\n );\n if (values.length === 0) {\n // No value matching the referenced token. It may be located in an empty array.\n continue;\n }\n const value = values[0]!;\n const address = this.convertAddressToHexaString(value.value);\n\n // Arrays with different tokens are not supported since there is only 1 tokenIndex per filter.\n // Only fetch tokens if all values are the same.\n if (\n values.every(\n (entry) => this.convertAddressToHexaString(entry.value) === address,\n )\n ) {\n // Fetch descriptor\n const chainId = typedData.chainId;\n const payload = await this.tokenDataSource.getTokenInfosPayload({\n address,\n chainId,\n });\n payload.ifRight((p) => {\n mappedTokens[tokenIndex] = p;\n });\n }\n }\n\n // If the filter is an amount with a reference to the verifyingContract, fetch verifyingContract descriptor.\n // This is because descriptors data-sources should be compatible with Ledger devices specifications:\n // https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#amount-join-value\n else if (\n filter.type === \"amount\" &&\n tokenIndex === VERIFYING_CONTRACT_TOKEN_INDEX\n ) {\n const address = typedData.verifyingContract;\n const chainId = typedData.chainId;\n const payload = await this.tokenDataSource.getTokenInfosPayload({\n address,\n chainId,\n });\n payload.ifRight((p) => {\n mappedTokens[tokenIndex] = p;\n });\n }\n }\n\n return {\n type: \"success\",\n messageInfo,\n filters: mappedFilters,\n trustedNamesAddresses: mappedTrustedNames,\n tokens: mappedTokens,\n };\n }\n\n private convertAddressToHexaString(address: Uint8Array): HexaString {\n // Address size is 20 bytes so 40 characters, padded with zeros on the left\n return `0x${Array.from(address, (byte) =>\n byte.toString(16).padStart(2, \"0\"),\n )\n .join(\"\")\n .padStart(40, \"0\")}`;\n }\n}\n"],
5
- "mappings": "okBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mCAAAE,IAAA,eAAAC,EAAAH,GACA,IAAAI,EAAmC,qBASnCC,EAA+C,oDAG/CC,EAA2B,iCAE3BC,EAA+B,0CAIxB,IAAMC,EAAN,KAAsE,CAC3E,YAEUC,EAEAC,EACR,CAHQ,gBAAAD,EAEA,qBAAAC,CACP,CAEH,MAAM,KAAKC,EAAiE,CAE1E,MAAMC,EAAO,MAAM,KAAK,WAAW,oBAAoB,CACrD,QAASD,EAAU,kBACnB,QAASA,EAAU,QACnB,QAASA,EAAU,QACnB,OAAQA,EAAU,MACpB,CAAC,EAGD,GAAIC,EAAK,OAAO,EACd,MAAO,CACL,KAAM,QACN,MAAOA,EAAK,QAAQ,CACtB,EAIF,KAAM,CAAE,YAAAC,EAAa,QAAAC,CAAQ,EAAIF,EAAK,aAAa,EAG7CG,EAA8D,CAAC,EAC/DC,EAA8D,CAAC,EAC/DC,EAA4D,CAAC,EACnE,UAAWC,KAAUJ,EAAS,CAM5B,GAJAC,EAAcG,EAAO,IAAI,EAAIA,EAIzBA,EAAO,OAAS,eAAgB,CAClC,MAAMC,EAASR,EAAU,aAAa,OACnCS,GAAUA,EAAM,OAASF,EAAO,IACnC,EACA,GAAIC,EAAO,SAAW,EAAG,CACvB,MAAME,EAAQF,EAAO,CAAC,EAChBG,EAAU,KAAK,2BAA2BD,EAAM,KAAK,EAC3DL,EAAmBE,EAAO,IAAI,EAAII,CACpC,CACA,QACF,CAGA,GAAIJ,EAAO,OAAS,SAAWA,EAAO,OAAS,SAC7C,SAEF,MAAMK,EAAaL,EAAO,WAC1B,GAAID,EAAaM,CAAU,IAAM,QAKjC,GAAIL,EAAO,OAAS,QAAS,CAC3B,MAAMC,EAASR,EAAU,aAAa,OACnCS,GAAUA,EAAM,OAASF,EAAO,IACnC,EACA,GAAIC,EAAO,SAAW,EAEpB,SAEF,MAAME,EAAQF,EAAO,CAAC,EAChBG,EAAU,KAAK,2BAA2BD,EAAM,KAAK,EAI3D,GACEF,EAAO,MACJC,GAAU,KAAK,2BAA2BA,EAAM,KAAK,IAAME,CAC9D,EACA,CAEA,MAAME,EAAUb,EAAU,SACV,MAAM,KAAK,gBAAgB,qBAAqB,CAC9D,QAAAW,EACA,QAAAE,CACF,CAAC,GACO,QAASC,GAAM,CACrBR,EAAaM,CAAU,EAAIE,CAC7B,CAAC,CACH,CACF,SAMEP,EAAO,OAAS,UAChBK,IAAe,iCACf,CACA,MAAMD,EAAUX,EAAU,kBACpBa,EAAUb,EAAU,SACV,MAAM,KAAK,gBAAgB,qBAAqB,CAC9D,QAAAW,EACA,QAAAE,CACF,CAAC,GACO,QAASC,GAAM,CACrBR,EAAaM,CAAU,EAAIE,CAC7B,CAAC,CACH,EACF,CAEA,MAAO,CACL,KAAM,UACN,YAAAZ,EACA,QAASE,EACT,sBAAuBC,EACvB,OAAQC,CACV,CACF,CAEQ,2BAA2BK,EAAiC,CAElE,MAAO,KAAK,MAAM,KAAKA,EAAUI,GAC/BA,EAAK,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CACnC,EACG,KAAK,EAAE,EACP,SAAS,GAAI,GAAG,CAAC,EACtB,CACF,EA9HalB,EAANmB,EAAA,IADN,cAAW,EAGPC,EAAA,eAAO,iBAAe,mBAAmB,GAEzCA,EAAA,eAAO,aAAW,eAAe,IAJzBpB",
6
- "names": ["DefaultTypedDataContextLoader_exports", "__export", "DefaultTypedDataContextLoader", "__toCommonJS", "import_inversify", "import_TypedDataClearSignContext", "import_tokenTypes", "import_typedDataTypes", "DefaultTypedDataContextLoader", "dataSource", "tokenDataSource", "typedData", "data", "messageInfo", "filters", "mappedFilters", "mappedTrustedNames", "mappedTokens", "filter", "values", "entry", "value", "address", "tokenIndex", "chainId", "p", "byte", "__decorateClass", "__decorateParam"]
4
+ "sourcesContent": ["import type { HexaString } from \"@ledgerhq/device-management-kit\";\nimport { bufferToHexaString } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport { pkiTypes } from \"@/pki/di/pkiTypes\";\nimport { type PkiCertificateLoader } from \"@/pki/domain/PkiCertificateLoader\";\nimport type { ProxyDataSource } from \"@/proxy/data/ProxyDataSource\";\nimport { proxyTypes } from \"@/proxy/di/proxyTypes\";\nimport {\n type ClearSignContextSuccess,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\nimport type {\n TypedDataCalldataIndex,\n TypedDataCalldataInfo,\n TypedDataClearSignContext,\n TypedDataFilter,\n TypedDataFilterCalldata,\n TypedDataFilterCalldataInfo,\n TypedDataFilterPath,\n TypedDataToken,\n TypedDataTokenIndex,\n} from \"@/shared/model/TypedDataClearSignContext\";\nimport {\n TypedDataCalldataParamPresence,\n VERIFYING_CONTRACT_TOKEN_INDEX,\n} from \"@/shared/model/TypedDataClearSignContext\";\nimport type { TypedDataContext } from \"@/shared/model/TypedDataContext\";\nimport type { TokenDataSource } from \"@/token/data/TokenDataSource\";\nimport { tokenTypes } from \"@/token/di/tokenTypes\";\nimport type { TypedDataDataSource } from \"@/typed-data/data/TypedDataDataSource\";\nimport { typedDataTypes } from \"@/typed-data/di/typedDataTypes\";\nimport type { TypedDataContextLoader } from \"@/typed-data/domain/TypedDataContextLoader\";\n\ntype ResolvedProxy = {\n resolvedAddress: string;\n context?: ClearSignContextSuccess<ClearSignContextType.PROXY_INFO>;\n};\n\n@injectable()\nexport class DefaultTypedDataContextLoader implements TypedDataContextLoader {\n constructor(\n @inject(typedDataTypes.TypedDataDataSource)\n private dataSource: TypedDataDataSource,\n @inject(tokenTypes.TokenDataSource)\n private tokenDataSource: TokenDataSource,\n @inject(proxyTypes.ProxyDataSource)\n private proxyDataSource: ProxyDataSource,\n @inject(pkiTypes.PkiCertificateLoader)\n private _certificateLoader: PkiCertificateLoader,\n ) {}\n\n async load(typedData: TypedDataContext): Promise<TypedDataClearSignContext> {\n // Get the typed data filters from the data source\n let proxy:\n | ClearSignContextSuccess<ClearSignContextType.PROXY_INFO>\n | undefined = undefined;\n let data = await this.dataSource.getTypedDataFilters({\n address: typedData.verifyingContract,\n chainId: typedData.chainId,\n version: typedData.version,\n schema: typedData.schema,\n });\n\n // If there was an error getting the typed data filters, try to resolve a proxy at that address\n if (data.isLeft()) {\n const { resolvedAddress, context } = await this.resolveProxy(typedData);\n if (context !== undefined) {\n proxy = context;\n data = await this.dataSource.getTypedDataFilters({\n address: resolvedAddress,\n chainId: typedData.chainId,\n version: typedData.version,\n schema: typedData.schema,\n });\n }\n // If there was stil an error, return immediately\n if (data.isLeft()) {\n return {\n type: \"error\",\n error: data.extract(),\n };\n }\n }\n\n // Else, extract the message info and filters\n const { messageInfo, filters, calldatasInfos } = data.unsafeCoerce();\n const mappedFilters = filters.reduce(\n (acc, filter) => {\n acc[filter.path] = filter;\n return acc;\n },\n {} as Record<TypedDataFilterPath, TypedDataFilter>,\n );\n\n return {\n type: \"success\",\n messageInfo,\n filters: mappedFilters,\n trustedNamesAddresses: this.extractTrustedNames(filters, typedData),\n tokens: await this.extractTokens(filters, typedData),\n calldatas: this.extractCalldatas(filters, calldatasInfos, typedData),\n proxy,\n };\n }\n\n private async resolveProxy(\n typedData: TypedDataContext,\n ): Promise<ResolvedProxy> {\n // Try to resolve the proxy\n const proxyDelegateCall =\n await this.proxyDataSource.getProxyImplementationAddress({\n calldata: \"0x\",\n proxyAddress: typedData.verifyingContract,\n chainId: typedData.chainId,\n challenge: typedData.challenge ?? \"\",\n });\n\n // Early return on failure\n if (proxyDelegateCall.isLeft()) {\n return {\n resolvedAddress: typedData.verifyingContract,\n context: undefined,\n };\n }\n\n // Fetch descriptor on success\n const proxyData = proxyDelegateCall.unsafeCoerce();\n const certificate = await this._certificateLoader.loadCertificate({\n keyId: proxyData.keyId,\n keyUsage: proxyData.keyUsage,\n targetDevice: typedData.deviceModelId,\n });\n return {\n resolvedAddress: proxyData.implementationAddress,\n context: {\n type: ClearSignContextType.PROXY_INFO,\n payload: proxyData.signedDescriptor,\n certificate,\n },\n };\n }\n\n private extractTrustedNames(\n filters: TypedDataFilter[],\n typedData: TypedDataContext,\n ): Record<TypedDataFilterPath, HexaString> {\n return filters\n .filter((filter) => filter.type === \"trusted-name\")\n .reduce(\n (acc, filter) => {\n const values = typedData.fieldsValues.filter(\n (entry) => entry.path === filter.path,\n );\n if (values.length !== 0) {\n const value = values[0]!;\n const address = this.convertAddressToHexaString(value.value);\n acc[filter.path] = address;\n }\n return acc;\n },\n {} as Record<TypedDataFilterPath, HexaString>,\n );\n }\n\n private async extractTokens(\n filters: TypedDataFilter[],\n typedData: TypedDataContext,\n ): Promise<Record<TypedDataTokenIndex, TypedDataToken>> {\n const mappedTokens: Record<TypedDataTokenIndex, TypedDataToken> = {};\n for (const filter of filters) {\n if (filter.type !== \"token\" && filter.type !== \"amount\") {\n continue; // no token reference\n }\n const tokenIndex = filter.tokenIndex;\n if (mappedTokens[tokenIndex] !== undefined) {\n continue; // Already fetched for a previous filter\n }\n\n // If the filter is a token, get token address from typed message values, and fetch descriptor\n if (filter.type === \"token\") {\n const values = typedData.fieldsValues.filter(\n (entry) => entry.path === filter.path,\n );\n if (values.length === 0) {\n // No value matching the referenced token. It may be located in an empty array.\n continue;\n }\n const value = values[0]!;\n const address = this.convertAddressToHexaString(value.value);\n\n // Arrays with different tokens are not supported since there is only 1 tokenIndex per filter.\n // Only fetch tokens if all values are the same.\n if (\n values.every(\n (entry) => this.convertAddressToHexaString(entry.value) === address,\n )\n ) {\n // Fetch descriptor\n const chainId = typedData.chainId;\n const payload = await this.tokenDataSource.getTokenInfosPayload({\n address,\n chainId,\n });\n payload.ifRight((p) => {\n mappedTokens[tokenIndex] = p;\n });\n }\n }\n\n // If the filter is an amount with a reference to the verifyingContract, fetch verifyingContract descriptor.\n // This is because descriptors data-sources should be compatible with Ledger devices specifications:\n // https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#amount-join-value\n else if (\n filter.type === \"amount\" &&\n tokenIndex === VERIFYING_CONTRACT_TOKEN_INDEX\n ) {\n const address = typedData.verifyingContract;\n const chainId = typedData.chainId;\n const payload = await this.tokenDataSource.getTokenInfosPayload({\n address,\n chainId,\n });\n payload.ifRight((p) => {\n mappedTokens[tokenIndex] = p;\n });\n }\n }\n return mappedTokens;\n }\n\n private extractCalldatas(\n filters: TypedDataFilter[],\n calldatasInfos: Record<TypedDataCalldataIndex, TypedDataFilterCalldataInfo>,\n typedData: TypedDataContext,\n ): Record<TypedDataCalldataIndex, TypedDataCalldataInfo> {\n // Map filters per calldataIndex\n const calldataFilters = filters.reduce(\n (acc, filter) => {\n if (\n filter.type === \"calldata-value\" ||\n filter.type === \"calldata-callee\" ||\n filter.type === \"calldata-chain-id\" ||\n filter.type === \"calldata-selector\" ||\n filter.type === \"calldata-amount\" ||\n filter.type === \"calldata-spender\"\n ) {\n const array = acc[filter.calldataIndex];\n if (array === undefined) {\n acc[filter.calldataIndex] = [filter];\n } else {\n array.push(filter);\n }\n }\n return acc;\n },\n {} as Record<TypedDataCalldataIndex, TypedDataFilterCalldata[]>,\n );\n\n // Iterate over calldatas\n const mappedCalldatas: Record<\n TypedDataCalldataIndex,\n TypedDataCalldataInfo\n > = {};\n for (const calldataIndex in calldatasInfos) {\n const infos = calldatasInfos[calldataIndex]!;\n const filters = calldataFilters[calldataIndex];\n if (!filters) {\n continue;\n }\n\n // Get data\n const data = this.extractHexaString(\n filters.find((filter) => filter.type === \"calldata-value\"),\n typedData,\n \"0x\",\n );\n\n // Get selector\n const selector = this.extractHexaString(\n filters.find((filter) => filter.type === \"calldata-selector\"),\n typedData,\n data.slice(0, 10),\n );\n\n // Get to\n const to = this.extractAddress(\n filters.find((filter) => filter.type === \"calldata-callee\"),\n typedData,\n infos.calleeFlag,\n );\n\n // Get from\n const from = this.extractAddress(\n filters.find((filter) => filter.type === \"calldata-spender\"),\n typedData,\n infos.spenderFlag,\n );\n\n // Get amount\n const value = this.extractBigint(\n filters.find((filter) => filter.type === \"calldata-amount\"),\n typedData,\n undefined,\n );\n\n // Get chainId\n const chainIdBigint = this.extractBigint(\n filters.find((filter) => filter.type === \"calldata-chain-id\"),\n typedData,\n undefined,\n );\n const chainId =\n chainIdBigint !== undefined && chainIdBigint < Number.MAX_SAFE_INTEGER\n ? Number(chainIdBigint)\n : typedData.chainId;\n\n mappedCalldatas[calldataIndex] = {\n filter: infos,\n subset: {\n chainId,\n data,\n selector,\n to,\n value,\n from,\n },\n };\n }\n return mappedCalldatas;\n }\n\n private extractHexaString(\n filter: TypedDataFilter | undefined,\n typedData: TypedDataContext,\n defaultValue: string,\n ): string {\n if (filter !== undefined) {\n const values = typedData.fieldsValues.filter(\n (entry) => entry.path === filter.path,\n );\n if (values.length !== 0) {\n return bufferToHexaString(values[0]!.value);\n }\n }\n return defaultValue;\n }\n\n private extractAddress(\n filter: TypedDataFilter | undefined,\n typedData: TypedDataContext,\n presenceFlag: TypedDataCalldataParamPresence,\n defaultValue?: string,\n ): string | undefined {\n if (presenceFlag === TypedDataCalldataParamPresence.VerifyingContract) {\n return typedData.verifyingContract;\n } else if (filter !== undefined) {\n const values = typedData.fieldsValues.filter(\n (entry) => entry.path === filter.path,\n );\n if (values.length !== 0) {\n return this.convertAddressToHexaString(values[0]!.value);\n }\n }\n return defaultValue;\n }\n\n private extractBigint(\n filter: TypedDataFilter | undefined,\n typedData: TypedDataContext,\n defaultValue: bigint | undefined,\n ): bigint | undefined {\n if (filter !== undefined) {\n const values = typedData.fieldsValues.filter(\n (entry) => entry.path === filter.path,\n );\n if (values.length !== 0) {\n return BigInt(bufferToHexaString(values[0]!.value));\n }\n }\n return defaultValue;\n }\n\n private convertAddressToHexaString(address: Uint8Array): HexaString {\n // Address size is 20 bytes so 40 characters, padded with zeros on the left\n return `0x${Array.from(address, (byte) =>\n byte.toString(16).padStart(2, \"0\"),\n )\n .join(\"\")\n .padStart(40, \"0\")}`;\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["DefaultTypedDataContextLoader_exports", "__export", "DefaultTypedDataContextLoader", "__toCommonJS", "import_device_management_kit", "import_inversify", "import_pkiTypes", "import_proxyTypes", "import_ClearSignContext", "import_TypedDataClearSignContext", "import_tokenTypes", "import_typedDataTypes", "DefaultTypedDataContextLoader", "dataSource", "tokenDataSource", "proxyDataSource", "_certificateLoader", "typedData", "proxy", "data", "resolvedAddress", "context", "messageInfo", "filters", "calldatasInfos", "mappedFilters", "acc", "filter", "proxyDelegateCall", "proxyData", "certificate", "values", "entry", "value", "address", "mappedTokens", "tokenIndex", "chainId", "p", "calldataFilters", "array", "mappedCalldatas", "calldataIndex", "infos", "selector", "to", "from", "chainIdBigint", "defaultValue", "presenceFlag", "byte", "__decorateClass", "__decorateParam"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var t=require("purify-ts"),b=require("../../typed-data/domain/DefaultTypedDataContextLoader");describe("TokenContextLoader",()=>{const n={getTokenInfosPayload:vi.fn()},f={getTypedDataFilters:vi.fn()},d=new b.DefaultTypedDataContextLoader(f,n),c={PermitSingle:[{name:"details",type:"PermitDetails"},{name:"spender",type:"address"},{name:"sigDeadline",type:"uint256"}],PermitDetails:[{type:"address[]",name:"token"},{name:"amount",type:"uint160"},{name:"expiration",type:"uint48"},{name:"nonce",type:"uint48"}],EIP712Domain:[{name:"name",type:"string"},{name:"chainId",type:"uint256"},{name:"verifyingContract",type:"address"}]},s=[{path:"details.token.[]",value:Uint8Array.from([124,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,25])},{path:"details.amount",value:Uint8Array.from([18])},{path:"spender",value:Uint8Array.from([18])},{path:"details.expiration",value:Uint8Array.from([18])}];beforeEach(()=>{vi.clearAllMocks(),vi.spyOn(n,"getTokenInfosPayload").mockImplementation(({address:a})=>Promise.resolve((0,t.Right)(`payload-${a}`)))}),describe("load function",()=>{it("success with referenced token",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:c,fieldsValues:s};vi.spyOn(f,"getTypedDataFilters").mockImplementation(()=>Promise.resolve((0,t.Right)({messageInfo:{displayName:"Permit2",filtersCount:4,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},filters:[{type:"token",displayName:"Amount allowance",path:"details.token.[]",tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"},{type:"amount",displayName:"Amount allowance",path:"details.amount",tokenIndex:0,signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3"},{type:"raw",displayName:"Approve to spender",path:"spender",signature:"3044022033e5713d9cb9bc375b56a9fb53b736c81ea3c4ac5cfb2d3ca7f8b8f0558fe2430220543ca4fef6d6f725f29e343f167fe9dd582aa856ecb5797259050eb990a1befb"},{type:"datetime",displayName:"Approval expire",path:"details.expiration",signature:"3044022056b3381e4540629ad73bc434ec49d80523234b82f62340fbb77157fb0eb21a680220459fe9cf6ca309f9c7dfc6d4711fea1848dba661563c57f77b3c2dc480b3a63b"}]})));const e=await d.load(a);expect(e).toEqual({type:"success",messageInfo:{displayName:"Permit2",filtersCount:4,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{},tokens:{0:"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"},filters:{"details.amount":{displayName:"Amount allowance",path:"details.amount",signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3",tokenIndex:0,type:"amount"},"details.expiration":{displayName:"Approval expire",path:"details.expiration",signature:"3044022056b3381e4540629ad73bc434ec49d80523234b82f62340fbb77157fb0eb21a680220459fe9cf6ca309f9c7dfc6d4711fea1848dba661563c57f77b3c2dc480b3a63b",type:"datetime"},"details.token.[]":{displayName:"Amount allowance",path:"details.token.[]",signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733",tokenIndex:0,type:"token"},spender:{displayName:"Approve to spender",path:"spender",signature:"3044022033e5713d9cb9bc375b56a9fb53b736c81ea3c4ac5cfb2d3ca7f8b8f0558fe2430220543ca4fef6d6f725f29e343f167fe9dd582aa856ecb5797259050eb990a1befb",type:"raw"}}})}),it("success with referenced token verifying contract",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:c,fieldsValues:s};vi.spyOn(f,"getTypedDataFilters").mockImplementation(()=>Promise.resolve((0,t.Right)({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},filters:[{type:"token",displayName:"Amount allowance",path:"details.token.[]",tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"},{type:"amount",displayName:"Amount allowance",path:"details.amount",tokenIndex:255,signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3"}]})));const e=await d.load(a);expect(e).toEqual({type:"success",messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{},tokens:{0:"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",255:"payload-0x000000000022d473030f116ddee9f6b43ac78ba3"},filters:{"details.amount":{displayName:"Amount allowance",path:"details.amount",signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3",tokenIndex:255,type:"amount"},"details.token.[]":{displayName:"Amount allowance",path:"details.token.[]",signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733",tokenIndex:0,type:"token"}}})}),it("should return an error if filters are unavailable",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:c,fieldsValues:s};vi.spyOn(f,"getTypedDataFilters").mockImplementation(()=>Promise.resolve((0,t.Left)(new Error("error"))));const e=await d.load(a);expect(e).toEqual({type:"error",error:new Error("error")})}),it("success with a trusted name",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:c,fieldsValues:s};vi.spyOn(f,"getTypedDataFilters").mockImplementation(()=>Promise.resolve((0,t.Right)({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},filters:[{type:"trusted-name",displayName:"Amount allowance",path:"details.token.[]",signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733",types:["contract"],sources:["local","ens"],typesAndSourcesPayload:"010203010002"}]})));const e=await d.load(a);expect(e).toEqual({type:"success",messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{"details.token.[]":"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"},tokens:{},filters:{"details.token.[]":{displayName:"Amount allowance",path:"details.token.[]",signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733",types:["contract"],sources:["local","ens"],typesAndSourcesPayload:"010203010002",type:"trusted-name"}}})}),it("success with unavailable tokens",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:c,fieldsValues:s};vi.spyOn(f,"getTypedDataFilters").mockImplementation(()=>Promise.resolve((0,t.Right)({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},filters:[{type:"token",displayName:"Amount allowance",path:"details.token.[]",tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"}]}))),vi.spyOn(n,"getTokenInfosPayload").mockImplementation(()=>Promise.resolve((0,t.Left)(new Error("token error"))));const e=await d.load(a);expect(e).toEqual({type:"success",messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{},tokens:{},filters:{"details.token.[]":{displayName:"Amount allowance",path:"details.token.[]",signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733",tokenIndex:0,type:"token"}}})}),it("success with several identic tokens",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:c,fieldsValues:[{path:"details.token.[]",value:Uint8Array.from([124,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,25])},...s]};vi.spyOn(f,"getTypedDataFilters").mockImplementation(()=>Promise.resolve((0,t.Right)({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},filters:[{type:"token",displayName:"Amount allowance",path:"details.token.[]",tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"}]}))),vi.spyOn(n,"getTokenInfosPayload").mockImplementation(()=>Promise.resolve((0,t.Left)(new Error("token error"))));const e=await d.load(a);expect(n.getTokenInfosPayload).toHaveBeenCalledWith({address:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",chainId:1}),expect(e.type).toEqual("success")}),it("success with several different tokens",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:c,fieldsValues:[{path:"details.token.[]",value:Uint8Array.from([124,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,255])},...s]};vi.spyOn(f,"getTypedDataFilters").mockImplementation(()=>Promise.resolve((0,t.Right)({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},filters:[{type:"token",displayName:"Amount allowance",path:"details.token.[]",tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"}]})));const e=await d.load(a);expect(n.getTokenInfosPayload).not.toHaveBeenCalledWith({address:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f6ff",chainId:1}),expect(n.getTokenInfosPayload).not.toHaveBeenCalledWith({address:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",chainId:1}),expect(e.type).toEqual("success")}),it("should ignore the token if value is not found",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:c,fieldsValues:s};vi.spyOn(f,"getTypedDataFilters").mockImplementation(()=>Promise.resolve((0,t.Right)({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},filters:[{type:"token",displayName:"Amount allowance",path:"details.badtoken",tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"}]})));const e=await d.load(a);expect(e.type).toEqual("success"),e.type==="success"&&(expect(e.filters["details.badtoken"]?.displayName).toEqual("Amount allowance"),expect(e.tokens).toEqual({}))})})});
1
+ "use strict";var c=require("@ledgerhq/device-management-kit"),d=require("purify-ts"),i=require("../../shared/model/ClearSignContext"),s=require("../../shared/model/TypedDataClearSignContext"),u=require("../../typed-data/domain/DefaultTypedDataContextLoader");describe("TypedDataContextLoader",()=>{const o=vi.fn(),r=vi.fn(),t=vi.fn(),l={getTokenInfosPayload:vi.fn()},m={getTypedDataFilters:t},y={getProxyImplementationAddress:o},g={loadCertificate:r},f=new u.DefaultTypedDataContextLoader(m,l,y,g),n={PermitSingle:[{name:"details",type:"PermitDetails"},{name:"spender",type:"address"},{name:"sigDeadline",type:"uint256"}],PermitDetails:[{type:"address[]",name:"token"},{name:"amount",type:"uint160"},{name:"expiration",type:"uint48"},{name:"nonce",type:"uint48"}],EIP712Domain:[{name:"name",type:"string"},{name:"chainId",type:"uint256"},{name:"verifyingContract",type:"address"}]},b=[{path:"details.token.[]",value:Uint8Array.from([124,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,25])},{path:"details.amount",value:Uint8Array.from([18])},{path:"spender",value:Uint8Array.from([18])},{path:"details.expiration",value:Uint8Array.from([18])}],p={SafeTx:[{name:"to",type:"address"},{name:"spender",type:"address"},{name:"value",type:"uint256"},{name:"data",type:"bytes"},{name:"selector",type:"bytes"},{name:"chainId",type:"uint256"},{name:"operation",type:"uint8"}],EIP712Domain:[{name:"chainId",type:"uint256"},{name:"verifyingContract",type:"address"}]},x=[{path:"to",value:Uint8Array.from([124,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,25])},{path:"spender",value:Uint8Array.from([140,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,25])},{path:"value",value:Uint8Array.from([14,235,224,180,14,128,0])},{path:"data",value:Uint8Array.from([106,118,18,2,0,0,0,0,0,0,0,0,0,0,0,0,35,248,171,252,40,36,195,151,204,179,218,137,174,119,41,132,16,125,219,153])},{path:"selector",value:Uint8Array.from([119,136,153,170])},{path:"chainId",value:Uint8Array.from([18,52])},{path:"operation",value:Uint8Array.from([1])}];beforeEach(()=>{vi.clearAllMocks(),vi.spyOn(l,"getTokenInfosPayload").mockImplementation(({address:a})=>Promise.resolve((0,d.Right)(`payload-${a}`))),o.mockResolvedValue((0,d.Left)(new Error("No proxy")))}),describe("load function",()=>{it("success with referenced token",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:b,deviceModelId:c.DeviceModelId.STAX};t.mockResolvedValueOnce(Promise.resolve((0,d.Right)({messageInfo:{displayName:"Permit2",filtersCount:4,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[{type:"token",displayName:"Amount allowance",path:"details.token.[]",tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"},{type:"amount",displayName:"Amount allowance",path:"details.amount",tokenIndex:0,signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3"},{type:"raw",displayName:"Approve to spender",path:"spender",signature:"3044022033e5713d9cb9bc375b56a9fb53b736c81ea3c4ac5cfb2d3ca7f8b8f0558fe2430220543ca4fef6d6f725f29e343f167fe9dd582aa856ecb5797259050eb990a1befb"},{type:"datetime",displayName:"Approval expire",path:"details.expiration",signature:"3044022056b3381e4540629ad73bc434ec49d80523234b82f62340fbb77157fb0eb21a680220459fe9cf6ca309f9c7dfc6d4711fea1848dba661563c57f77b3c2dc480b3a63b"}]})));const e=await f.load(a);expect(t).toHaveBeenCalledWith(expect.objectContaining({address:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1})),expect(e).toEqual({type:"success",messageInfo:{displayName:"Permit2",filtersCount:4,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{},tokens:{0:"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"},calldatas:{},proxy:void 0,filters:{"details.amount":{displayName:"Amount allowance",path:"details.amount",signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3",tokenIndex:0,type:"amount"},"details.expiration":{displayName:"Approval expire",path:"details.expiration",signature:"3044022056b3381e4540629ad73bc434ec49d80523234b82f62340fbb77157fb0eb21a680220459fe9cf6ca309f9c7dfc6d4711fea1848dba661563c57f77b3c2dc480b3a63b",type:"datetime"},"details.token.[]":{displayName:"Amount allowance",path:"details.token.[]",signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733",tokenIndex:0,type:"token"},spender:{displayName:"Approve to spender",path:"spender",signature:"3044022033e5713d9cb9bc375b56a9fb53b736c81ea3c4ac5cfb2d3ca7f8b8f0558fe2430220543ca4fef6d6f725f29e343f167fe9dd582aa856ecb5797259050eb990a1befb",type:"raw"}}})}),it("success with referenced token verifying contract",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:b,deviceModelId:c.DeviceModelId.STAX};t.mockResolvedValueOnce(Promise.resolve((0,d.Right)({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[{type:"token",displayName:"Amount allowance",path:"details.token.[]",tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"},{type:"amount",displayName:"Amount allowance",path:"details.amount",tokenIndex:255,signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3"}]})));const e=await f.load(a);expect(e).toEqual({type:"success",messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{},tokens:{0:"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",255:"payload-0x000000000022d473030f116ddee9f6b43ac78ba3"},calldatas:{},proxy:void 0,filters:{"details.amount":{displayName:"Amount allowance",path:"details.amount",signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3",tokenIndex:255,type:"amount"},"details.token.[]":{displayName:"Amount allowance",path:"details.token.[]",signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733",tokenIndex:0,type:"token"}}})}),it("success with calldata",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:p,challenge:"1234",fieldsValues:x,deviceModelId:c.DeviceModelId.STAX};t.mockResolvedValueOnce(Promise.resolve((0,d.Right)({messageInfo:{displayName:"Multisig transaction",filtersCount:4,signature:"304402206553ac5a2ce6bb17b94f3ec559fb037af0b742d62c001d8938aad709accd71ed022075ce87c3eb65e605f0ce0b2bc4bf960498bacf109a499807d1a7906d9c78c9c4"},calldatasInfos:{0:{calldataIndex:0,displayName:"Transaction",valueFlag:!0,calleeFlag:s.TypedDataCalldataParamPresence.Present,chainIdFlag:!1,selectorFlag:!1,amountFlag:!0,spenderFlag:s.TypedDataCalldataParamPresence.Present,signature:"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"}},filters:[{type:"raw",displayName:"Operation type",path:"operation",signature:"3045022100fb9f3e7bab8ac0cd9a5722389a19d1ebdd39d7a6da6e374724a46eebee6896bc022070e991bb022111ed448540511b7fa4f70d5e92b0a3866d75cfc9d3cf1cf75d9b"},{type:"calldata-value",displayName:"Transaction",path:"data",calldataIndex:0,signature:"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a"},{type:"calldata-callee",displayName:"Transaction",path:"to",calldataIndex:0,signature:"30440220796cc549e363c5bc9f9d5bda894cf4cda11f157519f673d2b4a8b3ce716a8fba0220663c888d764084072856fe654ff425bffe671c2550068c64be9eddd6c84178b8"},{type:"calldata-amount",displayName:"Transaction",path:"value",calldataIndex:0,signature:"3044022021601a55098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f"},{type:"calldata-chain-id",displayName:"Transaction",path:"chainId",calldataIndex:0,signature:"3044022021601a56098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f"},{type:"calldata-selector",displayName:"Transaction",path:"selector",calldataIndex:0,signature:"3044022021601a57098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f"},{type:"calldata-spender",displayName:"Transaction",path:"spender",calldataIndex:0,signature:"3044022021601a58098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f"}]})));const e=await f.load(a);expect(e).toEqual({type:"success",messageInfo:{displayName:"Multisig transaction",filtersCount:4,signature:"304402206553ac5a2ce6bb17b94f3ec559fb037af0b742d62c001d8938aad709accd71ed022075ce87c3eb65e605f0ce0b2bc4bf960498bacf109a499807d1a7906d9c78c9c4"},trustedNamesAddresses:{},tokens:{},calldatas:{0:{filter:{calldataIndex:0,displayName:"Transaction",valueFlag:!0,calleeFlag:s.TypedDataCalldataParamPresence.Present,chainIdFlag:!1,selectorFlag:!1,amountFlag:!0,spenderFlag:s.TypedDataCalldataParamPresence.Present,signature:"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"},subset:{chainId:4660,data:"0x6a76120200000000000000000000000023f8abfc2824c397ccb3da89ae772984107ddb99",from:"0x8ceb23fd6bc0add59e62ac25578270cff1b9f619",selector:"0x778899aa",to:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",value:4200000000000000n}}},proxy:void 0,filters:{data:{displayName:"Transaction",path:"data",signature:"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a",calldataIndex:0,type:"calldata-value"},operation:{displayName:"Operation type",path:"operation",signature:"3045022100fb9f3e7bab8ac0cd9a5722389a19d1ebdd39d7a6da6e374724a46eebee6896bc022070e991bb022111ed448540511b7fa4f70d5e92b0a3866d75cfc9d3cf1cf75d9b",type:"raw"},to:{displayName:"Transaction",path:"to",signature:"30440220796cc549e363c5bc9f9d5bda894cf4cda11f157519f673d2b4a8b3ce716a8fba0220663c888d764084072856fe654ff425bffe671c2550068c64be9eddd6c84178b8",calldataIndex:0,type:"calldata-callee"},value:{displayName:"Transaction",path:"value",signature:"3044022021601a55098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f",calldataIndex:0,type:"calldata-amount"},chainId:{displayName:"Transaction",path:"chainId",signature:"3044022021601a56098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f",calldataIndex:0,type:"calldata-chain-id"},selector:{displayName:"Transaction",path:"selector",signature:"3044022021601a57098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f",calldataIndex:0,type:"calldata-selector"},spender:{displayName:"Transaction",path:"spender",signature:"3044022021601a58098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f",calldataIndex:0,type:"calldata-spender"}}})}),it("success with several calldatas",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:p,challenge:"1234",fieldsValues:x,deviceModelId:c.DeviceModelId.STAX};t.mockResolvedValueOnce(Promise.resolve((0,d.Right)({messageInfo:{displayName:"Multisig transaction",filtersCount:4,signature:"304402206553ac5a2ce6bb17b94f3ec559fb037af0b742d62c001d8938aad709accd71ed022075ce87c3eb65e605f0ce0b2bc4bf960498bacf109a499807d1a7906d9c78c9c4"},calldatasInfos:{0:{calldataIndex:0,displayName:"Transaction",valueFlag:!0,calleeFlag:s.TypedDataCalldataParamPresence.VerifyingContract,chainIdFlag:!1,selectorFlag:!1,amountFlag:!0,spenderFlag:s.TypedDataCalldataParamPresence.VerifyingContract,signature:"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"},1:{calldataIndex:1,displayName:"Transaction 2",valueFlag:!1,calleeFlag:s.TypedDataCalldataParamPresence.VerifyingContract,chainIdFlag:!0,selectorFlag:!0,amountFlag:!1,spenderFlag:s.TypedDataCalldataParamPresence.VerifyingContract,signature:"3056122100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"}},filters:[{type:"raw",displayName:"Operation type",path:"operation",signature:"3045022100fb9f3e7bab8ac0cd9a5722389a19d1ebdd39d7a6da6e374724a46eebee6896bc022070e991bb022111ed448540511b7fa4f70d5e92b0a3866d75cfc9d3cf1cf75d9b"},{type:"calldata-value",displayName:"Transaction",path:"data",calldataIndex:0,signature:"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a"},{type:"calldata-selector",displayName:"Transaction",path:"selector",calldataIndex:1,signature:"3044022021601a57098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f"}]})));const e=await f.load(a);expect(e).toEqual({type:"success",messageInfo:{displayName:"Multisig transaction",filtersCount:4,signature:"304402206553ac5a2ce6bb17b94f3ec559fb037af0b742d62c001d8938aad709accd71ed022075ce87c3eb65e605f0ce0b2bc4bf960498bacf109a499807d1a7906d9c78c9c4"},trustedNamesAddresses:{},tokens:{},calldatas:{0:{filter:{calldataIndex:0,displayName:"Transaction",valueFlag:!0,calleeFlag:s.TypedDataCalldataParamPresence.VerifyingContract,chainIdFlag:!1,selectorFlag:!1,amountFlag:!0,spenderFlag:s.TypedDataCalldataParamPresence.VerifyingContract,signature:"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"},subset:{chainId:1,data:"0x6a76120200000000000000000000000023f8abfc2824c397ccb3da89ae772984107ddb99",from:"0x000000000022d473030f116ddee9f6b43ac78ba3",selector:"0x6a761202",to:"0x000000000022d473030f116ddee9f6b43ac78ba3",value:void 0}},1:{filter:{calldataIndex:1,displayName:"Transaction 2",valueFlag:!1,calleeFlag:s.TypedDataCalldataParamPresence.VerifyingContract,chainIdFlag:!0,selectorFlag:!0,amountFlag:!1,spenderFlag:s.TypedDataCalldataParamPresence.VerifyingContract,signature:"3056122100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"},subset:{chainId:1,data:"0x",from:"0x000000000022d473030f116ddee9f6b43ac78ba3",selector:"0x778899aa",to:"0x000000000022d473030f116ddee9f6b43ac78ba3",value:void 0}}},proxy:void 0,filters:{data:{displayName:"Transaction",path:"data",signature:"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a",calldataIndex:0,type:"calldata-value"},selector:{displayName:"Transaction",path:"selector",signature:"3044022021601a57098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f",calldataIndex:1,type:"calldata-selector"},operation:{displayName:"Operation type",path:"operation",signature:"3045022100fb9f3e7bab8ac0cd9a5722389a19d1ebdd39d7a6da6e374724a46eebee6896bc022070e991bb022111ed448540511b7fa4f70d5e92b0a3866d75cfc9d3cf1cf75d9b",type:"raw"}}})}),it("success with proxy",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:b,deviceModelId:c.DeviceModelId.STAX};o.mockResolvedValueOnce((0,d.Right)({implementationAddress:"0x987654321fedcba0",signedDescriptor:"0x123456789abcdef0",keyId:"testKeyId",KeyUsage:"testKeyUsage"})),r.mockResolvedValue(void 0),t.mockResolvedValueOnce(Promise.resolve((0,d.Left)(new Error("error")))).mockResolvedValueOnce(Promise.resolve((0,d.Right)({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[]})));const e=await f.load(a);expect(t).toHaveBeenCalledTimes(2),expect(t).toHaveBeenLastCalledWith(expect.objectContaining({address:"0x987654321fedcba0",chainId:1})),expect(e).toEqual({type:"success",messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{},tokens:{},calldatas:{},proxy:{type:i.ClearSignContextType.PROXY_INFO,payload:"0x123456789abcdef0",certificate:void 0},filters:{}})}),it("success with proxy and certificate",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:b,deviceModelId:c.DeviceModelId.STAX};o.mockResolvedValueOnce((0,d.Right)({implementationAddress:"0x987654321fedcba0",signedDescriptor:"0x123456789abcdef0",keyId:"testKeyId",KeyUsage:"testKeyUsage"})),r.mockResolvedValue({keyUsageNumber:1,payload:new Uint8Array([1,2,3,4])}),t.mockResolvedValueOnce(Promise.resolve((0,d.Left)(new Error("error")))).mockResolvedValueOnce(Promise.resolve((0,d.Right)({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[]})));const e=await f.load(a);expect(t).toHaveBeenCalledTimes(2),expect(t).toHaveBeenLastCalledWith(expect.objectContaining({address:"0x987654321fedcba0",chainId:1})),expect(e).toEqual({type:"success",messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{},tokens:{},calldatas:{},proxy:{type:i.ClearSignContextType.PROXY_INFO,payload:"0x123456789abcdef0",certificate:{keyUsageNumber:1,payload:new Uint8Array([1,2,3,4])}},filters:{}})}),it("should return an error if filters are unavailable",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:b,deviceModelId:c.DeviceModelId.STAX};t.mockResolvedValueOnce(Promise.resolve((0,d.Left)(new Error("error"))));const e=await f.load(a);expect(t).toHaveBeenCalledTimes(1),expect(e).toEqual({type:"error",error:new Error("error")})}),it("should return an error if filters are unavailable in the proxy",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:b,deviceModelId:c.DeviceModelId.STAX};o.mockResolvedValueOnce((0,d.Right)({delegateAddresses:["0x987654321fedcba0"],signedDescriptor:"0x123456789abcdef0"})),r.mockResolvedValue(void 0),t.mockResolvedValueOnce(Promise.resolve((0,d.Left)(new Error("error")))).mockResolvedValueOnce(Promise.resolve((0,d.Left)(new Error("error"))));const e=await f.load(a);expect(t).toHaveBeenCalledTimes(2),expect(e).toEqual({type:"error",error:new Error("error")})}),it("success with a trusted name",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:b,deviceModelId:c.DeviceModelId.STAX};t.mockResolvedValueOnce(Promise.resolve((0,d.Right)({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[{type:"trusted-name",displayName:"Amount allowance",path:"details.token.[]",signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733",types:["contract"],sources:["local","ens"],typesAndSourcesPayload:"010203010002"}]})));const e=await f.load(a);expect(e).toEqual({type:"success",messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{"details.token.[]":"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"},tokens:{},calldatas:{},filters:{"details.token.[]":{displayName:"Amount allowance",path:"details.token.[]",signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733",types:["contract"],sources:["local","ens"],typesAndSourcesPayload:"010203010002",type:"trusted-name"}}})}),it("success with unavailable tokens",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:b,deviceModelId:c.DeviceModelId.STAX};t.mockResolvedValueOnce(Promise.resolve((0,d.Right)({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[{type:"token",displayName:"Amount allowance",path:"details.token.[]",tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"}]}))),vi.spyOn(l,"getTokenInfosPayload").mockImplementation(()=>Promise.resolve((0,d.Left)(new Error("token error"))));const e=await f.load(a);expect(e).toEqual({type:"success",messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{},tokens:{},calldatas:{},filters:{"details.token.[]":{displayName:"Amount allowance",path:"details.token.[]",signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733",tokenIndex:0,type:"token"}}})}),it("success with several identic tokens",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:[{path:"details.token.[]",value:Uint8Array.from([124,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,25])},...b],deviceModelId:c.DeviceModelId.STAX};t.mockResolvedValueOnce(Promise.resolve((0,d.Right)({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[{type:"token",displayName:"Amount allowance",path:"details.token.[]",tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"}]}))),vi.spyOn(l,"getTokenInfosPayload").mockImplementation(()=>Promise.resolve((0,d.Left)(new Error("token error"))));const e=await f.load(a);expect(l.getTokenInfosPayload).toHaveBeenCalledWith({address:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",chainId:1}),expect(e.type).toEqual("success")}),it("success with several different tokens",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:[{path:"details.token.[]",value:Uint8Array.from([124,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,255])},...b],deviceModelId:c.DeviceModelId.STAX};t.mockResolvedValueOnce(Promise.resolve((0,d.Right)({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[{type:"token",displayName:"Amount allowance",path:"details.token.[]",tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"}]})));const e=await f.load(a);expect(l.getTokenInfosPayload).not.toHaveBeenCalledWith({address:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f6ff",chainId:1}),expect(l.getTokenInfosPayload).not.toHaveBeenCalledWith({address:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",chainId:1}),expect(e.type).toEqual("success")}),it("should ignore the token if value is not found",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:b,deviceModelId:c.DeviceModelId.STAX};t.mockResolvedValueOnce(Promise.resolve((0,d.Right)({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[{type:"token",displayName:"Amount allowance",path:"details.badtoken",tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"}]})));const e=await f.load(a);expect(e.type).toEqual("success"),e.type==="success"&&(expect(e.filters["details.badtoken"]?.displayName).toEqual("Amount allowance"),expect(e.tokens).toEqual({}))})})});
2
2
  //# sourceMappingURL=DefaultTypedDataContextLoader.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/typed-data/domain/DefaultTypedDataContextLoader.test.ts"],
4
- "sourcesContent": ["import { Left, Right } from \"purify-ts\";\n\nimport type { TypedDataContext } from \"@/shared/model/TypedDataContext\";\nimport type { TokenDataSource } from \"@/token/data/TokenDataSource\";\nimport type { TypedDataDataSource } from \"@/typed-data/data/TypedDataDataSource\";\nimport { DefaultTypedDataContextLoader } from \"@/typed-data/domain/DefaultTypedDataContextLoader\";\n\ndescribe(\"TokenContextLoader\", () => {\n const mockTokenDataSource: TokenDataSource = {\n getTokenInfosPayload: vi.fn(),\n };\n const mockTypedDataDataSource: TypedDataDataSource = {\n getTypedDataFilters: vi.fn(),\n };\n const loader = new DefaultTypedDataContextLoader(\n mockTypedDataDataSource,\n mockTokenDataSource,\n );\n\n const TEST_TYPES = {\n PermitSingle: [\n {\n name: \"details\",\n type: \"PermitDetails\",\n },\n {\n name: \"spender\",\n type: \"address\",\n },\n {\n name: \"sigDeadline\",\n type: \"uint256\",\n },\n ],\n PermitDetails: [\n {\n type: \"address[]\",\n name: \"token\",\n },\n {\n name: \"amount\",\n type: \"uint160\",\n },\n {\n name: \"expiration\",\n type: \"uint48\",\n },\n {\n name: \"nonce\",\n type: \"uint48\",\n },\n ],\n EIP712Domain: [\n {\n name: \"name\",\n type: \"string\",\n },\n {\n name: \"chainId\",\n type: \"uint256\",\n },\n {\n name: \"verifyingContract\",\n type: \"address\",\n },\n ],\n };\n const TEST_VALUES = [\n {\n path: \"details.token.[]\",\n value: Uint8Array.from([\n 0x7c, 0xeb, 0x23, 0xfd, 0x6b, 0xc0, 0xad, 0xd5, 0x9e, 0x62, 0xac, 0x25,\n 0x57, 0x82, 0x70, 0xcf, 0xf1, 0xb9, 0xf6, 0x19,\n ]),\n },\n {\n path: \"details.amount\",\n value: Uint8Array.from([0x12]),\n },\n {\n path: \"spender\",\n value: Uint8Array.from([0x12]),\n },\n {\n path: \"details.expiration\",\n value: Uint8Array.from([0x12]),\n },\n ];\n\n beforeEach(() => {\n vi.clearAllMocks();\n vi.spyOn(mockTokenDataSource, \"getTokenInfosPayload\").mockImplementation(\n ({ address }) => Promise.resolve(Right(`payload-${address}`)),\n );\n });\n\n describe(\"load function\", () => {\n it(\"success with referenced token\", async () => {\n // GIVEN\n const ctx = {\n verifyingContract: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n chainId: 1,\n version: \"v2\",\n schema: TEST_TYPES,\n fieldsValues: TEST_VALUES,\n } as TypedDataContext;\n vi.spyOn(\n mockTypedDataDataSource,\n \"getTypedDataFilters\",\n ).mockImplementation(() =>\n Promise.resolve(\n Right({\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 4,\n signature:\n \"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3\",\n },\n filters: [\n {\n type: \"token\",\n displayName: \"Amount allowance\",\n path: \"details.token.[]\",\n tokenIndex: 0,\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n },\n {\n type: \"amount\",\n displayName: \"Amount allowance\",\n path: \"details.amount\",\n tokenIndex: 0,\n signature:\n \"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n },\n {\n type: \"raw\",\n displayName: \"Approve to spender\",\n path: \"spender\",\n signature:\n \"3044022033e5713d9cb9bc375b56a9fb53b736c81ea3c4ac5cfb2d3ca7f8b8f0558fe2430220543ca4fef6d6f725f29e343f167fe9dd582aa856ecb5797259050eb990a1befb\",\n },\n {\n type: \"datetime\",\n displayName: \"Approval expire\",\n path: \"details.expiration\",\n signature:\n \"3044022056b3381e4540629ad73bc434ec49d80523234b82f62340fbb77157fb0eb21a680220459fe9cf6ca309f9c7dfc6d4711fea1848dba661563c57f77b3c2dc480b3a63b\",\n },\n ],\n }),\n ),\n );\n\n // WHEN\n const result = await loader.load(ctx);\n\n // THEN\n expect(result).toEqual({\n type: \"success\",\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 4,\n signature:\n \"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3\",\n },\n trustedNamesAddresses: {},\n tokens: {\n 0: \"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\",\n },\n filters: {\n \"details.amount\": {\n displayName: \"Amount allowance\",\n path: \"details.amount\",\n signature:\n \"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n tokenIndex: 0,\n type: \"amount\",\n },\n \"details.expiration\": {\n displayName: \"Approval expire\",\n path: \"details.expiration\",\n signature:\n \"3044022056b3381e4540629ad73bc434ec49d80523234b82f62340fbb77157fb0eb21a680220459fe9cf6ca309f9c7dfc6d4711fea1848dba661563c57f77b3c2dc480b3a63b\",\n type: \"datetime\",\n },\n \"details.token.[]\": {\n displayName: \"Amount allowance\",\n path: \"details.token.[]\",\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n tokenIndex: 0,\n type: \"token\",\n },\n spender: {\n displayName: \"Approve to spender\",\n path: \"spender\",\n signature:\n \"3044022033e5713d9cb9bc375b56a9fb53b736c81ea3c4ac5cfb2d3ca7f8b8f0558fe2430220543ca4fef6d6f725f29e343f167fe9dd582aa856ecb5797259050eb990a1befb\",\n type: \"raw\",\n },\n },\n });\n });\n\n it(\"success with referenced token verifying contract\", async () => {\n // GIVEN\n const ctx = {\n verifyingContract: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n chainId: 1,\n version: \"v2\",\n schema: TEST_TYPES,\n fieldsValues: TEST_VALUES,\n } as TypedDataContext;\n vi.spyOn(\n mockTypedDataDataSource,\n \"getTypedDataFilters\",\n ).mockImplementation(() =>\n Promise.resolve(\n Right({\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 2,\n signature:\n \"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3\",\n },\n filters: [\n {\n type: \"token\",\n displayName: \"Amount allowance\",\n path: \"details.token.[]\",\n tokenIndex: 0,\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n },\n {\n type: \"amount\",\n displayName: \"Amount allowance\",\n path: \"details.amount\",\n tokenIndex: 255,\n signature:\n \"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n },\n ],\n }),\n ),\n );\n\n // WHEN\n const result = await loader.load(ctx);\n\n // THEN\n expect(result).toEqual({\n type: \"success\",\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 2,\n signature:\n \"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3\",\n },\n trustedNamesAddresses: {},\n tokens: {\n 0: \"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\",\n 255: \"payload-0x000000000022d473030f116ddee9f6b43ac78ba3\",\n },\n filters: {\n \"details.amount\": {\n displayName: \"Amount allowance\",\n path: \"details.amount\",\n signature:\n \"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n tokenIndex: 255,\n type: \"amount\",\n },\n \"details.token.[]\": {\n displayName: \"Amount allowance\",\n path: \"details.token.[]\",\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n tokenIndex: 0,\n type: \"token\",\n },\n },\n });\n });\n\n it(\"should return an error if filters are unavailable\", async () => {\n // GIVEN\n const ctx = {\n verifyingContract: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n chainId: 1,\n version: \"v2\",\n schema: TEST_TYPES,\n fieldsValues: TEST_VALUES,\n } as TypedDataContext;\n vi.spyOn(\n mockTypedDataDataSource,\n \"getTypedDataFilters\",\n ).mockImplementation(() => Promise.resolve(Left(new Error(\"error\"))));\n\n // WHEN\n const result = await loader.load(ctx);\n\n // THEN\n expect(result).toEqual({\n type: \"error\",\n error: new Error(\"error\"),\n });\n });\n\n it(\"success with a trusted name\", async () => {\n // GIVEN\n const ctx = {\n verifyingContract: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n chainId: 1,\n version: \"v2\",\n schema: TEST_TYPES,\n fieldsValues: TEST_VALUES,\n } as TypedDataContext;\n vi.spyOn(\n mockTypedDataDataSource,\n \"getTypedDataFilters\",\n ).mockImplementation(() =>\n Promise.resolve(\n Right({\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 2,\n signature:\n \"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3\",\n },\n filters: [\n {\n type: \"trusted-name\",\n displayName: \"Amount allowance\",\n path: \"details.token.[]\",\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n types: [\"contract\"],\n sources: [\"local\", \"ens\"],\n typesAndSourcesPayload: \"010203010002\",\n },\n ],\n }),\n ),\n );\n\n // WHEN\n const result = await loader.load(ctx);\n\n // THEN\n expect(result).toEqual({\n type: \"success\",\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 2,\n signature:\n \"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3\",\n },\n trustedNamesAddresses: {\n \"details.token.[]\": \"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\",\n },\n tokens: {},\n filters: {\n \"details.token.[]\": {\n displayName: \"Amount allowance\",\n path: \"details.token.[]\",\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n types: [\"contract\"],\n sources: [\"local\", \"ens\"],\n typesAndSourcesPayload: \"010203010002\",\n type: \"trusted-name\",\n },\n },\n });\n });\n\n it(\"success with unavailable tokens\", async () => {\n // GIVEN\n const ctx = {\n verifyingContract: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n chainId: 1,\n version: \"v2\",\n schema: TEST_TYPES,\n fieldsValues: TEST_VALUES,\n } as TypedDataContext;\n vi.spyOn(\n mockTypedDataDataSource,\n \"getTypedDataFilters\",\n ).mockImplementation(() =>\n Promise.resolve(\n Right({\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 2,\n signature:\n \"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3\",\n },\n filters: [\n {\n type: \"token\",\n displayName: \"Amount allowance\",\n path: \"details.token.[]\",\n tokenIndex: 0,\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n },\n ],\n }),\n ),\n );\n vi.spyOn(mockTokenDataSource, \"getTokenInfosPayload\").mockImplementation(\n () => Promise.resolve(Left(new Error(\"token error\"))),\n );\n\n // WHEN\n const result = await loader.load(ctx);\n\n // THEN\n expect(result).toEqual({\n type: \"success\",\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 2,\n signature:\n \"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3\",\n },\n trustedNamesAddresses: {},\n tokens: {},\n filters: {\n \"details.token.[]\": {\n displayName: \"Amount allowance\",\n path: \"details.token.[]\",\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n tokenIndex: 0,\n type: \"token\",\n },\n },\n });\n });\n\n it(\"success with several identic tokens\", async () => {\n // GIVEN\n const ctx = {\n verifyingContract: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n chainId: 1,\n version: \"v2\",\n schema: TEST_TYPES,\n fieldsValues: [\n {\n path: \"details.token.[]\",\n value: Uint8Array.from([\n 0x7c, 0xeb, 0x23, 0xfd, 0x6b, 0xc0, 0xad, 0xd5, 0x9e, 0x62, 0xac,\n 0x25, 0x57, 0x82, 0x70, 0xcf, 0xf1, 0xb9, 0xf6, 0x19,\n ]),\n },\n ...TEST_VALUES,\n ],\n } as TypedDataContext;\n vi.spyOn(\n mockTypedDataDataSource,\n \"getTypedDataFilters\",\n ).mockImplementation(() =>\n Promise.resolve(\n Right({\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 2,\n signature:\n \"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3\",\n },\n filters: [\n {\n type: \"token\",\n displayName: \"Amount allowance\",\n path: \"details.token.[]\",\n tokenIndex: 0,\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n },\n ],\n }),\n ),\n );\n vi.spyOn(mockTokenDataSource, \"getTokenInfosPayload\").mockImplementation(\n () => Promise.resolve(Left(new Error(\"token error\"))),\n );\n\n // WHEN\n const result = await loader.load(ctx);\n\n // THEN\n expect(mockTokenDataSource.getTokenInfosPayload).toHaveBeenCalledWith({\n address: \"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\",\n chainId: 1,\n });\n expect(result.type).toEqual(\"success\");\n });\n\n it(\"success with several different tokens\", async () => {\n // GIVEN\n const ctx = {\n verifyingContract: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n chainId: 1,\n version: \"v2\",\n schema: TEST_TYPES,\n fieldsValues: [\n {\n path: \"details.token.[]\",\n value: Uint8Array.from([\n 0x7c, 0xeb, 0x23, 0xfd, 0x6b, 0xc0, 0xad, 0xd5, 0x9e, 0x62, 0xac,\n 0x25, 0x57, 0x82, 0x70, 0xcf, 0xf1, 0xb9, 0xf6, 0xff,\n ]),\n },\n ...TEST_VALUES,\n ],\n } as TypedDataContext;\n vi.spyOn(\n mockTypedDataDataSource,\n \"getTypedDataFilters\",\n ).mockImplementation(() =>\n Promise.resolve(\n Right({\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 2,\n signature:\n \"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3\",\n },\n filters: [\n {\n type: \"token\",\n displayName: \"Amount allowance\",\n path: \"details.token.[]\",\n tokenIndex: 0,\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n },\n ],\n }),\n ),\n );\n // WHEN\n const result = await loader.load(ctx);\n\n // THEN\n expect(mockTokenDataSource.getTokenInfosPayload).not.toHaveBeenCalledWith(\n { address: \"0x7ceb23fd6bc0add59e62ac25578270cff1b9f6ff\", chainId: 1 },\n );\n expect(mockTokenDataSource.getTokenInfosPayload).not.toHaveBeenCalledWith(\n { address: \"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\", chainId: 1 },\n );\n expect(result.type).toEqual(\"success\");\n });\n\n it(\"should ignore the token if value is not found\", async () => {\n // GIVEN\n const ctx = {\n verifyingContract: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n chainId: 1,\n version: \"v2\",\n schema: TEST_TYPES,\n fieldsValues: TEST_VALUES,\n } as TypedDataContext;\n vi.spyOn(\n mockTypedDataDataSource,\n \"getTypedDataFilters\",\n ).mockImplementation(() =>\n Promise.resolve(\n Right({\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 2,\n signature:\n \"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3\",\n },\n filters: [\n {\n type: \"token\",\n displayName: \"Amount allowance\",\n path: \"details.badtoken\",\n tokenIndex: 0,\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n },\n ],\n }),\n ),\n );\n\n // WHEN\n const result = await loader.load(ctx);\n\n // THEN\n expect(result.type).toEqual(\"success\");\n if (result.type === \"success\") {\n expect(result.filters[\"details.badtoken\"]?.[\"displayName\"]).toEqual(\n \"Amount allowance\",\n );\n expect(result.tokens).toEqual({});\n }\n });\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["import_purify_ts", "import_DefaultTypedDataContextLoader", "mockTokenDataSource", "mockTypedDataDataSource", "loader", "TEST_TYPES", "TEST_VALUES", "address", "ctx", "result"]
4
+ "sourcesContent": ["import { DeviceModelId } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { type PkiCertificateLoader } from \"@/pki/domain/PkiCertificateLoader\";\nimport type { ProxyDataSource } from \"@/proxy/data/ProxyDataSource\";\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\nimport { TypedDataCalldataParamPresence } from \"@/shared/model/TypedDataClearSignContext\";\nimport type { TypedDataContext } from \"@/shared/model/TypedDataContext\";\nimport type { TokenDataSource } from \"@/token/data/TokenDataSource\";\nimport type { TypedDataDataSource } from \"@/typed-data/data/TypedDataDataSource\";\nimport { DefaultTypedDataContextLoader } from \"@/typed-data/domain/DefaultTypedDataContextLoader\";\n\ndescribe(\"TypedDataContextLoader\", () => {\n const getProxyImplementationAddressMock = vi.fn();\n const loadCertificateMock = vi.fn();\n const getTypedDataFiltersMock = vi.fn();\n const mockTokenDataSource: TokenDataSource = {\n getTokenInfosPayload: vi.fn(),\n };\n const mockTypedDataDataSource: TypedDataDataSource = {\n getTypedDataFilters: getTypedDataFiltersMock,\n };\n const mockProxyDatasource: ProxyDataSource = {\n getProxyImplementationAddress: getProxyImplementationAddressMock,\n };\n const mockCertificateLoader: PkiCertificateLoader = {\n loadCertificate: loadCertificateMock,\n };\n const loader = new DefaultTypedDataContextLoader(\n mockTypedDataDataSource,\n mockTokenDataSource,\n mockProxyDatasource,\n mockCertificateLoader,\n );\n\n const TEST_TYPES = {\n PermitSingle: [\n {\n name: \"details\",\n type: \"PermitDetails\",\n },\n {\n name: \"spender\",\n type: \"address\",\n },\n {\n name: \"sigDeadline\",\n type: \"uint256\",\n },\n ],\n PermitDetails: [\n {\n type: \"address[]\",\n name: \"token\",\n },\n {\n name: \"amount\",\n type: \"uint160\",\n },\n {\n name: \"expiration\",\n type: \"uint48\",\n },\n {\n name: \"nonce\",\n type: \"uint48\",\n },\n ],\n EIP712Domain: [\n {\n name: \"name\",\n type: \"string\",\n },\n {\n name: \"chainId\",\n type: \"uint256\",\n },\n {\n name: \"verifyingContract\",\n type: \"address\",\n },\n ],\n };\n const TEST_VALUES = [\n {\n path: \"details.token.[]\",\n value: Uint8Array.from([\n 0x7c, 0xeb, 0x23, 0xfd, 0x6b, 0xc0, 0xad, 0xd5, 0x9e, 0x62, 0xac, 0x25,\n 0x57, 0x82, 0x70, 0xcf, 0xf1, 0xb9, 0xf6, 0x19,\n ]),\n },\n {\n path: \"details.amount\",\n value: Uint8Array.from([0x12]),\n },\n {\n path: \"spender\",\n value: Uint8Array.from([0x12]),\n },\n {\n path: \"details.expiration\",\n value: Uint8Array.from([0x12]),\n },\n ];\n\n const TEST_TYPES_CALLDATA = {\n SafeTx: [\n {\n name: \"to\",\n type: \"address\",\n },\n {\n name: \"spender\",\n type: \"address\",\n },\n {\n name: \"value\",\n type: \"uint256\",\n },\n {\n name: \"data\",\n type: \"bytes\",\n },\n {\n name: \"selector\",\n type: \"bytes\",\n },\n {\n name: \"chainId\",\n type: \"uint256\",\n },\n {\n name: \"operation\",\n type: \"uint8\",\n },\n ],\n EIP712Domain: [\n {\n name: \"chainId\",\n type: \"uint256\",\n },\n {\n name: \"verifyingContract\",\n type: \"address\",\n },\n ],\n };\n const TEST_VALUES_CALLDATA = [\n {\n path: \"to\",\n value: Uint8Array.from([\n 0x7c, 0xeb, 0x23, 0xfd, 0x6b, 0xc0, 0xad, 0xd5, 0x9e, 0x62, 0xac, 0x25,\n 0x57, 0x82, 0x70, 0xcf, 0xf1, 0xb9, 0xf6, 0x19,\n ]),\n },\n {\n path: \"spender\",\n value: Uint8Array.from([\n 0x8c, 0xeb, 0x23, 0xfd, 0x6b, 0xc0, 0xad, 0xd5, 0x9e, 0x62, 0xac, 0x25,\n 0x57, 0x82, 0x70, 0xcf, 0xf1, 0xb9, 0xf6, 0x19,\n ]),\n },\n {\n path: \"value\",\n value: Uint8Array.from([0x0e, 0xeb, 0xe0, 0xb4, 0x0e, 0x80, 0x00]),\n },\n {\n path: \"data\",\n value: Uint8Array.from([\n 0x6a, 0x76, 0x12, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x23, 0xf8, 0xab, 0xfc, 0x28, 0x24, 0xc3, 0x97,\n 0xcc, 0xb3, 0xda, 0x89, 0xae, 0x77, 0x29, 0x84, 0x10, 0x7d, 0xdb, 0x99,\n ]),\n },\n {\n path: \"selector\",\n value: Uint8Array.from([0x77, 0x88, 0x99, 0xaa]),\n },\n {\n path: \"chainId\",\n value: Uint8Array.from([0x12, 0x34]),\n },\n {\n path: \"operation\",\n value: Uint8Array.from([0x1]),\n },\n ];\n\n beforeEach(() => {\n vi.clearAllMocks();\n vi.spyOn(mockTokenDataSource, \"getTokenInfosPayload\").mockImplementation(\n ({ address }) => Promise.resolve(Right(`payload-${address}`)),\n );\n getProxyImplementationAddressMock.mockResolvedValue(\n Left(new Error(\"No proxy\")),\n );\n });\n\n describe(\"load function\", () => {\n it(\"success with referenced token\", async () => {\n // GIVEN\n const ctx = {\n verifyingContract: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n chainId: 1,\n version: \"v2\",\n schema: TEST_TYPES,\n challenge: \"1234\",\n fieldsValues: TEST_VALUES,\n deviceModelId: DeviceModelId.STAX,\n } as TypedDataContext;\n getTypedDataFiltersMock.mockResolvedValueOnce(\n Promise.resolve(\n Right({\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 4,\n signature:\n \"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3\",\n },\n calldatasInfos: {},\n filters: [\n {\n type: \"token\",\n displayName: \"Amount allowance\",\n path: \"details.token.[]\",\n tokenIndex: 0,\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n },\n {\n type: \"amount\",\n displayName: \"Amount allowance\",\n path: \"details.amount\",\n tokenIndex: 0,\n signature:\n \"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n },\n {\n type: \"raw\",\n displayName: \"Approve to spender\",\n path: \"spender\",\n signature:\n \"3044022033e5713d9cb9bc375b56a9fb53b736c81ea3c4ac5cfb2d3ca7f8b8f0558fe2430220543ca4fef6d6f725f29e343f167fe9dd582aa856ecb5797259050eb990a1befb\",\n },\n {\n type: \"datetime\",\n displayName: \"Approval expire\",\n path: \"details.expiration\",\n signature:\n \"3044022056b3381e4540629ad73bc434ec49d80523234b82f62340fbb77157fb0eb21a680220459fe9cf6ca309f9c7dfc6d4711fea1848dba661563c57f77b3c2dc480b3a63b\",\n },\n ],\n }),\n ),\n );\n\n // WHEN\n const result = await loader.load(ctx);\n\n // THEN\n expect(getTypedDataFiltersMock).toHaveBeenCalledWith(\n expect.objectContaining({\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n chainId: 1,\n }),\n );\n expect(result).toEqual({\n type: \"success\",\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 4,\n signature:\n \"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3\",\n },\n trustedNamesAddresses: {},\n tokens: {\n 0: \"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\",\n },\n calldatas: {},\n proxy: undefined,\n filters: {\n \"details.amount\": {\n displayName: \"Amount allowance\",\n path: \"details.amount\",\n signature:\n \"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n tokenIndex: 0,\n type: \"amount\",\n },\n \"details.expiration\": {\n displayName: \"Approval expire\",\n path: \"details.expiration\",\n signature:\n \"3044022056b3381e4540629ad73bc434ec49d80523234b82f62340fbb77157fb0eb21a680220459fe9cf6ca309f9c7dfc6d4711fea1848dba661563c57f77b3c2dc480b3a63b\",\n type: \"datetime\",\n },\n \"details.token.[]\": {\n displayName: \"Amount allowance\",\n path: \"details.token.[]\",\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n tokenIndex: 0,\n type: \"token\",\n },\n spender: {\n displayName: \"Approve to spender\",\n path: \"spender\",\n signature:\n \"3044022033e5713d9cb9bc375b56a9fb53b736c81ea3c4ac5cfb2d3ca7f8b8f0558fe2430220543ca4fef6d6f725f29e343f167fe9dd582aa856ecb5797259050eb990a1befb\",\n type: \"raw\",\n },\n },\n });\n });\n\n it(\"success with referenced token verifying contract\", async () => {\n // GIVEN\n const ctx = {\n verifyingContract: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n chainId: 1,\n version: \"v2\",\n schema: TEST_TYPES,\n challenge: \"1234\",\n fieldsValues: TEST_VALUES,\n deviceModelId: DeviceModelId.STAX,\n } as TypedDataContext;\n getTypedDataFiltersMock.mockResolvedValueOnce(\n Promise.resolve(\n Right({\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 2,\n signature:\n \"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3\",\n },\n calldatasInfos: {},\n filters: [\n {\n type: \"token\",\n displayName: \"Amount allowance\",\n path: \"details.token.[]\",\n tokenIndex: 0,\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n },\n {\n type: \"amount\",\n displayName: \"Amount allowance\",\n path: \"details.amount\",\n tokenIndex: 255,\n signature:\n \"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n },\n ],\n }),\n ),\n );\n\n // WHEN\n const result = await loader.load(ctx);\n\n // THEN\n expect(result).toEqual({\n type: \"success\",\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 2,\n signature:\n \"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3\",\n },\n trustedNamesAddresses: {},\n tokens: {\n 0: \"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\",\n 255: \"payload-0x000000000022d473030f116ddee9f6b43ac78ba3\",\n },\n calldatas: {},\n proxy: undefined,\n filters: {\n \"details.amount\": {\n displayName: \"Amount allowance\",\n path: \"details.amount\",\n signature:\n \"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3\",\n tokenIndex: 255,\n type: \"amount\",\n },\n \"details.token.[]\": {\n displayName: \"Amount allowance\",\n path: \"details.token.[]\",\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n tokenIndex: 0,\n type: \"token\",\n },\n },\n });\n });\n\n it(\"success with calldata\", async () => {\n // GIVEN\n const ctx = {\n verifyingContract: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n chainId: 1,\n version: \"v2\",\n schema: TEST_TYPES_CALLDATA,\n challenge: \"1234\",\n fieldsValues: TEST_VALUES_CALLDATA,\n deviceModelId: DeviceModelId.STAX,\n } as TypedDataContext;\n getTypedDataFiltersMock.mockResolvedValueOnce(\n Promise.resolve(\n Right({\n messageInfo: {\n displayName: \"Multisig transaction\",\n filtersCount: 4,\n signature:\n \"304402206553ac5a2ce6bb17b94f3ec559fb037af0b742d62c001d8938aad709accd71ed022075ce87c3eb65e605f0ce0b2bc4bf960498bacf109a499807d1a7906d9c78c9c4\",\n },\n calldatasInfos: {\n 0: {\n calldataIndex: 0,\n displayName: \"Transaction\",\n valueFlag: true,\n calleeFlag: TypedDataCalldataParamPresence.Present,\n chainIdFlag: false,\n selectorFlag: false,\n amountFlag: true,\n spenderFlag: TypedDataCalldataParamPresence.Present,\n signature:\n \"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e\",\n },\n },\n filters: [\n {\n type: \"raw\",\n displayName: \"Operation type\",\n path: \"operation\",\n signature:\n \"3045022100fb9f3e7bab8ac0cd9a5722389a19d1ebdd39d7a6da6e374724a46eebee6896bc022070e991bb022111ed448540511b7fa4f70d5e92b0a3866d75cfc9d3cf1cf75d9b\",\n },\n {\n type: \"calldata-value\",\n displayName: \"Transaction\",\n path: \"data\",\n calldataIndex: 0,\n signature:\n \"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a\",\n },\n {\n type: \"calldata-callee\",\n displayName: \"Transaction\",\n path: \"to\",\n calldataIndex: 0,\n signature:\n \"30440220796cc549e363c5bc9f9d5bda894cf4cda11f157519f673d2b4a8b3ce716a8fba0220663c888d764084072856fe654ff425bffe671c2550068c64be9eddd6c84178b8\",\n },\n {\n type: \"calldata-amount\",\n displayName: \"Transaction\",\n path: \"value\",\n calldataIndex: 0,\n signature:\n \"3044022021601a55098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f\",\n },\n {\n type: \"calldata-chain-id\",\n displayName: \"Transaction\",\n path: \"chainId\",\n calldataIndex: 0,\n signature:\n \"3044022021601a56098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f\",\n },\n {\n type: \"calldata-selector\",\n displayName: \"Transaction\",\n path: \"selector\",\n calldataIndex: 0,\n signature:\n \"3044022021601a57098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f\",\n },\n {\n type: \"calldata-spender\",\n displayName: \"Transaction\",\n path: \"spender\",\n calldataIndex: 0,\n signature:\n \"3044022021601a58098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f\",\n },\n ],\n }),\n ),\n );\n\n // WHEN\n const result = await loader.load(ctx);\n\n // THEN\n expect(result).toEqual({\n type: \"success\",\n messageInfo: {\n displayName: \"Multisig transaction\",\n filtersCount: 4,\n signature:\n \"304402206553ac5a2ce6bb17b94f3ec559fb037af0b742d62c001d8938aad709accd71ed022075ce87c3eb65e605f0ce0b2bc4bf960498bacf109a499807d1a7906d9c78c9c4\",\n },\n trustedNamesAddresses: {},\n tokens: {},\n calldatas: {\n 0: {\n filter: {\n calldataIndex: 0,\n displayName: \"Transaction\",\n valueFlag: true,\n calleeFlag: TypedDataCalldataParamPresence.Present,\n chainIdFlag: false,\n selectorFlag: false,\n amountFlag: true,\n spenderFlag: TypedDataCalldataParamPresence.Present,\n signature:\n \"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e\",\n },\n subset: {\n chainId: 0x1234,\n data: \"0x6a76120200000000000000000000000023f8abfc2824c397ccb3da89ae772984107ddb99\",\n from: \"0x8ceb23fd6bc0add59e62ac25578270cff1b9f619\",\n selector: \"0x778899aa\",\n to: \"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\",\n value: 4200000000000000n,\n },\n },\n },\n proxy: undefined,\n filters: {\n data: {\n displayName: \"Transaction\",\n path: \"data\",\n signature:\n \"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a\",\n calldataIndex: 0,\n type: \"calldata-value\",\n },\n operation: {\n displayName: \"Operation type\",\n path: \"operation\",\n signature:\n \"3045022100fb9f3e7bab8ac0cd9a5722389a19d1ebdd39d7a6da6e374724a46eebee6896bc022070e991bb022111ed448540511b7fa4f70d5e92b0a3866d75cfc9d3cf1cf75d9b\",\n type: \"raw\",\n },\n to: {\n displayName: \"Transaction\",\n path: \"to\",\n signature:\n \"30440220796cc549e363c5bc9f9d5bda894cf4cda11f157519f673d2b4a8b3ce716a8fba0220663c888d764084072856fe654ff425bffe671c2550068c64be9eddd6c84178b8\",\n calldataIndex: 0,\n type: \"calldata-callee\",\n },\n value: {\n displayName: \"Transaction\",\n path: \"value\",\n signature:\n \"3044022021601a55098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f\",\n calldataIndex: 0,\n type: \"calldata-amount\",\n },\n chainId: {\n displayName: \"Transaction\",\n path: \"chainId\",\n signature:\n \"3044022021601a56098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f\",\n calldataIndex: 0,\n type: \"calldata-chain-id\",\n },\n selector: {\n displayName: \"Transaction\",\n path: \"selector\",\n signature:\n \"3044022021601a57098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f\",\n calldataIndex: 0,\n type: \"calldata-selector\",\n },\n spender: {\n displayName: \"Transaction\",\n path: \"spender\",\n signature:\n \"3044022021601a58098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f\",\n calldataIndex: 0,\n type: \"calldata-spender\",\n },\n },\n });\n });\n\n it(\"success with several calldatas\", async () => {\n // GIVEN\n const ctx = {\n verifyingContract: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n chainId: 1,\n version: \"v2\",\n schema: TEST_TYPES_CALLDATA,\n challenge: \"1234\",\n fieldsValues: TEST_VALUES_CALLDATA,\n deviceModelId: DeviceModelId.STAX,\n } as TypedDataContext;\n getTypedDataFiltersMock.mockResolvedValueOnce(\n Promise.resolve(\n Right({\n messageInfo: {\n displayName: \"Multisig transaction\",\n filtersCount: 4,\n signature:\n \"304402206553ac5a2ce6bb17b94f3ec559fb037af0b742d62c001d8938aad709accd71ed022075ce87c3eb65e605f0ce0b2bc4bf960498bacf109a499807d1a7906d9c78c9c4\",\n },\n calldatasInfos: {\n 0: {\n calldataIndex: 0,\n displayName: \"Transaction\",\n valueFlag: true,\n calleeFlag: TypedDataCalldataParamPresence.VerifyingContract,\n chainIdFlag: false,\n selectorFlag: false,\n amountFlag: true,\n spenderFlag: TypedDataCalldataParamPresence.VerifyingContract,\n signature:\n \"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e\",\n },\n 1: {\n calldataIndex: 1,\n displayName: \"Transaction 2\",\n valueFlag: false,\n calleeFlag: TypedDataCalldataParamPresence.VerifyingContract,\n chainIdFlag: true,\n selectorFlag: true,\n amountFlag: false,\n spenderFlag: TypedDataCalldataParamPresence.VerifyingContract,\n signature:\n \"3056122100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e\",\n },\n },\n filters: [\n {\n type: \"raw\",\n displayName: \"Operation type\",\n path: \"operation\",\n signature:\n \"3045022100fb9f3e7bab8ac0cd9a5722389a19d1ebdd39d7a6da6e374724a46eebee6896bc022070e991bb022111ed448540511b7fa4f70d5e92b0a3866d75cfc9d3cf1cf75d9b\",\n },\n {\n type: \"calldata-value\",\n displayName: \"Transaction\",\n path: \"data\",\n calldataIndex: 0,\n signature:\n \"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a\",\n },\n {\n type: \"calldata-selector\",\n displayName: \"Transaction\",\n path: \"selector\",\n calldataIndex: 1,\n signature:\n \"3044022021601a57098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f\",\n },\n ],\n }),\n ),\n );\n\n // WHEN\n const result = await loader.load(ctx);\n\n // THEN\n expect(result).toEqual({\n type: \"success\",\n messageInfo: {\n displayName: \"Multisig transaction\",\n filtersCount: 4,\n signature:\n \"304402206553ac5a2ce6bb17b94f3ec559fb037af0b742d62c001d8938aad709accd71ed022075ce87c3eb65e605f0ce0b2bc4bf960498bacf109a499807d1a7906d9c78c9c4\",\n },\n trustedNamesAddresses: {},\n tokens: {},\n calldatas: {\n 0: {\n filter: {\n calldataIndex: 0,\n displayName: \"Transaction\",\n valueFlag: true,\n calleeFlag: TypedDataCalldataParamPresence.VerifyingContract,\n chainIdFlag: false,\n selectorFlag: false,\n amountFlag: true,\n spenderFlag: TypedDataCalldataParamPresence.VerifyingContract,\n signature:\n \"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e\",\n },\n subset: {\n chainId: 1,\n data: \"0x6a76120200000000000000000000000023f8abfc2824c397ccb3da89ae772984107ddb99\",\n from: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n selector: \"0x6a761202\",\n to: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n value: undefined,\n },\n },\n 1: {\n filter: {\n calldataIndex: 1,\n displayName: \"Transaction 2\",\n valueFlag: false,\n calleeFlag: TypedDataCalldataParamPresence.VerifyingContract,\n chainIdFlag: true,\n selectorFlag: true,\n amountFlag: false,\n spenderFlag: TypedDataCalldataParamPresence.VerifyingContract,\n signature:\n \"3056122100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e\",\n },\n subset: {\n chainId: 1,\n data: \"0x\",\n from: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n selector: \"0x778899aa\",\n to: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n value: undefined,\n },\n },\n },\n proxy: undefined,\n filters: {\n data: {\n displayName: \"Transaction\",\n path: \"data\",\n signature:\n \"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a\",\n calldataIndex: 0,\n type: \"calldata-value\",\n },\n selector: {\n displayName: \"Transaction\",\n path: \"selector\",\n signature:\n \"3044022021601a57098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f\",\n calldataIndex: 1,\n type: \"calldata-selector\",\n },\n operation: {\n displayName: \"Operation type\",\n path: \"operation\",\n signature:\n \"3045022100fb9f3e7bab8ac0cd9a5722389a19d1ebdd39d7a6da6e374724a46eebee6896bc022070e991bb022111ed448540511b7fa4f70d5e92b0a3866d75cfc9d3cf1cf75d9b\",\n type: \"raw\",\n },\n },\n });\n });\n\n it(\"success with proxy\", async () => {\n // GIVEN\n const ctx = {\n verifyingContract: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n chainId: 1,\n version: \"v2\",\n schema: TEST_TYPES,\n challenge: \"1234\",\n fieldsValues: TEST_VALUES,\n deviceModelId: DeviceModelId.STAX,\n } as TypedDataContext;\n getProxyImplementationAddressMock.mockResolvedValueOnce(\n Right({\n implementationAddress: \"0x987654321fedcba0\",\n signedDescriptor: \"0x123456789abcdef0\",\n keyId: \"testKeyId\",\n KeyUsage: \"testKeyUsage\",\n }),\n );\n loadCertificateMock.mockResolvedValue(undefined);\n getTypedDataFiltersMock\n .mockResolvedValueOnce(Promise.resolve(Left(new Error(\"error\"))))\n .mockResolvedValueOnce(\n Promise.resolve(\n Right({\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 2,\n signature:\n \"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3\",\n },\n calldatasInfos: {},\n filters: [],\n }),\n ),\n );\n\n // WHEN\n const result = await loader.load(ctx);\n\n // THEN\n expect(getTypedDataFiltersMock).toHaveBeenCalledTimes(2);\n expect(getTypedDataFiltersMock).toHaveBeenLastCalledWith(\n expect.objectContaining({\n address: \"0x987654321fedcba0\",\n chainId: 1,\n }),\n );\n expect(result).toEqual({\n type: \"success\",\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 2,\n signature:\n \"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3\",\n },\n trustedNamesAddresses: {},\n tokens: {},\n calldatas: {},\n proxy: {\n type: ClearSignContextType.PROXY_INFO,\n payload: \"0x123456789abcdef0\",\n certificate: undefined,\n },\n filters: {},\n });\n });\n\n it(\"success with proxy and certificate\", async () => {\n // GIVEN\n const ctx = {\n verifyingContract: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n chainId: 1,\n version: \"v2\",\n schema: TEST_TYPES,\n challenge: \"1234\",\n fieldsValues: TEST_VALUES,\n deviceModelId: DeviceModelId.STAX,\n } as TypedDataContext;\n getProxyImplementationAddressMock.mockResolvedValueOnce(\n Right({\n implementationAddress: \"0x987654321fedcba0\",\n signedDescriptor: \"0x123456789abcdef0\",\n keyId: \"testKeyId\",\n KeyUsage: \"testKeyUsage\",\n }),\n );\n loadCertificateMock.mockResolvedValue({\n keyUsageNumber: 1,\n payload: new Uint8Array([1, 2, 3, 4]),\n });\n getTypedDataFiltersMock\n .mockResolvedValueOnce(Promise.resolve(Left(new Error(\"error\"))))\n .mockResolvedValueOnce(\n Promise.resolve(\n Right({\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 2,\n signature:\n \"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3\",\n },\n calldatasInfos: {},\n filters: [],\n }),\n ),\n );\n\n // WHEN\n const result = await loader.load(ctx);\n\n // THEN\n expect(getTypedDataFiltersMock).toHaveBeenCalledTimes(2);\n expect(getTypedDataFiltersMock).toHaveBeenLastCalledWith(\n expect.objectContaining({\n address: \"0x987654321fedcba0\",\n chainId: 1,\n }),\n );\n expect(result).toEqual({\n type: \"success\",\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 2,\n signature:\n \"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3\",\n },\n trustedNamesAddresses: {},\n tokens: {},\n calldatas: {},\n proxy: {\n type: ClearSignContextType.PROXY_INFO,\n payload: \"0x123456789abcdef0\",\n certificate: {\n keyUsageNumber: 1,\n payload: new Uint8Array([1, 2, 3, 4]),\n },\n },\n filters: {},\n });\n });\n\n it(\"should return an error if filters are unavailable\", async () => {\n // GIVEN\n const ctx = {\n verifyingContract: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n chainId: 1,\n version: \"v2\",\n schema: TEST_TYPES,\n challenge: \"1234\",\n fieldsValues: TEST_VALUES,\n deviceModelId: DeviceModelId.STAX,\n } as TypedDataContext;\n getTypedDataFiltersMock.mockResolvedValueOnce(\n Promise.resolve(Left(new Error(\"error\"))),\n );\n\n // WHEN\n const result = await loader.load(ctx);\n\n // THEN\n expect(getTypedDataFiltersMock).toHaveBeenCalledTimes(1);\n expect(result).toEqual({\n type: \"error\",\n error: new Error(\"error\"),\n });\n });\n\n it(\"should return an error if filters are unavailable in the proxy\", async () => {\n // GIVEN\n const ctx = {\n verifyingContract: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n chainId: 1,\n version: \"v2\",\n schema: TEST_TYPES,\n challenge: \"1234\",\n fieldsValues: TEST_VALUES,\n deviceModelId: DeviceModelId.STAX,\n } as TypedDataContext;\n getProxyImplementationAddressMock.mockResolvedValueOnce(\n Right({\n delegateAddresses: [\"0x987654321fedcba0\"],\n signedDescriptor: \"0x123456789abcdef0\",\n }),\n );\n loadCertificateMock.mockResolvedValue(undefined);\n getTypedDataFiltersMock\n .mockResolvedValueOnce(Promise.resolve(Left(new Error(\"error\"))))\n .mockResolvedValueOnce(Promise.resolve(Left(new Error(\"error\"))));\n\n // WHEN\n const result = await loader.load(ctx);\n\n // THEN\n expect(getTypedDataFiltersMock).toHaveBeenCalledTimes(2);\n expect(result).toEqual({\n type: \"error\",\n error: new Error(\"error\"),\n });\n });\n\n it(\"success with a trusted name\", async () => {\n // GIVEN\n const ctx = {\n verifyingContract: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n chainId: 1,\n version: \"v2\",\n schema: TEST_TYPES,\n challenge: \"1234\",\n fieldsValues: TEST_VALUES,\n deviceModelId: DeviceModelId.STAX,\n } as TypedDataContext;\n getTypedDataFiltersMock.mockResolvedValueOnce(\n Promise.resolve(\n Right({\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 2,\n signature:\n \"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3\",\n },\n calldatasInfos: {},\n filters: [\n {\n type: \"trusted-name\",\n displayName: \"Amount allowance\",\n path: \"details.token.[]\",\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n types: [\"contract\"],\n sources: [\"local\", \"ens\"],\n typesAndSourcesPayload: \"010203010002\",\n },\n ],\n }),\n ),\n );\n\n // WHEN\n const result = await loader.load(ctx);\n\n // THEN\n expect(result).toEqual({\n type: \"success\",\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 2,\n signature:\n \"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3\",\n },\n trustedNamesAddresses: {\n \"details.token.[]\": \"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\",\n },\n tokens: {},\n calldatas: {},\n filters: {\n \"details.token.[]\": {\n displayName: \"Amount allowance\",\n path: \"details.token.[]\",\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n types: [\"contract\"],\n sources: [\"local\", \"ens\"],\n typesAndSourcesPayload: \"010203010002\",\n type: \"trusted-name\",\n },\n },\n });\n });\n\n it(\"success with unavailable tokens\", async () => {\n // GIVEN\n const ctx = {\n verifyingContract: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n chainId: 1,\n version: \"v2\",\n schema: TEST_TYPES,\n challenge: \"1234\",\n fieldsValues: TEST_VALUES,\n deviceModelId: DeviceModelId.STAX,\n } as TypedDataContext;\n getTypedDataFiltersMock.mockResolvedValueOnce(\n Promise.resolve(\n Right({\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 2,\n signature:\n \"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3\",\n },\n calldatasInfos: {},\n filters: [\n {\n type: \"token\",\n displayName: \"Amount allowance\",\n path: \"details.token.[]\",\n tokenIndex: 0,\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n },\n ],\n }),\n ),\n );\n vi.spyOn(mockTokenDataSource, \"getTokenInfosPayload\").mockImplementation(\n () => Promise.resolve(Left(new Error(\"token error\"))),\n );\n\n // WHEN\n const result = await loader.load(ctx);\n\n // THEN\n expect(result).toEqual({\n type: \"success\",\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 2,\n signature:\n \"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3\",\n },\n trustedNamesAddresses: {},\n tokens: {},\n calldatas: {},\n filters: {\n \"details.token.[]\": {\n displayName: \"Amount allowance\",\n path: \"details.token.[]\",\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n tokenIndex: 0,\n type: \"token\",\n },\n },\n });\n });\n\n it(\"success with several identic tokens\", async () => {\n // GIVEN\n const ctx = {\n verifyingContract: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n chainId: 1,\n version: \"v2\",\n schema: TEST_TYPES,\n challenge: \"1234\",\n fieldsValues: [\n {\n path: \"details.token.[]\",\n value: Uint8Array.from([\n 0x7c, 0xeb, 0x23, 0xfd, 0x6b, 0xc0, 0xad, 0xd5, 0x9e, 0x62, 0xac,\n 0x25, 0x57, 0x82, 0x70, 0xcf, 0xf1, 0xb9, 0xf6, 0x19,\n ]),\n },\n ...TEST_VALUES,\n ],\n deviceModelId: DeviceModelId.STAX,\n } as TypedDataContext;\n getTypedDataFiltersMock.mockResolvedValueOnce(\n Promise.resolve(\n Right({\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 2,\n signature:\n \"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3\",\n },\n calldatasInfos: {},\n filters: [\n {\n type: \"token\",\n displayName: \"Amount allowance\",\n path: \"details.token.[]\",\n tokenIndex: 0,\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n },\n ],\n }),\n ),\n );\n vi.spyOn(mockTokenDataSource, \"getTokenInfosPayload\").mockImplementation(\n () => Promise.resolve(Left(new Error(\"token error\"))),\n );\n\n // WHEN\n const result = await loader.load(ctx);\n\n // THEN\n expect(mockTokenDataSource.getTokenInfosPayload).toHaveBeenCalledWith({\n address: \"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\",\n chainId: 1,\n });\n expect(result.type).toEqual(\"success\");\n });\n\n it(\"success with several different tokens\", async () => {\n // GIVEN\n const ctx = {\n verifyingContract: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n chainId: 1,\n version: \"v2\",\n schema: TEST_TYPES,\n challenge: \"1234\",\n fieldsValues: [\n {\n path: \"details.token.[]\",\n value: Uint8Array.from([\n 0x7c, 0xeb, 0x23, 0xfd, 0x6b, 0xc0, 0xad, 0xd5, 0x9e, 0x62, 0xac,\n 0x25, 0x57, 0x82, 0x70, 0xcf, 0xf1, 0xb9, 0xf6, 0xff,\n ]),\n },\n ...TEST_VALUES,\n ],\n deviceModelId: DeviceModelId.STAX,\n } as TypedDataContext;\n getTypedDataFiltersMock.mockResolvedValueOnce(\n Promise.resolve(\n Right({\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 2,\n signature:\n \"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3\",\n },\n calldatasInfos: {},\n filters: [\n {\n type: \"token\",\n displayName: \"Amount allowance\",\n path: \"details.token.[]\",\n tokenIndex: 0,\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n },\n ],\n }),\n ),\n );\n // WHEN\n const result = await loader.load(ctx);\n\n // THEN\n expect(mockTokenDataSource.getTokenInfosPayload).not.toHaveBeenCalledWith(\n { address: \"0x7ceb23fd6bc0add59e62ac25578270cff1b9f6ff\", chainId: 1 },\n );\n expect(mockTokenDataSource.getTokenInfosPayload).not.toHaveBeenCalledWith(\n { address: \"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\", chainId: 1 },\n );\n expect(result.type).toEqual(\"success\");\n });\n\n it(\"should ignore the token if value is not found\", async () => {\n // GIVEN\n const ctx = {\n verifyingContract: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n chainId: 1,\n version: \"v2\",\n schema: TEST_TYPES,\n challenge: \"1234\",\n fieldsValues: TEST_VALUES,\n deviceModelId: DeviceModelId.STAX,\n } as TypedDataContext;\n getTypedDataFiltersMock.mockResolvedValueOnce(\n Promise.resolve(\n Right({\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 2,\n signature:\n \"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3\",\n },\n calldatasInfos: {},\n filters: [\n {\n type: \"token\",\n displayName: \"Amount allowance\",\n path: \"details.badtoken\",\n tokenIndex: 0,\n signature:\n \"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733\",\n },\n ],\n }),\n ),\n );\n\n // WHEN\n const result = await loader.load(ctx);\n\n // THEN\n expect(result.type).toEqual(\"success\");\n if (result.type === \"success\") {\n expect(result.filters[\"details.badtoken\"]?.[\"displayName\"]).toEqual(\n \"Amount allowance\",\n );\n expect(result.tokens).toEqual({});\n }\n });\n });\n});\n"],
5
+ "mappings": "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BACN,YAAa,cACb,KAAM,QACN,cAAe,EACf,UACE,8IACJ,EACA,CACE,KAAM,oBACN,YAAa,cACb,KAAM,UACN,cAAe,EACf,UACE,8IACJ,EACA,CACE,KAAM,oBACN,YAAa,cACb,KAAM,WACN,cAAe,EACf,UACE,8IACJ,EACA,CACE,KAAM,mBACN,YAAa,cACb,KAAM,UACN,cAAe,EACf,UACE,8IACJ,CACF,CACF,CAAC,CACH,CACF,EAGA,MAAMY,EAAS,MAAMP,EAAO,KAAKM,CAAG,EAGpC,OAAOC,CAAM,EAAE,QAAQ,CACrB,KAAM,UACN,YAAa,CACX,YAAa,uBACb,aAAc,EACd,UACE,8IACJ,EACA,sBAAuB,CAAC,EACxB,OAAQ,CAAC,EACT,UAAW,CACT,EAAG,CACD,OAAQ,CACN,cAAe,EACf,YAAa,cACb,UAAW,GACX,WAAY,iCAA+B,QAC3C,YAAa,GACb,aAAc,GACd,WAAY,GACZ,YAAa,iCAA+B,QAC5C,UACE,gJACJ,EACA,OAAQ,CACN,QAAS,KACT,KAAM,6EACN,KAAM,6CACN,SAAU,aACV,GAAI,6CACJ,MAAO,iBACT,CACF,CACF,EACA,MAAO,OACP,QAAS,CACP,KAAM,CACJ,YAAa,cACb,KAAM,OACN,UACE,+IACF,cAAe,EACf,KAAM,gBACR,EACA,UAAW,CACT,YAAa,iBACb,KAAM,YACN,UACE,iJACF,KAAM,KACR,EACA,GAAI,CACF,YAAa,cACb,KAAM,KACN,UACE,+IACF,cAAe,EACf,KAAM,iBACR,EACA,MAAO,CACL,YAAa,cACb,KAAM,QACN,UACE,+IACF,cAAe,EACf,KAAM,iBACR,EACA,QAAS,CACP,YAAa,cACb,KAAM,UACN,UACE,+IACF,cAAe,EACf,KAAM,mBACR,EACA,SAAU,CACR,YAAa,cACb,KAAM,WACN,UACE,+IACF,cAAe,EACf,KAAM,mBACR,EACA,QAAS,CACP,YAAa,cACb,KAAM,UACN,UACE,+IACF,cAAe,EACf,KAAM,kBACR,CACF,CACF,CAAC,CACH,CAAC,EAED,GAAG,iCAAkC,SAAY,CAE/C,MAAMD,EAAM,CACV,kBAAmB,6CACnB,QAAS,EACT,QAAS,KACT,OAAQH,EACR,UAAW,OACX,aAAcC,EACd,cAAe,gBAAc,IAC/B,EACAT,EAAwB,sBACtB,QAAQ,WACN,SAAM,CACJ,YAAa,CACX,YAAa,uBACb,aAAc,EACd,UACE,8IACJ,EACA,eAAgB,CACd,EAAG,CACD,cAAe,EACf,YAAa,cACb,UAAW,GACX,WAAY,iCAA+B,kBAC3C,YAAa,GACb,aAAc,GACd,WAAY,GACZ,YAAa,iCAA+B,kBAC5C,UACE,gJACJ,EACA,EAAG,CACD,cAAe,EACf,YAAa,gBACb,UAAW,GACX,WAAY,iCAA+B,kBAC3C,YAAa,GACb,aAAc,GACd,WAAY,GACZ,YAAa,iCAA+B,kBAC5C,UACE,gJACJ,CACF,EACA,QAAS,CACP,CACE,KAAM,MACN,YAAa,iBACb,KAAM,YACN,UACE,gJACJ,EACA,CACE,KAAM,iBACN,YAAa,cACb,KAAM,OACN,cAAe,EACf,UACE,8IACJ,EACA,CACE,KAAM,oBACN,YAAa,cACb,KAAM,WACN,cAAe,EACf,UACE,8IACJ,CACF,CACF,CAAC,CACH,CACF,EAGA,MAAMY,EAAS,MAAMP,EAAO,KAAKM,CAAG,EAGpC,OAAOC,CAAM,EAAE,QAAQ,CACrB,KAAM,UACN,YAAa,CACX,YAAa,uBACb,aAAc,EACd,UACE,8IACJ,EACA,sBAAuB,CAAC,EACxB,OAAQ,CAAC,EACT,UAAW,CACT,EAAG,CACD,OAAQ,CACN,cAAe,EACf,YAAa,cACb,UAAW,GACX,WAAY,iCAA+B,kBAC3C,YAAa,GACb,aAAc,GACd,WAAY,GACZ,YAAa,iCAA+B,kBAC5C,UACE,gJACJ,EACA,OAAQ,CACN,QAAS,EACT,KAAM,6EACN,KAAM,6CACN,SAAU,aACV,GAAI,6CACJ,MAAO,MACT,CACF,EACA,EAAG,CACD,OAAQ,CACN,cAAe,EACf,YAAa,gBACb,UAAW,GACX,WAAY,iCAA+B,kBAC3C,YAAa,GACb,aAAc,GACd,WAAY,GACZ,YAAa,iCAA+B,kBAC5C,UACE,gJACJ,EACA,OAAQ,CACN,QAAS,EACT,KAAM,KACN,KAAM,6CACN,SAAU,aACV,GAAI,6CACJ,MAAO,MACT,CACF,CACF,EACA,MAAO,OACP,QAAS,CACP,KAAM,CACJ,YAAa,cACb,KAAM,OACN,UACE,+IACF,cAAe,EACf,KAAM,gBACR,EACA,SAAU,CACR,YAAa,cACb,KAAM,WACN,UACE,+IACF,cAAe,EACf,KAAM,mBACR,EACA,UAAW,CACT,YAAa,iBACb,KAAM,YACN,UACE,iJACF,KAAM,KACR,CACF,CACF,CAAC,CACH,CAAC,EAED,GAAG,qBAAsB,SAAY,CAEnC,MAAMD,EAAM,CACV,kBAAmB,6CACnB,QAAS,EACT,QAAS,KACT,OAAQL,EACR,UAAW,OACX,aAAcC,EACd,cAAe,gBAAc,IAC/B,EACAT,EAAkC,yBAChC,SAAM,CACJ,sBAAuB,qBACvB,iBAAkB,qBAClB,MAAO,YACP,SAAU,cACZ,CAAC,CACH,EACAC,EAAoB,kBAAkB,MAAS,EAC/CC,EACG,sBAAsB,QAAQ,WAAQ,QAAK,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,EAC/D,sBACC,QAAQ,WACN,SAAM,CACJ,YAAa,CACX,YAAa,UACb,aAAc,EACd,UACE,gJACJ,EACA,eAAgB,CAAC,EACjB,QAAS,CAAC,CACZ,CAAC,CACH,CACF,EAGF,MAAMY,EAAS,MAAMP,EAAO,KAAKM,CAAG,EAGpC,OAAOX,CAAuB,EAAE,sBAAsB,CAAC,EACvD,OAAOA,CAAuB,EAAE,yBAC9B,OAAO,iBAAiB,CACtB,QAAS,qBACT,QAAS,CACX,CAAC,CACH,EACA,OAAOY,CAAM,EAAE,QAAQ,CACrB,KAAM,UACN,YAAa,CACX,YAAa,UACb,aAAc,EACd,UACE,gJACJ,EACA,sBAAuB,CAAC,EACxB,OAAQ,CAAC,EACT,UAAW,CAAC,EACZ,MAAO,CACL,KAAM,uBAAqB,WAC3B,QAAS,qBACT,YAAa,MACf,EACA,QAAS,CAAC,CACZ,CAAC,CACH,CAAC,EAED,GAAG,qCAAsC,SAAY,CAEnD,MAAMD,EAAM,CACV,kBAAmB,6CACnB,QAAS,EACT,QAAS,KACT,OAAQL,EACR,UAAW,OACX,aAAcC,EACd,cAAe,gBAAc,IAC/B,EACAT,EAAkC,yBAChC,SAAM,CACJ,sBAAuB,qBACvB,iBAAkB,qBAClB,MAAO,YACP,SAAU,cACZ,CAAC,CACH,EACAC,EAAoB,kBAAkB,CACpC,eAAgB,EAChB,QAAS,IAAI,WAAW,CAAC,EAAG,EAAG,EAAG,CAAC,CAAC,CACtC,CAAC,EACDC,EACG,sBAAsB,QAAQ,WAAQ,QAAK,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,EAC/D,sBACC,QAAQ,WACN,SAAM,CACJ,YAAa,CACX,YAAa,UACb,aAAc,EACd,UACE,gJACJ,EACA,eAAgB,CAAC,EACjB,QAAS,CAAC,CACZ,CAAC,CACH,CACF,EAGF,MAAMY,EAAS,MAAMP,EAAO,KAAKM,CAAG,EAGpC,OAAOX,CAAuB,EAAE,sBAAsB,CAAC,EACvD,OAAOA,CAAuB,EAAE,yBAC9B,OAAO,iBAAiB,CACtB,QAAS,qBACT,QAAS,CACX,CAAC,CACH,EACA,OAAOY,CAAM,EAAE,QAAQ,CACrB,KAAM,UACN,YAAa,CACX,YAAa,UACb,aAAc,EACd,UACE,gJACJ,EACA,sBAAuB,CAAC,EACxB,OAAQ,CAAC,EACT,UAAW,CAAC,EACZ,MAAO,CACL,KAAM,uBAAqB,WAC3B,QAAS,qBACT,YAAa,CACX,eAAgB,EAChB,QAAS,IAAI,WAAW,CAAC,EAAG,EAAG,EAAG,CAAC,CAAC,CACtC,CACF,EACA,QAAS,CAAC,CACZ,CAAC,CACH,CAAC,EAED,GAAG,oDAAqD,SAAY,CAElE,MAAMD,EAAM,CACV,kBAAmB,6CACnB,QAAS,EACT,QAAS,KACT,OAAQL,EACR,UAAW,OACX,aAAcC,EACd,cAAe,gBAAc,IAC/B,EACAP,EAAwB,sBACtB,QAAQ,WAAQ,QAAK,IAAI,MAAM,OAAO,CAAC,CAAC,CAC1C,EAGA,MAAMY,EAAS,MAAMP,EAAO,KAAKM,CAAG,EAGpC,OAAOX,CAAuB,EAAE,sBAAsB,CAAC,EACvD,OAAOY,CAAM,EAAE,QAAQ,CACrB,KAAM,QACN,MAAO,IAAI,MAAM,OAAO,CAC1B,CAAC,CACH,CAAC,EAED,GAAG,iEAAkE,SAAY,CAE/E,MAAMD,EAAM,CACV,kBAAmB,6CACnB,QAAS,EACT,QAAS,KACT,OAAQL,EACR,UAAW,OACX,aAAcC,EACd,cAAe,gBAAc,IAC/B,EACAT,EAAkC,yBAChC,SAAM,CACJ,kBAAmB,CAAC,oBAAoB,EACxC,iBAAkB,oBACpB,CAAC,CACH,EACAC,EAAoB,kBAAkB,MAAS,EAC/CC,EACG,sBAAsB,QAAQ,WAAQ,QAAK,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,EAC/D,sBAAsB,QAAQ,WAAQ,QAAK,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,EAGlE,MAAMY,EAAS,MAAMP,EAAO,KAAKM,CAAG,EAGpC,OAAOX,CAAuB,EAAE,sBAAsB,CAAC,EACvD,OAAOY,CAAM,EAAE,QAAQ,CACrB,KAAM,QACN,MAAO,IAAI,MAAM,OAAO,CAC1B,CAAC,CACH,CAAC,EAED,GAAG,8BAA+B,SAAY,CAE5C,MAAMD,EAAM,CACV,kBAAmB,6CACnB,QAAS,EACT,QAAS,KACT,OAAQL,EACR,UAAW,OACX,aAAcC,EACd,cAAe,gBAAc,IAC/B,EACAP,EAAwB,sBACtB,QAAQ,WACN,SAAM,CACJ,YAAa,CACX,YAAa,UACb,aAAc,EACd,UACE,gJACJ,EACA,eAAgB,CAAC,EACjB,QAAS,CACP,CACE,KAAM,eACN,YAAa,mBACb,KAAM,mBACN,UACE,+IACF,MAAO,CAAC,UAAU,EAClB,QAAS,CAAC,QAAS,KAAK,EACxB,uBAAwB,cAC1B,CACF,CACF,CAAC,CACH,CACF,EAGA,MAAMY,EAAS,MAAMP,EAAO,KAAKM,CAAG,EAGpC,OAAOC,CAAM,EAAE,QAAQ,CACrB,KAAM,UACN,YAAa,CACX,YAAa,UACb,aAAc,EACd,UACE,gJACJ,EACA,sBAAuB,CACrB,mBAAoB,4CACtB,EACA,OAAQ,CAAC,EACT,UAAW,CAAC,EACZ,QAAS,CACP,mBAAoB,CAClB,YAAa,mBACb,KAAM,mBACN,UACE,+IACF,MAAO,CAAC,UAAU,EAClB,QAAS,CAAC,QAAS,KAAK,EACxB,uBAAwB,eACxB,KAAM,cACR,CACF,CACF,CAAC,CACH,CAAC,EAED,GAAG,kCAAmC,SAAY,CAEhD,MAAMD,EAAM,CACV,kBAAmB,6CACnB,QAAS,EACT,QAAS,KACT,OAAQL,EACR,UAAW,OACX,aAAcC,EACd,cAAe,gBAAc,IAC/B,EACAP,EAAwB,sBACtB,QAAQ,WACN,SAAM,CACJ,YAAa,CACX,YAAa,UACb,aAAc,EACd,UACE,gJACJ,EACA,eAAgB,CAAC,EACjB,QAAS,CACP,CACE,KAAM,QACN,YAAa,mBACb,KAAM,mBACN,WAAY,EACZ,UACE,8IACJ,CACF,CACF,CAAC,CACH,CACF,EACA,GAAG,MAAMC,EAAqB,sBAAsB,EAAE,mBACpD,IAAM,QAAQ,WAAQ,QAAK,IAAI,MAAM,aAAa,CAAC,CAAC,CACtD,EAGA,MAAMW,EAAS,MAAMP,EAAO,KAAKM,CAAG,EAGpC,OAAOC,CAAM,EAAE,QAAQ,CACrB,KAAM,UACN,YAAa,CACX,YAAa,UACb,aAAc,EACd,UACE,gJACJ,EACA,sBAAuB,CAAC,EACxB,OAAQ,CAAC,EACT,UAAW,CAAC,EACZ,QAAS,CACP,mBAAoB,CAClB,YAAa,mBACb,KAAM,mBACN,UACE,+IACF,WAAY,EACZ,KAAM,OACR,CACF,CACF,CAAC,CACH,CAAC,EAED,GAAG,sCAAuC,SAAY,CAEpD,MAAMD,EAAM,CACV,kBAAmB,6CACnB,QAAS,EACT,QAAS,KACT,OAAQL,EACR,UAAW,OACX,aAAc,CACZ,CACE,KAAM,mBACN,MAAO,WAAW,KAAK,CACrB,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAC5D,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,EAClD,CAAC,CACH,EACA,GAAGC,CACL,EACA,cAAe,gBAAc,IAC/B,EACAP,EAAwB,sBACtB,QAAQ,WACN,SAAM,CACJ,YAAa,CACX,YAAa,UACb,aAAc,EACd,UACE,gJACJ,EACA,eAAgB,CAAC,EACjB,QAAS,CACP,CACE,KAAM,QACN,YAAa,mBACb,KAAM,mBACN,WAAY,EACZ,UACE,8IACJ,CACF,CACF,CAAC,CACH,CACF,EACA,GAAG,MAAMC,EAAqB,sBAAsB,EAAE,mBACpD,IAAM,QAAQ,WAAQ,QAAK,IAAI,MAAM,aAAa,CAAC,CAAC,CACtD,EAGA,MAAMW,EAAS,MAAMP,EAAO,KAAKM,CAAG,EAGpC,OAAOV,EAAoB,oBAAoB,EAAE,qBAAqB,CACpE,QAAS,6CACT,QAAS,CACX,CAAC,EACD,OAAOW,EAAO,IAAI,EAAE,QAAQ,SAAS,CACvC,CAAC,EAED,GAAG,wCAAyC,SAAY,CAEtD,MAAMD,EAAM,CACV,kBAAmB,6CACnB,QAAS,EACT,QAAS,KACT,OAAQL,EACR,UAAW,OACX,aAAc,CACZ,CACE,KAAM,mBACN,MAAO,WAAW,KAAK,CACrB,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAC5D,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAClD,CAAC,CACH,EACA,GAAGC,CACL,EACA,cAAe,gBAAc,IAC/B,EACAP,EAAwB,sBACtB,QAAQ,WACN,SAAM,CACJ,YAAa,CACX,YAAa,UACb,aAAc,EACd,UACE,gJACJ,EACA,eAAgB,CAAC,EACjB,QAAS,CACP,CACE,KAAM,QACN,YAAa,mBACb,KAAM,mBACN,WAAY,EACZ,UACE,8IACJ,CACF,CACF,CAAC,CACH,CACF,EAEA,MAAMY,EAAS,MAAMP,EAAO,KAAKM,CAAG,EAGpC,OAAOV,EAAoB,oBAAoB,EAAE,IAAI,qBACnD,CAAE,QAAS,6CAA8C,QAAS,CAAE,CACtE,EACA,OAAOA,EAAoB,oBAAoB,EAAE,IAAI,qBACnD,CAAE,QAAS,6CAA8C,QAAS,CAAE,CACtE,EACA,OAAOW,EAAO,IAAI,EAAE,QAAQ,SAAS,CACvC,CAAC,EAED,GAAG,gDAAiD,SAAY,CAE9D,MAAMD,EAAM,CACV,kBAAmB,6CACnB,QAAS,EACT,QAAS,KACT,OAAQL,EACR,UAAW,OACX,aAAcC,EACd,cAAe,gBAAc,IAC/B,EACAP,EAAwB,sBACtB,QAAQ,WACN,SAAM,CACJ,YAAa,CACX,YAAa,UACb,aAAc,EACd,UACE,gJACJ,EACA,eAAgB,CAAC,EACjB,QAAS,CACP,CACE,KAAM,QACN,YAAa,mBACb,KAAM,mBACN,WAAY,EACZ,UACE,8IACJ,CACF,CACF,CAAC,CACH,CACF,EAGA,MAAMY,EAAS,MAAMP,EAAO,KAAKM,CAAG,EAGpC,OAAOC,EAAO,IAAI,EAAE,QAAQ,SAAS,EACjCA,EAAO,OAAS,YAClB,OAAOA,EAAO,QAAQ,kBAAkB,GAAI,WAAc,EAAE,QAC1D,kBACF,EACA,OAAOA,EAAO,MAAM,EAAE,QAAQ,CAAC,CAAC,EAEpC,CAAC,CACH,CAAC,CACH,CAAC",
6
+ "names": ["import_device_management_kit", "import_purify_ts", "import_ClearSignContext", "import_TypedDataClearSignContext", "import_DefaultTypedDataContextLoader", "getProxyImplementationAddressMock", "loadCertificateMock", "getTypedDataFiltersMock", "mockTokenDataSource", "mockTypedDataDataSource", "mockProxyDatasource", "mockCertificateLoader", "loader", "TEST_TYPES", "TEST_VALUES", "TEST_TYPES_CALLDATA", "TEST_VALUES_CALLDATA", "address", "ctx", "result"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var l=Object.defineProperty;var D=Object.getOwnPropertyDescriptor;var I=Object.getOwnPropertyNames;var w=Object.prototype.hasOwnProperty;var k=(r,t)=>{for(var e in t)l(r,e,{get:t[e],enumerable:!0})},H=(r,t,e,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of I(t))!w.call(r,a)&&a!==e&&l(r,a,{get:()=>t[a],enumerable:!(n=D(t,a))||n.enumerable});return r};var b=r=>H(l({},"__esModule",{value:!0}),r),_=(r,t,e,n)=>{for(var a=n>1?void 0:n?D(t,e):t,o=r.length-1,i;o>=0;o--)(i=r[o])&&(a=(n?i(t,e,a):i(a))||a);return n&&a&&l(t,e,a),a},C=(r,t)=>(e,n)=>t(e,n,r);var R={};k(R,{UniswapContextLoader:()=>p});module.exports=b(R);var s=require("@ledgerhq/device-management-kit"),A=require("ethers"),c=require("inversify"),S=require("purify-ts"),g=require("../../shared/model/ClearSignContext"),T=require("../../token/di/tokenTypes"),f=require("../../uniswap/constants/plugin"),d=require("../../uniswap/constants/uniswap"),h=require("../../uniswap/di/uniswapTypes");let p=class{constructor(t,e){this.commandDecoderDataSource=t;this.tokenDataSource=e}async load(t){const{data:e,selector:n,chainId:a}=t;if(!(0,s.isHexaString)(e))return[];if(n!==d.UNISWAP_EXECUTE_SELECTOR)return[];const o=this._buildUniswapPluginCommandData(),i=await this._extractClearSignContexts(e,a);return i.length>0?[o,...i]:[]}_buildUniswapPluginCommandData(){const t=new s.ByteArrayBuilder().add8BitUIntToData(f.UNISWAP_PLUGIN_NAME.length).addAsciiStringToData(f.UNISWAP_PLUGIN_NAME).addBufferToData((0,s.hexaStringToBuffer)(d.UNISWAP_UNIVERSAL_ROUTER_ADDRESS)).addBufferToData((0,s.hexaStringToBuffer)(d.UNISWAP_EXECUTE_SELECTOR)).addBufferToData((0,s.hexaStringToBuffer)(f.UNISWAP_PLUGIN_SIGNATURE)).build();return{type:g.ClearSignContextType.EXTERNAL_PLUGIN,payload:(0,s.bufferToHexaString)(t).slice(2)}}async _extractClearSignContexts(t,e){try{const a=new A.Interface(d.UNISWAP_EXECUTE_ABI).parseTransaction({data:t}),o=a?.args[0],i=a?.args[1];if(!(0,s.isHexaString)(o)||!this._isHexaStringArray(i))return[];const x=this._extractCommands(o).orDefault([]);if(o.length===0||i.length!==x.length)return[];const y=x.reduce((m,u,U)=>{const N=i[U],E=this.commandDecoderDataSource.decode(u,N,e);return m.push([u,E]),m},[]);if(!this._isChainingSwapSupported(y))return[];const P=[...new Set(y.flatMap(([,m])=>m))];return(await Promise.all(P.map(m=>this.tokenDataSource.getTokenInfosPayload({address:m,chainId:e})))).map(m=>m.caseOf({Left:u=>({type:g.ClearSignContextType.ERROR,error:u}),Right:u=>({type:g.ClearSignContextType.TOKEN,payload:u})}))}catch{return[]}}_extractCommands(t){return S.Maybe.fromNullable(t.slice(2).match(/../g)).map(e=>e.map(n=>`0x${n}`)).map(e=>e.map(n=>d.UNISWAP_COMMANDS[n])).chain(e=>e.every(n=>n!==void 0)?S.Maybe.of(e):S.Nothing)}_isChainingSwapSupported(t){let e,n;for(const[a,o]of t){if(!d.UNISWAP_SWAP_COMMANDS.includes(a))continue;const i=a.slice(0,2);if(e&&(e!==o[0]||n!==i))return!1;e=o[o.length-1],n=i}return!0}_isHexaStringArray(t){return Array.isArray(t)&&t.every(e=>typeof e=="string"&&(0,s.isHexaString)(e))}};p=_([(0,c.injectable)(),C(0,(0,c.inject)(h.uniswapTypes.CommandDecoderDataSource)),C(1,(0,c.inject)(T.tokenTypes.TokenDataSource))],p);0&&(module.exports={UniswapContextLoader});
1
+ "use strict";var g=Object.defineProperty;var D=Object.getOwnPropertyDescriptor;var N=Object.getOwnPropertyNames;var w=Object.prototype.hasOwnProperty;var H=(i,e)=>{for(var t in e)g(i,t,{get:e[t],enumerable:!0})},b=(i,e,t,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of N(e))!w.call(i,n)&&n!==t&&g(i,n,{get:()=>e[n],enumerable:!(a=D(e,n))||a.enumerable});return i};var k=i=>b(g({},"__esModule",{value:!0}),i),T=(i,e,t,a)=>{for(var n=a>1?void 0:a?D(e,t):e,r=i.length-1,d;r>=0;r--)(d=i[r])&&(n=(a?d(e,t,n):d(n))||n);return a&&n&&g(e,t,n),n},C=(i,e)=>(t,a)=>e(t,a,i);var v={};H(v,{UniswapContextLoader:()=>S});module.exports=k(v);var o=require("@ledgerhq/device-management-kit"),_=require("ethers"),u=require("inversify"),l=require("purify-ts"),p=require("../../shared/model/ClearSignContext"),U=require("../../token/di/tokenTypes"),f=require("../../uniswap/constants/plugin"),s=require("../../uniswap/constants/uniswap"),h=require("../../uniswap/di/uniswapTypes");const R=[p.ClearSignContextType.EXTERNAL_PLUGIN,p.ClearSignContextType.TOKEN];let S=class{constructor(e,t){this.commandDecoderDataSource=e;this.tokenDataSource=t}canHandle(e,t){return typeof e=="object"&&e!==null&&"to"in e&&"data"in e&&"selector"in e&&"chainId"in e&&typeof e.chainId=="number"&&(0,o.isHexaString)(e.data)&&e.data!=="0x"&&(0,o.isHexaString)(e.selector)&&e.selector===s.UNISWAP_EXECUTE_SELECTOR&&(0,o.isHexaString)(e.to)&&e.to===s.UNISWAP_UNIVERSAL_ROUTER_ADDRESS&&R.every(a=>t.includes(a))}async load(e){const{data:t,chainId:a}=e,n=this._buildUniswapPluginCommandData(),r=await this._extractClearSignContexts(t,a);return r.length>0?[n,...r]:[]}_buildUniswapPluginCommandData(){const e=new o.ByteArrayBuilder().add8BitUIntToData(f.UNISWAP_PLUGIN_NAME.length).addAsciiStringToData(f.UNISWAP_PLUGIN_NAME).addBufferToData((0,o.hexaStringToBuffer)(s.UNISWAP_UNIVERSAL_ROUTER_ADDRESS)).addBufferToData((0,o.hexaStringToBuffer)(s.UNISWAP_EXECUTE_SELECTOR)).addBufferToData((0,o.hexaStringToBuffer)(f.UNISWAP_PLUGIN_SIGNATURE)).build();return{type:p.ClearSignContextType.EXTERNAL_PLUGIN,payload:(0,o.bufferToHexaString)(e,!1)}}async _extractClearSignContexts(e,t){try{const n=new _.Interface(s.UNISWAP_EXECUTE_ABI).parseTransaction({data:e}),r=n?.args[0],d=n?.args[1];if(!(0,o.isHexaString)(r)||!this._isHexaStringArray(d))return[];const x=this._extractCommands(r).orDefault([]);if(r.length===0||d.length!==x.length)return[];const y=x.reduce((c,m,P)=>{const I=d[P],E=this.commandDecoderDataSource.decode(m,I,t);return c.push([m,E]),c},[]);if(!this._isChainingSwapSupported(y))return[];const A=[...new Set(y.flatMap(([,c])=>c))];return(await Promise.all(A.map(c=>this.tokenDataSource.getTokenInfosPayload({address:c,chainId:t})))).map(c=>c.caseOf({Left:m=>({type:p.ClearSignContextType.ERROR,error:m}),Right:m=>({type:p.ClearSignContextType.TOKEN,payload:m})}))}catch{return[]}}_extractCommands(e){return l.Maybe.fromNullable(e.slice(2).match(/../g)).map(t=>t.map(a=>`0x${a}`)).map(t=>t.map(a=>s.UNISWAP_COMMANDS[a])).chain(t=>t.every(a=>a!==void 0)?l.Maybe.of(t):l.Nothing)}_isChainingSwapSupported(e){let t,a;for(const[n,r]of e){if(!s.UNISWAP_SWAP_COMMANDS.includes(n))continue;const d=n.slice(0,2);if(t&&(t!==r[0]||a!==d))return!1;t=r[r.length-1],a=d}return!0}_isHexaStringArray(e){return Array.isArray(e)&&e.every(t=>typeof t=="string"&&(0,o.isHexaString)(t))}};S=T([(0,u.injectable)(),C(0,(0,u.inject)(h.uniswapTypes.CommandDecoderDataSource)),C(1,(0,u.inject)(U.tokenTypes.TokenDataSource))],S);0&&(module.exports={UniswapContextLoader});
2
2
  //# sourceMappingURL=UniswapContextLoader.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/uniswap/domain/UniswapContextLoader.ts"],
4
- "sourcesContent": ["import {\n bufferToHexaString,\n ByteArrayBuilder,\n HexaString,\n hexaStringToBuffer,\n isHexaString,\n} from \"@ledgerhq/device-management-kit\";\nimport { Interface } from \"ethers\";\nimport { inject, injectable } from \"inversify\";\nimport { Maybe, Nothing } from \"purify-ts\";\n\nimport { ContextLoader } from \"@/shared/domain/ContextLoader\";\nimport {\n ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\nimport { TransactionContext } from \"@/shared/model/TransactionContext\";\nimport { type TokenDataSource } from \"@/token/data/TokenDataSource\";\nimport { tokenTypes } from \"@/token/di/tokenTypes\";\nimport {\n UNISWAP_PLUGIN_NAME,\n UNISWAP_PLUGIN_SIGNATURE,\n} from \"@/uniswap/constants/plugin\";\nimport {\n UNISWAP_COMMANDS,\n UNISWAP_EXECUTE_ABI,\n UNISWAP_EXECUTE_SELECTOR,\n UNISWAP_SWAP_COMMANDS,\n UNISWAP_UNIVERSAL_ROUTER_ADDRESS,\n UniswapSupportedCommand,\n} from \"@/uniswap/constants/uniswap\";\nimport { type CommandDecoderDataSource } from \"@/uniswap/data/CommandDecoderDataSource\";\nimport { uniswapTypes } from \"@/uniswap/di/uniswapTypes\";\n\n@injectable()\nexport class UniswapContextLoader implements ContextLoader {\n constructor(\n @inject(uniswapTypes.CommandDecoderDataSource)\n private commandDecoderDataSource: CommandDecoderDataSource,\n @inject(tokenTypes.TokenDataSource)\n private tokenDataSource: TokenDataSource,\n ) {}\n\n async load(ctx: TransactionContext): Promise<ClearSignContext[]> {\n const { data, selector, chainId } = ctx;\n if (!isHexaString(data)) {\n return [];\n }\n\n if (selector !== UNISWAP_EXECUTE_SELECTOR) {\n return [];\n }\n\n const externalPluginContext = this._buildUniswapPluginCommandData();\n const tokenContexts = await this._extractClearSignContexts(data, chainId);\n\n if (tokenContexts.length > 0)\n return [externalPluginContext, ...tokenContexts];\n\n return [];\n }\n\n /**\n * Constructs the external plugin context for Uniswap external plugin command.\n *\n * @private\n * @returns {ClearSignContext} - The generated external plugin context.\n */\n private _buildUniswapPluginCommandData(): ClearSignContext {\n const buffer = new ByteArrayBuilder()\n .add8BitUIntToData(UNISWAP_PLUGIN_NAME.length)\n .addAsciiStringToData(UNISWAP_PLUGIN_NAME)\n .addBufferToData(hexaStringToBuffer(UNISWAP_UNIVERSAL_ROUTER_ADDRESS)!)\n .addBufferToData(hexaStringToBuffer(UNISWAP_EXECUTE_SELECTOR)!)\n .addBufferToData(hexaStringToBuffer(UNISWAP_PLUGIN_SIGNATURE)!)\n .build();\n\n return {\n type: ClearSignContextType.EXTERNAL_PLUGIN,\n payload: bufferToHexaString(buffer).slice(2),\n };\n }\n\n /**\n * Extracts and decodes the clear sign contexts from a Uniswap calldata transaction.\n *\n * This function:\n * - Parses the calldata using the Uniswap `execute` function signature.\n * - Extracts and validates the `commands` and `inputs`.\n * - Decodes the commands and ensures they match the number of inputs.\n * - Extracts addresses used in the transaction and verifies if chaining swaps are supported.\n * - Fetches token information for unique addresses.\n * - Returns an array of `ClearSignContext` objects representing either token data or errors.\n *\n * @private\n * @param {HexaString} calldata - The raw calldata of the Uniswap transaction.\n * @param {number} chainId - The blockchain chain ID where the transaction is being executed.\n * @returns {Promise<ClearSignContext[]>} - A promise resolving to an array of clear sign contexts.\n */\n private async _extractClearSignContexts(\n calldata: HexaString,\n chainId: number,\n ): Promise<ClearSignContext[]> {\n try {\n const iface = new Interface(UNISWAP_EXECUTE_ABI);\n\n const tx = iface.parseTransaction({ data: calldata });\n const commands: unknown = tx?.args[0];\n const inputs: unknown = tx?.args[1];\n\n if (!isHexaString(commands) || !this._isHexaStringArray(inputs)) {\n return [];\n }\n\n const decodedCommands = this._extractCommands(commands).orDefault([]);\n if (commands.length === 0 || inputs.length !== decodedCommands.length) {\n // Invalid commands or inputs\n return [];\n }\n\n const addressesByCommand = decodedCommands.reduce(\n (acc, command, index) => {\n const input = inputs[index]!;\n const decoded: HexaString[] = this.commandDecoderDataSource.decode(\n command,\n input,\n chainId,\n );\n\n acc.push([command, decoded]);\n\n return acc;\n },\n [] as [UniswapSupportedCommand, HexaString[]][],\n );\n\n if (!this._isChainingSwapSupported(addressesByCommand)) {\n return [];\n }\n\n const uniqueAddresses = [\n ...new Set(addressesByCommand.flatMap(([, addresses]) => addresses)),\n ];\n\n const tokensPayload = await Promise.all(\n uniqueAddresses.map((address) =>\n this.tokenDataSource.getTokenInfosPayload({ address, chainId }),\n ),\n );\n\n return tokensPayload.map((either) =>\n either.caseOf<ClearSignContext>({\n Left: (error) => ({ type: ClearSignContextType.ERROR, error }),\n Right: (payload) => ({ type: ClearSignContextType.TOKEN, payload }),\n }),\n );\n } catch (_) {\n return [];\n }\n }\n\n /**\n * Extracts Uniswap-supported commands from a hexadecimal string.\n * Each command is represented by one byte (2 hex characters), and this function:\n * - Maps each command to a known Uniswap command.\n * - Returns `Nothing` if any extracted command is unsupported.\n *\n * @private\n * @param {HexaString} hex - A hexadecimal string representing commands.\n * @returns {Maybe<UniswapSupportedCommand[]>} - A `Maybe` containing an array of recognized commands, or `Nothing` if any command is unsupported.\n *\n * @example\n * // Valid command extraction\n * _extractCommands('0x0008');\n * // Returns: Just(['0x00', '0x08'])\n *\n * @example\n * // Contains an unsupported command (0x05 is not supported)\n * _extractCommands('0x0005');\n * // Returns: Nothing\n *\n * @example\n * // Empty or invalid input\n * _extractCommands('0x');\n * // Returns: Nothing\n */\n private _extractCommands(hex: HexaString): Maybe<UniswapSupportedCommand[]> {\n return Maybe.fromNullable(hex.slice(2).match(/../g))\n .map((bytes) => bytes.map((b) => `0x${b}` as HexaString))\n .map((hexBytes) => hexBytes.map((b) => UNISWAP_COMMANDS[b]))\n .chain((commands) =>\n commands.every((command) => command !== undefined)\n ? Maybe.of(commands as UniswapSupportedCommand[])\n : Nothing,\n );\n }\n\n /**\n * Checks if the provided swap commands can be chained together.\n * A valid chain requires that:\n * - The output asset of the previous swap matches the input asset of the next swap.\n * - The pool version remains consistent across swaps.\n *\n * @private\n * @param {Array<[UniswapSupportedCommand, HexaString[]]>} data - An array of tuples containing a swap command and associated addresses.\n * @returns {boolean} - Returns `true` if the swap commands form a valid chain, otherwise `false`.\n *\n * @example\n * // Valid chaining: same output/input asset and pool version\n * _isChainingSwapSupported([\n * ['0x08', ['0xABC', '0xDEF']],\n * ['0x08', ['0xDEF', '0x123']]\n * ]);\n * // Returns: true\n *\n * @example\n * // Invalid chaining: different pool versions\n * _isChainingSwapSupported([\n * ['0x08', ['0xABC', '0xDEF']],\n * ['0x01', ['0xDEF', '0x123']]\n * ]);\n * // Returns: false\n *\n * @example\n * // Invalid chaining: output does not match next input\n * _isChainingSwapSupported([\n * ['0x01A1', ['0xABC', '0xDEF']],\n * ['0x01B2', ['0xXYZ', '0x123']]\n * ]);\n * // Returns: false\n */\n private _isChainingSwapSupported(\n data: [UniswapSupportedCommand, HexaString[]][],\n ): boolean {\n let lastAsset: HexaString | undefined = undefined;\n let lastPoolVersion: string | undefined = undefined;\n\n for (const [command, addresses] of data) {\n if (!UNISWAP_SWAP_COMMANDS.includes(command)) continue; // Ignore non-swap commands\n\n const poolVersion = command.slice(0, 2);\n\n if (\n lastAsset &&\n (lastAsset !== addresses[0] || lastPoolVersion !== poolVersion)\n ) {\n // Invalid chaining, return empty array\n return false;\n }\n\n // update last asset and pool version\n lastAsset = addresses[addresses.length - 1];\n lastPoolVersion = poolVersion;\n }\n\n return true;\n }\n\n /**\n * Checks if a given value is an array of hexadecimal strings.\n *\n * @private\n * @param {unknown} array - The value to check.\n * @returns {array is HexaString[]} - `true` if the value is an array of hexadecimal strings, otherwise `false`.\n */\n private _isHexaStringArray(array: unknown): array is HexaString[] {\n return (\n Array.isArray(array) &&\n array.every((item) => typeof item === \"string\" && isHexaString(item))\n );\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["UniswapContextLoader_exports", "__export", "UniswapContextLoader", "__toCommonJS", "import_device_management_kit", "import_ethers", "import_inversify", "import_purify_ts", "import_ClearSignContext", "import_tokenTypes", "import_plugin", "import_uniswap", "import_uniswapTypes", "UniswapContextLoader", "commandDecoderDataSource", "tokenDataSource", "ctx", "data", "selector", "chainId", "externalPluginContext", "tokenContexts", "buffer", "calldata", "tx", "commands", "inputs", "decodedCommands", "addressesByCommand", "acc", "command", "index", "input", "decoded", "uniqueAddresses", "addresses", "address", "either", "error", "payload", "hex", "bytes", "b", "hexBytes", "lastAsset", "lastPoolVersion", "poolVersion", "array", "item", "__decorateClass", "__decorateParam"]
4
+ "sourcesContent": ["import {\n bufferToHexaString,\n ByteArrayBuilder,\n HexaString,\n hexaStringToBuffer,\n isHexaString,\n} from \"@ledgerhq/device-management-kit\";\nimport { Interface } from \"ethers\";\nimport { inject, injectable } from \"inversify\";\nimport { Maybe, Nothing } from \"purify-ts\";\n\nimport { ContextLoader } from \"@/shared/domain/ContextLoader\";\nimport {\n ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\nimport { type TokenDataSource } from \"@/token/data/TokenDataSource\";\nimport { tokenTypes } from \"@/token/di/tokenTypes\";\nimport {\n UNISWAP_PLUGIN_NAME,\n UNISWAP_PLUGIN_SIGNATURE,\n} from \"@/uniswap/constants/plugin\";\nimport {\n UNISWAP_COMMANDS,\n UNISWAP_EXECUTE_ABI,\n UNISWAP_EXECUTE_SELECTOR,\n UNISWAP_SWAP_COMMANDS,\n UNISWAP_UNIVERSAL_ROUTER_ADDRESS,\n UniswapSupportedCommand,\n} from \"@/uniswap/constants/uniswap\";\nimport { type CommandDecoderDataSource } from \"@/uniswap/data/CommandDecoderDataSource\";\nimport { uniswapTypes } from \"@/uniswap/di/uniswapTypes\";\n\nexport type UniswapContextInput = {\n to: HexaString;\n data: HexaString;\n selector: HexaString;\n chainId: number;\n};\n\nconst SUPPORTED_TYPES: ClearSignContextType[] = [\n ClearSignContextType.EXTERNAL_PLUGIN,\n ClearSignContextType.TOKEN,\n];\n\n@injectable()\nexport class UniswapContextLoader\n implements ContextLoader<UniswapContextInput>\n{\n constructor(\n @inject(uniswapTypes.CommandDecoderDataSource)\n private commandDecoderDataSource: CommandDecoderDataSource,\n @inject(tokenTypes.TokenDataSource)\n private tokenDataSource: TokenDataSource,\n ) {}\n\n canHandle(\n input: unknown,\n expectedTypes: ClearSignContextType[],\n ): input is UniswapContextInput {\n return (\n typeof input === \"object\" &&\n input !== null &&\n \"to\" in input &&\n \"data\" in input &&\n \"selector\" in input &&\n \"chainId\" in input &&\n typeof input.chainId === \"number\" &&\n isHexaString(input.data) &&\n input.data !== \"0x\" &&\n isHexaString(input.selector) &&\n input.selector === UNISWAP_EXECUTE_SELECTOR &&\n isHexaString(input.to) &&\n input.to === UNISWAP_UNIVERSAL_ROUTER_ADDRESS &&\n SUPPORTED_TYPES.every((type) => expectedTypes.includes(type))\n );\n }\n\n async load(input: UniswapContextInput): Promise<ClearSignContext[]> {\n const { data, chainId } = input;\n\n const externalPluginContext = this._buildUniswapPluginCommandData();\n const tokenContexts = await this._extractClearSignContexts(data, chainId);\n\n if (tokenContexts.length > 0)\n return [externalPluginContext, ...tokenContexts];\n\n return [];\n }\n\n /**\n * Constructs the external plugin context for Uniswap external plugin command.\n *\n * @private\n * @returns {ClearSignContext} - The generated external plugin context.\n */\n private _buildUniswapPluginCommandData(): ClearSignContext {\n const buffer = new ByteArrayBuilder()\n .add8BitUIntToData(UNISWAP_PLUGIN_NAME.length)\n .addAsciiStringToData(UNISWAP_PLUGIN_NAME)\n .addBufferToData(hexaStringToBuffer(UNISWAP_UNIVERSAL_ROUTER_ADDRESS)!)\n .addBufferToData(hexaStringToBuffer(UNISWAP_EXECUTE_SELECTOR)!)\n .addBufferToData(hexaStringToBuffer(UNISWAP_PLUGIN_SIGNATURE)!)\n .build();\n\n return {\n type: ClearSignContextType.EXTERNAL_PLUGIN,\n payload: bufferToHexaString(buffer, false),\n };\n }\n\n /**\n * Extracts and decodes the clear sign contexts from a Uniswap calldata transaction.\n *\n * This function:\n * - Parses the calldata using the Uniswap `execute` function signature.\n * - Extracts and validates the `commands` and `inputs`.\n * - Decodes the commands and ensures they match the number of inputs.\n * - Extracts addresses used in the transaction and verifies if chaining swaps are supported.\n * - Fetches token information for unique addresses.\n * - Returns an array of `ClearSignContext` objects representing either token data or errors.\n *\n * @private\n * @param {HexaString} calldata - The raw calldata of the Uniswap transaction.\n * @param {number} chainId - The blockchain chain ID where the transaction is being executed.\n * @returns {Promise<ClearSignContext[]>} - A promise resolving to an array of clear sign contexts.\n */\n private async _extractClearSignContexts(\n calldata: HexaString,\n chainId: number,\n ): Promise<ClearSignContext[]> {\n try {\n const iface = new Interface(UNISWAP_EXECUTE_ABI);\n\n const tx = iface.parseTransaction({ data: calldata });\n const commands: unknown = tx?.args[0];\n const inputs: unknown = tx?.args[1];\n\n if (!isHexaString(commands) || !this._isHexaStringArray(inputs)) {\n return [];\n }\n\n const decodedCommands = this._extractCommands(commands).orDefault([]);\n if (commands.length === 0 || inputs.length !== decodedCommands.length) {\n // Invalid commands or inputs\n return [];\n }\n\n const addressesByCommand = decodedCommands.reduce(\n (acc, command, index) => {\n const input = inputs[index]!;\n const decoded: HexaString[] = this.commandDecoderDataSource.decode(\n command,\n input,\n chainId,\n );\n\n acc.push([command, decoded]);\n\n return acc;\n },\n [] as [UniswapSupportedCommand, HexaString[]][],\n );\n\n if (!this._isChainingSwapSupported(addressesByCommand)) {\n return [];\n }\n\n const uniqueAddresses = [\n ...new Set(addressesByCommand.flatMap(([, addresses]) => addresses)),\n ];\n\n const tokensPayload = await Promise.all(\n uniqueAddresses.map((address) =>\n this.tokenDataSource.getTokenInfosPayload({ address, chainId }),\n ),\n );\n\n return tokensPayload.map((either) =>\n either.caseOf<ClearSignContext>({\n Left: (error) => ({ type: ClearSignContextType.ERROR, error }),\n Right: (payload) => ({ type: ClearSignContextType.TOKEN, payload }),\n }),\n );\n } catch (_) {\n return [];\n }\n }\n\n /**\n * Extracts Uniswap-supported commands from a hexadecimal string.\n * Each command is represented by one byte (2 hex characters), and this function:\n * - Maps each command to a known Uniswap command.\n * - Returns `Nothing` if any extracted command is unsupported.\n *\n * @private\n * @param {HexaString} hex - A hexadecimal string representing commands.\n * @returns {Maybe<UniswapSupportedCommand[]>} - A `Maybe` containing an array of recognized commands, or `Nothing` if any command is unsupported.\n *\n * @example\n * // Valid command extraction\n * _extractCommands('0x0008');\n * // Returns: Just(['0x00', '0x08'])\n *\n * @example\n * // Contains an unsupported command (0x05 is not supported)\n * _extractCommands('0x0005');\n * // Returns: Nothing\n *\n * @example\n * // Empty or invalid input\n * _extractCommands('0x');\n * // Returns: Nothing\n */\n private _extractCommands(hex: HexaString): Maybe<UniswapSupportedCommand[]> {\n return Maybe.fromNullable(hex.slice(2).match(/../g))\n .map((bytes) => bytes.map((b) => `0x${b}` as HexaString))\n .map((hexBytes) => hexBytes.map((b) => UNISWAP_COMMANDS[b]))\n .chain((commands) =>\n commands.every((command) => command !== undefined)\n ? Maybe.of(commands as UniswapSupportedCommand[])\n : Nothing,\n );\n }\n\n /**\n * Checks if the provided swap commands can be chained together.\n * A valid chain requires that:\n * - The output asset of the previous swap matches the input asset of the next swap.\n * - The pool version remains consistent across swaps.\n *\n * @private\n * @param {Array<[UniswapSupportedCommand, HexaString[]]>} data - An array of tuples containing a swap command and associated addresses.\n * @returns {boolean} - Returns `true` if the swap commands form a valid chain, otherwise `false`.\n *\n * @example\n * // Valid chaining: same output/input asset and pool version\n * _isChainingSwapSupported([\n * ['0x08', ['0xABC', '0xDEF']],\n * ['0x08', ['0xDEF', '0x123']]\n * ]);\n * // Returns: true\n *\n * @example\n * // Invalid chaining: different pool versions\n * _isChainingSwapSupported([\n * ['0x08', ['0xABC', '0xDEF']],\n * ['0x01', ['0xDEF', '0x123']]\n * ]);\n * // Returns: false\n *\n * @example\n * // Invalid chaining: output does not match next input\n * _isChainingSwapSupported([\n * ['0x01A1', ['0xABC', '0xDEF']],\n * ['0x01B2', ['0xXYZ', '0x123']]\n * ]);\n * // Returns: false\n */\n private _isChainingSwapSupported(\n data: [UniswapSupportedCommand, HexaString[]][],\n ): boolean {\n let lastAsset: HexaString | undefined = undefined;\n let lastPoolVersion: string | undefined = undefined;\n\n for (const [command, addresses] of data) {\n if (!UNISWAP_SWAP_COMMANDS.includes(command)) continue; // Ignore non-swap commands\n\n const poolVersion = command.slice(0, 2);\n\n if (\n lastAsset &&\n (lastAsset !== addresses[0] || lastPoolVersion !== poolVersion)\n ) {\n // Invalid chaining, return empty array\n return false;\n }\n\n // update last asset and pool version\n lastAsset = addresses[addresses.length - 1];\n lastPoolVersion = poolVersion;\n }\n\n return true;\n }\n\n /**\n * Checks if a given value is an array of hexadecimal strings.\n *\n * @private\n * @param {unknown} array - The value to check.\n * @returns {array is HexaString[]} - `true` if the value is an array of hexadecimal strings, otherwise `false`.\n */\n private _isHexaStringArray(array: unknown): array is HexaString[] {\n return (\n Array.isArray(array) &&\n array.every((item) => typeof item === \"string\" && isHexaString(item))\n );\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["UniswapContextLoader_exports", "__export", "UniswapContextLoader", "__toCommonJS", "import_device_management_kit", "import_ethers", "import_inversify", "import_purify_ts", "import_ClearSignContext", "import_tokenTypes", "import_plugin", "import_uniswap", "import_uniswapTypes", "SUPPORTED_TYPES", "UniswapContextLoader", "commandDecoderDataSource", "tokenDataSource", "input", "expectedTypes", "type", "data", "chainId", "externalPluginContext", "tokenContexts", "buffer", "calldata", "tx", "commands", "inputs", "decodedCommands", "addressesByCommand", "acc", "command", "index", "decoded", "uniqueAddresses", "addresses", "address", "either", "error", "payload", "hex", "bytes", "b", "hexBytes", "lastAsset", "lastPoolVersion", "poolVersion", "array", "item", "__decorateClass", "__decorateParam"]
7
7
  }