@lendasat/lendaswap-sdk-pure 0.0.1 → 0.0.3

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 (129) hide show
  1. package/README.md +91 -19
  2. package/dist/api/client.d.ts +15 -18
  3. package/dist/api/client.d.ts.map +1 -1
  4. package/dist/api/client.js.map +1 -1
  5. package/dist/arkade.d.ts +36 -0
  6. package/dist/arkade.d.ts.map +1 -0
  7. package/dist/arkade.js +68 -0
  8. package/dist/arkade.js.map +1 -0
  9. package/dist/client.d.ts +295 -120
  10. package/dist/client.d.ts.map +1 -1
  11. package/dist/client.js +1243 -274
  12. package/dist/client.js.map +1 -1
  13. package/dist/create/arkade.d.ts +13 -7
  14. package/dist/create/arkade.d.ts.map +1 -1
  15. package/dist/create/arkade.js +46 -53
  16. package/dist/create/arkade.js.map +1 -1
  17. package/dist/create/bitcoin-to-arkade.d.ts +36 -0
  18. package/dist/create/bitcoin-to-arkade.d.ts.map +1 -0
  19. package/dist/create/bitcoin-to-arkade.js +69 -0
  20. package/dist/create/bitcoin-to-arkade.js.map +1 -0
  21. package/dist/create/bitcoin.d.ts +6 -3
  22. package/dist/create/bitcoin.d.ts.map +1 -1
  23. package/dist/create/bitcoin.js +34 -48
  24. package/dist/create/bitcoin.js.map +1 -1
  25. package/dist/create/evm-to-arkade.d.ts +12 -13
  26. package/dist/create/evm-to-arkade.d.ts.map +1 -1
  27. package/dist/create/evm-to-arkade.js +38 -59
  28. package/dist/create/evm-to-arkade.js.map +1 -1
  29. package/dist/create/evm-to-bitcoin.d.ts +35 -0
  30. package/dist/create/evm-to-bitcoin.d.ts.map +1 -0
  31. package/dist/create/evm-to-bitcoin.js +71 -0
  32. package/dist/create/evm-to-bitcoin.js.map +1 -0
  33. package/dist/create/evm-to-lightning.d.ts +12 -12
  34. package/dist/create/evm-to-lightning.d.ts.map +1 -1
  35. package/dist/create/evm-to-lightning.js +33 -50
  36. package/dist/create/evm-to-lightning.js.map +1 -1
  37. package/dist/create/index.d.ts +7 -5
  38. package/dist/create/index.d.ts.map +1 -1
  39. package/dist/create/index.js +6 -4
  40. package/dist/create/index.js.map +1 -1
  41. package/dist/create/lightning.d.ts +11 -8
  42. package/dist/create/lightning.d.ts.map +1 -1
  43. package/dist/create/lightning.js +36 -45
  44. package/dist/create/lightning.js.map +1 -1
  45. package/dist/create/types.d.ts +166 -29
  46. package/dist/create/types.d.ts.map +1 -1
  47. package/dist/delegate.d.ts +62 -0
  48. package/dist/delegate.d.ts.map +1 -0
  49. package/dist/delegate.js +284 -0
  50. package/dist/delegate.js.map +1 -0
  51. package/dist/esplora.d.ts +18 -15
  52. package/dist/esplora.d.ts.map +1 -1
  53. package/dist/esplora.js +14 -13
  54. package/dist/esplora.js.map +1 -1
  55. package/dist/evm/coordinator.d.ts +247 -0
  56. package/dist/evm/coordinator.d.ts.map +1 -0
  57. package/dist/evm/coordinator.js +414 -0
  58. package/dist/evm/coordinator.js.map +1 -0
  59. package/dist/evm/htlc.d.ts +93 -0
  60. package/dist/evm/htlc.d.ts.map +1 -1
  61. package/dist/evm/htlc.js +91 -0
  62. package/dist/evm/htlc.js.map +1 -1
  63. package/dist/evm/index.d.ts +3 -1
  64. package/dist/evm/index.d.ts.map +1 -1
  65. package/dist/evm/index.js +3 -1
  66. package/dist/evm/index.js.map +1 -1
  67. package/dist/evm/signing.d.ts +30 -0
  68. package/dist/evm/signing.d.ts.map +1 -0
  69. package/dist/evm/signing.js +91 -0
  70. package/dist/evm/signing.js.map +1 -0
  71. package/dist/generated/api.d.ts +1033 -970
  72. package/dist/generated/api.d.ts.map +1 -1
  73. package/dist/index.d.ts +8 -4
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js +8 -2
  76. package/dist/index.js.map +1 -1
  77. package/dist/price-calculations.d.ts +109 -0
  78. package/dist/price-calculations.d.ts.map +1 -0
  79. package/dist/price-calculations.js +135 -0
  80. package/dist/price-calculations.js.map +1 -0
  81. package/dist/price-feed.d.ts +124 -0
  82. package/dist/price-feed.d.ts.map +1 -0
  83. package/dist/price-feed.js +178 -0
  84. package/dist/price-feed.js.map +1 -0
  85. package/dist/redeem/arkade.js +2 -2
  86. package/dist/redeem/arkade.js.map +1 -1
  87. package/dist/redeem/ethereum.d.ts +26 -10
  88. package/dist/redeem/ethereum.d.ts.map +1 -1
  89. package/dist/redeem/ethereum.js +111 -26
  90. package/dist/redeem/ethereum.js.map +1 -1
  91. package/dist/redeem/gasless.d.ts +33 -14
  92. package/dist/redeem/gasless.d.ts.map +1 -1
  93. package/dist/redeem/gasless.js +60 -53
  94. package/dist/redeem/gasless.js.map +1 -1
  95. package/dist/redeem/index.d.ts +19 -22
  96. package/dist/redeem/index.d.ts.map +1 -1
  97. package/dist/redeem/index.js +110 -31
  98. package/dist/redeem/index.js.map +1 -1
  99. package/dist/redeem/types.d.ts +56 -4
  100. package/dist/redeem/types.d.ts.map +1 -1
  101. package/dist/redeem/types.js +13 -0
  102. package/dist/redeem/types.js.map +1 -1
  103. package/dist/refund/arkade.js +1 -1
  104. package/dist/refund/arkade.js.map +1 -1
  105. package/dist/refund/index.d.ts +1 -1
  106. package/dist/refund/index.d.ts.map +1 -1
  107. package/dist/refund/index.js +1 -1
  108. package/dist/refund/index.js.map +1 -1
  109. package/dist/refund/onchain.d.ts +54 -0
  110. package/dist/refund/onchain.d.ts.map +1 -1
  111. package/dist/refund/onchain.js +130 -0
  112. package/dist/refund/onchain.js.map +1 -1
  113. package/dist/signer/index.js +1 -1
  114. package/dist/signer/index.js.map +1 -1
  115. package/dist/storage/idb.d.ts +7 -0
  116. package/dist/storage/idb.d.ts.map +1 -1
  117. package/dist/storage/idb.js +89 -1
  118. package/dist/storage/idb.js.map +1 -1
  119. package/dist/storage/types.d.ts +2 -0
  120. package/dist/storage/types.d.ts.map +1 -1
  121. package/dist/tokens.d.ts +29 -0
  122. package/dist/tokens.d.ts.map +1 -0
  123. package/dist/tokens.js +89 -0
  124. package/dist/tokens.js.map +1 -0
  125. package/dist/usd-price.d.ts +83 -0
  126. package/dist/usd-price.d.ts.map +1 -0
  127. package/dist/usd-price.js +166 -0
  128. package/dist/usd-price.js.map +1 -0
  129. package/package.json +6 -1
