@ledgerhq/coin-stacks 0.1.1-next.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 (296) hide show
  1. package/.eslintrc.js +20 -0
  2. package/.turbo/turbo-build.log +4 -0
  3. package/.unimportedrc.json +31 -0
  4. package/CHANGELOG.md +11 -0
  5. package/LICENSE.txt +21 -0
  6. package/jest.config.js +8 -0
  7. package/lib/bridge/broadcast.d.ts +4 -0
  8. package/lib/bridge/broadcast.d.ts.map +1 -0
  9. package/lib/bridge/broadcast.js +28 -0
  10. package/lib/bridge/broadcast.js.map +1 -0
  11. package/lib/bridge/buildOptimisticOperation.d.ts +4 -0
  12. package/lib/bridge/buildOptimisticOperation.d.ts.map +1 -0
  13. package/lib/bridge/buildOptimisticOperation.js +34 -0
  14. package/lib/bridge/buildOptimisticOperation.js.map +1 -0
  15. package/lib/bridge/createTransaction.d.ts +4 -0
  16. package/lib/bridge/createTransaction.d.ts.map +1 -0
  17. package/lib/bridge/createTransaction.js +18 -0
  18. package/lib/bridge/createTransaction.js.map +1 -0
  19. package/lib/bridge/deviceTransactionConfig.d.ts +22 -0
  20. package/lib/bridge/deviceTransactionConfig.d.ts.map +1 -0
  21. package/lib/bridge/deviceTransactionConfig.js +34 -0
  22. package/lib/bridge/deviceTransactionConfig.js.map +1 -0
  23. package/lib/bridge/estimateMaxSpendable.d.ts +4 -0
  24. package/lib/bridge/estimateMaxSpendable.d.ts.map +1 -0
  25. package/lib/bridge/estimateMaxSpendable.js +46 -0
  26. package/lib/bridge/estimateMaxSpendable.js.map +1 -0
  27. package/lib/bridge/getTransactionStatus.d.ts +4 -0
  28. package/lib/bridge/getTransactionStatus.d.ts.map +1 -0
  29. package/lib/bridge/getTransactionStatus.js +60 -0
  30. package/lib/bridge/getTransactionStatus.js.map +1 -0
  31. package/lib/bridge/index.d.ts +11 -0
  32. package/lib/bridge/index.d.ts.map +1 -0
  33. package/lib/bridge/index.js +56 -0
  34. package/lib/bridge/index.js.map +1 -0
  35. package/lib/bridge/prepareTransaction.d.ts +4 -0
  36. package/lib/bridge/prepareTransaction.d.ts.map +1 -0
  37. package/lib/bridge/prepareTransaction.js +56 -0
  38. package/lib/bridge/prepareTransaction.js.map +1 -0
  39. package/lib/bridge/signOperation.d.ts +5 -0
  40. package/lib/bridge/signOperation.d.ts.map +1 -0
  41. package/lib/bridge/signOperation.js +85 -0
  42. package/lib/bridge/signOperation.js.map +1 -0
  43. package/lib/bridge/synchronization.d.ts +5 -0
  44. package/lib/bridge/synchronization.d.ts.map +1 -0
  45. package/lib/bridge/synchronization.js +62 -0
  46. package/lib/bridge/synchronization.js.map +1 -0
  47. package/lib/bridge/transaction.d.ts +14 -0
  48. package/lib/bridge/transaction.d.ts.map +1 -0
  49. package/lib/bridge/transaction.js +46 -0
  50. package/lib/bridge/transaction.js.map +1 -0
  51. package/lib/bridge/utils/addresses.d.ts +13 -0
  52. package/lib/bridge/utils/addresses.d.ts.map +1 -0
  53. package/lib/bridge/utils/addresses.js +15 -0
  54. package/lib/bridge/utils/addresses.js.map +1 -0
  55. package/lib/bridge/utils/misc.d.ts +15 -0
  56. package/lib/bridge/utils/misc.d.ts.map +1 -0
  57. package/lib/bridge/utils/misc.js +186 -0
  58. package/lib/bridge/utils/misc.js.map +1 -0
  59. package/lib/bridge/utils/misc.unit.test.d.ts +2 -0
  60. package/lib/bridge/utils/misc.unit.test.d.ts.map +1 -0
  61. package/lib/bridge/utils/misc.unit.test.js +230 -0
  62. package/lib/bridge/utils/misc.unit.test.js.map +1 -0
  63. package/lib/config.d.ts +14 -0
  64. package/lib/config.d.ts.map +1 -0
  65. package/lib/config.js +16 -0
  66. package/lib/config.js.map +1 -0
  67. package/lib/errors.d.ts +4 -0
  68. package/lib/errors.d.ts.map +1 -0
  69. package/lib/errors.js +6 -0
  70. package/lib/errors.js.map +1 -0
  71. package/lib/index.d.ts +4 -0
  72. package/lib/index.d.ts.map +1 -0
  73. package/lib/index.js +21 -0
  74. package/lib/index.js.map +1 -0
  75. package/lib/network/api.d.ts +11 -0
  76. package/lib/network/api.d.ts.map +1 -0
  77. package/lib/network/api.js +139 -0
  78. package/lib/network/api.js.map +1 -0
  79. package/lib/network/api.types.d.ts +168 -0
  80. package/lib/network/api.types.d.ts.map +1 -0
  81. package/lib/network/api.types.js +9 -0
  82. package/lib/network/api.types.js.map +1 -0
  83. package/lib/network/index.d.ts +3 -0
  84. package/lib/network/index.d.ts.map +1 -0
  85. package/lib/network/index.js +19 -0
  86. package/lib/network/index.js.map +1 -0
  87. package/lib/signer/getAddress.d.ts +6 -0
  88. package/lib/signer/getAddress.d.ts.map +1 -0
  89. package/lib/signer/getAddress.js +31 -0
  90. package/lib/signer/getAddress.js.map +1 -0
  91. package/lib/signer/index.d.ts +4 -0
  92. package/lib/signer/index.d.ts.map +1 -0
  93. package/lib/signer/index.js +23 -0
  94. package/lib/signer/index.js.map +1 -0
  95. package/lib/signer/signMessage.d.ts +12 -0
  96. package/lib/signer/signMessage.d.ts.map +1 -0
  97. package/lib/signer/signMessage.js +31 -0
  98. package/lib/signer/signMessage.js.map +1 -0
  99. package/lib/test/bot-deviceActions.d.ts +4 -0
  100. package/lib/test/bot-deviceActions.d.ts.map +1 -0
  101. package/lib/test/bot-deviceActions.js +48 -0
  102. package/lib/test/bot-deviceActions.js.map +1 -0
  103. package/lib/test/bot-specs.d.ts +7 -0
  104. package/lib/test/bot-specs.d.ts.map +1 -0
  105. package/lib/test/bot-specs.js +73 -0
  106. package/lib/test/bot-specs.js.map +1 -0
  107. package/lib/test/bridgeDatasetTest.d.ts +4 -0
  108. package/lib/test/bridgeDatasetTest.d.ts.map +1 -0
  109. package/lib/test/bridgeDatasetTest.js +129 -0
  110. package/lib/test/bridgeDatasetTest.js.map +1 -0
  111. package/lib/test/cli.d.ts +15 -0
  112. package/lib/test/cli.d.ts.map +1 -0
  113. package/lib/test/cli.js +27 -0
  114. package/lib/test/cli.js.map +1 -0
  115. package/lib/test/index.d.ts +6 -0
  116. package/lib/test/index.d.ts.map +1 -0
  117. package/lib/test/index.js +26 -0
  118. package/lib/test/index.js.map +1 -0
  119. package/lib/types/bridge.d.ts +35 -0
  120. package/lib/types/bridge.d.ts.map +1 -0
  121. package/lib/types/bridge.js +3 -0
  122. package/lib/types/bridge.js.map +1 -0
  123. package/lib/types/index.d.ts +3 -0
  124. package/lib/types/index.d.ts.map +1 -0
  125. package/lib/types/index.js +19 -0
  126. package/lib/types/index.js.map +1 -0
  127. package/lib/types/signer.d.ts +14 -0
  128. package/lib/types/signer.d.ts.map +1 -0
  129. package/lib/types/signer.js +3 -0
  130. package/lib/types/signer.js.map +1 -0
  131. package/lib/utils.d.ts +8 -0
  132. package/lib/utils.d.ts.map +1 -0
  133. package/lib/utils.js +26 -0
  134. package/lib/utils.js.map +1 -0
  135. package/lib-es/bridge/broadcast.d.ts +4 -0
  136. package/lib-es/bridge/broadcast.d.ts.map +1 -0
  137. package/lib-es/bridge/broadcast.js +21 -0
  138. package/lib-es/bridge/broadcast.js.map +1 -0
  139. package/lib-es/bridge/buildOptimisticOperation.d.ts +4 -0
  140. package/lib-es/bridge/buildOptimisticOperation.d.ts.map +1 -0
  141. package/lib-es/bridge/buildOptimisticOperation.js +27 -0
  142. package/lib-es/bridge/buildOptimisticOperation.js.map +1 -0
  143. package/lib-es/bridge/createTransaction.d.ts +4 -0
  144. package/lib-es/bridge/createTransaction.d.ts.map +1 -0
  145. package/lib-es/bridge/createTransaction.js +11 -0
  146. package/lib-es/bridge/createTransaction.js.map +1 -0
  147. package/lib-es/bridge/deviceTransactionConfig.d.ts +22 -0
  148. package/lib-es/bridge/deviceTransactionConfig.d.ts.map +1 -0
  149. package/lib-es/bridge/deviceTransactionConfig.js +32 -0
  150. package/lib-es/bridge/deviceTransactionConfig.js.map +1 -0
  151. package/lib-es/bridge/estimateMaxSpendable.d.ts +4 -0
  152. package/lib-es/bridge/estimateMaxSpendable.d.ts.map +1 -0
  153. package/lib-es/bridge/estimateMaxSpendable.js +39 -0
  154. package/lib-es/bridge/estimateMaxSpendable.js.map +1 -0
  155. package/lib-es/bridge/getTransactionStatus.d.ts +4 -0
  156. package/lib-es/bridge/getTransactionStatus.d.ts.map +1 -0
  157. package/lib-es/bridge/getTransactionStatus.js +53 -0
  158. package/lib-es/bridge/getTransactionStatus.js.map +1 -0
  159. package/lib-es/bridge/index.d.ts +11 -0
  160. package/lib-es/bridge/index.d.ts.map +1 -0
  161. package/lib-es/bridge/index.js +48 -0
  162. package/lib-es/bridge/index.js.map +1 -0
  163. package/lib-es/bridge/prepareTransaction.d.ts +4 -0
  164. package/lib-es/bridge/prepareTransaction.d.ts.map +1 -0
  165. package/lib-es/bridge/prepareTransaction.js +49 -0
  166. package/lib-es/bridge/prepareTransaction.js.map +1 -0
  167. package/lib-es/bridge/signOperation.d.ts +5 -0
  168. package/lib-es/bridge/signOperation.d.ts.map +1 -0
  169. package/lib-es/bridge/signOperation.js +78 -0
  170. package/lib-es/bridge/signOperation.js.map +1 -0
  171. package/lib-es/bridge/synchronization.d.ts +5 -0
  172. package/lib-es/bridge/synchronization.d.ts.map +1 -0
  173. package/lib-es/bridge/synchronization.js +55 -0
  174. package/lib-es/bridge/synchronization.js.map +1 -0
  175. package/lib-es/bridge/transaction.d.ts +14 -0
  176. package/lib-es/bridge/transaction.d.ts.map +1 -0
  177. package/lib-es/bridge/transaction.js +38 -0
  178. package/lib-es/bridge/transaction.js.map +1 -0
  179. package/lib-es/bridge/utils/addresses.d.ts +13 -0
  180. package/lib-es/bridge/utils/addresses.d.ts.map +1 -0
  181. package/lib-es/bridge/utils/addresses.js +11 -0
  182. package/lib-es/bridge/utils/addresses.js.map +1 -0
  183. package/lib-es/bridge/utils/misc.d.ts +15 -0
  184. package/lib-es/bridge/utils/misc.d.ts.map +1 -0
  185. package/lib-es/bridge/utils/misc.js +176 -0
  186. package/lib-es/bridge/utils/misc.js.map +1 -0
  187. package/lib-es/bridge/utils/misc.unit.test.d.ts +2 -0
  188. package/lib-es/bridge/utils/misc.unit.test.d.ts.map +1 -0
  189. package/lib-es/bridge/utils/misc.unit.test.js +228 -0
  190. package/lib-es/bridge/utils/misc.unit.test.js.map +1 -0
  191. package/lib-es/config.d.ts +14 -0
  192. package/lib-es/config.d.ts.map +1 -0
  193. package/lib-es/config.js +11 -0
  194. package/lib-es/config.js.map +1 -0
  195. package/lib-es/errors.d.ts +4 -0
  196. package/lib-es/errors.d.ts.map +1 -0
  197. package/lib-es/errors.js +3 -0
  198. package/lib-es/errors.js.map +1 -0
  199. package/lib-es/index.d.ts +4 -0
  200. package/lib-es/index.d.ts.map +1 -0
  201. package/lib-es/index.js +3 -0
  202. package/lib-es/index.js.map +1 -0
  203. package/lib-es/network/api.d.ts +11 -0
  204. package/lib-es/network/api.d.ts.map +1 -0
  205. package/lib-es/network/api.js +124 -0
  206. package/lib-es/network/api.js.map +1 -0
  207. package/lib-es/network/api.types.d.ts +168 -0
  208. package/lib-es/network/api.types.d.ts.map +1 -0
  209. package/lib-es/network/api.types.js +6 -0
  210. package/lib-es/network/api.types.js.map +1 -0
  211. package/lib-es/network/index.d.ts +3 -0
  212. package/lib-es/network/index.d.ts.map +1 -0
  213. package/lib-es/network/index.js +3 -0
  214. package/lib-es/network/index.js.map +1 -0
  215. package/lib-es/signer/getAddress.d.ts +6 -0
  216. package/lib-es/signer/getAddress.d.ts.map +1 -0
  217. package/lib-es/signer/getAddress.js +29 -0
  218. package/lib-es/signer/getAddress.js.map +1 -0
  219. package/lib-es/signer/index.d.ts +4 -0
  220. package/lib-es/signer/index.d.ts.map +1 -0
  221. package/lib-es/signer/index.js +4 -0
  222. package/lib-es/signer/index.js.map +1 -0
  223. package/lib-es/signer/signMessage.d.ts +12 -0
  224. package/lib-es/signer/signMessage.d.ts.map +1 -0
  225. package/lib-es/signer/signMessage.js +27 -0
  226. package/lib-es/signer/signMessage.js.map +1 -0
  227. package/lib-es/test/bot-deviceActions.d.ts +4 -0
  228. package/lib-es/test/bot-deviceActions.d.ts.map +1 -0
  229. package/lib-es/test/bot-deviceActions.js +45 -0
  230. package/lib-es/test/bot-deviceActions.js.map +1 -0
  231. package/lib-es/test/bot-specs.d.ts +7 -0
  232. package/lib-es/test/bot-specs.d.ts.map +1 -0
  233. package/lib-es/test/bot-specs.js +68 -0
  234. package/lib-es/test/bot-specs.js.map +1 -0
  235. package/lib-es/test/bridgeDatasetTest.d.ts +4 -0
  236. package/lib-es/test/bridgeDatasetTest.d.ts.map +1 -0
  237. package/lib-es/test/bridgeDatasetTest.js +126 -0
  238. package/lib-es/test/bridgeDatasetTest.js.map +1 -0
  239. package/lib-es/test/cli.d.ts +15 -0
  240. package/lib-es/test/cli.d.ts.map +1 -0
  241. package/lib-es/test/cli.js +21 -0
  242. package/lib-es/test/cli.js.map +1 -0
  243. package/lib-es/test/index.d.ts +6 -0
  244. package/lib-es/test/index.d.ts.map +1 -0
  245. package/lib-es/test/index.js +6 -0
  246. package/lib-es/test/index.js.map +1 -0
  247. package/lib-es/types/bridge.d.ts +35 -0
  248. package/lib-es/types/bridge.d.ts.map +1 -0
  249. package/lib-es/types/bridge.js +2 -0
  250. package/lib-es/types/bridge.js.map +1 -0
  251. package/lib-es/types/index.d.ts +3 -0
  252. package/lib-es/types/index.d.ts.map +1 -0
  253. package/lib-es/types/index.js +3 -0
  254. package/lib-es/types/index.js.map +1 -0
  255. package/lib-es/types/signer.d.ts +14 -0
  256. package/lib-es/types/signer.d.ts.map +1 -0
  257. package/lib-es/types/signer.js +2 -0
  258. package/lib-es/types/signer.js.map +1 -0
  259. package/lib-es/utils.d.ts +8 -0
  260. package/lib-es/utils.d.ts.map +1 -0
  261. package/lib-es/utils.js +17 -0
  262. package/lib-es/utils.js.map +1 -0
  263. package/package.json +136 -0
  264. package/src/bridge/broadcast.ts +18 -0
  265. package/src/bridge/buildOptimisticOperation.ts +34 -0
  266. package/src/bridge/createTransaction.ts +13 -0
  267. package/src/bridge/deviceTransactionConfig.ts +57 -0
  268. package/src/bridge/estimateMaxSpendable.ts +50 -0
  269. package/src/bridge/getTransactionStatus.ts +56 -0
  270. package/src/bridge/index.ts +64 -0
  271. package/src/bridge/prepareTransaction.ts +60 -0
  272. package/src/bridge/signOperation.ts +91 -0
  273. package/src/bridge/synchronization.ts +55 -0
  274. package/src/bridge/transaction.ts +75 -0
  275. package/src/bridge/utils/addresses.ts +23 -0
  276. package/src/bridge/utils/misc.ts +274 -0
  277. package/src/bridge/utils/misc.unit.test.ts +237 -0
  278. package/src/config.ts +26 -0
  279. package/src/errors.ts +3 -0
  280. package/src/index.ts +4 -0
  281. package/src/network/api.ts +173 -0
  282. package/src/network/api.types.ts +180 -0
  283. package/src/network/index.ts +2 -0
  284. package/src/signer/getAddress.ts +27 -0
  285. package/src/signer/index.ts +4 -0
  286. package/src/signer/signMessage.ts +26 -0
  287. package/src/test/bot-deviceActions.ts +47 -0
  288. package/src/test/bot-specs.ts +82 -0
  289. package/src/test/bridgeDatasetTest.ts +134 -0
  290. package/src/test/cli.ts +38 -0
  291. package/src/test/index.ts +5 -0
  292. package/src/types/bridge.ts +49 -0
  293. package/src/types/index.ts +2 -0
  294. package/src/types/signer.ts +16 -0
  295. package/src/utils.ts +24 -0
  296. package/tsconfig.json +14 -0
