@ledgerhq/device-signer-kit-ethereum 1.7.0 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (313) hide show
  1. package/README.md +59 -1
  2. package/lib/cjs/api/SignerEth.js +1 -1
  3. package/lib/cjs/api/SignerEth.js.map +1 -1
  4. package/lib/cjs/api/SignerEthBuilder.test.js +1 -1
  5. package/lib/cjs/api/SignerEthBuilder.test.js.map +2 -2
  6. package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js +1 -1
  7. package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js.map +2 -2
  8. package/lib/cjs/api/app-binder/SignTypedDataDeviceActionTypes.js +1 -1
  9. package/lib/cjs/api/app-binder/SignTypedDataDeviceActionTypes.js.map +2 -2
  10. package/lib/cjs/api/app-binder/VerifySafeAddressDeviceActionTypes.js +2 -0
  11. package/lib/cjs/api/app-binder/VerifySafeAddressDeviceActionTypes.js.map +7 -0
  12. package/lib/cjs/api/model/SafeAddressOptions.js +2 -0
  13. package/lib/cjs/api/model/SafeAddressOptions.js.map +7 -0
  14. package/lib/cjs/internal/DefaultSignerEth.js +1 -1
  15. package/lib/cjs/internal/DefaultSignerEth.js.map +3 -3
  16. package/lib/cjs/internal/app-binder/EthAppBinder.js +1 -1
  17. package/lib/cjs/internal/app-binder/EthAppBinder.js.map +3 -3
  18. package/lib/cjs/internal/app-binder/EthAppBinder.test.js +1 -1
  19. package/lib/cjs/internal/app-binder/EthAppBinder.test.js.map +2 -2
  20. package/lib/cjs/internal/app-binder/command/ProvideSafeAccountCommand.js +2 -0
  21. package/lib/cjs/internal/app-binder/command/ProvideSafeAccountCommand.js.map +7 -0
  22. package/lib/cjs/internal/app-binder/command/ProvideSafeAccountCommand.test.js +2 -0
  23. package/lib/cjs/internal/app-binder/command/ProvideSafeAccountCommand.test.js.map +7 -0
  24. package/lib/cjs/internal/app-binder/command/SendEIP712FilteringCommand.js +1 -1
  25. package/lib/cjs/internal/app-binder/command/SendEIP712FilteringCommand.js.map +3 -3
  26. package/lib/cjs/internal/app-binder/command/SendEIP712FilteringCommand.test.js +1 -1
  27. package/lib/cjs/internal/app-binder/command/SendEIP712FilteringCommand.test.js.map +3 -3
  28. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js +1 -1
  29. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js.map +3 -3
  30. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js +1 -1
  31. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js.map +3 -3
  32. package/lib/cjs/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.js +1 -1
  33. package/lib/cjs/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.js.map +2 -2
  34. package/lib/cjs/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.test.js +1 -1
  35. package/lib/cjs/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.test.js.map +3 -3
  36. package/lib/cjs/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.js +2 -0
  37. package/lib/cjs/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.js.map +7 -0
  38. package/lib/cjs/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.test.js +2 -0
  39. package/lib/cjs/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.test.js.map +7 -0
  40. package/lib/cjs/internal/app-binder/device-action/__test-utils__/testDeviceActionUntilStep.js +2 -0
  41. package/lib/cjs/internal/app-binder/device-action/__test-utils__/testDeviceActionUntilStep.js.map +7 -0
  42. package/lib/cjs/internal/app-binder/task/BuildBaseContexts.js +2 -0
  43. package/lib/cjs/internal/app-binder/task/BuildBaseContexts.js.map +7 -0
  44. package/lib/cjs/internal/app-binder/task/BuildBaseContexts.test.js +2 -0
  45. package/lib/cjs/internal/app-binder/task/BuildBaseContexts.test.js.map +7 -0
  46. package/lib/cjs/internal/app-binder/task/BuildEIP712ContextTask.js +1 -1
  47. package/lib/cjs/internal/app-binder/task/BuildEIP712ContextTask.js.map +3 -3
  48. package/lib/cjs/internal/app-binder/task/BuildEIP712ContextTask.test.js +1 -1
  49. package/lib/cjs/internal/app-binder/task/BuildEIP712ContextTask.test.js.map +3 -3
  50. package/lib/cjs/internal/app-binder/task/BuildFullContextsTask.js +2 -0
  51. package/lib/cjs/internal/app-binder/task/BuildFullContextsTask.js.map +7 -0
  52. package/lib/cjs/internal/app-binder/task/BuildFullContextsTask.test.js +2 -0
  53. package/lib/cjs/internal/app-binder/task/BuildFullContextsTask.test.js.map +7 -0
  54. package/lib/cjs/internal/app-binder/task/BuildSafeAddressContextTask.js +2 -0
  55. package/lib/cjs/internal/app-binder/task/BuildSafeAddressContextTask.js.map +7 -0
  56. package/lib/cjs/internal/app-binder/task/BuildSafeAddressContextTask.test.js +2 -0
  57. package/lib/cjs/internal/app-binder/task/BuildSafeAddressContextTask.test.js.map +7 -0
  58. package/lib/cjs/internal/app-binder/task/BuildSubcontextsTask.js +2 -0
  59. package/lib/cjs/internal/app-binder/task/BuildSubcontextsTask.js.map +7 -0
  60. package/lib/cjs/internal/app-binder/task/BuildSubcontextsTask.test.js +2 -0
  61. package/lib/cjs/internal/app-binder/task/BuildSubcontextsTask.test.js.map +7 -0
  62. package/lib/cjs/internal/app-binder/task/ParseNestedTransactionTask.js +2 -0
  63. package/lib/cjs/internal/app-binder/task/ParseNestedTransactionTask.js.map +7 -0
  64. package/lib/cjs/internal/app-binder/task/ParseNestedTransactionTask.test.js +2 -0
  65. package/lib/cjs/internal/app-binder/task/ParseNestedTransactionTask.test.js.map +7 -0
  66. package/lib/cjs/internal/app-binder/task/ParseTransactionTask.js +2 -0
  67. package/lib/cjs/internal/app-binder/task/ParseTransactionTask.js.map +7 -0
  68. package/lib/cjs/internal/app-binder/task/ParseTransactionTask.test.js +2 -0
  69. package/lib/cjs/internal/app-binder/task/ParseTransactionTask.test.js.map +7 -0
  70. package/lib/cjs/internal/app-binder/task/ProvideContextTask.js +2 -0
  71. package/lib/cjs/internal/app-binder/task/ProvideContextTask.js.map +7 -0
  72. package/lib/cjs/internal/app-binder/task/ProvideContextTask.test.js +2 -0
  73. package/lib/cjs/internal/app-binder/task/ProvideContextTask.test.js.map +7 -0
  74. package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.js +1 -1
  75. package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.js.map +3 -3
  76. package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.test.js +1 -1
  77. package/lib/cjs/internal/app-binder/task/ProvideEIP712ContextTask.test.js.map +3 -3
  78. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextsTask.js +2 -0
  79. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextsTask.js.map +7 -0
  80. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextsTask.test.js +2 -0
  81. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextsTask.test.js.map +7 -0
  82. package/lib/cjs/internal/di.js +1 -1
  83. package/lib/cjs/internal/di.js.map +3 -3
  84. package/lib/cjs/internal/safe/di/safeModule.js +2 -0
  85. package/lib/cjs/internal/safe/di/safeModule.js.map +7 -0
  86. package/lib/cjs/internal/safe/di/safeModule.test.js +2 -0
  87. package/lib/cjs/internal/safe/di/safeModule.test.js.map +7 -0
  88. package/lib/cjs/internal/safe/di/safeTypes.js +2 -0
  89. package/lib/cjs/internal/safe/di/safeTypes.js.map +7 -0
  90. package/lib/cjs/internal/safe/use-case/VerifySafeAddressUseCase.js +2 -0
  91. package/lib/cjs/internal/safe/use-case/VerifySafeAddressUseCase.js.map +7 -0
  92. package/lib/cjs/internal/safe/use-case/VerifySafeAddressUseCase.test.js +2 -0
  93. package/lib/cjs/internal/safe/use-case/VerifySafeAddressUseCase.test.js.map +7 -0
  94. package/lib/cjs/internal/transaction/service/parser/TransactionParserService.js +1 -1
  95. package/lib/cjs/internal/transaction/service/parser/TransactionParserService.js.map +2 -2
  96. package/lib/cjs/internal/transaction/service/parser/TransactionParserService.test.js +1 -1
  97. package/lib/cjs/internal/transaction/service/parser/TransactionParserService.test.js.map +2 -2
  98. package/lib/cjs/package.json +2 -2
  99. package/lib/esm/api/SignerEthBuilder.test.js +1 -1
  100. package/lib/esm/api/SignerEthBuilder.test.js.map +2 -2
  101. package/lib/esm/api/app-binder/SignTransactionDeviceActionTypes.js +1 -1
  102. package/lib/esm/api/app-binder/SignTransactionDeviceActionTypes.js.map +2 -2
  103. package/lib/esm/api/app-binder/SignTypedDataDeviceActionTypes.js +1 -1
  104. package/lib/esm/api/app-binder/SignTypedDataDeviceActionTypes.js.map +2 -2
  105. package/lib/esm/api/app-binder/VerifySafeAddressDeviceActionTypes.js +2 -0
  106. package/lib/esm/api/app-binder/VerifySafeAddressDeviceActionTypes.js.map +7 -0
  107. package/lib/esm/api/model/SafeAddressOptions.js +1 -0
  108. package/lib/esm/api/model/SafeAddressOptions.js.map +7 -0
  109. package/lib/esm/internal/DefaultSignerEth.js +1 -1
  110. package/lib/esm/internal/DefaultSignerEth.js.map +3 -3
  111. package/lib/esm/internal/app-binder/EthAppBinder.js +1 -1
  112. package/lib/esm/internal/app-binder/EthAppBinder.js.map +3 -3
  113. package/lib/esm/internal/app-binder/EthAppBinder.test.js +1 -1
  114. package/lib/esm/internal/app-binder/EthAppBinder.test.js.map +2 -2
  115. package/lib/esm/internal/app-binder/command/ProvideSafeAccountCommand.js +2 -0
  116. package/lib/esm/internal/app-binder/command/ProvideSafeAccountCommand.js.map +7 -0
  117. package/lib/esm/internal/app-binder/command/ProvideSafeAccountCommand.test.js +2 -0
  118. package/lib/esm/internal/app-binder/command/ProvideSafeAccountCommand.test.js.map +7 -0
  119. package/lib/esm/internal/app-binder/command/SendEIP712FilteringCommand.js +1 -1
  120. package/lib/esm/internal/app-binder/command/SendEIP712FilteringCommand.js.map +3 -3
  121. package/lib/esm/internal/app-binder/command/SendEIP712FilteringCommand.test.js +1 -1
  122. package/lib/esm/internal/app-binder/command/SendEIP712FilteringCommand.test.js.map +3 -3
  123. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js +1 -1
  124. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.js.map +3 -3
  125. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js +1 -1
  126. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js.map +3 -3
  127. package/lib/esm/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.js +1 -1
  128. package/lib/esm/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.js.map +2 -2
  129. package/lib/esm/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.test.js +1 -1
  130. package/lib/esm/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.test.js.map +3 -3
  131. package/lib/esm/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.js +2 -0
  132. package/lib/esm/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.js.map +7 -0
  133. package/lib/esm/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.test.js +2 -0
  134. package/lib/esm/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.test.js.map +7 -0
  135. package/lib/esm/internal/app-binder/device-action/__test-utils__/testDeviceActionUntilStep.js +2 -0
  136. package/lib/esm/internal/app-binder/device-action/__test-utils__/testDeviceActionUntilStep.js.map +7 -0
  137. package/lib/esm/internal/app-binder/task/BuildBaseContexts.js +2 -0
  138. package/lib/esm/internal/app-binder/task/BuildBaseContexts.js.map +7 -0
  139. package/lib/esm/internal/app-binder/task/BuildBaseContexts.test.js +2 -0
  140. package/lib/esm/internal/app-binder/task/BuildBaseContexts.test.js.map +7 -0
  141. package/lib/esm/internal/app-binder/task/BuildEIP712ContextTask.js +1 -1
  142. package/lib/esm/internal/app-binder/task/BuildEIP712ContextTask.js.map +3 -3
  143. package/lib/esm/internal/app-binder/task/BuildEIP712ContextTask.test.js +1 -1
  144. package/lib/esm/internal/app-binder/task/BuildEIP712ContextTask.test.js.map +3 -3
  145. package/lib/esm/internal/app-binder/task/BuildFullContextsTask.js +2 -0
  146. package/lib/esm/internal/app-binder/task/BuildFullContextsTask.js.map +7 -0
  147. package/lib/esm/internal/app-binder/task/BuildFullContextsTask.test.js +2 -0
  148. package/lib/esm/internal/app-binder/task/BuildFullContextsTask.test.js.map +7 -0
  149. package/lib/esm/internal/app-binder/task/BuildSafeAddressContextTask.js +2 -0
  150. package/lib/esm/internal/app-binder/task/BuildSafeAddressContextTask.js.map +7 -0
  151. package/lib/esm/internal/app-binder/task/BuildSafeAddressContextTask.test.js +2 -0
  152. package/lib/esm/internal/app-binder/task/BuildSafeAddressContextTask.test.js.map +7 -0
  153. package/lib/esm/internal/app-binder/task/BuildSubcontextsTask.js +2 -0
  154. package/lib/esm/internal/app-binder/task/BuildSubcontextsTask.js.map +7 -0
  155. package/lib/esm/internal/app-binder/task/BuildSubcontextsTask.test.js +2 -0
  156. package/lib/esm/internal/app-binder/task/BuildSubcontextsTask.test.js.map +7 -0
  157. package/lib/esm/internal/app-binder/task/ParseNestedTransactionTask.js +2 -0
  158. package/lib/esm/internal/app-binder/task/ParseNestedTransactionTask.js.map +7 -0
  159. package/lib/esm/internal/app-binder/task/ParseNestedTransactionTask.test.js +2 -0
  160. package/lib/esm/internal/app-binder/task/ParseNestedTransactionTask.test.js.map +7 -0
  161. package/lib/esm/internal/app-binder/task/ParseTransactionTask.js +2 -0
  162. package/lib/esm/internal/app-binder/task/ParseTransactionTask.js.map +7 -0
  163. package/lib/esm/internal/app-binder/task/ParseTransactionTask.test.js +2 -0
  164. package/lib/esm/internal/app-binder/task/ParseTransactionTask.test.js.map +7 -0
  165. package/lib/esm/internal/app-binder/task/ProvideContextTask.js +2 -0
  166. package/lib/esm/internal/app-binder/task/ProvideContextTask.js.map +7 -0
  167. package/lib/esm/internal/app-binder/task/ProvideContextTask.test.js +2 -0
  168. package/lib/esm/internal/app-binder/task/ProvideContextTask.test.js.map +7 -0
  169. package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.js +1 -1
  170. package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.js.map +3 -3
  171. package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.test.js +1 -1
  172. package/lib/esm/internal/app-binder/task/ProvideEIP712ContextTask.test.js.map +3 -3
  173. package/lib/esm/internal/app-binder/task/ProvideTransactionContextsTask.js +2 -0
  174. package/lib/esm/internal/app-binder/task/ProvideTransactionContextsTask.js.map +7 -0
  175. package/lib/esm/internal/app-binder/task/ProvideTransactionContextsTask.test.js +2 -0
  176. package/lib/esm/internal/app-binder/task/ProvideTransactionContextsTask.test.js.map +7 -0
  177. package/lib/esm/internal/di.js +1 -1
  178. package/lib/esm/internal/di.js.map +3 -3
  179. package/lib/esm/internal/safe/di/safeModule.js +2 -0
  180. package/lib/esm/internal/safe/di/safeModule.js.map +7 -0
  181. package/lib/esm/internal/safe/di/safeModule.test.js +2 -0
  182. package/lib/esm/internal/safe/di/safeModule.test.js.map +7 -0
  183. package/lib/esm/internal/safe/di/safeTypes.js +2 -0
  184. package/lib/esm/internal/safe/di/safeTypes.js.map +7 -0
  185. package/lib/esm/internal/safe/use-case/VerifySafeAddressUseCase.js +2 -0
  186. package/lib/esm/internal/safe/use-case/VerifySafeAddressUseCase.js.map +7 -0
  187. package/lib/esm/internal/safe/use-case/VerifySafeAddressUseCase.test.js +2 -0
  188. package/lib/esm/internal/safe/use-case/VerifySafeAddressUseCase.test.js.map +7 -0
  189. package/lib/esm/internal/transaction/service/parser/TransactionParserService.js +1 -1
  190. package/lib/esm/internal/transaction/service/parser/TransactionParserService.js.map +2 -2
  191. package/lib/esm/internal/transaction/service/parser/TransactionParserService.test.js +1 -1
  192. package/lib/esm/internal/transaction/service/parser/TransactionParserService.test.js.map +2 -2
  193. package/lib/esm/package.json +2 -2
  194. package/lib/types/api/SignerEth.d.ts +3 -0
  195. package/lib/types/api/SignerEth.d.ts.map +1 -1
  196. package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts +9 -8
  197. package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts.map +1 -1
  198. package/lib/types/api/app-binder/SignTypedDataDeviceActionTypes.d.ts +4 -0
  199. package/lib/types/api/app-binder/SignTypedDataDeviceActionTypes.d.ts.map +1 -1
  200. package/lib/types/api/app-binder/VerifySafeAddressDeviceActionTypes.d.ts +30 -0
  201. package/lib/types/api/app-binder/VerifySafeAddressDeviceActionTypes.d.ts.map +1 -0
  202. package/lib/types/api/model/SafeAddressOptions.d.ts +5 -0
  203. package/lib/types/api/model/SafeAddressOptions.d.ts.map +1 -0
  204. package/lib/types/internal/DefaultSignerEth.d.ts +3 -0
  205. package/lib/types/internal/DefaultSignerEth.d.ts.map +1 -1
  206. package/lib/types/internal/app-binder/EthAppBinder.d.ts +6 -0
  207. package/lib/types/internal/app-binder/EthAppBinder.d.ts.map +1 -1
  208. package/lib/types/internal/app-binder/command/ProvideSafeAccountCommand.d.ts +34 -0
  209. package/lib/types/internal/app-binder/command/ProvideSafeAccountCommand.d.ts.map +1 -0
  210. package/lib/types/internal/app-binder/command/ProvideSafeAccountCommand.test.d.ts +2 -0
  211. package/lib/types/internal/app-binder/command/ProvideSafeAccountCommand.test.d.ts.map +1 -0
  212. package/lib/types/internal/app-binder/command/SendEIP712FilteringCommand.d.ts +29 -1
  213. package/lib/types/internal/app-binder/command/SendEIP712FilteringCommand.d.ts.map +1 -1
  214. package/lib/types/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.d.ts +14 -18
  215. package/lib/types/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.d.ts.map +1 -1
  216. package/lib/types/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.d.ts +4 -0
  217. package/lib/types/internal/app-binder/device-action/SignTypedData/SignTypedDataDeviceAction.d.ts.map +1 -1
  218. package/lib/types/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.d.ts +20 -0
  219. package/lib/types/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.d.ts.map +1 -0
  220. package/lib/types/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.test.d.ts +2 -0
  221. package/lib/types/internal/app-binder/device-action/VerifySafeAddress/VerifySafeAddress.test.d.ts.map +1 -0
  222. package/lib/types/internal/app-binder/device-action/__test-utils__/testDeviceActionUntilStep.d.ts +6 -0
  223. package/lib/types/internal/app-binder/device-action/__test-utils__/testDeviceActionUntilStep.d.ts.map +1 -0
  224. package/lib/types/internal/app-binder/task/BuildBaseContexts.d.ts +51 -0
  225. package/lib/types/internal/app-binder/task/BuildBaseContexts.d.ts.map +1 -0
  226. package/lib/types/internal/app-binder/task/BuildBaseContexts.test.d.ts +2 -0
  227. package/lib/types/internal/app-binder/task/BuildBaseContexts.test.d.ts.map +1 -0
  228. package/lib/types/internal/app-binder/task/BuildEIP712ContextTask.d.ts +8 -1
  229. package/lib/types/internal/app-binder/task/BuildEIP712ContextTask.d.ts.map +1 -1
  230. package/lib/types/internal/app-binder/task/BuildFullContextsTask.d.ts +39 -0
  231. package/lib/types/internal/app-binder/task/BuildFullContextsTask.d.ts.map +1 -0
  232. package/lib/types/internal/app-binder/task/BuildFullContextsTask.test.d.ts +2 -0
  233. package/lib/types/internal/app-binder/task/BuildFullContextsTask.test.d.ts.map +1 -0
  234. package/lib/types/internal/app-binder/task/BuildSafeAddressContextTask.d.ts +19 -0
  235. package/lib/types/internal/app-binder/task/BuildSafeAddressContextTask.d.ts.map +1 -0
  236. package/lib/types/internal/app-binder/task/BuildSafeAddressContextTask.test.d.ts +2 -0
  237. package/lib/types/internal/app-binder/task/BuildSafeAddressContextTask.test.d.ts.map +1 -0
  238. package/lib/types/internal/app-binder/task/BuildSubcontextsTask.d.ts +28 -0
  239. package/lib/types/internal/app-binder/task/BuildSubcontextsTask.d.ts.map +1 -0
  240. package/lib/types/internal/app-binder/task/BuildSubcontextsTask.test.d.ts +2 -0
  241. package/lib/types/internal/app-binder/task/BuildSubcontextsTask.test.d.ts.map +1 -0
  242. package/lib/types/internal/app-binder/task/ParseNestedTransactionTask.d.ts +21 -0
  243. package/lib/types/internal/app-binder/task/ParseNestedTransactionTask.d.ts.map +1 -0
  244. package/lib/types/internal/app-binder/task/ParseNestedTransactionTask.test.d.ts +2 -0
  245. package/lib/types/internal/app-binder/task/ParseNestedTransactionTask.test.d.ts.map +1 -0
  246. package/lib/types/internal/app-binder/task/{PreBuildContextTask.d.ts → ParseTransactionTask.d.ts} +6 -6
  247. package/lib/types/internal/app-binder/task/ParseTransactionTask.d.ts.map +1 -0
  248. package/lib/types/internal/app-binder/task/ParseTransactionTask.test.d.ts +2 -0
  249. package/lib/types/internal/app-binder/task/ParseTransactionTask.test.d.ts.map +1 -0
  250. package/lib/types/internal/app-binder/task/ProvideContextTask.d.ts +22 -0
  251. package/lib/types/internal/app-binder/task/ProvideContextTask.d.ts.map +1 -0
  252. package/lib/types/internal/app-binder/task/ProvideContextTask.test.d.ts +2 -0
  253. package/lib/types/internal/app-binder/task/ProvideContextTask.test.d.ts.map +1 -0
  254. package/lib/types/internal/app-binder/task/ProvideEIP712ContextTask.d.ts +14 -3
  255. package/lib/types/internal/app-binder/task/ProvideEIP712ContextTask.d.ts.map +1 -1
  256. package/lib/types/internal/app-binder/task/ProvideTransactionContextsTask.d.ts +36 -0
  257. package/lib/types/internal/app-binder/task/ProvideTransactionContextsTask.d.ts.map +1 -0
  258. package/lib/types/internal/app-binder/task/ProvideTransactionContextsTask.test.d.ts +2 -0
  259. package/lib/types/internal/app-binder/task/ProvideTransactionContextsTask.test.d.ts.map +1 -0
  260. package/lib/types/internal/di.d.ts.map +1 -1
  261. package/lib/types/internal/safe/di/safeModule.d.ts +3 -0
  262. package/lib/types/internal/safe/di/safeModule.d.ts.map +1 -0
  263. package/lib/types/internal/safe/di/safeModule.test.d.ts +2 -0
  264. package/lib/types/internal/safe/di/safeModule.test.d.ts.map +1 -0
  265. package/lib/types/internal/safe/di/safeTypes.d.ts +4 -0
  266. package/lib/types/internal/safe/di/safeTypes.d.ts.map +1 -0
  267. package/lib/types/internal/safe/use-case/VerifySafeAddressUseCase.d.ts +9 -0
  268. package/lib/types/internal/safe/use-case/VerifySafeAddressUseCase.d.ts.map +1 -0
  269. package/lib/types/internal/safe/use-case/VerifySafeAddressUseCase.test.d.ts +2 -0
  270. package/lib/types/internal/safe/use-case/VerifySafeAddressUseCase.test.d.ts.map +1 -0
  271. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  272. package/package.json +9 -9
  273. package/lib/cjs/internal/app-binder/task/BuildSubContextTask.js +0 -2
  274. package/lib/cjs/internal/app-binder/task/BuildSubContextTask.js.map +0 -7
  275. package/lib/cjs/internal/app-binder/task/BuildSubContextTask.test.js +0 -2
  276. package/lib/cjs/internal/app-binder/task/BuildSubContextTask.test.js.map +0 -7
  277. package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.js +0 -2
  278. package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.js.map +0 -7
  279. package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.test.js +0 -2
  280. package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.test.js.map +0 -7
  281. package/lib/cjs/internal/app-binder/task/PreBuildContextTask.js +0 -2
  282. package/lib/cjs/internal/app-binder/task/PreBuildContextTask.js.map +0 -7
  283. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.js +0 -2
  284. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.js.map +0 -7
  285. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.test.js +0 -2
  286. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.test.js.map +0 -7
  287. package/lib/esm/internal/app-binder/task/BuildSubContextTask.js +0 -2
  288. package/lib/esm/internal/app-binder/task/BuildSubContextTask.js.map +0 -7
  289. package/lib/esm/internal/app-binder/task/BuildSubContextTask.test.js +0 -2
  290. package/lib/esm/internal/app-binder/task/BuildSubContextTask.test.js.map +0 -7
  291. package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.js +0 -2
  292. package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.js.map +0 -7
  293. package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.test.js +0 -2
  294. package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.test.js.map +0 -7
  295. package/lib/esm/internal/app-binder/task/PreBuildContextTask.js +0 -2
  296. package/lib/esm/internal/app-binder/task/PreBuildContextTask.js.map +0 -7
  297. package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.js +0 -2
  298. package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.js.map +0 -7
  299. package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.test.js +0 -2
  300. package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.test.js.map +0 -7
  301. package/lib/types/internal/app-binder/task/BuildSubContextTask.d.ts +0 -20
  302. package/lib/types/internal/app-binder/task/BuildSubContextTask.d.ts.map +0 -1
  303. package/lib/types/internal/app-binder/task/BuildSubContextTask.test.d.ts +0 -2
  304. package/lib/types/internal/app-binder/task/BuildSubContextTask.test.d.ts.map +0 -1
  305. package/lib/types/internal/app-binder/task/BuildTransactionContextTask.d.ts +0 -28
  306. package/lib/types/internal/app-binder/task/BuildTransactionContextTask.d.ts.map +0 -1
  307. package/lib/types/internal/app-binder/task/BuildTransactionContextTask.test.d.ts +0 -2
  308. package/lib/types/internal/app-binder/task/BuildTransactionContextTask.test.d.ts.map +0 -1
  309. package/lib/types/internal/app-binder/task/PreBuildContextTask.d.ts.map +0 -1
  310. package/lib/types/internal/app-binder/task/ProvideTransactionContextTask.d.ts +0 -44
  311. package/lib/types/internal/app-binder/task/ProvideTransactionContextTask.d.ts.map +0 -1
  312. package/lib/types/internal/app-binder/task/ProvideTransactionContextTask.test.d.ts +0 -2
  313. package/lib/types/internal/app-binder/task/ProvideTransactionContextTask.test.d.ts.map +0 -1
