@lendasat/lendaswap-sdk-pure 0.2.42 → 0.2.44

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 (252) hide show
  1. package/dist/_esm-7KJOBTZC.js +3660 -0
  2. package/dist/_esm-7KJOBTZC.js.map +1 -0
  3. package/dist/_esm-UGRDSVEV.cjs +3662 -0
  4. package/dist/_esm-UGRDSVEV.cjs.map +1 -0
  5. package/dist/api/client.d.ts +0 -4
  6. package/dist/api/client.d.ts.map +1 -1
  7. package/dist/base-2KYNAFR3.cjs +109 -0
  8. package/dist/base-2KYNAFR3.cjs.map +1 -0
  9. package/dist/base-B6OGU65B.js +7 -0
  10. package/dist/base-B6OGU65B.js.map +1 -0
  11. package/dist/ccip-MPMAZOUF.js +5 -0
  12. package/dist/ccip-MPMAZOUF.js.map +1 -0
  13. package/dist/ccip-PD37NJHA.cjs +26 -0
  14. package/dist/ccip-PD37NJHA.cjs.map +1 -0
  15. package/dist/cctp-bridge/index.cjs +67 -0
  16. package/dist/cctp-bridge/index.cjs.map +1 -0
  17. package/dist/cctp-bridge/index.js +51 -15
  18. package/dist/cctp-bridge/index.js.map +1 -1
  19. package/dist/cctp-inbound/client.d.ts +21 -19
  20. package/dist/cctp-inbound/client.d.ts.map +1 -1
  21. package/dist/cctp-inbound/smartAccount.d.ts +21 -19
  22. package/dist/cctp-inbound/smartAccount.d.ts.map +1 -1
  23. package/dist/chunk-3JWT4OW2.js +369 -0
  24. package/dist/chunk-3JWT4OW2.js.map +1 -0
  25. package/dist/chunk-A4GKKURK.cjs +430 -0
  26. package/dist/chunk-A4GKKURK.cjs.map +1 -0
  27. package/dist/chunk-BZU3R5DJ.cjs +554 -0
  28. package/dist/chunk-BZU3R5DJ.cjs.map +1 -0
  29. package/dist/chunk-C4YXYD24.js +418 -0
  30. package/dist/chunk-C4YXYD24.js.map +1 -0
  31. package/dist/chunk-CZNQYFDP.js +6141 -0
  32. package/dist/chunk-CZNQYFDP.js.map +1 -0
  33. package/dist/chunk-DKTFDGIU.js +2207 -0
  34. package/dist/chunk-DKTFDGIU.js.map +1 -0
  35. package/dist/chunk-DNSJDKTP.cjs +96 -0
  36. package/dist/chunk-DNSJDKTP.cjs.map +1 -0
  37. package/dist/chunk-EPKFLKTM.js +47093 -0
  38. package/dist/chunk-EPKFLKTM.js.map +1 -0
  39. package/dist/chunk-JBVKWKD4.cjs +50 -0
  40. package/dist/chunk-JBVKWKD4.cjs.map +1 -0
  41. package/dist/chunk-NPFJAXKV.js +551 -0
  42. package/dist/chunk-NPFJAXKV.js.map +1 -0
  43. package/dist/chunk-PKDJZJMV.cjs +2214 -0
  44. package/dist/chunk-PKDJZJMV.cjs.map +1 -0
  45. package/dist/chunk-PLDDJCW6.js +43 -0
  46. package/dist/chunk-PLDDJCW6.js.map +1 -0
  47. package/dist/chunk-RIOT5VOJ.cjs +47240 -0
  48. package/dist/chunk-RIOT5VOJ.cjs.map +1 -0
  49. package/dist/chunk-WVZSHRV7.cjs +431 -0
  50. package/dist/chunk-WVZSHRV7.cjs.map +1 -0
  51. package/dist/chunk-YEZOPVAH.js +86 -0
  52. package/dist/chunk-YEZOPVAH.js.map +1 -0
  53. package/dist/chunk-YLWPBHMV.cjs +6311 -0
  54. package/dist/chunk-YLWPBHMV.cjs.map +1 -0
  55. package/dist/client.d.ts +68 -1
  56. package/dist/client.d.ts.map +1 -1
  57. package/dist/compose-quote.d.ts +77 -0
  58. package/dist/compose-quote.d.ts.map +1 -0
  59. package/dist/delegate.cjs +23 -0
  60. package/dist/delegate.cjs.map +1 -0
  61. package/dist/delegate.js +5 -269
  62. package/dist/delegate.js.map +1 -1
  63. package/dist/dist-NE2R4YCX.js +5 -0
  64. package/dist/dist-NE2R4YCX.js.map +1 -0
  65. package/dist/dist-VEHYC67F.cjs +550 -0
  66. package/dist/dist-VEHYC67F.cjs.map +1 -0
  67. package/dist/esplora.d.ts +14 -0
  68. package/dist/esplora.d.ts.map +1 -1
  69. package/dist/generated/api.d.ts +235 -38
  70. package/dist/generated/api.d.ts.map +1 -1
  71. package/dist/index.cjs +35461 -0
  72. package/dist/index.cjs.map +1 -0
  73. package/dist/index.d.ts +2 -1
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js +35309 -32
  76. package/dist/index.js.map +1 -1
  77. package/dist/mine.wasm-JJEJEODX.js +9 -0
  78. package/dist/mine.wasm-JJEJEODX.js.map +1 -0
  79. package/dist/mine.wasm-Z3ORSBKN.cjs +12 -0
  80. package/dist/mine.wasm-Z3ORSBKN.cjs.map +1 -0
  81. package/dist/node.cjs +166 -0
  82. package/dist/node.cjs.map +1 -0
  83. package/dist/node.js +157 -18
  84. package/dist/node.js.map +1 -1
  85. package/dist/secp256k1-PJCSE4N6.cjs +30 -0
  86. package/dist/secp256k1-PJCSE4N6.cjs.map +1 -0
  87. package/dist/secp256k1-VZNNVEPN.js +5 -0
  88. package/dist/secp256k1-VZNNVEPN.js.map +1 -0
  89. package/dist/tokens.d.ts +2 -1
  90. package/dist/tokens.d.ts.map +1 -1
  91. package/dist/types/chain-config.d.ts +50 -0
  92. package/dist/types/chain-config.d.ts.map +1 -0
  93. package/dist/types/chain.d.ts +11 -0
  94. package/dist/types/chain.d.ts.map +1 -0
  95. package/dist/types/dex-quote.d.ts +85 -0
  96. package/dist/types/dex-quote.d.ts.map +1 -0
  97. package/dist/types/index.d.ts +15 -0
  98. package/dist/types/index.d.ts.map +1 -0
  99. package/dist/types/network-fees.d.ts +43 -0
  100. package/dist/types/network-fees.d.ts.map +1 -0
  101. package/dist/types/quote.d.ts +87 -0
  102. package/dist/types/quote.d.ts.map +1 -0
  103. package/dist/types/swap-pairs.d.ts +37 -0
  104. package/dist/types/swap-pairs.d.ts.map +1 -0
  105. package/dist/version.d.ts +2 -2
  106. package/dist/wallet-SCGRX3EN.js +4 -0
  107. package/dist/wallet-SCGRX3EN.js.map +1 -0
  108. package/dist/wallet-SZJDXAY7.cjs +45 -0
  109. package/dist/wallet-SZJDXAY7.cjs.map +1 -0
  110. package/package.json +23 -10
  111. package/dist/api/client.js +0 -13
  112. package/dist/api/client.js.map +0 -1
  113. package/dist/arkade-network.js +0 -40
  114. package/dist/arkade-network.js.map +0 -1
  115. package/dist/arkade.js +0 -61
  116. package/dist/arkade.js.map +0 -1
  117. package/dist/cctp/attestation.js +0 -149
  118. package/dist/cctp/attestation.js.map +0 -1
  119. package/dist/cctp/constants.js +0 -92
  120. package/dist/cctp/constants.js.map +0 -1
  121. package/dist/cctp/fee.js +0 -70
  122. package/dist/cctp/fee.js.map +0 -1
  123. package/dist/cctp/index.js +0 -13
  124. package/dist/cctp/index.js.map +0 -1
  125. package/dist/cctp/types.js +0 -5
  126. package/dist/cctp/types.js.map +0 -1
  127. package/dist/cctp/utils.js +0 -91
  128. package/dist/cctp/utils.js.map +0 -1
  129. package/dist/cctp-bridge/bridge.js +0 -74
  130. package/dist/cctp-bridge/bridge.js.map +0 -1
  131. package/dist/cctp-inbound/approveAndBurn.js +0 -95
  132. package/dist/cctp-inbound/approveAndBurn.js.map +0 -1
  133. package/dist/cctp-inbound/burn.js +0 -66
  134. package/dist/cctp-inbound/burn.js.map +0 -1
  135. package/dist/cctp-inbound/chainMap.js +0 -128
  136. package/dist/cctp-inbound/chainMap.js.map +0 -1
  137. package/dist/cctp-inbound/client.js +0 -125
  138. package/dist/cctp-inbound/client.js.map +0 -1
  139. package/dist/cctp-inbound/eip2612.js +0 -95
  140. package/dist/cctp-inbound/eip2612.js.map +0 -1
  141. package/dist/cctp-inbound/evmSignerAdapter.js +0 -82
  142. package/dist/cctp-inbound/evmSignerAdapter.js.map +0 -1
  143. package/dist/cctp-inbound/fundSwap.js +0 -95
  144. package/dist/cctp-inbound/fundSwap.js.map +0 -1
  145. package/dist/cctp-inbound/index.js +0 -34
  146. package/dist/cctp-inbound/index.js.map +0 -1
  147. package/dist/cctp-inbound/permit2.js +0 -32
  148. package/dist/cctp-inbound/permit2.js.map +0 -1
  149. package/dist/cctp-inbound/preflight.js +0 -84
  150. package/dist/cctp-inbound/preflight.js.map +0 -1
  151. package/dist/cctp-inbound/recover.js +0 -177
  152. package/dist/cctp-inbound/recover.js.map +0 -1
  153. package/dist/cctp-inbound/smartAccount.js +0 -117
  154. package/dist/cctp-inbound/smartAccount.js.map +0 -1
  155. package/dist/cctp-inbound/submit.js +0 -136
  156. package/dist/cctp-inbound/submit.js.map +0 -1
  157. package/dist/cctp-inbound/types.js +0 -5
  158. package/dist/cctp-inbound/types.js.map +0 -1
  159. package/dist/cctp-inbound/userOp.js +0 -151
  160. package/dist/cctp-inbound/userOp.js.map +0 -1
  161. package/dist/client.js +0 -4126
  162. package/dist/client.js.map +0 -1
  163. package/dist/create/arkade-to-lightning.js +0 -76
  164. package/dist/create/arkade-to-lightning.js.map +0 -1
  165. package/dist/create/arkade.js +0 -86
  166. package/dist/create/arkade.js.map +0 -1
  167. package/dist/create/bitcoin-to-arkade.js +0 -76
  168. package/dist/create/bitcoin-to-arkade.js.map +0 -1
  169. package/dist/create/bitcoin.js +0 -77
  170. package/dist/create/bitcoin.js.map +0 -1
  171. package/dist/create/evm-to-arkade.js +0 -80
  172. package/dist/create/evm-to-arkade.js.map +0 -1
  173. package/dist/create/evm-to-bitcoin.js +0 -82
  174. package/dist/create/evm-to-bitcoin.js.map +0 -1
  175. package/dist/create/evm-to-lightning.js +0 -89
  176. package/dist/create/evm-to-lightning.js.map +0 -1
  177. package/dist/create/index.js +0 -21
  178. package/dist/create/index.js.map +0 -1
  179. package/dist/create/lightning-to-arkade.js +0 -69
  180. package/dist/create/lightning-to-arkade.js.map +0 -1
  181. package/dist/create/lightning.js +0 -61
  182. package/dist/create/lightning.js.map +0 -1
  183. package/dist/create/retry.js +0 -71
  184. package/dist/create/retry.js.map +0 -1
  185. package/dist/create/types.js +0 -5
  186. package/dist/create/types.js.map +0 -1
  187. package/dist/escrow/index.js +0 -115
  188. package/dist/escrow/index.js.map +0 -1
  189. package/dist/esplora.js +0 -47
  190. package/dist/esplora.js.map +0 -1
  191. package/dist/evm/coordinator.js +0 -714
  192. package/dist/evm/coordinator.js.map +0 -1
  193. package/dist/evm/htlc.js +0 -278
  194. package/dist/evm/htlc.js.map +0 -1
  195. package/dist/evm/index.js +0 -10
  196. package/dist/evm/index.js.map +0 -1
  197. package/dist/evm/signing.js +0 -70
  198. package/dist/evm/signing.js.map +0 -1
  199. package/dist/evm/wallet.js +0 -133
  200. package/dist/evm/wallet.js.map +0 -1
  201. package/dist/generated/api.js +0 -6
  202. package/dist/generated/api.js.map +0 -1
  203. package/dist/logging.js +0 -130
  204. package/dist/logging.js.map +0 -1
  205. package/dist/price-calculations.js +0 -135
  206. package/dist/price-calculations.js.map +0 -1
  207. package/dist/redeem/arkade.js +0 -416
  208. package/dist/redeem/arkade.js.map +0 -1
  209. package/dist/redeem/ethereum.js +0 -206
  210. package/dist/redeem/ethereum.js.map +0 -1
  211. package/dist/redeem/gasless.js +0 -73
  212. package/dist/redeem/gasless.js.map +0 -1
  213. package/dist/redeem/index.js +0 -189
  214. package/dist/redeem/index.js.map +0 -1
  215. package/dist/redeem/types.js +0 -36
  216. package/dist/redeem/types.js.map +0 -1
  217. package/dist/refund/arkade.js +0 -200
  218. package/dist/refund/arkade.js.map +0 -1
  219. package/dist/refund/collab-arkade-evm.js +0 -307
  220. package/dist/refund/collab-arkade-evm.js.map +0 -1
  221. package/dist/refund/collab-arkade-lightning.js +0 -245
  222. package/dist/refund/collab-arkade-lightning.js.map +0 -1
  223. package/dist/refund/index.js +0 -12
  224. package/dist/refund/index.js.map +0 -1
  225. package/dist/refund/onchain.js +0 -366
  226. package/dist/refund/onchain.js.map +0 -1
  227. package/dist/signer/index.js +0 -249
  228. package/dist/signer/index.js.map +0 -1
  229. package/dist/storage/idb.js +0 -236
  230. package/dist/storage/idb.js.map +0 -1
  231. package/dist/storage/index.js +0 -98
  232. package/dist/storage/index.js.map +0 -1
  233. package/dist/storage/sqlite.js +0 -206
  234. package/dist/storage/sqlite.js.map +0 -1
  235. package/dist/storage/types.js +0 -9
  236. package/dist/storage/types.js.map +0 -1
  237. package/dist/tokens.js +0 -322
  238. package/dist/tokens.js.map +0 -1
  239. package/dist/usd-price.js +0 -96
  240. package/dist/usd-price.js.map +0 -1
  241. package/dist/usdt0-bridge/constants.js +0 -71
  242. package/dist/usdt0-bridge/constants.js.map +0 -1
  243. package/dist/usdt0-bridge/index.js +0 -11
  244. package/dist/usdt0-bridge/index.js.map +0 -1
  245. package/dist/usdt0-bridge/tracking.js +0 -123
  246. package/dist/usdt0-bridge/tracking.js.map +0 -1
  247. package/dist/usdt0-bridge/utils.js +0 -51
  248. package/dist/usdt0-bridge/utils.js.map +0 -1
  249. package/dist/version.js +0 -6
  250. package/dist/version.js.map +0 -1
  251. package/dist/ws.js +0 -145
  252. package/dist/ws.js.map +0 -1