@@ -0,0 +1,176 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { BigNumber } from "bignumber.js";
11
+ import { makeUnsignedSTXTokenTransfer, createMessageSignature, deserializeCV, cvToJSON, } from "@stacks/transactions";
12
+ import { decodeAccountId } from "@ledgerhq/coin-framework/account/index";
13
+ import { fetchFullMempoolTxs, fetchNonce, StacksNetwork, } from "../../network/index";
14
+ import { getCryptoCurrencyById } from "@ledgerhq/cryptoassets/currencies";
15
+ import { encodeOperationId, encodeSubOperationId } from "@ledgerhq/coin-framework/operation";
16
+ import { log } from "@ledgerhq/logs";
17
+ export const getTxToBroadcast = (operation, signature, rawData) => __awaiter(void 0, void 0, void 0, function* () {
18
+ var _a;
19
+ const { value, recipients, fee, extra: { memo }, } = operation;
20
+ const { anchorMode, network, xpub } = rawData;
21
+ const options = {
22
+ amount: BigNumber(value).minus(fee).toFixed(),
23
+ recipient: recipients[0],
24
+ anchorMode,
25
+ memo,
26
+ network: StacksNetwork[network],
27
+ publicKey: xpub,
28
+ fee: BigNumber(fee).toFixed(),
29
+ nonce: (_a = operation.transactionSequenceNumber) !== null && _a !== void 0 ? _a : 0,
30
+ };
31
+ const tx = yield makeUnsignedSTXTokenTransfer(options);
32
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
33
+ // @ts-ignore need to ignore the TS error here
34
+ tx.auth.spendingCondition.signature = createMessageSignature(signature);
35
+ return Buffer.from(tx.serialize());
36
+ });
37
+ export const getUnit = () => getCryptoCurrencyById("stacks").units[0];
38
+ export const getAddress = (account) => ({ address: account.freshAddress, derivationPath: account.freshAddressPath });
39
+ const getMemo = (memoHex) => {
40
+ if ((memoHex === null || memoHex === void 0 ? void 0 : memoHex.substring(0, 2)) === "0x") {
41
+ // eslint-disable-next-line no-control-regex
42
+ return Buffer.from(memoHex.substring(2), "hex").toString().replace(/\x00/g, "");
43
+ // NOTE: couldn't use replaceAll because it's not supported in node 14
44
+ }
45
+ return "";
46
+ };
47
+ export const mapPendingTxToOps = (accountID, address) => (tx) => {
48
+ const { sender_address, receipt_time, fee_rate, tx_id, token_transfer, tx_status, nonce } = tx;
49
+ if (tx.tx_type !== "token_transfer" || tx_status !== "pending") {
50
+ return [];
51
+ }
52
+ const memo = getMemo(token_transfer.memo);
53
+ const feeToUse = new BigNumber(fee_rate || "0");
54
+ const date = new Date(receipt_time * 1000);
55
+ const operationCommons = {
56
+ hash: tx_id,
57
+ fee: feeToUse,
58
+ accountId: accountID,
59
+ senders: [sender_address],
60
+ recipients: [token_transfer.recipient_address],
61
+ transactionSequenceNumber: nonce,
62
+ value: new BigNumber(token_transfer.amount).plus(feeToUse),
63
+ date,
64
+ extra: {
65
+ memo,
66
+ },
67
+ blockHeight: null,
68
+ blockHash: null,
69
+ };
70
+ const isSending = address === sender_address;
71
+ const isReceiving = token_transfer.recipient_address === address;
72
+ const ops = [];
73
+ if (isSending) {
74
+ const type = "OUT";
75
+ ops.push(Object.assign(Object.assign({}, operationCommons), { id: encodeOperationId(accountID, tx_id, type), type }));
76
+ }
77
+ else if (isReceiving) {
78
+ const type = "IN";
79
+ ops.push(Object.assign(Object.assign({}, operationCommons), { id: encodeOperationId(accountID, tx_id, type), type }));
80
+ }
81
+ return ops;
82
+ };
83
+ export const mapTxToOps = (accountID, address) => (tx) => {
84
+ var _a, _b, _c;
85
+ try {
86
+ const { tx_id, fee_rate, nonce, block_height, burn_block_time, sender_address, block_hash: blockHash, } = tx.tx;
87
+ const { stx_received: receivedValue, stx_sent: sentValue } = tx;
88
+ let recipients = [];
89
+ if (tx.tx.tx_type === "token_transfer" && tx.tx.token_transfer) {
90
+ recipients = [tx.tx.token_transfer.recipient_address];
91
+ }
92
+ const memoHex = (_a = tx.tx.token_transfer) === null || _a === void 0 ? void 0 : _a.memo;
93
+ const memo = getMemo(memoHex !== null && memoHex !== void 0 ? memoHex : "");
94
+ const ops = [];
95
+ const date = new Date(burn_block_time * 1000);
96
+ const feeToUse = new BigNumber(fee_rate || "0");
97
+ const isSending = sentValue !== "0" && receivedValue === "0";
98
+ const isReceiving = receivedValue !== "0";
99
+ const operationCommons = {
100
+ hash: tx_id,
101
+ blockHeight: block_height,
102
+ blockHash,
103
+ fee: feeToUse,
104
+ accountId: accountID,
105
+ senders: [sender_address],
106
+ transactionSequenceNumber: nonce,
107
+ date,
108
+ extra: {
109
+ memo,
110
+ },
111
+ };
112
+ if (isSending) {
113
+ const type = "OUT";
114
+ let internalOperations = undefined;
115
+ if (tx.tx.tx_type === "contract_call" && tx.tx.contract_call) {
116
+ internalOperations = [];
117
+ const deserialized = deserializeCV(tx.tx.contract_call.function_args[0].hex);
118
+ const decodedArgs = cvToJSON(deserialized);
119
+ for (const [idx, t] of decodedArgs.value.entries()) {
120
+ internalOperations.push(Object.assign(Object.assign({}, operationCommons), { id: encodeSubOperationId(accountID, tx_id, type, idx), contract: "send-many", type, value: new BigNumber(t.value.ustx.value), senders: [sender_address], recipients: [t.value.to.value], extra: {
121
+ memo: getMemo((_c = (_b = t.value.memo) === null || _b === void 0 ? void 0 : _b.value) !== null && _c !== void 0 ? _c : ""),
122
+ } }));
123
+ }
124
+ }
125
+ ops.push(Object.assign(Object.assign({}, operationCommons), { id: encodeOperationId(accountID, tx_id, type), value: new BigNumber(sentValue), recipients,
126
+ type,
127
+ internalOperations }));
128
+ }
129
+ if (isReceiving) {
130
+ const type = "IN";
131
+ ops.push(Object.assign(Object.assign({}, operationCommons), { id: encodeOperationId(accountID, tx_id, type), value: new BigNumber(receivedValue), recipients: recipients.length ? recipients : [address], type }));
132
+ }
133
+ return ops;
134
+ }
135
+ catch (err) {
136
+ log("warn", "mapTxToOps failed for stacks", err);
137
+ return [];
138
+ }
139
+ };
140
+ export function reconciliatePublicKey(publicKey, initialAccount) {
141
+ if (publicKey)
142
+ return publicKey;
143
+ if (initialAccount) {
144
+ const { xpubOrAddress } = decodeAccountId(initialAccount.id);
145
+ return xpubOrAddress;
146
+ }
147
+ throw new Error("publicKey wasn't properly restored");
148
+ }
149
+ export const findNextNonce = (senderAddress, pendingOps) => __awaiter(void 0, void 0, void 0, function* () {
150
+ let nextNonce = BigNumber(0);
151
+ for (const op of pendingOps) {
152
+ const nonce = op.transactionSequenceNumber
153
+ ? new BigNumber(op.transactionSequenceNumber)
154
+ : new BigNumber(0);
155
+ if (nonce.gt(nextNonce)) {
156
+ nextNonce = nonce;
157
+ }
158
+ }
159
+ const allMempoolTxns = yield fetchFullMempoolTxs(senderAddress);
160
+ for (const tx of allMempoolTxns) {
161
+ const nonce = BigNumber(tx.nonce);
162
+ if (nonce.gt(nextNonce)) {
163
+ nextNonce = nonce;
164
+ }
165
+ }
166
+ if (!nextNonce.eq(0)) {
167
+ nextNonce = nextNonce.plus(1);
168
+ }
169
+ const nonceResp = yield fetchNonce(senderAddress);
170
+ const possibleNextNonce = new BigNumber(nonceResp.possible_next_nonce);
171
+ if (possibleNextNonce.gt(nextNonce)) {
172
+ nextNonce = possibleNextNonce;
173
+ }
174
+ return nextNonce;
175
+ });
176
+ //# sourceMappingURL=misc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"misc.js","sourceRoot":"","sources":["../../../src/bridge/utils/misc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=misc.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"misc.unit.test.d.ts","sourceRoot":"","sources":["../../../src/bridge/utils/misc.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,228 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { mapPendingTxToOps, mapTxToOps } from "./misc";
11
+ import { encodeAccountId } from "@ledgerhq/coin-framework/account/index";
12
+ import { fetchFullTxs } from "../../network/index";
13
+ const Address = "SP26AZ1JSFZQ82VH5W2NJSB2QW15EW5YKT6WMD69J";
14
+ const mempoolTransfer = {
15
+ tx_id: "0x628369d2c9b49f0ec95531fe1e6a39141573117f3dd047fca65ff5e4058fbc55",
16
+ nonce: 32,
17
+ fee_rate: "487",
18
+ sender_address: "SPNX9YY3T4GR4XDSNRVWB2MDQVCTJMP3BGT7VCZA",
19
+ sponsored: false,
20
+ post_condition_mode: "deny",
21
+ post_conditions: [],
22
+ anchor_mode: "any",
23
+ tx_status: "pending",
24
+ receipt_time: 1714554733,
25
+ receipt_time_iso: "2024-05-01T09:12:13.000Z",
26
+ tx_type: "token_transfer",
27
+ token_transfer: {
28
+ recipient_address: "SP26AZ1JSFZQ82VH5W2NJSB2QW15EW5YKT6WMD69J",
29
+ amount: "9523",
30
+ memo: "0x00000000000000000000000000000000000000000000000000000000000000000000",
31
+ },
32
+ };
33
+ const sendManyTransfer = {
34
+ tx: {
35
+ tx_id: "0x68bdba90cdbd4e2e112fd008c8c396bd4ca365e482dc68fe25c7aeb5d8eb4c3f",
36
+ nonce: 18,
37
+ fee_rate: "500000",
38
+ sender_address: "SP26AZ1JSFZQ82VH5W2NJSB2QW15EW5YKT6WMD69J",
39
+ sponsored: false,
40
+ post_condition_mode: "deny",
41
+ post_conditions: [
42
+ {
43
+ type: "stx",
44
+ condition_code: "sent_equal_to",
45
+ amount: "345000",
46
+ principal: {
47
+ type_id: "principal_standard",
48
+ address: "SP26AZ1JSFZQ82VH5W2NJSB2QW15EW5YKT6WMD69J",
49
+ },
50
+ },
51
+ ],
52
+ anchor_mode: "any",
53
+ is_unanchored: false,
54
+ block_hash: "0xc8dd294972d86b09d4226fe99f8bfcdf2c55a7280ca87b7dc8b0fd119a7059f1",
55
+ parent_block_hash: "0xc8f2c105e37544ce27a3a470651d950c6e8fe5f6c072aef653e7ea1fbd97a429",
56
+ block_height: 137791,
57
+ block_time: 1706802438,
58
+ block_time_iso: "2024-02-01T15:47:18.000Z",
59
+ burn_block_time: 1706802438,
60
+ burn_block_time_iso: "2024-02-01T15:47:18.000Z",
61
+ parent_burn_block_time: 1706801557,
62
+ parent_burn_block_time_iso: "2024-02-01T15:32:37.000Z",
63
+ canonical: true,
64
+ tx_index: 121,
65
+ tx_status: "success",
66
+ tx_result: {
67
+ hex: "0x0703",
68
+ repr: "(ok true)",
69
+ },
70
+ microblock_hash: "0x",
71
+ microblock_sequence: 2147483647,
72
+ microblock_canonical: true,
73
+ event_count: 6,
74
+ events: [],
75
+ execution_cost_read_count: 6,
76
+ execution_cost_read_length: 737,
77
+ execution_cost_runtime: 151010,
78
+ execution_cost_write_count: 3,
79
+ execution_cost_write_length: 3,
80
+ tx_type: "contract_call",
81
+ contract_call: {
82
+ contract_id: "SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE.send-many-memo",
83
+ function_name: "send-many",
84
+ function_signature: "",
85
+ function_args: [
86
+ {
87
+ hex: "0x0b000000030c00000003046d656d6f020000000333333302746f05162bd4fbc3d1218275b9ae37c58a8dbed9a952c35c047573747801000000000000000000000000000027100c00000003046d656d6f020000000334343402746f051601a0369ffa2faa8fe74faada53e2e3d215b4d42a047573747801000000000000000000000000000088b80c00000003046d656d6f020000000335353502746f051660cc6b74d6d317918d0a7717069da56d775d817e047573747801000000000000000000000000000493e0",
88
+ repr: "(list (tuple (memo 0x333333) (to 'SPNX9YY3T4GR4XDSNRVWB2MDQVCTJMP3BGT7VCZA) (ustx u10000)) (tuple (memo 0x343434) (to 'SPT0DMZZ8QTN3Z79YNDMMZ2WF91BD6M59S9Z10Y) (ustx u35000)) (tuple (memo 0x353535) (to 'SP1GCRTVMTV9HF4CD19VHE1MXMNPQEQC1FT6YWF5Y) (ustx u300000)))",
89
+ name: "",
90
+ type: "(list 3 (tuple (memo (buff 3)) (to principal) (ustx uint)))",
91
+ },
92
+ ],
93
+ },
94
+ },
95
+ stx_sent: "845000",
96
+ stx_received: "0",
97
+ events: {
98
+ stx: {
99
+ transfer: 3,
100
+ mint: 0,
101
+ burn: 0,
102
+ },
103
+ ft: {
104
+ transfer: 0,
105
+ mint: 0,
106
+ burn: 0,
107
+ },
108
+ nft: {
109
+ transfer: 0,
110
+ mint: 0,
111
+ burn: 0,
112
+ },
113
+ },
114
+ };
115
+ const basicTransfer = {
116
+ tx: {
117
+ tx_id: "0x84254bb1e50b9e4f1dd48161ba5e87dff4ba8718117e8c364769067614dfb99a",
118
+ nonce: 22,
119
+ fee_rate: "125250",
120
+ sender_address: "SP26AZ1JSFZQ82VH5W2NJSB2QW15EW5YKT6WMD69J",
121
+ sponsored: false,
122
+ post_condition_mode: "deny",
123
+ post_conditions: [],
124
+ anchor_mode: "any",
125
+ is_unanchored: false,
126
+ block_hash: "0xd3272fbbc264eec8f8b7857541d7a5e6c043b54dd799274544a72d185dc34f1d",
127
+ parent_block_hash: "0x7bc3a3adae166f4a876697ad4c4f924d29dcea2c84607fc7765c0ed0855c3e90",
128
+ block_height: 151738,
129
+ block_time: 1716831904,
130
+ block_time_iso: "2024-05-27T17:45:04.000Z",
131
+ burn_block_time: 1716831849,
132
+ burn_block_time_iso: "2024-05-27T17:44:09.000Z",
133
+ parent_burn_block_time: 1716831377,
134
+ parent_burn_block_time_iso: "2024-05-27T17:36:17.000Z",
135
+ canonical: true,
136
+ tx_index: 29,
137
+ tx_status: "success",
138
+ tx_result: {
139
+ hex: "0x0703",
140
+ repr: "(ok true)",
141
+ },
142
+ microblock_hash: "0x",
143
+ microblock_sequence: 2147483647,
144
+ microblock_canonical: true,
145
+ event_count: 1,
146
+ events: [],
147
+ execution_cost_read_count: 0,
148
+ execution_cost_read_length: 0,
149
+ execution_cost_runtime: 0,
150
+ execution_cost_write_count: 0,
151
+ execution_cost_write_length: 0,
152
+ tx_type: "token_transfer",
153
+ token_transfer: {
154
+ recipient_address: "SPNX9YY3T4GR4XDSNRVWB2MDQVCTJMP3BGT7VCZA",
155
+ amount: "827695",
156
+ memo: "0x31323333333334000000000000000000000000000000000000000000000000000000",
157
+ },
158
+ },
159
+ stx_sent: "952945",
160
+ stx_received: "0",
161
+ events: {
162
+ stx: {
163
+ transfer: 1,
164
+ mint: 0,
165
+ burn: 0,
166
+ },
167
+ ft: {
168
+ transfer: 0,
169
+ mint: 0,
170
+ burn: 0,
171
+ },
172
+ nft: {
173
+ transfer: 0,
174
+ mint: 0,
175
+ burn: 0,
176
+ },
177
+ },
178
+ };
179
+ describe("operation building from raw", () => {
180
+ test("map raw transaction to op", () => __awaiter(void 0, void 0, void 0, function* () {
181
+ const accountId = encodeAccountId({
182
+ type: "js",
183
+ version: "2",
184
+ currencyId: "stacks",
185
+ xpubOrAddress: "",
186
+ derivationMode: "stacks_wallet",
187
+ });
188
+ // Contains operations for txn of type token_transfer
189
+ const operations = [sendManyTransfer, basicTransfer].flatMap(mapTxToOps(accountId, Address));
190
+ expect(operations.length).toBe(2);
191
+ const opSenMany = operations[0];
192
+ const opBasic = operations[1];
193
+ expect(opSenMany.type).toBe("OUT");
194
+ expect(opSenMany.internalOperations).toHaveLength(3);
195
+ expect(opSenMany.senders).toHaveLength(1);
196
+ expect(opSenMany.recipients).toHaveLength(0);
197
+ expect(opBasic.type).toBe("OUT");
198
+ expect(opBasic.internalOperations).toBeUndefined();
199
+ expect(opBasic.senders).toHaveLength(1);
200
+ expect(opBasic.recipients).toHaveLength(1);
201
+ }));
202
+ });
203
+ test("convert raw transactions to live operations", () => __awaiter(void 0, void 0, void 0, function* () {
204
+ const rawTxs = yield fetchFullTxs(Address);
205
+ const operations = rawTxs.flatMap(mapTxToOps("dummyAccountID", Address));
206
+ expect(operations).toBeDefined();
207
+ expect(operations.length).toBeGreaterThan(0);
208
+ }));
209
+ describe("operation building from mempool raw", () => {
210
+ test("map raw mempool transaction to op", () => __awaiter(void 0, void 0, void 0, function* () {
211
+ const accountId = encodeAccountId({
212
+ type: "js",
213
+ version: "2",
214
+ currencyId: "stacks",
215
+ xpubOrAddress: "",
216
+ derivationMode: "stacks_wallet",
217
+ });
218
+ const address = "SPNX9YY3T4GR4XDSNRVWB2MDQVCTJMP3BGT7VCZA";
219
+ // Contains operations for txn of type token_transfer
220
+ const operations = [mempoolTransfer].map(mapPendingTxToOps(accountId, address)).flat();
221
+ expect(operations.length).toBe(1);
222
+ expect(operations[0].type).toBe("OUT");
223
+ expect(operations[0].internalOperations).toBeUndefined();
224
+ expect(operations[0].senders).toHaveLength(1);
225
+ expect(operations[0].recipients).toHaveLength(1);
226
+ }));
227
+ });
228
+ //# sourceMappingURL=misc.unit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"misc.unit.test.js","sourceRoot":"","sources":["../../../src/bridge/utils/misc.unit.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { CurrencyConfig } from "@ledgerhq/coin-framework/config";
2
+ export type StacksCoinConfig = () => CurrencyConfig & {
3
+ config_currency_stacks: {
4
+ type: "object";
5
+ default: {
6
+ status: {
7
+ type: "active";
8
+ };
9
+ };
10
+ };
11
+ };
12
+ export declare const setCoinConfig: (config: StacksCoinConfig) => void;
13
+ export declare const getCoinConfig: () => ReturnType<StacksCoinConfig>;
14
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEjE,MAAM,MAAM,gBAAgB,GAAG,MAAM,cAAc,GAAG;IACpD,sBAAsB,EAAE;QACtB,IAAI,EAAE,QAAQ,CAAC;QACf,OAAO,EAAE;YACP,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ,CAAC;aAChB,CAAC;SACH,CAAC;KACH,CAAC;CACH,CAAC;AAIF,eAAO,MAAM,aAAa,WAAY,gBAAgB,KAAG,IAExD,CAAC;AAEF,eAAO,MAAM,aAAa,QAAO,UAAU,CAAC,gBAAgB,CAM3D,CAAC"}
@@ -0,0 +1,11 @@
1
+ let coinConfig;
2
+ export const setCoinConfig = (config) => {
3
+ coinConfig = config;
4
+ };
5
+ export const getCoinConfig = () => {
6
+ if (!(coinConfig === null || coinConfig === void 0 ? void 0 : coinConfig())) {
7
+ throw new Error("Stacks module config not set");
8
+ }
9
+ return coinConfig();
10
+ };
11
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAaA,IAAI,UAAwC,CAAC;AAE7C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAwB,EAAQ,EAAE;IAC9D,UAAU,GAAG,MAAM,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,GAAiC,EAAE;IAC9D,IAAI,CAAC,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,EAAI,CAAA,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,UAAU,EAAE,CAAC;AACtB,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare const StacksMemoTooLong: import("@ledgerhq/errors/lib/helpers").LedgerErrorConstructor<{
2
+ [key: string]: unknown;
3
+ }>;
4
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB;;EAA8C,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { createCustomErrorClass } from "@ledgerhq/errors";
2
+ export const StacksMemoTooLong = createCustomErrorClass("StacksMemoTooLong");
3
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,MAAM,CAAC,MAAM,iBAAiB,GAAG,sBAAsB,CAAC,mBAAmB,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from "./types";
2
+ export { createBridges } from "./bridge/index";
3
+ export type { StacksCoinConfig } from "./config";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,YAAY,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from "./types";
2
+ export { createBridges } from "./bridge/index";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { BalanceResponse, BroadcastTransactionRequest, BroadcastTransactionResponse, EstimatedFeesRequest, EstimatedFeesResponse, GetNonceResponse, MempoolResponse, MempoolTransaction, NetworkStatusResponse, TransactionResponse, TransactionsResponse } from "./api.types";
2
+ export declare const fetchBalances: (addr: string) => Promise<BalanceResponse>;
3
+ export declare const fetchEstimatedFees: (request: EstimatedFeesRequest) => Promise<EstimatedFeesResponse>;
4
+ export declare const fetchBlockHeight: () => Promise<NetworkStatusResponse>;
5
+ export declare const fetchTxs: (addr: string, offset?: number) => Promise<TransactionsResponse>;
6
+ export declare const fetchFullTxs: (addr: string) => Promise<TransactionResponse[]>;
7
+ export declare const broadcastTx: (message: BroadcastTransactionRequest) => Promise<BroadcastTransactionResponse>;
8
+ export declare const fetchMempoolTxs: (addr: string, offset?: number) => Promise<MempoolResponse>;
9
+ export declare const fetchFullMempoolTxs: (addr: string) => Promise<MempoolTransaction[]>;
10
+ export declare const fetchNonce: (addr: string) => Promise<GetNonceResponse>;
11
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/network/api.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,eAAe,EACf,2BAA2B,EAC3B,4BAA4B,EAC5B,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,aAAa,CAAC;AA6DrB,eAAO,MAAM,aAAa,SAAgB,MAAM,KAAG,OAAO,CAAC,eAAe,CAGzE,CAAC;AAEF,eAAO,MAAM,kBAAkB,YACpB,oBAAoB,KAC5B,OAAO,CAAC,qBAAqB,CAG/B,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAa,OAAO,CAAC,qBAAqB,CAGtE,CAAC;AAEF,eAAO,MAAM,QAAQ,SAAgB,MAAM,sBAAe,OAAO,CAAC,oBAAoB,CAUrF,CAAC;AAEF,eAAO,MAAM,YAAY,SAAgB,MAAM,KAAG,OAAO,CAAC,mBAAmB,EAAE,CA6B9E,CAAC;AAEF,eAAO,MAAM,WAAW,YACb,2BAA2B,KACnC,OAAO,CAAC,4BAA4B,CAKtC,CAAC;AAEF,eAAO,MAAM,eAAe,SAAgB,MAAM,sBAAe,OAAO,CAAC,eAAe,CAKvF,CAAC;AAEF,eAAO,MAAM,mBAAmB,SAAgB,MAAM,KAAG,OAAO,CAAC,kBAAkB,EAAE,CAcpF,CAAC;AAEF,eAAO,MAAM,UAAU,SAAgB,MAAM,KAAG,OAAO,CAAC,gBAAgB,CAGvE,CAAC"}
@@ -0,0 +1,124 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { getEnv } from "@ledgerhq/live-env";
11
+ import network from "@ledgerhq/live-network/network";
12
+ const getStacksURL = (path) => {
13
+ const baseUrl = getEnv("API_STACKS_ENDPOINT");
14
+ if (!baseUrl)
15
+ throw new Error("API base URL not available");
16
+ return `${baseUrl}${path ? path : ""}`;
17
+ };
18
+ const fetch = (path) => __awaiter(void 0, void 0, void 0, function* () {
19
+ const url = getStacksURL(path);
20
+ // We force data to this way as network func is not using the correct param type. Changing that func will generate errors in other implementations
21
+ const opts = {
22
+ method: "GET",
23
+ url,
24
+ };
25
+ const rawResponse = yield network(opts);
26
+ // We force data to this way as network func is not using the correct param type. Changing that func will generate errors in other implementations
27
+ const { data } = rawResponse;
28
+ return data;
29
+ });
30
+ const send = (path, data) => __awaiter(void 0, void 0, void 0, function* () {
31
+ const url = getStacksURL(path);
32
+ const opts = {
33
+ method: "POST",
34
+ url,
35
+ data: JSON.stringify(data),
36
+ headers: { "Content-Type": "application/json" },
37
+ };
38
+ const rawResponse = yield network(opts);
39
+ // We force data to this way as network func is not using generics. Changing that func will generate errors in other implementations
40
+ const { data: responseData } = rawResponse;
41
+ return responseData;
42
+ });
43
+ const sendRaw = (path, data) => __awaiter(void 0, void 0, void 0, function* () {
44
+ const url = getStacksURL(path);
45
+ const opts = {
46
+ method: "POST",
47
+ url,
48
+ data,
49
+ headers: { "Content-Type": "application/octet-stream" },
50
+ };
51
+ const rawResponse = yield network(opts);
52
+ // We force data to this way as network func is not using generics. Changing that func will generate errors in other implementations
53
+ const { data: responseData } = rawResponse;
54
+ return responseData;
55
+ });
56
+ export const fetchBalances = (addr) => __awaiter(void 0, void 0, void 0, function* () {
57
+ const data = yield fetch(`/extended/v1/address/${addr}/stx`);
58
+ return data; // TODO Validate if the response fits this interface
59
+ });
60
+ export const fetchEstimatedFees = (request) => __awaiter(void 0, void 0, void 0, function* () {
61
+ const feeRate = yield send(`/v2/fees/transfer`, request);
62
+ return feeRate; // TODO Validate if the response fits this interface
63
+ });
64
+ export const fetchBlockHeight = () => __awaiter(void 0, void 0, void 0, function* () {
65
+ const data = yield fetch("/extended");
66
+ return data; // TODO Validate if the response fits this interface
67
+ });
68
+ export const fetchTxs = (addr_1, ...args_1) => __awaiter(void 0, [addr_1, ...args_1], void 0, function* (addr, offset = 0) {
69
+ const limit = 50;
70
+ try {
71
+ const response = yield fetch(`/extended/v2/addresses/${addr}/transactions?offset=${offset}&limit=${limit}`);
72
+ return response; // TODO Validate if the response fits this interface
73
+ }
74
+ catch (e) {
75
+ return { limit, offset, total: 0, results: [] };
76
+ }
77
+ });
78
+ export const fetchFullTxs = (addr) => __awaiter(void 0, void 0, void 0, function* () {
79
+ let qty, offset = 0;
80
+ let txs = [];
81
+ do {
82
+ const { results, total, limit } = yield fetchTxs(addr, offset);
83
+ txs = txs.concat(results.filter(t => {
84
+ var _a, _b, _c, _d;
85
+ if (((_a = t.tx) === null || _a === void 0 ? void 0 : _a.tx_type) === "token_transfer") {
86
+ return true;
87
+ }
88
+ if (((_b = t.tx) === null || _b === void 0 ? void 0 : _b.tx_type) === "contract_call" &&
89
+ ((_d = (_c = t.tx) === null || _c === void 0 ? void 0 : _c.contract_call) === null || _d === void 0 ? void 0 : _d.function_name) === "send-many") {
90
+ return true;
91
+ }
92
+ return false;
93
+ }));
94
+ offset += limit;
95
+ qty = total;
96
+ } while (offset < qty);
97
+ return txs; // TODO Validate if the response fits this interface
98
+ });
99
+ export const broadcastTx = (message) => __awaiter(void 0, void 0, void 0, function* () {
100
+ let response = yield sendRaw(`/v2/transactions`, message);
101
+ if (response != "")
102
+ response = `0x${response}`;
103
+ return response; // TODO Validate if the response fits this interface
104
+ });
105
+ export const fetchMempoolTxs = (addr_1, ...args_1) => __awaiter(void 0, [addr_1, ...args_1], void 0, function* (addr, offset = 0) {
106
+ const response = yield fetch(`/extended/v1/tx/mempool?sender_address=${addr}&offset=${offset}`);
107
+ return response; // TODO Validate if the response fits this interface
108
+ });
109
+ export const fetchFullMempoolTxs = (addr) => __awaiter(void 0, void 0, void 0, function* () {
110
+ let qty, offset = 0;
111
+ let txs = [];
112
+ do {
113
+ const { results, total, limit } = yield fetchMempoolTxs(addr, offset);
114
+ txs = txs.concat(results);
115
+ offset += limit;
116
+ qty = total;
117
+ } while (offset < qty);
118
+ return txs; // TODO Validate if the response fits this interface
119
+ });
120
+ export const fetchNonce = (addr) => __awaiter(void 0, void 0, void 0, function* () {
121
+ const response = yield fetch(`/extended/v1/address/${addr}/nonces`);
122
+ return response; // TODO Validate if the response fits this interface
123
+ });
124
+ //# sourceMappingURL=api.js.map