@@ -1,2 +1,2 @@
1
- var C=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var w=(b,e,r,t)=>{for(var a=t>1?void 0:t?P(e,r):e,l=b.length-1,n;l>=0;l--)(n=b[l])&&(a=(t?n(e,r,a):n(a))||a);return t&&a&&C(e,r,a),a};import{ContainerPath as p,DataPathElementType as c,DataPathLeafType as d}from"@ledgerhq/context-module";import{ByteArrayBuilder as f,ByteArrayParser as I,hexaStringToBuffer as L}from"@ledgerhq/device-management-kit";import{injectable as N}from"inversify";import{Left as u,Maybe as E,Right as A}from"purify-ts";const F=4,h=32;let y=class{extractValue(e,r){const{to:t,data:a,value:l}=e;return r===p.FROM?u(new Error("Cannot get 'FROM' field of an unsigned transaction")):r===p.TO?E.fromNullable(t).map(n=>L(n)).filter(n=>n!==null).map(n=>[n]).toEither(new Error("Faild to extract TO field of transaction")):r===p.VALUE?E.fromNullable(l).map(n=>new f().add256BitUIntToData(n).build()).map(n=>[n]).toEither(new Error("Faild to extract VALUE field of transaction")):E.fromNullable(a).toEither(new Error("Transaction calldata is empty")).chain(n=>E.fromNullable(L(n)).toEither(new Error(`Invalid hex string calldata: ${n}`))).chain(n=>this.extractCalldataValue(n,r))}extractCalldataValue(e,r){return e=e.slice(F),r.length===0?u(new Error("Path is empty")):this.extractCalldataValueAt(e,r,0,0)}extractCalldataValueAt(e,r,t,a){const l=r[r.length-1],n=l.type===c.SLICE?l:null;for(;r.length>0;){const i=r[0];switch(r=r.slice(1),i.type){case c.TUPLE:a=t,t+=i.offset*h;break;case c.ARRAY:return this.getU256(e.slice(t)).toEither(new Error(`Invalid array length at offset ${t}`)).chain(o=>{t+=h,a=t;const s=i.start===void 0?0:i.start<0?o+i.start:i.start,U=i.end===void 0?o:i.end<0?o+i.end:i.end;return s<0||s>=o||U>o||s>=U?u(new Error(`Array slice out of bounds, start=${i.start}, end=${i.end}`)):Array.from({length:U-s},(m,g)=>g).map(m=>t+(m+s)*i.itemSize*h).reduce((m,g)=>m.chain(T=>this.extractCalldataValueAt(e,r,g,a).map(x=>[...T,...x])),A([]))});case c.REF:if(this.getU256(e.slice(t)).ifJust(o=>t=a+o).isNothing())return u(new Error(`Invalid ref at offset ${t}`));break;case c.LEAF:switch(i.leafType){case d.ARRAY_LEAF:return u(new Error("Array leaf is not supported in v1 of protocol"));case d.TUPLE_LEAF:return u(new Error("Tuple leaf is not supported in v1 of protocol"));case d.STATIC_LEAF:return this.getSlice(e,t,h).chain(o=>n===null?A([o]):this.sliceLeaf(o,n));case d.DYNAMIC_LEAF:return this.getU256(e.slice(t)).toEither(new Error(`Invalid leaf length at offset ${t}`)).chain(o=>(t+=h,this.getSlice(e,t,o).chain(s=>n===null?A([s]):this.sliceLeaf(s,n))))}break;case c.SLICE:return u(new Error("Slice can only be used as last element of the path"))}}return u(new Error("Path did not resolve to a leaf element"))}sliceLeaf(e,r){const t=e.length,a=r.start===void 0?0:r.start<0?t+r.start:r.start,l=r.end===void 0?t:r.end<0?t+r.end:r.end;return a>=l?u(new Error(`invalid leaf slice: start ${a}, end ${l}`)):this.getSlice(e,a,l-a).map(n=>[n])}getSlice(e,r,t){return r<0||e.length<r+t?u(new Error(`calldata too small to slice at offset ${r} of length ${t}`)):A(e.slice(r,r+t))}getU256(e){return E.fromNullable(new I(e).extract256BitUInt(!0)).filter(r=>r<=Number.MAX_SAFE_INTEGER).map(r=>Number(r))}};y=w([N()],y);export{y as TransactionParserService};
1
+ var C=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var w=(b,t,r,e)=>{for(var a=e>1?void 0:e?P(t,r):t,l=b.length-1,n;l>=0;l--)(n=b[l])&&(a=(e?n(t,r,a):n(a))||a);return e&&a&&C(t,r,a),a};import{ContainerPath as p,DataPathElementType as c,DataPathLeafType as d}from"@ledgerhq/context-module";import{ByteArrayBuilder as f,ByteArrayParser as I,hexaStringToBuffer as L}from"@ledgerhq/device-management-kit";import{injectable as N}from"inversify";import{Left as u,Maybe as E,Right as A}from"purify-ts";const F=4,h=32;let y=class{extractValue(t,r){const{to:e,data:a,value:l}=t;return r===p.FROM?u(new Error("Cannot get 'FROM' field of an unsigned transaction")):r===p.TO?E.fromNullable(e).map(n=>L(n)).filter(n=>n!==null).map(n=>[n]).toEither(new Error("Failed to extract TO field of transaction")):r===p.VALUE?E.fromNullable(l).map(n=>new f().add256BitUIntToData(n).build()).map(n=>[n]).toEither(new Error("Failed to extract VALUE field of transaction")):E.fromNullable(a).toEither(new Error("Transaction calldata is empty")).chain(n=>E.fromNullable(L(n)).toEither(new Error(`Invalid hex string calldata: ${n}`))).chain(n=>this.extractCalldataValue(n,r))}extractCalldataValue(t,r){return t=t.slice(F),r.length===0?u(new Error("Path is empty")):this.extractCalldataValueAt(t,r,0,0)}extractCalldataValueAt(t,r,e,a){const l=r[r.length-1],n=l.type===c.SLICE?l:null;for(;r.length>0;){const i=r[0];switch(r=r.slice(1),i.type){case c.TUPLE:a=e,e+=i.offset*h;break;case c.ARRAY:return this.getU256(t.slice(e)).toEither(new Error(`Invalid array length at offset ${e}`)).chain(o=>{e+=h,a=e;const s=i.start===void 0?0:i.start<0?o+i.start:i.start,U=i.end===void 0?o:i.end<0?o+i.end:i.end;return s<0||s>=o||U>o||s>=U?u(new Error(`Array slice out of bounds, start=${i.start}, end=${i.end}`)):Array.from({length:U-s},(m,g)=>g).map(m=>e+(m+s)*i.itemSize*h).reduce((m,g)=>m.chain(T=>this.extractCalldataValueAt(t,r,g,a).map(x=>[...T,...x])),A([]))});case c.REF:if(this.getU256(t.slice(e)).ifJust(o=>e=a+o).isNothing())return u(new Error(`Invalid ref at offset ${e}`));break;case c.LEAF:switch(i.leafType){case d.ARRAY_LEAF:return u(new Error("Array leaf is not supported in v1 of protocol"));case d.TUPLE_LEAF:return u(new Error("Tuple leaf is not supported in v1 of protocol"));case d.STATIC_LEAF:return this.getSlice(t,e,h).chain(o=>n===null?A([o]):this.sliceLeaf(o,n));case d.DYNAMIC_LEAF:return this.getU256(t.slice(e)).toEither(new Error(`Invalid leaf length at offset ${e}`)).chain(o=>(e+=h,this.getSlice(t,e,o).chain(s=>n===null?A([s]):this.sliceLeaf(s,n))))}break;case c.SLICE:return u(new Error("Slice can only be used as last element of the path"))}}return u(new Error("Path did not resolve to a leaf element"))}sliceLeaf(t,r){const e=t.length,a=r.start===void 0?0:r.start<0?e+r.start:r.start,l=r.end===void 0?e:r.end<0?e+r.end:r.end;return a>=l?u(new Error(`invalid leaf slice: start ${a}, end ${l}`)):this.getSlice(t,a,l-a).map(n=>[n])}getSlice(t,r,e){return r<0||t.length<r+e?u(new Error(`calldata too small to slice at offset ${r} of length ${e}`)):A(t.slice(r,r+e))}getU256(t){return E.fromNullable(new I(t).extract256BitUInt(!0)).filter(r=>r<=Number.MAX_SAFE_INTEGER).map(r=>Number(r))}};y=w([N()],y);export{y as TransactionParserService};
2
2
  //# sourceMappingURL=TransactionParserService.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/internal/transaction/service/parser/TransactionParserService.ts"],
