@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.
- package/dist/_esm-7KJOBTZC.js +3660 -0
- package/dist/_esm-7KJOBTZC.js.map +1 -0
- package/dist/_esm-UGRDSVEV.cjs +3662 -0
- package/dist/_esm-UGRDSVEV.cjs.map +1 -0
- package/dist/api/client.d.ts +0 -4
- package/dist/api/client.d.ts.map +1 -1
- package/dist/base-2KYNAFR3.cjs +109 -0
- package/dist/base-2KYNAFR3.cjs.map +1 -0
- package/dist/base-B6OGU65B.js +7 -0
- package/dist/base-B6OGU65B.js.map +1 -0
- package/dist/ccip-MPMAZOUF.js +5 -0
- package/dist/ccip-MPMAZOUF.js.map +1 -0
- package/dist/ccip-PD37NJHA.cjs +26 -0
- package/dist/ccip-PD37NJHA.cjs.map +1 -0
- package/dist/cctp-bridge/index.cjs +67 -0
- package/dist/cctp-bridge/index.cjs.map +1 -0
- package/dist/cctp-bridge/index.js +51 -15
- package/dist/cctp-bridge/index.js.map +1 -1
- package/dist/cctp-inbound/client.d.ts +21 -19
- package/dist/cctp-inbound/client.d.ts.map +1 -1
- package/dist/cctp-inbound/smartAccount.d.ts +21 -19
- package/dist/cctp-inbound/smartAccount.d.ts.map +1 -1
- package/dist/chunk-3JWT4OW2.js +369 -0
- package/dist/chunk-3JWT4OW2.js.map +1 -0
- package/dist/chunk-A4GKKURK.cjs +430 -0
- package/dist/chunk-A4GKKURK.cjs.map +1 -0
- package/dist/chunk-BZU3R5DJ.cjs +554 -0
- package/dist/chunk-BZU3R5DJ.cjs.map +1 -0
- package/dist/chunk-C4YXYD24.js +418 -0
- package/dist/chunk-C4YXYD24.js.map +1 -0
- package/dist/chunk-CZNQYFDP.js +6141 -0
- package/dist/chunk-CZNQYFDP.js.map +1 -0
- package/dist/chunk-DKTFDGIU.js +2207 -0
- package/dist/chunk-DKTFDGIU.js.map +1 -0
- package/dist/chunk-DNSJDKTP.cjs +96 -0
- package/dist/chunk-DNSJDKTP.cjs.map +1 -0
- package/dist/chunk-EPKFLKTM.js +47093 -0
- package/dist/chunk-EPKFLKTM.js.map +1 -0
- package/dist/chunk-JBVKWKD4.cjs +50 -0
- package/dist/chunk-JBVKWKD4.cjs.map +1 -0
- package/dist/chunk-NPFJAXKV.js +551 -0
- package/dist/chunk-NPFJAXKV.js.map +1 -0
- package/dist/chunk-PKDJZJMV.cjs +2214 -0
- package/dist/chunk-PKDJZJMV.cjs.map +1 -0
- package/dist/chunk-PLDDJCW6.js +43 -0
- package/dist/chunk-PLDDJCW6.js.map +1 -0
- package/dist/chunk-RIOT5VOJ.cjs +47240 -0
- package/dist/chunk-RIOT5VOJ.cjs.map +1 -0
- package/dist/chunk-WVZSHRV7.cjs +431 -0
- package/dist/chunk-WVZSHRV7.cjs.map +1 -0
- package/dist/chunk-YEZOPVAH.js +86 -0
- package/dist/chunk-YEZOPVAH.js.map +1 -0
- package/dist/chunk-YLWPBHMV.cjs +6311 -0
- package/dist/chunk-YLWPBHMV.cjs.map +1 -0
- package/dist/client.d.ts +68 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/compose-quote.d.ts +77 -0
- package/dist/compose-quote.d.ts.map +1 -0
- package/dist/delegate.cjs +23 -0
- package/dist/delegate.cjs.map +1 -0
- package/dist/delegate.js +5 -269
- package/dist/delegate.js.map +1 -1
- package/dist/dist-NE2R4YCX.js +5 -0
- package/dist/dist-NE2R4YCX.js.map +1 -0
- package/dist/dist-VEHYC67F.cjs +550 -0
- package/dist/dist-VEHYC67F.cjs.map +1 -0
- package/dist/esplora.d.ts +14 -0
- package/dist/esplora.d.ts.map +1 -1
- package/dist/generated/api.d.ts +235 -38
- package/dist/generated/api.d.ts.map +1 -1
- package/dist/index.cjs +35461 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +35309 -32
- package/dist/index.js.map +1 -1
- package/dist/mine.wasm-JJEJEODX.js +9 -0
- package/dist/mine.wasm-JJEJEODX.js.map +1 -0
- package/dist/mine.wasm-Z3ORSBKN.cjs +12 -0
- package/dist/mine.wasm-Z3ORSBKN.cjs.map +1 -0
- package/dist/node.cjs +166 -0
- package/dist/node.cjs.map +1 -0
- package/dist/node.js +157 -18
- package/dist/node.js.map +1 -1
- package/dist/secp256k1-PJCSE4N6.cjs +30 -0
- package/dist/secp256k1-PJCSE4N6.cjs.map +1 -0
- package/dist/secp256k1-VZNNVEPN.js +5 -0
- package/dist/secp256k1-VZNNVEPN.js.map +1 -0
- package/dist/tokens.d.ts +2 -1
- package/dist/tokens.d.ts.map +1 -1
- package/dist/types/chain-config.d.ts +50 -0
- package/dist/types/chain-config.d.ts.map +1 -0
- package/dist/types/chain.d.ts +11 -0
- package/dist/types/chain.d.ts.map +1 -0
- package/dist/types/dex-quote.d.ts +85 -0
- package/dist/types/dex-quote.d.ts.map +1 -0
- package/dist/types/index.d.ts +15 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/network-fees.d.ts +43 -0
- package/dist/types/network-fees.d.ts.map +1 -0
- package/dist/types/quote.d.ts +87 -0
- package/dist/types/quote.d.ts.map +1 -0
- package/dist/types/swap-pairs.d.ts +37 -0
- package/dist/types/swap-pairs.d.ts.map +1 -0
- package/dist/version.d.ts +2 -2
- package/dist/wallet-SCGRX3EN.js +4 -0
- package/dist/wallet-SCGRX3EN.js.map +1 -0
- package/dist/wallet-SZJDXAY7.cjs +45 -0
- package/dist/wallet-SZJDXAY7.cjs.map +1 -0
- package/package.json +23 -10
- package/dist/api/client.js +0 -13
- package/dist/api/client.js.map +0 -1
- package/dist/arkade-network.js +0 -40
- package/dist/arkade-network.js.map +0 -1
- package/dist/arkade.js +0 -61
- package/dist/arkade.js.map +0 -1
- package/dist/cctp/attestation.js +0 -149
- package/dist/cctp/attestation.js.map +0 -1
- package/dist/cctp/constants.js +0 -92
- package/dist/cctp/constants.js.map +0 -1
- package/dist/cctp/fee.js +0 -70
- package/dist/cctp/fee.js.map +0 -1
- package/dist/cctp/index.js +0 -13
- package/dist/cctp/index.js.map +0 -1
- package/dist/cctp/types.js +0 -5
- package/dist/cctp/types.js.map +0 -1
- package/dist/cctp/utils.js +0 -91
- package/dist/cctp/utils.js.map +0 -1
- package/dist/cctp-bridge/bridge.js +0 -74
- package/dist/cctp-bridge/bridge.js.map +0 -1
- package/dist/cctp-inbound/approveAndBurn.js +0 -95
- package/dist/cctp-inbound/approveAndBurn.js.map +0 -1
- package/dist/cctp-inbound/burn.js +0 -66
- package/dist/cctp-inbound/burn.js.map +0 -1
- package/dist/cctp-inbound/chainMap.js +0 -128
- package/dist/cctp-inbound/chainMap.js.map +0 -1
- package/dist/cctp-inbound/client.js +0 -125
- package/dist/cctp-inbound/client.js.map +0 -1
- package/dist/cctp-inbound/eip2612.js +0 -95
- package/dist/cctp-inbound/eip2612.js.map +0 -1
- package/dist/cctp-inbound/evmSignerAdapter.js +0 -82
- package/dist/cctp-inbound/evmSignerAdapter.js.map +0 -1
- package/dist/cctp-inbound/fundSwap.js +0 -95
- package/dist/cctp-inbound/fundSwap.js.map +0 -1
- package/dist/cctp-inbound/index.js +0 -34
- package/dist/cctp-inbound/index.js.map +0 -1
- package/dist/cctp-inbound/permit2.js +0 -32
- package/dist/cctp-inbound/permit2.js.map +0 -1
- package/dist/cctp-inbound/preflight.js +0 -84
- package/dist/cctp-inbound/preflight.js.map +0 -1
- package/dist/cctp-inbound/recover.js +0 -177
- package/dist/cctp-inbound/recover.js.map +0 -1
- package/dist/cctp-inbound/smartAccount.js +0 -117
- package/dist/cctp-inbound/smartAccount.js.map +0 -1
- package/dist/cctp-inbound/submit.js +0 -136
- package/dist/cctp-inbound/submit.js.map +0 -1
- package/dist/cctp-inbound/types.js +0 -5
- package/dist/cctp-inbound/types.js.map +0 -1
- package/dist/cctp-inbound/userOp.js +0 -151
- package/dist/cctp-inbound/userOp.js.map +0 -1
- package/dist/client.js +0 -4126
- package/dist/client.js.map +0 -1
- package/dist/create/arkade-to-lightning.js +0 -76
- package/dist/create/arkade-to-lightning.js.map +0 -1
- package/dist/create/arkade.js +0 -86
- package/dist/create/arkade.js.map +0 -1
- package/dist/create/bitcoin-to-arkade.js +0 -76
- package/dist/create/bitcoin-to-arkade.js.map +0 -1
- package/dist/create/bitcoin.js +0 -77
- package/dist/create/bitcoin.js.map +0 -1
- package/dist/create/evm-to-arkade.js +0 -80
- package/dist/create/evm-to-arkade.js.map +0 -1
- package/dist/create/evm-to-bitcoin.js +0 -82
- package/dist/create/evm-to-bitcoin.js.map +0 -1
- package/dist/create/evm-to-lightning.js +0 -89
- package/dist/create/evm-to-lightning.js.map +0 -1
- package/dist/create/index.js +0 -21
- package/dist/create/index.js.map +0 -1
- package/dist/create/lightning-to-arkade.js +0 -69
- package/dist/create/lightning-to-arkade.js.map +0 -1
- package/dist/create/lightning.js +0 -61
- package/dist/create/lightning.js.map +0 -1
- package/dist/create/retry.js +0 -71
- package/dist/create/retry.js.map +0 -1
- package/dist/create/types.js +0 -5
- package/dist/create/types.js.map +0 -1
- package/dist/escrow/index.js +0 -115
- package/dist/escrow/index.js.map +0 -1
- package/dist/esplora.js +0 -47
- package/dist/esplora.js.map +0 -1
- package/dist/evm/coordinator.js +0 -714
- package/dist/evm/coordinator.js.map +0 -1
- package/dist/evm/htlc.js +0 -278
- package/dist/evm/htlc.js.map +0 -1
- package/dist/evm/index.js +0 -10
- package/dist/evm/index.js.map +0 -1
- package/dist/evm/signing.js +0 -70
- package/dist/evm/signing.js.map +0 -1
- package/dist/evm/wallet.js +0 -133
- package/dist/evm/wallet.js.map +0 -1
- package/dist/generated/api.js +0 -6
- package/dist/generated/api.js.map +0 -1
- package/dist/logging.js +0 -130
- package/dist/logging.js.map +0 -1
- package/dist/price-calculations.js +0 -135
- package/dist/price-calculations.js.map +0 -1
- package/dist/redeem/arkade.js +0 -416
- package/dist/redeem/arkade.js.map +0 -1
- package/dist/redeem/ethereum.js +0 -206
- package/dist/redeem/ethereum.js.map +0 -1
- package/dist/redeem/gasless.js +0 -73
- package/dist/redeem/gasless.js.map +0 -1
- package/dist/redeem/index.js +0 -189
- package/dist/redeem/index.js.map +0 -1
- package/dist/redeem/types.js +0 -36
- package/dist/redeem/types.js.map +0 -1
- package/dist/refund/arkade.js +0 -200
- package/dist/refund/arkade.js.map +0 -1
- package/dist/refund/collab-arkade-evm.js +0 -307
- package/dist/refund/collab-arkade-evm.js.map +0 -1
- package/dist/refund/collab-arkade-lightning.js +0 -245
- package/dist/refund/collab-arkade-lightning.js.map +0 -1
- package/dist/refund/index.js +0 -12
- package/dist/refund/index.js.map +0 -1
- package/dist/refund/onchain.js +0 -366
- package/dist/refund/onchain.js.map +0 -1
- package/dist/signer/index.js +0 -249
- package/dist/signer/index.js.map +0 -1
- package/dist/storage/idb.js +0 -236
- package/dist/storage/idb.js.map +0 -1
- package/dist/storage/index.js +0 -98
- package/dist/storage/index.js.map +0 -1
- package/dist/storage/sqlite.js +0 -206
- package/dist/storage/sqlite.js.map +0 -1
- package/dist/storage/types.js +0 -9
- package/dist/storage/types.js.map +0 -1
- package/dist/tokens.js +0 -322
- package/dist/tokens.js.map +0 -1
- package/dist/usd-price.js +0 -96
- package/dist/usd-price.js.map +0 -1
- package/dist/usdt0-bridge/constants.js +0 -71
- package/dist/usdt0-bridge/constants.js.map +0 -1
- package/dist/usdt0-bridge/index.js +0 -11
- package/dist/usdt0-bridge/index.js.map +0 -1
- package/dist/usdt0-bridge/tracking.js +0 -123
- package/dist/usdt0-bridge/tracking.js.map +0 -1
- package/dist/usdt0-bridge/utils.js +0 -51
- package/dist/usdt0-bridge/utils.js.map +0 -1
- package/dist/version.js +0 -6
- package/dist/version.js.map +0 -1
- package/dist/ws.js +0 -145
- package/dist/ws.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"evm-to-arkade.js","sourceRoot":"","sources":["../../src/create/evm-to-arkade.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAOlD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,OAAsC,EACtC,GAAsB;IAEtB,OAAO,oBAAoB,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAChD,MAAM,QAAQ,GAAG,KAAK,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC5D,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAE7C,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;QAE3E,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,EAAE;YACnE,IAAI,EAAE;gBACJ,SAAS,EAAE,QAAQ;gBACnB,WAAW,EAAE,UAAU;gBACvB,OAAO,EAAE,MAAM;gBACf,cAAc,EAAE,OAAO,CAAC,aAAa;gBACrC,aAAa,EAAE,OAAO,CAAC,YAAY;gBACnC,YAAY,EAAE,OAAO,CAAC,UAAU;gBAChC,YAAY,EAAE,WAAW;gBACzB,SAAS,EAAE,OAAO,CAAC,YAAY;oBAC7B,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;oBAC9B,CAAC,CAAC,SAAS;gBACb,UAAU,EAAE,OAAO,CAAC,YAAY;oBAC9B,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;oBAC9B,CAAC,CAAC,SAAS;gBACb,aAAa,EAAE,OAAO,CAAC,YAAY;gBACnC,UAAU,EAAE,OAAO,CAAC,SAAS;gBAC7B,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK;gBACjC,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,EAAE,WAAW;gBAC7D,2BAA2B,EACzB,OAAO,CAAC,mBAAmB,EAAE,kBAAkB;aAClD;SACF,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC;QAED,0CAA0C;QAC1C,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE;YACvC,GAAG,IAAI;YACP,SAAS,EAAE,eAAe;SAC3B,CAAC,CAAC;QAEH,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* EVM to Bitcoin (on-chain) swap creation.
|
|
3
|
-
*
|
|
4
|
-
* Supports swapping tokens from Polygon, Arbitrum, or Ethereum to BTC on-chain
|
|
5
|
-
* via Taproot HTLC.
|
|
6
|
-
*/
|
|
7
|
-
import { bytesToHex } from "../signer/index.js";
|
|
8
|
-
import { retryOnHashCollision } from "./retry.js";
|
|
9
|
-
/**
|
|
10
|
-
* Creates a new EVM-to-Bitcoin swap via the generic endpoint.
|
|
11
|
-
*
|
|
12
|
-
* Uses the chain-agnostic `/swap/evm/bitcoin` endpoint which supports any
|
|
13
|
-
* ERC-20 token reachable through 1inch aggregation.
|
|
14
|
-
*
|
|
15
|
-
* If the server rejects the hash lock (duplicate or collision), the
|
|
16
|
-
* function automatically retries with a new key index.
|
|
17
|
-
*
|
|
18
|
-
* @param options - The swap options.
|
|
19
|
-
* @param ctx - The context containing API client and helper functions.
|
|
20
|
-
* @returns The swap response and parameters for storage.
|
|
21
|
-
* @throws Error if the swap creation fails after all retries.
|
|
22
|
-
*
|
|
23
|
-
* @example
|
|
24
|
-
* ```ts
|
|
25
|
-
* const result = await createEvmToBitcoinSwap(
|
|
26
|
-
* {
|
|
27
|
-
* tokenAddress: "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359", // USDC on Polygon
|
|
28
|
-
* evmChainId: 137,
|
|
29
|
-
* userAddress: "0x1234...",
|
|
30
|
-
* sourceAmount: 100000000n, // 100 USDC (6 decimals)
|
|
31
|
-
* },
|
|
32
|
-
* { apiClient, deriveSwapParams, storeSwap }
|
|
33
|
-
* );
|
|
34
|
-
* console.log("EVM HTLC:", result.response.evm_htlc_address);
|
|
35
|
-
* console.log("BTC HTLC:", result.response.btc_htlc_address);
|
|
36
|
-
* ```
|
|
37
|
-
*/
|
|
38
|
-
export async function createEvmToBitcoinSwap(options, ctx) {
|
|
39
|
-
return retryOnHashCollision(ctx, async () => {
|
|
40
|
-
const swapParams = await ctx.deriveSwapParams();
|
|
41
|
-
const hashLock = `0x${bytesToHex(swapParams.preimageHash)}`;
|
|
42
|
-
// For BTC on-chain claim, the user needs their public key (compressed, 33 bytes)
|
|
43
|
-
const claimPk = bytesToHex(swapParams.publicKey);
|
|
44
|
-
const userId = bytesToHex(swapParams.userId);
|
|
45
|
-
const userAddress = options.gasless ? ctx.evmAddress : options.userAddress;
|
|
46
|
-
const { data, error } = await ctx.apiClient.POST("/swap/evm/bitcoin", {
|
|
47
|
-
body: {
|
|
48
|
-
hash_lock: hashLock,
|
|
49
|
-
claim_pk: claimPk,
|
|
50
|
-
user_id: userId,
|
|
51
|
-
token_address: options.tokenAddress,
|
|
52
|
-
evm_chain_id: options.evmChainId,
|
|
53
|
-
user_address: userAddress,
|
|
54
|
-
target_address: options.targetAddress,
|
|
55
|
-
amount_in: options.sourceAmount
|
|
56
|
-
? Number(options.sourceAmount)
|
|
57
|
-
: undefined,
|
|
58
|
-
amount_out: options.targetAmount
|
|
59
|
-
? Number(options.targetAmount)
|
|
60
|
-
: undefined,
|
|
61
|
-
referral_code: options.referralCode,
|
|
62
|
-
extra_fees: options.extraFees,
|
|
63
|
-
gasless: options.gasless ?? false,
|
|
64
|
-
bridge_source_chain: options.inboundBridgeParams?.sourceChain,
|
|
65
|
-
bridge_source_token_address: options.inboundBridgeParams?.sourceTokenAddress,
|
|
66
|
-
},
|
|
67
|
-
});
|
|
68
|
-
if (error) {
|
|
69
|
-
throw new Error(`Failed to create swap: ${JSON.stringify(error)}`);
|
|
70
|
-
}
|
|
71
|
-
if (!data) {
|
|
72
|
-
throw new Error("No swap data returned");
|
|
73
|
-
}
|
|
74
|
-
// Store the swap if storage is configured
|
|
75
|
-
await ctx.storeSwap(data.id, swapParams, {
|
|
76
|
-
...data,
|
|
77
|
-
direction: "evm_to_bitcoin",
|
|
78
|
-
});
|
|
79
|
-
return { response: data, swapParams };
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
//# sourceMappingURL=evm-to-bitcoin.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"evm-to-bitcoin.js","sourceRoot":"","sources":["../../src/create/evm-to-bitcoin.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAOlD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAgC,EAChC,GAAsB;IAEtB,OAAO,oBAAoB,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAChD,MAAM,QAAQ,GAAG,KAAK,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC5D,iFAAiF;QACjF,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAE7C,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;QAE3E,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,mBAAmB,EAAE;YACpE,IAAI,EAAE;gBACJ,SAAS,EAAE,QAAQ;gBACnB,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,MAAM;gBACf,aAAa,EAAE,OAAO,CAAC,YAAY;gBACnC,YAAY,EAAE,OAAO,CAAC,UAAU;gBAChC,YAAY,EAAE,WAAW;gBACzB,cAAc,EAAE,OAAO,CAAC,aAAa;gBACrC,SAAS,EAAE,OAAO,CAAC,YAAY;oBAC7B,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;oBAC9B,CAAC,CAAC,SAAS;gBACb,UAAU,EAAE,OAAO,CAAC,YAAY;oBAC9B,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;oBAC9B,CAAC,CAAC,SAAS;gBACb,aAAa,EAAE,OAAO,CAAC,YAAY;gBACnC,UAAU,EAAE,OAAO,CAAC,SAAS;gBAC7B,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK;gBACjC,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,EAAE,WAAW;gBAC7D,2BAA2B,EACzB,OAAO,CAAC,mBAAmB,EAAE,kBAAkB;aAClD;SACF,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC;QAED,0CAA0C;QAC1C,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE;YACvC,GAAG,IAAI;YACP,SAAS,EAAE,gBAAgB;SAC5B,CAAC,CAAC;QAEH,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* EVM to Lightning swap creation.
|
|
3
|
-
*
|
|
4
|
-
* Supports swapping tokens from any EVM chain to pay a Lightning invoice.
|
|
5
|
-
*/
|
|
6
|
-
import { bytesToHex } from "../signer/index.js";
|
|
7
|
-
import { DuplicateInvoiceError, isDuplicateInvoiceError } from "./retry.js";
|
|
8
|
-
/**
|
|
9
|
-
* Creates a new EVM to Lightning swap using the chain-agnostic generic endpoint.
|
|
10
|
-
*
|
|
11
|
-
* This allows users to swap any ERC-20 token from any supported EVM chain
|
|
12
|
-
* to pay a Lightning invoice.
|
|
13
|
-
*
|
|
14
|
-
* @param options - The swap options.
|
|
15
|
-
* @param ctx - The context containing API client and helper functions.
|
|
16
|
-
* @returns The swap response and parameters for storage.
|
|
17
|
-
* @throws Error if the swap creation fails.
|
|
18
|
-
*
|
|
19
|
-
* @example
|
|
20
|
-
* ```ts
|
|
21
|
-
* const result = await createEvmToLightningSwapGeneric(
|
|
22
|
-
* {
|
|
23
|
-
* lightningInvoice: "lnbc...",
|
|
24
|
-
* evmChainId: 137, // Polygon
|
|
25
|
-
* tokenAddress: "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", // USDC
|
|
26
|
-
* amountIn: 10000000, // 10 USDC (6 decimals)
|
|
27
|
-
* userAddress: "0x1234...",
|
|
28
|
-
* },
|
|
29
|
-
* { apiClient, deriveSwapParams, storeSwap }
|
|
30
|
-
* );
|
|
31
|
-
* console.log("HTLC contract:", result.response.htlc_erc20_address);
|
|
32
|
-
* ```
|
|
33
|
-
*/
|
|
34
|
-
export async function createEvmToLightningSwapGeneric(options, ctx) {
|
|
35
|
-
const swapParams = await ctx.deriveSwapParams();
|
|
36
|
-
// Note: For EVM-to-Lightning, hash_lock is derived from the Lightning invoice's payment_hash
|
|
37
|
-
// by the server, so we don't send it here.
|
|
38
|
-
const userId = bytesToHex(swapParams.userId);
|
|
39
|
-
const userAddress = options.gasless ? ctx.evmAddress : options.userAddress;
|
|
40
|
-
let lightningInvoice = null;
|
|
41
|
-
let lightningAddress = null;
|
|
42
|
-
let lnurl = null;
|
|
43
|
-
let amountSats = null;
|
|
44
|
-
if (options.lightningInvoice) {
|
|
45
|
-
lightningInvoice = options.lightningInvoice;
|
|
46
|
-
}
|
|
47
|
-
else if (options.lightningAddress) {
|
|
48
|
-
lightningAddress = options.lightningAddress;
|
|
49
|
-
amountSats = options.amountSats;
|
|
50
|
-
}
|
|
51
|
-
else if (options.lnurl) {
|
|
52
|
-
lnurl = options.lnurl;
|
|
53
|
-
amountSats = options.amountSats;
|
|
54
|
-
}
|
|
55
|
-
const { data, error } = await ctx.apiClient.POST("/swap/evm/lightning", {
|
|
56
|
-
body: {
|
|
57
|
-
amount_sats: amountSats,
|
|
58
|
-
evm_chain_id: options.evmChainId,
|
|
59
|
-
gasless: options.gasless ?? false,
|
|
60
|
-
lightning_address: lightningAddress,
|
|
61
|
-
lightning_invoice: lightningInvoice,
|
|
62
|
-
lnurl: lnurl,
|
|
63
|
-
referral_code: options.referralCode,
|
|
64
|
-
extra_fees: options.extraFees,
|
|
65
|
-
token_address: options.tokenAddress,
|
|
66
|
-
user_address: userAddress,
|
|
67
|
-
user_id: userId,
|
|
68
|
-
bridge_source_chain: options.inboundBridgeParams?.sourceChain,
|
|
69
|
-
bridge_source_token_address: options.inboundBridgeParams?.sourceTokenAddress,
|
|
70
|
-
},
|
|
71
|
-
});
|
|
72
|
-
if (error) {
|
|
73
|
-
const message = typeof error === "string" ? error : JSON.stringify(error, null, 2);
|
|
74
|
-
if (isDuplicateInvoiceError(message)) {
|
|
75
|
-
throw new DuplicateInvoiceError(message);
|
|
76
|
-
}
|
|
77
|
-
throw new Error(`Failed to create swap: ${message}`);
|
|
78
|
-
}
|
|
79
|
-
if (!data) {
|
|
80
|
-
throw new Error("No swap data returned");
|
|
81
|
-
}
|
|
82
|
-
// Store the swap if storage is configured
|
|
83
|
-
await ctx.storeSwap(data.id, swapParams, {
|
|
84
|
-
...data,
|
|
85
|
-
direction: "evm_to_lightning",
|
|
86
|
-
});
|
|
87
|
-
return { response: data, swapParams };
|
|
88
|
-
}
|
|
89
|
-
//# sourceMappingURL=evm-to-lightning.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"evm-to-lightning.js","sourceRoot":"","sources":["../../src/create/evm-to-lightning.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAO5E;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,OAAyC,EACzC,GAAsB;IAEtB,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAChD,6FAA6F;IAC7F,2CAA2C;IAC3C,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAE7C,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;IAE3E,IAAI,gBAAgB,GAAG,IAAI,CAAC;IAC5B,IAAI,gBAAgB,GAAG,IAAI,CAAC;IAC5B,IAAI,KAAK,GAAG,IAAI,CAAC;IACjB,IAAI,UAAU,GAAG,IAAI,CAAC;IACtB,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC7B,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAC9C,CAAC;SAAM,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;QACpC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QAC5C,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAClC,CAAC;SAAM,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACzB,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QACtB,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAClC,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,qBAAqB,EAAE;QACtE,IAAI,EAAE;YACJ,WAAW,EAAE,UAAU;YACvB,YAAY,EAAE,OAAO,CAAC,UAAU;YAChC,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK;YACjC,iBAAiB,EAAE,gBAAgB;YACnC,iBAAiB,EAAE,gBAAgB;YACnC,KAAK,EAAE,KAAK;YACZ,aAAa,EAAE,OAAO,CAAC,YAAY;YACnC,UAAU,EAAE,OAAO,CAAC,SAAS;YAC7B,aAAa,EAAE,OAAO,CAAC,YAAY;YACnC,YAAY,EAAE,WAAW;YACzB,OAAO,EAAE,MAAM;YACf,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,EAAE,WAAW;YAC7D,2BAA2B,EACzB,OAAO,CAAC,mBAAmB,EAAE,kBAAkB;SAClD;KACF,CAAC,CAAC;IAEH,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,OAAO,GACX,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAErE,IAAI,uBAAuB,CAAC,OAAO,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,0BAA0B,OAAO,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IAED,0CAA0C;IAC1C,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE;QACvC,GAAG,IAAI;QACP,SAAS,EAAE,kBAAkB;KAC9B,CAAC,CAAC;IAEH,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AACxC,CAAC"}
|
package/dist/create/index.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Swap creation module for Lendaswap.
|
|
3
|
-
*
|
|
4
|
-
* Provides swap creation logic for different source types:
|
|
5
|
-
* - Arkade (off-chain) to EVM
|
|
6
|
-
* - Lightning to EVM
|
|
7
|
-
* - Bitcoin (on-chain) to EVM
|
|
8
|
-
* - EVM to Arkade
|
|
9
|
-
* - EVM to Lightning
|
|
10
|
-
*/
|
|
11
|
-
export { createArkadeToEvmSwapGeneric } from "./arkade.js";
|
|
12
|
-
export { createArkadeToLightningSwap } from "./arkade-to-lightning.js";
|
|
13
|
-
export { createBitcoinToEvmSwap } from "./bitcoin.js";
|
|
14
|
-
export { createBitcoinToArkadeSwap } from "./bitcoin-to-arkade.js";
|
|
15
|
-
export { createEvmToArkadeSwapGeneric } from "./evm-to-arkade.js";
|
|
16
|
-
export { createEvmToBitcoinSwap } from "./evm-to-bitcoin.js";
|
|
17
|
-
export { createEvmToLightningSwapGeneric } from "./evm-to-lightning.js";
|
|
18
|
-
export { createLightningToEvmSwapGeneric } from "./lightning.js";
|
|
19
|
-
export { createLightningToArkadeSwap } from "./lightning-to-arkade.js";
|
|
20
|
-
export { DuplicateInvoiceError } from "./retry.js";
|
|
21
|
-
//# sourceMappingURL=index.js.map
|
package/dist/create/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/create/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,+BAA+B,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,+BAA+B,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Lightning to Arkade swap creation.
|
|
3
|
-
*
|
|
4
|
-
* The user pays a Lightning invoice and receives Arkade VTXOs
|
|
5
|
-
* after Boltz funds the Arkade VHTLC.
|
|
6
|
-
*/
|
|
7
|
-
import { bytesToHex } from "../signer/index.js";
|
|
8
|
-
import { retryOnHashCollision } from "./retry.js";
|
|
9
|
-
/**
|
|
10
|
-
* Creates a new Lightning to Arkade swap.
|
|
11
|
-
*
|
|
12
|
-
* Flow:
|
|
13
|
-
* 1. User pays the Lightning invoice returned
|
|
14
|
-
* 2. Boltz receives BTC via Lightning and funds the Arkade VHTLC
|
|
15
|
-
* 3. User claims Arkade VHTLC with secret, revealing it
|
|
16
|
-
* 4. Server claims Boltz VHTLC with the revealed secret
|
|
17
|
-
*
|
|
18
|
-
* If the server rejects the hash lock (duplicate or collision), the
|
|
19
|
-
* function automatically retries with a new key index.
|
|
20
|
-
*
|
|
21
|
-
* @param options - The swap options.
|
|
22
|
-
* @param ctx - The context containing API client and helper functions.
|
|
23
|
-
* @returns The swap response and parameters for storage.
|
|
24
|
-
* @throws Error if the swap creation fails after all retries.
|
|
25
|
-
*
|
|
26
|
-
* @example
|
|
27
|
-
* ```ts
|
|
28
|
-
* const result = await createLightningToArkadeSwap(
|
|
29
|
-
* {
|
|
30
|
-
* satsReceive: 100000, // 100k sats to receive on Arkade
|
|
31
|
-
* targetAddress: "ark1q...", // Arkade address
|
|
32
|
-
* },
|
|
33
|
-
* { apiClient, deriveSwapParams, storeSwap }
|
|
34
|
-
* );
|
|
35
|
-
* console.log("Pay this invoice:", result.response.bolt11_invoice);
|
|
36
|
-
* ```
|
|
37
|
-
*/
|
|
38
|
-
export async function createLightningToArkadeSwap(options, ctx) {
|
|
39
|
-
return retryOnHashCollision(ctx, async () => {
|
|
40
|
-
const swapParams = await ctx.deriveSwapParams();
|
|
41
|
-
const hashLock = `0x${bytesToHex(swapParams.preimageHash)}`;
|
|
42
|
-
const publicKey = bytesToHex(swapParams.publicKey);
|
|
43
|
-
const userId = bytesToHex(swapParams.userId);
|
|
44
|
-
const body = {
|
|
45
|
-
hash_lock: hashLock,
|
|
46
|
-
claim_pk: publicKey,
|
|
47
|
-
refund_pk: publicKey,
|
|
48
|
-
user_id: userId,
|
|
49
|
-
sats_receive: options.satsReceive,
|
|
50
|
-
target_arkade_address: options.targetAddress,
|
|
51
|
-
referral_code: options.referralCode,
|
|
52
|
-
extra_fees: options.extraFees,
|
|
53
|
-
};
|
|
54
|
-
const { data, error } = await ctx.apiClient.POST("/swap/lightning/arkade", {
|
|
55
|
-
body,
|
|
56
|
-
});
|
|
57
|
-
if (error)
|
|
58
|
-
throw new Error(`Failed to create swap: ${JSON.stringify(error)}`);
|
|
59
|
-
if (!data)
|
|
60
|
-
throw new Error("No swap data returned");
|
|
61
|
-
// Store the swap if storage is configured
|
|
62
|
-
await ctx.storeSwap(data.id, swapParams, {
|
|
63
|
-
...data,
|
|
64
|
-
direction: "lightning_to_arkade",
|
|
65
|
-
});
|
|
66
|
-
return { response: data, swapParams };
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
//# sourceMappingURL=lightning-to-arkade.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lightning-to-arkade.js","sourceRoot":"","sources":["../../src/create/lightning-to-arkade.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAOlD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,OAAqC,EACrC,GAAsB;IAEtB,OAAO,oBAAoB,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAChD,MAAM,QAAQ,GAAG,KAAK,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC5D,MAAM,SAAS,GAAG,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAE7C,MAAM,IAAI,GAAG;YACX,SAAS,EAAE,QAAQ;YACnB,QAAQ,EAAE,SAAS;YACnB,SAAS,EAAE,SAAS;YACpB,OAAO,EAAE,MAAM;YACf,YAAY,EAAE,OAAO,CAAC,WAAW;YACjC,qBAAqB,EAAE,OAAO,CAAC,aAAa;YAC5C,aAAa,EAAE,OAAO,CAAC,YAAY;YACnC,UAAU,EAAE,OAAO,CAAC,SAAS;SAC9B,CAAC;QAEF,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,wBAAwB,EAAE;YACzE,IAAI;SACL,CAAC,CAAC;QACH,IAAI,KAAK;YACP,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrE,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAEpD,0CAA0C;QAC1C,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE;YACvC,GAAG,IAAI;YACP,SAAS,EAAE,qBAAqB;SACjC,CAAC,CAAC;QAEH,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/create/lightning.js
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Lightning to EVM swap creation.
|
|
3
|
-
*/
|
|
4
|
-
import { bytesToHex } from "../signer/index.js";
|
|
5
|
-
import { retryOnHashCollision } from "./retry.js";
|
|
6
|
-
/**
|
|
7
|
-
* Creates a new Lightning to EVM swap using the chain-agnostic generic endpoint.
|
|
8
|
-
*
|
|
9
|
-
* The claiming address is derived internally from the swap's secret key,
|
|
10
|
-
* allowing the SDK to sign gasless claims without user interaction.
|
|
11
|
-
*
|
|
12
|
-
* If the server rejects the hash lock (duplicate or collision), the
|
|
13
|
-
* function automatically retries with a new key index.
|
|
14
|
-
*
|
|
15
|
-
* @param options - The swap options.
|
|
16
|
-
* @param ctx - The context containing API client and helper functions.
|
|
17
|
-
* @returns The swap response and parameters for storage.
|
|
18
|
-
* @throws Error if the swap creation fails after all retries.
|
|
19
|
-
*/
|
|
20
|
-
export async function createLightningToEvmSwapGeneric(options, ctx) {
|
|
21
|
-
return retryOnHashCollision(ctx, async () => {
|
|
22
|
-
const swapParams = await ctx.deriveSwapParams();
|
|
23
|
-
const hashLock = `0x${bytesToHex(swapParams.preimageHash)}`;
|
|
24
|
-
const refundPk = bytesToHex(swapParams.publicKey);
|
|
25
|
-
const userId = bytesToHex(swapParams.userId);
|
|
26
|
-
const claimingAddress = ctx.evmAddress;
|
|
27
|
-
const body = {
|
|
28
|
-
hash_lock: hashLock,
|
|
29
|
-
refund_pk: refundPk,
|
|
30
|
-
user_id: userId,
|
|
31
|
-
claiming_address: claimingAddress,
|
|
32
|
-
target_address: options.targetAddress,
|
|
33
|
-
evm_chain_id: options.evmChainId,
|
|
34
|
-
token_address: options.tokenAddress,
|
|
35
|
-
amount_in: options.amountIn,
|
|
36
|
-
amount_out: options.amountOut,
|
|
37
|
-
referral_code: options.referralCode,
|
|
38
|
-
extra_fees: options.extraFees,
|
|
39
|
-
gasless: options.gasless ?? true,
|
|
40
|
-
bridge_target_chain: options.bridgeParams?.targetChain,
|
|
41
|
-
bridge_target_token_address: options.bridgeParams?.targetTokenAddress,
|
|
42
|
-
bridge_recipient_setup: options.bridgeParams?.recipientSetup,
|
|
43
|
-
};
|
|
44
|
-
const { data, error } = await ctx.apiClient.POST("/swap/lightning/evm", {
|
|
45
|
-
body,
|
|
46
|
-
});
|
|
47
|
-
if (error) {
|
|
48
|
-
throw new Error(`Failed to create swap: ${JSON.stringify(error)}`);
|
|
49
|
-
}
|
|
50
|
-
if (!data) {
|
|
51
|
-
throw new Error("No swap data returned");
|
|
52
|
-
}
|
|
53
|
-
// Store the swap if storage is configured
|
|
54
|
-
await ctx.storeSwap(data.id, swapParams, {
|
|
55
|
-
...data,
|
|
56
|
-
direction: "lightning_to_evm",
|
|
57
|
-
});
|
|
58
|
-
return { response: data, swapParams };
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
//# sourceMappingURL=lightning.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lightning.js","sourceRoot":"","sources":["../../src/create/lightning.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAOlD;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,OAAyC,EACzC,GAAsB;IAEtB,OAAO,oBAAoB,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAChD,MAAM,QAAQ,GAAG,KAAK,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC5D,MAAM,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAE7C,MAAM,eAAe,GAAG,GAAG,CAAC,UAAU,CAAC;QAEvC,MAAM,IAAI,GAAG;YACX,SAAS,EAAE,QAAQ;YACnB,SAAS,EAAE,QAAQ;YACnB,OAAO,EAAE,MAAM;YACf,gBAAgB,EAAE,eAAe;YACjC,cAAc,EAAE,OAAO,CAAC,aAAa;YACrC,YAAY,EAAE,OAAO,CAAC,UAAU;YAChC,aAAa,EAAE,OAAO,CAAC,YAAY;YACnC,SAAS,EAAE,OAAO,CAAC,QAAQ;YAC3B,UAAU,EAAE,OAAO,CAAC,SAAS;YAC7B,aAAa,EAAE,OAAO,CAAC,YAAY;YACnC,UAAU,EAAE,OAAO,CAAC,SAAS;YAC7B,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;YAChC,mBAAmB,EAAE,OAAO,CAAC,YAAY,EAAE,WAAW;YACtD,2BAA2B,EAAE,OAAO,CAAC,YAAY,EAAE,kBAAkB;YACrE,sBAAsB,EAAE,OAAO,CAAC,YAAY,EAAE,cAAc;SAC7D,CAAC;QACF,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,qBAAqB,EAAE;YACtE,IAAI;SACL,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC;QAED,0CAA0C;QAC1C,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE;YACvC,GAAG,IAAI;YACP,SAAS,EAAE,kBAAkB;SAC9B,CAAC,CAAC;QAEH,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/create/retry.js
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Retry helper for swap creation when the server rejects a duplicate hash lock,
|
|
3
|
-
* and error types for non-retryable duplicate conditions.
|
|
4
|
-
*/
|
|
5
|
-
import { createSdkLogger } from "../logging.js";
|
|
6
|
-
const MAX_RETRIES = 10;
|
|
7
|
-
const SKIP_COUNT = 10;
|
|
8
|
-
/**
|
|
9
|
-
* Thrown when the server rejects a submarine swap because the Lightning
|
|
10
|
-
* invoice has already been used in another swap. This cannot be retried
|
|
11
|
-
* automatically — the caller must provide a different invoice.
|
|
12
|
-
*/
|
|
13
|
-
export class DuplicateInvoiceError extends Error {
|
|
14
|
-
constructor(message) {
|
|
15
|
-
super(message);
|
|
16
|
-
this.name = "DuplicateInvoiceError";
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Returns true if the error indicates a hash lock collision (409 Conflict
|
|
21
|
-
* from the server, or a rejection for a reused preimage hash).
|
|
22
|
-
*/
|
|
23
|
-
function isHashCollisionError(message) {
|
|
24
|
-
return message.includes("a swap with this preimage hash exists already");
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Returns true if the error indicates a duplicate Lightning invoice.
|
|
28
|
-
*/
|
|
29
|
-
export function isDuplicateInvoiceError(message) {
|
|
30
|
-
return message.includes("a swap with this invoice exists already");
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Wraps a swap creation attempt with automatic retry on hash lock collisions.
|
|
34
|
-
*
|
|
35
|
-
* When the server returns 409 (duplicate hash lock) or rejects the
|
|
36
|
-
* preimage, this skips the key index forward and retries with fresh params.
|
|
37
|
-
*
|
|
38
|
-
* @param ctx - The swap creation context (must include skipKeyIndices).
|
|
39
|
-
* @param attempt - A function that derives params and creates the swap.
|
|
40
|
-
* Called once per attempt; must call ctx.deriveSwapParams() internally.
|
|
41
|
-
*/
|
|
42
|
-
export async function retryOnHashCollision(ctx, attempt) {
|
|
43
|
-
let lastError;
|
|
44
|
-
const logger = createSdkLogger(ctx).child({
|
|
45
|
-
module: "create/retry",
|
|
46
|
-
operation: "create.retry_on_hash_collision",
|
|
47
|
-
});
|
|
48
|
-
for (let i = 0; i < MAX_RETRIES; i++) {
|
|
49
|
-
try {
|
|
50
|
-
return await attempt();
|
|
51
|
-
}
|
|
52
|
-
catch (e) {
|
|
53
|
-
logger.debug({
|
|
54
|
-
event: "create.retry.attempt_failed",
|
|
55
|
-
message: "Swap creation attempt failed",
|
|
56
|
-
data: { attempt: i + 1 },
|
|
57
|
-
error: e,
|
|
58
|
-
});
|
|
59
|
-
if (e instanceof Error && isHashCollisionError(e.message)) {
|
|
60
|
-
lastError = e;
|
|
61
|
-
if (ctx.skipKeyIndices) {
|
|
62
|
-
await ctx.skipKeyIndices(SKIP_COUNT);
|
|
63
|
-
}
|
|
64
|
-
continue;
|
|
65
|
-
}
|
|
66
|
-
throw e;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
throw lastError;
|
|
70
|
-
}
|
|
71
|
-
//# sourceMappingURL=retry.js.map
|
package/dist/create/retry.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/create/retry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGhD,MAAM,WAAW,GAAG,EAAE,CAAC;AACvB,MAAM,UAAU,GAAG,EAAE,CAAC;AAEtB;;;;GAIG;AACH,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED;;;GAGG;AACH,SAAS,oBAAoB,CAAC,OAAe;IAC3C,OAAO,OAAO,CAAC,QAAQ,CAAC,+CAA+C,CAAC,CAAC;AAC3E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAe;IACrD,OAAO,OAAO,CAAC,QAAQ,CAAC,yCAAyC,CAAC,CAAC;AACrE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,GAAsB,EACtB,OAAyB;IAEzB,IAAI,SAA4B,CAAC;IACjC,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;QACxC,MAAM,EAAE,cAAc;QACtB,SAAS,EAAE,gCAAgC;KAC5C,CAAC,CAAC;IAEH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,OAAO,MAAM,OAAO,EAAE,CAAC;QACzB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,KAAK,CAAC;gBACX,KAAK,EAAE,6BAA6B;gBACpC,OAAO,EAAE,8BAA8B;gBACvC,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE;gBACxB,KAAK,EAAE,CAAC;aACT,CAAC,CAAC;YAEH,IAAI,CAAC,YAAY,KAAK,IAAI,oBAAoB,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1D,SAAS,GAAG,CAAC,CAAC;gBACd,IAAI,GAAG,CAAC,cAAc,EAAE,CAAC;oBACvB,MAAM,GAAG,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;gBACvC,CAAC;gBACD,SAAS;YACX,CAAC;YACD,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC;IAED,MAAM,SAAS,CAAC;AAClB,CAAC"}
|
package/dist/create/types.js
DELETED
package/dist/create/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/create/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
package/dist/escrow/index.js
DELETED
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Escrow signing utilities for ark-escrow PSBT exchange protocol.
|
|
3
|
-
*
|
|
4
|
-
* Provides helpers for signing escrow release/refund PSBTs from the
|
|
5
|
-
* browser or Node.js. The arbiter (backend) builds and pre-signs the
|
|
6
|
-
* PSBTs; these functions let the counterparty (Bob or Alice) add their
|
|
7
|
-
* signature before the arbiter merges and submits to Arkade.
|
|
8
|
-
*
|
|
9
|
-
* @see https://github.com/ArkEscrow/ark-escrow for the full protocol.
|
|
10
|
-
*/
|
|
11
|
-
import { SingleKey, Transaction } from "@arkade-os/sdk";
|
|
12
|
-
import { hex } from "@scure/base";
|
|
13
|
-
// -- Base64 helpers (browser-safe, no Buffer dependency) --
|
|
14
|
-
function b64Decode(s) {
|
|
15
|
-
const bin = atob(s);
|
|
16
|
-
const arr = new Uint8Array(bin.length);
|
|
17
|
-
for (let i = 0; i < bin.length; i++)
|
|
18
|
-
arr[i] = bin.charCodeAt(i);
|
|
19
|
-
return arr;
|
|
20
|
-
}
|
|
21
|
-
function b64Encode(u) {
|
|
22
|
-
let bin = "";
|
|
23
|
-
for (let i = 0; i < u.length; i++)
|
|
24
|
-
bin += String.fromCharCode(u[i]);
|
|
25
|
-
return btoa(bin);
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Sign the escrow ark transaction PSBT.
|
|
29
|
-
*
|
|
30
|
-
* The ark_tx is the main offchain transaction spending the escrow VTXO.
|
|
31
|
-
* The signer adds a tapscript Schnorr signature at input index 0.
|
|
32
|
-
*
|
|
33
|
-
* @param psbtB64 - The ark_tx PSBT as a base64 string (from the arbiter).
|
|
34
|
-
* @param secretKey - The signer's secret key (32 bytes or 64-char hex string).
|
|
35
|
-
* @returns The signed PSBT (base64) and the transaction ID (hex).
|
|
36
|
-
*/
|
|
37
|
-
export function signEscrowArkTx(psbtB64, secretKey) {
|
|
38
|
-
const sk = typeof secretKey === "string" ? hex.decode(secretKey) : secretKey;
|
|
39
|
-
const tx = Transaction.fromPSBT(b64Decode(psbtB64));
|
|
40
|
-
tx.signIdx(sk, 0);
|
|
41
|
-
const txId = tx.id;
|
|
42
|
-
const txid = txId instanceof Uint8Array ? hex.encode(txId) : String(txId);
|
|
43
|
-
return {
|
|
44
|
-
signedPsbt: b64Encode(tx.toPSBT()),
|
|
45
|
-
txid,
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Sign escrow checkpoint PSBTs.
|
|
50
|
-
*
|
|
51
|
-
* Checkpoint transactions are signed after the Arkade server co-signs
|
|
52
|
-
* the ark_tx. Each checkpoint is signed at input index 0.
|
|
53
|
-
*
|
|
54
|
-
* @param psbtB64s - Array of checkpoint PSBTs as base64 strings.
|
|
55
|
-
* @param secretKey - The signer's secret key (32 bytes or 64-char hex string).
|
|
56
|
-
* @returns Array of signed checkpoint PSBTs as base64 strings.
|
|
57
|
-
*/
|
|
58
|
-
export function signEscrowCheckpoints(psbtB64s, secretKey) {
|
|
59
|
-
const sk = typeof secretKey === "string" ? hex.decode(secretKey) : secretKey;
|
|
60
|
-
return psbtB64s.map((cpB64) => {
|
|
61
|
-
const tx = Transaction.fromPSBT(b64Decode(cpB64));
|
|
62
|
-
tx.signIdx(sk, 0);
|
|
63
|
-
return b64Encode(tx.toPSBT());
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Sign delegate escrow PSBTs (intent proof + forfeits).
|
|
68
|
-
*
|
|
69
|
-
* When the escrow VTXO is recoverable, the arbiter prepares delegate PSBTs
|
|
70
|
-
* instead of the normal offchain PSBTs. The intent proof has one "toSpend"
|
|
71
|
-
* reference input at index 0 (not signed) plus real VTXO inputs at index 1+.
|
|
72
|
-
* Forfeit PSBTs have a single input each at index 0.
|
|
73
|
-
*
|
|
74
|
-
* The PSBTs already contain the correct sighash types — the signer just adds
|
|
75
|
-
* their tapscript Schnorr signature.
|
|
76
|
-
*
|
|
77
|
-
* @param intentProofB64 - The intent proof PSBT (base64, from the arbiter).
|
|
78
|
-
* @param forfeitPsbtsB64 - Forfeit PSBTs (base64, one per VTXO).
|
|
79
|
-
* @param secretKey - The signer's secret key (32 bytes or 64-char hex).
|
|
80
|
-
* @returns Signed intent proof + signed forfeit PSBTs.
|
|
81
|
-
*/
|
|
82
|
-
export async function signEscrowDelegate(intentProofB64, forfeitPsbtsB64, secretKey) {
|
|
83
|
-
const sk = typeof secretKey === "string" ? secretKey : hex.encode(secretKey);
|
|
84
|
-
const signer = SingleKey.fromHex(sk);
|
|
85
|
-
// Sign intent proof — SingleKey.sign handles per-input sighash types
|
|
86
|
-
// (input 0 is the toSpend ref, inputs 1+ are VTXOs with SIGHASH_ALL)
|
|
87
|
-
const intent = Transaction.fromPSBT(b64Decode(intentProofB64));
|
|
88
|
-
const signedIntent = await signer.sign(intent);
|
|
89
|
-
// Sign forfeits — each has a single VTXO input with SIGHASH_ALL|ANYONECANPAY
|
|
90
|
-
const signedForfeits = [];
|
|
91
|
-
for (const b64 of forfeitPsbtsB64) {
|
|
92
|
-
const forfeit = Transaction.fromPSBT(b64Decode(b64));
|
|
93
|
-
const signed = await signer.sign(forfeit);
|
|
94
|
-
signedForfeits.push(b64Encode(signed.toPSBT()));
|
|
95
|
-
}
|
|
96
|
-
return {
|
|
97
|
-
signedIntentProof: b64Encode(signedIntent.toPSBT()),
|
|
98
|
-
signedForfeitPsbts: signedForfeits,
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Extract the transaction ID from an ark_tx PSBT without signing.
|
|
103
|
-
*
|
|
104
|
-
* Useful when you need the txid for the finalize step but already
|
|
105
|
-
* have the signed PSBT from an earlier step.
|
|
106
|
-
*
|
|
107
|
-
* @param psbtB64 - The ark_tx PSBT as a base64 string.
|
|
108
|
-
* @returns The transaction ID as a hex string.
|
|
109
|
-
*/
|
|
110
|
-
export function getArkTxid(psbtB64) {
|
|
111
|
-
const tx = Transaction.fromPSBT(b64Decode(psbtB64));
|
|
112
|
-
const txId = tx.id;
|
|
113
|
-
return txId instanceof Uint8Array ? hex.encode(txId) : String(txId);
|
|
114
|
-
}
|
|
115
|
-
//# sourceMappingURL=index.js.map
|
package/dist/escrow/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/escrow/index.ts"],"names":[],"mappings":"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"}
|
package/dist/esplora.js
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Esplora API utilities for Bitcoin transaction lookups.
|
|
3
|
-
*/
|
|
4
|
-
/**
|
|
5
|
-
* Finds a UTXO at the given address.
|
|
6
|
-
*
|
|
7
|
-
* Queries the Esplora `/address/:address/utxo` endpoint to find
|
|
8
|
-
* unspent outputs. Returns the first UTXO found.
|
|
9
|
-
*
|
|
10
|
-
* @param esploraUrl - The Esplora API base URL
|
|
11
|
-
* @param address - The address to look up UTXOs for
|
|
12
|
-
* @returns The txid, vout, and amount of the first UTXO, or null if none found
|
|
13
|
-
*/
|
|
14
|
-
export async function findOutputByAddress(esploraUrl, address) {
|
|
15
|
-
const response = await fetch(`${esploraUrl}/address/${address}/utxo`);
|
|
16
|
-
if (!response.ok) {
|
|
17
|
-
throw new Error(`Failed to fetch UTXOs for address ${address}: ${response.status}`);
|
|
18
|
-
}
|
|
19
|
-
const utxos = (await response.json());
|
|
20
|
-
if (utxos.length === 0) {
|
|
21
|
-
return null;
|
|
22
|
-
}
|
|
23
|
-
const utxo = utxos[0];
|
|
24
|
-
return { txid: utxo.txid, vout: utxo.vout, amount: BigInt(utxo.value) };
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Broadcasts a raw transaction to the Bitcoin network via Esplora API.
|
|
28
|
-
*
|
|
29
|
-
* @param esploraUrl - The Esplora API base URL
|
|
30
|
-
* @param txHex - The raw transaction hex to broadcast
|
|
31
|
-
* @returns The transaction ID on success
|
|
32
|
-
*/
|
|
33
|
-
export async function broadcastTransaction(esploraUrl, txHex) {
|
|
34
|
-
const response = await fetch(`${esploraUrl}/tx`, {
|
|
35
|
-
method: "POST",
|
|
36
|
-
headers: {
|
|
37
|
-
"Content-Type": "text/plain",
|
|
38
|
-
},
|
|
39
|
-
body: txHex,
|
|
40
|
-
});
|
|
41
|
-
if (!response.ok) {
|
|
42
|
-
const errorText = await response.text();
|
|
43
|
-
throw new Error(`Broadcast failed: ${response.status} - ${errorText}`);
|
|
44
|
-
}
|
|
45
|
-
return response.text();
|
|
46
|
-
}
|
|
47
|
-
//# sourceMappingURL=esplora.js.map
|
package/dist/esplora.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"esplora.js","sourceRoot":"","sources":["../src/esplora.ts"],"names":[],"mappings":"AAAA;;GAEG;AAsBH;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,UAAkB,EAClB,OAAe;IAEf,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,UAAU,YAAY,OAAO,OAAO,CAAC,CAAC;IACtE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,qCAAqC,OAAO,KAAK,QAAQ,CAAC,MAAM,EAAE,CACnE,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAkB,CAAC;IAEvD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACtB,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;AAC1E,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,UAAkB,EAClB,KAAa;IAEb,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,UAAU,KAAK,EAAE;QAC/C,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,YAAY;SAC7B;QACD,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,MAAM,MAAM,SAAS,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;AACzB,CAAC"}
|