@ledgerhq/device-signer-kit-ethereum 0.0.0-wrong-error-when-in-experimental-provider-20251021162636 → 0.0.0-z-intent-queue-7-20251204111630

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 (357) hide show
  1. package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js +1 -1
  2. package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js.map +2 -2
  3. package/lib/cjs/api/app-binder/SignTypedDataDeviceActionTypes.js +1 -1
  4. package/lib/cjs/api/app-binder/SignTypedDataDeviceActionTypes.js.map +2 -2
  5. package/lib/cjs/internal/app-binder/EthAppBinder.test.js +1 -1
  6. package/lib/cjs/internal/app-binder/EthAppBinder.test.js.map +2 -2
  7. package/lib/cjs/internal/app-binder/command/GetAddressCommand.js +1 -1
  8. package/lib/cjs/internal/app-binder/command/GetAddressCommand.js.map +2 -2
  9. package/lib/cjs/internal/app-binder/command/GetAddressCommand.test.js +1 -1
  10. package/lib/cjs/internal/app-binder/command/GetAddressCommand.test.js.map +2 -2
  11. package/lib/cjs/internal/app-binder/command/GetAppConfigurationCommand.js +1 -1
  12. package/lib/cjs/internal/app-binder/command/GetAppConfigurationCommand.js.map +2 -2
  13. package/lib/cjs/internal/app-binder/command/GetAppConfigurationCommand.test.js +1 -1
  14. package/lib/cjs/internal/app-binder/command/GetAppConfigurationCommand.test.js.map +2 -2
  15. package/lib/cjs/internal/app-binder/command/GetChallengeCommand.js +1 -1
  16. package/lib/cjs/internal/app-binder/command/GetChallengeCommand.js.map +2 -2
  17. package/lib/cjs/internal/app-binder/command/GetChallengeCommand.test.js +1 -1
  18. package/lib/cjs/internal/app-binder/command/GetChallengeCommand.test.js.map +2 -2
  19. package/lib/cjs/internal/app-binder/command/ProvideEnumCommand.js +1 -1
  20. package/lib/cjs/internal/app-binder/command/ProvideEnumCommand.js.map +2 -2
  21. package/lib/cjs/internal/app-binder/command/ProvideEnumCommand.test.js +1 -1
  22. package/lib/cjs/internal/app-binder/command/ProvideEnumCommand.test.js.map +3 -3
  23. package/lib/cjs/internal/app-binder/command/ProvideNFTInformationCommand.js +1 -1
  24. package/lib/cjs/internal/app-binder/command/ProvideNFTInformationCommand.js.map +2 -2
  25. package/lib/cjs/internal/app-binder/command/ProvideNFTInformationCommand.test.js +1 -1
  26. package/lib/cjs/internal/app-binder/command/ProvideNFTInformationCommand.test.js.map +3 -3
  27. package/lib/cjs/internal/app-binder/command/ProvideNetworkConfigurationCommand.js +1 -1
  28. package/lib/cjs/internal/app-binder/command/ProvideNetworkConfigurationCommand.js.map +2 -2
  29. package/lib/cjs/internal/app-binder/command/ProvideNetworkConfigurationCommand.test.js +1 -1
  30. package/lib/cjs/internal/app-binder/command/ProvideNetworkConfigurationCommand.test.js.map +3 -3
  31. package/lib/cjs/internal/app-binder/command/ProvideProxyInfoCommand.js +1 -1
  32. package/lib/cjs/internal/app-binder/command/ProvideProxyInfoCommand.js.map +2 -2
  33. package/lib/cjs/internal/app-binder/command/ProvideProxyInfoCommand.test.js +1 -1
  34. package/lib/cjs/internal/app-binder/command/ProvideProxyInfoCommand.test.js.map +3 -3
  35. package/lib/cjs/internal/app-binder/command/ProvideSafeAccountCommand.js +1 -1
  36. package/lib/cjs/internal/app-binder/command/ProvideSafeAccountCommand.js.map +2 -2
  37. package/lib/cjs/internal/app-binder/command/ProvideSafeAccountCommand.test.js +1 -1
  38. package/lib/cjs/internal/app-binder/command/ProvideSafeAccountCommand.test.js.map +3 -3
  39. package/lib/cjs/internal/app-binder/command/ProvideTokenInformationCommand.js +1 -1
  40. package/lib/cjs/internal/app-binder/command/ProvideTokenInformationCommand.js.map +2 -2
  41. package/lib/cjs/internal/app-binder/command/ProvideTokenInformationCommand.test.js +1 -1
  42. package/lib/cjs/internal/app-binder/command/ProvideTokenInformationCommand.test.js.map +2 -2
  43. package/lib/cjs/internal/app-binder/command/ProvideTransactionFieldDescriptionCommand.js +1 -1
  44. package/lib/cjs/internal/app-binder/command/ProvideTransactionFieldDescriptionCommand.js.map +2 -2
  45. package/lib/cjs/internal/app-binder/command/ProvideTransactionFieldDescriptionCommand.test.js +1 -1
  46. package/lib/cjs/internal/app-binder/command/ProvideTransactionFieldDescriptionCommand.test.js.map +3 -3
  47. package/lib/cjs/internal/app-binder/command/ProvideTransactionInformationCommand.js +1 -1
  48. package/lib/cjs/internal/app-binder/command/ProvideTransactionInformationCommand.js.map +2 -2
  49. package/lib/cjs/internal/app-binder/command/ProvideTransactionInformationCommand.test.js +1 -1
  50. package/lib/cjs/internal/app-binder/command/ProvideTransactionInformationCommand.test.js.map +3 -3
  51. package/lib/cjs/internal/app-binder/command/ProvideTrustedNameCommand.js +1 -1
  52. package/lib/cjs/internal/app-binder/command/ProvideTrustedNameCommand.js.map +2 -2
  53. package/lib/cjs/internal/app-binder/command/ProvideTrustedNameCommand.test.js +1 -1
  54. package/lib/cjs/internal/app-binder/command/ProvideTrustedNameCommand.test.js.map +3 -3
  55. package/lib/cjs/internal/app-binder/command/ProvideWeb3CheckCommand.js +1 -1
  56. package/lib/cjs/internal/app-binder/command/ProvideWeb3CheckCommand.js.map +2 -2
  57. package/lib/cjs/internal/app-binder/command/ProvideWeb3CheckCommand.test.js +1 -1
  58. package/lib/cjs/internal/app-binder/command/ProvideWeb3CheckCommand.test.js.map +3 -3
  59. package/lib/cjs/internal/app-binder/command/SendEIP712FilteringCommand.js +1 -1
  60. package/lib/cjs/internal/app-binder/command/SendEIP712FilteringCommand.js.map +2 -2
  61. package/lib/cjs/internal/app-binder/command/SendEIP712FilteringCommand.test.js +1 -1
  62. package/lib/cjs/internal/app-binder/command/SendEIP712FilteringCommand.test.js.map +3 -3
  63. package/lib/cjs/internal/app-binder/command/SendEIP712StructDefinitionCommand.js +1 -1
  64. package/lib/cjs/internal/app-binder/command/SendEIP712StructDefinitionCommand.js.map +2 -2
  65. package/lib/cjs/internal/app-binder/command/SendEIP712StructDefinitionCommand.test.js +1 -1
  66. package/lib/cjs/internal/app-binder/command/SendEIP712StructDefinitionCommand.test.js.map +3 -3
  67. package/lib/cjs/internal/app-binder/command/SendEIP712StructImplemCommand.js +1 -1
  68. package/lib/cjs/internal/app-binder/command/SendEIP712StructImplemCommand.js.map +2 -2
  69. package/lib/cjs/internal/app-binder/command/SendEIP712StructImplemCommand.test.js +1 -1
  70. package/lib/cjs/internal/app-binder/command/SendEIP712StructImplemCommand.test.js.map +3 -3
  71. package/lib/cjs/internal/app-binder/command/SetExternalPluginCommand.js +1 -1
  72. package/lib/cjs/internal/app-binder/command/SetExternalPluginCommand.js.map +2 -2
  73. package/lib/cjs/internal/app-binder/command/SetExternalPluginCommand.test.js +2 -2
  74. package/lib/cjs/internal/app-binder/command/SetExternalPluginCommand.test.js.map +3 -3
  75. package/lib/cjs/internal/app-binder/command/SetPluginCommand.js +1 -1
  76. package/lib/cjs/internal/app-binder/command/SetPluginCommand.js.map +2 -2
  77. package/lib/cjs/internal/app-binder/command/SetPluginCommand.test.js +2 -2
  78. package/lib/cjs/internal/app-binder/command/SetPluginCommand.test.js.map +3 -3
  79. package/lib/cjs/internal/app-binder/command/SignAuthorizationDelegationCommand.js +1 -1
  80. package/lib/cjs/internal/app-binder/command/SignAuthorizationDelegationCommand.js.map +2 -2
  81. package/lib/cjs/internal/app-binder/command/SignAuthorizationDelegationCommand.test.js +1 -1
  82. package/lib/cjs/internal/app-binder/command/SignAuthorizationDelegationCommand.test.js.map +3 -3
  83. package/lib/cjs/internal/app-binder/command/SignEIP712Command.js +1 -1
  84. package/lib/cjs/internal/app-binder/command/SignEIP712Command.js.map +3 -3
  85. package/lib/cjs/internal/app-binder/command/SignEIP712Command.test.js +1 -1
  86. package/lib/cjs/internal/app-binder/command/SignEIP712Command.test.js.map +2 -2
  87. package/lib/cjs/internal/app-binder/command/SignPersonalMessageCommand.js +1 -1
  88. package/lib/cjs/internal/app-binder/command/SignPersonalMessageCommand.js.map +2 -2
  89. package/lib/cjs/internal/app-binder/command/SignPersonalMessageCommand.test.js +1 -1
  90. package/lib/cjs/internal/app-binder/command/SignPersonalMessageCommand.test.js.map +3 -3
  91. package/lib/cjs/internal/app-binder/command/SignTransactionCommand.js +1 -1
  92. package/lib/cjs/internal/app-binder/command/SignTransactionCommand.js.map +2 -2
  93. package/lib/cjs/internal/app-binder/command/SignTransactionCommand.test.js +1 -1
  94. package/lib/cjs/internal/app-binder/command/SignTransactionCommand.test.js.map +3 -3
  95. package/lib/cjs/internal/app-binder/command/StartTransactionCommand.js +1 -1
  96. package/lib/cjs/internal/app-binder/command/StartTransactionCommand.js.map +2 -2
  97. package/lib/cjs/internal/app-binder/command/StartTransactionCommand.test.js +1 -1
  98. package/lib/cjs/internal/app-binder/command/StartTransactionCommand.test.js.map +3 -3
  99. package/lib/cjs/internal/app-binder/command/StoreTransactionCommand.js +1 -1
  100. package/lib/cjs/internal/app-binder/command/StoreTransactionCommand.js.map +2 -2
  101. package/lib/cjs/internal/app-binder/command/StoreTransactionCommand.test.js +1 -1
  102. package/lib/cjs/internal/app-binder/command/StoreTransactionCommand.test.js.map +3 -3
  103. package/lib/cjs/internal/app-binder/command/Web3CheckOptInCommand.js +1 -1
  104. package/lib/cjs/internal/app-binder/command/Web3CheckOptInCommand.js.map +2 -2
  105. package/lib/cjs/internal/app-binder/command/Web3CheckOptInCommand.test.js +1 -1
  106. package/lib/cjs/internal/app-binder/command/Web3CheckOptInCommand.test.js.map +3 -3
  107. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js +1 -1
  108. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js.map +3 -3
  109. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js +1 -1
  110. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js.map +3 -3
  111. package/lib/cjs/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.js +1 -1
  112. package/lib/cjs/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.js.map +3 -3
  113. package/lib/cjs/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.test.js +1 -1
  114. package/lib/cjs/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.test.js.map +3 -3
  115. package/lib/cjs/internal/app-binder/device-action/__test-utils__/makeInternalApi.js +1 -1
  116. package/lib/cjs/internal/app-binder/device-action/__test-utils__/makeInternalApi.js.map +3 -3
  117. package/lib/cjs/internal/app-binder/task/BuildBaseContexts.js +1 -1
  118. package/lib/cjs/internal/app-binder/task/BuildBaseContexts.js.map +3 -3
  119. package/lib/cjs/internal/app-binder/task/BuildBaseContexts.test.js +1 -1
  120. package/lib/cjs/internal/app-binder/task/BuildBaseContexts.test.js.map +3 -3
  121. package/lib/cjs/internal/app-binder/task/BuildEIP712ContextTask.js +1 -1
  122. package/lib/cjs/internal/app-binder/task/BuildEIP712ContextTask.js.map +3 -3
  123. package/lib/cjs/internal/app-binder/task/BuildEIP712ContextTask.test.js +1 -1
  124. package/lib/cjs/internal/app-binder/task/BuildEIP712ContextTask.test.js.map +3 -3
  125. package/lib/cjs/internal/app-binder/task/BuildSafeAddressContextTask.test.js +1 -1
  126. package/lib/cjs/internal/app-binder/task/BuildSafeAddressContextTask.test.js.map +2 -2
  127. package/lib/cjs/internal/app-binder/task/BuildSubcontextsTask.js +1 -1
  128. package/lib/cjs/internal/app-binder/task/BuildSubcontextsTask.js.map +2 -2
  129. package/lib/cjs/internal/app-binder/task/BuildSubcontextsTask.test.js +1 -1
  130. package/lib/cjs/internal/app-binder/task/BuildSubcontextsTask.test.js.map +2 -2
  131. package/lib/cjs/internal/app-binder/task/ProvideContextTask.js +1 -1
  132. package/lib/cjs/internal/app-binder/task/ProvideContextTask.js.map +2 -2
  133. package/lib/cjs/internal/app-binder/task/ProvideContextTask.test.js +1 -1
  134. package/lib/cjs/internal/app-binder/task/ProvideContextTask.test.js.map +2 -2
  135. package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.js +1 -1
  136. package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.js.map +3 -3
  137. package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.test.js +1 -1
  138. package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.test.js.map +3 -3
  139. package/lib/cjs/package.json +42 -38
  140. package/lib/esm/api/app-binder/SignTransactionDeviceActionTypes.js +1 -1
  141. package/lib/esm/api/app-binder/SignTransactionDeviceActionTypes.js.map +2 -2
  142. package/lib/esm/api/app-binder/SignTypedDataDeviceActionTypes.js +1 -1
  143. package/lib/esm/api/app-binder/SignTypedDataDeviceActionTypes.js.map +2 -2
  144. package/lib/esm/internal/app-binder/EthAppBinder.test.js +1 -1
  145. package/lib/esm/internal/app-binder/EthAppBinder.test.js.map +2 -2
  146. package/lib/esm/internal/app-binder/command/GetAddressCommand.js +1 -1
  147. package/lib/esm/internal/app-binder/command/GetAddressCommand.js.map +2 -2
  148. package/lib/esm/internal/app-binder/command/GetAddressCommand.test.js +1 -1
  149. package/lib/esm/internal/app-binder/command/GetAddressCommand.test.js.map +2 -2
  150. package/lib/esm/internal/app-binder/command/GetAppConfigurationCommand.js +1 -1
  151. package/lib/esm/internal/app-binder/command/GetAppConfigurationCommand.js.map +2 -2
  152. package/lib/esm/internal/app-binder/command/GetAppConfigurationCommand.test.js +1 -1
  153. package/lib/esm/internal/app-binder/command/GetAppConfigurationCommand.test.js.map +2 -2
  154. package/lib/esm/internal/app-binder/command/GetChallengeCommand.js +1 -1
  155. package/lib/esm/internal/app-binder/command/GetChallengeCommand.js.map +2 -2
  156. package/lib/esm/internal/app-binder/command/GetChallengeCommand.test.js +1 -1
  157. package/lib/esm/internal/app-binder/command/GetChallengeCommand.test.js.map +2 -2
  158. package/lib/esm/internal/app-binder/command/ProvideEnumCommand.js +1 -1
  159. package/lib/esm/internal/app-binder/command/ProvideEnumCommand.js.map +2 -2
  160. package/lib/esm/internal/app-binder/command/ProvideEnumCommand.test.js +1 -1
  161. package/lib/esm/internal/app-binder/command/ProvideEnumCommand.test.js.map +3 -3
  162. package/lib/esm/internal/app-binder/command/ProvideNFTInformationCommand.js +1 -1
  163. package/lib/esm/internal/app-binder/command/ProvideNFTInformationCommand.js.map +2 -2
  164. package/lib/esm/internal/app-binder/command/ProvideNFTInformationCommand.test.js +1 -1
  165. package/lib/esm/internal/app-binder/command/ProvideNFTInformationCommand.test.js.map +3 -3
  166. package/lib/esm/internal/app-binder/command/ProvideNetworkConfigurationCommand.js +1 -1
  167. package/lib/esm/internal/app-binder/command/ProvideNetworkConfigurationCommand.js.map +2 -2
  168. package/lib/esm/internal/app-binder/command/ProvideNetworkConfigurationCommand.test.js +1 -1
  169. package/lib/esm/internal/app-binder/command/ProvideNetworkConfigurationCommand.test.js.map +3 -3
  170. package/lib/esm/internal/app-binder/command/ProvideProxyInfoCommand.js +1 -1
  171. package/lib/esm/internal/app-binder/command/ProvideProxyInfoCommand.js.map +2 -2
  172. package/lib/esm/internal/app-binder/command/ProvideProxyInfoCommand.test.js +1 -1
  173. package/lib/esm/internal/app-binder/command/ProvideProxyInfoCommand.test.js.map +3 -3
  174. package/lib/esm/internal/app-binder/command/ProvideSafeAccountCommand.js +1 -1
  175. package/lib/esm/internal/app-binder/command/ProvideSafeAccountCommand.js.map +2 -2
  176. package/lib/esm/internal/app-binder/command/ProvideSafeAccountCommand.test.js +1 -1
  177. package/lib/esm/internal/app-binder/command/ProvideSafeAccountCommand.test.js.map +3 -3
  178. package/lib/esm/internal/app-binder/command/ProvideTokenInformationCommand.js +1 -1
  179. package/lib/esm/internal/app-binder/command/ProvideTokenInformationCommand.js.map +2 -2
  180. package/lib/esm/internal/app-binder/command/ProvideTokenInformationCommand.test.js +1 -1
  181. package/lib/esm/internal/app-binder/command/ProvideTokenInformationCommand.test.js.map +2 -2
  182. package/lib/esm/internal/app-binder/command/ProvideTransactionFieldDescriptionCommand.js +1 -1
  183. package/lib/esm/internal/app-binder/command/ProvideTransactionFieldDescriptionCommand.js.map +2 -2
  184. package/lib/esm/internal/app-binder/command/ProvideTransactionFieldDescriptionCommand.test.js +1 -1
  185. package/lib/esm/internal/app-binder/command/ProvideTransactionFieldDescriptionCommand.test.js.map +3 -3
  186. package/lib/esm/internal/app-binder/command/ProvideTransactionInformationCommand.js +1 -1
  187. package/lib/esm/internal/app-binder/command/ProvideTransactionInformationCommand.js.map +2 -2
  188. package/lib/esm/internal/app-binder/command/ProvideTransactionInformationCommand.test.js +1 -1
  189. package/lib/esm/internal/app-binder/command/ProvideTransactionInformationCommand.test.js.map +3 -3
  190. package/lib/esm/internal/app-binder/command/ProvideTrustedNameCommand.js +1 -1
  191. package/lib/esm/internal/app-binder/command/ProvideTrustedNameCommand.js.map +2 -2
  192. package/lib/esm/internal/app-binder/command/ProvideTrustedNameCommand.test.js +1 -1
  193. package/lib/esm/internal/app-binder/command/ProvideTrustedNameCommand.test.js.map +3 -3
  194. package/lib/esm/internal/app-binder/command/ProvideWeb3CheckCommand.js +1 -1
  195. package/lib/esm/internal/app-binder/command/ProvideWeb3CheckCommand.js.map +2 -2
  196. package/lib/esm/internal/app-binder/command/ProvideWeb3CheckCommand.test.js +1 -1
  197. package/lib/esm/internal/app-binder/command/ProvideWeb3CheckCommand.test.js.map +3 -3
  198. package/lib/esm/internal/app-binder/command/SendEIP712FilteringCommand.js +1 -1
  199. package/lib/esm/internal/app-binder/command/SendEIP712FilteringCommand.js.map +2 -2
  200. package/lib/esm/internal/app-binder/command/SendEIP712FilteringCommand.test.js +1 -1
  201. package/lib/esm/internal/app-binder/command/SendEIP712FilteringCommand.test.js.map +3 -3
  202. package/lib/esm/internal/app-binder/command/SendEIP712StructDefinitionCommand.js +1 -1
  203. package/lib/esm/internal/app-binder/command/SendEIP712StructDefinitionCommand.js.map +2 -2
  204. package/lib/esm/internal/app-binder/command/SendEIP712StructDefinitionCommand.test.js +1 -1
  205. package/lib/esm/internal/app-binder/command/SendEIP712StructDefinitionCommand.test.js.map +3 -3
  206. package/lib/esm/internal/app-binder/command/SendEIP712StructImplemCommand.js +1 -1
  207. package/lib/esm/internal/app-binder/command/SendEIP712StructImplemCommand.js.map +2 -2
  208. package/lib/esm/internal/app-binder/command/SendEIP712StructImplemCommand.test.js +1 -1
  209. package/lib/esm/internal/app-binder/command/SendEIP712StructImplemCommand.test.js.map +3 -3
  210. package/lib/esm/internal/app-binder/command/SetExternalPluginCommand.js +1 -1
  211. package/lib/esm/internal/app-binder/command/SetExternalPluginCommand.js.map +2 -2
  212. package/lib/esm/internal/app-binder/command/SetExternalPluginCommand.test.js +2 -2
  213. package/lib/esm/internal/app-binder/command/SetExternalPluginCommand.test.js.map +3 -3
  214. package/lib/esm/internal/app-binder/command/SetPluginCommand.js +1 -1
  215. package/lib/esm/internal/app-binder/command/SetPluginCommand.js.map +2 -2
  216. package/lib/esm/internal/app-binder/command/SetPluginCommand.test.js +2 -2
  217. package/lib/esm/internal/app-binder/command/SetPluginCommand.test.js.map +3 -3
  218. package/lib/esm/internal/app-binder/command/SignAuthorizationDelegationCommand.js +1 -1
  219. package/lib/esm/internal/app-binder/command/SignAuthorizationDelegationCommand.js.map +2 -2
  220. package/lib/esm/internal/app-binder/command/SignAuthorizationDelegationCommand.test.js +1 -1
  221. package/lib/esm/internal/app-binder/command/SignAuthorizationDelegationCommand.test.js.map +3 -3
  222. package/lib/esm/internal/app-binder/command/SignEIP712Command.js +1 -1
  223. package/lib/esm/internal/app-binder/command/SignEIP712Command.js.map +2 -2
  224. package/lib/esm/internal/app-binder/command/SignEIP712Command.test.js +1 -1
  225. package/lib/esm/internal/app-binder/command/SignEIP712Command.test.js.map +2 -2
  226. package/lib/esm/internal/app-binder/command/SignPersonalMessageCommand.js +1 -1
  227. package/lib/esm/internal/app-binder/command/SignPersonalMessageCommand.js.map +2 -2
  228. package/lib/esm/internal/app-binder/command/SignPersonalMessageCommand.test.js +1 -1
  229. package/lib/esm/internal/app-binder/command/SignPersonalMessageCommand.test.js.map +3 -3
  230. package/lib/esm/internal/app-binder/command/SignTransactionCommand.js +1 -1
  231. package/lib/esm/internal/app-binder/command/SignTransactionCommand.js.map +2 -2
  232. package/lib/esm/internal/app-binder/command/SignTransactionCommand.test.js +1 -1
  233. package/lib/esm/internal/app-binder/command/SignTransactionCommand.test.js.map +3 -3
  234. package/lib/esm/internal/app-binder/command/StartTransactionCommand.js +1 -1
  235. package/lib/esm/internal/app-binder/command/StartTransactionCommand.js.map +2 -2
  236. package/lib/esm/internal/app-binder/command/StartTransactionCommand.test.js +1 -1
  237. package/lib/esm/internal/app-binder/command/StartTransactionCommand.test.js.map +3 -3
  238. package/lib/esm/internal/app-binder/command/StoreTransactionCommand.js +1 -1
  239. package/lib/esm/internal/app-binder/command/StoreTransactionCommand.js.map +2 -2
  240. package/lib/esm/internal/app-binder/command/StoreTransactionCommand.test.js +1 -1
  241. package/lib/esm/internal/app-binder/command/StoreTransactionCommand.test.js.map +3 -3
  242. package/lib/esm/internal/app-binder/command/Web3CheckOptInCommand.js +1 -1
  243. package/lib/esm/internal/app-binder/command/Web3CheckOptInCommand.js.map +2 -2
  244. package/lib/esm/internal/app-binder/command/Web3CheckOptInCommand.test.js +1 -1
  245. package/lib/esm/internal/app-binder/command/Web3CheckOptInCommand.test.js.map +3 -3
  246. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js +1 -1
  247. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js.map +3 -3
  248. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js +1 -1
  249. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js.map +3 -3
  250. package/lib/esm/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.js +1 -1
  251. package/lib/esm/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.js.map +3 -3
  252. package/lib/esm/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.test.js +1 -1
  253. package/lib/esm/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.test.js.map +3 -3
  254. package/lib/esm/internal/app-binder/device-action/__test-utils__/makeInternalApi.js +1 -1
  255. package/lib/esm/internal/app-binder/device-action/__test-utils__/makeInternalApi.js.map +3 -3
  256. package/lib/esm/internal/app-binder/task/BuildBaseContexts.js +1 -1
  257. package/lib/esm/internal/app-binder/task/BuildBaseContexts.js.map +3 -3
  258. package/lib/esm/internal/app-binder/task/BuildBaseContexts.test.js +1 -1
  259. package/lib/esm/internal/app-binder/task/BuildBaseContexts.test.js.map +3 -3
  260. package/lib/esm/internal/app-binder/task/BuildEIP712ContextTask.js +1 -1
  261. package/lib/esm/internal/app-binder/task/BuildEIP712ContextTask.js.map +3 -3
  262. package/lib/esm/internal/app-binder/task/BuildEIP712ContextTask.test.js +1 -1
  263. package/lib/esm/internal/app-binder/task/BuildEIP712ContextTask.test.js.map +3 -3
  264. package/lib/esm/internal/app-binder/task/BuildSafeAddressContextTask.test.js +1 -1
  265. package/lib/esm/internal/app-binder/task/BuildSafeAddressContextTask.test.js.map +2 -2
  266. package/lib/esm/internal/app-binder/task/BuildSubcontextsTask.js +1 -1
  267. package/lib/esm/internal/app-binder/task/BuildSubcontextsTask.js.map +2 -2
  268. package/lib/esm/internal/app-binder/task/BuildSubcontextsTask.test.js +1 -1
  269. package/lib/esm/internal/app-binder/task/BuildSubcontextsTask.test.js.map +2 -2
  270. package/lib/esm/internal/app-binder/task/ProvideContextTask.js +1 -1
  271. package/lib/esm/internal/app-binder/task/ProvideContextTask.js.map +2 -2
  272. package/lib/esm/internal/app-binder/task/ProvideContextTask.test.js +1 -1
  273. package/lib/esm/internal/app-binder/task/ProvideContextTask.test.js.map +2 -2
  274. package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.js +1 -1
  275. package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.js.map +3 -3
  276. package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.test.js +1 -1
  277. package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.test.js.map +3 -3
  278. package/lib/esm/package.json +42 -38
  279. package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts +1 -0
  280. package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts.map +1 -1
  281. package/lib/types/api/app-binder/SignTypedDataDeviceActionTypes.d.ts +2 -0
  282. package/lib/types/api/app-binder/SignTypedDataDeviceActionTypes.d.ts.map +1 -1
  283. package/lib/types/internal/app-binder/command/GetAddressCommand.d.ts +1 -0
  284. package/lib/types/internal/app-binder/command/GetAddressCommand.d.ts.map +1 -1
  285. package/lib/types/internal/app-binder/command/GetAppConfigurationCommand.d.ts +1 -0
  286. package/lib/types/internal/app-binder/command/GetAppConfigurationCommand.d.ts.map +1 -1
  287. package/lib/types/internal/app-binder/command/GetChallengeCommand.d.ts +1 -0
  288. package/lib/types/internal/app-binder/command/GetChallengeCommand.d.ts.map +1 -1
  289. package/lib/types/internal/app-binder/command/ProvideEnumCommand.d.ts +1 -0
  290. package/lib/types/internal/app-binder/command/ProvideEnumCommand.d.ts.map +1 -1
  291. package/lib/types/internal/app-binder/command/ProvideNFTInformationCommand.d.ts +1 -0
  292. package/lib/types/internal/app-binder/command/ProvideNFTInformationCommand.d.ts.map +1 -1
  293. package/lib/types/internal/app-binder/command/ProvideNetworkConfigurationCommand.d.ts +1 -0
  294. package/lib/types/internal/app-binder/command/ProvideNetworkConfigurationCommand.d.ts.map +1 -1
  295. package/lib/types/internal/app-binder/command/ProvideProxyInfoCommand.d.ts +1 -0
  296. package/lib/types/internal/app-binder/command/ProvideProxyInfoCommand.d.ts.map +1 -1
  297. package/lib/types/internal/app-binder/command/ProvideSafeAccountCommand.d.ts +1 -0
  298. package/lib/types/internal/app-binder/command/ProvideSafeAccountCommand.d.ts.map +1 -1
  299. package/lib/types/internal/app-binder/command/ProvideTokenInformationCommand.d.ts +1 -0
  300. package/lib/types/internal/app-binder/command/ProvideTokenInformationCommand.d.ts.map +1 -1
  301. package/lib/types/internal/app-binder/command/ProvideTransactionFieldDescriptionCommand.d.ts +1 -0
  302. package/lib/types/internal/app-binder/command/ProvideTransactionFieldDescriptionCommand.d.ts.map +1 -1
  303. package/lib/types/internal/app-binder/command/ProvideTransactionInformationCommand.d.ts +1 -0
  304. package/lib/types/internal/app-binder/command/ProvideTransactionInformationCommand.d.ts.map +1 -1
  305. package/lib/types/internal/app-binder/command/ProvideTrustedNameCommand.d.ts +1 -0
  306. package/lib/types/internal/app-binder/command/ProvideTrustedNameCommand.d.ts.map +1 -1
  307. package/lib/types/internal/app-binder/command/ProvideWeb3CheckCommand.d.ts +1 -0
  308. package/lib/types/internal/app-binder/command/ProvideWeb3CheckCommand.d.ts.map +1 -1
  309. package/lib/types/internal/app-binder/command/SendEIP712FilteringCommand.d.ts +1 -0
  310. package/lib/types/internal/app-binder/command/SendEIP712FilteringCommand.d.ts.map +1 -1
  311. package/lib/types/internal/app-binder/command/SendEIP712StructDefinitionCommand.d.ts +1 -0
  312. package/lib/types/internal/app-binder/command/SendEIP712StructDefinitionCommand.d.ts.map +1 -1
  313. package/lib/types/internal/app-binder/command/SendEIP712StructImplemCommand.d.ts +1 -0
  314. package/lib/types/internal/app-binder/command/SendEIP712StructImplemCommand.d.ts.map +1 -1
  315. package/lib/types/internal/app-binder/command/SetExternalPluginCommand.d.ts +1 -0
  316. package/lib/types/internal/app-binder/command/SetExternalPluginCommand.d.ts.map +1 -1
  317. package/lib/types/internal/app-binder/command/SetPluginCommand.d.ts +1 -0
  318. package/lib/types/internal/app-binder/command/SetPluginCommand.d.ts.map +1 -1
  319. package/lib/types/internal/app-binder/command/SignAuthorizationDelegationCommand.d.ts +1 -0
  320. package/lib/types/internal/app-binder/command/SignAuthorizationDelegationCommand.d.ts.map +1 -1
  321. package/lib/types/internal/app-binder/command/SignEIP712Command.d.ts +1 -0
  322. package/lib/types/internal/app-binder/command/SignEIP712Command.d.ts.map +1 -1
  323. package/lib/types/internal/app-binder/command/SignPersonalMessageCommand.d.ts +1 -0
  324. package/lib/types/internal/app-binder/command/SignPersonalMessageCommand.d.ts.map +1 -1
  325. package/lib/types/internal/app-binder/command/SignTransactionCommand.d.ts +1 -0
  326. package/lib/types/internal/app-binder/command/SignTransactionCommand.d.ts.map +1 -1
  327. package/lib/types/internal/app-binder/command/StartTransactionCommand.d.ts +1 -0
  328. package/lib/types/internal/app-binder/command/StartTransactionCommand.d.ts.map +1 -1
  329. package/lib/types/internal/app-binder/command/StoreTransactionCommand.d.ts +1 -0
  330. package/lib/types/internal/app-binder/command/StoreTransactionCommand.d.ts.map +1 -1
  331. package/lib/types/internal/app-binder/command/Web3CheckOptInCommand.d.ts +1 -0
  332. package/lib/types/internal/app-binder/command/Web3CheckOptInCommand.d.ts.map +1 -1
  333. package/lib/types/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.d.ts +4 -0
  334. package/lib/types/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.d.ts.map +1 -1
  335. package/lib/types/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.d.ts +5 -0
  336. package/lib/types/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.d.ts.map +1 -1
  337. package/lib/types/internal/app-binder/device-action/__test-utils__/makeInternalApi.d.ts.map +1 -1
  338. package/lib/types/internal/app-binder/task/BuildBaseContexts.d.ts +1 -5
  339. package/lib/types/internal/app-binder/task/BuildBaseContexts.d.ts.map +1 -1
  340. package/lib/types/internal/app-binder/task/BuildEIP712ContextTask.d.ts +3 -3
  341. package/lib/types/internal/app-binder/task/BuildEIP712ContextTask.d.ts.map +1 -1
  342. package/lib/types/internal/app-binder/task/ProvideEIP712ContextTask.d.ts +2 -2
  343. package/lib/types/internal/app-binder/task/ProvideEIP712ContextTask.d.ts.map +1 -1
  344. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  345. package/package.json +38 -34
  346. package/lib/cjs/internal/app-binder/task/GetWeb3CheckTask.js +0 -2
  347. package/lib/cjs/internal/app-binder/task/GetWeb3CheckTask.js.map +0 -7
  348. package/lib/cjs/internal/app-binder/task/GetWeb3CheckTask.test.js +0 -2
  349. package/lib/cjs/internal/app-binder/task/GetWeb3CheckTask.test.js.map +0 -7
  350. package/lib/esm/internal/app-binder/task/GetWeb3CheckTask.js +0 -2
  351. package/lib/esm/internal/app-binder/task/GetWeb3CheckTask.js.map +0 -7
  352. package/lib/esm/internal/app-binder/task/GetWeb3CheckTask.test.js +0 -2
  353. package/lib/esm/internal/app-binder/task/GetWeb3CheckTask.test.js.map +0 -7
  354. package/lib/types/internal/app-binder/task/GetWeb3CheckTask.d.ts +0 -29
  355. package/lib/types/internal/app-binder/task/GetWeb3CheckTask.d.ts.map +0 -1
  356. package/lib/types/internal/app-binder/task/GetWeb3CheckTask.test.d.ts +0 -2
  357. package/lib/types/internal/app-binder/task/GetWeb3CheckTask.test.d.ts.map +0 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/task/BuildBaseContexts.test.ts"],