4
- "sourcesContent": ["import type {\n DataPathElement,\n DataPathElementSlice,\n GenericPath,\n TransactionSubset,\n} from \"@ledgerhq/context-module\";\nimport {\n ContainerPath,\n DataPathElementType,\n DataPathLeafType,\n} from \"@ledgerhq/context-module\";\nimport {\n ByteArrayBuilder,\n ByteArrayParser,\n hexaStringToBuffer,\n} from \"@ledgerhq/device-management-kit\";\nimport { injectable } from \"inversify\";\nimport { Either, Left, Maybe, Right } from \"purify-ts\";\n\n/**\n * The goal of this service it to implement the GenericPath parser in the context\n * of an ethereum transaction.\n *\n * The abi of an ethereum transaction calldata is specified here:\n * https://docs.soliditylang.org/en/latest/abi-spec.html\n *\n * To be noted:\n * - calldata is composed of:\n * - the selector on 4 bytes\n * - chunks of 32 bytes, whatever the size of the item contained in that chunk\n * - static elements (fixed size) are encoded \"in-place\", always in 1 chunk padded with zeros\n * (even a bool is on 32 bytes)\n * - dynamic elements (variable size) are behind references (pointers) and then encoded with length+value\n *\n * Examples extracted from the abi specification:\n * - example for a function with static elements:\n * signature: baz(uint32 x, bool y)\n * parameters: x = 69\n * y = true\n * - Encoding:\n * 0xcdcd77c0: the selector\n * [0] 0x0000000000000000000000000000000000000000000000000000000000000045: value = 69\n * [1] 0x0000000000000000000000000000000000000000000000000000000000000001: value = true\n *\n * - example for a function with dynamic elements:\n * signature: g(uint256[][] x, string[] x)\n * parameters: x = [[1, 2], [3]]\n * y = [\"one\", \"two\", \"three\"]\n * - Encoding:\n * 0x2289b18c: the selector\n * [0] 0x0000000000000000000000000000000000000000000000000000000000000040: offset of x\n * [1] 0x0000000000000000000000000000000000000000000000000000000000000140: offset of y\n * [2] 0x0000000000000000000000000000000000000000000000000000000000000002: length of x\n * [3] 0x0000000000000000000000000000000000000000000000000000000000000040: offset of x[0]\n * [4] 0x00000000000000000000000000000000000000000000000000000000000000a0: offset of x[1]\n * [5] 0x0000000000000000000000000000000000000000000000000000000000000002: length of x[0]\n * [6] 0x0000000000000000000000000000000000000000000000000000000000000001: value of x[0][0] = 1\n * [7] 0x0000000000000000000000000000000000000000000000000000000000000002: value of x[0][1] = 2\n * [8] 0x0000000000000000000000000000000000000000000000000000000000000001: length of x[1]\n * [9] 0x0000000000000000000000000000000000000000000000000000000000000003: value of x[1][0] = 3\n * [10] 0x0000000000000000000000000000000000000000000000000000000000000003: length of y\n * [11] 0x0000000000000000000000000000000000000000000000000000000000000060: offset of y[0]\n * [12] 0x00000000000000000000000000000000000000000000000000000000000000a0: offset of y[1]\n * [13] 0x00000000000000000000000000000000000000000000000000000000000000e0: offset of y[2]\n * [14] 0x0000000000000000000000000000000000000000000000000000000000000003: length of y[0]\n * [15] 0x6f6e650000000000000000000000000000000000000000000000000000000000: value of y[0] = \"one\"\n * [16] 0x0000000000000000000000000000000000000000000000000000000000000003: length of y[1]\n * [17] 0x74776f0000000000000000000000000000000000000000000000000000000000: value of y[1] = \"two\"\n * [18] 0x0000000000000000000000000000000000000000000000000000000000000005: length of y[2]\n * [19] 0x7468726565000000000000000000000000000000000000000000000000000000: value of y[2] = \"three\"\n */\nconst SELECTOR_LENGTH = 4;\nconst CHUNK_SIZE = 32;\n\n@injectable()\nexport class TransactionParserService {\n public extractValue(\n subset: TransactionSubset,\n path: GenericPath,\n ): Either<Error, Uint8Array[]> {\n const { to, data, value } = subset;\n /**\n * We can first check container paths, which are in the transaction envelop\n */\n if (path === ContainerPath.FROM) {\n // 'from' is not part of the unsigned ethereum transaction, and can\n // only by recovered from the transaction signature later on.\n // Therefore we cannot extract it from a transaction before signing it.\n // It is not an issue since that field will typically be displayed as an\n // address on the device and therefore don't require additional descriptors.\n return Left(\n new Error(\"Cannot get 'FROM' field of an unsigned transaction\"),\n );\n } else if (path === ContainerPath.TO) {\n return Maybe.fromNullable(to)\n .map((str) => hexaStringToBuffer(str))\n .filter((bytes) => bytes !== null)\n .map((bytes) => [bytes])\n .toEither(new Error(\"Faild to extract TO field of transaction\"));\n } else if (path === ContainerPath.VALUE) {\n return Maybe.fromNullable(value)\n .map((num) => new ByteArrayBuilder().add256BitUIntToData(num).build())\n .map((bytes) => [bytes])\n .toEither(new Error(\"Faild to extract VALUE field of transaction\"));\n }\n\n /**\n * If it was not a path in the container, it means it's a path in the calldata\n */\n return Maybe.fromNullable(data)\n .toEither(new Error(\"Transaction calldata is empty\"))\n .chain((calldata) =>\n Maybe.fromNullable(hexaStringToBuffer(calldata)).toEither(\n new Error(`Invalid hex string calldata: ${calldata}`),\n ),\n )\n .chain((calldata) => this.extractCalldataValue(calldata, path));\n }\n\n private extractCalldataValue(\n data: Uint8Array,\n path: DataPathElement[],\n ): Either<Error, Uint8Array[]> {\n data = data.slice(SELECTOR_LENGTH); // Remove the selector from the calldata\n if (path.length === 0) {\n return Left(new Error(\"Path is empty\"));\n }\n return this.extractCalldataValueAt(data, path, 0, 0);\n }\n\n private extractCalldataValueAt(\n data: Uint8Array,\n path: DataPathElement[],\n offset: number,\n parentOffset: number,\n ): Either<Error, Uint8Array[]> {\n // If the path ends with a slice, store it now as it is only allowed at the end of a binary path.\n const lastElement = path[path.length - 1]!;\n const leafSlice: DataPathElementSlice | null =\n lastElement.type === DataPathElementType.SLICE ? lastElement : null;\n\n while (path.length > 0) {\n const element = path[0]!;\n path = path.slice(1);\n switch (element.type) {\n case DataPathElementType.TUPLE:\n // A tuple contain 1 element per chunk\n parentOffset = offset;\n offset += element.offset * CHUNK_SIZE;\n break;\n case DataPathElementType.ARRAY:\n // An array contains a length, followed by the list of elements.\n // See the examples with dynamic types at the top of this file for more informations.\n return this.getU256(data.slice(offset))\n .toEither(new Error(`Invalid array length at offset ${offset}`))\n .chain((length) => {\n // Skip the array length\n offset += CHUNK_SIZE;\n parentOffset = offset;\n // Select the array slice to iterate on\n const start =\n element.start === undefined\n ? 0\n : element.start < 0\n ? length + element.start\n : element.start;\n const end =\n element.end === undefined\n ? length\n : element.end < 0\n ? length + element.end\n : element.end;\n if (\n start < 0 ||\n start >= length ||\n end > length ||\n start >= end\n ) {\n return Left(\n new Error(\n `Array slice out of bounds, start=${element.start}, end=${element.end}`,\n ),\n );\n }\n // Iterate on the array slice\n return Array.from({ length: end - start }, (_, i) => i)\n .map(\n (i) => offset + (i + start) * element.itemSize * CHUNK_SIZE,\n )\n .reduce(\n (acc: Either<Error, Uint8Array[]>, arrayOffset) =>\n acc.chain((values) =>\n this.extractCalldataValueAt(\n data,\n path,\n arrayOffset,\n parentOffset,\n ).map((newValues) => [...values, ...newValues]),\n ),\n Right([]),\n );\n });\n case DataPathElementType.REF:\n // A reference means the current slot points to a new offset in the calldata (a kind of pointer).\n // That offset is relative to its 'parent' element, here named parentOffset.\n // See the examples with dynamic types at the top of this file for more informations.\n if (\n this.getU256(data.slice(offset))\n .ifJust((reference) => (offset = parentOffset + reference))\n .isNothing()\n ) {\n return Left(new Error(`Invalid ref at offset ${offset}`));\n }\n break;\n case DataPathElementType.LEAF:\n // A leaf means we reached the end of the path.\n // We have to check the leaf type to know how to extract the data.\n switch (element.leafType) {\n case DataPathLeafType.ARRAY_LEAF:\n return Left(\n new Error(\"Array leaf is not supported in v1 of protocol\"),\n );\n case DataPathLeafType.TUPLE_LEAF:\n return Left(\n new Error(\"Tuple leaf is not supported in v1 of protocol\"),\n );\n case DataPathLeafType.STATIC_LEAF:\n // A static leaf is the chunk of current offset (data of static size)\n return this.getSlice(data, offset, CHUNK_SIZE).chain((leaf) => {\n if (leafSlice === null) {\n return Right([leaf]);\n } else {\n return this.sliceLeaf(leaf, leafSlice);\n }\n });\n case DataPathLeafType.DYNAMIC_LEAF:\n // A dynamic leaf is composed of a length followed by the actual value\n // (data of variable size such as a string).\n // See the examples with dynamic types at the top of this file for more informations.\n return this.getU256(data.slice(offset))\n .toEither(new Error(`Invalid leaf length at offset ${offset}`))\n .chain((length) => {\n // Skip dynamic leaf length\n offset += CHUNK_SIZE;\n return this.getSlice(data, offset, length).chain((leaf) => {\n if (leafSlice === null) {\n return Right([leaf]);\n } else {\n return this.sliceLeaf(leaf, leafSlice);\n }\n });\n });\n }\n break;\n case DataPathElementType.SLICE:\n // If the last element was a slice, it was already popped at the beginning of this function\n return Left(\n new Error(\"Slice can only be used as last element of the path\"),\n );\n }\n }\n // We should have early-returned on a leaf\n return Left(new Error(\"Path did not resolve to a leaf element\"));\n }\n\n private sliceLeaf(\n data: Uint8Array,\n leafSlice: DataPathElementSlice,\n ): Either<Error, Uint8Array[]> {\n const length = data.length;\n const start =\n leafSlice.start === undefined\n ? 0\n : leafSlice.start < 0\n ? length + leafSlice.start\n : leafSlice.start;\n const end =\n leafSlice.end === undefined\n ? length\n : leafSlice.end < 0\n ? length + leafSlice.end\n : leafSlice.end;\n if (start >= end) {\n return Left(new Error(`invalid leaf slice: start ${start}, end ${end}`));\n }\n return this.getSlice(data, start, end - start).map((leaf) => [leaf]);\n }\n\n getSlice(\n data: Uint8Array,\n offset: number,\n size: number,\n ): Either<Error, Uint8Array> {\n return offset < 0 || data.length < offset + size\n ? Left(\n new Error(\n `calldata too small to slice at offset ${offset} of length ${size}`,\n ),\n )\n : Right(data.slice(offset, offset + size));\n }\n\n getU256(data: Uint8Array): Maybe<number> {\n // https://docs.soliditylang.org/en/latest/abi-spec.html#formal-specification-of-the-encoding\n return Maybe.fromNullable(new ByteArrayParser(data).extract256BitUInt(true))\n .filter((res) => res <= Number.MAX_SAFE_INTEGER)\n .map((res) => Number(res));\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type {\n DataPathElement,\n DataPathElementSlice,\n GenericPath,\n TransactionSubset,\n} from \"@ledgerhq/context-module\";\nimport {\n ContainerPath,\n DataPathElementType,\n DataPathLeafType,\n} from \"@ledgerhq/context-module\";\nimport {\n ByteArrayBuilder,\n ByteArrayParser,\n hexaStringToBuffer,\n} from \"@ledgerhq/device-management-kit\";\nimport { injectable } from \"inversify\";\nimport { Either, Left, Maybe, Right } from \"purify-ts\";\n\n/**\n * The goal of this service it to implement the GenericPath parser in the context\n * of an ethereum transaction.\n *\n * The abi of an ethereum transaction calldata is specified here:\n * https://docs.soliditylang.org/en/latest/abi-spec.html\n *\n * To be noted:\n * - calldata is composed of:\n * - the selector on 4 bytes\n * - chunks of 32 bytes, whatever the size of the item contained in that chunk\n * - static elements (fixed size) are encoded \"in-place\", always in 1 chunk padded with zeros\n * (even a bool is on 32 bytes)\n * - dynamic elements (variable size) are behind references (pointers) and then encoded with length+value\n *\n * Examples extracted from the abi specification:\n * - example for a function with static elements:\n * signature: baz(uint32 x, bool y)\n * parameters: x = 69\n * y = true\n * - Encoding:\n * 0xcdcd77c0: the selector\n * [0] 0x0000000000000000000000000000000000000000000000000000000000000045: value = 69\n * [1] 0x0000000000000000000000000000000000000000000000000000000000000001: value = true\n *\n * - example for a function with dynamic elements:\n * signature: g(uint256[][] x, string[] x)\n * parameters: x = [[1, 2], [3]]\n * y = [\"one\", \"two\", \"three\"]\n * - Encoding:\n * 0x2289b18c: the selector\n * [0] 0x0000000000000000000000000000000000000000000000000000000000000040: offset of x\n * [1] 0x0000000000000000000000000000000000000000000000000000000000000140: offset of y\n * [2] 0x0000000000000000000000000000000000000000000000000000000000000002: length of x\n * [3] 0x0000000000000000000000000000000000000000000000000000000000000040: offset of x[0]\n * [4] 0x00000000000000000000000000000000000000000000000000000000000000a0: offset of x[1]\n * [5] 0x0000000000000000000000000000000000000000000000000000000000000002: length of x[0]\n * [6] 0x0000000000000000000000000000000000000000000000000000000000000001: value of x[0][0] = 1\n * [7] 0x0000000000000000000000000000000000000000000000000000000000000002: value of x[0][1] = 2\n * [8] 0x0000000000000000000000000000000000000000000000000000000000000001: length of x[1]\n * [9] 0x0000000000000000000000000000000000000000000000000000000000000003: value of x[1][0] = 3\n * [10] 0x0000000000000000000000000000000000000000000000000000000000000003: length of y\n * [11] 0x0000000000000000000000000000000000000000000000000000000000000060: offset of y[0]\n * [12] 0x00000000000000000000000000000000000000000000000000000000000000a0: offset of y[1]\n * [13] 0x00000000000000000000000000000000000000000000000000000000000000e0: offset of y[2]\n * [14] 0x0000000000000000000000000000000000000000000000000000000000000003: length of y[0]\n * [15] 0x6f6e650000000000000000000000000000000000000000000000000000000000: value of y[0] = \"one\"\n * [16] 0x0000000000000000000000000000000000000000000000000000000000000003: length of y[1]\n * [17] 0x74776f0000000000000000000000000000000000000000000000000000000000: value of y[1] = \"two\"\n * [18] 0x0000000000000000000000000000000000000000000000000000000000000005: length of y[2]\n * [19] 0x7468726565000000000000000000000000000000000000000000000000000000: value of y[2] = \"three\"\n */\nconst SELECTOR_LENGTH = 4;\nconst CHUNK_SIZE = 32;\n\n@injectable()\nexport class TransactionParserService {\n public extractValue(\n subset: TransactionSubset,\n path: GenericPath,\n ): Either<Error, Uint8Array[]> {\n const { to, data, value } = subset;\n /**\n * We can first check container paths, which are in the transaction envelop\n */\n if (path === ContainerPath.FROM) {\n // 'from' is not part of the unsigned ethereum transaction, and can\n // only by recovered from the transaction signature later on.\n // Therefore we cannot extract it from a transaction before signing it.\n // It is not an issue since that field will typically be displayed as an\n // address on the device and therefore don't require additional descriptors.\n return Left(\n new Error(\"Cannot get 'FROM' field of an unsigned transaction\"),\n );\n } else if (path === ContainerPath.TO) {\n return Maybe.fromNullable(to)\n .map((str) => hexaStringToBuffer(str))\n .filter((bytes) => bytes !== null)\n .map((bytes) => [bytes])\n .toEither(new Error(\"Failed to extract TO field of transaction\"));\n } else if (path === ContainerPath.VALUE) {\n return Maybe.fromNullable(value)\n .map((num) => new ByteArrayBuilder().add256BitUIntToData(num).build())\n .map((bytes) => [bytes])\n .toEither(new Error(\"Failed to extract VALUE field of transaction\"));\n }\n\n /**\n * If it was not a path in the container, it means it's a path in the calldata\n */\n return Maybe.fromNullable(data)\n .toEither(new Error(\"Transaction calldata is empty\"))\n .chain((calldata) =>\n Maybe.fromNullable(hexaStringToBuffer(calldata)).toEither(\n new Error(`Invalid hex string calldata: ${calldata}`),\n ),\n )\n .chain((calldata) => this.extractCalldataValue(calldata, path));\n }\n\n private extractCalldataValue(\n data: Uint8Array,\n path: DataPathElement[],\n ): Either<Error, Uint8Array[]> {\n data = data.slice(SELECTOR_LENGTH); // Remove the selector from the calldata\n if (path.length === 0) {\n return Left(new Error(\"Path is empty\"));\n }\n return this.extractCalldataValueAt(data, path, 0, 0);\n }\n\n private extractCalldataValueAt(\n data: Uint8Array,\n path: DataPathElement[],\n offset: number,\n parentOffset: number,\n ): Either<Error, Uint8Array[]> {\n // If the path ends with a slice, store it now as it is only allowed at the end of a binary path.\n const lastElement = path[path.length - 1]!;\n const leafSlice: DataPathElementSlice | null =\n lastElement.type === DataPathElementType.SLICE ? lastElement : null;\n\n while (path.length > 0) {\n const element = path[0]!;\n path = path.slice(1);\n switch (element.type) {\n case DataPathElementType.TUPLE:\n // A tuple contain 1 element per chunk\n parentOffset = offset;\n offset += element.offset * CHUNK_SIZE;\n break;\n case DataPathElementType.ARRAY:\n // An array contains a length, followed by the list of elements.\n // See the examples with dynamic types at the top of this file for more informations.\n return this.getU256(data.slice(offset))\n .toEither(new Error(`Invalid array length at offset ${offset}`))\n .chain((length) => {\n // Skip the array length\n offset += CHUNK_SIZE;\n parentOffset = offset;\n // Select the array slice to iterate on\n const start =\n element.start === undefined\n ? 0\n : element.start < 0\n ? length + element.start\n : element.start;\n const end =\n element.end === undefined\n ? length\n : element.end < 0\n ? length + element.end\n : element.end;\n if (\n start < 0 ||\n start >= length ||\n end > length ||\n start >= end\n ) {\n return Left(\n new Error(\n `Array slice out of bounds, start=${element.start}, end=${element.end}`,\n ),\n );\n }\n // Iterate on the array slice\n return Array.from({ length: end - start }, (_, i) => i)\n .map(\n (i) => offset + (i + start) * element.itemSize * CHUNK_SIZE,\n )\n .reduce(\n (acc: Either<Error, Uint8Array[]>, arrayOffset) =>\n acc.chain((values) =>\n this.extractCalldataValueAt(\n data,\n path,\n arrayOffset,\n parentOffset,\n ).map((newValues) => [...values, ...newValues]),\n ),\n Right([]),\n );\n });\n case DataPathElementType.REF:\n // A reference means the current slot points to a new offset in the calldata (a kind of pointer).\n // That offset is relative to its 'parent' element, here named parentOffset.\n // See the examples with dynamic types at the top of this file for more informations.\n if (\n this.getU256(data.slice(offset))\n .ifJust((reference) => (offset = parentOffset + reference))\n .isNothing()\n ) {\n return Left(new Error(`Invalid ref at offset ${offset}`));\n }\n break;\n case DataPathElementType.LEAF:\n // A leaf means we reached the end of the path.\n // We have to check the leaf type to know how to extract the data.\n switch (element.leafType) {\n case DataPathLeafType.ARRAY_LEAF:\n return Left(\n new Error(\"Array leaf is not supported in v1 of protocol\"),\n );\n case DataPathLeafType.TUPLE_LEAF:\n return Left(\n new Error(\"Tuple leaf is not supported in v1 of protocol\"),\n );\n case DataPathLeafType.STATIC_LEAF:\n // A static leaf is the chunk of current offset (data of static size)\n return this.getSlice(data, offset, CHUNK_SIZE).chain((leaf) => {\n if (leafSlice === null) {\n return Right([leaf]);\n } else {\n return this.sliceLeaf(leaf, leafSlice);\n }\n });\n case DataPathLeafType.DYNAMIC_LEAF:\n // A dynamic leaf is composed of a length followed by the actual value\n // (data of variable size such as a string).\n // See the examples with dynamic types at the top of this file for more informations.\n return this.getU256(data.slice(offset))\n .toEither(new Error(`Invalid leaf length at offset ${offset}`))\n .chain((length) => {\n // Skip dynamic leaf length\n offset += CHUNK_SIZE;\n return this.getSlice(data, offset, length).chain((leaf) => {\n if (leafSlice === null) {\n return Right([leaf]);\n } else {\n return this.sliceLeaf(leaf, leafSlice);\n }\n });\n });\n }\n break;\n case DataPathElementType.SLICE:\n // If the last element was a slice, it was already popped at the beginning of this function\n return Left(\n new Error(\"Slice can only be used as last element of the path\"),\n );\n }\n }\n // We should have early-returned on a leaf\n return Left(new Error(\"Path did not resolve to a leaf element\"));\n }\n\n private sliceLeaf(\n data: Uint8Array,\n leafSlice: DataPathElementSlice,\n ): Either<Error, Uint8Array[]> {\n const length = data.length;\n const start =\n leafSlice.start === undefined\n ? 0\n : leafSlice.start < 0\n ? length + leafSlice.start\n : leafSlice.start;\n const end =\n leafSlice.end === undefined\n ? length\n : leafSlice.end < 0\n ? length + leafSlice.end\n : leafSlice.end;\n if (start >= end) {\n return Left(new Error(`invalid leaf slice: start ${start}, end ${end}`));\n }\n return this.getSlice(data, start, end - start).map((leaf) => [leaf]);\n }\n\n getSlice(\n data: Uint8Array,\n offset: number,\n size: number,\n ): Either<Error, Uint8Array> {\n return offset < 0 || data.length < offset + size\n ? Left(\n new Error(\n `calldata too small to slice at offset ${offset} of length ${size}`,\n ),\n )\n : Right(data.slice(offset, offset + size));\n }\n\n getU256(data: Uint8Array): Maybe<number> {\n // https://docs.soliditylang.org/en/latest/abi-spec.html#formal-specification-of-the-encoding\n return Maybe.fromNullable(new ByteArrayParser(data).extract256BitUInt(true))\n .filter((res) => res <= Number.MAX_SAFE_INTEGER)\n .map((res) => Number(res));\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["ContainerPath", "DataPathElementType", "DataPathLeafType", "ByteArrayBuilder", "ByteArrayParser", "hexaStringToBuffer", "injectable", "Left", "Maybe", "Right", "SELECTOR_LENGTH", "CHUNK_SIZE", "TransactionParserService", "subset", "path", "to", "data", "value", "ContainerPath", "Left", "Maybe", "str", "hexaStringToBuffer", "bytes", "num", "ByteArrayBuilder", "calldata", "offset", "parentOffset", "lastElement", "leafSlice", "DataPathElementType", "element", "length", "start", "end", "_", "i", "acc", "arrayOffset", "values", "newValues", "Right", "reference", "DataPathLeafType", "leaf", "size", "ByteArrayParser", "res", "__decorateClass", "injectable"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{ContainerPath as r}from"@ledgerhq/context-module";import{bufferToHexaString as o,ByteArrayBuilder as p,hexaStringToBuffer as l}from"@ledgerhq/device-management-kit";import{TransactionParserService as E}from"./TransactionParserService";describe("TransactionParserService",()=>{const c=new E,i=l("0x3f32cF0B1DF94157EE1c3876c49BE3732C92a98f"),s=81818275935222000n,n=new p().add256BitUIntToData(81818275935222000n).build();beforeEach(()=>{vi.clearAllMocks()}),describe("Container paths",()=>{it("should extract TO of the container",()=>{const a={chainId:1,data:"0x",selector:"0x",to:o(i),value:s},e=c.extractValue(a,r.TO);expect(e.isRight()).toStrictEqual(!0),expect(e.unsafeCoerce()).toStrictEqual([i])}),it("should extract VALUE of the container",()=>{const a={chainId:1,data:"0x",selector:"0x",to:o(i),value:s},e=c.extractValue(a,r.VALUE);expect(e.isRight()).toStrictEqual(!0),expect(e.unsafeCoerce()).toStrictEqual([n])}),it("Unavailable container fields",()=>{const a={chainId:1,data:"0x",selector:"0x",to:void 0,from:void 0,value:s},e=c.extractValue(a,r.FROM),t=c.extractValue(a,r.TO);expect(e.isRight()).toStrictEqual(!1),expect(t.isRight()).toStrictEqual(!1)}),it("invalid transaction format",()=>{const a=l("0xdeadbeef"),e=c.extractValue(a,r.FROM);expect(e.isRight()).toStrictEqual(!1)})}),describe("Data paths in a calldata with static elements",()=>{const a={chainId:1,data:"0xcdcd77c000000000000000000000000000000000000000000000000000000000000000450000000000000000000000000000000000000000000000000000000000000001",selector:"0xcdcd77c",to:o(i),value:s};it("Extract the first element",()=>{const e=[{type:"TUPLE",offset:0},{type:"LEAF",leafType:"STATIC_LEAF"}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!0),expect(t.unsafeCoerce()).toStrictEqual([l("0x0000000000000000000000000000000000000000000000000000000000000045")])}),it("Extract the second element",()=>{const e=[{type:"TUPLE",offset:1},{type:"LEAF",leafType:"STATIC_LEAF"}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!0),expect(t.unsafeCoerce()).toStrictEqual([l("0x0000000000000000000000000000000000000000000000000000000000000001")])}),it("Slice the static leaf",()=>{const e=[{type:"TUPLE",offset:0},{type:"LEAF",leafType:"STATIC_LEAF"},{type:"SLICE",start:-4}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!0),expect(t.unsafeCoerce()).toStrictEqual([l("0x00000045")])}),it("Out of bounds",()=>{const e=[{type:"TUPLE",offset:2},{type:"LEAF",leafType:"STATIC_LEAF"}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!1)})}),describe("Data paths in a calldata with dynamic elements",()=>{const a={to:o(i),value:s,chainId:1,data:"0x2289b18c000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000036f6e650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000374776f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000057468726565000000000000000000000000000000000000000000000000000000",selector:"0x2289b18c"};it("Extract all the elements of x, concatenated together",()=>{const e=[{type:"TUPLE",offset:0},{type:"REF"},{type:"ARRAY",itemSize:1},{type:"REF"},{type:"ARRAY",itemSize:1},{type:"LEAF",leafType:"STATIC_LEAF"}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!0),expect(t.unsafeCoerce()).toStrictEqual([l("0x0000000000000000000000000000000000000000000000000000000000000001"),l("0x0000000000000000000000000000000000000000000000000000000000000002"),l("0x0000000000000000000000000000000000000000000000000000000000000003")])}),it("Extract all the elements of x[0]",()=>{const e=[{type:"TUPLE",offset:0},{type:"REF"},{type:"ARRAY",itemSize:1,start:0,end:1},{type:"REF"},{type:"ARRAY",itemSize:1},{type:"LEAF",leafType:"STATIC_LEAF"}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!0),expect(t.unsafeCoerce()).toStrictEqual([l("0x0000000000000000000000000000000000000000000000000000000000000001"),l("0x0000000000000000000000000000000000000000000000000000000000000002")])}),it("Extract all the elements of x[0:-1][-1:]",()=>{const e=[{type:"TUPLE",offset:0},{type:"REF"},{type:"ARRAY",itemSize:1,start:0,end:-1},{type:"REF"},{type:"ARRAY",itemSize:1,start:-1},{type:"LEAF",leafType:"STATIC_LEAF"}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!0),expect(t.unsafeCoerce()).toStrictEqual([l("0x0000000000000000000000000000000000000000000000000000000000000002")])}),it("Array out of bounds",()=>{const e=[{type:"TUPLE",offset:0},{type:"REF"},{type:"ARRAY",itemSize:1,start:0,end:1},{type:"REF"},{type:"ARRAY",itemSize:1,start:2,end:3},{type:"LEAF",leafType:"STATIC_LEAF"}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!1)}),it("Extract all the elements of x[1]",()=>{const e=[{type:"TUPLE",offset:1},{type:"REF"},{type:"ARRAY",itemSize:1},{type:"REF"},{type:"LEAF",leafType:"DYNAMIC_LEAF"}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!0),expect(t.unsafeCoerce()).toStrictEqual([l("0x6f6e65"),l("0x74776f"),l("0x7468726565")])}),it("Extract all the elements of x[1][:2]",()=>{const e=[{type:"TUPLE",offset:1},{type:"REF"},{type:"ARRAY",itemSize:1,end:2},{type:"REF"},{type:"LEAF",leafType:"DYNAMIC_LEAF"}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!0),expect(t.unsafeCoerce()).toStrictEqual([l("0x6f6e65"),l("0x74776f")])}),it("Slice the dynamic leaf with [1:-2]",()=>{const e=[{type:"TUPLE",offset:1},{type:"REF"},{type:"ARRAY",itemSize:1,start:2,end:3},{type:"REF"},{type:"LEAF",leafType:"DYNAMIC_LEAF"},{type:"SLICE",start:1,end:-2}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!0),expect(t.unsafeCoerce()).toStrictEqual([l("0x6872")])}),it("Slice the dynamic leaf with [-1:]",()=>{const e=[{type:"TUPLE",offset:1},{type:"REF"},{type:"ARRAY",itemSize:1,start:2,end:3},{type:"REF"},{type:"LEAF",leafType:"DYNAMIC_LEAF"},{type:"SLICE",start:-1}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!0),expect(t.unsafeCoerce()).toStrictEqual([l("0x65")])}),it("Slice the dynamic leaf with [:1]",()=>{const e=[{type:"TUPLE",offset:1},{type:"REF"},{type:"ARRAY",itemSize:1,start:2,end:3},{type:"REF"},{type:"LEAF",leafType:"DYNAMIC_LEAF"},{type:"SLICE",end:1}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!0),expect(t.unsafeCoerce()).toStrictEqual([l("0x74")])}),it("Error no leaf",()=>{const e=[{type:"TUPLE",offset:1}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!1)}),it("Error slice not at the end",()=>{const e=[{type:"TUPLE",offset:1},{type:"SLICE",start:0,end:1},{type:"LEAF",leafType:"STATIC_LEAF"}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!1)}),it("Error empty slice",()=>{const e=[{type:"TUPLE",offset:1},{type:"LEAF",leafType:"DYNAMIC_LEAF"},{type:"SLICE",start:0,end:0}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!1)})}),describe("Array of tuples, with bigger itemSize",()=>{const a={chainId:1,data:"0xcdcd77c000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000006",selector:"0xcdcd77c",to:o(i),value:s};it("Extract the first tuple element of all array elements",()=>{const e=[{type:"REF"},{type:"ARRAY",itemSize:2},{type:"TUPLE",offset:0},{type:"LEAF",leafType:"STATIC_LEAF"}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!0),expect(t.unsafeCoerce()).toStrictEqual([l("0x0000000000000000000000000000000000000000000000000000000000000001"),l("0x0000000000000000000000000000000000000000000000000000000000000003"),l("0x0000000000000000000000000000000000000000000000000000000000000005")])}),it("Extract the second tuple element of all array elements",()=>{const e=[{type:"REF"},{type:"ARRAY",itemSize:2},{type:"TUPLE",offset:1},{type:"LEAF",leafType:"STATIC_LEAF"}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!0),expect(t.unsafeCoerce()).toStrictEqual([l("0x0000000000000000000000000000000000000000000000000000000000000002"),l("0x0000000000000000000000000000000000000000000000000000000000000004"),l("0x0000000000000000000000000000000000000000000000000000000000000006")])})}),describe("Malformed calldata",()=>{const a={chainId:1,data:"0x2289b18c0000000000000000000000000000000000000000000000000000000000000080f000000000000000000000000000000000000000000000000000000000000140f000000000000000000000000000000000000000000000000000000000000002",selector:"0x2289b18c",to:o(i),value:s};it("Dynamic leaf length overflow",()=>{const e=[{type:"TUPLE",offset:1},{type:"LEAF",leafType:"DYNAMIC_LEAF"}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!1)}),it("Calldata smaller than dynamic leaf",()=>{const e=[{type:"TUPLE",offset:0},{type:"LEAF",leafType:"DYNAMIC_LEAF"}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!1)}),it("Array length overflow",()=>{const e=[{type:"TUPLE",offset:1},{type:"ARRAY",itemSize:1},{type:"LEAF",leafType:"STATIC_LEAF"}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!1)}),it("Calldata smaller than array length",()=>{const e=[{type:"TUPLE",offset:0},{type:"ARRAY",itemSize:1},{type:"LEAF",leafType:"STATIC_LEAF"}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!1)}),it("Ref out of bounds",()=>{const e=[{type:"TUPLE",offset:1},{type:"REF"},{type:"LEAF",leafType:"STATIC_LEAF"}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!1)})})});
1
+ import{ContainerPath as r}from"@ledgerhq/context-module";import{bufferToHexaString as o,ByteArrayBuilder as p,hexaStringToBuffer as l}from"@ledgerhq/device-management-kit";import{TransactionParserService as E}from"./TransactionParserService";describe("TransactionParserService",()=>{const c=new E,i=l("0x3f32cF0B1DF94157EE1c3876c49BE3732C92a98f"),s=81818275935222000n,n=new p().add256BitUIntToData(81818275935222000n).build();beforeEach(()=>{vi.clearAllMocks()}),describe("Container paths",()=>{it("should extract TO of the container",()=>{const a={chainId:1,data:"0x",selector:"0x",to:o(i),value:s},e=c.extractValue(a,r.TO);expect(e.isRight()).toStrictEqual(!0),expect(e.unsafeCoerce()).toStrictEqual([i])}),it("should extract VALUE of the container",()=>{const a={chainId:1,data:"0x",selector:"0x",to:o(i),value:s},e=c.extractValue(a,r.VALUE);expect(e.isRight()).toStrictEqual(!0),expect(e.unsafeCoerce()).toStrictEqual([n])}),it("Unavailable container fields",()=>{const a={chainId:1,data:"0x",selector:"0x",to:void 0,from:void 0,value:s},e=c.extractValue(a,r.FROM),t=c.extractValue(a,r.TO);expect(e.isRight()).toStrictEqual(!1),expect(t.isRight()).toStrictEqual(!1)}),it("invalid transaction format",()=>{const a=l("0xdeadbeef"),e=c.extractValue(a,r.FROM);expect(e.isRight()).toStrictEqual(!1)})}),describe("Data paths in a calldata with static elements",()=>{const a={chainId:1,data:"0xcdcd77c000000000000000000000000000000000000000000000000000000000000000450000000000000000000000000000000000000000000000000000000000000001",selector:"0xcdcd77c",to:o(i),value:s};it("Extract the first element",()=>{const e=[{type:"TUPLE",offset:0},{type:"LEAF",leafType:"STATIC_LEAF"}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!0),expect(t.unsafeCoerce()).toStrictEqual([l("0x0000000000000000000000000000000000000000000000000000000000000045")])}),it("Extract the second element",()=>{const e=[{type:"TUPLE",offset:1},{type:"LEAF",leafType:"STATIC_LEAF"}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!0),expect(t.unsafeCoerce()).toStrictEqual([l("0x0000000000000000000000000000000000000000000000000000000000000001")])}),it("Slice the static leaf",()=>{const e=[{type:"TUPLE",offset:0},{type:"LEAF",leafType:"STATIC_LEAF"},{type:"SLICE",start:-4}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!0),expect(t.unsafeCoerce()).toStrictEqual([l("0x00000045")])}),it("Out of bounds",()=>{const e=[{type:"TUPLE",offset:2},{type:"LEAF",leafType:"STATIC_LEAF"}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!1)})}),describe("Data paths in a calldata with dynamic elements",()=>{const a={to:o(i),value:s,chainId:1,data:"0x2289b18c000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000036f6e650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000374776f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000057468726565000000000000000000000000000000000000000000000000000000",selector:"0x2289b18c"};it("Extract all the elements of x, concatenated together",()=>{const e=[{type:"TUPLE",offset:0},{type:"REF"},{type:"ARRAY",itemSize:1},{type:"REF"},{type:"ARRAY",itemSize:1},{type:"LEAF",leafType:"STATIC_LEAF"}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!0),expect(t.unsafeCoerce()).toStrictEqual([l("0x0000000000000000000000000000000000000000000000000000000000000001"),l("0x0000000000000000000000000000000000000000000000000000000000000002"),l("0x0000000000000000000000000000000000000000000000000000000000000003")])}),it("Extract all the elements of x[0]",()=>{const e=[{type:"TUPLE",offset:0},{type:"REF"},{type:"ARRAY",itemSize:1,start:0,end:1},{type:"REF"},{type:"ARRAY",itemSize:1},{type:"LEAF",leafType:"STATIC_LEAF"}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!0),expect(t.unsafeCoerce()).toStrictEqual([l("0x0000000000000000000000000000000000000000000000000000000000000001"),l("0x0000000000000000000000000000000000000000000000000000000000000002")])}),it("Extract all the elements of x[0:-1][-1:]",()=>{const e=[{type:"TUPLE",offset:0},{type:"REF"},{type:"ARRAY",itemSize:1,start:0,end:-1},{type:"REF"},{type:"ARRAY",itemSize:1,start:-1},{type:"LEAF",leafType:"STATIC_LEAF"}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!0),expect(t.unsafeCoerce()).toStrictEqual([l("0x0000000000000000000000000000000000000000000000000000000000000002")])}),it("Array out of bounds",()=>{const e=[{type:"TUPLE",offset:0},{type:"REF"},{type:"ARRAY",itemSize:1,start:0,end:1},{type:"REF"},{type:"ARRAY",itemSize:1,start:2,end:3},{type:"LEAF",leafType:"STATIC_LEAF"}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!1)}),it("Extract all the elements of x[1]",()=>{const e=[{type:"TUPLE",offset:1},{type:"REF"},{type:"ARRAY",itemSize:1},{type:"REF"},{type:"LEAF",leafType:"DYNAMIC_LEAF"}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!0),expect(t.unsafeCoerce()).toStrictEqual([l("0x6f6e65"),l("0x74776f"),l("0x7468726565")])}),it("Extract all the elements of x[1][:2]",()=>{const e=[{type:"TUPLE",offset:1},{type:"REF"},{type:"ARRAY",itemSize:1,end:2},{type:"REF"},{type:"LEAF",leafType:"DYNAMIC_LEAF"}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!0),expect(t.unsafeCoerce()).toStrictEqual([l("0x6f6e65"),l("0x74776f")])}),it("Slice the dynamic leaf with [1:-2]",()=>{const e=[{type:"TUPLE",offset:1},{type:"REF"},{type:"ARRAY",itemSize:1,start:2,end:3},{type:"REF"},{type:"LEAF",leafType:"DYNAMIC_LEAF"},{type:"SLICE",start:1,end:-2}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!0),expect(t.unsafeCoerce()).toStrictEqual([l("0x6872")])}),it("Slice the dynamic leaf with [-1:]",()=>{const e=[{type:"TUPLE",offset:1},{type:"REF"},{type:"ARRAY",itemSize:1,start:2,end:3},{type:"REF"},{type:"LEAF",leafType:"DYNAMIC_LEAF"},{type:"SLICE",start:-1}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!0),expect(t.unsafeCoerce()).toStrictEqual([l("0x65")])}),it("Slice the dynamic leaf with [:1]",()=>{const e=[{type:"TUPLE",offset:1},{type:"REF"},{type:"ARRAY",itemSize:1,start:2,end:3},{type:"REF"},{type:"LEAF",leafType:"DYNAMIC_LEAF"},{type:"SLICE",end:1}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!0),expect(t.unsafeCoerce()).toStrictEqual([l("0x74")])}),it("Error no leaf",()=>{const e=[{type:"TUPLE",offset:1}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!1)}),it("Error slice not at the end",()=>{const e=[{type:"TUPLE",offset:1},{type:"SLICE",start:0,end:1},{type:"LEAF",leafType:"STATIC_LEAF"}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!1)}),it("Error empty slice",()=>{const e=[{type:"TUPLE",offset:1},{type:"LEAF",leafType:"DYNAMIC_LEAF"},{type:"SLICE",start:0,end:0}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!1)})}),describe("Array of tuples, with bigger itemSize",()=>{const a={chainId:1,data:"0xcdcd77c000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000006",selector:"0xcdcd77c",to:o(i),value:s};it("Extract the first tuple element of all array elements",()=>{const e=[{type:"REF"},{type:"ARRAY",itemSize:2},{type:"TUPLE",offset:0},{type:"LEAF",leafType:"STATIC_LEAF"}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!0),expect(t.unsafeCoerce()).toStrictEqual([l("0x0000000000000000000000000000000000000000000000000000000000000001"),l("0x0000000000000000000000000000000000000000000000000000000000000003"),l("0x0000000000000000000000000000000000000000000000000000000000000005")])}),it("Extract the second tuple element of all array elements",()=>{const e=[{type:"REF"},{type:"ARRAY",itemSize:2},{type:"TUPLE",offset:1},{type:"LEAF",leafType:"STATIC_LEAF"}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!0),expect(t.unsafeCoerce()).toStrictEqual([l("0x0000000000000000000000000000000000000000000000000000000000000002"),l("0x0000000000000000000000000000000000000000000000000000000000000004"),l("0x0000000000000000000000000000000000000000000000000000000000000006")])})}),describe("Malformed calldata",()=>{const a={chainId:1,data:"0x2289b18c0000000000000000000000000000000000000000000000000000000000000080f000000000000000000000000000000000000000000000000000000000000140f000000000000000000000000000000000000000000000000000000000000002",selector:"0x2289b18c",to:o(i),value:s};it("Dynamic leaf length overflow",()=>{const e=[{type:"TUPLE",offset:1},{type:"LEAF",leafType:"DYNAMIC_LEAF"}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!1)}),it("Calldata smaller than dynamic leaf",()=>{const e=[{type:"TUPLE",offset:0},{type:"LEAF",leafType:"DYNAMIC_LEAF"}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!1)}),it("Array length overflow",()=>{const e=[{type:"TUPLE",offset:1},{type:"ARRAY",itemSize:1},{type:"LEAF",leafType:"STATIC_LEAF"}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!1)}),it("Calldata smaller than array length",()=>{const e=[{type:"TUPLE",offset:0},{type:"ARRAY",itemSize:1},{type:"LEAF",leafType:"STATIC_LEAF"}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!1)}),it("Ref out of bounds",()=>{const e=[{type:"TUPLE",offset:1},{type:"REF"},{type:"LEAF",leafType:"STATIC_LEAF"}],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!1)}),it("Empty array",()=>{const e=[],t=c.extractValue(a,e);expect(t.isRight()).toStrictEqual(!1)})})});
2
2
  //# sourceMappingURL=TransactionParserService.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/internal/transaction/service/parser/TransactionParserService.test.ts"],