package/README.md CHANGED
@@ -11,24 +11,39 @@ npm install @lendasat/lendaswap-sdk-pure
11
11
 
12
12
  ## Supported Swaps
13
13
 
14
- This SDK currently supports the following swap directions:
15
-
16
- | Source | Target | Status |
17
- | ------------ | --------------------- | --------- |
18
- | Lightning | Polygon (USDC, USDT) | Supported |
19
- | Lightning | Arbitrum (USDC, USDT) | Supported |
20
- | Arkade | Polygon (USDC, USDT) | Supported |
21
- | Arkade | Arbitrum (USDC, USDT) | Supported |
22
- | On-chain BTC | Polygon (USDC, USDT) | Supported |
23
- | On-chain BTC | Arbitrum (USDC, USDT) | Supported |
14
+ This SDK supports the following swap directions:
15
+
16
+ ### BTC to EVM
17
+
18
+ | Source | Target | Status |
19
+ | ------------ | --------------------------- | --------- |
20
+ | Lightning | Polygon (USDC, USDT) | Supported |
21
+ | Lightning | Arbitrum (USDC, USDT) | Supported |
22
+ | Lightning | Ethereum (USDC, USDT, WBTC) | Supported |
23
+ | Arkade | Polygon (USDC, USDT) | Supported |
24
+ | Arkade | Arbitrum (USDC, USDT) | Supported |
25
+ | Arkade | Ethereum (USDC, USDT, WBTC) | Supported |
26
+ | On-chain BTC | Polygon (USDC, USDT) | Supported |
27
+ | On-chain BTC | Arbitrum (USDC, USDT) | Supported |
28
+ | On-chain BTC | Ethereum (USDC, USDT, WBTC) | Supported |
29
+
30
+ ### EVM to BTC
31
+
32
+ | Source | Target | Status |
33
+ | --------------------------- | --------- | --------- |
34
+ | Polygon (USDC, USDT) | Arkade | Supported |
35
+ | Polygon (USDC, USDT) | Lightning | Supported |
36
+ | Arbitrum (USDC, USDT) | Arkade | Supported |
37
+ | Arbitrum (USDC, USDT) | Lightning | Supported |
38
+ | Ethereum (USDC, USDT, WBTC) | Arkade | Supported |
39
+ | Ethereum (USDC, USDT, WBTC) | Lightning | Supported |
24
40
 