4
- "sourcesContent": ["import {\n type ClearSignContext,\n ClearSignContextType,\n type PkiCertificate,\n} from \"@ledgerhq/context-module\";\nimport {\n CommandResultFactory,\n DeviceModelId,\n DeviceSessionStateType,\n DeviceStatus,\n hexaStringToBuffer,\n UnknownDeviceExchangeError,\n} from \"@ledgerhq/device-management-kit\";\nimport { Transaction } from \"ethers\";\n\nimport type { GetConfigCommandResponse } from \"@api/app-binder/GetConfigCommandTypes\";\nimport { ClearSigningType } from \"@api/model/ClearSigningType\";\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\n\nimport {\n BASE_CONTEXT_TYPES_FILTER,\n BuildBaseContexts,\n type BuildBaseContextsArgs,\n} from \"./BuildBaseContexts\";\nimport { GetWeb3CheckTask } from \"./GetWeb3CheckTask\";\n\ndescribe(\"BuildBaseContexts\", () => {\n const contextModuleMock = {\n getFieldContext: vi.fn(),\n getContexts: vi.fn(),\n getTypedDataFilters: vi.fn(),\n getWeb3Checks: vi.fn(),\n getSolanaContext: vi.fn(),\n };\n const defaultOptions = {\n domain: \"domain-name.eth\",\n };\n const defaultTransaction: Uint8Array = hexaStringToBuffer(\n Transaction.from({\n chainId: 1n,\n nonce: 0,\n data: \"0x\",\n }).unsignedSerialized,\n )!;\n const defaultCertificate: PkiCertificate = {\n keyUsageNumber: 1,\n payload: new Uint8Array([0x01, 0x02, 0x03]),\n };\n\n let defaultArgs: BuildBaseContextsArgs;\n const apiMock = makeDeviceActionInternalApiMock();\n const getWeb3ChecksFactoryMock = vi.fn();\n\n function createAppConfig(\n web3ChecksEnabled: boolean,\n ): GetConfigCommandResponse {\n return {\n blindSigningEnabled: false,\n web3ChecksEnabled,\n web3ChecksOptIn: false,\n version: \"1.13.0\",\n };\n }\n\n beforeEach(() => {\n vi.resetAllMocks();\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: { challenge: \"challenge\" } }),\n );\n getWeb3ChecksFactoryMock.mockReturnValue({\n run: async () => Promise.resolve({ web3Check: null }),\n });\n\n defaultArgs = {\n contextModule: contextModuleMock,\n subset: { chainId: 1, to: undefined, data: \"0x\", selector: \"0x\" },\n transaction: defaultTransaction,\n options: defaultOptions,\n appConfig: createAppConfig(false),\n derivationPath: \"44'/60'/0'/0/0\",\n };\n });\n\n it(\"should init with a default GetWeb3CheckTaskFactory\", () => {\n // GIVEN\n const task = new BuildBaseContexts(apiMock, defaultArgs);\n\n // THEN\n expect(task[\"getWeb3ChecksFactory\"]).toBeDefined();\n expect(\n task[\"getWeb3ChecksFactory\"](apiMock, {\n contextModule: defaultArgs.contextModule,\n derivationPath: defaultArgs.derivationPath,\n subset: defaultArgs.subset,\n transaction: defaultArgs.transaction!,\n }),\n ).toBeInstanceOf(GetWeb3CheckTask);\n });\n\n it(\"should build the transaction context without clear sign contexts\", async () => {\n // GIVEN\n const clearSignContexts: ClearSignContext[] = [];\n const clearSignContextsOptional: ClearSignContext[] = [];\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n\n // WHEN\n const result = await new BuildBaseContexts(\n apiMock,\n { ...defaultArgs, appConfig: createAppConfig(true) },\n getWeb3ChecksFactoryMock,\n ).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts,\n clearSignContextsOptional,\n clearSigningType: ClearSigningType.BASIC,\n });\n });\n\n it(\"should build the transaction context with web3checks\", async () => {\n // GIVEN\n const clearSignContexts: ClearSignContext[] = [];\n const clearSignContextsOptional: ClearSignContext[] = [];\n const expectedWeb3Check = {\n type: ClearSignContextType.WEB3_CHECK,\n payload: \"web3Check\",\n };\n getWeb3ChecksFactoryMock.mockReturnValueOnce({\n run: async () => Promise.resolve({ web3Check: expectedWeb3Check }),\n });\n contextModuleMock.getContexts.mockResolvedValueOnce([...clearSignContexts]);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n\n // WHEN\n const result = await new BuildBaseContexts(\n apiMock,\n { ...defaultArgs, appConfig: createAppConfig(true) },\n getWeb3ChecksFactoryMock,\n ).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: [expectedWeb3Check, ...clearSignContexts],\n clearSignContextsOptional,\n clearSigningType: ClearSigningType.BASIC,\n });\n });\n\n it(\"should build the transaction context with web3checks and generic-parser clear sign contexts\", async () => {\n // GIVEN\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"payload-1\",\n certificate: defaultCertificate,\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload-2\",\n },\n {\n type: ClearSignContextType.ENUM,\n payload: \"payload-3\",\n id: 1,\n value: 2,\n certificate: defaultCertificate,\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload-4\",\n },\n ];\n const expectedWeb3Check = {\n type: ClearSignContextType.WEB3_CHECK,\n payload: \"web3Check\",\n };\n getWeb3ChecksFactoryMock.mockReturnValueOnce({\n run: async () => Promise.resolve({ web3Check: expectedWeb3Check }),\n });\n contextModuleMock.getContexts.mockResolvedValueOnce([...clearSignContexts]);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.15.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n\n // WHEN\n const result = await new BuildBaseContexts(\n apiMock,\n { ...defaultArgs, appConfig: createAppConfig(true) },\n getWeb3ChecksFactoryMock,\n ).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: [\n expectedWeb3Check,\n clearSignContexts[0],\n clearSignContexts[1],\n clearSignContexts[3],\n ],\n clearSignContextsOptional: [clearSignContexts[2]],\n clearSigningType: ClearSigningType.EIP7730,\n });\n });\n\n it(\"should build the transaction context with web3checks and generic-parser clear sign contexts in the correct order\", async () => {\n // GIVEN\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.ENUM,\n payload: \"payload-3\",\n id: 1,\n value: 2,\n certificate: defaultCertificate,\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload-4\",\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload-2\",\n },\n {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"payload-1\",\n certificate: defaultCertificate,\n },\n ];\n const expectedWeb3Check = {\n type: ClearSignContextType.WEB3_CHECK,\n payload: \"web3Check\",\n };\n getWeb3ChecksFactoryMock.mockReturnValueOnce({\n run: async () => Promise.resolve({ web3Check: expectedWeb3Check }),\n });\n contextModuleMock.getContexts.mockResolvedValueOnce([...clearSignContexts]);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.15.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n\n // WHEN\n const result = await new BuildBaseContexts(\n apiMock,\n { ...defaultArgs, appConfig: createAppConfig(true) },\n getWeb3ChecksFactoryMock,\n ).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: [\n expectedWeb3Check, // web3 check\n clearSignContexts[3], // transaction info\n clearSignContexts[1], // transaction field description\n clearSignContexts[2], // transaction field description\n ],\n clearSignContextsOptional: [clearSignContexts[0]], // enum\n clearSigningType: ClearSigningType.EIP7730,\n });\n });\n\n it(\"should build the transaction context with clear sign contexts\", async () => {\n // GIVEN\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TOKEN,\n payload: \"payload-1\",\n },\n {\n type: ClearSignContextType.NFT,\n payload: \"payload-2\",\n },\n ];\n const expectedWeb3Check = {\n type: ClearSignContextType.WEB3_CHECK,\n payload: \"web3Check\",\n };\n getWeb3ChecksFactoryMock.mockReturnValueOnce({\n run: async () => Promise.resolve({ web3Check: expectedWeb3Check }),\n });\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n\n // WHEN\n const result = await new BuildBaseContexts(\n apiMock,\n defaultArgs,\n getWeb3ChecksFactoryMock,\n ).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts,\n clearSignContextsOptional: [],\n clearSigningType: ClearSigningType.BASIC,\n });\n });\n\n it(\"should build the transaction context with generic-parser context\", async () => {\n // GIVEN\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"payload-1\",\n certificate: defaultCertificate,\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload-2\",\n },\n {\n type: ClearSignContextType.ENUM,\n payload: \"payload-3\",\n id: 1,\n value: 2,\n certificate: defaultCertificate,\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload-4\",\n },\n ];\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.15.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n\n // WHEN\n const result = await new BuildBaseContexts(\n apiMock,\n defaultArgs,\n getWeb3ChecksFactoryMock,\n ).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: [\n clearSignContexts[0],\n clearSignContexts[1],\n clearSignContexts[3],\n ],\n clearSignContextsOptional: [clearSignContexts[2]],\n clearSigningType: ClearSigningType.EIP7730,\n });\n });\n\n it(\"should build the transaction context with proxy delegate call context\", async () => {\n // GIVEN\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"payload-1\",\n certificate: defaultCertificate,\n },\n {\n type: ClearSignContextType.PROXY_INFO,\n payload: \"payload-2\",\n },\n ];\n const clearSignContextsOptional: ClearSignContext[] = [];\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.15.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n\n // WHEN\n const result = await new BuildBaseContexts(\n apiMock,\n defaultArgs,\n getWeb3ChecksFactoryMock,\n ).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: [clearSignContexts[1], clearSignContexts[0]],\n clearSignContextsOptional,\n clearSigningType: ClearSigningType.EIP7730,\n });\n });\n\n it(\"should call the web3checks factory with correct parameters\", async () => {\n // GIVEN\n const clearSignContexts: ClearSignContext[] = [];\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n\n // WHEN\n await new BuildBaseContexts(\n apiMock,\n { ...defaultArgs, appConfig: createAppConfig(true) },\n getWeb3ChecksFactoryMock,\n ).run();\n\n // THEN\n expect(getWeb3ChecksFactoryMock).toHaveBeenCalledWith(apiMock, {\n contextModule: contextModuleMock,\n derivationPath: \"44'/60'/0'/0/0\",\n subset: defaultArgs.subset,\n transaction: defaultTransaction,\n });\n });\n\n it(\"should call the context module with the correct parameters\", async () => {\n // GIVEN\n const clearSignContexts: ClearSignContext[] = [];\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n\n // WHEN\n await new BuildBaseContexts(\n apiMock,\n defaultArgs,\n getWeb3ChecksFactoryMock,\n ).run();\n\n // THEN\n expect(contextModuleMock.getContexts).toHaveBeenCalledWith(\n {\n deviceModelId: DeviceModelId.FLEX,\n challenge: \"challenge\",\n domain: \"domain-name.eth\",\n ...defaultArgs.subset,\n },\n BASE_CONTEXT_TYPES_FILTER,\n );\n });\n\n it(\"should call the context module without challenge for Nano S\", async () => {\n // GIVEN\n const clearSignContexts: ClearSignContext[] = [];\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n deviceModelId: DeviceModelId.NANO_S,\n isSecureConnectionAllowed: false,\n });\n\n // WHEN\n await new BuildBaseContexts(\n apiMock,\n defaultArgs,\n getWeb3ChecksFactoryMock,\n ).run();\n\n // THEN\n expect(contextModuleMock.getContexts).toHaveBeenCalledWith(\n {\n deviceModelId: DeviceModelId.NANO_S,\n domain: \"domain-name.eth\",\n ...defaultArgs.subset,\n },\n BASE_CONTEXT_TYPES_FILTER,\n );\n });\n\n it(\"should call the context module without context on error\", async () => {\n // GIVEN\n const clearSignContexts: ClearSignContext[] = [];\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({ error: new UnknownDeviceExchangeError() }),\n );\n\n // WHEN\n await new BuildBaseContexts(\n apiMock,\n defaultArgs,\n getWeb3ChecksFactoryMock,\n ).run();\n\n // THEN\n expect(contextModuleMock.getContexts).toHaveBeenCalledWith(\n {\n deviceModelId: DeviceModelId.FLEX,\n challenge: undefined,\n domain: \"domain-name.eth\",\n ...defaultArgs.subset,\n },\n BASE_CONTEXT_TYPES_FILTER,\n );\n });\n\n it(\"should exclude error contexts from the result\", async () => {\n // GIVEN\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.ERROR,\n error: new Error(\"error\"),\n },\n {\n type: ClearSignContextType.TOKEN,\n payload: \"payload-1\",\n },\n {\n type: ClearSignContextType.ERROR,\n error: new Error(\"error\"),\n },\n {\n type: ClearSignContextType.NFT,\n payload: \"payload-2\",\n },\n ];\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n\n // WHEN\n const result = await new BuildBaseContexts(\n apiMock,\n defaultArgs,\n getWeb3ChecksFactoryMock,\n ).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: [clearSignContexts[1], clearSignContexts[3]],\n clearSignContextsOptional: [],\n clearSigningType: ClearSigningType.BASIC,\n });\n });\n\n it(\"should exclude generic-parser contexts from the result on old apps\", async () => {\n // GIVEN\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"transaction_info\",\n certificate: defaultCertificate,\n },\n {\n type: ClearSignContextType.TOKEN,\n payload: \"payload-1\",\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"transaction_field\",\n },\n {\n type: ClearSignContextType.NFT,\n payload: \"payload-2\",\n },\n {\n type: ClearSignContextType.ENUM,\n payload: \"enum\",\n id: 1,\n value: 2,\n certificate: defaultCertificate,\n },\n ];\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n\n // WHEN\n const result = await new BuildBaseContexts(\n apiMock,\n defaultArgs,\n getWeb3ChecksFactoryMock,\n ).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: [clearSignContexts[1], clearSignContexts[3]],\n clearSignContextsOptional: [],\n clearSigningType: ClearSigningType.BASIC,\n });\n });\n\n it(\"should exclude generic-parser contexts from the result if no transaction_info was found\", async () => {\n // GIVEN\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"transaction_field\",\n },\n {\n type: ClearSignContextType.TOKEN,\n payload: \"payload-1\",\n },\n {\n type: ClearSignContextType.ENUM,\n payload: \"enum\",\n id: 1,\n value: 2,\n },\n {\n type: ClearSignContextType.NFT,\n payload: \"payload-2\",\n },\n ];\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.14.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n\n // WHEN\n const result = await new BuildBaseContexts(\n apiMock,\n defaultArgs,\n getWeb3ChecksFactoryMock,\n ).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: [clearSignContexts[1], clearSignContexts[3]],\n clearSignContextsOptional: [],\n clearSigningType: ClearSigningType.BASIC,\n });\n });\n\n it(\"should exclude legacy contexts from the result for generic-parser transactions\", async () => {\n // GIVEN\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TOKEN,\n payload: \"payload-1\",\n },\n {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"payload-2\",\n certificate: defaultCertificate,\n },\n {\n type: ClearSignContextType.EXTERNAL_PLUGIN,\n payload: \"payload-3\",\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload-4\",\n },\n {\n type: ClearSignContextType.ENUM,\n payload: \"payload-5\",\n id: 1,\n value: 2,\n certificate: defaultCertificate,\n },\n ];\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.15.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n\n // WHEN\n const result = await new BuildBaseContexts(\n apiMock,\n defaultArgs,\n getWeb3ChecksFactoryMock,\n ).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: [clearSignContexts[1], clearSignContexts[3]],\n clearSignContextsOptional: [clearSignContexts[4]],\n clearSigningType: ClearSigningType.EIP7730,\n });\n });\n\n it(\"should exclude generic-parser contexts with a nano s device\", async () => {\n // GIVEN\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TOKEN,\n payload: \"payload-1\",\n },\n {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"payload-2\",\n certificate: defaultCertificate,\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload-3\",\n },\n {\n type: ClearSignContextType.ENUM,\n payload: \"payload-4\",\n id: 1,\n value: 2,\n certificate: defaultCertificate,\n },\n ];\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.14.0\" },\n deviceModelId: DeviceModelId.NANO_S,\n isSecureConnectionAllowed: false,\n });\n\n // WHEN\n const result = await new BuildBaseContexts(\n apiMock,\n defaultArgs,\n getWeb3ChecksFactoryMock,\n ).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: [clearSignContexts[0]],\n clearSignContextsOptional: [],\n clearSigningType: ClearSigningType.BASIC,\n });\n });\n\n it(\"should exclude generic-parser contexts with an old app version\", async () => {\n // GIVEN\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TOKEN,\n payload: \"payload-1\",\n },\n {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"payload-2\",\n certificate: defaultCertificate,\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload-3\",\n },\n {\n type: ClearSignContextType.ENUM,\n payload: \"payload-4\",\n id: 1,\n value: 2,\n certificate: defaultCertificate,\n },\n ];\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n\n // WHEN\n const result = await new BuildBaseContexts(\n apiMock,\n defaultArgs,\n getWeb3ChecksFactoryMock,\n ).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: [clearSignContexts[0]],\n clearSignContextsOptional: [],\n clearSigningType: ClearSigningType.BASIC,\n });\n });\n\n it(\"should exclude generic-parser contexts with a non ready device\", async () => {\n // GIVEN\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TOKEN,\n payload: \"payload-1\",\n },\n {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"payload-2\",\n certificate: defaultCertificate,\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload-3\",\n },\n {\n type: ClearSignContextType.ENUM,\n payload: \"payload-4\",\n id: 1,\n value: 2,\n certificate: defaultCertificate,\n },\n ];\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.Connected,\n deviceStatus: DeviceStatus.NOT_CONNECTED,\n deviceModelId: DeviceModelId.FLEX,\n });\n\n // WHEN\n const result = await new BuildBaseContexts(\n apiMock,\n defaultArgs,\n getWeb3ChecksFactoryMock,\n ).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: [clearSignContexts[0]],\n clearSignContextsOptional: [],\n clearSigningType: ClearSigningType.BASIC,\n });\n });\n\n it(\"should return no clear sign context if the transaction info certificate is missing\", async () => {\n // GIVEN\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"payload-1\",\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload-2\",\n },\n {\n type: ClearSignContextType.ENUM,\n payload: \"payload-3\",\n id: 1,\n value: 2,\n },\n ];\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.17.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n\n // WHEN\n const result = await new BuildBaseContexts(\n apiMock,\n defaultArgs,\n getWeb3ChecksFactoryMock,\n ).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: [],\n clearSignContextsOptional: [],\n clearSigningType: ClearSigningType.BASIC,\n });\n });\n\n it(\"should not return web3check if the transaction is undefined\", async () => {\n // GIVEN\n const clearSignContexts: ClearSignContext[] = [];\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.17.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n\n // WHEN\n await new BuildBaseContexts(\n apiMock,\n { ...defaultArgs, transaction: undefined },\n getWeb3ChecksFactoryMock,\n ).run();\n\n // THEN\n expect(getWeb3ChecksFactoryMock).not.toHaveBeenCalled();\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["ClearSignContextType", "CommandResultFactory", "DeviceModelId", "DeviceSessionStateType", "DeviceStatus", "hexaStringToBuffer", "UnknownDeviceExchangeError", "Transaction", "ClearSigningType", "makeDeviceActionInternalApiMock", "BASE_CONTEXT_TYPES_FILTER", "BuildBaseContexts", "GetWeb3CheckTask", "contextModuleMock", "defaultOptions", "defaultTransaction", "defaultCertificate", "defaultArgs", "apiMock", "getWeb3ChecksFactoryMock", "createAppConfig", "web3ChecksEnabled", "task", "clearSignContexts", "clearSignContextsOptional", "result", "expectedWeb3Check"]
4
+ "sourcesContent": ["import {\n type ClearSignContext,\n ClearSignContextType,\n type PkiCertificate,\n} from \"@ledgerhq/context-module\";\nimport {\n CommandResultFactory,\n DeviceModelId,\n DeviceSessionStateType,\n DeviceStatus,\n hexaStringToBuffer,\n} from \"@ledgerhq/device-management-kit\";\nimport { Transaction } from \"ethers\";\n\nimport type { GetConfigCommandResponse } from \"@api/app-binder/GetConfigCommandTypes\";\nimport { ClearSigningType } from \"@api/model/ClearSigningType\";\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\n\nimport {\n BASE_CONTEXT_TYPES_FILTER,\n BuildBaseContexts,\n type BuildBaseContextsArgs,\n} from \"./BuildBaseContexts\";\n\ndescribe(\"BuildBaseContexts\", () => {\n const contextModuleMock = {\n getFieldContext: vi.fn(),\n getContexts: vi.fn(),\n getTypedDataFilters: vi.fn(),\n getSolanaContext: vi.fn(),\n };\n const defaultOptions = {\n domain: \"domain-name.eth\",\n };\n const defaultTransaction: Uint8Array = hexaStringToBuffer(\n Transaction.from({\n chainId: 1n,\n nonce: 0,\n data: \"0x\",\n }).unsignedSerialized,\n )!;\n const defaultCertificate: PkiCertificate = {\n keyUsageNumber: 1,\n payload: new Uint8Array([0x01, 0x02, 0x03]),\n };\n\n let defaultArgs: BuildBaseContextsArgs;\n const apiMock = makeDeviceActionInternalApiMock();\n\n function createAppConfig(\n web3ChecksEnabled: boolean,\n ): GetConfigCommandResponse {\n return {\n blindSigningEnabled: false,\n web3ChecksEnabled,\n web3ChecksOptIn: false,\n version: \"1.13.0\",\n };\n }\n\n beforeEach(() => {\n vi.resetAllMocks();\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: { challenge: \"challenge\" } }),\n );\n\n defaultArgs = {\n contextModule: contextModuleMock,\n subset: { chainId: 1, to: undefined, data: \"0x\", selector: \"0x\" },\n transaction: defaultTransaction,\n options: defaultOptions,\n appConfig: createAppConfig(false),\n };\n });\n\n it(\"should build the transaction context without clear sign contexts\", async () => {\n // GIVEN\n const clearSignContexts: ClearSignContext[] = [];\n const clearSignContextsOptional: ClearSignContext[] = [];\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n\n // WHEN\n const result = await new BuildBaseContexts(apiMock, {\n ...defaultArgs,\n appConfig: createAppConfig(true),\n }).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts,\n clearSignContextsOptional,\n clearSigningType: ClearSigningType.BASIC,\n });\n });\n\n it(\"should build the transaction context with transaction check and generic-parser clear sign contexts\", async () => {\n // GIVEN\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"payload-1\",\n certificate: defaultCertificate,\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload-2\",\n },\n {\n type: ClearSignContextType.ENUM,\n payload: \"payload-3\",\n id: 1,\n value: 2,\n certificate: defaultCertificate,\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload-4\",\n },\n ];\n const expectedTxCheck = {\n type: ClearSignContextType.TRANSACTION_CHECK,\n payload: \"transactionCheck\",\n };\n contextModuleMock.getContexts.mockResolvedValueOnce([\n ...clearSignContexts,\n expectedTxCheck,\n ]);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.15.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n\n // WHEN\n const result = await new BuildBaseContexts(apiMock, {\n ...defaultArgs,\n appConfig: createAppConfig(true),\n }).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: [\n expectedTxCheck,\n clearSignContexts[0],\n clearSignContexts[1],\n clearSignContexts[3],\n ],\n clearSignContextsOptional: [clearSignContexts[2]],\n clearSigningType: ClearSigningType.EIP7730,\n });\n });\n\n it(\"should build the transaction context with transaction check and generic-parser clear sign contexts in the correct order\", async () => {\n // GIVEN\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.ENUM,\n payload: \"payload-3\",\n id: 1,\n value: 2,\n certificate: defaultCertificate,\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload-4\",\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload-2\",\n },\n {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"payload-1\",\n certificate: defaultCertificate,\n },\n ];\n const expectedTxCheck = {\n type: ClearSignContextType.TRANSACTION_CHECK,\n payload: \"transactionCheck\",\n };\n contextModuleMock.getContexts.mockResolvedValueOnce([\n ...clearSignContexts,\n expectedTxCheck,\n ]);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.15.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n\n // WHEN\n const result = await new BuildBaseContexts(apiMock, {\n ...defaultArgs,\n appConfig: createAppConfig(true),\n }).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: [\n expectedTxCheck, // transaction check\n clearSignContexts[3], // transaction info\n clearSignContexts[1], // transaction field description\n clearSignContexts[2], // transaction field description\n ],\n clearSignContextsOptional: [clearSignContexts[0]], // enum\n clearSigningType: ClearSigningType.EIP7730,\n });\n });\n\n it(\"should build the transaction context with clear sign contexts\", async () => {\n // GIVEN\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TRANSACTION_CHECK,\n payload: \"transactionCheck\",\n },\n {\n type: ClearSignContextType.TOKEN,\n payload: \"payload-1\",\n },\n {\n type: ClearSignContextType.NFT,\n payload: \"payload-2\",\n },\n ];\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n\n // WHEN\n const result = await new BuildBaseContexts(apiMock, defaultArgs).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts,\n clearSignContextsOptional: [],\n clearSigningType: ClearSigningType.BASIC,\n });\n });\n\n it(\"should build the transaction context with generic-parser context\", async () => {\n // GIVEN\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"payload-1\",\n certificate: defaultCertificate,\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload-2\",\n },\n {\n type: ClearSignContextType.ENUM,\n payload: \"payload-3\",\n id: 1,\n value: 2,\n certificate: defaultCertificate,\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload-4\",\n },\n ];\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.15.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n\n // WHEN\n const result = await new BuildBaseContexts(apiMock, defaultArgs).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: [\n clearSignContexts[0],\n clearSignContexts[1],\n clearSignContexts[3],\n ],\n clearSignContextsOptional: [clearSignContexts[2]],\n clearSigningType: ClearSigningType.EIP7730,\n });\n });\n\n it(\"should build the transaction context with proxy delegate call context\", async () => {\n // GIVEN\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"payload-1\",\n certificate: defaultCertificate,\n },\n {\n type: ClearSignContextType.PROXY_INFO,\n payload: \"payload-2\",\n },\n ];\n const clearSignContextsOptional: ClearSignContext[] = [];\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.15.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n\n // WHEN\n const result = await new BuildBaseContexts(apiMock, defaultArgs).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: [clearSignContexts[1], clearSignContexts[0]],\n clearSignContextsOptional,\n clearSigningType: ClearSigningType.EIP7730,\n });\n });\n\n it(\"should call the context module with the correct parameters if transaction check is enabled\", async () => {\n // GIVEN\n const clearSignContexts: ClearSignContext[] = [];\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n\n // WHEN\n await new BuildBaseContexts(apiMock, {\n ...defaultArgs,\n appConfig: createAppConfig(true),\n }).run();\n\n // THEN\n expect(contextModuleMock.getContexts).toHaveBeenCalledWith(\n {\n deviceModelId: DeviceModelId.FLEX,\n challenge: \"challenge\",\n domain: \"domain-name.eth\",\n transaction: defaultTransaction,\n ...defaultArgs.subset,\n },\n BASE_CONTEXT_TYPES_FILTER,\n );\n });\n\n it(\"should call the context module with the correct parameters if transaction check is disabled\", async () => {\n // GIVEN\n const clearSignContexts: ClearSignContext[] = [];\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n\n // WHEN\n await new BuildBaseContexts(apiMock, {\n ...defaultArgs,\n appConfig: createAppConfig(false),\n }).run();\n\n // THEN\n expect(contextModuleMock.getContexts).toHaveBeenCalledWith(\n {\n deviceModelId: DeviceModelId.FLEX,\n challenge: \"challenge\",\n domain: \"domain-name.eth\",\n ...defaultArgs.subset,\n },\n BASE_CONTEXT_TYPES_FILTER,\n );\n });\n\n it(\"should call the context module without challenge for Nano S\", async () => {\n // GIVEN\n const clearSignContexts: ClearSignContext[] = [];\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n deviceModelId: DeviceModelId.NANO_S,\n isSecureConnectionAllowed: false,\n });\n\n // WHEN\n await new BuildBaseContexts(apiMock, defaultArgs).run();\n\n // THEN\n expect(contextModuleMock.getContexts).toHaveBeenCalledWith(\n {\n deviceModelId: DeviceModelId.NANO_S,\n domain: \"domain-name.eth\",\n challenge: undefined,\n ...defaultArgs.subset,\n },\n BASE_CONTEXT_TYPES_FILTER,\n );\n });\n\n it(\"should exclude error contexts from the result\", async () => {\n // GIVEN\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.ERROR,\n error: new Error(\"error\"),\n },\n {\n type: ClearSignContextType.TOKEN,\n payload: \"payload-1\",\n },\n {\n type: ClearSignContextType.ERROR,\n error: new Error(\"error\"),\n },\n {\n type: ClearSignContextType.NFT,\n payload: \"payload-2\",\n },\n ];\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n\n // WHEN\n const result = await new BuildBaseContexts(apiMock, defaultArgs).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: [clearSignContexts[1], clearSignContexts[3]],\n clearSignContextsOptional: [],\n clearSigningType: ClearSigningType.BASIC,\n });\n });\n\n it(\"should exclude generic-parser contexts from the result on old apps\", async () => {\n // GIVEN\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"transaction_info\",\n certificate: defaultCertificate,\n },\n {\n type: ClearSignContextType.TOKEN,\n payload: \"payload-1\",\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"transaction_field\",\n },\n {\n type: ClearSignContextType.NFT,\n payload: \"payload-2\",\n },\n {\n type: ClearSignContextType.ENUM,\n payload: \"enum\",\n id: 1,\n value: 2,\n certificate: defaultCertificate,\n },\n ];\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n\n // WHEN\n const result = await new BuildBaseContexts(apiMock, defaultArgs).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: [clearSignContexts[1], clearSignContexts[3]],\n clearSignContextsOptional: [],\n clearSigningType: ClearSigningType.BASIC,\n });\n });\n\n it(\"should exclude generic-parser contexts from the result if no transaction_info was found\", async () => {\n // GIVEN\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"transaction_field\",\n },\n {\n type: ClearSignContextType.TOKEN,\n payload: \"payload-1\",\n },\n {\n type: ClearSignContextType.ENUM,\n payload: \"enum\",\n id: 1,\n value: 2,\n },\n {\n type: ClearSignContextType.NFT,\n payload: \"payload-2\",\n },\n ];\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.14.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n\n // WHEN\n const result = await new BuildBaseContexts(apiMock, defaultArgs).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: [clearSignContexts[1], clearSignContexts[3]],\n clearSignContextsOptional: [],\n clearSigningType: ClearSigningType.BASIC,\n });\n });\n\n it(\"should exclude legacy contexts from the result for generic-parser transactions\", async () => {\n // GIVEN\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TOKEN,\n payload: \"payload-1\",\n },\n {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"payload-2\",\n certificate: defaultCertificate,\n },\n {\n type: ClearSignContextType.EXTERNAL_PLUGIN,\n payload: \"payload-3\",\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload-4\",\n },\n {\n type: ClearSignContextType.ENUM,\n payload: \"payload-5\",\n id: 1,\n value: 2,\n certificate: defaultCertificate,\n },\n ];\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.15.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n\n // WHEN\n const result = await new BuildBaseContexts(apiMock, defaultArgs).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: [clearSignContexts[1], clearSignContexts[3]],\n clearSignContextsOptional: [clearSignContexts[4]],\n clearSigningType: ClearSigningType.EIP7730,\n });\n });\n\n it(\"should exclude generic-parser contexts with a nano s device\", async () => {\n // GIVEN\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TOKEN,\n payload: \"payload-1\",\n },\n {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"payload-2\",\n certificate: defaultCertificate,\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload-3\",\n },\n {\n type: ClearSignContextType.ENUM,\n payload: \"payload-4\",\n id: 1,\n value: 2,\n certificate: defaultCertificate,\n },\n ];\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.14.0\" },\n deviceModelId: DeviceModelId.NANO_S,\n isSecureConnectionAllowed: false,\n });\n\n // WHEN\n const result = await new BuildBaseContexts(apiMock, defaultArgs).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: [clearSignContexts[0]],\n clearSignContextsOptional: [],\n clearSigningType: ClearSigningType.BASIC,\n });\n });\n\n it(\"should exclude generic-parser contexts with an old app version\", async () => {\n // GIVEN\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TOKEN,\n payload: \"payload-1\",\n },\n {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"payload-2\",\n certificate: defaultCertificate,\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload-3\",\n },\n {\n type: ClearSignContextType.ENUM,\n payload: \"payload-4\",\n id: 1,\n value: 2,\n certificate: defaultCertificate,\n },\n ];\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n\n // WHEN\n const result = await new BuildBaseContexts(apiMock, defaultArgs).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: [clearSignContexts[0]],\n clearSignContextsOptional: [],\n clearSigningType: ClearSigningType.BASIC,\n });\n });\n\n it(\"should exclude generic-parser contexts with a non ready device\", async () => {\n // GIVEN\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TOKEN,\n payload: \"payload-1\",\n },\n {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"payload-2\",\n certificate: defaultCertificate,\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload-3\",\n },\n {\n type: ClearSignContextType.ENUM,\n payload: \"payload-4\",\n id: 1,\n value: 2,\n certificate: defaultCertificate,\n },\n ];\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.Connected,\n deviceStatus: DeviceStatus.NOT_CONNECTED,\n deviceModelId: DeviceModelId.FLEX,\n });\n\n // WHEN\n const result = await new BuildBaseContexts(apiMock, defaultArgs).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: [clearSignContexts[0]],\n clearSignContextsOptional: [],\n clearSigningType: ClearSigningType.BASIC,\n });\n });\n\n it(\"should return no clear sign context if the transaction info certificate is missing\", async () => {\n // GIVEN\n const clearSignContexts: ClearSignContext[] = [\n {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: \"payload-1\",\n },\n {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: \"payload-2\",\n },\n {\n type: ClearSignContextType.ENUM,\n payload: \"payload-3\",\n id: 1,\n value: 2,\n },\n ];\n contextModuleMock.getContexts.mockResolvedValueOnce(clearSignContexts);\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.17.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n\n // WHEN\n const result = await new BuildBaseContexts(apiMock, defaultArgs).run();\n\n // THEN\n expect(result).toEqual({\n clearSignContexts: [],\n clearSignContextsOptional: [],\n clearSigningType: ClearSigningType.BASIC,\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["ClearSignContextType", "CommandResultFactory", "DeviceModelId", "DeviceSessionStateType", "DeviceStatus", "hexaStringToBuffer", "Transaction", "ClearSigningType", "makeDeviceActionInternalApiMock", "BASE_CONTEXT_TYPES_FILTER", "BuildBaseContexts", "contextModuleMock", "defaultOptions", "defaultTransaction", "defaultCertificate", "defaultArgs", "apiMock", "createAppConfig", "web3ChecksEnabled", "clearSignContexts", "clearSignContextsOptional", "result", "expectedTxCheck"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{DeviceModelId as f,isSuccessCommandResult as S}from"@ledgerhq/device-management-kit";import{Just as h,Nothing as y}from"purify-ts";import{ClearSigningType as T}from"../../../api/model/ClearSigningType";import{GetChallengeCommand as I}from"../../app-binder/command/GetChallengeCommand";import{BuildFullContextsTask as M}from"../../app-binder/task/BuildFullContextsTask";import{GetWeb3CheckTask as k}from"../../app-binder/task/GetWeb3CheckTask";import{ApplicationChecker as u}from"../../shared/utils/ApplicationChecker";import{TypedDataValueField as P}from"../../typed-data/model/Types";const D="0x0000000000000000000000000000000000000000";class B{constructor(e,t,o,r,s,a,l,p,c=(i,n)=>new k(i,n),v=(i,n)=>new M(i,n)){this.api=e;this.contextModule=t;this.parser=o;this.transactionParser=r;this.transactionMapper=s;this.data=a;this.derivationPath=l;this.appConfig=p;this.getWeb3ChecksFactory=c;this.buildFullContextFactory=v}async run(){let e=null;this.appConfig.web3ChecksEnabled&&(e=(await this.getWeb3ChecksFactory(this.api,{contextModule:this.contextModule,derivationPath:this.derivationPath,data:this.data}).run()).web3Check);const t=this.parser.parse(this.data);if(t.isLeft())throw t.extract();const{types:o,domain:r,message:s}=t.unsafeCoerce(),a=this.api.getDeviceSessionState();let l=y,p={};const c=this.getClearSignVersion(a);if(c.isJust()){let i;const n=await this.api.sendCommand(new I);S(n)&&(i=n.data.challenge);const g=this.data.domain.verifyingContract?.toLowerCase()||D,x=this.data.domain.chainId||0,m=s.filter(d=>d.value instanceof P).map(d=>({path:d.path,value:d.value.data})),C=await this.contextModule.getTypedDataFilters({verifyingContract:g,chainId:x,version:c.extract(),schema:this.data.types,challenge:i,deviceModelId:a.deviceModelId,fieldsValues:m});C.type==="success"&&(l=h(C),p=await this.getCalldatasContexts(a,C))}return{derivationPath:this.derivationPath,web3Check:e,types:o,domain:r,message:s,clearSignContext:l,calldatasContexts:p,deviceModelId:a.deviceModelId}}getClearSignVersion(e){return new u(e,this.appConfig).withMinVersionInclusive("1.10.0").excludeDeviceModel(f.NANO_S).check()?new u(e,this.appConfig).withMinVersionInclusive("1.12.0").check()?h("v2"):h("v1"):y}async getCalldatasContexts(e,t){const o={};for(const r in t.calldatas){const{subset:s}=t.calldatas[r],a=await this.buildFullContextFactory(this.api,{contextModule:this.contextModule,mapper:this.transactionMapper,parser:this.transactionParser,options:{},appConfig:this.appConfig,derivationPath:this.derivationPath,subset:s,deviceModelId:e.deviceModelId}).run();a.clearSigningType===T.EIP7730&&(o[r]=a.clearSignContexts)}return o}}export{B as BuildEIP712ContextTask,D as ZERO_ADDRESS};
1
+ import{ClearSignContextType as y}from"@ledgerhq/context-module";import{DeviceModelId as T,isSuccessCommandResult as I}from"@ledgerhq/device-management-kit";import{Just as C,Nothing as g}from"purify-ts";import{ClearSigningType as M}from"../../../api/model/ClearSigningType";import{GetChallengeCommand as D}from"../../app-binder/command/GetChallengeCommand";import{BuildFullContextsTask as P}from"../../app-binder/task/BuildFullContextsTask";import{ApplicationChecker as m}from"../../shared/utils/ApplicationChecker";import{TypedDataValueField as A}from"../../typed-data/model/Types";const k="0x0000000000000000000000000000000000000000";class W{constructor(e,t,n,i,a,o,u,d,c,l=(h,s)=>new P(h,s)){this.api=e;this.contextModule=t;this.parser=n;this.transactionParser=i;this.transactionMapper=a;this.data=o;this.derivationPath=u;this.appConfig=d;this.from=c;this.buildFullContextFactory=l}async run(){const e=this.parser.parse(this.data);if(e.isLeft())throw e.extract();const{types:t,domain:n,message:i}=e.unsafeCoerce(),a=this.api.getDeviceSessionState(),o=a.deviceModelId,u=await this.getTransactionChecks(o);let d=g,c={};const l=this.getClearSignVersion(a);if(l.isJust()){let s;const v=await this.api.sendCommand(new D);I(v)&&(s=v.data.challenge);const x=this.data.domain.verifyingContract?.toLowerCase()||k,f=this.data.domain.chainId||0,S=i.filter(r=>r.value instanceof A).map(r=>({path:r.path,value:r.value.data})),p=await this.contextModule.getTypedDataFilters({verifyingContract:x,chainId:f,version:l.extract(),schema:this.data.types,challenge:s,deviceModelId:a.deviceModelId,fieldsValues:S});p.type==="success"&&(d=C(p),c=await this.getCalldatasContexts(a,p))}return{derivationPath:this.derivationPath,transactionChecks:u,types:t,domain:n,message:i,clearSignContext:d,calldatasContexts:c,deviceModelId:a.deviceModelId}}async getTransactionChecks(e){if(!this.appConfig.web3ChecksEnabled)return;const t=await this.contextModule.getContexts({deviceModelId:e,data:this.data,from:this.from},[y.TRANSACTION_CHECK]);if(t.length>0&&t[0]?.type===y.TRANSACTION_CHECK)return t[0]}getClearSignVersion(e){return new m(e,this.appConfig).withMinVersionInclusive("1.10.0").excludeDeviceModel(T.NANO_S).check()?new m(e,this.appConfig).withMinVersionInclusive("1.12.0").check()?C("v2"):C("v1"):g}async getCalldatasContexts(e,t){const n={};for(const i in t.calldatas){const{subset:a}=t.calldatas[i],o=await this.buildFullContextFactory(this.api,{contextModule:this.contextModule,mapper:this.transactionMapper,parser:this.transactionParser,options:{},appConfig:this.appConfig,derivationPath:this.derivationPath,subset:a,deviceModelId:e.deviceModelId}).run();o.clearSigningType===M.EIP7730&&(n[i]=o.clearSignContexts)}return n}}export{W as BuildEIP712ContextTask,k as ZERO_ADDRESS};
2
2
  //# sourceMappingURL=BuildEIP712ContextTask.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/task/BuildEIP712ContextTask.ts"],
4
- "sourcesContent": ["import {\n type ClearSignContextSuccess,\n type ClearSignContextType,\n type ContextModule,\n type TypedDataCalldataIndex,\n type TypedDataClearSignContextSuccess,\n} from \"@ledgerhq/context-module\";\nimport {\n DeviceModelId,\n type DeviceSessionState,\n type InternalApi,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\nimport { Just, type Maybe, Nothing } from \"purify-ts\";\n\nimport { type GetConfigCommandResponse } from \"@api/app-binder/GetConfigCommandTypes\";\nimport { ClearSigningType } from \"@api/model/ClearSigningType\";\nimport { type TypedData } from \"@api/model/TypedData\";\nimport { GetChallengeCommand } from \"@internal/app-binder/command/GetChallengeCommand\";\nimport {\n BuildFullContextsTask,\n type BuildFullContextsTaskArgs,\n type ContextWithSubContexts,\n} from \"@internal/app-binder/task/BuildFullContextsTask\";\nimport {\n GetWeb3CheckTask,\n type GetWeb3CheckTaskArgs,\n} from \"@internal/app-binder/task/GetWeb3CheckTask\";\nimport { type ProvideEIP712ContextTaskArgs } from \"@internal/app-binder/task/ProvideEIP712ContextTask\";\nimport { ApplicationChecker } from \"@internal/shared/utils/ApplicationChecker\";\nimport { type TransactionMapperService } from \"@internal/transaction/service/mapper/TransactionMapperService\";\nimport { type TransactionParserService } from \"@internal/transaction/service/parser/TransactionParserService\";\nimport { TypedDataValueField } from \"@internal/typed-data/model/Types\";\nimport { type TypedDataParserService } from \"@internal/typed-data/service/TypedDataParserService\";\n\nexport const ZERO_ADDRESS = \"0x0000000000000000000000000000000000000000\";\n\nexport class BuildEIP712ContextTask {\n constructor(\n private readonly api: InternalApi,\n private readonly contextModule: ContextModule,\n private readonly parser: TypedDataParserService,\n private readonly transactionParser: TransactionParserService,\n private readonly transactionMapper: TransactionMapperService,\n private readonly data: TypedData,\n private readonly derivationPath: string,\n private readonly appConfig: GetConfigCommandResponse,\n private readonly getWeb3ChecksFactory = (\n api: InternalApi,\n args: GetWeb3CheckTaskArgs,\n ) => new GetWeb3CheckTask(api, args),\n private readonly buildFullContextFactory = (\n api: InternalApi,\n args: BuildFullContextsTaskArgs,\n ) => new BuildFullContextsTask(api, args),\n ) {}\n\n async run(): Promise<ProvideEIP712ContextTaskArgs> {\n // Run the web3checks if needed\n let web3Check: ClearSignContextSuccess<ClearSignContextType.WEB3_CHECK> | null =\n null;\n if (this.appConfig.web3ChecksEnabled) {\n web3Check = (\n await this.getWeb3ChecksFactory(this.api, {\n contextModule: this.contextModule,\n derivationPath: this.derivationPath,\n data: this.data,\n }).run()\n ).web3Check;\n }\n\n // Clear signing context\n // Parse the message types and values\n const parsed = this.parser.parse(this.data);\n if (parsed.isLeft()) {\n throw parsed.extract();\n }\n const { types, domain, message } = parsed.unsafeCoerce();\n\n // Get clear signing context, if any\n const deviceState = this.api.getDeviceSessionState();\n let clearSignContext: Maybe<TypedDataClearSignContextSuccess> = Nothing;\n let calldatasContexts: Record<\n TypedDataCalldataIndex,\n ContextWithSubContexts[]\n > = {};\n const version = this.getClearSignVersion(deviceState);\n if (version.isJust()) {\n // Get challenge\n let challenge: string | undefined = undefined;\n const challengeRes = await this.api.sendCommand(\n new GetChallengeCommand(),\n );\n if (isSuccessCommandResult(challengeRes)) {\n challenge = challengeRes.data.challenge;\n }\n\n // Get filters\n const verifyingContract =\n this.data.domain.verifyingContract?.toLowerCase() || ZERO_ADDRESS;\n const chainId = this.data.domain.chainId || 0;\n const fieldsValues = message\n .filter((v) => v.value instanceof TypedDataValueField)\n .map((v) => ({\n path: v.path,\n value: (v.value as TypedDataValueField).data,\n }));\n const filters = await this.contextModule.getTypedDataFilters({\n verifyingContract,\n chainId,\n version: version.extract(),\n schema: this.data.types,\n challenge,\n deviceModelId: deviceState.deviceModelId,\n fieldsValues,\n });\n if (filters.type === \"success\") {\n clearSignContext = Just(filters);\n calldatasContexts = await this.getCalldatasContexts(\n deviceState,\n filters,\n );\n }\n }\n\n // Return the args for provide context task\n const provideTaskArgs: ProvideEIP712ContextTaskArgs = {\n derivationPath: this.derivationPath,\n web3Check,\n types,\n domain,\n message,\n clearSignContext,\n calldatasContexts,\n deviceModelId: deviceState.deviceModelId,\n };\n return provideTaskArgs;\n }\n\n private getClearSignVersion(\n deviceState: DeviceSessionState,\n ): Maybe<\"v1\" | \"v2\"> {\n if (\n !new ApplicationChecker(deviceState, this.appConfig)\n .withMinVersionInclusive(\"1.10.0\")\n .excludeDeviceModel(DeviceModelId.NANO_S)\n .check()\n ) {\n return Nothing;\n }\n\n // EIP712 v2 (amount & datetime filters) supported since 1.11.0:\n // https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#1110-1\n // But some issues were still present until 1.12.0 among which:\n // * V2 descriptor with missing token not supported by the app\n // * Empty arrays with filters not correctly handled\n // * Trusted name filters not yet released\n // Therefore it's safer and easier to use V1 filters before 1.12.0:\n // https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#1120\n const shouldUseV2Filters = new ApplicationChecker(\n deviceState,\n this.appConfig,\n )\n .withMinVersionInclusive(\"1.12.0\")\n .check();\n return shouldUseV2Filters ? Just(\"v2\") : Just(\"v1\");\n }\n\n private async getCalldatasContexts(\n deviceState: DeviceSessionState,\n filters: TypedDataClearSignContextSuccess,\n ): Promise<Record<TypedDataCalldataIndex, ContextWithSubContexts[]>> {\n const calldatasContexts: Record<\n TypedDataCalldataIndex,\n ContextWithSubContexts[]\n > = {};\n for (const calldataIndex in filters.calldatas) {\n const { subset } = filters.calldatas[calldataIndex]!;\n const calldataContext = await this.buildFullContextFactory(this.api, {\n contextModule: this.contextModule,\n mapper: this.transactionMapper,\n parser: this.transactionParser,\n options: {},\n appConfig: this.appConfig,\n derivationPath: this.derivationPath,\n subset,\n deviceModelId: deviceState.deviceModelId,\n }).run();\n if (calldataContext.clearSigningType === ClearSigningType.EIP7730) {\n calldatasContexts[calldataIndex] = calldataContext.clearSignContexts;\n }\n }\n return calldatasContexts;\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["DeviceModelId", "isSuccessCommandResult", "Just", "Nothing", "ClearSigningType", "GetChallengeCommand", "BuildFullContextsTask", "GetWeb3CheckTask", "ApplicationChecker", "TypedDataValueField", "ZERO_ADDRESS", "BuildEIP712ContextTask", "api", "contextModule", "parser", "transactionParser", "transactionMapper", "data", "derivationPath", "appConfig", "getWeb3ChecksFactory", "args", "buildFullContextFactory", "web3Check", "parsed", "types", "domain", "message", "deviceState", "clearSignContext", "calldatasContexts", "version", "challenge", "challengeRes", "verifyingContract", "chainId", "fieldsValues", "v", "filters", "calldataIndex", "subset", "calldataContext"]
4
+ "sourcesContent": ["import {\n type ClearSignContextSuccess,\n ClearSignContextType,\n type ContextModule,\n type TypedDataCalldataIndex,\n type TypedDataClearSignContextSuccess,\n} from \"@ledgerhq/context-module\";\nimport {\n DeviceModelId,\n type DeviceSessionState,\n type InternalApi,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\nimport { Just, type Maybe, Nothing } from \"purify-ts\";\n\nimport { type GetConfigCommandResponse } from \"@api/app-binder/GetConfigCommandTypes\";\nimport { ClearSigningType } from \"@api/model/ClearSigningType\";\nimport { type TypedData } from \"@api/model/TypedData\";\nimport { GetChallengeCommand } from \"@internal/app-binder/command/GetChallengeCommand\";\nimport {\n BuildFullContextsTask,\n type BuildFullContextsTaskArgs,\n type ContextWithSubContexts,\n} from \"@internal/app-binder/task/BuildFullContextsTask\";\nimport { type ProvideEIP712ContextTaskArgs } from \"@internal/app-binder/task/ProvideEIP712ContextTask\";\nimport { ApplicationChecker } from \"@internal/shared/utils/ApplicationChecker\";\nimport { type TransactionMapperService } from \"@internal/transaction/service/mapper/TransactionMapperService\";\nimport { type TransactionParserService } from \"@internal/transaction/service/parser/TransactionParserService\";\nimport { TypedDataValueField } from \"@internal/typed-data/model/Types\";\nimport { type TypedDataParserService } from \"@internal/typed-data/service/TypedDataParserService\";\n\nexport const ZERO_ADDRESS = \"0x0000000000000000000000000000000000000000\";\n\nexport class BuildEIP712ContextTask {\n constructor(\n private readonly api: InternalApi,\n private readonly contextModule: ContextModule,\n private readonly parser: TypedDataParserService,\n private readonly transactionParser: TransactionParserService,\n private readonly transactionMapper: TransactionMapperService,\n private readonly data: TypedData,\n private readonly derivationPath: string,\n private readonly appConfig: GetConfigCommandResponse,\n private readonly from: string,\n private readonly buildFullContextFactory = (\n api: InternalApi,\n args: BuildFullContextsTaskArgs,\n ) => new BuildFullContextsTask(api, args),\n ) {}\n\n async run(): Promise<ProvideEIP712ContextTaskArgs> {\n // Clear signing context\n // Parse the message types and values\n const parsed = this.parser.parse(this.data);\n if (parsed.isLeft()) {\n throw parsed.extract();\n }\n const { types, domain, message } = parsed.unsafeCoerce();\n\n const deviceState = this.api.getDeviceSessionState();\n const deviceModelId = deviceState.deviceModelId;\n const transactionChecks = await this.getTransactionChecks(deviceModelId);\n\n // Get clear signing context, if any\n let clearSignContext: Maybe<TypedDataClearSignContextSuccess> = Nothing;\n let calldatasContexts: Record<\n TypedDataCalldataIndex,\n ContextWithSubContexts[]\n > = {};\n const version = this.getClearSignVersion(deviceState);\n if (version.isJust()) {\n // Get challenge\n let challenge: string | undefined = undefined;\n const challengeRes = await this.api.sendCommand(\n new GetChallengeCommand(),\n );\n if (isSuccessCommandResult(challengeRes)) {\n challenge = challengeRes.data.challenge;\n }\n\n // Get filters\n const verifyingContract =\n this.data.domain.verifyingContract?.toLowerCase() || ZERO_ADDRESS;\n const chainId = this.data.domain.chainId || 0;\n const fieldsValues = message\n .filter((v) => v.value instanceof TypedDataValueField)\n .map((v) => ({\n path: v.path,\n value: (v.value as TypedDataValueField).data,\n }));\n const filters = await this.contextModule.getTypedDataFilters({\n verifyingContract,\n chainId,\n version: version.extract(),\n schema: this.data.types,\n challenge,\n deviceModelId: deviceState.deviceModelId,\n fieldsValues,\n });\n if (filters.type === \"success\") {\n clearSignContext = Just(filters);\n calldatasContexts = await this.getCalldatasContexts(\n deviceState,\n filters,\n );\n }\n }\n\n // Return the args for provide context task\n const provideTaskArgs: ProvideEIP712ContextTaskArgs = {\n derivationPath: this.derivationPath,\n transactionChecks,\n types,\n domain,\n message,\n clearSignContext,\n calldatasContexts,\n deviceModelId: deviceState.deviceModelId,\n };\n return provideTaskArgs;\n }\n\n private async getTransactionChecks(\n deviceModelId: DeviceModelId,\n ): Promise<ClearSignContextSuccess | undefined> {\n if (!this.appConfig.web3ChecksEnabled) {\n return undefined;\n }\n const contexts = await this.contextModule.getContexts(\n {\n deviceModelId,\n data: this.data,\n from: this.from,\n },\n [ClearSignContextType.TRANSACTION_CHECK],\n );\n if (\n contexts.length > 0 &&\n contexts[0]?.type === ClearSignContextType.TRANSACTION_CHECK\n ) {\n return contexts[0] as ClearSignContextSuccess;\n }\n return undefined;\n }\n\n private getClearSignVersion(\n deviceState: DeviceSessionState,\n ): Maybe<\"v1\" | \"v2\"> {\n if (\n !new ApplicationChecker(deviceState, this.appConfig)\n .withMinVersionInclusive(\"1.10.0\")\n .excludeDeviceModel(DeviceModelId.NANO_S)\n .check()\n ) {\n return Nothing;\n }\n\n // EIP712 v2 (amount & datetime filters) supported since 1.11.0:\n // https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#1110-1\n // But some issues were still present until 1.12.0 among which:\n // * V2 descriptor with missing token not supported by the app\n // * Empty arrays with filters not correctly handled\n // * Trusted name filters not yet released\n // Therefore it's safer and easier to use V1 filters before 1.12.0:\n // https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#1120\n const shouldUseV2Filters = new ApplicationChecker(\n deviceState,\n this.appConfig,\n )\n .withMinVersionInclusive(\"1.12.0\")\n .check();\n return shouldUseV2Filters ? Just(\"v2\") : Just(\"v1\");\n }\n\n private async getCalldatasContexts(\n deviceState: DeviceSessionState,\n filters: TypedDataClearSignContextSuccess,\n ): Promise<Record<TypedDataCalldataIndex, ContextWithSubContexts[]>> {\n const calldatasContexts: Record<\n TypedDataCalldataIndex,\n ContextWithSubContexts[]\n > = {};\n for (const calldataIndex in filters.calldatas) {\n const { subset } = filters.calldatas[calldataIndex]!;\n const calldataContext = await this.buildFullContextFactory(this.api, {\n contextModule: this.contextModule,\n mapper: this.transactionMapper,\n parser: this.transactionParser,\n options: {},\n appConfig: this.appConfig,\n derivationPath: this.derivationPath,\n subset,\n deviceModelId: deviceState.deviceModelId,\n }).run();\n if (calldataContext.clearSigningType === ClearSigningType.EIP7730) {\n calldatasContexts[calldataIndex] = calldataContext.clearSignContexts;\n }\n }\n return calldatasContexts;\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["ClearSignContextType", "DeviceModelId", "isSuccessCommandResult", "Just", "Nothing", "ClearSigningType", "GetChallengeCommand", "BuildFullContextsTask", "ApplicationChecker", "TypedDataValueField", "ZERO_ADDRESS", "BuildEIP712ContextTask", "api", "contextModule", "parser", "transactionParser", "transactionMapper", "data", "derivationPath", "appConfig", "from", "buildFullContextFactory", "args", "parsed", "types", "domain", "message", "deviceState", "deviceModelId", "transactionChecks", "clearSignContext", "calldatasContexts", "version", "challenge", "challengeRes", "verifyingContract", "chainId", "fieldsValues", "v", "filters", "contexts", "calldataIndex", "subset", "calldataContext"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{TypedDataCalldataParamPresence as w}from"@ledgerhq/context-module";import{CommandResultFactory as I,DeviceModelId as s,DeviceSessionStateType as v,DeviceStatus as x}from"@ledgerhq/device-management-kit";import{Just as C,Left as O,Nothing as k,Right as b}from"purify-ts";import{ClearSigningType as A}from"../../../api/model/ClearSigningType";import{makeDeviceActionInternalApiMock as P}from"../../app-binder/device-action/__test-utils__/makeInternalApi";import{PrimitiveType as h,StructType as V,TypedDataValueField as E,TypedDataValueRoot as D}from"../../typed-data/model/Types";import{BuildEIP712ContextTask as g}from"./BuildEIP712ContextTask";describe("BuildEIP712ContextTask",()=>{const e=P(),a={getFieldContext:vi.fn(),getContexts:vi.fn(),getTypedDataFilters:vi.fn(),getWeb3Checks:vi.fn(),getSolanaContext:vi.fn()},n={parse:vi.fn()},p={extractValue:vi.fn()},m={mapTransactionToSubset:vi.fn()},o=vi.fn(),u=vi.fn();function f(t){return{blindSigningEnabled:!1,web3ChecksEnabled:t,web3ChecksOptIn:!1,version:"1.13.0"}}const c={domain:{name:"Permit2",chainId:137,verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3"},primaryType:"PermitSingle",message:{details:{token:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",amount:"69420000000000000000",expiration:"1718184249",nonce:"0"},spender:"0xec7be89e9d109e7e3fec59c222cf297125fefda2",sigDeadline:"1715594049"},types:{PermitSingle:[{name:"details",type:"PermitDetails"},{name:"spender",type:"address"},{name:"sigDeadline",type:"uint256"}],PermitDetails:[{name:"token",type:"address"},{name:"amount",type:"uint"},{name:"expiration",type:"uint"},{name:"nonce",type:"uint"}]}},r={PermitSingle:{details:new V("PermitDetails"),spender:new h("address","address",k),sigDeadline:new h("uint256","uint",C(32))},PermitDetails:{token:new h("address","address",k),amount:new h("uint160","uint",C(20)),expiration:new h("uint48","uint",C(6)),nonce:new h("uint48","uint",C(6))}},l=[{path:"",type:"",value:new D("EIP712Domain")},{path:"chainId",type:"uint256",value:new E(Uint8Array.from([137]))}],d=[{path:"",type:"",value:new D("PermitSingle")},{path:"details.amount",type:"uint160",value:new E(Uint8Array.from([18]))},{path:"details.expiration",type:"uint48",value:new E(Uint8Array.from([19]))}],y={type:"success",messageInfo:{displayName:"Permit2",filtersCount:1,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{},tokens:{},calldatas:{},proxy:void 0,filters:{"details.amount":{displayName:"Amount allowance",path:"details.amount",signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3",tokenIndex:255,type:"amount"}}},T="0x1234";beforeEach(()=>{vi.resetAllMocks(),o.mockReturnValue({run:async()=>({web3Check:null})}),u.mockReturnValue({run:async()=>({clearSignContexts:[],clearSigningType:A.BASIC})}),e.sendCommand.mockResolvedValue(I({data:{challenge:T}}))}),it("Build context with clear signing context not supported by the device",async()=>{const t=new g(e,a,n,p,m,c,"44'/60'/0'/0/0",f(!1),o,u);n.parse.mockReturnValueOnce(b({types:r,domain:l,message:d})),e.getDeviceSessionState.mockReturnValueOnce({sessionStateType:v.ReadyWithoutSecureChannel,deviceStatus:x.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.11.0"},deviceModelId:s.NANO_S,isSecureConnectionAllowed:!1});const i=await t.run();expect(i).toStrictEqual({deviceModelId:s.NANO_S,derivationPath:"44'/60'/0'/0/0",web3Check:null,types:r,domain:l,message:d,clearSignContext:k,calldatasContexts:{}})}),it("Build context with no clear signing context",async()=>{const t=new g(e,a,n,p,m,c,"44'/60'/0'/0/0",f(!1),o,u);n.parse.mockReturnValueOnce(b({types:r,domain:l,message:d})),e.getDeviceSessionState.mockReturnValueOnce({sessionStateType:v.ReadyWithoutSecureChannel,deviceStatus:x.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"},deviceModelId:s.FLEX,isSecureConnectionAllowed:!1}),a.getTypedDataFilters.mockResolvedValueOnce({type:"error",error:new Error("no filter")});const i=await t.run();expect(i).toStrictEqual({deviceModelId:s.FLEX,derivationPath:"44'/60'/0'/0/0",web3Check:null,types:r,domain:l,message:d,clearSignContext:k,calldatasContexts:{}})}),it("Build context with clear signing context",async()=>{const t="web3Check",i=new g(e,a,n,p,m,c,"44'/60'/0'/0/0",f(!1),o,u);o.mockReturnValueOnce({run:async()=>({web3Check:t})}),n.parse.mockReturnValueOnce(b({types:r,domain:l,message:d})),e.getDeviceSessionState.mockReturnValueOnce({sessionStateType:v.ReadyWithoutSecureChannel,deviceStatus:x.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"},deviceModelId:s.FLEX,isSecureConnectionAllowed:!1}),a.getTypedDataFilters.mockResolvedValueOnce(y);const S=await i.run();expect(S).toStrictEqual({deviceModelId:s.FLEX,derivationPath:"44'/60'/0'/0/0",web3Check:null,types:r,domain:l,message:d,clearSignContext:C(y),calldatasContexts:{}}),expect(n.parse).toHaveBeenCalledWith(c),expect(a.getTypedDataFilters).toHaveBeenCalledWith({verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:137,version:"v2",schema:c.types,challenge:T,deviceModelId:s.FLEX,fieldsValues:[{path:"details.amount",value:Uint8Array.from([18])},{path:"details.expiration",value:Uint8Array.from([19])}]})}),it("Build context with clear signing context and web3Check",async()=>{const t="web3Check",i=new g(e,a,n,p,m,c,"44'/60'/0'/0/0",f(!0),o,u);o.mockReturnValueOnce({run:async()=>({web3Check:t})}),n.parse.mockReturnValueOnce(b({types:r,domain:l,message:d})),e.getDeviceSessionState.mockReturnValueOnce({sessionStateType:v.ReadyWithoutSecureChannel,deviceStatus:x.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"},deviceModelId:s.FLEX,isSecureConnectionAllowed:!1}),a.getTypedDataFilters.mockResolvedValueOnce(y);const S=await i.run();expect(S).toStrictEqual({deviceModelId:s.FLEX,derivationPath:"44'/60'/0'/0/0",web3Check:t,types:r,domain:l,message:d,clearSignContext:C(y),calldatasContexts:{}}),expect(o).toHaveBeenCalledWith(e,{contextModule:a,derivationPath:"44'/60'/0'/0/0",data:c})}),it("Build context with clear signing context V1",async()=>{const t=new g(e,a,n,p,m,c,"44'/60'/0'/0/0",f(!1),o,u);n.parse.mockReturnValueOnce(b({types:r,domain:l,message:d})),e.getDeviceSessionState.mockReturnValueOnce({sessionStateType:v.ReadyWithoutSecureChannel,deviceStatus:x.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.11.0"},deviceModelId:s.FLEX,isSecureConnectionAllowed:!1}),a.getTypedDataFilters.mockResolvedValueOnce(y),await t.run(),expect(a.getTypedDataFilters).toHaveBeenCalledWith({verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:137,version:"v1",schema:c.types,challenge:T,deviceModelId:s.FLEX,fieldsValues:[{path:"details.amount",value:Uint8Array.from([18])},{path:"details.expiration",value:Uint8Array.from([19])}]})}),it("Build context with clear signing context and calldatas",async()=>{const t=new g(e,a,n,p,m,c,"44'/60'/0'/0/0",f(!1),o,u),i={chainId:4660,data:"0x6a76120200000000000000000000000023f8abfc2824c397ccb3da89ae772984107ddb99",from:"0x8ceb23fd6bc0add59e62ac25578270cff1b9f619",selector:"0x778899aa",to:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",value:4200000000000000n},S={...y,calldatas:{0:{filter:{calldataIndex:0,displayName:"Transaction",valueFlag:!0,calleeFlag:w.Present,chainIdFlag:!1,selectorFlag:!1,amountFlag:!0,spenderFlag:w.Present,signature:"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"},subset:i}}};n.parse.mockReturnValueOnce(b({types:r,domain:l,message:d})),e.getDeviceSessionState.mockReturnValueOnce({sessionStateType:v.ReadyWithoutSecureChannel,deviceStatus:x.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"},deviceModelId:s.FLEX,isSecureConnectionAllowed:!1}),a.getTypedDataFilters.mockResolvedValueOnce(S),u.mockReturnValue({run:async()=>({clearSignContexts:[],clearSigningType:A.EIP7730})});const R=await t.run();expect(u).toHaveBeenCalledWith(e,expect.objectContaining({subset:i})),expect(R).toStrictEqual({deviceModelId:s.FLEX,derivationPath:"44'/60'/0'/0/0",web3Check:null,types:r,domain:l,message:d,clearSignContext:C(S),calldatasContexts:{0:[]}})}),it("Should throw an error if parsing fails",async()=>{const t=new g(e,a,n,p,m,c,"44'/60'/0'/0/0",f(!1),o,u);n.parse.mockReturnValueOnce(O(new Error("Parsing error")));try{await t.run()}catch(i){expect(i).toBeInstanceOf(Error),expect(i.message).toBe("Parsing error")}})});
1
+ import{ClearSignContextType as E}from"@ledgerhq/context-module";import{TypedDataCalldataParamPresence as A}from"@ledgerhq/context-module";import{CommandResultFactory as I,DeviceModelId as s,DeviceSessionStateType as x,DeviceStatus as v}from"@ledgerhq/device-management-kit";import{Just as C,Left as M,Nothing as b,Right as h}from"purify-ts";import{ClearSigningType as R}from"../../../api/model/ClearSigningType";import{makeDeviceActionInternalApiMock as F}from"../../app-binder/device-action/__test-utils__/makeInternalApi";import{PrimitiveType as T,StructType as P,TypedDataValueField as w,TypedDataValueRoot as D}from"../../typed-data/model/Types";import{BuildEIP712ContextTask as y}from"./BuildEIP712ContextTask";describe("BuildEIP712ContextTask",()=>{const n=F(),e={getFieldContext:vi.fn(),getContexts:vi.fn(),getTypedDataFilters:vi.fn()},a={parse:vi.fn()},p={extractValue:vi.fn()},m={mapTransactionToSubset:vi.fn()},l=vi.fn();function f(t){return{blindSigningEnabled:!1,web3ChecksEnabled:t,web3ChecksOptIn:!1,version:"1.13.0"}}const d={domain:{name:"Permit2",chainId:137,verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3"},primaryType:"PermitSingle",message:{details:{token:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",amount:"69420000000000000000",expiration:"1718184249",nonce:"0"},spender:"0xec7be89e9d109e7e3fec59c222cf297125fefda2",sigDeadline:"1715594049"},types:{PermitSingle:[{name:"details",type:"PermitDetails"},{name:"spender",type:"address"},{name:"sigDeadline",type:"uint256"}],PermitDetails:[{name:"token",type:"address"},{name:"amount",type:"uint"},{name:"expiration",type:"uint"},{name:"nonce",type:"uint"}]}},o={PermitSingle:{details:new P("PermitDetails"),spender:new T("address","address",b),sigDeadline:new T("uint256","uint",C(32))},PermitDetails:{token:new T("address","address",b),amount:new T("uint160","uint",C(20)),expiration:new T("uint48","uint",C(6)),nonce:new T("uint48","uint",C(6))}},c=[{path:"",type:"",value:new D("EIP712Domain")},{path:"chainId",type:"uint256",value:new w(Uint8Array.from([137]))}],r=[{path:"",type:"",value:new D("PermitSingle")},{path:"details.amount",type:"uint160",value:new w(Uint8Array.from([18]))},{path:"details.expiration",type:"uint48",value:new w(Uint8Array.from([19]))}],g={type:"success",messageInfo:{displayName:"Permit2",filtersCount:1,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{},tokens:{},calldatas:{},proxy:void 0,filters:{"details.amount":{displayName:"Amount allowance",path:"details.amount",signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3",tokenIndex:255,type:"amount"}}},k="0x1234",u="0x8ceb23fd6bc0add59e62ac25578270cff1b9f619";beforeEach(()=>{vi.resetAllMocks(),n.sendCommand.mockResolvedValue(I({data:{challenge:k}})),l.mockReturnValue({run:async()=>({clearSignContexts:[],clearSigningType:R.BASIC})})}),it("Build context with clear signing context not supported by the device",async()=>{const t=new y(n,e,a,p,m,d,"44'/60'/0'/0/0",f(!1),u,l);a.parse.mockReturnValueOnce(h({types:o,domain:c,message:r})),n.getDeviceSessionState.mockReturnValueOnce({sessionStateType:x.ReadyWithoutSecureChannel,deviceStatus:v.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.11.0"},deviceModelId:s.NANO_S,isSecureConnectionAllowed:!1});const i=await t.run();expect(i).toStrictEqual({deviceModelId:s.NANO_S,derivationPath:"44'/60'/0'/0/0",transactionChecks:void 0,types:o,domain:c,message:r,clearSignContext:b,calldatasContexts:{}})}),it("Build context with no clear signing context",async()=>{const t=new y(n,e,a,p,m,d,"44'/60'/0'/0/0",f(!1),u,l);a.parse.mockReturnValueOnce(h({types:o,domain:c,message:r})),n.getDeviceSessionState.mockReturnValueOnce({sessionStateType:x.ReadyWithoutSecureChannel,deviceStatus:v.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"},deviceModelId:s.FLEX,isSecureConnectionAllowed:!1}),e.getTypedDataFilters.mockResolvedValueOnce({type:E.ERROR,error:new Error("no filter")});const i=await t.run();expect(i).toStrictEqual({deviceModelId:s.FLEX,derivationPath:"44'/60'/0'/0/0",transactionChecks:void 0,types:o,domain:c,message:r,clearSignContext:b,calldatasContexts:{}})}),it("Build context with clear signing context",async()=>{const t={type:E.TRANSACTION_CHECK,payload:"web3Check"},i=new y(n,e,a,p,m,d,"44'/60'/0'/0/0",f(!1),u,l);e.getContexts.mockResolvedValueOnce([t]),a.parse.mockReturnValueOnce(h({types:o,domain:c,message:r})),n.getDeviceSessionState.mockReturnValueOnce({sessionStateType:x.ReadyWithoutSecureChannel,deviceStatus:v.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"},deviceModelId:s.FLEX,isSecureConnectionAllowed:!1}),e.getTypedDataFilters.mockResolvedValueOnce(g);const S=await i.run();expect(S).toStrictEqual({deviceModelId:s.FLEX,derivationPath:"44'/60'/0'/0/0",transactionChecks:void 0,types:o,domain:c,message:r,clearSignContext:C(g),calldatasContexts:{}}),expect(a.parse).toHaveBeenCalledWith(d),expect(e.getTypedDataFilters).toHaveBeenCalledWith({verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:137,version:"v2",schema:d.types,challenge:k,deviceModelId:s.FLEX,fieldsValues:[{path:"details.amount",value:Uint8Array.from([18])},{path:"details.expiration",value:Uint8Array.from([19])}]})}),it("Build context with clear signing context and transaction checks",async()=>{const t={type:E.TRANSACTION_CHECK,payload:"transactionCheck"},i=new y(n,e,a,p,m,d,"44'/60'/0'/0/0",f(!0),u,l);e.getContexts.mockResolvedValueOnce([t]),a.parse.mockReturnValueOnce(h({types:o,domain:c,message:r})),n.getDeviceSessionState.mockReturnValueOnce({sessionStateType:x.ReadyWithoutSecureChannel,deviceStatus:v.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"},deviceModelId:s.FLEX,isSecureConnectionAllowed:!1}),e.getTypedDataFilters.mockResolvedValueOnce(g);const S=await i.run();expect(S).toStrictEqual({deviceModelId:s.FLEX,derivationPath:"44'/60'/0'/0/0",types:o,domain:c,message:r,clearSignContext:C(g),calldatasContexts:{},transactionChecks:t})}),it("Build context with clear signing context V1",async()=>{const t=new y(n,e,a,p,m,d,"44'/60'/0'/0/0",f(!1),u,l);a.parse.mockReturnValueOnce(h({types:o,domain:c,message:r})),n.getDeviceSessionState.mockReturnValueOnce({sessionStateType:x.ReadyWithoutSecureChannel,deviceStatus:v.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.11.0"},deviceModelId:s.FLEX,isSecureConnectionAllowed:!1}),e.getTypedDataFilters.mockResolvedValueOnce(g),await t.run(),expect(e.getTypedDataFilters).toHaveBeenCalledWith({verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:137,version:"v1",schema:d.types,challenge:k,deviceModelId:s.FLEX,fieldsValues:[{path:"details.amount",value:Uint8Array.from([18])},{path:"details.expiration",value:Uint8Array.from([19])}]})}),it("Build context with clear signing context and calldatas",async()=>{const t=new y(n,e,a,p,m,d,"44'/60'/0'/0/0",f(!1),u,l),i={chainId:4660,data:"0x6a76120200000000000000000000000023f8abfc2824c397ccb3da89ae772984107ddb99",from:u,selector:"0x778899aa",to:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",value:4200000000000000n},S={...g,calldatas:{0:{filter:{calldataIndex:0,displayName:"Transaction",valueFlag:!0,calleeFlag:A.Present,chainIdFlag:!1,selectorFlag:!1,amountFlag:!0,spenderFlag:A.Present,signature:"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"},subset:i}}};a.parse.mockReturnValueOnce(h({types:o,domain:c,message:r})),n.getDeviceSessionState.mockReturnValueOnce({sessionStateType:x.ReadyWithoutSecureChannel,deviceStatus:v.CONNECTED,installedApps:[],currentApp:{name:"Ethereum",version:"1.12.0"},deviceModelId:s.FLEX,isSecureConnectionAllowed:!1}),e.getTypedDataFilters.mockResolvedValueOnce(S),l.mockReturnValue({run:async()=>({clearSignContexts:[],clearSigningType:R.EIP7730})});const O=await t.run();expect(O).toStrictEqual({deviceModelId:s.FLEX,derivationPath:"44'/60'/0'/0/0",transactionChecks:void 0,types:o,domain:c,message:r,clearSignContext:C(S),calldatasContexts:{0:[]}})}),it("Should throw an error if parsing fails",async()=>{const t=new y(n,e,a,p,m,d,"44'/60'/0'/0/0",f(!1),u,l);a.parse.mockReturnValueOnce(M(new Error("Parsing error")));try{await t.run()}catch(i){expect(i).toBeInstanceOf(Error),expect(i.message).toBe("Parsing error")}})});
2
2
  //# sourceMappingURL=BuildEIP712ContextTask.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/task/BuildEIP712ContextTask.test.ts"],
4
- "sourcesContent": ["import type {\n ClearSignContextSuccess,\n ClearSignContextType,\n TypedDataClearSignContextSuccess,\n} from \"@ledgerhq/context-module\";\nimport { TypedDataCalldataParamPresence } from \"@ledgerhq/context-module\";\nimport {\n CommandResultFactory,\n DeviceModelId,\n DeviceSessionStateType,\n DeviceStatus,\n} from \"@ledgerhq/device-management-kit\";\nimport { Just, Left, Nothing, Right } from \"purify-ts\";\n\nimport type { GetConfigCommandResponse } from \"@api/app-binder/GetConfigCommandTypes\";\nimport { ClearSigningType } from \"@api/model/ClearSigningType\";\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\nimport { type TransactionMapperService } from \"@internal/transaction/service/mapper/TransactionMapperService\";\nimport { type TransactionParserService } from \"@internal/transaction/service/parser/TransactionParserService\";\nimport {\n PrimitiveType,\n StructType,\n TypedDataValueField,\n TypedDataValueRoot,\n} from \"@internal/typed-data/model/Types\";\n\nimport { BuildEIP712ContextTask } from \"./BuildEIP712ContextTask\";\n\ndescribe(\"BuildEIP712ContextTask\", () => {\n const apiMock = makeDeviceActionInternalApiMock();\n const contextMouleMock = {\n getFieldContext: vi.fn(),\n getContexts: vi.fn(),\n getTypedDataFilters: vi.fn(),\n getWeb3Checks: vi.fn(),\n getSolanaContext: vi.fn(),\n };\n const parserMock = {\n parse: vi.fn(),\n };\n const mockTransactionParser: TransactionParserService = {\n extractValue: vi.fn(),\n } as unknown as TransactionParserService;\n const mockTransactionMapper: TransactionMapperService = {\n mapTransactionToSubset: vi.fn(),\n };\n const getWeb3ChecksFactoryMock = vi.fn();\n const buildFullContextFactoryMock = vi.fn();\n\n function createAppConfig(\n web3ChecksEnabled: boolean,\n ): GetConfigCommandResponse {\n return {\n blindSigningEnabled: false,\n web3ChecksEnabled,\n web3ChecksOptIn: false,\n version: \"1.13.0\",\n };\n }\n\n const TEST_DATA = {\n domain: {\n name: \"Permit2\",\n chainId: 137,\n verifyingContract: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n },\n primaryType: \"PermitSingle\",\n message: {\n details: {\n token: \"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\",\n amount: \"69420000000000000000\",\n expiration: \"1718184249\",\n nonce: \"0\",\n },\n spender: \"0xec7be89e9d109e7e3fec59c222cf297125fefda2\",\n sigDeadline: \"1715594049\",\n },\n 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 { name: \"token\", type: \"address\" },\n { name: \"amount\", type: \"uint\" },\n { name: \"expiration\", type: \"uint\" },\n { name: \"nonce\", type: \"uint\" },\n ],\n },\n };\n\n const TEST_TYPES = {\n PermitSingle: {\n details: new StructType(\"PermitDetails\"),\n spender: new PrimitiveType(\"address\", \"address\", Nothing),\n sigDeadline: new PrimitiveType(\"uint256\", \"uint\", Just(32)),\n },\n PermitDetails: {\n token: new PrimitiveType(\"address\", \"address\", Nothing),\n amount: new PrimitiveType(\"uint160\", \"uint\", Just(20)),\n expiration: new PrimitiveType(\"uint48\", \"uint\", Just(6)),\n nonce: new PrimitiveType(\"uint48\", \"uint\", Just(6)),\n },\n };\n const TEST_DOMAIN_VALUES = [\n {\n path: \"\",\n type: \"\",\n value: new TypedDataValueRoot(\"EIP712Domain\"),\n },\n {\n path: \"chainId\",\n type: \"uint256\",\n value: new TypedDataValueField(Uint8Array.from([137])),\n },\n ];\n const TEST_MESSAGE_VALUES = [\n {\n path: \"\",\n type: \"\",\n value: new TypedDataValueRoot(\"PermitSingle\"),\n },\n {\n path: \"details.amount\",\n type: \"uint160\",\n value: new TypedDataValueField(Uint8Array.from([0x12])),\n },\n {\n path: \"details.expiration\",\n type: \"uint48\",\n value: new TypedDataValueField(Uint8Array.from([0x13])),\n },\n ];\n const TEST_CLEAR_SIGN_CONTEXT: TypedDataClearSignContextSuccess = {\n type: \"success\",\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 1,\n signature:\n \"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3\",\n },\n trustedNamesAddresses: {},\n tokens: {},\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 },\n };\n\n const TEST_CHALLENGE = \"0x1234\";\n\n beforeEach(() => {\n vi.resetAllMocks();\n getWeb3ChecksFactoryMock.mockReturnValue({\n run: async () => ({ web3Check: null }),\n });\n buildFullContextFactoryMock.mockReturnValue({\n run: async () => ({\n clearSignContexts: [],\n clearSigningType: ClearSigningType.BASIC,\n }),\n });\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: { challenge: TEST_CHALLENGE } }),\n );\n });\n\n it(\"Build context with clear signing context not supported by the device\", async () => {\n // GIVEN\n const task = new BuildEIP712ContextTask(\n apiMock,\n contextMouleMock,\n parserMock,\n mockTransactionParser,\n mockTransactionMapper,\n TEST_DATA,\n \"44'/60'/0'/0/0\",\n createAppConfig(false),\n getWeb3ChecksFactoryMock,\n buildFullContextFactoryMock,\n );\n parserMock.parse.mockReturnValueOnce(\n Right({\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n }),\n );\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.11.0\" },\n deviceModelId: DeviceModelId.NANO_S,\n isSecureConnectionAllowed: false,\n });\n // WHEN\n const builtContext = await task.run();\n // THEN\n expect(builtContext).toStrictEqual({\n deviceModelId: DeviceModelId.NANO_S,\n derivationPath: \"44'/60'/0'/0/0\",\n web3Check: null,\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Nothing,\n calldatasContexts: {},\n });\n });\n\n it(\"Build context with no clear signing context\", async () => {\n // GIVEN\n const task = new BuildEIP712ContextTask(\n apiMock,\n contextMouleMock,\n parserMock,\n mockTransactionParser,\n mockTransactionMapper,\n TEST_DATA,\n \"44'/60'/0'/0/0\",\n createAppConfig(false),\n getWeb3ChecksFactoryMock,\n buildFullContextFactoryMock,\n );\n parserMock.parse.mockReturnValueOnce(\n Right({\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n }),\n );\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n contextMouleMock.getTypedDataFilters.mockResolvedValueOnce({\n type: \"error\",\n error: new Error(\"no filter\"),\n });\n // WHEN\n const builtContext = await task.run();\n // THEN\n expect(builtContext).toStrictEqual({\n deviceModelId: DeviceModelId.FLEX,\n derivationPath: \"44'/60'/0'/0/0\",\n web3Check: null,\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Nothing,\n calldatasContexts: {},\n });\n });\n\n it(\"Build context with clear signing context\", async () => {\n // GIVEN\n const expectedWeb3Check =\n \"web3Check\" as unknown as ClearSignContextSuccess<ClearSignContextType.WEB3_CHECK>;\n const task = new BuildEIP712ContextTask(\n apiMock,\n contextMouleMock,\n parserMock,\n mockTransactionParser,\n mockTransactionMapper,\n TEST_DATA,\n \"44'/60'/0'/0/0\",\n createAppConfig(false),\n getWeb3ChecksFactoryMock,\n buildFullContextFactoryMock,\n );\n getWeb3ChecksFactoryMock.mockReturnValueOnce({\n run: async () => ({ web3Check: expectedWeb3Check }),\n });\n parserMock.parse.mockReturnValueOnce(\n Right({\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n }),\n );\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n contextMouleMock.getTypedDataFilters.mockResolvedValueOnce(\n TEST_CLEAR_SIGN_CONTEXT,\n );\n // WHEN\n const builtContext = await task.run();\n // THEN\n expect(builtContext).toStrictEqual({\n deviceModelId: DeviceModelId.FLEX,\n derivationPath: \"44'/60'/0'/0/0\",\n web3Check: null,\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Just(TEST_CLEAR_SIGN_CONTEXT),\n calldatasContexts: {},\n });\n expect(parserMock.parse).toHaveBeenCalledWith(TEST_DATA);\n expect(contextMouleMock.getTypedDataFilters).toHaveBeenCalledWith({\n verifyingContract: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n chainId: 137,\n version: \"v2\",\n schema: TEST_DATA[\"types\"],\n challenge: TEST_CHALLENGE,\n deviceModelId: DeviceModelId.FLEX,\n fieldsValues: [\n {\n path: \"details.amount\",\n value: Uint8Array.from([0x12]),\n },\n {\n path: \"details.expiration\",\n value: Uint8Array.from([0x13]),\n },\n ],\n });\n });\n\n it(\"Build context with clear signing context and web3Check\", async () => {\n // GIVEN\n const expectedWeb3Check =\n \"web3Check\" as unknown as ClearSignContextSuccess<ClearSignContextType.WEB3_CHECK>;\n const task = new BuildEIP712ContextTask(\n apiMock,\n contextMouleMock,\n parserMock,\n mockTransactionParser,\n mockTransactionMapper,\n TEST_DATA,\n \"44'/60'/0'/0/0\",\n createAppConfig(true),\n getWeb3ChecksFactoryMock,\n buildFullContextFactoryMock,\n );\n getWeb3ChecksFactoryMock.mockReturnValueOnce({\n run: async () => ({ web3Check: expectedWeb3Check }),\n });\n parserMock.parse.mockReturnValueOnce(\n Right({\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n }),\n );\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n contextMouleMock.getTypedDataFilters.mockResolvedValueOnce(\n TEST_CLEAR_SIGN_CONTEXT,\n );\n // WHEN\n const builtContext = await task.run();\n // THEN\n expect(builtContext).toStrictEqual({\n deviceModelId: DeviceModelId.FLEX,\n derivationPath: \"44'/60'/0'/0/0\",\n web3Check: expectedWeb3Check,\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Just(TEST_CLEAR_SIGN_CONTEXT),\n calldatasContexts: {},\n });\n expect(getWeb3ChecksFactoryMock).toHaveBeenCalledWith(apiMock, {\n contextModule: contextMouleMock,\n derivationPath: \"44'/60'/0'/0/0\",\n data: TEST_DATA,\n });\n });\n\n it(\"Build context with clear signing context V1\", async () => {\n // GIVEN\n const task = new BuildEIP712ContextTask(\n apiMock,\n contextMouleMock,\n parserMock,\n mockTransactionParser,\n mockTransactionMapper,\n TEST_DATA,\n \"44'/60'/0'/0/0\",\n createAppConfig(false),\n getWeb3ChecksFactoryMock,\n buildFullContextFactoryMock,\n );\n parserMock.parse.mockReturnValueOnce(\n Right({\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n }),\n );\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.11.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n contextMouleMock.getTypedDataFilters.mockResolvedValueOnce(\n TEST_CLEAR_SIGN_CONTEXT,\n );\n // WHEN\n await task.run();\n // THEN\n expect(contextMouleMock.getTypedDataFilters).toHaveBeenCalledWith({\n verifyingContract: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n chainId: 137,\n version: \"v1\",\n schema: TEST_DATA[\"types\"],\n challenge: TEST_CHALLENGE,\n deviceModelId: DeviceModelId.FLEX,\n fieldsValues: [\n {\n path: \"details.amount\",\n value: Uint8Array.from([0x12]),\n },\n {\n path: \"details.expiration\",\n value: Uint8Array.from([0x13]),\n },\n ],\n });\n });\n\n it(\"Build context with clear signing context and calldatas\", async () => {\n // GIVEN\n const task = new BuildEIP712ContextTask(\n apiMock,\n contextMouleMock,\n parserMock,\n mockTransactionParser,\n mockTransactionMapper,\n TEST_DATA,\n \"44'/60'/0'/0/0\",\n createAppConfig(false),\n getWeb3ChecksFactoryMock,\n buildFullContextFactoryMock,\n );\n const subset = {\n chainId: 0x1234,\n data: \"0x6a76120200000000000000000000000023f8abfc2824c397ccb3da89ae772984107ddb99\",\n from: \"0x8ceb23fd6bc0add59e62ac25578270cff1b9f619\",\n selector: \"0x778899aa\",\n to: \"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\",\n value: 4200000000000000n,\n };\n const clearSignContext = {\n ...TEST_CLEAR_SIGN_CONTEXT,\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 },\n },\n };\n parserMock.parse.mockReturnValueOnce(\n Right({\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n }),\n );\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n contextMouleMock.getTypedDataFilters.mockResolvedValueOnce(\n clearSignContext,\n );\n buildFullContextFactoryMock.mockReturnValue({\n run: async () => ({\n clearSignContexts: [],\n clearSigningType: ClearSigningType.EIP7730,\n }),\n });\n // WHEN\n const builtContext = await task.run();\n // THEN\n expect(buildFullContextFactoryMock).toHaveBeenCalledWith(\n apiMock,\n expect.objectContaining({\n subset,\n }),\n );\n expect(builtContext).toStrictEqual({\n deviceModelId: DeviceModelId.FLEX,\n derivationPath: \"44'/60'/0'/0/0\",\n web3Check: null,\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Just(clearSignContext),\n calldatasContexts: {\n 0: [],\n },\n });\n });\n\n it(\"Should throw an error if parsing fails\", async () => {\n // GIVEN\n const task = new BuildEIP712ContextTask(\n apiMock,\n contextMouleMock,\n parserMock,\n mockTransactionParser,\n mockTransactionMapper,\n TEST_DATA,\n \"44'/60'/0'/0/0\",\n createAppConfig(false),\n getWeb3ChecksFactoryMock,\n buildFullContextFactoryMock,\n );\n parserMock.parse.mockReturnValueOnce(Left(new Error(\"Parsing error\")));\n // WHEN\n try {\n await task.run();\n } catch (e) {\n // THEN\n expect(e).toBeInstanceOf(Error);\n // @ts-expect-error\n expect(e.message).toBe(\"Parsing error\");\n }\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["TypedDataCalldataParamPresence", "CommandResultFactory", "DeviceModelId", "DeviceSessionStateType", "DeviceStatus", "Just", "Left", "Nothing", "Right", "ClearSigningType", "makeDeviceActionInternalApiMock", "PrimitiveType", "StructType", "TypedDataValueField", "TypedDataValueRoot", "BuildEIP712ContextTask", "apiMock", "contextMouleMock", "parserMock", "mockTransactionParser", "mockTransactionMapper", "getWeb3ChecksFactoryMock", "buildFullContextFactoryMock", "createAppConfig", "web3ChecksEnabled", "TEST_DATA", "TEST_TYPES", "TEST_DOMAIN_VALUES", "TEST_MESSAGE_VALUES", "TEST_CLEAR_SIGN_CONTEXT", "TEST_CHALLENGE", "task", "builtContext", "expectedWeb3Check", "subset", "clearSignContext", "e"]
4
+ "sourcesContent": ["import {\n ClearSignContextType,\n type ContextModule,\n type TypedDataClearSignContextSuccess,\n} from \"@ledgerhq/context-module\";\nimport { TypedDataCalldataParamPresence } from \"@ledgerhq/context-module\";\nimport {\n CommandResultFactory,\n DeviceModelId,\n DeviceSessionStateType,\n DeviceStatus,\n} from \"@ledgerhq/device-management-kit\";\nimport { Just, Left, Nothing, Right } from \"purify-ts\";\n\nimport type { GetConfigCommandResponse } from \"@api/app-binder/GetConfigCommandTypes\";\nimport { ClearSigningType } from \"@api/model/ClearSigningType\";\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\nimport { type TransactionMapperService } from \"@internal/transaction/service/mapper/TransactionMapperService\";\nimport { type TransactionParserService } from \"@internal/transaction/service/parser/TransactionParserService\";\nimport {\n PrimitiveType,\n StructType,\n TypedDataValueField,\n TypedDataValueRoot,\n} from \"@internal/typed-data/model/Types\";\n\nimport { BuildEIP712ContextTask } from \"./BuildEIP712ContextTask\";\n\ndescribe(\"BuildEIP712ContextTask\", () => {\n const apiMock = makeDeviceActionInternalApiMock();\n const contextModuleMock = {\n getFieldContext: vi.fn(),\n getContexts: vi.fn(),\n getTypedDataFilters: vi.fn(),\n };\n const parserMock = {\n parse: vi.fn(),\n };\n const mockTransactionParser: TransactionParserService = {\n extractValue: vi.fn(),\n } as unknown as TransactionParserService;\n const mockTransactionMapper: TransactionMapperService = {\n mapTransactionToSubset: vi.fn(),\n };\n const buildFullContextFactoryMock = vi.fn();\n\n function createAppConfig(\n web3ChecksEnabled: boolean,\n ): GetConfigCommandResponse {\n return {\n blindSigningEnabled: false,\n web3ChecksEnabled,\n web3ChecksOptIn: false,\n version: \"1.13.0\",\n };\n }\n\n const TEST_DATA = {\n domain: {\n name: \"Permit2\",\n chainId: 137,\n verifyingContract: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n },\n primaryType: \"PermitSingle\",\n message: {\n details: {\n token: \"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\",\n amount: \"69420000000000000000\",\n expiration: \"1718184249\",\n nonce: \"0\",\n },\n spender: \"0xec7be89e9d109e7e3fec59c222cf297125fefda2\",\n sigDeadline: \"1715594049\",\n },\n 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 { name: \"token\", type: \"address\" },\n { name: \"amount\", type: \"uint\" },\n { name: \"expiration\", type: \"uint\" },\n { name: \"nonce\", type: \"uint\" },\n ],\n },\n };\n\n const TEST_TYPES = {\n PermitSingle: {\n details: new StructType(\"PermitDetails\"),\n spender: new PrimitiveType(\"address\", \"address\", Nothing),\n sigDeadline: new PrimitiveType(\"uint256\", \"uint\", Just(32)),\n },\n PermitDetails: {\n token: new PrimitiveType(\"address\", \"address\", Nothing),\n amount: new PrimitiveType(\"uint160\", \"uint\", Just(20)),\n expiration: new PrimitiveType(\"uint48\", \"uint\", Just(6)),\n nonce: new PrimitiveType(\"uint48\", \"uint\", Just(6)),\n },\n };\n const TEST_DOMAIN_VALUES = [\n {\n path: \"\",\n type: \"\",\n value: new TypedDataValueRoot(\"EIP712Domain\"),\n },\n {\n path: \"chainId\",\n type: \"uint256\",\n value: new TypedDataValueField(Uint8Array.from([137])),\n },\n ];\n const TEST_MESSAGE_VALUES = [\n {\n path: \"\",\n type: \"\",\n value: new TypedDataValueRoot(\"PermitSingle\"),\n },\n {\n path: \"details.amount\",\n type: \"uint160\",\n value: new TypedDataValueField(Uint8Array.from([0x12])),\n },\n {\n path: \"details.expiration\",\n type: \"uint48\",\n value: new TypedDataValueField(Uint8Array.from([0x13])),\n },\n ];\n const TEST_CLEAR_SIGN_CONTEXT: TypedDataClearSignContextSuccess = {\n type: \"success\",\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 1,\n signature:\n \"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3\",\n },\n trustedNamesAddresses: {},\n tokens: {},\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 },\n };\n\n const TEST_CHALLENGE = \"0x1234\";\n const TEST_FROM = \"0x8ceb23fd6bc0add59e62ac25578270cff1b9f619\";\n\n beforeEach(() => {\n vi.resetAllMocks();\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: { challenge: TEST_CHALLENGE } }),\n );\n buildFullContextFactoryMock.mockReturnValue({\n run: async () => ({\n clearSignContexts: [],\n clearSigningType: ClearSigningType.BASIC,\n }),\n });\n });\n\n it(\"Build context with clear signing context not supported by the device\", async () => {\n // GIVEN\n const task = new BuildEIP712ContextTask(\n apiMock,\n contextModuleMock as unknown as ContextModule,\n parserMock,\n mockTransactionParser,\n mockTransactionMapper,\n TEST_DATA,\n \"44'/60'/0'/0/0\",\n createAppConfig(false),\n TEST_FROM,\n buildFullContextFactoryMock,\n );\n parserMock.parse.mockReturnValueOnce(\n Right({\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n }),\n );\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.11.0\" },\n deviceModelId: DeviceModelId.NANO_S,\n isSecureConnectionAllowed: false,\n });\n // WHEN\n const builtContext = await task.run();\n // THEN\n expect(builtContext).toStrictEqual({\n deviceModelId: DeviceModelId.NANO_S,\n derivationPath: \"44'/60'/0'/0/0\",\n transactionChecks: undefined,\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Nothing,\n calldatasContexts: {},\n });\n });\n\n it(\"Build context with no clear signing context\", async () => {\n // GIVEN\n const task = new BuildEIP712ContextTask(\n apiMock,\n contextModuleMock as unknown as ContextModule,\n parserMock,\n mockTransactionParser,\n mockTransactionMapper,\n TEST_DATA,\n \"44'/60'/0'/0/0\",\n createAppConfig(false),\n TEST_FROM,\n buildFullContextFactoryMock,\n );\n parserMock.parse.mockReturnValueOnce(\n Right({\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n }),\n );\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n contextModuleMock.getTypedDataFilters.mockResolvedValueOnce({\n type: ClearSignContextType.ERROR,\n error: new Error(\"no filter\"),\n });\n // WHEN\n const builtContext = await task.run();\n // THEN\n expect(builtContext).toStrictEqual({\n deviceModelId: DeviceModelId.FLEX,\n derivationPath: \"44'/60'/0'/0/0\",\n transactionChecks: undefined,\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Nothing,\n calldatasContexts: {},\n });\n });\n\n it(\"Build context with clear signing context\", async () => {\n // GIVEN\n const txCheckContext = {\n type: ClearSignContextType.TRANSACTION_CHECK,\n payload: \"web3Check\",\n };\n const task = new BuildEIP712ContextTask(\n apiMock,\n contextModuleMock as unknown as ContextModule,\n parserMock,\n mockTransactionParser,\n mockTransactionMapper,\n TEST_DATA,\n \"44'/60'/0'/0/0\",\n createAppConfig(false),\n TEST_FROM,\n buildFullContextFactoryMock,\n );\n contextModuleMock.getContexts.mockResolvedValueOnce([txCheckContext]);\n parserMock.parse.mockReturnValueOnce(\n Right({\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n }),\n );\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n contextModuleMock.getTypedDataFilters.mockResolvedValueOnce(\n TEST_CLEAR_SIGN_CONTEXT,\n );\n // WHEN\n const builtContext = await task.run();\n // THEN\n expect(builtContext).toStrictEqual({\n deviceModelId: DeviceModelId.FLEX,\n derivationPath: \"44'/60'/0'/0/0\",\n transactionChecks: undefined,\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Just(TEST_CLEAR_SIGN_CONTEXT),\n calldatasContexts: {},\n });\n expect(parserMock.parse).toHaveBeenCalledWith(TEST_DATA);\n expect(contextModuleMock.getTypedDataFilters).toHaveBeenCalledWith({\n verifyingContract: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n chainId: 137,\n version: \"v2\",\n schema: TEST_DATA[\"types\"],\n challenge: TEST_CHALLENGE,\n deviceModelId: DeviceModelId.FLEX,\n fieldsValues: [\n {\n path: \"details.amount\",\n value: Uint8Array.from([0x12]),\n },\n {\n path: \"details.expiration\",\n value: Uint8Array.from([0x13]),\n },\n ],\n });\n });\n\n it(\"Build context with clear signing context and transaction checks\", async () => {\n // GIVEN\n const txCheckContext = {\n type: ClearSignContextType.TRANSACTION_CHECK,\n payload: \"transactionCheck\",\n };\n const task = new BuildEIP712ContextTask(\n apiMock,\n contextModuleMock as unknown as ContextModule,\n parserMock,\n mockTransactionParser,\n mockTransactionMapper,\n TEST_DATA,\n \"44'/60'/0'/0/0\",\n createAppConfig(true),\n TEST_FROM,\n buildFullContextFactoryMock,\n );\n contextModuleMock.getContexts.mockResolvedValueOnce([txCheckContext]);\n parserMock.parse.mockReturnValueOnce(\n Right({\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n }),\n );\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n contextModuleMock.getTypedDataFilters.mockResolvedValueOnce(\n TEST_CLEAR_SIGN_CONTEXT,\n );\n // WHEN\n const builtContext = await task.run();\n // THEN\n expect(builtContext).toStrictEqual({\n deviceModelId: DeviceModelId.FLEX,\n derivationPath: \"44'/60'/0'/0/0\",\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Just(TEST_CLEAR_SIGN_CONTEXT),\n calldatasContexts: {},\n transactionChecks: txCheckContext,\n });\n });\n\n it(\"Build context with clear signing context V1\", async () => {\n // GIVEN\n const task = new BuildEIP712ContextTask(\n apiMock,\n contextModuleMock as unknown as ContextModule,\n parserMock,\n mockTransactionParser,\n mockTransactionMapper,\n TEST_DATA,\n \"44'/60'/0'/0/0\",\n createAppConfig(false),\n TEST_FROM,\n buildFullContextFactoryMock,\n );\n parserMock.parse.mockReturnValueOnce(\n Right({\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n }),\n );\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.11.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n contextModuleMock.getTypedDataFilters.mockResolvedValueOnce(\n TEST_CLEAR_SIGN_CONTEXT,\n );\n // WHEN\n await task.run();\n // THEN\n expect(contextModuleMock.getTypedDataFilters).toHaveBeenCalledWith({\n verifyingContract: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n chainId: 137,\n version: \"v1\",\n schema: TEST_DATA[\"types\"],\n challenge: TEST_CHALLENGE,\n deviceModelId: DeviceModelId.FLEX,\n fieldsValues: [\n {\n path: \"details.amount\",\n value: Uint8Array.from([0x12]),\n },\n {\n path: \"details.expiration\",\n value: Uint8Array.from([0x13]),\n },\n ],\n });\n });\n\n it(\"Build context with clear signing context and calldatas\", async () => {\n // GIVEN\n const task = new BuildEIP712ContextTask(\n apiMock,\n contextModuleMock as unknown as ContextModule,\n parserMock,\n mockTransactionParser,\n mockTransactionMapper,\n TEST_DATA,\n \"44'/60'/0'/0/0\",\n createAppConfig(false),\n TEST_FROM,\n buildFullContextFactoryMock,\n );\n const subset = {\n chainId: 0x1234,\n data: \"0x6a76120200000000000000000000000023f8abfc2824c397ccb3da89ae772984107ddb99\",\n from: TEST_FROM,\n selector: \"0x778899aa\",\n to: \"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619\",\n value: 4200000000000000n,\n };\n const clearSignContext = {\n ...TEST_CLEAR_SIGN_CONTEXT,\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 },\n },\n };\n parserMock.parse.mockReturnValueOnce(\n Right({\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n }),\n );\n apiMock.getDeviceSessionState.mockReturnValueOnce({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n installedApps: [],\n currentApp: { name: \"Ethereum\", version: \"1.12.0\" },\n deviceModelId: DeviceModelId.FLEX,\n isSecureConnectionAllowed: false,\n });\n contextModuleMock.getTypedDataFilters.mockResolvedValueOnce(\n clearSignContext,\n );\n buildFullContextFactoryMock.mockReturnValue({\n run: async () => ({\n clearSignContexts: [],\n clearSigningType: ClearSigningType.EIP7730,\n }),\n });\n // WHEN\n const builtContext = await task.run();\n // THEN\n expect(builtContext).toStrictEqual({\n deviceModelId: DeviceModelId.FLEX,\n derivationPath: \"44'/60'/0'/0/0\",\n transactionChecks: undefined,\n types: TEST_TYPES,\n domain: TEST_DOMAIN_VALUES,\n message: TEST_MESSAGE_VALUES,\n clearSignContext: Just(clearSignContext),\n calldatasContexts: {\n 0: [],\n },\n });\n });\n\n it(\"Should throw an error if parsing fails\", async () => {\n // GIVEN\n const task = new BuildEIP712ContextTask(\n apiMock,\n contextModuleMock as unknown as ContextModule,\n parserMock,\n mockTransactionParser,\n mockTransactionMapper,\n TEST_DATA,\n \"44'/60'/0'/0/0\",\n createAppConfig(false),\n TEST_FROM,\n buildFullContextFactoryMock,\n );\n parserMock.parse.mockReturnValueOnce(Left(new Error(\"Parsing error\")));\n // WHEN\n try {\n await task.run();\n } catch (e) {\n // THEN\n expect(e).toBeInstanceOf(Error);\n // @ts-expect-error\n expect(e.message).toBe(\"Parsing error\");\n }\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["ClearSignContextType", "TypedDataCalldataParamPresence", "CommandResultFactory", "DeviceModelId", "DeviceSessionStateType", "DeviceStatus", "Just", "Left", "Nothing", "Right", "ClearSigningType", "makeDeviceActionInternalApiMock", "PrimitiveType", "StructType", "TypedDataValueField", "TypedDataValueRoot", "BuildEIP712ContextTask", "apiMock", "contextModuleMock", "parserMock", "mockTransactionParser", "mockTransactionMapper", "buildFullContextFactoryMock", "createAppConfig", "web3ChecksEnabled", "TEST_DATA", "TEST_TYPES", "TEST_DOMAIN_VALUES", "TEST_MESSAGE_VALUES", "TEST_CLEAR_SIGN_CONTEXT", "TEST_CHALLENGE", "TEST_FROM", "task", "builtContext", "txCheckContext", "subset", "clearSignContext", "e"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{ClearSignContextType as a}from"@ledgerhq/context-module";import{CommandResultFactory as p,DeviceModelId as n}from"@ledgerhq/device-management-kit";import{makeDeviceActionInternalApiMock as v}from"../../app-binder/device-action/__test-utils__/makeInternalApi";import{BuildSafeAddressContextTask as l}from"./BuildSafeAddressContextTask";describe("BuildSafeAddressContextTask",()=>{const o=v(),e={getContexts:vi.fn(),getFieldContext:vi.fn(),getTypedDataFilters:vi.fn(),getWeb3Checks:vi.fn(),getSolanaContext:vi.fn()},S="0x12345678",d="0x1234567890123456789012345678901234567890",r=1,i=p({data:{challenge:S}}),h=p({data:void 0,error:{}}),C={type:a.SAFE,payload:"safe_payload"},x={type:a.SIGNER,payload:"signer_payload"};beforeEach(()=>{vi.resetAllMocks()}),describe("run",()=>{it("should successfully build safe address contexts with valid SAFE and SIGNER contexts",async()=>{const t={contextModule:e,safeContractAddress:d,options:{chainId:r},deviceModelId:n.FLEX};o.sendCommand.mockResolvedValue(i),e.getContexts=vi.fn().mockResolvedValue([C,x]);const c=await new l(o,t).run();expect(c).toEqual({clearSignContexts:[C,x]}),expect(o.sendCommand).toHaveBeenCalledTimes(1),expect(e.getContexts).toHaveBeenCalledWith({safeContractAddress:d,chainId:r,deviceModelId:n.FLEX,challenge:S},[a.SAFE,a.SIGNER])}),it("should include certificates when provided in contexts",async()=>{const t={type:a.SAFE,payload:"safe_payload",certificate:{keyUsageNumber:1,payload:new Uint8Array([1,2,3])}},s={type:a.SIGNER,payload:"signer_payload",certificate:{keyUsageNumber:2,payload:new Uint8Array([4,5,6])}},c={contextModule:e,safeContractAddress:d,options:{chainId:r},deviceModelId:n.FLEX};o.sendCommand.mockResolvedValue(i),e.getContexts=vi.fn().mockResolvedValue([t,s]);const g=await new l(o,c).run();expect(g).toEqual({clearSignContexts:[t,s]})})}),describe("error handling",()=>{it("should throw error when GetChallengeCommand fails",async()=>{const t={contextModule:e,safeContractAddress:d,options:{chainId:r},deviceModelId:n.FLEX};o.sendCommand.mockResolvedValue(h);const s=new l(o,t);await expect(s.run()).rejects.toThrow("Failed to get challenge")}),it("should throw error when context contains ERROR type",async()=>{const t={type:a.ERROR,error:new Error("Context error")},s={contextModule:e,safeContractAddress:d,options:{chainId:r},deviceModelId:n.FLEX};o.sendCommand.mockResolvedValue(i),e.getContexts=vi.fn().mockResolvedValue([t,x]);const c=new l(o,s);await expect(c.run()).rejects.toThrow("Context error")}),it("should throw error when only one context is returned",async()=>{const t={contextModule:e,safeContractAddress:d,options:{chainId:r},deviceModelId:n.FLEX};o.sendCommand.mockResolvedValue(i),e.getContexts=vi.fn().mockResolvedValue([C]);const s=new l(o,t);await expect(s.run()).rejects.toThrow("Invalid safe address contexts")}),it("should throw error when no contexts are returned",async()=>{const t={contextModule:e,safeContractAddress:d,options:{chainId:r},deviceModelId:n.FLEX};o.sendCommand.mockResolvedValue(i),e.getContexts=vi.fn().mockResolvedValue([]);const s=new l(o,t);await expect(s.run()).rejects.toThrow("Invalid safe address contexts")}),it("should throw error when more than two contexts are returned",async()=>{const t={type:a.TOKEN,payload:"extra_payload"},s={contextModule:e,safeContractAddress:d,options:{chainId:r},deviceModelId:n.FLEX};o.sendCommand.mockResolvedValue(i),e.getContexts=vi.fn().mockResolvedValue([C,x,t]);const c=new l(o,s);await expect(c.run()).rejects.toThrow("Invalid safe address contexts")}),it("should throw error when SAFE context is missing",async()=>{const t={contextModule:e,safeContractAddress:d,options:{chainId:r},deviceModelId:n.FLEX};o.sendCommand.mockResolvedValue(i),e.getContexts=vi.fn().mockResolvedValue([x,x]);const s=new l(o,t);await expect(s.run()).rejects.toThrow("Invalid safe address contexts")}),it("should throw error when SIGNER context is missing",async()=>{const t={contextModule:e,safeContractAddress:d,options:{chainId:r},deviceModelId:n.FLEX};o.sendCommand.mockResolvedValue(i),e.getContexts=vi.fn().mockResolvedValue([C,C]);const s=new l(o,t);await expect(s.run()).rejects.toThrow("Invalid safe address contexts")}),it("should throw error when contexts are of wrong types",async()=>{const t={type:a.TOKEN,payload:"token_payload"},s={type:a.NFT,payload:"nft_payload"},c={contextModule:e,safeContractAddress:d,options:{chainId:r},deviceModelId:n.FLEX};o.sendCommand.mockResolvedValue(i),e.getContexts=vi.fn().mockResolvedValue([t,s]);const u=new l(o,c);await expect(u.run()).rejects.toThrow("Invalid safe address contexts")}),it("should throw error with multiple ERROR contexts",async()=>{const t={type:a.ERROR,error:new Error("First error")},s={type:a.ERROR,error:new Error("Second error")},c={contextModule:e,safeContractAddress:d,options:{chainId:r},deviceModelId:n.FLEX};o.sendCommand.mockResolvedValue(i),e.getContexts=vi.fn().mockResolvedValue([t,s]);const u=new l(o,c);await expect(u.run()).rejects.toThrow("First error")})}),describe("device model variants",()=>{it.each([[n.NANO_S,"Nano S"],[n.NANO_SP,"Nano S Plus"],[n.NANO_X,"Nano X"],[n.FLEX,"Flex"],[n.STAX,"Stax"]])("should successfully build contexts for %s device",async(t,s)=>{const c={contextModule:e,safeContractAddress:d,options:{chainId:r},deviceModelId:t};o.sendCommand.mockResolvedValue(i),e.getContexts=vi.fn().mockResolvedValue([C,x]);const g=await new l(o,c).run();expect(g).toEqual({clearSignContexts:[C,x]}),expect(e.getContexts).toHaveBeenCalledWith(expect.objectContaining({deviceModelId:t}),[a.SAFE,a.SIGNER])})}),describe("challenge handling",()=>{it("should pass the correct challenge to contextModule",async()=>{const t="0xabcdef12",s={contextModule:e,safeContractAddress:d,options:{chainId:r},deviceModelId:n.FLEX};o.sendCommand.mockResolvedValue(p({data:{challenge:t}})),e.getContexts=vi.fn().mockResolvedValue([C,x]),await new l(o,s).run(),expect(e.getContexts).toHaveBeenCalledWith(expect.objectContaining({challenge:t}),[a.SAFE,a.SIGNER])})})});
1
+ import{ClearSignContextType as a}from"@ledgerhq/context-module";import{CommandResultFactory as k,DeviceModelId as s}from"@ledgerhq/device-management-kit";import{makeDeviceActionInternalApiMock as h}from"../../app-binder/device-action/__test-utils__/makeInternalApi";import{BuildSafeAddressContextTask as l}from"./BuildSafeAddressContextTask";describe("BuildSafeAddressContextTask",()=>{const o=h(),e={getContexts:vi.fn()},p="0x12345678",d="0x1234567890123456789012345678901234567890",r=1,i=k({data:{challenge:p}}),S=k({data:void 0,error:{}}),u={type:a.SAFE,payload:"safe_payload"},C={type:a.SIGNER,payload:"signer_payload"};beforeEach(()=>{vi.resetAllMocks()}),describe("run",()=>{it("should successfully build safe address contexts with valid SAFE and SIGNER contexts",async()=>{const t={contextModule:e,safeContractAddress:d,options:{chainId:r},deviceModelId:s.FLEX};o.sendCommand.mockResolvedValue(i),e.getContexts=vi.fn().mockResolvedValue([u,C]);const c=await new l(o,t).run();expect(c).toEqual({clearSignContexts:[u,C]}),expect(o.sendCommand).toHaveBeenCalledTimes(1),expect(e.getContexts).toHaveBeenCalledWith({safeContractAddress:d,chainId:r,deviceModelId:s.FLEX,challenge:p},[a.SAFE,a.SIGNER])}),it("should include certificates when provided in contexts",async()=>{const t={type:a.SAFE,payload:"safe_payload",certificate:{keyUsageNumber:1,payload:new Uint8Array([1,2,3])}},n={type:a.SIGNER,payload:"signer_payload",certificate:{keyUsageNumber:2,payload:new Uint8Array([4,5,6])}},c={contextModule:e,safeContractAddress:d,options:{chainId:r},deviceModelId:s.FLEX};o.sendCommand.mockResolvedValue(i),e.getContexts=vi.fn().mockResolvedValue([t,n]);const g=await new l(o,c).run();expect(g).toEqual({clearSignContexts:[t,n]})})}),describe("error handling",()=>{it("should throw error when GetChallengeCommand fails",async()=>{const t={contextModule:e,safeContractAddress:d,options:{chainId:r},deviceModelId:s.FLEX};o.sendCommand.mockResolvedValue(S);const n=new l(o,t);await expect(n.run()).rejects.toThrow("Failed to get challenge")}),it("should throw error when context contains ERROR type",async()=>{const t={type:a.ERROR,error:new Error("Context error")},n={contextModule:e,safeContractAddress:d,options:{chainId:r},deviceModelId:s.FLEX};o.sendCommand.mockResolvedValue(i),e.getContexts=vi.fn().mockResolvedValue([t,C]);const c=new l(o,n);await expect(c.run()).rejects.toThrow("Context error")}),it("should throw error when only one context is returned",async()=>{const t={contextModule:e,safeContractAddress:d,options:{chainId:r},deviceModelId:s.FLEX};o.sendCommand.mockResolvedValue(i),e.getContexts=vi.fn().mockResolvedValue([u]);const n=new l(o,t);await expect(n.run()).rejects.toThrow("Invalid safe address contexts")}),it("should throw error when no contexts are returned",async()=>{const t={contextModule:e,safeContractAddress:d,options:{chainId:r},deviceModelId:s.FLEX};o.sendCommand.mockResolvedValue(i),e.getContexts=vi.fn().mockResolvedValue([]);const n=new l(o,t);await expect(n.run()).rejects.toThrow("Invalid safe address contexts")}),it("should throw error when more than two contexts are returned",async()=>{const t={type:a.TOKEN,payload:"extra_payload"},n={contextModule:e,safeContractAddress:d,options:{chainId:r},deviceModelId:s.FLEX};o.sendCommand.mockResolvedValue(i),e.getContexts=vi.fn().mockResolvedValue([u,C,t]);const c=new l(o,n);await expect(c.run()).rejects.toThrow("Invalid safe address contexts")}),it("should throw error when SAFE context is missing",async()=>{const t={contextModule:e,safeContractAddress:d,options:{chainId:r},deviceModelId:s.FLEX};o.sendCommand.mockResolvedValue(i),e.getContexts=vi.fn().mockResolvedValue([C,C]);const n=new l(o,t);await expect(n.run()).rejects.toThrow("Invalid safe address contexts")}),it("should throw error when SIGNER context is missing",async()=>{const t={contextModule:e,safeContractAddress:d,options:{chainId:r},deviceModelId:s.FLEX};o.sendCommand.mockResolvedValue(i),e.getContexts=vi.fn().mockResolvedValue([u,u]);const n=new l(o,t);await expect(n.run()).rejects.toThrow("Invalid safe address contexts")}),it("should throw error when contexts are of wrong types",async()=>{const t={type:a.TOKEN,payload:"token_payload"},n={type:a.NFT,payload:"nft_payload"},c={contextModule:e,safeContractAddress:d,options:{chainId:r},deviceModelId:s.FLEX};o.sendCommand.mockResolvedValue(i),e.getContexts=vi.fn().mockResolvedValue([t,n]);const x=new l(o,c);await expect(x.run()).rejects.toThrow("Invalid safe address contexts")}),it("should throw error with multiple ERROR contexts",async()=>{const t={type:a.ERROR,error:new Error("First error")},n={type:a.ERROR,error:new Error("Second error")},c={contextModule:e,safeContractAddress:d,options:{chainId:r},deviceModelId:s.FLEX};o.sendCommand.mockResolvedValue(i),e.getContexts=vi.fn().mockResolvedValue([t,n]);const x=new l(o,c);await expect(x.run()).rejects.toThrow("First error")})}),describe("device model variants",()=>{it.each([[s.NANO_S,"Nano S"],[s.NANO_SP,"Nano S Plus"],[s.NANO_X,"Nano X"],[s.FLEX,"Flex"],[s.STAX,"Stax"]])("should successfully build contexts for %s device",async(t,n)=>{const c={contextModule:e,safeContractAddress:d,options:{chainId:r},deviceModelId:t};o.sendCommand.mockResolvedValue(i),e.getContexts=vi.fn().mockResolvedValue([u,C]);const g=await new l(o,c).run();expect(g).toEqual({clearSignContexts:[u,C]}),expect(e.getContexts).toHaveBeenCalledWith(expect.objectContaining({deviceModelId:t}),[a.SAFE,a.SIGNER])})}),describe("challenge handling",()=>{it("should pass the correct challenge to contextModule",async()=>{const t="0xabcdef12",n={contextModule:e,safeContractAddress:d,options:{chainId:r},deviceModelId:s.FLEX};o.sendCommand.mockResolvedValue(k({data:{challenge:t}})),e.getContexts=vi.fn().mockResolvedValue([u,C]),await new l(o,n).run(),expect(e.getContexts).toHaveBeenCalledWith(expect.objectContaining({challenge:t}),[a.SAFE,a.SIGNER])})})});
2
2
  //# sourceMappingURL=BuildSafeAddressContextTask.test.js.map