4
- "sourcesContent": ["import {\n ContainerPath,\n type DataPathElement,\n type TransactionSubset,\n} from \"@ledgerhq/context-module\";\nimport {\n bufferToHexaString,\n ByteArrayBuilder,\n hexaStringToBuffer,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { TransactionParserService } from \"./TransactionParserService\";\n\ndescribe(\"TransactionParserService\", () => {\n const parser = new TransactionParserService();\n\n const TO = hexaStringToBuffer(\"0x3f32cF0B1DF94157EE1c3876c49BE3732C92a98f\")!;\n const VALUE = 81818275935222000n;\n const VALUE_BIN = new ByteArrayBuilder()\n .add256BitUIntToData(81818275935222000n)\n .build();\n\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n describe(\"Container paths\", () => {\n it(\"should extract TO of the container\", () => {\n // GIVEN\n const subset = {\n chainId: 1,\n data: \"0x\",\n selector: \"0x\",\n to: bufferToHexaString(TO),\n value: VALUE,\n };\n\n // WHEN\n const value = parser.extractValue(subset, ContainerPath.TO);\n\n // THEN\n expect(value.isRight()).toStrictEqual(true);\n expect(value.unsafeCoerce()).toStrictEqual([TO]);\n });\n\n it(\"should extract VALUE of the container\", () => {\n // GIVEN\n\n const subset = {\n chainId: 1,\n data: \"0x\",\n selector: \"0x\",\n to: bufferToHexaString(TO),\n value: VALUE,\n };\n\n // WHEN\n const value = parser.extractValue(subset, ContainerPath.VALUE);\n\n // THEN\n expect(value.isRight()).toStrictEqual(true);\n expect(value.unsafeCoerce()).toStrictEqual([VALUE_BIN]);\n });\n\n it(\"Unavailable container fields\", () => {\n // GIVEN\n const subset = {\n chainId: 1,\n data: \"0x\",\n selector: \"0x\",\n to: undefined,\n from: undefined,\n value: VALUE,\n };\n\n // WHEN\n const from = parser.extractValue(subset, ContainerPath.FROM);\n const to = parser.extractValue(subset, ContainerPath.TO);\n\n // THEN\n expect(from.isRight()).toStrictEqual(false);\n expect(to.isRight()).toStrictEqual(false);\n });\n\n it(\"invalid transaction format\", () => {\n // GIVEN\n const transaction = hexaStringToBuffer(\n \"0xdeadbeef\",\n ) as unknown as TransactionSubset;\n\n // WHEN\n const from = parser.extractValue(transaction, ContainerPath.FROM);\n\n // THEN\n expect(from.isRight()).toStrictEqual(false);\n });\n });\n\n describe(\"Data paths in a calldata with static elements\", () => {\n // Example from abi specification:\n // https://docs.soliditylang.org/en/latest/abi-spec.html\n //\n // function baz(uint32 x, bool y)\n // parameters: x = 69\n // y = true\n // calldata:\n // 0xcdcd77c0\n // [0] 0x0000000000000000000000000000000000000000000000000000000000000045\n // [1] 0x0000000000000000000000000000000000000000000000000000000000000001\n const subset = {\n chainId: 1,\n data: \"0xcdcd77c000000000000000000000000000000000000000000000000000000000000000450000000000000000000000000000000000000000000000000000000000000001\",\n selector: \"0xcdcd77c\",\n to: bufferToHexaString(TO),\n value: VALUE,\n };\n\n it(\"Extract the first element\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 0,\n },\n {\n type: \"LEAF\",\n leafType: \"STATIC_LEAF\",\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(true);\n expect(value.unsafeCoerce()).toStrictEqual([\n hexaStringToBuffer(\n \"0x0000000000000000000000000000000000000000000000000000000000000045\",\n )!,\n ]);\n });\n\n it(\"Extract the second element\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 1,\n },\n {\n type: \"LEAF\",\n leafType: \"STATIC_LEAF\",\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(true);\n expect(value.unsafeCoerce()).toStrictEqual([\n hexaStringToBuffer(\n \"0x0000000000000000000000000000000000000000000000000000000000000001\",\n )!,\n ]);\n });\n\n it(\"Slice the static leaf\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 0,\n },\n {\n type: \"LEAF\",\n leafType: \"STATIC_LEAF\",\n },\n {\n type: \"SLICE\",\n start: -4,\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(true);\n expect(value.unsafeCoerce()).toStrictEqual([\n hexaStringToBuffer(\"0x00000045\")!,\n ]);\n });\n\n it(\"Out of bounds\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 2,\n },\n {\n type: \"LEAF\",\n leafType: \"STATIC_LEAF\",\n },\n ];\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(false);\n });\n });\n\n describe(\"Data paths in a calldata with dynamic elements\", () => {\n // Example from abi specification:\n // https://docs.soliditylang.org/en/latest/abi-spec.html\n //\n // function g(uint256[][] x, string[] x)\n // parameters: x = [[1, 2], [3]]\n // y = [\"one\", \"two\", \"three\"]\n // calldata:\n // 0x2289b18c\n // [0] 0x0000000000000000000000000000000000000000000000000000000000000040: offset of x\n // [1] 0x0000000000000000000000000000000000000000000000000000000000000140: offset of y\n // [2] 0x0000000000000000000000000000000000000000000000000000000000000002: length of x\n // [3] 0x0000000000000000000000000000000000000000000000000000000000000040: offset of x[0]\n // [4] 0x00000000000000000000000000000000000000000000000000000000000000a0: offset of x[1]\n // [5] 0x0000000000000000000000000000000000000000000000000000000000000002: length of x[0]\n // [6] 0x0000000000000000000000000000000000000000000000000000000000000001: value of x[0][0] = 1\n // [7] 0x0000000000000000000000000000000000000000000000000000000000000002: value of x[0][1] = 2\n // [8] 0x0000000000000000000000000000000000000000000000000000000000000001: length of x[1]\n // [9] 0x0000000000000000000000000000000000000000000000000000000000000003: value of x[1][0] = 3\n // [10] 0x0000000000000000000000000000000000000000000000000000000000000003: length of y\n // [11] 0x0000000000000000000000000000000000000000000000000000000000000060: offset of y[0]\n // [12] 0x00000000000000000000000000000000000000000000000000000000000000a0: offset of y[1]\n // [13] 0x00000000000000000000000000000000000000000000000000000000000000e0: offset of y[2]\n // [14] 0x0000000000000000000000000000000000000000000000000000000000000003: length of y[0]\n // [15] 0x6f6e650000000000000000000000000000000000000000000000000000000000: value of y[0] = \"one\"\n // [16] 0x0000000000000000000000000000000000000000000000000000000000000003: length of y[1]\n // [17] 0x74776f0000000000000000000000000000000000000000000000000000000000: value of y[1] = \"two\"\n // [18] 0x0000000000000000000000000000000000000000000000000000000000000005: length of y[2]\n // [19] 0x7468726565000000000000000000000000000000000000000000000000000000: value of y[2] = \"three\"\n const subset = {\n to: bufferToHexaString(TO),\n value: VALUE,\n chainId: 1,\n data: \"0x2289b18c000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000036f6e650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000374776f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000057468726565000000000000000000000000000000000000000000000000000000\",\n selector: \"0x2289b18c\",\n };\n it(\"Extract all the elements of x, concatenated together\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 0,\n },\n {\n type: \"REF\",\n },\n {\n type: \"ARRAY\",\n itemSize: 1,\n },\n {\n type: \"REF\",\n },\n {\n type: \"ARRAY\",\n itemSize: 1,\n },\n {\n type: \"LEAF\",\n leafType: \"STATIC_LEAF\",\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(true);\n expect(value.unsafeCoerce()).toStrictEqual([\n hexaStringToBuffer(\n \"0x0000000000000000000000000000000000000000000000000000000000000001\",\n )!,\n hexaStringToBuffer(\n \"0x0000000000000000000000000000000000000000000000000000000000000002\",\n )!,\n hexaStringToBuffer(\n \"0x0000000000000000000000000000000000000000000000000000000000000003\",\n )!,\n ]);\n });\n\n it(\"Extract all the elements of x[0]\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 0,\n },\n {\n type: \"REF\",\n },\n {\n type: \"ARRAY\",\n itemSize: 1,\n start: 0,\n end: 1,\n },\n {\n type: \"REF\",\n },\n {\n type: \"ARRAY\",\n itemSize: 1,\n },\n {\n type: \"LEAF\",\n leafType: \"STATIC_LEAF\",\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(true);\n expect(value.unsafeCoerce()).toStrictEqual([\n hexaStringToBuffer(\n \"0x0000000000000000000000000000000000000000000000000000000000000001\",\n )!,\n hexaStringToBuffer(\n \"0x0000000000000000000000000000000000000000000000000000000000000002\",\n )!,\n ]);\n });\n\n it(\"Extract all the elements of x[0:-1][-1:]\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 0,\n },\n {\n type: \"REF\",\n },\n {\n type: \"ARRAY\",\n itemSize: 1,\n start: 0,\n end: -1,\n },\n {\n type: \"REF\",\n },\n {\n type: \"ARRAY\",\n itemSize: 1,\n start: -1,\n },\n {\n type: \"LEAF\",\n leafType: \"STATIC_LEAF\",\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(true);\n expect(value.unsafeCoerce()).toStrictEqual([\n hexaStringToBuffer(\n \"0x0000000000000000000000000000000000000000000000000000000000000002\",\n )!,\n ]);\n });\n\n it(\"Array out of bounds\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 0,\n },\n {\n type: \"REF\",\n },\n {\n type: \"ARRAY\",\n itemSize: 1,\n start: 0,\n end: 1,\n },\n {\n type: \"REF\",\n },\n {\n type: \"ARRAY\",\n itemSize: 1,\n start: 2,\n end: 3,\n },\n {\n type: \"LEAF\",\n leafType: \"STATIC_LEAF\",\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(false);\n });\n\n it(\"Extract all the elements of x[1]\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 1,\n },\n {\n type: \"REF\",\n },\n {\n type: \"ARRAY\",\n itemSize: 1,\n },\n {\n type: \"REF\",\n },\n {\n type: \"LEAF\",\n leafType: \"DYNAMIC_LEAF\",\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(true);\n expect(value.unsafeCoerce()).toStrictEqual([\n hexaStringToBuffer(\"0x6f6e65\")!,\n hexaStringToBuffer(\"0x74776f\")!,\n hexaStringToBuffer(\"0x7468726565\")!,\n ]);\n });\n\n it(\"Extract all the elements of x[1][:2]\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 1,\n },\n {\n type: \"REF\",\n },\n {\n type: \"ARRAY\",\n itemSize: 1,\n end: 2,\n },\n {\n type: \"REF\",\n },\n {\n type: \"LEAF\",\n leafType: \"DYNAMIC_LEAF\",\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(true);\n expect(value.unsafeCoerce()).toStrictEqual([\n hexaStringToBuffer(\"0x6f6e65\")!,\n hexaStringToBuffer(\"0x74776f\")!,\n ]);\n });\n\n it(\"Slice the dynamic leaf with [1:-2]\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 1,\n },\n {\n type: \"REF\",\n },\n {\n type: \"ARRAY\",\n itemSize: 1,\n start: 2,\n end: 3,\n },\n {\n type: \"REF\",\n },\n {\n type: \"LEAF\",\n leafType: \"DYNAMIC_LEAF\",\n },\n {\n type: \"SLICE\",\n start: 1,\n end: -2,\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(true);\n expect(value.unsafeCoerce()).toStrictEqual([\n hexaStringToBuffer(\"0x6872\")!,\n ]);\n });\n\n it(\"Slice the dynamic leaf with [-1:]\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 1,\n },\n {\n type: \"REF\",\n },\n {\n type: \"ARRAY\",\n itemSize: 1,\n start: 2,\n end: 3,\n },\n {\n type: \"REF\",\n },\n {\n type: \"LEAF\",\n leafType: \"DYNAMIC_LEAF\",\n },\n {\n type: \"SLICE\",\n start: -1,\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(true);\n expect(value.unsafeCoerce()).toStrictEqual([hexaStringToBuffer(\"0x65\")!]);\n });\n\n it(\"Slice the dynamic leaf with [:1]\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 1,\n },\n {\n type: \"REF\",\n },\n {\n type: \"ARRAY\",\n itemSize: 1,\n start: 2,\n end: 3,\n },\n {\n type: \"REF\",\n },\n {\n type: \"LEAF\",\n leafType: \"DYNAMIC_LEAF\",\n },\n {\n type: \"SLICE\",\n end: 1,\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(true);\n expect(value.unsafeCoerce()).toStrictEqual([hexaStringToBuffer(\"0x74\")!]);\n });\n\n it(\"Error no leaf\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 1,\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(false);\n });\n\n it(\"Error slice not at the end\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 1,\n },\n {\n type: \"SLICE\",\n start: 0,\n end: 1,\n },\n {\n type: \"LEAF\",\n leafType: \"STATIC_LEAF\",\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(false);\n });\n\n it(\"Error empty slice\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 1,\n },\n {\n type: \"LEAF\",\n leafType: \"DYNAMIC_LEAF\",\n },\n {\n type: \"SLICE\",\n start: 0,\n end: 0,\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(false);\n });\n });\n\n describe(\"Array of tuples, with bigger itemSize\", () => {\n // Example constructed with an array of tuples just for the tests\n //\n // function baz((uint32, uint32) myTuple[])\n // parameters: myTuple = [ (1, 2), (3, 4), (5, 6) ]\n // calldata:\n // 0xcdcd77c0\n // [0] 0x0000000000000000000000000000000000000000000000000000000000000020\n // [1] 0x0000000000000000000000000000000000000000000000000000000000000003\n // [2] 0x0000000000000000000000000000000000000000000000000000000000000001\n // [3] 0x0000000000000000000000000000000000000000000000000000000000000002\n // [4] 0x0000000000000000000000000000000000000000000000000000000000000003\n // [5] 0x0000000000000000000000000000000000000000000000000000000000000004\n // [6] 0x0000000000000000000000000000000000000000000000000000000000000005\n // [7] 0x0000000000000000000000000000000000000000000000000000000000000006\n const subset = {\n chainId: 1,\n data: \"0xcdcd77c000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000006\",\n selector: \"0xcdcd77c\",\n to: bufferToHexaString(TO),\n value: VALUE,\n };\n\n it(\"Extract the first tuple element of all array elements\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"REF\",\n },\n {\n type: \"ARRAY\",\n itemSize: 2,\n },\n {\n type: \"TUPLE\",\n offset: 0,\n },\n {\n type: \"LEAF\",\n leafType: \"STATIC_LEAF\",\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(true);\n expect(value.unsafeCoerce()).toStrictEqual([\n hexaStringToBuffer(\n \"0x0000000000000000000000000000000000000000000000000000000000000001\",\n )!,\n hexaStringToBuffer(\n \"0x0000000000000000000000000000000000000000000000000000000000000003\",\n )!,\n hexaStringToBuffer(\n \"0x0000000000000000000000000000000000000000000000000000000000000005\",\n )!,\n ]);\n });\n\n it(\"Extract the second tuple element of all array elements\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"REF\",\n },\n {\n type: \"ARRAY\",\n itemSize: 2,\n },\n {\n type: \"TUPLE\",\n offset: 1,\n },\n {\n type: \"LEAF\",\n leafType: \"STATIC_LEAF\",\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(true);\n expect(value.unsafeCoerce()).toStrictEqual([\n hexaStringToBuffer(\n \"0x0000000000000000000000000000000000000000000000000000000000000002\",\n )!,\n hexaStringToBuffer(\n \"0x0000000000000000000000000000000000000000000000000000000000000004\",\n )!,\n hexaStringToBuffer(\n \"0x0000000000000000000000000000000000000000000000000000000000000006\",\n )!,\n ]);\n });\n });\n\n describe(\"Malformed calldata\", () => {\n // Example constructed with invalid data just for the tests\n //\n // calldata:\n // 0x2289b18c\n // [0] 0x0000000000000000000000000000000000000000000000000000000000000080\n // [1] 0xf000000000000000000000000000000000000000000000000000000000000140\n // [2] 0xf000000000000000000000000000000000000000000000000000000000000002\n const subset = {\n chainId: 1,\n data: \"0x2289b18c0000000000000000000000000000000000000000000000000000000000000080f000000000000000000000000000000000000000000000000000000000000140f000000000000000000000000000000000000000000000000000000000000002\",\n selector: \"0x2289b18c\",\n to: bufferToHexaString(TO),\n value: VALUE,\n };\n\n it(\"Dynamic leaf length overflow\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 1,\n },\n {\n type: \"LEAF\",\n leafType: \"DYNAMIC_LEAF\",\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(false);\n });\n\n it(\"Calldata smaller than dynamic leaf\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 0,\n },\n {\n type: \"LEAF\",\n leafType: \"DYNAMIC_LEAF\",\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(false);\n });\n\n it(\"Array length overflow\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 1,\n },\n {\n type: \"ARRAY\",\n itemSize: 1,\n },\n {\n type: \"LEAF\",\n leafType: \"STATIC_LEAF\",\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(false);\n });\n\n it(\"Calldata smaller than array length\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 0,\n },\n {\n type: \"ARRAY\",\n itemSize: 1,\n },\n {\n type: \"LEAF\",\n leafType: \"STATIC_LEAF\",\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(false);\n });\n\n it(\"Ref out of bounds\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 1,\n },\n {\n type: \"REF\",\n },\n {\n type: \"LEAF\",\n leafType: \"STATIC_LEAF\",\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(false);\n });\n });\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {\n ContainerPath,\n type DataPathElement,\n type TransactionSubset,\n} from \"@ledgerhq/context-module\";\nimport {\n bufferToHexaString,\n ByteArrayBuilder,\n hexaStringToBuffer,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { TransactionParserService } from \"./TransactionParserService\";\n\ndescribe(\"TransactionParserService\", () => {\n const parser = new TransactionParserService();\n\n const TO = hexaStringToBuffer(\"0x3f32cF0B1DF94157EE1c3876c49BE3732C92a98f\")!;\n const VALUE = 81818275935222000n;\n const VALUE_BIN = new ByteArrayBuilder()\n .add256BitUIntToData(81818275935222000n)\n .build();\n\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n describe(\"Container paths\", () => {\n it(\"should extract TO of the container\", () => {\n // GIVEN\n const subset = {\n chainId: 1,\n data: \"0x\",\n selector: \"0x\",\n to: bufferToHexaString(TO),\n value: VALUE,\n };\n\n // WHEN\n const value = parser.extractValue(subset, ContainerPath.TO);\n\n // THEN\n expect(value.isRight()).toStrictEqual(true);\n expect(value.unsafeCoerce()).toStrictEqual([TO]);\n });\n\n it(\"should extract VALUE of the container\", () => {\n // GIVEN\n\n const subset = {\n chainId: 1,\n data: \"0x\",\n selector: \"0x\",\n to: bufferToHexaString(TO),\n value: VALUE,\n };\n\n // WHEN\n const value = parser.extractValue(subset, ContainerPath.VALUE);\n\n // THEN\n expect(value.isRight()).toStrictEqual(true);\n expect(value.unsafeCoerce()).toStrictEqual([VALUE_BIN]);\n });\n\n it(\"Unavailable container fields\", () => {\n // GIVEN\n const subset = {\n chainId: 1,\n data: \"0x\",\n selector: \"0x\",\n to: undefined,\n from: undefined,\n value: VALUE,\n };\n\n // WHEN\n const from = parser.extractValue(subset, ContainerPath.FROM);\n const to = parser.extractValue(subset, ContainerPath.TO);\n\n // THEN\n expect(from.isRight()).toStrictEqual(false);\n expect(to.isRight()).toStrictEqual(false);\n });\n\n it(\"invalid transaction format\", () => {\n // GIVEN\n const transaction = hexaStringToBuffer(\n \"0xdeadbeef\",\n ) as unknown as TransactionSubset;\n\n // WHEN\n const from = parser.extractValue(transaction, ContainerPath.FROM);\n\n // THEN\n expect(from.isRight()).toStrictEqual(false);\n });\n });\n\n describe(\"Data paths in a calldata with static elements\", () => {\n // Example from abi specification:\n // https://docs.soliditylang.org/en/latest/abi-spec.html\n //\n // function baz(uint32 x, bool y)\n // parameters: x = 69\n // y = true\n // calldata:\n // 0xcdcd77c0\n // [0] 0x0000000000000000000000000000000000000000000000000000000000000045\n // [1] 0x0000000000000000000000000000000000000000000000000000000000000001\n const subset = {\n chainId: 1,\n data: \"0xcdcd77c000000000000000000000000000000000000000000000000000000000000000450000000000000000000000000000000000000000000000000000000000000001\",\n selector: \"0xcdcd77c\",\n to: bufferToHexaString(TO),\n value: VALUE,\n };\n\n it(\"Extract the first element\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 0,\n },\n {\n type: \"LEAF\",\n leafType: \"STATIC_LEAF\",\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(true);\n expect(value.unsafeCoerce()).toStrictEqual([\n hexaStringToBuffer(\n \"0x0000000000000000000000000000000000000000000000000000000000000045\",\n )!,\n ]);\n });\n\n it(\"Extract the second element\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 1,\n },\n {\n type: \"LEAF\",\n leafType: \"STATIC_LEAF\",\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(true);\n expect(value.unsafeCoerce()).toStrictEqual([\n hexaStringToBuffer(\n \"0x0000000000000000000000000000000000000000000000000000000000000001\",\n )!,\n ]);\n });\n\n it(\"Slice the static leaf\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 0,\n },\n {\n type: \"LEAF\",\n leafType: \"STATIC_LEAF\",\n },\n {\n type: \"SLICE\",\n start: -4,\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(true);\n expect(value.unsafeCoerce()).toStrictEqual([\n hexaStringToBuffer(\"0x00000045\")!,\n ]);\n });\n\n it(\"Out of bounds\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 2,\n },\n {\n type: \"LEAF\",\n leafType: \"STATIC_LEAF\",\n },\n ];\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(false);\n });\n });\n\n describe(\"Data paths in a calldata with dynamic elements\", () => {\n // Example from abi specification:\n // https://docs.soliditylang.org/en/latest/abi-spec.html\n //\n // function g(uint256[][] x, string[] x)\n // parameters: x = [[1, 2], [3]]\n // y = [\"one\", \"two\", \"three\"]\n // calldata:\n // 0x2289b18c\n // [0] 0x0000000000000000000000000000000000000000000000000000000000000040: offset of x\n // [1] 0x0000000000000000000000000000000000000000000000000000000000000140: offset of y\n // [2] 0x0000000000000000000000000000000000000000000000000000000000000002: length of x\n // [3] 0x0000000000000000000000000000000000000000000000000000000000000040: offset of x[0]\n // [4] 0x00000000000000000000000000000000000000000000000000000000000000a0: offset of x[1]\n // [5] 0x0000000000000000000000000000000000000000000000000000000000000002: length of x[0]\n // [6] 0x0000000000000000000000000000000000000000000000000000000000000001: value of x[0][0] = 1\n // [7] 0x0000000000000000000000000000000000000000000000000000000000000002: value of x[0][1] = 2\n // [8] 0x0000000000000000000000000000000000000000000000000000000000000001: length of x[1]\n // [9] 0x0000000000000000000000000000000000000000000000000000000000000003: value of x[1][0] = 3\n // [10] 0x0000000000000000000000000000000000000000000000000000000000000003: length of y\n // [11] 0x0000000000000000000000000000000000000000000000000000000000000060: offset of y[0]\n // [12] 0x00000000000000000000000000000000000000000000000000000000000000a0: offset of y[1]\n // [13] 0x00000000000000000000000000000000000000000000000000000000000000e0: offset of y[2]\n // [14] 0x0000000000000000000000000000000000000000000000000000000000000003: length of y[0]\n // [15] 0x6f6e650000000000000000000000000000000000000000000000000000000000: value of y[0] = \"one\"\n // [16] 0x0000000000000000000000000000000000000000000000000000000000000003: length of y[1]\n // [17] 0x74776f0000000000000000000000000000000000000000000000000000000000: value of y[1] = \"two\"\n // [18] 0x0000000000000000000000000000000000000000000000000000000000000005: length of y[2]\n // [19] 0x7468726565000000000000000000000000000000000000000000000000000000: value of y[2] = \"three\"\n const subset = {\n to: bufferToHexaString(TO),\n value: VALUE,\n chainId: 1,\n data: \"0x2289b18c000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000036f6e650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000374776f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000057468726565000000000000000000000000000000000000000000000000000000\",\n selector: \"0x2289b18c\",\n };\n it(\"Extract all the elements of x, concatenated together\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 0,\n },\n {\n type: \"REF\",\n },\n {\n type: \"ARRAY\",\n itemSize: 1,\n },\n {\n type: \"REF\",\n },\n {\n type: \"ARRAY\",\n itemSize: 1,\n },\n {\n type: \"LEAF\",\n leafType: \"STATIC_LEAF\",\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(true);\n expect(value.unsafeCoerce()).toStrictEqual([\n hexaStringToBuffer(\n \"0x0000000000000000000000000000000000000000000000000000000000000001\",\n )!,\n hexaStringToBuffer(\n \"0x0000000000000000000000000000000000000000000000000000000000000002\",\n )!,\n hexaStringToBuffer(\n \"0x0000000000000000000000000000000000000000000000000000000000000003\",\n )!,\n ]);\n });\n\n it(\"Extract all the elements of x[0]\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 0,\n },\n {\n type: \"REF\",\n },\n {\n type: \"ARRAY\",\n itemSize: 1,\n start: 0,\n end: 1,\n },\n {\n type: \"REF\",\n },\n {\n type: \"ARRAY\",\n itemSize: 1,\n },\n {\n type: \"LEAF\",\n leafType: \"STATIC_LEAF\",\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(true);\n expect(value.unsafeCoerce()).toStrictEqual([\n hexaStringToBuffer(\n \"0x0000000000000000000000000000000000000000000000000000000000000001\",\n )!,\n hexaStringToBuffer(\n \"0x0000000000000000000000000000000000000000000000000000000000000002\",\n )!,\n ]);\n });\n\n it(\"Extract all the elements of x[0:-1][-1:]\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 0,\n },\n {\n type: \"REF\",\n },\n {\n type: \"ARRAY\",\n itemSize: 1,\n start: 0,\n end: -1,\n },\n {\n type: \"REF\",\n },\n {\n type: \"ARRAY\",\n itemSize: 1,\n start: -1,\n },\n {\n type: \"LEAF\",\n leafType: \"STATIC_LEAF\",\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(true);\n expect(value.unsafeCoerce()).toStrictEqual([\n hexaStringToBuffer(\n \"0x0000000000000000000000000000000000000000000000000000000000000002\",\n )!,\n ]);\n });\n\n it(\"Array out of bounds\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 0,\n },\n {\n type: \"REF\",\n },\n {\n type: \"ARRAY\",\n itemSize: 1,\n start: 0,\n end: 1,\n },\n {\n type: \"REF\",\n },\n {\n type: \"ARRAY\",\n itemSize: 1,\n start: 2,\n end: 3,\n },\n {\n type: \"LEAF\",\n leafType: \"STATIC_LEAF\",\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(false);\n });\n\n it(\"Extract all the elements of x[1]\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 1,\n },\n {\n type: \"REF\",\n },\n {\n type: \"ARRAY\",\n itemSize: 1,\n },\n {\n type: \"REF\",\n },\n {\n type: \"LEAF\",\n leafType: \"DYNAMIC_LEAF\",\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(true);\n expect(value.unsafeCoerce()).toStrictEqual([\n hexaStringToBuffer(\"0x6f6e65\")!,\n hexaStringToBuffer(\"0x74776f\")!,\n hexaStringToBuffer(\"0x7468726565\")!,\n ]);\n });\n\n it(\"Extract all the elements of x[1][:2]\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 1,\n },\n {\n type: \"REF\",\n },\n {\n type: \"ARRAY\",\n itemSize: 1,\n end: 2,\n },\n {\n type: \"REF\",\n },\n {\n type: \"LEAF\",\n leafType: \"DYNAMIC_LEAF\",\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(true);\n expect(value.unsafeCoerce()).toStrictEqual([\n hexaStringToBuffer(\"0x6f6e65\")!,\n hexaStringToBuffer(\"0x74776f\")!,\n ]);\n });\n\n it(\"Slice the dynamic leaf with [1:-2]\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 1,\n },\n {\n type: \"REF\",\n },\n {\n type: \"ARRAY\",\n itemSize: 1,\n start: 2,\n end: 3,\n },\n {\n type: \"REF\",\n },\n {\n type: \"LEAF\",\n leafType: \"DYNAMIC_LEAF\",\n },\n {\n type: \"SLICE\",\n start: 1,\n end: -2,\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(true);\n expect(value.unsafeCoerce()).toStrictEqual([\n hexaStringToBuffer(\"0x6872\")!,\n ]);\n });\n\n it(\"Slice the dynamic leaf with [-1:]\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 1,\n },\n {\n type: \"REF\",\n },\n {\n type: \"ARRAY\",\n itemSize: 1,\n start: 2,\n end: 3,\n },\n {\n type: \"REF\",\n },\n {\n type: \"LEAF\",\n leafType: \"DYNAMIC_LEAF\",\n },\n {\n type: \"SLICE\",\n start: -1,\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(true);\n expect(value.unsafeCoerce()).toStrictEqual([hexaStringToBuffer(\"0x65\")!]);\n });\n\n it(\"Slice the dynamic leaf with [:1]\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 1,\n },\n {\n type: \"REF\",\n },\n {\n type: \"ARRAY\",\n itemSize: 1,\n start: 2,\n end: 3,\n },\n {\n type: \"REF\",\n },\n {\n type: \"LEAF\",\n leafType: \"DYNAMIC_LEAF\",\n },\n {\n type: \"SLICE\",\n end: 1,\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(true);\n expect(value.unsafeCoerce()).toStrictEqual([hexaStringToBuffer(\"0x74\")!]);\n });\n\n it(\"Error no leaf\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 1,\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(false);\n });\n\n it(\"Error slice not at the end\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 1,\n },\n {\n type: \"SLICE\",\n start: 0,\n end: 1,\n },\n {\n type: \"LEAF\",\n leafType: \"STATIC_LEAF\",\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(false);\n });\n\n it(\"Error empty slice\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 1,\n },\n {\n type: \"LEAF\",\n leafType: \"DYNAMIC_LEAF\",\n },\n {\n type: \"SLICE\",\n start: 0,\n end: 0,\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(false);\n });\n });\n\n describe(\"Array of tuples, with bigger itemSize\", () => {\n // Example constructed with an array of tuples just for the tests\n //\n // function baz((uint32, uint32) myTuple[])\n // parameters: myTuple = [ (1, 2), (3, 4), (5, 6) ]\n // calldata:\n // 0xcdcd77c0\n // [0] 0x0000000000000000000000000000000000000000000000000000000000000020\n // [1] 0x0000000000000000000000000000000000000000000000000000000000000003\n // [2] 0x0000000000000000000000000000000000000000000000000000000000000001\n // [3] 0x0000000000000000000000000000000000000000000000000000000000000002\n // [4] 0x0000000000000000000000000000000000000000000000000000000000000003\n // [5] 0x0000000000000000000000000000000000000000000000000000000000000004\n // [6] 0x0000000000000000000000000000000000000000000000000000000000000005\n // [7] 0x0000000000000000000000000000000000000000000000000000000000000006\n const subset = {\n chainId: 1,\n data: \"0xcdcd77c000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000006\",\n selector: \"0xcdcd77c\",\n to: bufferToHexaString(TO),\n value: VALUE,\n };\n\n it(\"Extract the first tuple element of all array elements\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"REF\",\n },\n {\n type: \"ARRAY\",\n itemSize: 2,\n },\n {\n type: \"TUPLE\",\n offset: 0,\n },\n {\n type: \"LEAF\",\n leafType: \"STATIC_LEAF\",\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(true);\n expect(value.unsafeCoerce()).toStrictEqual([\n hexaStringToBuffer(\n \"0x0000000000000000000000000000000000000000000000000000000000000001\",\n )!,\n hexaStringToBuffer(\n \"0x0000000000000000000000000000000000000000000000000000000000000003\",\n )!,\n hexaStringToBuffer(\n \"0x0000000000000000000000000000000000000000000000000000000000000005\",\n )!,\n ]);\n });\n\n it(\"Extract the second tuple element of all array elements\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"REF\",\n },\n {\n type: \"ARRAY\",\n itemSize: 2,\n },\n {\n type: \"TUPLE\",\n offset: 1,\n },\n {\n type: \"LEAF\",\n leafType: \"STATIC_LEAF\",\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(true);\n expect(value.unsafeCoerce()).toStrictEqual([\n hexaStringToBuffer(\n \"0x0000000000000000000000000000000000000000000000000000000000000002\",\n )!,\n hexaStringToBuffer(\n \"0x0000000000000000000000000000000000000000000000000000000000000004\",\n )!,\n hexaStringToBuffer(\n \"0x0000000000000000000000000000000000000000000000000000000000000006\",\n )!,\n ]);\n });\n });\n\n describe(\"Malformed calldata\", () => {\n // Example constructed with invalid data just for the tests\n //\n // calldata:\n // 0x2289b18c\n // [0] 0x0000000000000000000000000000000000000000000000000000000000000080\n // [1] 0xf000000000000000000000000000000000000000000000000000000000000140\n // [2] 0xf000000000000000000000000000000000000000000000000000000000000002\n const subset = {\n chainId: 1,\n data: \"0x2289b18c0000000000000000000000000000000000000000000000000000000000000080f000000000000000000000000000000000000000000000000000000000000140f000000000000000000000000000000000000000000000000000000000000002\",\n selector: \"0x2289b18c\",\n to: bufferToHexaString(TO),\n value: VALUE,\n };\n\n it(\"Dynamic leaf length overflow\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 1,\n },\n {\n type: \"LEAF\",\n leafType: \"DYNAMIC_LEAF\",\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(false);\n });\n\n it(\"Calldata smaller than dynamic leaf\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 0,\n },\n {\n type: \"LEAF\",\n leafType: \"DYNAMIC_LEAF\",\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(false);\n });\n\n it(\"Array length overflow\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 1,\n },\n {\n type: \"ARRAY\",\n itemSize: 1,\n },\n {\n type: \"LEAF\",\n leafType: \"STATIC_LEAF\",\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(false);\n });\n\n it(\"Calldata smaller than array length\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 0,\n },\n {\n type: \"ARRAY\",\n itemSize: 1,\n },\n {\n type: \"LEAF\",\n leafType: \"STATIC_LEAF\",\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(false);\n });\n\n it(\"Ref out of bounds\", () => {\n // GIVEN\n const path: DataPathElement[] = [\n {\n type: \"TUPLE\",\n offset: 1,\n },\n {\n type: \"REF\",\n },\n {\n type: \"LEAF\",\n leafType: \"STATIC_LEAF\",\n },\n ];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(false);\n });\n\n it(\"Empty array\", () => {\n // GIVEN\n const path: DataPathElement[] = [];\n\n // WHEN\n const value = parser.extractValue(subset, path);\n\n // THEN\n expect(value.isRight()).toStrictEqual(false);\n });\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["ContainerPath", "bufferToHexaString", "ByteArrayBuilder", "hexaStringToBuffer", "TransactionParserService", "parser", "TO", "VALUE", "VALUE_BIN", "subset", "value", "from", "to", "transaction", "path"]
7
7
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ledgerhq/device-signer-kit-ethereum",
3
- "version": "1.7.0",
3
+ "version": "1.9.0",
4
4
  "private": false,
5
5
  "license": "Apache-2.0",
6
6
  "exports": {
@@ -35,7 +35,7 @@
35
35
  "test:coverage": "vitest run --coverage"
36
36
  },
37
37
  "dependencies": {
38
- "@ledgerhq/signer-utils": "workspace:*",
38
+ "@ledgerhq/signer-utils": "^1.1.0",
39
39
  "ethers": "catalog:",
40
40
  "inversify": "catalog:",
41
41
  "purify-ts": "catalog:",
@@ -3,8 +3,10 @@ import { type SignDelegationAuthorizationDAReturnType } from "./app-binder/SignD
3
3
  import { type SignPersonalMessageDAReturnType } from "./app-binder/SignPersonalMessageDeviceActionTypes";
4
4
  import { type SignTransactionDAReturnType } from "./app-binder/SignTransactionDeviceActionTypes";
5
5
  import { type SignTypedDataDAReturnType } from "./app-binder/SignTypedDataDeviceActionTypes";
6
+ import { type VerifySafeAddressDAReturnType } from "./app-binder/VerifySafeAddressDeviceActionTypes";
6
7
  import { type AddressOptions } from "./model/AddressOptions";
7
8
  import { type MessageOptions } from "./model/MessageOptions";
9
+ import { type SafeAddressOptions } from "./model/SafeAddressOptions";
8
10
  import { type TransactionOptions } from "./model/TransactionOptions";
9
11
  import { type TypedData } from "./model/TypedData";
10
12
  import { type TypedDataOptions } from "./model/TypedDataOptions";
@@ -13,6 +15,7 @@ export interface SignerEth {
13
15
  signMessage: (derivationPath: string, message: string | Uint8Array, options?: MessageOptions) => SignPersonalMessageDAReturnType;
14
16
  signTypedData: (derivationPath: string, typedData: TypedData, options?: TypedDataOptions) => SignTypedDataDAReturnType;
15
17
  getAddress: (derivationPath: string, options?: AddressOptions) => GetAddressDAReturnType;
18
+ verifySafeAddress: (safeContractAddress: string, options?: SafeAddressOptions) => VerifySafeAddressDAReturnType;
16
19
  signDelegationAuthorization: (derivationPath: string, chainId: number, contractAddress: string, nonce: number) => SignDelegationAuthorizationDAReturnType;
17
20
  }
18
21
  //# sourceMappingURL=SignerEth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SignerEth.d.ts","sourceRoot":"","sources":["../../../src/api/SignerEth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAC1F,OAAO,EAAE,KAAK,uCAAuC,EAAE,MAAM,kDAAkD,CAAC;AAChH,OAAO,EAAE,KAAK,+BAA+B,EAAE,MAAM,sDAAsD,CAAC;AAC5G,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,kDAAkD,CAAC;AACpG,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,gDAAgD,CAAC;AAChG,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAEpE,MAAM,WAAW,SAAS;IACxB,eAAe,EAAE,CACf,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,UAAU,EACvB,OAAO,CAAC,EAAE,kBAAkB,KACzB,2BAA2B,CAAC;IACjC,WAAW,EAAE,CACX,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,GAAG,UAAU,EAC5B,OAAO,CAAC,EAAE,cAAc,KACrB,+BAA+B,CAAC;IACrC,aAAa,EAAE,CACb,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,SAAS,EACpB,OAAO,CAAC,EAAE,gBAAgB,KACvB,yBAAyB,CAAC;IAC/B,UAAU,EAAE,CACV,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,cAAc,KACrB,sBAAsB,CAAC;IAC5B,2BAA2B,EAAE,CAC3B,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE,MAAM,KACV,uCAAuC,CAAC;CAC9C"}
1
+ {"version":3,"file":"SignerEth.d.ts","sourceRoot":"","sources":["../../../src/api/SignerEth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAC1F,OAAO,EAAE,KAAK,uCAAuC,EAAE,MAAM,kDAAkD,CAAC;AAChH,OAAO,EAAE,KAAK,+BAA+B,EAAE,MAAM,sDAAsD,CAAC;AAC5G,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,kDAAkD,CAAC;AACpG,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,gDAAgD,CAAC;AAChG,OAAO,EAAE,KAAK,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACxG,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAEpE,MAAM,WAAW,SAAS;IACxB,eAAe,EAAE,CACf,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,UAAU,EACvB,OAAO,CAAC,EAAE,kBAAkB,KACzB,2BAA2B,CAAC;IACjC,WAAW,EAAE,CACX,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,GAAG,UAAU,EAC5B,OAAO,CAAC,EAAE,cAAc,KACrB,+BAA+B,CAAC;IACrC,aAAa,EAAE,CACb,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,SAAS,EACpB,OAAO,CAAC,EAAE,gBAAgB,KACvB,yBAAyB,CAAC;IAC/B,UAAU,EAAE,CACV,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,cAAc,KACrB,sBAAsB,CAAC;IAC5B,iBAAiB,EAAE,CACjB,mBAAmB,EAAE,MAAM,EAC3B,OAAO,CAAC,EAAE,kBAAkB,KACzB,6BAA6B,CAAC;IACnC,2BAA2B,EAAE,CAC3B,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE,MAAM,KACV,uCAAuC,CAAC;CAC9C"}
@@ -1,4 +1,4 @@
1
- import { type ClearSignContextSuccess, type ContextModule, type TransactionSubset } from "@ledgerhq/context-module";
1
+ import { type ContextModule, type TransactionSubset } from "@ledgerhq/context-module";
2
2
  import { type CommandErrorResult, type DeviceActionState, type ExecuteDeviceActionReturnType, type OpenAppDAError, type OpenAppDARequiredInteraction, type UserInteractionRequired } from "@ledgerhq/device-management-kit";
3
3
  import { type GetConfigCommandResponse } from "../app-binder/GetConfigCommandTypes";
4
4
  import { type ClearSigningType } from "../model/ClearSigningType";
@@ -6,6 +6,7 @@ import { type Signature } from "../model/Signature";
6
6
  import { type TransactionOptions } from "../model/TransactionOptions";
7
7
  import { type TransactionType } from "../model/TransactionType";
8
8
  import { type EthErrorCodes } from "../../internal/app-binder/command/utils/ethAppErrors";
9
+ import { type ContextWithSubContexts } from "../../internal/app-binder/task/BuildFullContextsTask";
9
10
  import { type TransactionMapperService } from "../../internal/transaction/service/mapper/TransactionMapperService";
10
11
  import { type TransactionParserService } from "../../internal/transaction/service/parser/TransactionParserService";
11
12
  export declare enum SignTransactionDAStep {
@@ -13,10 +14,11 @@ export declare enum SignTransactionDAStep {
13
14
  GET_APP_CONFIG = "signer.eth.steps.getAppConfig",
14
15
  WEB3_CHECKS_OPT_IN = "signer.eth.steps.web3ChecksOptIn",
15
16
  WEB3_CHECKS_OPT_IN_RESULT = "signer.eth.steps.web3ChecksOptInResult",
16
- PRE_BUILD_CONTEXT = "signer.eth.steps.preBuildContext",
17
- BUILD_CONTEXT = "signer.eth.steps.buildContext",
18
- BUILD_SUB_CONTEXT_AND_PROVIDE = "signer.eth.steps.buildSubContextAndProvide",
19
- SIGN_TRANSACTION = "signer.eth.steps.signTransaction"
17
+ PARSE_TRANSACTION = "signer.eth.steps.parseTransaction",
18
+ BUILD_CONTEXTS = "signer.eth.steps.buildContexts",
19
+ PROVIDE_CONTEXTS = "signer.eth.steps.provideContexts",
20
+ SIGN_TRANSACTION = "signer.eth.steps.signTransaction",
21
+ BLIND_SIGN_TRANSACTION_FALLBACK = "signer.eth.steps.blindSignTransactionFallback"
20
22
  }
21
23
  export type SignTransactionDAOutput = Signature;
22
24
  export type SignTransactionDAInput = {
@@ -41,11 +43,10 @@ export type SignTransactionDAState = DeviceActionState<SignTransactionDAOutput,
41
43
  export type SignTransactionDAInternalState = {
42
44
  readonly error: SignTransactionDAError | null;
43
45
  readonly appConfig: GetConfigCommandResponse | null;
44
- readonly clearSignContexts: ClearSignContextSuccess[] | null;
45
- readonly clearSignContextsOptional: ClearSignContextSuccess[] | null;
46
46
  readonly subset: TransactionSubset | null;
47
- readonly transactionType: TransactionType | null;
47
+ readonly contexts: ContextWithSubContexts[];
48
48
  readonly clearSigningType: ClearSigningType | null;
49
+ readonly transactionType: TransactionType | null;
49
50
  readonly signature: Signature | null;
50
51
  };
51
52
  export type SignTransactionDAReturnType = ExecuteDeviceActionReturnType<SignTransactionDAOutput, SignTransactionDAError, SignTransactionDAIntermediateValue>;
@@ -1 +1 @@
1
- {"version":3,"file":"SignTransactionDeviceActionTypes.d.ts","sourceRoot":"","sources":["../../../../src/api/app-binder/SignTransactionDeviceActionTypes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SignTransactionDeviceActionTypes.d.ts","sourceRoot":"","sources":["../../../../src/api/app-binder/SignTransactionDeviceActionTypes.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,8 @@ import { type Signature } from "../model/Signature";
5
5
  import { type TypedData } from "../model/TypedData";
6
6
  import { type EthErrorCodes } from "../../internal/app-binder/command/utils/ethAppErrors";
7
7
  import type { ProvideEIP712ContextTaskArgs } from "../../internal/app-binder/task/ProvideEIP712ContextTask";
8
+ import { type TransactionMapperService } from "../../internal/transaction/service/mapper/TransactionMapperService";
9
+ import { type TransactionParserService } from "../../internal/transaction/service/parser/TransactionParserService";
8
10
  import { type TypedDataParserService } from "../../internal/typed-data/service/TypedDataParserService";
9
11
  export declare enum SignTypedDataDAStateStep {
10
12
  OPEN_APP = "signer.eth.steps.openApp",
@@ -22,6 +24,8 @@ export type SignTypedDataDAInput = {
22
24
  readonly derivationPath: string;
23
25
  readonly data: TypedData;
24
26
  readonly parser: TypedDataParserService;
27
+ readonly transactionMapper: TransactionMapperService;
28
+ readonly transactionParser: TransactionParserService;
25
29
  readonly contextModule: ContextModule;
26
30
  readonly skipOpenApp: boolean;
27
31
  };
@@ -1 +1 @@
1
- {"version":3,"file":"SignTypedDataDeviceActionTypes.d.ts","sourceRoot":"","sources":["../../../../src/api/app-binder/SignTypedDataDeviceActionTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,6BAA6B,EAClC,KAAK,cAAc,EACnB,KAAK,4BAA4B,EACjC,KAAK,uBAAuB,EAC7B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACtF,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,iDAAiD,CAAC;AACrF,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,oDAAoD,CAAC;AACvG,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,qDAAqD,CAAC;AAElG,oBAAY,wBAAwB;IAClC,QAAQ,6BAA6B;IACrC,cAAc,kCAAkC;IAChD,kBAAkB,qCAAqC;IACvD,yBAAyB,2CAA2C;IACpE,aAAa,kCAAkC;IAC/C,eAAe,oCAAoC;IACnD,uBAAuB,2CAA2C;IAClE,eAAe,mCAAmC;IAClD,sBAAsB,yCAAyC;CAChE;AAED,MAAM,MAAM,qBAAqB,GAAG,SAAS,CAAC;AAE9C,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAC5B,cAAc,GACd,kBAAkB,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC;AAE/C,KAAK,kCAAkC,GACnC,4BAA4B,GAC5B,uBAAuB,CAAC,eAAe,GACvC,uBAAuB,CAAC,aAAa,CAAC;AAE1C,MAAM,MAAM,gCAAgC,GACxC;IACE,uBAAuB,EAAE,kCAAkC,CAAC;IAC5D,IAAI,EAAE,OAAO,CACX,wBAAwB,EACxB,wBAAwB,CAAC,yBAAyB,CACnD,CAAC;CACH,GACD;IACE,uBAAuB,EAAE,uBAAuB,CAAC,IAAI,CAAC;IACtD,IAAI,EAAE,wBAAwB,CAAC,yBAAyB,CAAC;IACzD,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEN,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,CAClD,qBAAqB,EACrB,oBAAoB,EACpB,gCAAgC,CACjC,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,QAAQ,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,wBAAwB,GAAG,IAAI,CAAC;IACpD,QAAQ,CAAC,gBAAgB,EAAE,4BAA4B,GAAG,IAAI,CAAC;IAC/D,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,6BAA6B,CACnE,qBAAqB,EACrB,oBAAoB,EACpB,gCAAgC,CACjC,CAAC"}
1
+ {"version":3,"file":"SignTypedDataDeviceActionTypes.d.ts","sourceRoot":"","sources":["../../../../src/api/app-binder/SignTypedDataDeviceActionTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,6BAA6B,EAClC,KAAK,cAAc,EACnB,KAAK,4BAA4B,EACjC,KAAK,uBAAuB,EAC7B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACtF,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,iDAAiD,CAAC;AACrF,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,oDAAoD,CAAC;AACvG,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,+DAA+D,CAAC;AAC9G,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,+DAA+D,CAAC;AAC9G,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,qDAAqD,CAAC;AAElG,oBAAY,wBAAwB;IAClC,QAAQ,6BAA6B;IACrC,cAAc,kCAAkC;IAChD,kBAAkB,qCAAqC;IACvD,yBAAyB,2CAA2C;IACpE,aAAa,kCAAkC;IAC/C,eAAe,oCAAoC;IACnD,uBAAuB,2CAA2C;IAClE,eAAe,mCAAmC;IAClD,sBAAsB,yCAAyC;CAChE;AAED,MAAM,MAAM,qBAAqB,GAAG,SAAS,CAAC;AAE9C,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;IACxC,QAAQ,CAAC,iBAAiB,EAAE,wBAAwB,CAAC;IACrD,QAAQ,CAAC,iBAAiB,EAAE,wBAAwB,CAAC;IACrD,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAC5B,cAAc,GACd,kBAAkB,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC;AAE/C,KAAK,kCAAkC,GACnC,4BAA4B,GAC5B,uBAAuB,CAAC,eAAe,GACvC,uBAAuB,CAAC,aAAa,CAAC;AAE1C,MAAM,MAAM,gCAAgC,GACxC;IACE,uBAAuB,EAAE,kCAAkC,CAAC;IAC5D,IAAI,EAAE,OAAO,CACX,wBAAwB,EACxB,wBAAwB,CAAC,yBAAyB,CACnD,CAAC;CACH,GACD;IACE,uBAAuB,EAAE,uBAAuB,CAAC,IAAI,CAAC;IACtD,IAAI,EAAE,wBAAwB,CAAC,yBAAyB,CAAC;IACzD,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEN,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,CAClD,qBAAqB,EACrB,oBAAoB,EACpB,gCAAgC,CACjC,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,QAAQ,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,wBAAwB,GAAG,IAAI,CAAC;IACpD,QAAQ,CAAC,gBAAgB,EAAE,4BAA4B,GAAG,IAAI,CAAC;IAC/D,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,6BAA6B,CACnE,qBAAqB,EACrB,oBAAoB,EACpB,gCAAgC,CACjC,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { type ClearSignContextSuccess, type ContextModule } from "@ledgerhq/context-module";
2
+ import { type CommandErrorResult, type DeviceActionState, type ExecuteDeviceActionReturnType, type OpenAppDAError, type OpenAppDARequiredInteraction, type UserInteractionRequired } from "@ledgerhq/device-management-kit";
3
+ import { type SafeAddressOptions } from "../model/SafeAddressOptions";
4
+ import { type EthErrorCodes } from "../../internal/app-binder/command/utils/ethAppErrors";
5
+ export declare enum VerifySafeAddressDAStep {
6
+ OPEN_APP = "signer.eth.steps.openApp",
7
+ BUILD_CONTEXTS = "signer.eth.steps.buildContexts",
8
+ PROVIDE_CONTEXTS = "signer.eth.steps.provideContexts",
9
+ VERIFY_SAFE_ADDRESS = "signer.eth.steps.verifySafeAddress"
10
+ }
11
+ export type VerifySafeAddressDAOutput = void;
12
+ export type VerifySafeAddressDAInput = {
13
+ readonly safeContractAddress: string;
14
+ readonly contextModule: ContextModule;
15
+ readonly options: SafeAddressOptions;
16
+ };
17
+ export type VerifySafeAddressDAError = OpenAppDAError | CommandErrorResult<EthErrorCodes>["error"];
18
+ type VerifySafeAddressDARequiredInteraction = OpenAppDARequiredInteraction | UserInteractionRequired.VerifySafeAddress;
19
+ export type VerifySafeAddressDAIntermediateValue = {
20
+ requiredUserInteraction: VerifySafeAddressDARequiredInteraction;
21
+ step: VerifySafeAddressDAStep;
22
+ };
23
+ export type VerifySafeAddressDAState = DeviceActionState<VerifySafeAddressDAOutput, VerifySafeAddressDAError, VerifySafeAddressDAIntermediateValue>;
24
+ export type VerifySafeAddressDAInternalState = {
25
+ readonly error: VerifySafeAddressDAError | null;
26
+ readonly contexts: ClearSignContextSuccess[];
27
+ };
28
+ export type VerifySafeAddressDAReturnType = ExecuteDeviceActionReturnType<VerifySafeAddressDAOutput, VerifySafeAddressDAError, VerifySafeAddressDAIntermediateValue>;
29
+ export {};
30
+ //# sourceMappingURL=VerifySafeAddressDeviceActionTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VerifySafeAddressDeviceActionTypes.d.ts","sourceRoot":"","sources":["../../../../src/api/app-binder/VerifySafeAddressDeviceActionTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,aAAa,EACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,6BAA6B,EAClC,KAAK,cAAc,EACnB,KAAK,4BAA4B,EACjC,KAAK,uBAAuB,EAC7B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,iDAAiD,CAAC;AAErF,oBAAY,uBAAuB;IACjC,QAAQ,6BAA6B;IACrC,cAAc,mCAAmC;IACjD,gBAAgB,qCAAqC;IACrD,mBAAmB,uCAAuC;CAC3D;AAED,MAAM,MAAM,yBAAyB,GAAG,IAAI,CAAC;AAE7C,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAChC,cAAc,GACd,kBAAkB,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC;AAE/C,KAAK,sCAAsC,GACvC,4BAA4B,GAC5B,uBAAuB,CAAC,iBAAiB,CAAC;AAE9C,MAAM,MAAM,oCAAoC,GAAG;IACjD,uBAAuB,EAAE,sCAAsC,CAAC;IAChE,IAAI,EAAE,uBAAuB,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,iBAAiB,CACtD,yBAAyB,EACzB,wBAAwB,EACxB,oCAAoC,CACrC,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,QAAQ,CAAC,KAAK,EAAE,wBAAwB,GAAG,IAAI,CAAC;IAChD,QAAQ,CAAC,QAAQ,EAAE,uBAAuB,EAAE,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG,6BAA6B,CACvE,yBAAyB,EACzB,wBAAwB,EACxB,oCAAoC,CACrC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export type SafeAddressOptions = {
2
+ chainId: number;
3
+ skipOpenApp?: boolean;
4
+ };
5
+ //# sourceMappingURL=SafeAddressOptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SafeAddressOptions.d.ts","sourceRoot":"","sources":["../../../../src/api/model/SafeAddressOptions.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC"}
@@ -5,8 +5,10 @@ import { type SignDelegationAuthorizationDAReturnType } from "../api/app-binder/
5
5
  import { type SignPersonalMessageDAReturnType } from "../api/app-binder/SignPersonalMessageDeviceActionTypes";
6
6
  import { type SignTransactionDAReturnType } from "../api/app-binder/SignTransactionDeviceActionTypes";
7
7
  import { type SignTypedDataDAReturnType } from "../api/app-binder/SignTypedDataDeviceActionTypes";
8
+ import { type VerifySafeAddressDAReturnType } from "../api/app-binder/VerifySafeAddressDeviceActionTypes";
8
9
  import { type AddressOptions } from "../api/model/AddressOptions";
9
10
  import { type MessageOptions } from "../api/model/MessageOptions";
11
+ import { type SafeAddressOptions } from "../api/model/SafeAddressOptions";
10
12
  import { type TransactionOptions } from "../api/model/TransactionOptions";
11
13
  import { type TypedData } from "../api/model/TypedData";
12
14
  import { type TypedDataOptions } from "../api/model/TypedDataOptions";
@@ -23,6 +25,7 @@ export declare class DefaultSignerEth implements SignerEth {
23
25
  signMessage(derivationPath: string, message: string | Uint8Array, options?: MessageOptions): SignPersonalMessageDAReturnType;
24
26
  signTypedData(derivationPath: string, typedData: TypedData, options?: TypedDataOptions): SignTypedDataDAReturnType;
25
27
  getAddress(derivationPath: string, options?: AddressOptions): GetAddressDAReturnType;
28
+ verifySafeAddress(safeContractAddress: string, options?: SafeAddressOptions): VerifySafeAddressDAReturnType;
26
29
  signDelegationAuthorization(derivationPath: string, chainId: number, contractAddress: string, nonce: number): SignDelegationAuthorizationDAReturnType;
27
30
  }
28
31
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultSignerEth.d.ts","sourceRoot":"","sources":["../../../src/internal/DefaultSignerEth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACrB,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAC1F,OAAO,EAAE,KAAK,uCAAuC,EAAE,MAAM,kDAAkD,CAAC;AAChH,OAAO,EAAE,KAAK,+BAA+B,EAAE,MAAM,sDAAsD,CAAC;AAC5G,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,kDAAkD,CAAC;AACpG,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,gDAAgD,CAAC;AAChG,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAchD,KAAK,4BAA4B,GAAG;IAClC,GAAG,EAAE,mBAAmB,CAAC;IACzB,SAAS,EAAE,eAAe,CAAC;IAC3B,aAAa,EAAE,aAAa,CAAC;CAC9B,CAAC;AAEF,qBAAa,gBAAiB,YAAW,SAAS;IAChD,OAAO,CAAC,UAAU,CAAY;gBAElB,EAAE,GAAG,EAAE,SAAS,EAAE,aAAa,EAAE,EAAE,4BAA4B;IAI3E,eAAe,CACb,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,UAAU,EACvB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,2BAA2B;IAM9B,WAAW,CACT,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,GAAG,UAAU,EAC5B,OAAO,CAAC,EAAE,cAAc,GACvB,+BAA+B;IAMlC,aAAa,CACX,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,SAAS,EACpB,OAAO,CAAC,EAAE,gBAAgB,GACzB,yBAAyB;IAM5B,UAAU,CACR,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,cAAc,GACvB,sBAAsB;IAMzB,2BAA2B,CACzB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE,MAAM,GACZ,uCAAuC;CAO3C"}
1
+ {"version":3,"file":"DefaultSignerEth.d.ts","sourceRoot":"","sources":["../../../src/internal/DefaultSignerEth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACrB,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAC1F,OAAO,EAAE,KAAK,uCAAuC,EAAE,MAAM,kDAAkD,CAAC;AAChH,OAAO,EAAE,KAAK,+BAA+B,EAAE,MAAM,sDAAsD,CAAC;AAC5G,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,kDAAkD,CAAC;AACpG,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,gDAAgD,CAAC;AAChG,OAAO,EAAE,KAAK,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACxG,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAgBhD,KAAK,4BAA4B,GAAG;IAClC,GAAG,EAAE,mBAAmB,CAAC;IACzB,SAAS,EAAE,eAAe,CAAC;IAC3B,aAAa,EAAE,aAAa,CAAC;CAC9B,CAAC;AAEF,qBAAa,gBAAiB,YAAW,SAAS;IAChD,OAAO,CAAC,UAAU,CAAY;gBAElB,EAAE,GAAG,EAAE,SAAS,EAAE,aAAa,EAAE,EAAE,4BAA4B;IAI3E,eAAe,CACb,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,UAAU,EACvB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,2BAA2B;IAM9B,WAAW,CACT,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,GAAG,UAAU,EAC5B,OAAO,CAAC,EAAE,cAAc,GACvB,+BAA+B;IAMlC,aAAa,CACX,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,SAAS,EACpB,OAAO,CAAC,EAAE,gBAAgB,GACzB,yBAAyB;IAM5B,UAAU,CACR,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,cAAc,GACvB,sBAAsB;IAMzB,iBAAiB,CACf,mBAAmB,EAAE,MAAM,EAC3B,OAAO,CAAC,EAAE,kBAAkB,GAC3B,6BAA6B;IAMhC,2BAA2B,CACzB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE,MAAM,GACZ,uCAAuC;CAO3C"}