25
41
  **Refund support:**
26
42
 
27
43
  - Lightning swaps: Auto-expire, no refund needed
28
44
  - Arkade swaps: Off-chain refund via Arkade protocol
29
45
  - On-chain BTC swaps: On-chain refund transaction after timelock
30
-
31
- > More swap directions (e.g., EVM to BTC) will be added in future versions.
46
+ - EVM swaps: On-chain refund after timelock expires
32
47
 
33
48
  ## Usage
34
49
 
@@ -86,16 +101,30 @@ console.log(`Swap ID: ${result.response.id}`);
86
101
  #### Arkade to EVM
87
102
 
88
103
  ```typescript
89
- const result = await client.createArkadeToEvmSwap({
104
+ // Create an Arkade-to-EVM swap (any ERC-20 token via 1inch)
105
+ const result = await client.createArkadeToEvmSwapGeneric({
90
106
  targetAddress: "0x1234567890abcdef1234567890abcdef12345678",
91
- targetToken: "usdc_arb",
92
- targetChain: "arbitrum",
93
- sourceAmount: 100000,
107
+ tokenAddress: "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359", // USDC on Polygon
108
+ evmChainId: 137,
109
+ sourceAmount: 100000, // sats
94
110
  });
95
111
 
96
112
  // Send BTC to the Arkade VHTLC address
97
- console.log(`Send BTC to: ${result.response.htlc_address_arkade}`);
113
+ console.log(`Send BTC to: ${result.response.btc_vhtlc_address}`);
98
114
  console.log(`Swap ID: ${result.response.id}`);
115
+
116
+ // Once the server has funded the EVM HTLC (status: "serverfunded"),
117
+ // claim gaslessly — the server submits the tx on your behalf:
118
+ const claimResult = await client.claimViaGasless(
119
+ result.response.id,
120
+ async (digest) => {
121
+ // Sign the EIP-712 digest with your EVM wallet
122
+ // e.g. using ethers.js: wallet.signMessage(ethers.getBytes(digest))
123
+ return { v: 27, r: "0x...", s: "0x..." };
124
+ },
125
+ "0x1234567890abcdef1234567890abcdef12345678", // destination
126
+ );
127
+ console.log(`Claimed! TX: ${claimResult.txHash}`);
99
128
  ```
