@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.
- package/README.md +91 -19
- package/dist/api/client.d.ts +15 -18
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js.map +1 -1
- package/dist/arkade.d.ts +36 -0
- package/dist/arkade.d.ts.map +1 -0
- package/dist/arkade.js +68 -0
- package/dist/arkade.js.map +1 -0
- package/dist/client.d.ts +295 -120
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +1243 -274
- package/dist/client.js.map +1 -1
- package/dist/create/arkade.d.ts +13 -7
- package/dist/create/arkade.d.ts.map +1 -1
- package/dist/create/arkade.js +46 -53
- package/dist/create/arkade.js.map +1 -1
- package/dist/create/bitcoin-to-arkade.d.ts +36 -0
- package/dist/create/bitcoin-to-arkade.d.ts.map +1 -0
- package/dist/create/bitcoin-to-arkade.js +69 -0
- package/dist/create/bitcoin-to-arkade.js.map +1 -0
- package/dist/create/bitcoin.d.ts +6 -3
- package/dist/create/bitcoin.d.ts.map +1 -1
- package/dist/create/bitcoin.js +34 -48
- package/dist/create/bitcoin.js.map +1 -1
- package/dist/create/evm-to-arkade.d.ts +12 -13
- package/dist/create/evm-to-arkade.d.ts.map +1 -1
- package/dist/create/evm-to-arkade.js +38 -59
- package/dist/create/evm-to-arkade.js.map +1 -1
- package/dist/create/evm-to-bitcoin.d.ts +35 -0
- package/dist/create/evm-to-bitcoin.d.ts.map +1 -0
- package/dist/create/evm-to-bitcoin.js +71 -0
- package/dist/create/evm-to-bitcoin.js.map +1 -0
- package/dist/create/evm-to-lightning.d.ts +12 -12
- package/dist/create/evm-to-lightning.d.ts.map +1 -1
- package/dist/create/evm-to-lightning.js +33 -50
- package/dist/create/evm-to-lightning.js.map +1 -1
- package/dist/create/index.d.ts +7 -5
- package/dist/create/index.d.ts.map +1 -1
- package/dist/create/index.js +6 -4
- package/dist/create/index.js.map +1 -1
- package/dist/create/lightning.d.ts +11 -8
- package/dist/create/lightning.d.ts.map +1 -1
- package/dist/create/lightning.js +36 -45
- package/dist/create/lightning.js.map +1 -1
- package/dist/create/types.d.ts +166 -29
- package/dist/create/types.d.ts.map +1 -1
- package/dist/delegate.d.ts +62 -0
- package/dist/delegate.d.ts.map +1 -0
- package/dist/delegate.js +284 -0
- package/dist/delegate.js.map +1 -0
- package/dist/esplora.d.ts +18 -15
- package/dist/esplora.d.ts.map +1 -1
- package/dist/esplora.js +14 -13
- package/dist/esplora.js.map +1 -1
- package/dist/evm/coordinator.d.ts +247 -0
- package/dist/evm/coordinator.d.ts.map +1 -0
- package/dist/evm/coordinator.js +414 -0
- package/dist/evm/coordinator.js.map +1 -0
- package/dist/evm/htlc.d.ts +93 -0
- package/dist/evm/htlc.d.ts.map +1 -1
- package/dist/evm/htlc.js +91 -0
- package/dist/evm/htlc.js.map +1 -1
- package/dist/evm/index.d.ts +3 -1
- package/dist/evm/index.d.ts.map +1 -1
- package/dist/evm/index.js +3 -1
- package/dist/evm/index.js.map +1 -1
- package/dist/evm/signing.d.ts +30 -0
- package/dist/evm/signing.d.ts.map +1 -0
- package/dist/evm/signing.js +91 -0
- package/dist/evm/signing.js.map +1 -0
- package/dist/generated/api.d.ts +1033 -970
- package/dist/generated/api.d.ts.map +1 -1
- package/dist/index.d.ts +8 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/dist/price-calculations.d.ts +109 -0
- package/dist/price-calculations.d.ts.map +1 -0
- package/dist/price-calculations.js +135 -0
- package/dist/price-calculations.js.map +1 -0
- package/dist/price-feed.d.ts +124 -0
- package/dist/price-feed.d.ts.map +1 -0
- package/dist/price-feed.js +178 -0
- package/dist/price-feed.js.map +1 -0
- package/dist/redeem/arkade.js +2 -2
- package/dist/redeem/arkade.js.map +1 -1
- package/dist/redeem/ethereum.d.ts +26 -10
- package/dist/redeem/ethereum.d.ts.map +1 -1
- package/dist/redeem/ethereum.js +111 -26
- package/dist/redeem/ethereum.js.map +1 -1
- package/dist/redeem/gasless.d.ts +33 -14
- package/dist/redeem/gasless.d.ts.map +1 -1
- package/dist/redeem/gasless.js +60 -53
- package/dist/redeem/gasless.js.map +1 -1
- package/dist/redeem/index.d.ts +19 -22
- package/dist/redeem/index.d.ts.map +1 -1
- package/dist/redeem/index.js +110 -31
- package/dist/redeem/index.js.map +1 -1
- package/dist/redeem/types.d.ts +56 -4
- package/dist/redeem/types.d.ts.map +1 -1
- package/dist/redeem/types.js +13 -0
- package/dist/redeem/types.js.map +1 -1
- package/dist/refund/arkade.js +1 -1
- package/dist/refund/arkade.js.map +1 -1
- package/dist/refund/index.d.ts +1 -1
- package/dist/refund/index.d.ts.map +1 -1
- package/dist/refund/index.js +1 -1
- package/dist/refund/index.js.map +1 -1
- package/dist/refund/onchain.d.ts +54 -0
- package/dist/refund/onchain.d.ts.map +1 -1
- package/dist/refund/onchain.js +130 -0
- package/dist/refund/onchain.js.map +1 -1
- package/dist/signer/index.js +1 -1
- package/dist/signer/index.js.map +1 -1
- package/dist/storage/idb.d.ts +7 -0
- package/dist/storage/idb.d.ts.map +1 -1
- package/dist/storage/idb.js +89 -1
- package/dist/storage/idb.js.map +1 -1
- package/dist/storage/types.d.ts +2 -0
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/tokens.d.ts +29 -0
- package/dist/tokens.d.ts.map +1 -0
- package/dist/tokens.js +89 -0
- package/dist/tokens.js.map +1 -0
- package/dist/usd-price.d.ts +83 -0
- package/dist/usd-price.d.ts.map +1 -0
- package/dist/usd-price.js +166 -0
- package/dist/usd-price.js.map +1 -0
- 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
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
|
19
|
-
|
|
|
20
|
-
|
|
|
21
|
-
|
|
|
22
|
-
|
|
|
23
|
-
|
|
|
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
|
-
|
|
104
|
+
// Create an Arkade-to-EVM swap (any ERC-20 token via 1inch)
|
|
105
|
+
const result = await client.createArkadeToEvmSwapGeneric({
|
|
90
106
|
targetAddress: "0x1234567890abcdef1234567890abcdef12345678",
|
|
91
|
-
|
|
92
|
-
|
|
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.
|
|
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
|
-
|
|
132
|
-
|
|
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)
|
package/dist/api/client.d.ts
CHANGED
|
@@ -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
|
|
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
|
|
16
|
-
export type
|
|
17
|
-
export type
|
|
18
|
-
export type
|
|
19
|
-
export type
|
|
20
|
-
export type
|
|
21
|
-
export type
|
|
22
|
-
export type
|
|
23
|
-
export type
|
|
24
|
-
export type
|
|
25
|
-
export type
|
|
26
|
-
export type
|
|
27
|
-
export type
|
|
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;
|
package/dist/api/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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,
|
|
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"}
|
package/dist/api/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,eAAe,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"}
|
package/dist/arkade.d.ts
ADDED
|
@@ -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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"}
|