package/dist/tokens.js DELETED
@@ -1,322 +0,0 @@
1
- import { CCTP_DOMAINS, USDC_ADDRESSES } from "./cctp/index.js";
2
- import { LZ_EIDS, USDT0_ADDRESSES } from "./usdt0-bridge/index.js";
3
- // Well-known USDC contract addresses
4
- const USDC_POLYGON = "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359";
5
- const USDC_ARBITRUM = "0xaf88d065e77c8cC2239327C5EDb3A432268e5831";
6
- const USDC_ETHEREUM = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48";
7
- // Well-known USDT contract addresses
8
- const USDT_POLYGON = "0xc2132D05D31c914a87C6611C10748AEb04B58e8F";
9
- const USDT_ARBITRUM = "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9";
10
- const USDT_ETHEREUM = "0xdAC17F958D2ee523a2206206994597C13D831ec7";
11
- // Well-known WBTC contract addresses
12
- const WBTC_POLYGON = "0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6";
13
- const WBTC_ETHEREUM = "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599";
14
- // Well-known tBTC contract addresses
15
- const TBTC_ETHEREUM = "0x18084fbA666a33d37592fA2633fD49a74DD93a88";
16
- const TBTC_ARBITRUM = "0x6c84a8f1c29108F47a79964b5Fe888D4f4D0dE40";
17
- /**
18
- * Predefined asset constants for common tokens.
19
- *
20
- * ```ts
21
- * import { Asset } from "@lendasat/lendaswap-sdk-pure";
22
- *
23
- * await client.createSwap({
24
- * source: Asset.BTC_ARKADE,
25
- * target: Asset.USDC_POLYGON,
26
- * sourceAmount: 100_000,
27
- * targetAddress: "0x...",
28
- * });
29
- * ```
30
- */
31
- export const Asset = {
32
- // Bitcoin
33
- BTC_LIGHTNING: { chain: "Lightning", tokenId: "btc" },
34
- BTC_ARKADE: { chain: "Arkade", tokenId: "btc" },
35
- BTC_ONCHAIN: { chain: "Bitcoin", tokenId: "btc" },
36
- // USDC
37
- USDC_POLYGON: { chain: "137", tokenId: USDC_POLYGON },
38
- USDC_ARBITRUM: { chain: "42161", tokenId: USDC_ARBITRUM },
39
- USDC_ETHEREUM: { chain: "1", tokenId: USDC_ETHEREUM },
40
- // USDT
41
- USDT_POLYGON: { chain: "137", tokenId: USDT_POLYGON },
42
- USDT_ARBITRUM: { chain: "42161", tokenId: USDT_ARBITRUM },
43
- USDT_ETHEREUM: { chain: "1", tokenId: USDT_ETHEREUM },
44
- // WBTC
45
- WBTC_POLYGON: { chain: "137", tokenId: WBTC_POLYGON },
46
- WBTC_ETHEREUM: { chain: "1", tokenId: WBTC_ETHEREUM },
47
- // tBTC
48
- TBTC_ETHEREUM: { chain: "1", tokenId: TBTC_ETHEREUM },
49
- TBTC_ARBITRUM: { chain: "42161", tokenId: TBTC_ARBITRUM },
50
- };
51
- // ── Legacy constants (kept for backward compatibility) ───────────────────────
52
- // Well-known token ID constants
53
- export const BTC_LIGHTNING = "btc";
54
- export const BTC_ARKADE = "btc";
55
- export const BTC_ONCHAIN = "btc";
56
- // Well-known TokenInfo constants
57
- export const BTC_LIGHTNING_INFO = {
58
- token_id: BTC_LIGHTNING,
59
- symbol: "BTC",
60
- name: "Bitcoin (Lightning)",
61
- decimals: 8,
62
- chain: "Lightning",
63
- };
64
- export const BTC_ARKADE_INFO = {
65
- token_id: BTC_ARKADE,
66
- symbol: "BTC",
67
- name: "Bitcoin (Arkade)",
68
- decimals: 8,
69
- chain: "Arkade",
70
- };
71
- export const BTC_ONCHAIN_INFO = {
72
- token_id: BTC_ONCHAIN,
73
- symbol: "BTC",
74
- name: "Bitcoin (On-chain)",
75
- decimals: 8,
76
- chain: "Bitcoin",
77
- };
78
- // ============================================================================
79
- // EVM Chain IDs
80
- // ============================================================================
81
- /** Source chains where HTLCs and DEX swaps run. */
82
- const SOURCE_EVM_CHAINS = ["1", "137", "42161"];
83
- /** All EVM chain IDs including CCTP and USDT0 bridge-only destinations. */
84
- const ALL_EVM_CHAIN_IDS = {
85
- Ethereum: "1",
86
- Polygon: "137",
87
- Arbitrum: "42161",
88
- Optimism: "10",
89
- Base: "8453",
90
- Avalanche: "43114",
91
- Linea: "59144",
92
- Unichain: "130",
93
- Sonic: "146",
94
- "World Chain": "480",
95
- Ink: "57073",
96
- Sei: "1329",
97
- HyperEVM: "999",
98
- Monad: "143",
99
- XDC: "50",
100
- // USDT0-only chains
101
- Berachain: "80094",
102
- "Conflux eSpace": "1030",
103
- Corn: "21000000",
104
- Flare: "14",
105
- Hedera: "295",
106
- Mantle: "5000",
107
- MegaETH: "4326",
108
- Morph: "2818",
109
- Plasma: "9745",
110
- Rootstock: "30",
111
- Stable: "988",
112
- Tempo: "4217",
113
- XLayer: "196",
114
- };
115
- /** Reverse lookup: chain ID → chain name. */
116
- const CHAIN_ID_TO_NAME = Object.fromEntries(Object.entries(ALL_EVM_CHAIN_IDS).map(([name, id]) => [id, name]));
117
- // ============================================================================
118
- // Chain detection helpers
119
- // ============================================================================
120
- /** Returns true if the token is Bitcoin on Lightning. */
121
- export function isLightning(token) {
122
- return token.chain.toLowerCase() === "lightning";
123
- }
124
- /** Returns true if the token is Bitcoin on Arkade. */
125
- export function isArkade(token) {
126
- return token.chain.toLowerCase() === "arkade";
127
- }
128
- /** Returns true if the token is Bitcoin on-chain (L1). */
129
- export function isBtcOnchain(token) {
130
- return token.chain.toLowerCase() === "bitcoin";
131
- }
132
- /** Returns true if the token is any form of Bitcoin (Lightning, Arkade, or on-chain). */
133
- export function isBtc(token) {
134
- return isLightning(token) || isArkade(token) || isBtcOnchain(token);
135
- }
136
- /**
137
- * Returns true if the token is a BTC-pegged EVM token (WBTC or tBTC).
138
- * These tokens should be displayed like BTC (sats/BTC, 8 decimal precision)
139
- * even though tBTC has 18 on-chain decimals.
140
- */
141
- export function isBtcPegged(token) {
142
- const sym = token.symbol.toLowerCase();
143
- return (sym === "wbtc" || sym === "tbtc") && isEvmToken(token.chain);
144
- }
145
- /** Returns true if the chain is any EVM chain (source or bridge destination). */
146
- export function isEvmToken(chain) {
147
- return (SOURCE_EVM_CHAINS.includes(chain) ||
148
- Object.values(ALL_EVM_CHAIN_IDS).includes(chain));
149
- }
150
- /** Returns true if the chain is a source EVM chain (has HTLC contracts). */
151
- export function isSourceEvmChain(chain) {
152
- return SOURCE_EVM_CHAINS.includes(chain);
153
- }
154
- /** Returns true if the chain is a bridge-only destination (no HTLC contracts). */
155
- export function isBridgeOnlyChain(chain) {
156
- if (isSolanaToken(chain))
157
- return true;
158
- return isEvmToken(chain) && !isSourceEvmChain(chain);
159
- }
160
- /**
161
- * Returns true if the chain is Solana. Solana is a CCTP-only destination —
162
- * funds reach it via Circle's Forwarding Service after an Arbitrum-side
163
- * burn, never as a swap source/target chain in its own right.
164
- */
165
- export function isSolanaToken(chain) {
166
- return chain.toLowerCase() === "solana";
167
- }
168
- /**
169
- * Returns true if the token is USDC on a CCTPv2-supported chain.
170
- *
171
- * Used to decide whether a token can act as the *source* of a swap via
172
- * bridge-kit (any CCTP chain → Arbitrum → BTC): we bridge the user's USDC
173
- * into Arbitrum first, then run the existing Arbitrum USDC → BTC swap.
174
- */
175
- export function isCctpUsdc(token) {
176
- if (token.symbol.toUpperCase() !== "USDC")
177
- return false;
178
- const tokenChainLower = token.chain.toLowerCase();
179
- for (const chainName of Object.keys(CCTP_DOMAINS)) {
180
- if (tokenChainLower === chainName.toLowerCase())
181
- return true;
182
- const chainId = ALL_EVM_CHAIN_IDS[chainName];
183
- if (chainId && token.chain === chainId)
184
- return true;
185
- }
186
- return false;
187
- }
188
- /** Returns true if the chain is Ethereum. */
189
- export function isEthereumToken(c) {
190
- return c.toLowerCase() === "ethereum" || c === "1";
191
- }
192
- /** Returns true if the chain is Polygon. */
193
- export function isPolygonToken(c) {
194
- return c.toLowerCase() === "polygon" || c === "137";
195
- }
196
- /** Returns true if the chain is Arbitrum. */
197
- export function isArbitrumToken(chain) {
198
- return chain.toLowerCase() === "arbitrum" || chain === "42161";
199
- }
200
- export function isBaseToken(chain) {
201
- return chain.toLowerCase() === "base" || chain === "8453";
202
- }
203
- export function isOptimismToken(chain) {
204
- return chain.toLowerCase() === "optimism" || chain === "10";
205
- }
206
- export function isAvalancheToken(chain) {
207
- return chain.toLowerCase() === "avalanche" || chain === "43114";
208
- }
209
- export function isLineaToken(chain) {
210
- return chain.toLowerCase() === "linea" || chain === "59144";
211
- }
212
- export function isSonicToken(chain) {
213
- return chain.toLowerCase() === "sonic" || chain === "146";
214
- }
215
- /** Normalizes any chain string to its canonical Chain value. */
216
- export function toChain(str) {
217
- const c = str.toLowerCase();
218
- if (c === "ethereum" || c === "1")
219
- return "1";
220
- if (c === "polygon" || c === "137")
221
- return "137";
222
- if (c === "arbitrum" || c === "42161")
223
- return "42161";
224
- if (c === "lightning")
225
- return "Lightning";
226
- if (c === "arkade")
227
- return "Arkade";
228
- if (c === "bitcoin")
229
- return "Bitcoin";
230
- // Solana is a CCTP destination only — not a first-class Chain in the
231
- // backend's union, so we cast through. Frontends use the literal "Solana"
232
- // string for icons / dropdown filters.
233
- if (c === "solana")
234
- return "Solana";
235
- // Check new chains by name
236
- for (const [name, id] of Object.entries(ALL_EVM_CHAIN_IDS)) {
237
- if (c === name.toLowerCase() || c === id)
238
- return id;
239
- }
240
- return "Bitcoin";
241
- }
242
- export function toChainName(chain) {
243
- return CHAIN_ID_TO_NAME[chain] ?? chain.toString();
244
- }
245
- /**
246
- * Get the CCTP bridge target chain name for a token, if bridging is needed.
247
- * Returns undefined if the token is on a source chain (no bridge needed)
248
- * or is not an EVM token.
249
- */
250
- export function getBridgeTargetChain(token) {
251
- if (isBridgeOnlyChain(token.chain)) {
252
- return CHAIN_ID_TO_NAME[token.chain] ?? toChainName(token.chain);
253
- }
254
- return undefined;
255
- }
256
- // ============================================================================
257
- // CCTP USDC bridge tokens (target-only)
258
- // ============================================================================
259
- /**
260
- * Generate TokenInfo objects for USDC on all CCTP-supported chains.
261
- * These are "bridge-only" target tokens — the swap runs on a source chain
262
- * (Polygon/Ethereum/Arbitrum) and USDC is bridged to the destination via CCTP.
263
- *
264
- * Excludes source chains (those already have USDC tokens from the backend).
265
- */
266
- export function getCctpBridgeTokens() {
267
- const sourceChainNames = new Set(["Ethereum", "Polygon", "Arbitrum"]);
268
- const tokens = [];
269
- for (const chainName of Object.keys(CCTP_DOMAINS)) {
270
- // Skip source chains (backend already provides their USDC tokens)
271
- if (sourceChainNames.has(chainName))
272
- continue;
273
- const usdcAddress = USDC_ADDRESSES[chainName];
274
- if (!usdcAddress)
275
- continue;
276
- // Solana has no EVM chain id — use the literal "Solana" string as the
277
- // chain identifier (matches the backend's `bridge_target_chain` value).
278
- const chainIdentifier = chainName === "Solana" ? "Solana" : ALL_EVM_CHAIN_IDS[chainName];
279
- if (!chainIdentifier)
280
- continue;
281
- tokens.push({
282
- token_id: usdcAddress,
283
- symbol: "USDC",
284
- name: `USD Coin (${chainName})`,
285
- decimals: 6,
286
- chain: chainIdentifier,
287
- });
288
- }
289
- return tokens;
290
- }
291
- // ============================================================================
292
- // USDT0 OFT bridge tokens (target-only)
293
- // ============================================================================
294
- /**
295
- * Generate TokenInfo objects for USDT0 on all LayerZero OFT-supported chains.
296
- * These are "bridge-only" target tokens — the swap runs on Arbitrum and USDT0
297
- * is bridged to the destination via LayerZero OFT send().
298
- *
299
- * Excludes source chains (those already have USDT0 tokens from the backend).
300
- */
301
- export function getUsdt0BridgeTokens() {
302
- const sourceChainNames = new Set(["Ethereum", "Polygon", "Arbitrum"]);
303
- const tokens = [];
304
- for (const chainName of Object.keys(LZ_EIDS)) {
305
- // Skip source chains (backend already provides their USDT tokens)
306
- if (sourceChainNames.has(chainName))
307
- continue;
308
- const usdt0Address = USDT0_ADDRESSES[chainName];
309
- const chainId = ALL_EVM_CHAIN_IDS[chainName];
310
- if (!usdt0Address || !chainId)
311
- continue;
312
- tokens.push({
313
- token_id: usdt0Address,
314
- symbol: "USDT",
315
- name: `Tether USD (${chainName})`,
316
- decimals: 6,
317
- chain: chainId,
318
- });
319
- }
320
- return tokens;
321
- }
322
- //# sourceMappingURL=tokens.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"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"}
package/dist/usd-price.js DELETED
@@ -1,96 +0,0 @@
1
- /**
2
- * USD price fetching utilities using CoinGecko API.
3
- *
4
- * Provides functions to fetch current USD prices for tokens supported by the SDK.
5
- *
6
- * @example
7
- * ```typescript
8
- * import { getUsdPrices } from '@lendasat/lendaswap-sdk';
9
- *
10
- * const prices = await getUsdPrices([
11
- * { symbol: "BTC", chain: "Lightning", token_id: "btc", name: "Bitcoin", decimals: 0 },
12
- * { symbol: "USDC", chain: "137", token_id: "usdc_pol", name: "USDC", decimals: 6 },
13
- * ]);
14
- * // prices is a Map<TokenInfo, number | null>
15
- * ```
16
- */
17
- import { createSdkLogger } from "./logging.js";
18
- const COINGECKO_API = "https://api.coingecko.com/api/v3";
19
- /**
20
- * Mapping from lowercase token symbol to CoinGecko coin ID.
21
- * Symbols are unique per chain, and the CoinGecko ID only depends on the symbol.
22
- */
23
- const SYMBOL_TO_COINGECKO = {
24
- btc: "bitcoin",
25
- usdc: "usd-coin",
26
- usdt: "tether",
27
- usdt0: "tether",
28
- xaut: "tether-gold",
29
- wbtc: "wrapped-bitcoin",
30
- pol: "matic-network",
31
- eth: "ethereum",
32
- };
33
- /**
34
- * Get the CoinGecko ID for a token by its symbol.
35
- *
36
- * @returns CoinGecko coin ID or null if not supported
37
- */
38
- export function getCoinGeckoId(token) {
39
- return SYMBOL_TO_COINGECKO[token.symbol.toLowerCase()] ?? null;
40
- }
41
- /**
42
- * Fetch current USD prices for multiple tokens in a single CoinGecko request.
43
- *
44
- * @param tokens - Array of TokenInfo objects
45
- * @returns Array of `{ token, usdPrice }` results in the same order as input
46
- */
47
- export async function getUsdPrices(tokens, options = {}) {
48
- const logger = createSdkLogger(options).child({
49
- module: "usd-price",
50
- operation: "price.fetch_usd",
51
- });
52
- // Resolve unique CoinGecko IDs we need to fetch
53
- const coinGeckoIds = new Set();
54
- for (const token of tokens) {
55
- const id = getCoinGeckoId(token);
56
- if (id)
57
- coinGeckoIds.add(id);
58
- }
59
- if (coinGeckoIds.size === 0) {
60
- return tokens.map((token) => ({ token, usdPrice: null }));
61
- }
62
- const params = new URLSearchParams({
63
- ids: [...coinGeckoIds].join(","),
64
- vs_currencies: "usd",
65
- });
66
- try {
67
- const response = await fetch(`${COINGECKO_API}/simple/price?${params}`);
68
- if (!response.ok) {
69
- logger.warn({
70
- event: "price.coingecko.http_error",
71
- message: "CoinGecko API returned an error response",
72
- data: { status: response.status, statusText: response.statusText },
73
- });
74
- return tokens.map((token) => ({ token, usdPrice: null }));
75
- }
76
- const data = await response.json();
77
- return tokens.map((token) => {
78
- const coinGeckoId = getCoinGeckoId(token);
79
- if (!coinGeckoId)
80
- return { token, usdPrice: null };
81
- const priceData = data[coinGeckoId];
82
- if (!priceData)
83
- return { token, usdPrice: null };
84
- return { token, usdPrice: priceData.usd };
85
- });
86
- }
87
- catch (error) {
88
- logger.warn({
89
- event: "price.coingecko.fetch_failed",
90
- message: "Failed to fetch USD prices from CoinGecko",
91
- error,
92
- });
93
- return tokens.map((token) => ({ token, usdPrice: null }));
94
- }
95
- }
96
- //# sourceMappingURL=usd-price.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"usd-price.js","sourceRoot":"","sources":["../src/usd-price.ts"],"names":[],"mappings":"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"}
@@ -1,71 +0,0 @@
1
- /**
2
- * USDT0 bridge constants.
3
- *
4
- * USDT0 uses LayerZero's OFT (Omnichain Fungible Token) standard for
5
- * cross-chain transfers. On L2s the token contract IS the OFT — it has
6
- * send() and quoteSend() built in. Transfers burn on source, mint on
7
- * destination via LayerZero messaging.
8
- *
9
- * See: https://docs.usdt0.to/
10
- */
11
- // ============================================================================
12
- // LayerZero V2 Endpoint IDs (EIDs)
13
- // See: https://docs.layerzero.network/v2/developers/evm/technical-reference/deployed-contracts
14
- // ============================================================================
15
- /**
16
- * LayerZero V2 Endpoint IDs for all chains with USDT0 deployments.
17
- * See: https://docs.usdt0.to/technical-documentation/deployments
18
- */
19
- export const LZ_EIDS = {
20
- Ethereum: 30101,
21
- Polygon: 30109,
22
- Arbitrum: 30110,
23
- Optimism: 30111,
24
- Mantle: 30181,
25
- "Conflux eSpace": 30212,
26
- XLayer: 30274,
27
- Sei: 30280,
28
- Flare: 30295,
29
- Hedera: 30316,
30
- Unichain: 30320,
31
- Morph: 30322,
32
- Corn: 30331,
33
- Rootstock: 30333,
34
- Ink: 30339,
35
- Berachain: 30362,
36
- HyperEVM: 30367,
37
- Plasma: 30383,
38
- Monad: 30390,
39
- Stable: 30396,
40
- MegaETH: 30398,
41
- Tempo: 30410,
42
- };
43
- // ============================================================================
44
- // USDT0 token addresses per chain
45
- // See: https://docs.usdt0.to/technical-documentation/deployments
46
- // ============================================================================
47
- export const USDT0_ADDRESSES = {
48
- Ethereum: "0xdAC17F958D2ee523a2206206994597C13D831ec7",
49
- Arbitrum: "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9",
50
- Polygon: "0xc2132D05D31c914a87C6611C10748AEb04B58e8F",
51
- Optimism: "0x01bFF41798a0BcF287b996046Ca68b395DbC1071",
52
- Berachain: "0x779Ded0c9e1022225f8E0630b35a9b54bE713736",
53
- "Conflux eSpace": "0xaf37E8B6C9ED7f6318979f56Fc287d76c30847ff",
54
- Corn: "0xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb",
55
- Flare: "0xe7cd86e13AC4309349F30B3435a9d337750fC82D",
56
- HyperEVM: "0xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb",
57
- Hedera: "0x00000000000000000000000000000000009Ce723",
58
- Ink: "0x0200C29006150606B650577BBE7B6248F58470c1",
59
- Mantle: "0x779Ded0c9e1022225f8E0630b35a9b54bE713736",
60
- MegaETH: "0xb8ce59fc3717ada4c02eadf9682a9e934f625ebb",
61
- Monad: "0xe7cd86e13AC4309349F30B3435a9d337750fC82D",
62
- Morph: "0xe7cd86e13AC4309349F30B3435a9d337750fC82D",
63
- Plasma: "0xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb",
64
- Rootstock: "0x779dED0C9e1022225F8e0630b35A9B54Be713736",
65
- Sei: "0x9151434b16b9763660705744891fA906F660EcC5",
66
- Stable: "0x779Ded0c9e1022225f8E0630b35a9b54bE713736",
67
- Tempo: "0x20C00000000000000000000014f22CA97301EB73",
68
- Unichain: "0x9151434b16b9763660705744891fA906F660EcC5",
69
- XLayer: "0x779Ded0c9e1022225f8E0630b35a9b54bE713736",
70
- };
71
- //# sourceMappingURL=constants.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/usdt0-bridge/constants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,+EAA+E;AAC/E,mCAAmC;AACnC,+FAA+F;AAC/F,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,QAAQ,EAAE,KAAK;IACf,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,KAAK;IACf,QAAQ,EAAE,KAAK;IACf,MAAM,EAAE,KAAK;IACb,gBAAgB,EAAE,KAAK;IACvB,MAAM,EAAE,KAAK;IACb,GAAG,EAAE,KAAK;IACV,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,KAAK;IACb,QAAQ,EAAE,KAAK;IACf,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,KAAK;IACX,SAAS,EAAE,KAAK;IAChB,GAAG,EAAE,KAAK;IACV,SAAS,EAAE,KAAK;IAChB,QAAQ,EAAE,KAAK;IACf,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,KAAK;IACb,OAAO,EAAE,KAAK;IACd,KAAK,EAAE,KAAK;CACJ,CAAC;AAIX,+EAA+E;AAC/E,kCAAkC;AAClC,iEAAiE;AACjE,+EAA+E;AAE/E,MAAM,CAAC,MAAM,eAAe,GAA2B;IACrD,QAAQ,EAAE,4CAA4C;IACtD,QAAQ,EAAE,4CAA4C;IACtD,OAAO,EAAE,4CAA4C;IACrD,QAAQ,EAAE,4CAA4C;IACtD,SAAS,EAAE,4CAA4C;IACvD,gBAAgB,EAAE,4CAA4C;IAC9D,IAAI,EAAE,4CAA4C;IAClD,KAAK,EAAE,4CAA4C;IACnD,QAAQ,EAAE,4CAA4C;IACtD,MAAM,EAAE,4CAA4C;IACpD,GAAG,EAAE,4CAA4C;IACjD,MAAM,EAAE,4CAA4C;IACpD,OAAO,EAAE,4CAA4C;IACrD,KAAK,EAAE,4CAA4C;IACnD,KAAK,EAAE,4CAA4C;IACnD,MAAM,EAAE,4CAA4C;IACpD,SAAS,EAAE,4CAA4C;IACvD,GAAG,EAAE,4CAA4C;IACjD,MAAM,EAAE,4CAA4C;IACpD,KAAK,EAAE,4CAA4C;IACnD,QAAQ,EAAE,4CAA4C;IACtD,MAAM,EAAE,4CAA4C;CACrD,CAAC"}
@@ -1,11 +0,0 @@
1
- /**
2
- * USDT0 bridge module.
3
- *
4
- * Provides utilities for bridging USDT0 cross-chain via LayerZero's OFT standard:
5
- * - LayerZero endpoint ID mappings and USDT0 contract addresses
6
- * - Address conversion helpers
7
- */
8
- export { LZ_EIDS, USDT0_ADDRESSES, } from "./constants.js";
9
- export { getExplorerUrl as getLzExplorerUrl, getMessageStatus as getLzMessageStatus, trackMessage as trackLzMessage, } from "./tracking.js";
10
- export { addressToBytes32, bytes32ToAddress, getEid, needsBridge, } from "./utils.js";
11
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/usdt0-bridge/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,OAAO,EACP,eAAe,GAEhB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,cAAc,IAAI,gBAAgB,EAClC,gBAAgB,IAAI,kBAAkB,EAItC,YAAY,IAAI,cAAc,GAC/B,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,MAAM,EACN,WAAW,GACZ,MAAM,YAAY,CAAC"}
@@ -1,123 +0,0 @@
1
- /**
2
- * LayerZero message tracking for USDT0 cross-chain transfers.
3
- *
4
- * Polls the LayerZero Scan API until the cross-chain message is delivered.
5
- * Similar pattern to CCTP attestation polling.
6
- *
7
- * API: https://scan.layerzero-api.com/v1/messages/tx/{txHash}
8
- */
9
- const LZ_SCAN_API = "https://scan.layerzero-api.com";
10
- /**
11
- * Poll the LayerZero Scan API until the cross-chain message is delivered.
12
- *
13
- * @returns The message result with delivery details.
14
- * @throws If the message is not delivered within the timeout, or status is FAILED.
15
- */
16
- export async function trackMessage(options) {
17
- const { txHash, apiUrl = LZ_SCAN_API, pollIntervalMs = 5_000, timeoutMs = 300_000, signal, onStatusChange, } = options;
18
- const url = `${apiUrl}/v1/messages/tx/${txHash}`;
19
- const startTime = Date.now();
20
- let lastStatus;
21
- while (Date.now() - startTime < timeoutMs) {
22
- signal?.throwIfAborted();
23
- try {
24
- const response = await fetch(url);
25
- if (response.status === 404 || response.status === 429) {
26
- // Not yet indexed or rate-limited, keep polling
27
- await sleep(pollIntervalMs, signal);
28
- continue;
29
- }
30
- if (!response.ok) {
31
- throw new Error(`LayerZero Scan API error: ${response.status} ${response.statusText}`);
32
- }
33
- const data = await response.json();
34
- if (data.data.length === 0) {
35
- // Not yet indexed
36
- await sleep(pollIntervalMs, signal);
37
- continue;
38
- }
39
- const msg = data.data[0];
40
- const status = msg.status.name;
41
- if (status !== lastStatus) {
42
- lastStatus = status;
43
- onStatusChange?.(status);
44
- }
45
- if (status === "FAILED" || status === "BLOCKED") {
46
- throw new Error(`LayerZero message ${status}: ${msg.status.message} (guid: ${msg.guid})`);
47
- }
48
- if (status === "DELIVERED") {
49
- return {
50
- guid: msg.guid,
51
- status,
52
- srcTxHash: msg.source.tx.txHash,
53
- dstTxHash: msg.destination.tx?.txHash,
54
- srcChain: msg.pathway.sender.chain,
55
- dstChain: msg.pathway.receiver.chain,
56
- srcEid: msg.pathway.srcEid,
57
- dstEid: msg.pathway.dstEid,
58
- };
59
- }
60
- // INFLIGHT / CONFIRMING — keep polling
61
- await sleep(pollIntervalMs, signal);
62
- }
63
- catch (err) {
64
- if (err instanceof DOMException && err.name === "AbortError") {
65
- throw err;
66
- }
67
- if (err instanceof Error &&
68
- (err.message.includes("FAILED") || err.message.includes("BLOCKED"))) {
69
- throw err;
70
- }
71
- // Network errors — retry after delay
72
- await sleep(pollIntervalMs, signal);
73
- }
74
- }
75
- throw new Error(`LayerZero message not delivered after ${timeoutMs / 1000}s for tx ${txHash}`);
76
- }
77
- /**
78
- * Get the current status of a LayerZero cross-chain message without polling.
79
- *
80
- * @returns The message result, or null if not yet indexed.
81
- */
82
- export async function getMessageStatus(txHash, apiUrl = LZ_SCAN_API) {
83
- const url = `${apiUrl}/v1/messages/tx/${txHash}`;
84
- const response = await fetch(url);
85
- if (response.status === 404)
86
- return null;
87
- if (!response.ok) {
88
- throw new Error(`LayerZero Scan API error: ${response.status} ${response.statusText}`);
89
- }
90
- const data = await response.json();
91
- if (data.data.length === 0)
92
- return null;
93
- const msg = data.data[0];
94
- return {
95
- guid: msg.guid,
96
- status: msg.status.name,
97
- srcTxHash: msg.source.tx.txHash,
98
- dstTxHash: msg.destination.tx?.txHash,
99
- srcChain: msg.pathway.sender.chain,
100
- dstChain: msg.pathway.receiver.chain,
101
- srcEid: msg.pathway.srcEid,
102
- dstEid: msg.pathway.dstEid,
103
- };
104
- }
105
- // ============================================================================
106
- // Helpers
107
- // ============================================================================
108
- /**
109
- * Get the LayerZero Scan explorer URL for a transaction.
110
- */
111
- export function getExplorerUrl(txHash) {
112
- return `https://layerzeroscan.com/tx/${txHash}`;
113
- }
114
- function sleep(ms, signal) {
115
- return new Promise((resolve, reject) => {
116
- const timer = setTimeout(resolve, ms);
117
- signal?.addEventListener("abort", () => {
118
- clearTimeout(timer);
119
- reject(new DOMException("Aborted", "AbortError"));
120
- }, { once: true });
121
- });
122
- }
123
- //# sourceMappingURL=tracking.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tracking.js","sourceRoot":"","sources":["../../src/usdt0-bridge/tracking.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA+EH,MAAM,WAAW,GAAG,gCAAgC,CAAC;AAErD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAA4B;IAE5B,MAAM,EACJ,MAAM,EACN,MAAM,GAAG,WAAW,EACpB,cAAc,GAAG,KAAK,EACtB,SAAS,GAAG,OAAO,EACnB,MAAM,EACN,cAAc,GACf,GAAG,OAAO,CAAC;IAEZ,MAAM,GAAG,GAAG,GAAG,MAAM,mBAAmB,MAAM,EAAE,CAAC;IACjD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,IAAI,UAA8C,CAAC;IAEnD,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,SAAS,EAAE,CAAC;QAC1C,MAAM,EAAE,cAAc,EAAE,CAAC;QAEzB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;YAElC,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACvD,gDAAgD;gBAChD,MAAM,KAAK,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;gBACpC,SAAS;YACX,CAAC;YAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CACb,6BAA6B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CACtE,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAoB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAEpD,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,kBAAkB;gBAClB,MAAM,KAAK,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;gBACpC,SAAS;YACX,CAAC;YAED,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;YAE/B,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;gBAC1B,UAAU,GAAG,MAAM,CAAC;gBACpB,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC;YAC3B,CAAC;YAED,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBAChD,MAAM,IAAI,KAAK,CACb,qBAAqB,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,OAAO,WAAW,GAAG,CAAC,IAAI,GAAG,CACzE,CAAC;YACJ,CAAC;YAED,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;gBAC3B,OAAO;oBACL,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,MAAM;oBACN,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM;oBAC/B,SAAS,EAAE,GAAG,CAAC,WAAW,CAAC,EAAE,EAAE,MAAM;oBACrC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;oBAClC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK;oBACpC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM;oBAC1B,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM;iBAC3B,CAAC;YACJ,CAAC;YAED,uCAAuC;YACvC,MAAM,KAAK,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,YAAY,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC7D,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,IACE,GAAG,YAAY,KAAK;gBACpB,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EACnE,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,qCAAqC;YACrC,MAAM,KAAK,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CACb,yCAAyC,SAAS,GAAG,IAAI,YAAY,MAAM,EAAE,CAC9E,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAc,EACd,SAAiB,WAAW;IAE5B,MAAM,GAAG,GAAG,GAAG,MAAM,mBAAmB,MAAM,EAAE,CAAC;IACjD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAElC,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACzC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,6BAA6B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CACtE,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAoB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACpD,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAExC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI;QACvB,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM;QAC/B,SAAS,EAAE,GAAG,CAAC,WAAW,CAAC,EAAE,EAAE,MAAM;QACrC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;QAClC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK;QACpC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM;QAC1B,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM;KAC3B,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,OAAO,gCAAgC,MAAM,EAAE,CAAC;AAClD,CAAC;AAED,SAAS,KAAK,CAAC,EAAU,EAAE,MAAoB;IAC7C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACtC,MAAM,EAAE,gBAAgB,CACtB,OAAO,EACP,GAAG,EAAE;YACH,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;QACpD,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}