100
129
 
101
130
  #### On-chain BTC to EVM
@@ -113,6 +142,38 @@ console.log(`Send BTC to: ${result.response.btc_htlc_address}`);
113
142
  console.log(`Swap ID: ${result.response.id}`);
114
143
  ```
115
144
 
145
+ #### EVM to Arkade
146
+
147
+ ```typescript
148
+ const result = await client.createEvmToArkadeSwap({
149
+ sourceToken: "usdc_pol", // or "usdc_arb", "usdc_eth", "usdt_*", "wbtc_eth"
150
+ sourceChain: "polygon", // or "arbitrum", "ethereum"
151
+ sourceAmount: 100000000n, // Amount in token's smallest unit (e.g., 6 decimals for USDC)
152
+ targetAddress: "ark1...", // Your Arkade address
153
+ evmAddress: "0x...", // Your EVM address (for funding the HTLC)
154
+ });
155
+
156
+ // Fund the EVM HTLC (approve + createSwap)
157
+ console.log(`HTLC Address: ${result.response.htlc_address}`);
158
+ console.log(`Swap ID: ${result.response.id}`);
159
+ ```
160
+
161
+ #### EVM to Lightning
162
+
163
+ ```typescript
164
+ const result = await client.createEvmToLightningSwap({
165
+ sourceToken: "usdc_pol",
166
+ sourceChain: "polygon",
167
+ sourceAmount: 100000000n,
168
+ targetAddress: "lnbc...", // Lightning invoice
169
+ evmAddress: "0x...",
170
+ });
171
+
172
+ // Fund the EVM HTLC
173
+ console.log(`HTLC Address: ${result.response.htlc_address}`);
174
+ console.log(`Swap ID: ${result.response.id}`);
175
+ ```
176
+
116
177
  ### Monitor Swap Status
117
178
 
118
179
  ```typescript
@@ -128,8 +189,19 @@ console.log(`Status: ${swap.status}`);
128
189
  Once the server has funded the EVM HTLC (`serverfunded` status), claim your tokens:
129
190
 
130
191
  ```typescript
131
- const claimResult = await client.claimEvmSwap("swap-uuid");
132
- console.log(`Claim tx: ${claimResult.tx_hash}`);
192
+ // Gasless claim for Arkade-to-EVM swaps — the server submits the tx
193
+ const claimResult = await client.claimViaGasless(
194
+ "swap-uuid",
195
+ async (digest) => {
196
+ // Sign the EIP-712 digest with your EVM wallet
197
+ return { v: 27, r: "0x...", s: "0x..." };
198
+ },
199
+ "0xYourDestinationAddress",
200
+ );
201
+ console.log(`Claim tx: ${claimResult.txHash}`);
202
+
203
+ // For other swap types (Lightning/On-chain to EVM), use the existing claim:
204
+ const result = await client.claim("swap-uuid");
133
205
  ```
134
206
 
135
207
  ### Refund (if swap times out)
@@ -4,28 +4,25 @@ export type ApiClient = ReturnType<typeof createClient<paths>>;
4
4
  export type { paths, components };
5
5
  export type TokenId = components["schemas"]["TokenId"];
6
6
  export type TokenInfo = components["schemas"]["TokenInfo"];
7
- export type AssetPair = components["schemas"]["AssetPair"];
7
+ export type TokenInfos = components["schemas"]["TokenInfos"];
8
8
  export type SwapStatus = components["schemas"]["SwapStatus"];
9
9
  export type QuoteResponse = components["schemas"]["QuoteResponse"];
10
+ export type Chain = components["schemas"]["Chain"];
10
11
  export type GetSwapResponse = components["schemas"]["GetSwapResponse"];
11
- export type BtcToEvmSwapResponse = components["schemas"]["BtcToEvmSwapResponse"];
12
- export type OnchainToEvmSwapResponse = components["schemas"]["OnchainToEvmSwapResponse"];
13
- export type EvmToBtcSwapResponse = components["schemas"]["EvmToBtcSwapResponse"];
14
12
  export type BtcToArkadeSwapResponse = components["schemas"]["BtcToArkadeSwapResponse"];
