What's Changed
- swap: operator naming cleanup (ark/server → operator/plain) by @arkana-ai-bot in #798
- Remove arkServerUrl from swap methods by @tiero in #803
- test(e2e): stop the suite hanging and poisoning its own stack by @pietro909 in #815
- Remove boltz-swap by @pietro909 in #811
- feat(swap):
createSwapClient— one client over RFQ corridors and offer swaps by @louisinger in #793 - feat(swap): v2 type foundation by @pietro909 in #821
- feat(swap): v2 corridor modules by @pietro909 in #825
- feat(swap): v2 quote path by @pietro909 in #826
- fix(sdk): stop leaked Esplora address watchers from flooding explorers by @Kukks in #830
- fix(sdk): anchor a late address-watch baseline on chain height by @Kukks in #833
- chore: upgrade regtest to 6b0a60ca by @Kukks in #836
- feat(swap): a client-side ceiling on what a quote may charge by @Kukks in #832
- fix(sdk): capture the address-watch anchor at watch start by @pietro909 in #840
- feat(swap): accept(), the durable record, and the storage defaults by @pietro909 in #829
- feat(swap): solver-routed send rails, and the ChainSource/MTP gaps they needed by @Kukks in #837
- perf(sdk): probe /utxo before refetching full address history by @Kukks in #834
- feat(swap): the drive, and one outcome vocabulary for both families by @pietro909 in #839
- fix(swap): stop rebuilding terminal swaps on every restore by @pietro909 in #841
- feat(sdk): an asset dimension for PaymentRouter, and the asset + cross-asset rails by @Kukks in #838
- feat(swap): cancel, the history read, and the disposal gate by @pietro909 in #842
- feat(swap): the three verbs, and the rails that route them by @pietro909 in #843
- feat(swap): publish the v2 client from a ./client subpath by @pietro909 in #844
- feat(swap)!: the v2 client takes the root, v1 moves to /protocol by @pietro909 in #845
- fix(swap)!: the v1 names the v2 surface references belong on the curated root by @pietro909 in #849
- fix(swap): omit claim_packet when there is no covclaimd to seal to by @Kukks in #850
- fix(swap): swap SDK v2 release-review remedies by @pietro909 in #848
- test: e2e for the activity resolver and the payment rails, and the market bounds they depend on by @Kukks in #847
- test(swap): drain, asset->BTC, and wiped-store restore e2e by @pietro909 in #855
- fix(sdk): inject the fee source into onchainRail, not a wallet type parameter by @Kukks in #851
- feat(swap): a covclaimd Reveal API client, so a client can deliver its own packet by @Kukks in #846
- Add fallback to /v1/blocks endpoint in EsploraProvider by @tiero in #637
- Remove deprecated items by @pietro909 in #820
- feat(contracts): watch-only scripts on ContractWatcher by @Kukks in #857
- feat(swap): keep the preimage that settled a lightning send by @pietro909 in #862
- perf(indexer): serve an identical in-flight vtxo read from one request by @Kukks in #876
- test(sdk): mock the fetch boundary with real Responses by @Kukks in #881
- fix(hooks): fail the pre-commit gate when its filter selects nothing by @Kukks in #880
- docs(swap): retirement narrows the subscription and the poll, not every sync by @Kukks in #879
- feat(payment): state a quote's validity on RouteQuote by @Kukks in #874
- fix(swap): retire a corridor lockup when it is SPENT, not merely terminal by @Kukks in #873
- fix(sdk): gate transaction history the way balance is gated by @tiero in #859
- fix(emulator): route the info read through the SDK's shared fetch boundary by @Kukks in #887
- fix(providers): bound reads with a deadline so the retries above them can run by @Kukks in #884
- perf(contracts): let an embedder set a staleness budget for the pre-send sync by @Kukks in #882
- docs(providers): name the wrapper the Expo fallback actually returns by @Kukks in #891
- feat(swap): surface structured RFQ refusals by @Kukks in #898
- fix(swap): support CAIP-19 registry markets by @Kukks in #899
- fix(swap): preserve readable cached markets by @Kukks in #896
- fix(swap): let restoreAssetSwaps re-ask a record it left pending by @Kukks in #893
- fix(swap): restore coverage for the covenants the scan rebuilds by @Kukks in #892
- fix(swap): a pass behind watchOfferSwaps, and a poll payload that can carry a spend by @Kukks in #895
- perf(contracts): register a set of contracts in one indexer round trip by @Kukks in #897
- perf(swap): read offer history once per start-up pass, not once per deposit by @Kukks in #900
- feat(swap): fillOffer — the taker side an offer has no way to reach by @Kukks in #785
- feat(swap): orchestrate repository restore by @Kukks in #901
- feat(swap): restore fillOffer on v0.5 — the taker side has no v2 successor by @Kukks in #906
- feat(swap): own the claim-packet codec, pinned to covclaimd's own bytes by @Kukks in #909
- fix(swap): support solver discovery 0.2.4 by @Kukks in #907
- fix(swap): send the claim packet in the shape a solver can stamp by @Kukks in #908
- fix: schedule delegation before VTXO expiry by @Kukks in #912
- Enforce negotiated Lightning send refund delay by @Kukks in #913
- feat(swap): follow the network's default solver registry by @Kukks in #916
- feat(swap): wire-compatible arkade RFQ requests + requestArkadeSwap by @Kukks in #917
- docs: remove NArk reference implementation section from AGENTS.md by @tiero in #918
- fix(swap): gate the onchain-send claim on the funded amount by @Kukks in #920
- fix(swap): keep a late settlement from being recorded as a refund by @jfrader in #924
- fix(sdk): verify the operator cosignature on wallet submits by @Kukks in #923
- fix(sdk): validate a settlement against the intent proof when no recipients are given by @Kukks in #922
- fix(sdk): fail settle when the commitment tx omits a boarding input by @Kukks in #921
- fix(swap): rebuild offer records from chain on client restore by @tiero in #930
- fix(swap): rebuild offer records from chain on client restore by @tiero in #933
- fix(sdk): stop sending Arkade headers to the indexer origin on Expo by @IgnacioPorte in #927
- test(sdk): wait on completeUnroll's own precondition in the unroll e2e by @Kukks in #936
- test(sdk): wait on send's own selection view between the two createCash calls by @Kukks in #937
- test(sdk): wait for the indexer to commit the spend in the cross-contract e2e by @Kukks in #940
- test(sdk): wait for the indexer to commit the spend in the delegate lifecycle e2e by @Kukks in #942
- test(sdk): wait for each faucet send to index before the next one by @Kukks in #938
- test(sdk): stop the settlement e2e asserting on a re-read of getVtxos() by @Kukks in #939
- fix(swap): consume the solver's carrier_sats, and stop blocking exact-out (on #919) by @Kukks in #932
- fix(swap): consume the solver's carrier_sats, and stop blocking exact-out by @Kukks in #931
- test(sdk): name both faucet recipients in the delegate lifecycle phase 3 wait by @Kukks in #945
- test(sdk): dispose settlement e2e wallets in a finally by @Kukks in #944
- Merge master into feat/v0.5 by @Kukks in #947
- feat(sdk): let a payment request name the VTXOs it spends by @Kukks in #948
- docs(sdk): point isLnurl at the rails that consume it by @Kukks in #949
- feat(sdk): let watchScript and unwatchScript take a set by @Kukks in #955
- fix(sdk): pay for the change output a partial offboard creates by @Kukks in #950
- fix(sdk): pay the exit's destination exactly, and keep its change in bounds by @Kukks in #956
- fix(sdk): route HD unilateral exit sweeps through the descriptor-aware signer router by @Kukks in #959
- fix(arkade): take the contract address network from the server by @gringokiwi in #962
- Add the PUSHEXPIRY, CHECKTIME, TUNNEL, and intent opcodes by @tiero in #967
- Fix/reduce indexer requests by @bordalix in #961
- fix(sdk): survive a look-ahead failure at startup by @Kukks in #965
- fix(sdk): keep a recorded spend across a stale indexer response by @Kukks in #966
- perf(sdk): fetch boarding addresses concurrently by @Kukks in #964
- test(swap): parse the root barrel once in the ./advanced superset check by @Kukks in #973
- chore: bump arkade-regtest for solver fee_bps support by @gringokiwi in #976
- Adjust available balance for dust carrier by @gringokiwi in #975
- test(e2e): filter out regtest.mjs env-override log line from execCommand output by @d4rp4t in #980
- fix(bip21): write the amount as a plain decimal, not in exponent notation by @d4rp4t in #979
- fix(swap): do not report a claim that lost the race to covclaimd as a failure by @Kukks in #985
- perf(sdk): keep contract tapscripts across syncs, not just within one by @Kukks in #984
- fix(swap): seconds-typed regtest timelocks so solverd inventory stays spendable by @gringokiwi in #988
- fix(swap): misc improvements by @gringokiwi in #969
- Read arkadec artifacts into a Program by @tiero in #958
- perf(sdk): group contract VTXOs in one pass by @Kukks in #990
- fix(wallet): avoid change below operator VTXO minimum by @Kukks in #987
- refactor(swap): e2e test hygiene — OPERATOR_URL, arkProvider init, vi.waitFor by @gringokiwi in #998
- chore(swap): size solverd's regtest float for repeated e2e runs by @gringokiwi in #999
- perf(wallet): bound funding inventory and scope coin selectors by @Kukks in #991
- perf(swap): bound RFQ polling and page restore and history without pruning by @Kukks in #992
- chore: merge master into feat/v0.5 (sdk 0.4.77, swap 0.0.23) by @Kukks in #1010
- test(swap): asset-swap e2e against solverd by @gringokiwi in #1000
- refactor: slop cleanup — dead code, duplicated helpers and discursive comments (v0.5) by @Kukks in #1003
- docs(changelog): backfill @arkade-os/sdk 0.4.24 through 0.4.77 by @Kukks in #1013
- fix(sdk): decode time-based CSV literals in arkadec artifacts by @Kukks in #1012
- perf(wallet): read only unspent rows for getVtxos and getBalance by @Kukks in #1014
- Rename ts-sdk package to sdk by @tiero in #827
- perf(worker): read only unspent rows for the balance and coin reads by @Kukks in #1017
- fix(wallet): forfeit expired VTXOs the operator has not swept by @Kukks in #1016
- feat(repositories): unify bounded paging across SDK and swap stores by @Kukks in #1002
- feat(swap): negotiate asset swaps over the card's RFQ rendezvous by @tiero in #919
- test: exclude the regtest submodule from vitest in every package by @pietro909 in #1019
- chore: v0.5 review cleanup (CI profile, repository versions, Quote.artifact docs) by @pietro909 in #1021
- ci: run swap-rfq against the released intent solver by @pietro909 in #1030
- fix(sdk): share restore hook registry across sdk copies by @pietro909 in #1028
- fix(swap): name BTC slip44:1 off mainnet, as discovery does by @pietro909 in #1020
- fix(swap): keep driving swaps a 0.0.x client left in flight by @pietro909 in #1029
- fix(swap): adopt swept v1 offers, tolerate an unreadable v1 store by @pietro909 in #1031
- fix(swap): resolve a recovered offer deposit instead of leaving it recoverable by @pietro909 in #1032
- docs(swap): update the restore example to the v0.5 options by @gringokiwi in #1022
- feat(swap): adopt settled v1 offers and register restored offer covenants by @pietro909 in #1035
- feat(swap): adopt v1 corridor swaps as restored v2 records by @pietro909 in #1039
- Update scure libs to 2.4.x by @louisinger in #1034
- fix(swap): refuse to create an offer that wants nothing by @gringokiwi in #1015
- fix(swap): a unified URI's own amount= does not contradict its invoice by @Kukks in #1040
- fix: scure 2.4 follow-ups and drop boltz-swap from tooling by @pietro909 in #1041
- Feat/v0.5 by @Kukks in #886
- Consolidate duplicated unit test coverage by @pietro909 with @Copilot in #1036
- fix(swap): cap how long a send's refund may stay locked by @pietro909 in #1050
- remove dev dependency better-sqlite3 by @bordalix in #1047
- perf(contracts): start the contract manager from watched contracts only by @Kukks in #1049
- fix(contracts): stop the no-EventSource warning promising polling by @Kukks in #1046
- fix(wallet): default each VTXO filter flag on its own by @Kukks in #1042
- fix(wallet): align worker VTXO filtering by @pietro909 in #1053
- feat(wallet): let subclasses reuse Wallet.create and ReadonlyWallet.create by @Kukks in #1056
- test(swap): fund the solverd tests through one offer helper per direction by @gringokiwi in #1024
- test(swap): check a cancel that loses the race to a fill fails cleanly by @gringokiwi in #1025
- test(swap): detect swaps after a wallet reload on the same storage by @gringokiwi in #1026
- test(swap): detect swaps after a wallet restore into new storage by @gringokiwi in #1011
- fix(indexeddb): move the intent and virtual-tx repositories to arkade-batches by @pietro909 in #1052
- fix(arkade): support OP_PUT in script assembly by @Kukks in #1060
- feat(wallet): pay bounded unavoidable change as offchain fee by @Kukks in #989
- fix(contracts): validate the sync budgets and make the delta-sync overlap configurable by @Kukks in #1044
- fix(arkade): bind an artifact CSV param as a BIP68 sequence by @Kukks in #1048
- fix(contracts): make setContractWatchState a no-op when unchanged by @pietro909 in #1064
- perf(sdk): batch boarding UTXO writes and bulk-insert SQLite wallet rows by @Kukks in #971
- fix(swap): retry a receive quote_conflict once on a fresh index by @pietro909 in #1033
- fix(sw): keep the worker error as cause in contract manager proxy by @pietro909 in #1066
- fix(wallet): release stale intents from arkd on reconcile by @pietro909 in #1065
- fix(1064 followup) watch state noop by @pietro909 in #1067
- feat(swap): the EVM corridors' wire layer — pairs, amounts, requests, quotes by @Kukks in #835
- docs(agents): note the changelog mechanism by @pietro909 in #1070
- test: typecheck every sdk and swap test by @pietro909 in #1072
- test(ArkadeCash): e2e for server-swept ArkCash recovery by @pietro909 in #624
- feat(vtxo-manager): let renewVtxos settle into several outputs by @Kukks in #861
- test: fix test typecheck on master by @pietro909 in #1074
- refactor: share millisecond configuration validation by @pietro909 in #1062
- feat(swap): drive the onchain-receive corridor, L1 refund included by @Kukks in #894
- fix(onchain): support mempool fee estimates by @IgnacioPorte in #983
- feat(swap): read solver cards from their transports, and keep markets fresh by @Kukks in #1073
- fix(sdk): preserve deprecated-signer boarding cache during refresh by @IgnacioPorte in #1077
- fix(swap): ask the registry once a minute while discoverMarkets carries a solver by @Kukks in #1080
- fix(swap): let resolve() offer pinned solvers when the registry is unreachable and nothing is cached by @Kukks in #1081
- fix(wallet): make dispose() wait for contract events still being handled by @gringokiwi in #1082
- feat(sdk): let ArkadeTransactionBuilder carry a caller's extension packet by @Kukks in #1084
- feat(sdk): opt-in faster startup with repository-first reads by @Kukks in #943
- feat: support Taxi fills and carrier payments on SDK 0.5 by @Kukks in #1057
- fix(swap): wait for the trader's L1 claim to confirm before settling an onchain send by @Kukks in #1086
- fix(contracts): keep the failsafe poll from racing a contract's sync by @pietro909 in #1085
- fix(swap): cap the inputs of the trader's claim and refund spends by @Kukks in #1088
- Fix Lightning claims classified as refunds by @Kukks in #1089
- test(e2e): early-settlement fee premium instead of settlement block by @Kukks in #1091
- perf(swap): share one Nostr pool across transports and card fetches by @Kukks in #1092
- fix(contracts): recover failed subscription updates by @IgnacioPorte in #982
- feat: opt-in concurrent spending and VTXO reservations by @Kukks in #1051
- fix(swap): never reopen a spent offer on a lagging restore read by @pietro909 in #1093
- Export swap timing floors from the protocol subpath by @pietro909 with @Copilot in #1096
- fix(contracts): annotate sync results against the contracts fetched for by @Kukks in #1098
- chore: bump Node to 24.22.1 for Oct 2026 security release by @s373nZ in #1104
- [WIP] Export swap timing floors from the protocol subpath by @pietro909 with @Copilot in #1099
- feat(contracts): storage-only read of a contract's VTXOs by @Dunsin-cyber in #953
- fix(sdk): refuse another operator's ArkadeCash, accept rotated signers by @michalsmiarowski in #1102
- feat(sdk): export toOffchainInputFeeParams by @Kukks in #1109
- feat(sdk): submit emulator-cosigned offchain txs through one helper by @Kukks in #1107
- feat(sdk): server-side filtered indexer subscriptions over SSE by @d4rp4t in #1108
- chore: add REVIEW.md and CodeRabbit config by @pietro909 in #1112
- fix(examples): make the SDK examples run again by @pietro909 in #1113
- feat: read L1 through any OnchainProvider in a worker wallet and the swap onchain corridor by @Kukks in #1110
- feat(arkade): Arkade.connect one-liner by @pietro909 in #1078
- feat: support compiler artifact v1 by @msinkec in #1079
- feat: pass heartbeats through getFilteredSubscription by @pietro909 in #1118
- feat(swap): claim-packet minAmount API, binding gated off by @pietro909 in #1114
- simplify checkpoint policy logic by @louisinger in #1121
- fix(swap): migrate Program v0 offer rows to v1 in place by @pietro909 in #1124
- feat(sdk)!: rename WalletBalance.intentLocked to pendingSettlement by @pietro909 in #1133
- perf(wallet): ask the delegate for its key alongside server info by @Kukks in #1131
- fix(swap): build an onchain send's lockup with the quoted solo refund delay by @d4rp4t in #1126
- docs: README sanity pass ahead of 0.5 by @pietro909 in #1125
New Contributors
- @jfrader made their first contribution in #924
- @IgnacioPorte made their first contribution in #927
- @d4rp4t made their first contribution in #980
- @s373nZ made their first contribution in #1104
- @michalsmiarowski made their first contribution in #1102
Full Changelog: https://github.com/arkade-os/ts-sdk/compare/@arkade-os/swap/0.0.11...@arkade-os/swap/0.1.0