@ledgerhq/coin-tezos 6.6.0-nightly.1 → 6.6.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 (331) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/.unimportedrc.json +30 -4
  3. package/CHANGELOG.md +17 -8
  4. package/jest.integ.config.js +0 -1
  5. package/lib/api/index.d.ts.map +1 -1
  6. package/lib/api/index.js +40 -188
  7. package/lib/api/index.js.map +1 -1
  8. package/lib/api/index.test.js +10 -79
  9. package/lib/api/index.test.js.map +1 -1
  10. package/lib/api/types.d.ts +5 -7
  11. package/lib/api/types.d.ts.map +1 -1
  12. package/lib/bridge/broadcast.d.ts +4 -0
  13. package/lib/bridge/broadcast.d.ts.map +1 -0
  14. package/lib/bridge/broadcast.js +11 -0
  15. package/lib/bridge/broadcast.js.map +1 -0
  16. package/lib/bridge/broadcast.test.d.ts +2 -0
  17. package/lib/bridge/broadcast.test.d.ts.map +1 -0
  18. package/lib/bridge/broadcast.test.js +36 -0
  19. package/lib/bridge/broadcast.test.js.map +1 -0
  20. package/lib/bridge/buildOptimisticOperation.d.ts +4 -0
  21. package/lib/bridge/buildOptimisticOperation.d.ts.map +1 -0
  22. package/lib/bridge/buildOptimisticOperation.js +28 -0
  23. package/lib/bridge/buildOptimisticOperation.js.map +1 -0
  24. package/lib/bridge/createTransaction.d.ts +4 -0
  25. package/lib/bridge/createTransaction.d.ts.map +1 -0
  26. package/lib/bridge/createTransaction.js +24 -0
  27. package/lib/bridge/createTransaction.js.map +1 -0
  28. package/lib/bridge/estimateMaxSpendable.d.ts +5 -0
  29. package/lib/bridge/estimateMaxSpendable.d.ts.map +1 -0
  30. package/lib/bridge/estimateMaxSpendable.js +30 -0
  31. package/lib/bridge/estimateMaxSpendable.js.map +1 -0
  32. package/lib/bridge/getFeesForTransaction.d.ts +21 -0
  33. package/lib/bridge/getFeesForTransaction.d.ts.map +1 -0
  34. package/lib/bridge/getFeesForTransaction.js +39 -0
  35. package/lib/bridge/getFeesForTransaction.js.map +1 -0
  36. package/lib/bridge/getTransactionStatus.d.ts +4 -0
  37. package/lib/bridge/getTransactionStatus.d.ts.map +1 -0
  38. package/lib/bridge/getTransactionStatus.js +108 -0
  39. package/lib/bridge/getTransactionStatus.js.map +1 -0
  40. package/lib/bridge/getTransactionStatus.test.d.ts +2 -0
  41. package/lib/bridge/getTransactionStatus.test.d.ts.map +1 -0
  42. package/lib/bridge/getTransactionStatus.test.js +107 -0
  43. package/lib/bridge/getTransactionStatus.test.js.map +1 -0
  44. package/lib/bridge/index.d.ts +10 -0
  45. package/lib/bridge/index.d.ts.map +1 -0
  46. package/lib/bridge/index.js +59 -0
  47. package/lib/bridge/index.js.map +1 -0
  48. package/lib/bridge/logic.d.ts +10 -0
  49. package/lib/bridge/logic.d.ts.map +1 -0
  50. package/lib/bridge/logic.js +155 -0
  51. package/lib/bridge/logic.js.map +1 -0
  52. package/lib/bridge/preload.d.ts +9 -0
  53. package/lib/bridge/preload.d.ts.map +1 -0
  54. package/lib/bridge/preload.js +23 -0
  55. package/lib/bridge/preload.js.map +1 -0
  56. package/lib/bridge/prepareTransaction.d.ts +5 -0
  57. package/lib/bridge/prepareTransaction.d.ts.map +1 -0
  58. package/lib/bridge/prepareTransaction.integ.test.d.ts +2 -0
  59. package/lib/bridge/prepareTransaction.integ.test.d.ts.map +1 -0
  60. package/lib/bridge/prepareTransaction.integ.test.js +34 -0
  61. package/lib/bridge/prepareTransaction.integ.test.js.map +1 -0
  62. package/lib/bridge/prepareTransaction.js +57 -0
  63. package/lib/bridge/prepareTransaction.js.map +1 -0
  64. package/lib/bridge/prepareTransaction.test.d.ts +2 -0
  65. package/lib/bridge/prepareTransaction.test.d.ts.map +1 -0
  66. package/lib/bridge/prepareTransaction.test.js +178 -0
  67. package/lib/bridge/prepareTransaction.test.js.map +1 -0
  68. package/lib/bridge/serialization.d.ts +7 -0
  69. package/lib/bridge/serialization.d.ts.map +1 -0
  70. package/lib/bridge/serialization.js +26 -0
  71. package/lib/bridge/serialization.js.map +1 -0
  72. package/lib/bridge/signOperation.d.ts +16 -0
  73. package/lib/bridge/signOperation.d.ts.map +1 -0
  74. package/lib/bridge/signOperation.js +88 -0
  75. package/lib/bridge/signOperation.js.map +1 -0
  76. package/lib/bridge/signOperation.test.d.ts +2 -0
  77. package/lib/bridge/signOperation.test.d.ts.map +1 -0
  78. package/lib/bridge/signOperation.test.js +283 -0
  79. package/lib/bridge/signOperation.test.js.map +1 -0
  80. package/lib/bridge/synchronization.d.ts +5 -0
  81. package/lib/bridge/synchronization.d.ts.map +1 -0
  82. package/lib/bridge/synchronization.integ.test.d.ts +2 -0
  83. package/lib/bridge/synchronization.integ.test.d.ts.map +1 -0
  84. package/lib/bridge/synchronization.integ.test.js +32 -0
  85. package/lib/bridge/synchronization.integ.test.js.map +1 -0
  86. package/lib/bridge/synchronization.js +100 -0
  87. package/lib/bridge/synchronization.js.map +1 -0
  88. package/lib/{transaction.d.ts → bridge/transaction.d.ts} +1 -1
  89. package/lib/bridge/transaction.d.ts.map +1 -0
  90. package/lib/{transaction.js → bridge/transaction.js} +3 -3
  91. package/lib/bridge/transaction.js.map +1 -0
  92. package/lib/config.d.ts +3 -4
  93. package/lib/config.d.ts.map +1 -1
  94. package/lib/config.js.map +1 -1
  95. package/lib/index.d.ts +1 -1
  96. package/lib/index.d.ts.map +1 -1
  97. package/lib/index.js +3 -1
  98. package/lib/index.js.map +1 -1
  99. package/lib/logic/craftTransaction.d.ts.map +1 -1
  100. package/lib/logic/craftTransaction.js +0 -7
  101. package/lib/logic/craftTransaction.js.map +1 -1
  102. package/lib/logic/craftTransaction.test.js +0 -1
  103. package/lib/logic/craftTransaction.test.js.map +1 -1
  104. package/lib/logic/estimateFees.d.ts.map +1 -1
  105. package/lib/logic/estimateFees.integ.test.js +2 -8
  106. package/lib/logic/estimateFees.integ.test.js.map +1 -1
  107. package/lib/logic/estimateFees.js +45 -119
  108. package/lib/logic/estimateFees.js.map +1 -1
  109. package/lib/logic/getBalance.js +1 -1
  110. package/lib/logic/getBalance.js.map +1 -1
  111. package/lib/logic/index.d.ts +0 -2
  112. package/lib/logic/index.d.ts.map +1 -1
  113. package/lib/logic/index.js +1 -5
  114. package/lib/logic/index.js.map +1 -1
  115. package/lib/logic/listOperations.d.ts.map +1 -1
  116. package/lib/logic/listOperations.js +10 -56
  117. package/lib/logic/listOperations.js.map +1 -1
  118. package/lib/logic/listOperations.test.js +10 -14
  119. package/lib/logic/listOperations.test.js.map +1 -1
  120. package/lib/types/bridge.d.ts +0 -3
  121. package/lib/types/bridge.d.ts.map +1 -1
  122. package/lib/types/bridge.fixture.d.ts.map +1 -1
  123. package/lib/types/bridge.fixture.js +0 -1
  124. package/lib/types/bridge.fixture.js.map +1 -1
  125. package/lib/types/bridge.js.map +1 -1
  126. package/lib-es/api/index.d.ts.map +1 -1
  127. package/lib-es/api/index.js +41 -189
  128. package/lib-es/api/index.js.map +1 -1
  129. package/lib-es/api/index.test.js +10 -79
  130. package/lib-es/api/index.test.js.map +1 -1
  131. package/lib-es/api/types.d.ts +5 -7
  132. package/lib-es/api/types.d.ts.map +1 -1
  133. package/lib-es/bridge/broadcast.d.ts +4 -0
  134. package/lib-es/bridge/broadcast.d.ts.map +1 -0
  135. package/lib-es/bridge/broadcast.js +7 -0
  136. package/lib-es/bridge/broadcast.js.map +1 -0
  137. package/lib-es/bridge/broadcast.test.d.ts +2 -0
  138. package/lib-es/bridge/broadcast.test.d.ts.map +1 -0
  139. package/lib-es/bridge/broadcast.test.js +31 -0
  140. package/lib-es/bridge/broadcast.test.js.map +1 -0
  141. package/lib-es/bridge/buildOptimisticOperation.d.ts +4 -0
  142. package/lib-es/bridge/buildOptimisticOperation.d.ts.map +1 -0
  143. package/lib-es/bridge/buildOptimisticOperation.js +21 -0
  144. package/lib-es/bridge/buildOptimisticOperation.js.map +1 -0
  145. package/lib-es/bridge/createTransaction.d.ts +4 -0
  146. package/lib-es/bridge/createTransaction.d.ts.map +1 -0
  147. package/lib-es/bridge/createTransaction.js +17 -0
  148. package/lib-es/bridge/createTransaction.js.map +1 -0
  149. package/lib-es/bridge/estimateMaxSpendable.d.ts +5 -0
  150. package/lib-es/bridge/estimateMaxSpendable.d.ts.map +1 -0
  151. package/lib-es/bridge/estimateMaxSpendable.js +23 -0
  152. package/lib-es/bridge/estimateMaxSpendable.js.map +1 -0
  153. package/lib-es/bridge/getFeesForTransaction.d.ts +21 -0
  154. package/lib-es/bridge/getFeesForTransaction.d.ts.map +1 -0
  155. package/lib-es/bridge/getFeesForTransaction.js +33 -0
  156. package/lib-es/bridge/getFeesForTransaction.js.map +1 -0
  157. package/lib-es/bridge/getTransactionStatus.d.ts +4 -0
  158. package/lib-es/bridge/getTransactionStatus.d.ts.map +1 -0
  159. package/lib-es/bridge/getTransactionStatus.js +101 -0
  160. package/lib-es/bridge/getTransactionStatus.js.map +1 -0
  161. package/lib-es/bridge/getTransactionStatus.test.d.ts +2 -0
  162. package/lib-es/bridge/getTransactionStatus.test.d.ts.map +1 -0
  163. package/lib-es/bridge/getTransactionStatus.test.js +102 -0
  164. package/lib-es/bridge/getTransactionStatus.test.js.map +1 -0
  165. package/lib-es/bridge/index.d.ts +10 -0
  166. package/lib-es/bridge/index.d.ts.map +1 -0
  167. package/lib-es/bridge/index.js +53 -0
  168. package/lib-es/bridge/index.js.map +1 -0
  169. package/lib-es/bridge/logic.d.ts +10 -0
  170. package/lib-es/bridge/logic.d.ts.map +1 -0
  171. package/lib-es/bridge/logic.js +145 -0
  172. package/lib-es/bridge/logic.js.map +1 -0
  173. package/lib-es/bridge/preload.d.ts +9 -0
  174. package/lib-es/bridge/preload.d.ts.map +1 -0
  175. package/lib-es/bridge/preload.js +17 -0
  176. package/lib-es/bridge/preload.js.map +1 -0
  177. package/lib-es/bridge/prepareTransaction.d.ts +5 -0
  178. package/lib-es/bridge/prepareTransaction.d.ts.map +1 -0
  179. package/lib-es/bridge/prepareTransaction.integ.test.d.ts +2 -0
  180. package/lib-es/bridge/prepareTransaction.integ.test.d.ts.map +1 -0
  181. package/lib-es/bridge/prepareTransaction.integ.test.js +29 -0
  182. package/lib-es/bridge/prepareTransaction.integ.test.js.map +1 -0
  183. package/lib-es/bridge/prepareTransaction.js +50 -0
  184. package/lib-es/bridge/prepareTransaction.js.map +1 -0
  185. package/lib-es/bridge/prepareTransaction.test.d.ts +2 -0
  186. package/lib-es/bridge/prepareTransaction.test.d.ts.map +1 -0
  187. package/lib-es/bridge/prepareTransaction.test.js +173 -0
  188. package/lib-es/bridge/prepareTransaction.test.js.map +1 -0
  189. package/lib-es/bridge/serialization.d.ts +7 -0
  190. package/lib-es/bridge/serialization.d.ts.map +1 -0
  191. package/lib-es/bridge/serialization.js +20 -0
  192. package/lib-es/bridge/serialization.js.map +1 -0
  193. package/lib-es/bridge/signOperation.d.ts +16 -0
  194. package/lib-es/bridge/signOperation.d.ts.map +1 -0
  195. package/lib-es/bridge/signOperation.js +83 -0
  196. package/lib-es/bridge/signOperation.js.map +1 -0
  197. package/lib-es/bridge/signOperation.test.d.ts +2 -0
  198. package/lib-es/bridge/signOperation.test.d.ts.map +1 -0
  199. package/lib-es/bridge/signOperation.test.js +255 -0
  200. package/lib-es/bridge/signOperation.test.js.map +1 -0
  201. package/lib-es/bridge/synchronization.d.ts +5 -0
  202. package/lib-es/bridge/synchronization.d.ts.map +1 -0
  203. package/lib-es/bridge/synchronization.integ.test.d.ts +2 -0
  204. package/lib-es/bridge/synchronization.integ.test.d.ts.map +1 -0
  205. package/lib-es/bridge/synchronization.integ.test.js +27 -0
  206. package/lib-es/bridge/synchronization.integ.test.js.map +1 -0
  207. package/lib-es/bridge/synchronization.js +70 -0
  208. package/lib-es/bridge/synchronization.js.map +1 -0
  209. package/lib-es/{transaction.d.ts → bridge/transaction.d.ts} +1 -1
  210. package/lib-es/bridge/transaction.d.ts.map +1 -0
  211. package/lib-es/{transaction.js → bridge/transaction.js} +3 -3
  212. package/lib-es/bridge/transaction.js.map +1 -0
  213. package/lib-es/config.d.ts +3 -4
  214. package/lib-es/config.d.ts.map +1 -1
  215. package/lib-es/config.js.map +1 -1
  216. package/lib-es/index.d.ts +1 -1
  217. package/lib-es/index.d.ts.map +1 -1
  218. package/lib-es/index.js +1 -1
  219. package/lib-es/index.js.map +1 -1
  220. package/lib-es/logic/craftTransaction.d.ts.map +1 -1
  221. package/lib-es/logic/craftTransaction.js +0 -7
  222. package/lib-es/logic/craftTransaction.js.map +1 -1
  223. package/lib-es/logic/craftTransaction.test.js +0 -1
  224. package/lib-es/logic/craftTransaction.test.js.map +1 -1
  225. package/lib-es/logic/estimateFees.d.ts.map +1 -1
  226. package/lib-es/logic/estimateFees.integ.test.js +2 -8
  227. package/lib-es/logic/estimateFees.integ.test.js.map +1 -1
  228. package/lib-es/logic/estimateFees.js +45 -119
  229. package/lib-es/logic/estimateFees.js.map +1 -1
  230. package/lib-es/logic/getBalance.js +1 -1
  231. package/lib-es/logic/getBalance.js.map +1 -1
  232. package/lib-es/logic/index.d.ts +0 -2
  233. package/lib-es/logic/index.d.ts.map +1 -1
  234. package/lib-es/logic/index.js +0 -2
  235. package/lib-es/logic/index.js.map +1 -1
  236. package/lib-es/logic/listOperations.d.ts.map +1 -1
  237. package/lib-es/logic/listOperations.js +10 -56
  238. package/lib-es/logic/listOperations.js.map +1 -1
  239. package/lib-es/logic/listOperations.test.js +10 -14
  240. package/lib-es/logic/listOperations.test.js.map +1 -1
  241. package/lib-es/types/bridge.d.ts +0 -3
  242. package/lib-es/types/bridge.d.ts.map +1 -1
  243. package/lib-es/types/bridge.fixture.d.ts.map +1 -1
  244. package/lib-es/types/bridge.fixture.js +0 -1
  245. package/lib-es/types/bridge.fixture.js.map +1 -1
  246. package/lib-es/types/bridge.js.map +1 -1
  247. package/package.json +14 -11
  248. package/src/api/index.test.ts +15 -87
  249. package/src/api/index.ts +55 -204
  250. package/src/api/types.ts +6 -11
  251. package/src/bridge/broadcast.test.ts +36 -0
  252. package/src/bridge/broadcast.ts +13 -0
  253. package/src/bridge/buildOptimisticOperation.ts +28 -0
  254. package/src/bridge/createTransaction.ts +19 -0
  255. package/src/bridge/estimateMaxSpendable.ts +37 -0
  256. package/src/bridge/getFeesForTransaction.ts +49 -0
  257. package/src/bridge/getTransactionStatus.test.ts +124 -0
  258. package/src/bridge/getTransactionStatus.ts +123 -0
  259. package/src/bridge/index.ts +74 -0
  260. package/src/bridge/logic.ts +171 -0
  261. package/src/bridge/preload.ts +18 -0
  262. package/src/bridge/prepareTransaction.integ.test.ts +35 -0
  263. package/src/bridge/prepareTransaction.test.ts +205 -0
  264. package/src/bridge/prepareTransaction.ts +69 -0
  265. package/src/bridge/serialization.ts +27 -0
  266. package/src/bridge/signOperation.test.ts +284 -0
  267. package/src/bridge/signOperation.ts +130 -0
  268. package/src/bridge/synchronization.integ.test.ts +33 -0
  269. package/src/bridge/synchronization.ts +100 -0
  270. package/src/{transaction.ts → bridge/transaction.ts} +4 -4
  271. package/src/config.ts +2 -9
  272. package/src/index.ts +2 -1
  273. package/src/logic/craftTransaction.test.ts +0 -1
  274. package/src/logic/craftTransaction.ts +0 -8
  275. package/src/logic/estimateFees.integ.test.ts +2 -8
  276. package/src/logic/estimateFees.ts +49 -140
  277. package/src/logic/getBalance.ts +1 -1
  278. package/src/logic/index.ts +0 -2
  279. package/src/logic/listOperations.test.ts +54 -64
  280. package/src/logic/listOperations.ts +9 -57
  281. package/src/types/bridge.fixture.ts +0 -1
  282. package/src/types/bridge.ts +1 -6
  283. package/lib/logic/getStakes.d.ts +0 -3
  284. package/lib/logic/getStakes.d.ts.map +0 -1
  285. package/lib/logic/getStakes.js +0 -26
  286. package/lib/logic/getStakes.js.map +0 -1
  287. package/lib/logic/getStakes.test.d.ts +0 -2
  288. package/lib/logic/getStakes.test.d.ts.map +0 -1
  289. package/lib/logic/getStakes.test.js +0 -133
  290. package/lib/logic/getStakes.test.js.map +0 -1
  291. package/lib/logic/validateIntent.d.ts +0 -3
  292. package/lib/logic/validateIntent.d.ts.map +0 -1
  293. package/lib/logic/validateIntent.js +0 -179
  294. package/lib/logic/validateIntent.js.map +0 -1
  295. package/lib/logic/validateIntent.test.d.ts +0 -2
  296. package/lib/logic/validateIntent.test.d.ts.map +0 -1
  297. package/lib/logic/validateIntent.test.js +0 -249
  298. package/lib/logic/validateIntent.test.js.map +0 -1
  299. package/lib/transaction.d.ts.map +0 -1
  300. package/lib/transaction.js.map +0 -1
  301. package/lib/utils.d.ts +0 -48
  302. package/lib/utils.d.ts.map +0 -1
  303. package/lib/utils.js +0 -112
  304. package/lib/utils.js.map +0 -1
  305. package/lib-es/logic/getStakes.d.ts +0 -3
  306. package/lib-es/logic/getStakes.d.ts.map +0 -1
  307. package/lib-es/logic/getStakes.js +0 -20
  308. package/lib-es/logic/getStakes.js.map +0 -1
  309. package/lib-es/logic/getStakes.test.d.ts +0 -2
  310. package/lib-es/logic/getStakes.test.d.ts.map +0 -1
  311. package/lib-es/logic/getStakes.test.js +0 -128
  312. package/lib-es/logic/getStakes.test.js.map +0 -1
  313. package/lib-es/logic/validateIntent.d.ts +0 -3
  314. package/lib-es/logic/validateIntent.d.ts.map +0 -1
  315. package/lib-es/logic/validateIntent.js +0 -173
  316. package/lib-es/logic/validateIntent.js.map +0 -1
  317. package/lib-es/logic/validateIntent.test.d.ts +0 -2
  318. package/lib-es/logic/validateIntent.test.d.ts.map +0 -1
  319. package/lib-es/logic/validateIntent.test.js +0 -221
  320. package/lib-es/logic/validateIntent.test.js.map +0 -1
  321. package/lib-es/transaction.d.ts.map +0 -1
  322. package/lib-es/transaction.js.map +0 -1
  323. package/lib-es/utils.d.ts +0 -48
  324. package/lib-es/utils.d.ts.map +0 -1
  325. package/lib-es/utils.js +0 -105
  326. package/lib-es/utils.js.map +0 -1
  327. package/src/logic/getStakes.test.ts +0 -145
  328. package/src/logic/getStakes.ts +0 -20
  329. package/src/logic/validateIntent.test.ts +0 -262
  330. package/src/logic/validateIntent.ts +0 -207
  331. package/src/utils.ts +0 -115