15
- export type ArkadeToPolygonSwapRequest = components["schemas"]["ArkadeToPolygonSwapRequest"];
16
- export type ArkadeToEthereumSwapRequest = components["schemas"]["ArkadeToEthereumSwapRequest"];
17
- export type ArkadeToArbitrumSwapRequest = components["schemas"]["ArkadeToArbitrumSwapRequest"];
18
- export type LightningToPolygonSwapRequest = components["schemas"]["LightningToPolygonSwapRequest"];
19
- export type LightningToEthereumSwapRequest = components["schemas"]["LightningToEthereumSwapRequest"];
20
- export type LightningToArbitrumSwapRequest = components["schemas"]["LightningToArbitrumSwapRequest"];
21
- export type BitcoinToPolygonSwapRequest = components["schemas"]["BitcoinToPolygonSwapRequest"];
22
- export type BitcoinToEthereumSwapRequest = components["schemas"]["BitcoinToEthereumSwapRequest"];
23
- export type BitcoinToArbitrumSwapRequest = components["schemas"]["BitcoinToArbitrumSwapRequest"];
24
- export type PolygonToArkadeSwapRequest = components["schemas"]["PolygonToArkadeSwapRequest"];
25
- export type ArbitrumToArkadeSwapRequest = components["schemas"]["ArbitrumToArkadeSwapRequest"];
26
- export type EthereumToArkadeSwapRequest = components["schemas"]["EthereumToArkadeSwapRequest"];
27
- export type ClaimGelatoRequest = components["schemas"]["ClaimGelatoRequest"];
28
- export type ClaimGelatoResponse = components["schemas"]["ClaimGelatoResponse"];
13
+ export type EvmToArkadeSwapResponse = components["schemas"]["EvmToArkadeSwapResponse"];
14
+ export type ClaimGaslessRequest = components["schemas"]["ClaimGaslessRequest"];
15
+ export type ClaimGaslessResponse = components["schemas"]["ClaimGaslessResponse"];
16
+ export type ArkadeToEvmSwapRequest = components["schemas"]["ArkadeToEvmSwapRequest"];
17
+ export type ArkadeToEvmSwapResponse = components["schemas"]["ArkadeToEvmSwapResponse"];
18
+ export type DexCallData = components["schemas"]["DexCallData"];
19
+ export type BitcoinToEvmSwapRequest = components["schemas"]["BitcoinToEvmSwapRequest"];
20
+ export type BitcoinToEvmSwapResponse = components["schemas"]["BitcoinToEvmSwapResponse"];
21
+ export type EvmToArkadeGenericSwapRequest = components["schemas"]["EvmToArkadeGenericSwapRequest"];
22
+ export type EvmToBitcoinSwapRequest = components["schemas"]["EvmToBitcoinSwapRequest"];
23
+ export type EvmToBitcoinSwapResponse = components["schemas"]["EvmToBitcoinSwapResponse"];
24
+ export type EvmToLightningSwapResponse = components["schemas"]["EvmToLightningSwapResponse"];
25
+ export type LightningToEvmSwapResponse = components["schemas"]["LightningToEvmSwapResponse"];
29
26
  export interface ApiClientOptions {
30
27
  baseUrl: string;
31
28
  apiKey?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AAE/D,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAGlC,MAAM,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC;AACvD,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,CAAC;AAC3D,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC;AAC7D,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC;AAC7D,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC,CAAC;AACnE,MAAM,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC;AACnD,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,iBAAiB,CAAC,CAAC;AACvE,MAAM,MAAM,uBAAuB,GACjC,UAAU,CAAC,SAAS,CAAC,CAAC,yBAAyB,CAAC,CAAC;AACnD,MAAM,MAAM,uBAAuB,GACjC,UAAU,CAAC,SAAS,CAAC,CAAC,yBAAyB,CAAC,CAAC;AAGnD,MAAM,MAAM,mBAAmB,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC;AAC/E,MAAM,MAAM,oBAAoB,GAC9B,UAAU,CAAC,SAAS,CAAC,CAAC,sBAAsB,CAAC,CAAC;AAGhD,MAAM,MAAM,sBAAsB,GAChC,UAAU,CAAC,SAAS,CAAC,CAAC,wBAAwB,CAAC,CAAC;AAClD,MAAM,MAAM,uBAAuB,GACjC,UAAU,CAAC,SAAS,CAAC,CAAC,yBAAyB,CAAC,CAAC;AACnD,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,CAAC;AAG/D,MAAM,MAAM,uBAAuB,GACjC,UAAU,CAAC,SAAS,CAAC,CAAC,yBAAyB,CAAC,CAAC;AACnD,MAAM,MAAM,wBAAwB,GAClC,UAAU,CAAC,SAAS,CAAC,CAAC,0BAA0B,CAAC,CAAC;AAGpD,MAAM,MAAM,6BAA6B,GACvC,UAAU,CAAC,SAAS,CAAC,CAAC,+BAA+B,CAAC,CAAC;AAGzD,MAAM,MAAM,uBAAuB,GACjC,UAAU,CAAC,SAAS,CAAC,CAAC,yBAAyB,CAAC,CAAC;AACnD,MAAM,MAAM,wBAAwB,GAClC,UAAU,CAAC,SAAS,CAAC,CAAC,0BAA0B,CAAC,CAAC;AAGpD,MAAM,MAAM,0BAA0B,GACpC,UAAU,CAAC,SAAS,CAAC,CAAC,4BAA4B,CAAC,CAAC;AAGtD,MAAM,MAAM,0BAA0B,GACpC,UAAU,CAAC,SAAS,CAAC,CAAC,4BAA4B,CAAC,CAAC;AAEtD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,CAUpE"}
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,eAAe,CAAC;AA2DzC,MAAM,UAAU,eAAe,CAAC,OAAyB;IACvD,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IACxC,CAAC;IAED,OAAO,YAAY,CAAQ;QACzB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,OAAO;KACR,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,eAAe,CAAC;AA6DzC,MAAM,UAAU,eAAe,CAAC,OAAyB;IACvD,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IACxC,CAAC;IAED,OAAO,YAAY,CAAQ;QACzB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,OAAO;KACR,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Arkade VHTLC query utilities.
3
+ *
4
+ * Provides functions for querying VHTLC state from the Arkade indexer.
5
+ */
6
+ /** Overall VTXO lifecycle status */
7
+ export type VtxoStatus = "not_funded" | "spendable" | "recoverable" | "spent" | "mixed";
8
+ /** VHTLC amounts breakdown */
9
+ export interface VhtlcAmounts {
10
+ /** Amount that can be spent (in satoshis) */
11
+ spendable: number;
12
+ /** Amount already spent (in satoshis) */
13
+ spent: number;
14
+ /** Amount that can be recovered via refund (in satoshis) */
15
+ recoverable: number;
16
+ /** Overall status derived from VTXO states */
17
+ vtxoStatus: VtxoStatus;
18
+ }
19
+ /** Parameters for querying VHTLC amounts */
20
+ export interface GetVhtlcAmountsParams {
21
+ /** The Arkade VHTLC address */
22
+ vhtlcAddress: string;
23
+ /** The Bitcoin network (e.g. "bitcoin", "signet") */
24
+ network: string;
25
+ /** Optional Arkade server URL override. Falls back to network-based defaults. */
26
+ arkadeServerUrl?: string;
27
+ }
28
+ /**
29
+ * Queries the Arkade indexer for spendable, spent, and recoverable balances
30
+ * at a VHTLC address.
31
+ *
32
+ * @param params - The VHTLC address and network to query.
33
+ * @returns The VHTLC amounts in satoshis.
34
+ */
35
+ export declare function getVhtlcAmounts(params: GetVhtlcAmountsParams): Promise<VhtlcAmounts>;
36
+ //# sourceMappingURL=arkade.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arkade.d.ts","sourceRoot":"","sources":["../src/arkade.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAeH,oCAAoC;AACpC,MAAM,MAAM,UAAU,GAClB,YAAY,GACZ,WAAW,GACX,aAAa,GACb,OAAO,GACP,OAAO,CAAC;AAEZ,8BAA8B;AAC9B,MAAM,WAAW,YAAY;IAC3B,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,WAAW,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,4CAA4C;AAC5C,MAAM,WAAW,qBAAqB;IACpC,+BAA+B;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,iFAAiF;IACjF,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,YAAY,CAAC,CAyDvB"}
package/dist/arkade.js ADDED
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Arkade VHTLC query utilities.
3
+ *
4
+ * Provides functions for querying VHTLC state from the Arkade indexer.
5
+ */
6
+ import { ArkAddress, RestIndexerProvider, } from "@arkade-os/sdk";
7
+ import { hex } from "@scure/base";
8
+ /** Default Arkade server URLs by network */
9
+ const DEFAULT_ARKADE_URLS = {
10
+ bitcoin: "https://arkade.computer",
11
+ signet: "https://signet.arkade.computer",
12
+ };
13
+ /**
14
+ * Queries the Arkade indexer for spendable, spent, and recoverable balances
15
+ * at a VHTLC address.
16
+ *
17
+ * @param params - The VHTLC address and network to query.
18
+ * @returns The VHTLC amounts in satoshis.
19
+ */
20
+ export async function getVhtlcAmounts(params) {
21
+ const { vhtlcAddress, network, arkadeServerUrl } = params;
22
+ // Decode the Arkade address to get the pkScript for indexer queries
23
+ const decoded = ArkAddress.decode(vhtlcAddress);
24
+ const pkScript = hex.encode(decoded.pkScript);
25
+ // Determine Arkade server URL: explicit override > network default
26
+ const serverUrl = arkadeServerUrl ?? DEFAULT_ARKADE_URLS[network];
27
+ if (!serverUrl) {
28
+ throw new Error(`Unknown network for Arkade: ${network}`);
29
+ }
30
+ const indexerProvider = new RestIndexerProvider(serverUrl);
31
+ // Query each category separately
32
+ const [spendableResult, spentResult, recoverableResult] = await Promise.all([
33
+ indexerProvider.getVtxos({ scripts: [pkScript], spendableOnly: true }),
34
+ indexerProvider.getVtxos({ scripts: [pkScript], spentOnly: true }),
35
+ indexerProvider.getVtxos({ scripts: [pkScript], recoverableOnly: true }),
36
+ ]);
37
+ const sum = (vtxos) => vtxos.reduce((acc, v) => acc + v.value, 0);
38
+ // The indexer's spendableOnly filter doesn't account for expired batches.
39
+ // A preconfirmed VTXO with batchExpiry in the past is effectively expired
40
+ // and can only be spent via delegated settlement, not offchain spend.
41
+ // Reclassify such VTXOs from spendable to recoverable.
42
+ const now = Date.now();
43
+ let actualSpendable = 0;
44
+ let expiredSpendable = 0;
45
+ for (const v of spendableResult.vtxos) {
46
+ const expiry = v.virtualStatus?.batchExpiry;
47
+ if (expiry && expiry <= now) {
48
+ expiredSpendable += v.value;
49
+ }
50
+ else {
51
+ actualSpendable += v.value;
52
+ }
53
+ }
54
+ const spendable = actualSpendable;
55
+ const spent = sum(spentResult.vtxos);
56
+ const recoverable = sum(recoverableResult.vtxos) + expiredSpendable;
57
+ const vtxoStatus = spendable === 0 && spent === 0 && recoverable === 0
58
+ ? "not_funded"
59
+ : spendable > 0 && recoverable > 0
60
+ ? "mixed"
61
+ : spendable > 0
62
+ ? "spendable"
63
+ : recoverable > 0
64
+ ? "recoverable"
65
+ : "spent";
66
+ return { spendable, spent, recoverable, vtxoStatus };
67
+ }
68
+ //# sourceMappingURL=arkade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arkade.js","sourceRoot":"","sources":["../src/arkade.ts"],"names":[],"mappings":"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"}