@lendasat/lendaswap-sdk-pure 0.2.42 → 0.2.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (252) hide show
  1. package/dist/_esm-7KJOBTZC.js +3660 -0
  2. package/dist/_esm-7KJOBTZC.js.map +1 -0
  3. package/dist/_esm-UGRDSVEV.cjs +3662 -0
  4. package/dist/_esm-UGRDSVEV.cjs.map +1 -0
  5. package/dist/api/client.d.ts +0 -4
  6. package/dist/api/client.d.ts.map +1 -1
  7. package/dist/base-2KYNAFR3.cjs +109 -0
  8. package/dist/base-2KYNAFR3.cjs.map +1 -0
  9. package/dist/base-B6OGU65B.js +7 -0
  10. package/dist/base-B6OGU65B.js.map +1 -0
  11. package/dist/ccip-MPMAZOUF.js +5 -0
  12. package/dist/ccip-MPMAZOUF.js.map +1 -0
  13. package/dist/ccip-PD37NJHA.cjs +26 -0
  14. package/dist/ccip-PD37NJHA.cjs.map +1 -0
  15. package/dist/cctp-bridge/index.cjs +67 -0
  16. package/dist/cctp-bridge/index.cjs.map +1 -0
  17. package/dist/cctp-bridge/index.js +51 -15
  18. package/dist/cctp-bridge/index.js.map +1 -1
  19. package/dist/cctp-inbound/client.d.ts +21 -19
  20. package/dist/cctp-inbound/client.d.ts.map +1 -1
  21. package/dist/cctp-inbound/smartAccount.d.ts +21 -19
  22. package/dist/cctp-inbound/smartAccount.d.ts.map +1 -1
  23. package/dist/chunk-3JWT4OW2.js +369 -0
  24. package/dist/chunk-3JWT4OW2.js.map +1 -0
  25. package/dist/chunk-A4GKKURK.cjs +430 -0
  26. package/dist/chunk-A4GKKURK.cjs.map +1 -0
  27. package/dist/chunk-BZU3R5DJ.cjs +554 -0
  28. package/dist/chunk-BZU3R5DJ.cjs.map +1 -0
  29. package/dist/chunk-C4YXYD24.js +418 -0
  30. package/dist/chunk-C4YXYD24.js.map +1 -0
  31. package/dist/chunk-CZNQYFDP.js +6141 -0
  32. package/dist/chunk-CZNQYFDP.js.map +1 -0
  33. package/dist/chunk-DKTFDGIU.js +2207 -0
  34. package/dist/chunk-DKTFDGIU.js.map +1 -0
  35. package/dist/chunk-DNSJDKTP.cjs +96 -0
  36. package/dist/chunk-DNSJDKTP.cjs.map +1 -0
  37. package/dist/chunk-EPKFLKTM.js +47093 -0
  38. package/dist/chunk-EPKFLKTM.js.map +1 -0
  39. package/dist/chunk-JBVKWKD4.cjs +50 -0
  40. package/dist/chunk-JBVKWKD4.cjs.map +1 -0
  41. package/dist/chunk-NPFJAXKV.js +551 -0
  42. package/dist/chunk-NPFJAXKV.js.map +1 -0
  43. package/dist/chunk-PKDJZJMV.cjs +2214 -0
  44. package/dist/chunk-PKDJZJMV.cjs.map +1 -0
  45. package/dist/chunk-PLDDJCW6.js +43 -0
  46. package/dist/chunk-PLDDJCW6.js.map +1 -0
  47. package/dist/chunk-RIOT5VOJ.cjs +47240 -0
  48. package/dist/chunk-RIOT5VOJ.cjs.map +1 -0
  49. package/dist/chunk-WVZSHRV7.cjs +431 -0
  50. package/dist/chunk-WVZSHRV7.cjs.map +1 -0
  51. package/dist/chunk-YEZOPVAH.js +86 -0
  52. package/dist/chunk-YEZOPVAH.js.map +1 -0
  53. package/dist/chunk-YLWPBHMV.cjs +6311 -0
  54. package/dist/chunk-YLWPBHMV.cjs.map +1 -0
  55. package/dist/client.d.ts +68 -1
  56. package/dist/client.d.ts.map +1 -1
  57. package/dist/compose-quote.d.ts +77 -0
  58. package/dist/compose-quote.d.ts.map +1 -0
  59. package/dist/delegate.cjs +23 -0
  60. package/dist/delegate.cjs.map +1 -0
  61. package/dist/delegate.js +5 -269
  62. package/dist/delegate.js.map +1 -1
  63. package/dist/dist-NE2R4YCX.js +5 -0
  64. package/dist/dist-NE2R4YCX.js.map +1 -0
  65. package/dist/dist-VEHYC67F.cjs +550 -0
  66. package/dist/dist-VEHYC67F.cjs.map +1 -0
  67. package/dist/esplora.d.ts +14 -0
  68. package/dist/esplora.d.ts.map +1 -1
  69. package/dist/generated/api.d.ts +235 -38
  70. package/dist/generated/api.d.ts.map +1 -1
  71. package/dist/index.cjs +35461 -0
  72. package/dist/index.cjs.map +1 -0
  73. package/dist/index.d.ts +2 -1
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js +35309 -32
  76. package/dist/index.js.map +1 -1
  77. package/dist/mine.wasm-JJEJEODX.js +9 -0
  78. package/dist/mine.wasm-JJEJEODX.js.map +1 -0
  79. package/dist/mine.wasm-Z3ORSBKN.cjs +12 -0
  80. package/dist/mine.wasm-Z3ORSBKN.cjs.map +1 -0
  81. package/dist/node.cjs +166 -0
  82. package/dist/node.cjs.map +1 -0
  83. package/dist/node.js +157 -18
  84. package/dist/node.js.map +1 -1
  85. package/dist/secp256k1-PJCSE4N6.cjs +30 -0
  86. package/dist/secp256k1-PJCSE4N6.cjs.map +1 -0
  87. package/dist/secp256k1-VZNNVEPN.js +5 -0
  88. package/dist/secp256k1-VZNNVEPN.js.map +1 -0
  89. package/dist/tokens.d.ts +2 -1
  90. package/dist/tokens.d.ts.map +1 -1
  91. package/dist/types/chain-config.d.ts +50 -0
  92. package/dist/types/chain-config.d.ts.map +1 -0
  93. package/dist/types/chain.d.ts +11 -0
  94. package/dist/types/chain.d.ts.map +1 -0
  95. package/dist/types/dex-quote.d.ts +85 -0
  96. package/dist/types/dex-quote.d.ts.map +1 -0
  97. package/dist/types/index.d.ts +15 -0
  98. package/dist/types/index.d.ts.map +1 -0
  99. package/dist/types/network-fees.d.ts +43 -0
  100. package/dist/types/network-fees.d.ts.map +1 -0
  101. package/dist/types/quote.d.ts +87 -0
  102. package/dist/types/quote.d.ts.map +1 -0
  103. package/dist/types/swap-pairs.d.ts +37 -0
  104. package/dist/types/swap-pairs.d.ts.map +1 -0
  105. package/dist/version.d.ts +2 -2
  106. package/dist/wallet-SCGRX3EN.js +4 -0
  107. package/dist/wallet-SCGRX3EN.js.map +1 -0
  108. package/dist/wallet-SZJDXAY7.cjs +45 -0
  109. package/dist/wallet-SZJDXAY7.cjs.map +1 -0
  110. package/package.json +23 -10
  111. package/dist/api/client.js +0 -13
  112. package/dist/api/client.js.map +0 -1
  113. package/dist/arkade-network.js +0 -40
  114. package/dist/arkade-network.js.map +0 -1
  115. package/dist/arkade.js +0 -61
  116. package/dist/arkade.js.map +0 -1
  117. package/dist/cctp/attestation.js +0 -149
  118. package/dist/cctp/attestation.js.map +0 -1
  119. package/dist/cctp/constants.js +0 -92
  120. package/dist/cctp/constants.js.map +0 -1
  121. package/dist/cctp/fee.js +0 -70
  122. package/dist/cctp/fee.js.map +0 -1
  123. package/dist/cctp/index.js +0 -13
  124. package/dist/cctp/index.js.map +0 -1
  125. package/dist/cctp/types.js +0 -5
  126. package/dist/cctp/types.js.map +0 -1
  127. package/dist/cctp/utils.js +0 -91
  128. package/dist/cctp/utils.js.map +0 -1
  129. package/dist/cctp-bridge/bridge.js +0 -74
  130. package/dist/cctp-bridge/bridge.js.map +0 -1
  131. package/dist/cctp-inbound/approveAndBurn.js +0 -95
  132. package/dist/cctp-inbound/approveAndBurn.js.map +0 -1
  133. package/dist/cctp-inbound/burn.js +0 -66
  134. package/dist/cctp-inbound/burn.js.map +0 -1
  135. package/dist/cctp-inbound/chainMap.js +0 -128
  136. package/dist/cctp-inbound/chainMap.js.map +0 -1
  137. package/dist/cctp-inbound/client.js +0 -125
  138. package/dist/cctp-inbound/client.js.map +0 -1
  139. package/dist/cctp-inbound/eip2612.js +0 -95
  140. package/dist/cctp-inbound/eip2612.js.map +0 -1
  141. package/dist/cctp-inbound/evmSignerAdapter.js +0 -82
  142. package/dist/cctp-inbound/evmSignerAdapter.js.map +0 -1
  143. package/dist/cctp-inbound/fundSwap.js +0 -95
  144. package/dist/cctp-inbound/fundSwap.js.map +0 -1
  145. package/dist/cctp-inbound/index.js +0 -34
  146. package/dist/cctp-inbound/index.js.map +0 -1
  147. package/dist/cctp-inbound/permit2.js +0 -32
  148. package/dist/cctp-inbound/permit2.js.map +0 -1
  149. package/dist/cctp-inbound/preflight.js +0 -84
  150. package/dist/cctp-inbound/preflight.js.map +0 -1
  151. package/dist/cctp-inbound/recover.js +0 -177
  152. package/dist/cctp-inbound/recover.js.map +0 -1
  153. package/dist/cctp-inbound/smartAccount.js +0 -117
  154. package/dist/cctp-inbound/smartAccount.js.map +0 -1
  155. package/dist/cctp-inbound/submit.js +0 -136
  156. package/dist/cctp-inbound/submit.js.map +0 -1
  157. package/dist/cctp-inbound/types.js +0 -5
  158. package/dist/cctp-inbound/types.js.map +0 -1
  159. package/dist/cctp-inbound/userOp.js +0 -151
  160. package/dist/cctp-inbound/userOp.js.map +0 -1
  161. package/dist/client.js +0 -4126
  162. package/dist/client.js.map +0 -1
  163. package/dist/create/arkade-to-lightning.js +0 -76
  164. package/dist/create/arkade-to-lightning.js.map +0 -1
  165. package/dist/create/arkade.js +0 -86
  166. package/dist/create/arkade.js.map +0 -1
  167. package/dist/create/bitcoin-to-arkade.js +0 -76
  168. package/dist/create/bitcoin-to-arkade.js.map +0 -1
  169. package/dist/create/bitcoin.js +0 -77
  170. package/dist/create/bitcoin.js.map +0 -1
  171. package/dist/create/evm-to-arkade.js +0 -80
  172. package/dist/create/evm-to-arkade.js.map +0 -1
  173. package/dist/create/evm-to-bitcoin.js +0 -82
  174. package/dist/create/evm-to-bitcoin.js.map +0 -1
  175. package/dist/create/evm-to-lightning.js +0 -89
  176. package/dist/create/evm-to-lightning.js.map +0 -1
  177. package/dist/create/index.js +0 -21
  178. package/dist/create/index.js.map +0 -1
  179. package/dist/create/lightning-to-arkade.js +0 -69
  180. package/dist/create/lightning-to-arkade.js.map +0 -1
  181. package/dist/create/lightning.js +0 -61
  182. package/dist/create/lightning.js.map +0 -1
  183. package/dist/create/retry.js +0 -71
  184. package/dist/create/retry.js.map +0 -1
  185. package/dist/create/types.js +0 -5
  186. package/dist/create/types.js.map +0 -1
  187. package/dist/escrow/index.js +0 -115
  188. package/dist/escrow/index.js.map +0 -1
  189. package/dist/esplora.js +0 -47
  190. package/dist/esplora.js.map +0 -1
  191. package/dist/evm/coordinator.js +0 -714
  192. package/dist/evm/coordinator.js.map +0 -1
  193. package/dist/evm/htlc.js +0 -278
  194. package/dist/evm/htlc.js.map +0 -1
  195. package/dist/evm/index.js +0 -10
  196. package/dist/evm/index.js.map +0 -1
  197. package/dist/evm/signing.js +0 -70
  198. package/dist/evm/signing.js.map +0 -1
  199. package/dist/evm/wallet.js +0 -133
  200. package/dist/evm/wallet.js.map +0 -1
  201. package/dist/generated/api.js +0 -6
  202. package/dist/generated/api.js.map +0 -1
  203. package/dist/logging.js +0 -130
  204. package/dist/logging.js.map +0 -1
  205. package/dist/price-calculations.js +0 -135
  206. package/dist/price-calculations.js.map +0 -1
  207. package/dist/redeem/arkade.js +0 -416
  208. package/dist/redeem/arkade.js.map +0 -1
  209. package/dist/redeem/ethereum.js +0 -206
  210. package/dist/redeem/ethereum.js.map +0 -1
  211. package/dist/redeem/gasless.js +0 -73
  212. package/dist/redeem/gasless.js.map +0 -1
  213. package/dist/redeem/index.js +0 -189
  214. package/dist/redeem/index.js.map +0 -1
  215. package/dist/redeem/types.js +0 -36
  216. package/dist/redeem/types.js.map +0 -1
  217. package/dist/refund/arkade.js +0 -200
  218. package/dist/refund/arkade.js.map +0 -1
  219. package/dist/refund/collab-arkade-evm.js +0 -307
  220. package/dist/refund/collab-arkade-evm.js.map +0 -1
  221. package/dist/refund/collab-arkade-lightning.js +0 -245
  222. package/dist/refund/collab-arkade-lightning.js.map +0 -1
  223. package/dist/refund/index.js +0 -12
  224. package/dist/refund/index.js.map +0 -1
  225. package/dist/refund/onchain.js +0 -366
  226. package/dist/refund/onchain.js.map +0 -1
  227. package/dist/signer/index.js +0 -249
  228. package/dist/signer/index.js.map +0 -1
  229. package/dist/storage/idb.js +0 -236
  230. package/dist/storage/idb.js.map +0 -1
  231. package/dist/storage/index.js +0 -98
  232. package/dist/storage/index.js.map +0 -1
  233. package/dist/storage/sqlite.js +0 -206
  234. package/dist/storage/sqlite.js.map +0 -1
  235. package/dist/storage/types.js +0 -9
  236. package/dist/storage/types.js.map +0 -1
  237. package/dist/tokens.js +0 -322
  238. package/dist/tokens.js.map +0 -1
  239. package/dist/usd-price.js +0 -96
  240. package/dist/usd-price.js.map +0 -1
  241. package/dist/usdt0-bridge/constants.js +0 -71
  242. package/dist/usdt0-bridge/constants.js.map +0 -1
  243. package/dist/usdt0-bridge/index.js +0 -11
  244. package/dist/usdt0-bridge/index.js.map +0 -1
  245. package/dist/usdt0-bridge/tracking.js +0 -123
  246. package/dist/usdt0-bridge/tracking.js.map +0 -1
  247. package/dist/usdt0-bridge/utils.js +0 -51
  248. package/dist/usdt0-bridge/utils.js.map +0 -1
  249. package/dist/version.js +0 -6
  250. package/dist/version.js.map +0 -1
  251. package/dist/ws.js +0 -145
  252. package/dist/ws.js.map +0 -1
@@ -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"}
@@ -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
@@ -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"}
@@ -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"}
@@ -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
@@ -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"}
@@ -1,5 +0,0 @@
1
- /**
2
- * Types for swap creation operations.
3
- */
4
- export {};
5
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/create/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -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
@@ -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
@@ -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"}