@@ -83,50 +83,45 @@ describe("listOperations", () => {
83
83
  };
84
84
 
85
85
  it.each([
86
- ["undelegate", undelegate, "DELEGATE", "DELEGATE"],
87
- ["delegate", delegate, "UNDELEGATE", "UNDELEGATE"],
88
- ["transfer", transfer, "OUT", undefined],
89
- ])(
90
- "should return %s operation with proper recipient list",
91
- async (_label, operation, expectedType, expectedLedgerOpType) => {
92
- // Given
93
- mockNetworkGetTransactions.mockResolvedValue([operation]);
94
- // When
95
- const [results] = await listOperations("any address", options);
96
- // Then
97
- expect(results).toEqual([
98
- {
99
- id: `${operation.hash}-${operation.id}`,
100
- asset: { type: "native" },
101
- details: {
102
- counter: operation.counter,
103
- gasLimit: operation.gasLimit,
104
- storageLimit: operation.storageLimit,
105
- status: operation.status,
106
- ledgerOpType: expectedLedgerOpType,
107
- },
108
- senders: [someSenderAddress],
109
- recipients: [someDestinationAddress],
110
- tx: {
111
- block: {
112
- hash: operation.block,
113
- height: operation.level,
114
- time: new Date(operation.timestamp),
115
- },
116
- date: new Date(operation.timestamp),
117
- hash: operation.hash,
118
- fees: BigInt(
119
- (operation.allocationFee ?? 0) +
120
- (operation.bakerFee ?? 0) +
121
- (operation.storageFee ?? 0),
122
- ),
86
+ ["undelegate", undelegate],
87
+ ["delegate", delegate],
88
+ ["transfer", transfer],
89
+ ])("should return %s operation with proper recipient list", async (_label, operation) => {
90
+ // Given
91
+ mockNetworkGetTransactions.mockResolvedValue([operation]);
92
+ // When
93
+ const [results] = await listOperations("any address", options);
94
+ // Then
95
+ expect(results).toEqual([
96
+ {
97
+ id: `${operation.hash}-${operation.id}`,
98
+ asset: { type: "native" },
99
+ details: {
100
+ counter: operation.counter,
101
+ gasLimit: operation.gasLimit,
102
+ storageLimit: operation.storageLimit,
103
+ },
104
+ senders: [someSenderAddress],
105
+ recipients: [someDestinationAddress],
106
+ tx: {
107
+ block: {
108
+ hash: operation.block,
109
+ height: operation.level,
110
+ time: new Date(operation.timestamp),
123
111
  },
124
- type: expectedType,
125
- value: BigInt(operation.amount),
112
+ date: new Date(operation.timestamp),
113
+ hash: operation.hash,
114
+ fees: BigInt(
115
+ (operation.allocationFee ?? 0) +
116
+ (operation.bakerFee ?? 0) +
117
+ (operation.storageFee ?? 0),
118
+ ),
126
119
  },
127
- ]);
128
- },
129
- );
120
+ type: operation.type,
121
+ value: BigInt(operation.amount),
122
+ },
123
+ ]);
124
+ });
130
125
 
131
126
  it.each([
132
127
  ["undelegate", undelegate],
@@ -147,28 +142,23 @@ describe("listOperations", () => {
147
142
  );
148
143
 
149
144
  it.each([
150
- ["undelegate", undelegate, "DELEGATE"],
151
- ["delegate", delegate, "UNDELEGATE"],
152
- ["transfer", transfer, undefined],
153
- ["reveal", reveal, "REVEAL"],
154
- ])(
155
- "should return %s operation with expected details",
156
- async (_label, operation, expectedLedgerOpType) => {
157
- // Given
158
- mockNetworkGetTransactions.mockResolvedValue([operation]);
159
- // When
160
- const [results, _] = await listOperations("any address", options);
161
- // Then
162
- expect(results.length).toEqual(1);
163
- expect(results[0].details).toEqual({
164
- counter: 65214462,
165
- gasLimit: 4,
166
- storageLimit: 5,
167
- status: operation.status,
168
- ledgerOpType: expectedLedgerOpType,
169
- });
170
- },
171
- );
145
+ ["undelegate", undelegate],
146
+ ["delegate", delegate],
147
+ ["transfer", transfer],
148
+ ["reveal", reveal],
149
+ ])("should return %s operation with expected details", async (_label, operation) => {
150
+ // Given
151
+ mockNetworkGetTransactions.mockResolvedValue([operation]);
152
+ // When
153
+ const [results, _] = await listOperations("any address", options);
154
+ // Then
155
+ expect(results.length).toEqual(1);
156
+ expect(results[0].details).toEqual({
157
+ counter: 65214462,
158
+ gasLimit: 4,
159
+ storageLimit: 5,
160
+ });
161
+ });
172
162
 
173
163
  it.each([
174
164
  { ...undelegate, newDelegate: null, prevDelegate: null },
@@ -10,6 +10,7 @@ import {
10
10
  isAPITransactionType,
11
11
  } from "../network/types";
12
12
  import { Operation } from "@ledgerhq/coin-framework/api/types";
13
+ // import { TezosAsset } from "../api/types";
13
14
 
14
15
  /**
15
16
  * Returns list of "Transfer", "Delegate" and "Undelegate" Operations associated to an account.
@@ -37,15 +38,11 @@ export async function listOperations(
37
38
  options = { ...options, lastId: JSON.parse(token) };
38
39
  }
39
40
  const operations = await tzkt.getAccountOperations(address, options);
40
-
41
- // Apply limit after fetching since tzkt API might not respect the limit parameter
42
- const limitedOperations = limit ? operations.slice(0, limit) : operations;
43
-
44
- const lastOperation = limitedOperations.at(-1);
41
+ const lastOperation = operations.slice(-1)[0];
45
42
  // it's important to get the last id from the **unfiltered** operation list
46
43
  // otherwise we might miss operations
47
44
  const nextToken = lastOperation ? JSON.stringify(lastOperation?.id) : "";
48
- const filteredOperations = limitedOperations
45
+ const filteredOperations = operations
49
46
  .filter(op => isAPITransactionType(op) || isAPIDelegationType(op) || isAPIRevealType(op))
50
47
  .reduce((acc, op) => acc.concat(convertOperation(address, op)), [] as Operation[]);
51
48
  const sortedOperations = filteredOperations.sort(
@@ -54,29 +51,12 @@ export async function listOperations(
54
51
  return [sortedOperations, nextToken];
55
52
  }
56
53
 
57
- /**
58
- * Helper function to get the ledgerOpType for an operation
59
- */
60
- function getLedgerOpType(
61
- operation: APITransactionType | APIDelegationType | APIRevealType,
62
- normalizedType: Operation["type"],
63
- ): string | undefined {
64
- if (isAPIDelegationType(operation)) {
65
- return operation.newDelegate?.address ? "DELEGATE" : "UNDELEGATE";
66
- } else if (isAPIRevealType(operation)) {
67
- return "REVEAL";
68
- } else if (normalizedType === "FEES") {
69
- return "FEES";
70
- }
71
- return undefined;
72
- }
73
-
74
54
  // note that "initiator" of APITransactionType is never used in the conversion
75
55
  function convertOperation(
76
56
  address: string,
77
57
  operation: APITransactionType | APIDelegationType | APIRevealType,
78
58
  ): Operation {
79
- const { hash, sender, id } = operation;
59
+ const { hash, sender, type, id } = operation;
80
60
 
81
61
  let targetAddress = undefined;
82
62
  if (isAPITransactionType(operation)) {
@@ -86,48 +66,22 @@ function convertOperation(
86
66
  targetAddress = operation?.newDelegate?.address || operation?.prevDelegate?.address;
87
67
  }
88
68
 
89
- const recipients = targetAddress ? [targetAddress] : [];
69
+ const recipients = [];
90
70
  if (!targetAddress) {
91
71
  log("coin:tezos", "(logic/operations): No target address found for operation", operation);
72
+ } else {
73
+ recipients.push(targetAddress);
92
74
  }
93
75
 
94
76
  const senders = sender?.address ? [sender.address] : [];
95
77
 
96
- const amount = isAPIRevealType(operation) ? 0n : BigInt(operation.amount);
78
+ const amount = isAPIRevealType(operation) ? BigInt(0) : BigInt(operation.amount);
97
79
 
98
80
  const fee =
99
81
  BigInt(operation.storageFee ?? 0) +
100
82
  BigInt(operation.bakerFee ?? 0) +
101
83
  BigInt(operation.allocationFee ?? 0);
102
84
 
103
- // Determine operation type inline
104
- let normalizedType: Operation["type"];
105
- if (isAPIDelegationType(operation)) {
106
- normalizedType = operation.newDelegate?.address ? "DELEGATE" : "UNDELEGATE";
107
- } else if (isAPITransactionType(operation)) {
108
- const isOut = sender?.address === address;
109
- const isIn = targetAddress === address;
110
-
111
- if ((isOut && isIn) || amount === 0n) {
112
- normalizedType = "FEES";
113
- } else if (isOut) {
114
- normalizedType = "OUT";
115
- } else if (isIn) {
116
- normalizedType = "IN";
117
- } else {
118
- normalizedType = "OUT"; // fallback
119
- }
120
- } else if (isAPIRevealType(operation)) {
121
- normalizedType = "REVEAL";
122
- } else {
123
- // fallback for unknown types
124
- log("coin:tezos", "(logic/operations): Unknown operation type, defaulting to OUT");
125
- normalizedType = "OUT";
126
- }
127
-
128
- // Tezos uses "applied" for every sucess operation (something else=failed )
129
- const hasFailed = operation.status && operation.status !== "applied";
130
-
131
85
  return {
132
86
  id: `${hash ?? ""}-${id}`,
133
87
  asset: { type: "native" },
@@ -143,7 +97,7 @@ function convertOperation(
143
97
  },
144
98
  date: new Date(operation.timestamp),
145
99
  },
146
- type: normalizedType,
100
+ type: type,
147
101
  value: amount,
148
102
  senders: senders,
149
103
  recipients: recipients,
@@ -151,8 +105,6 @@ function convertOperation(
151
105
  counter: operation.counter,
152
106
  gasLimit: operation.gasLimit,
153
107
  storageLimit: operation.storageLimit,
154
- status: hasFailed ? "failed" : operation.status,
155
- ledgerOpType: getLedgerOpType(operation, normalizedType),
156
108
  },
157
109
  };
158
110
  }
@@ -47,7 +47,6 @@ export function createFixtureAccount(account?: Partial<TezosAccount>): TezosAcco
47
47
  swapHistory: [],
48
48
 
49
49
  tezosResources,
50
- stakingPositions: account?.stakingPositions || [],
51
50
  };
52
51
  }
53
52
 
@@ -7,7 +7,6 @@ import type {
7
7
  TransactionStatusCommon,
8
8
  TransactionStatusCommonRaw,
9
9
  } from "@ledgerhq/types-live";
10
- import type { Stake } from "@ledgerhq/coin-framework/api/index";
11
10
  import type { BigNumber } from "bignumber.js";
12
11
  import { TezosOperationMode } from "./model";
13
12
 
@@ -80,11 +79,7 @@ export type Delegation = {
80
79
  sendShouldWarnDelegation: boolean;
81
80
  };
82
81
 
83
- export type StakingPosition = Stake;
84
- export type TezosAccount = Account & {
85
- tezosResources: TezosResources;
86
- stakingPositions: StakingPosition[];
87
- };
82
+ export type TezosAccount = Account & { tezosResources: TezosResources };
88
83
  export function isTezosAccount(account: Account): account is TezosAccount {
89
84
  return "tezosResources" in account;
90
85
  }
@@ -1,3 +0,0 @@
1
- import type { Cursor, Page, Stake } from "@ledgerhq/coin-framework/api/types";
2
- export declare function getStakes(address: string, _cursor?: Cursor): Promise<Page<Stake>>;
3
- //# sourceMappingURL=getStakes.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getStakes.d.ts","sourceRoot":"","sources":["../../src/logic/getStakes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,oCAAoC,CAAC;AAG9E,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAgBvF"}
@@ -1,26 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getStakes = getStakes;
7
- const tzkt_1 = __importDefault(require("../network/tzkt"));
8
- async function getStakes(address, _cursor) {
9
- // tezos exposes a single staking position via delegation when a delegate is set
10
- const accountInfo = await tzkt_1.default.getAccountByAddress(address);
11
- if (accountInfo.type !== "user" || !accountInfo.delegate?.address)
12
- return { items: [] };
13
- return {
14
- items: [
15
- {
16
- uid: address,
17
- address,
18
- delegate: accountInfo.delegate.address,
19
- state: "active",
20
- asset: { type: "native" },
21
- amount: BigInt(accountInfo.balance ?? 0),
22
- },
23
- ],
24
- };
25
- }
26
- //# sourceMappingURL=getStakes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getStakes.js","sourceRoot":"","sources":["../../src/logic/getStakes.ts"],"names":[],"mappings":";;;;;AAGA,8BAgBC;AAlBD,2DAAkC;AAE3B,KAAK,UAAU,SAAS,CAAC,OAAe,EAAE,OAAgB;IAC/D,gFAAgF;IAChF,MAAM,WAAW,GAAG,MAAM,cAAG,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC3D,IAAI,WAAW,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO;QAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACxF,OAAO;QACL,KAAK,EAAE;YACL;gBACE,GAAG,EAAE,OAAO;gBACZ,OAAO;gBACP,QAAQ,EAAE,WAAW,CAAC,QAAQ,CAAC,OAAO;gBACtC,KAAK,EAAE,QAAQ;gBACf,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO,IAAI,CAAC,CAAC;aACzC;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=getStakes.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getStakes.test.d.ts","sourceRoot":"","sources":["../../src/logic/getStakes.test.ts"],"names":[],"mappings":""}
@@ -1,133 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const index_1 = require("../api/index");
7
- const tzkt_1 = __importDefault(require("../network/tzkt"));
8
- const config_1 = __importDefault(require("../config"));
9
- describe("getStakes", () => {
10
- const api = (0, index_1.createApi)({
11
- baker: { url: "http://baker.example.com" },
12
- explorer: { url: "http://tezos.explorer.com", maxTxQuery: 100 },
13
- node: { url: "http://tezos.node.com" },
14
- fees: {
15
- minGasLimit: 600,
16
- minRevealGasLimit: 300,
17
- minStorageLimit: 0,
18
- minFees: 500,
19
- minEstimatedFees: 500,
20
- },
21
- });
22
- const mockGetAccountByAddress = jest.spyOn(tzkt_1.default, "getAccountByAddress");
23
- beforeEach(() => {
24
- jest.clearAllMocks();
25
- config_1.default.setCoinConfig(() => ({
26
- status: { type: "active" },
27
- baker: { url: "http://baker.example.com" },
28
- explorer: { url: "http://tezos.explorer.com", maxTxQuery: 100 },
29
- node: { url: "http://tezos.node.com" },
30
- fees: {
31
- minGasLimit: 600,
32
- minRevealGasLimit: 300,
33
- minStorageLimit: 0,
34
- minFees: 500,
35
- minEstimatedFees: 500,
36
- },
37
- }));
38
- });
39
- describe("account types", () => {
40
- it("should return empty stakes for non-delegated account", async () => {
41
- mockGetAccountByAddress.mockResolvedValue({
42
- type: "user",
43
- address: "tz1WvvbEGpBXGeTVbLiR6DYBe1izmgiYuZbq",
44
- publicKey: "edpk...",
45
- balance: 1000000,
46
- revealed: true,
47
- counter: 0,
48
- delegationLevel: 0,
49
- delegationTime: "2021-01-01T00:00:00Z",
50
- numTransactions: 0,
51
- firstActivityTime: "2021-01-01T00:00:00Z",
52
- });
53
- const result = await api.getStakes("tz1WvvbEGpBXGeTVbLiR6DYBe1izmgiYuZbq");
54
- expect(result.items).toEqual([]);
55
- });
56
- it("should return empty stakes for non user account", async () => {
57
- mockGetAccountByAddress.mockResolvedValue({
58
- type: "empty",
59
- address: "tz1EmptyAccount",
60
- counter: 0,
61
- });
62
- const result = await api.getStakes("tz1EmptyAccount");
63
- expect(result.items).toEqual([]);
64
- });
65
- });
66
- describe("delegated accounts", () => {
67
- it("should return stake for delegated account", async () => {
68
- const address = "tz1TzrmTBSuiVHV2VfMnGRMYvTEPCP42oSM8";
69
- const delegateAddress = "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx";
70
- const balance = 5000000;
71
- mockGetAccountByAddress.mockResolvedValue({
72
- type: "user",
73
- address,
74
- publicKey: "edpk...",
75
- balance,
76
- revealed: true,
77
- counter: 0,
78
- delegate: {
79
- alias: "Test Delegate",
80
- address: delegateAddress,
81
- active: true,
82
- },
83
- delegationLevel: 100,
84
- delegationTime: "2021-01-01T00:00:00Z",
85
- numTransactions: 10,
86
- firstActivityTime: "2021-01-01T00:00:00Z",
87
- });
88
- const result = await api.getStakes(address);
89
- expect(result.items).toEqual([
90
- expect.objectContaining({
91
- uid: address,
92
- address,
93
- delegate: delegateAddress,
94
- state: "active",
95
- asset: { type: "native" },
96
- amount: BigInt(balance),
97
- }),
98
- ]);
99
- });
100
- it("should handle account with zero balance but delegation", async () => {
101
- const address = "tz1ZeroBalanceAccount";
102
- const delegateAddress = "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx";
103
- mockGetAccountByAddress.mockResolvedValue({
104
- type: "user",
105
- address,
106
- publicKey: "edpk...",
107
- balance: 0,
108
- revealed: true,
109
- counter: 0,
110
- delegate: {
111
- alias: "Test Delegate",
112
- address: delegateAddress,
113
- active: true,
114
- },
115
- delegationLevel: 100,
116
- delegationTime: "2021-01-01T00:00:00Z",
117
- numTransactions: 0,
118
- firstActivityTime: "2021-01-01T00:00:00Z",
119
- });
120
- const result = await api.getStakes(address);
121
- expect(result.items).toHaveLength(1);
122
- expect(result.items[0]).toMatchObject({
123
- uid: address,
124
- address,
125
- delegate: delegateAddress,
126
- state: "active",
127
- asset: { type: "native" },
128
- amount: BigInt(0),
129
- });
130
- });
131
- });
132
- });
133
- //# sourceMappingURL=getStakes.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getStakes.test.js","sourceRoot":"","sources":["../../src/logic/getStakes.test.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { TransactionIntent, TransactionValidation } from "@ledgerhq/coin-framework/api/types";
2
- export declare function validateIntent(intent: TransactionIntent): Promise<TransactionValidation>;
3
- //# sourceMappingURL=validateIntent.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validateIntent.d.ts","sourceRoot":"","sources":["../../src/logic/validateIntent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAuInG,wBAAsB,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAuE9F"}
@@ -1,179 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.validateIntent = validateIntent;
7
- const errors_1 = require("@ledgerhq/errors");
8
- const utils_1 = require("@taquito/utils");
9
- const tzkt_1 = __importDefault(require("../network/tzkt"));
10
- const estimateFees_1 = require("./estimateFees");
11
- const errors_2 = require("../types/errors");
12
- const utils_2 = require("../utils");
13
- /**
14
- * Validates basic recipient and amount for send transactions
15
- */
16
- function validateBasicSendParams(intent) {
17
- const errors = {};
18
- if (intent.type !== "send") {
19
- return errors;
20
- }
21
- if (!intent.recipient) {
22
- errors.recipient = new errors_1.RecipientRequired("");
23
- }
24
- else if ((0, utils_1.validateAddress)(intent.recipient) !== utils_1.ValidationResult.VALID) {
25
- errors.recipient = new errors_1.InvalidAddress(undefined, { currencyName: "Tezos" });
26
- }
27
- else if (intent.sender === intent.recipient) {
28
- errors.recipient = new errors_1.InvalidAddressBecauseDestinationIsAlsoSource();
29
- }
30
- if (intent.amount === 0n && !intent.useAllAmount) {
31
- errors.amount = new errors_1.AmountRequired();
32
- }
33
- else if (intent.amount < 0n) {
34
- errors.amount = new errors_1.NotEnoughBalance();
35
- }
36
- return errors;
37
- }
38
- /**
39
- * Validates specific transaction constraints based on account state
40
- */
41
- function validateTransactionConstraints(intent, senderInfo) {
42
- const errors = {};
43
- // send max not allowed on delegated accounts (must undelegate acc first)
44
- if (intent.type === "send" && intent.useAllAmount) {
45
- if (senderInfo.type === "user" && senderInfo.delegate?.address) {
46
- errors.amount = new errors_1.RecommendUndelegation();
47
- }
48
- }
49
- // stake requires non-zero balance
50
- if (intent.type === "stake") {
51
- const balance = BigInt(senderInfo.balance || "0");
52
- if (balance === 0n) {
53
- errors.amount = new errors_1.NotEnoughBalanceToDelegate();
54
- }
55
- }
56
- return errors;
57
- }
58
- /**
59
- * Maps Taquito-specific errors to our error types
60
- */
61
- function mapTaquitoErrors(taquitoError, intentType) {
62
- const errors = {};
63
- if (taquitoError.endsWith("balance_too_low") || taquitoError.endsWith("subtraction_underflow")) {
64
- if (intentType === "stake") {
65
- errors.amount = new errors_1.NotEnoughBalanceToDelegate();
66
- }
67
- else {
68
- errors.amount = new errors_1.NotEnoughBalance();
69
- }
70
- }
71
- else if (taquitoError.endsWith("delegate.unchanged") && intentType === "stake") {
72
- errors.recipient = new errors_2.InvalidAddressBecauseAlreadyDelegated();
73
- }
74
- else if (taquitoError.includes("empty_implicit_contract")) {
75
- errors.amount = new errors_1.NotEnoughBalanceToDelegate();
76
- }
77
- else {
78
- errors.amount = new Error(taquitoError);
79
- }
80
- return errors;
81
- }
82
- /**
83
- * Calculates final amounts based on transaction type
84
- */
85
- function calculateAmounts(intent, senderInfo, estimatedFees) {
86
- if (intent.type === "stake" || intent.type === "unstake") {
87
- const amount = BigInt(senderInfo.type === "user" ? senderInfo.balance : 0);
88
- return { amount, totalSpent: estimatedFees };
89
- }
90
- if (intent.type === "send" && intent.useAllAmount) {
91
- if (senderInfo.type === "user") {
92
- const balance = BigInt(senderInfo.balance);
93
- const amount = balance > estimatedFees ? balance - estimatedFees : 0n;
94
- return { amount, totalSpent: amount + estimatedFees };
95
- }
96
- return { amount: 0n, totalSpent: 0n };
97
- }
98
- const amount = intent.amount;
99
- return { amount, totalSpent: amount + estimatedFees };
100
- }
101
- /**
102
- * Validates balance coverage for the transaction
103
- */
104
- function validateBalanceCoverage(senderInfo, totalSpent) {
105
- const errors = {};
106
- if (senderInfo.type === "user") {
107
- const accountBalance = BigInt(senderInfo.balance);
108
- if (totalSpent > accountBalance) {
109
- errors.amount = new errors_1.NotEnoughBalance();
110
- }
111
- }
112
- return errors;
113
- }
114
- async function validateIntent(intent) {
115
- const errors = {};
116
- const warnings = {};
117
- let estimatedFees;
118
- let amount;
119
- let totalSpent;
120
- // Basic validation for send transactions
121
- const basicErrors = validateBasicSendParams(intent);
122
- Object.assign(errors, basicErrors);
123
- if (Object.keys(errors).length > 0) {
124
- return { errors, warnings, estimatedFees: 0n, amount: 0n, totalSpent: 0n };
125
- }
126
- try {
127
- // Get sender account information
128
- const senderInfo = await tzkt_1.default.getAccountByAddress(intent.sender);
129
- if (senderInfo.type !== "user")
130
- throw new Error("unexpected account type");
131
- // Validate transaction-specific constraints
132
- const constraintErrors = validateTransactionConstraints(intent, senderInfo);
133
- Object.assign(errors, constraintErrors);
134
- if (Object.keys(errors).length > 0) {
135
- return { errors, warnings, estimatedFees: 0n, amount: 0n, totalSpent: 0n };
136
- }
137
- // Estimate fees
138
- if (senderInfo.revealed) {
139
- const estimation = await (0, estimateFees_1.estimateFees)({
140
- account: {
141
- address: intent.sender,
142
- revealed: senderInfo.revealed,
143
- balance: BigInt(senderInfo.balance),
144
- xpub: intent.senderPublicKey ?? senderInfo.publicKey,
145
- },
146
- transaction: {
147
- mode: (0, utils_2.mapIntentTypeToTezosMode)(intent.type),
148
- recipient: intent.recipient,
149
- amount: intent.amount,
150
- useAllAmount: !!intent.useAllAmount,
151
- },
152
- });
153
- estimatedFees = estimation.estimatedFees;
154
- // Handle Taquito errors
155
- if (estimation.taquitoError) {
156
- const taquitoErrors = mapTaquitoErrors(estimation.taquitoError, intent.type);
157
- Object.assign(errors, taquitoErrors);
158
- }
159
- }
160
- else {
161
- estimatedFees = 2000n;
162
- }
163
- // Calculate final amounts
164
- const amounts = calculateAmounts(intent, senderInfo, estimatedFees);
165
- amount = amounts.amount;
166
- totalSpent = amounts.totalSpent;
167
- // Final balance validation
168
- const balanceErrors = validateBalanceCoverage(senderInfo, totalSpent);
169
- Object.assign(errors, balanceErrors);
170
- }
171
- catch (e) {
172
- errors.estimation = e;
173
- estimatedFees = 0n;
174
- amount = intent.amount;
175
- totalSpent = intent.amount;
176
- }
177
- return { errors, warnings, estimatedFees, amount, totalSpent };
178
- }
179
- //# sourceMappingURL=validateIntent.js.map