Releases: icon-project/sodax-sdks
Release list
@sdks@2.2.0-rc.2
What's Changed
- fix: enable money market support for Robinhood Chain by @gcranju in #403
- refactor(release): replace changesets with a single pnpm release command by @R0bi7 in #407
- test: typecheck .test files in every package by @0x0603 in #395
- ci: make live-mainnet e2e an advisory PR check by @R0bi7 in #409
- ci: merge after #391 - enforce docs updates alongside package source changes by @gosiast in #383
- docs: move the Mintlify docs site into this repo by @gosiast in #391
- docs: add an API keys page for the partner portal hand-off by @gosiast in #410
- feat(sdk,dapp-kit,demo): chain agnostic get asset balance by @0x0603 in #311
- feat(sdk): add oracle markets, candles reads, dapp-kit hooks, and demo showcase by @R0bi7 in #412
- ci: re-baseline the SDK tarball size gate and unblock main by @R0bi7 in #414
Full Changelog: https://github.com/icon-project/sodax-sdks/compare/@sdks@2.2.0-rc.1...@sdks@2.2.0-rc.2
@sdks@2.2.0-rc.1
What's Changed
- fix(types,wallet-sdk-react): replace broken default NEAR RPC URL by @0x0603 in #397
- chore(deps): bump valibot from 1.4.0 to 1.4.2 by @dependabot[bot] in #312
- chore(deps): bump react-router from 7.15.1 to 7.18.2 by @dependabot[bot] in #313
- feat(sdk): add getSwapSpeedTier method to estimate swap settlement speed by @0xmilktea in #280
- feat(sdk,swaps-api,dapp-kit,types): x-api-key for backend APIs by @R0bi7 in #394
- feat(ci): detect drift between AI files and the code they describe by @0x0603 in #365
Full Changelog: https://github.com/icon-project/sodax-sdks/compare/@sdks@2.1.0...@sdks@2.2.0-rc.1
@sdks@2.1.0
Changes 2.1.0
29 PRs. Packages: @sodax/types, @sodax/sdk, @sodax/swaps-api, @sodax/dapp-kit, @sodax/wallet-sdk-core, @sodax/wallet-sdk-react, @sodax/libs, @sodax/skills.
Version note: the accumulated changesets include a
majorbump (Sui gRPC), so the next stable release off this line is 3.0.0, not 2.1.0. The2.1.0-rc.*tags are manual RC bumps, not changeset-generated versions.
⚠️ Breaking changes
Sui moved entirely from JSON-RPC to gRPC — [#367](#367)
Sui disabled JSON-RPC on public fullnodes (July 2026) and removes it from sui-node in October 2026.
SuiSpokeChainConfig.rpc_url→grpc_url(defaulthttps://fullnode.mainnet.sui.io);rpc_urlkept as a deprecated alias, but the endpoint must speak gRPC-web.sodax.spoke.sui.publicClientis no longer a@mysten/suiclient — it's aSuiTransport(aliasedsodax.spoke.sui.transport);publicClientis deprecated.SuiWalletProviderbrowser-extension mode is a hard break:{ client, wallet, account }→{ grpcUrl, address, signTransaction }. No alias.SuiXService.createWalletProvider()removed — read the provider from the store viauseWalletProvider({ xChainId: ChainKeys.SUI_MAINNET }).SuiSignAndExecutePolicy.responseremoved;SodaxWalletConfig.SUI.networkdrops'devnet';SuiCoinStruct.previousTransactionoptional; per-bucket object-change fields onSuiTransactionEffectsare now alwaysundefined(readchangedObjects).@mysten/sui→ 2.x,@mysten/wallet-standard→ 0.21,@mysten/dapp-kit→@mysten/dapp-kit-react.- Node engine floor raised across the whole workspace:
>=20.12.0→>=22.12.0.
useBackendSubmitTx unified and defaulted ON — [#362](#362)
- Moved onto
swaps/bridgeconfig (besidepartnerFee);swapsOptions/bridgeOptionsandSwapsClientOptions/BridgeClientOptionsare deprecated but still honoured. new Sodax()now takes the backend submit-tx path for swap and bridge (with fallback to the client-side relay). Opt out withswaps: { useBackendSubmitTx: false }.timeoutis now a per-attempt budget, not end-to-end — total wall-clock can exceed onetimeout, including onuseBackendSubmitTx: false. Re-check any outer watchdog sized off it.- Effective values exposed as
sodax.config.swapUseBackendSubmitTx/bridgeUseBackendSubmitTx; the service fields are now getters.
api.baseURL is the gateway root, not /be — [#369](#369)
The packaged default (…/v1/be) nested swaps/bridge routes under /be, so with backend submit-tx on by default swaps silently fell back to the relay and sodax.api.* calls 404'd. Each service now appends its own path below the root. Drop /be from any baseURL you pass — the old value still works via a deprecated compat trim (warns once per construction) scheduled for removal next major. New exports: DEFAULT_API_BASE_URL, BACKEND_API_BASE_PATH, BackendApiConfig, getBasePath().
Leverage-yield vault intents now charge the leverage-yield partner fee — [#366](#366)
createVaultIntent / vaultSwap previously fell back to swaps.partnerFee. Action required if you relied on that: set leverageYield.partnerFee (or the global fee), and re-point vault quotes from sodax.swaps.getQuote to the new sodax.leverageYield.getQuote — otherwise quote and intent disagree and the intent may not fill.
✨ Features
- Bridge API client — [#261](#261).
sodax.api.bridge: typed, validated client for the backend/bridge/*routes (IBridgeApiV2+ DTOs in@sodax/types).BridgeServicegains a backend submit-tx path and per-requestpartnerFee; dapp-kit adds the fulluseBridgeApi*hook set. - Sponsored Stellar account activation — [#335](#335).
sodax.sponsoring(activate/check/config) +sodax.api.sponsoringwire client +useStellarAccountActive/useSponsorConfig/useActivateStellarAccount. AddsuseStellarGate(sequences account → trustline → XLM affordability),getStellarAccountStatus,classifySponsorError,BackendHttpError/isBackendHttpError, live network base-reserve accounting, and per-operation fee-band validation before the wallet is prompted.IStellarWalletProvider.signTransactiontakes an optional{ address }.SodaxFeaturegains'sponsoring';useEstablishTrustlinesupersedes (deprecated)useRequestTrustline. - Flint RWA delivery hook — [#347](#347), [#364](#364).
HookKind.FLINT_DEPOSITrequests an ERC-7540 deposit of an intent's USDC output into the Flint USD vault on Ethereum, with the recipient as controller. The deployedFlintDepositHook(0xDf376dE34e9f1474A025Dfe411b7EB5541793C5d) is now registered, activating the kind end to end.encodeDeliveryDatanow rejects a zero-address recipient for every hook. - USDT-class stale-allowance approvals unblocked — [#341](#341), [#379](#379).
approvedetects behaviourally (simulate + read revert) that a token rejects a non-zero→non-zero allowance change and sendsapprove(0)first — signed callers may now be prompted twice. For unsigned callers:sodax.swaps.buildApproveTxs/sodax.spoke.buildApproveTxs/sodax.bridge.buildApproveTxsreturn{ approveTx, resetTx? }, andApproveResponseV2/BridgeApproveResponseV2carryresetTx. dapp-kit addsuseSwapsApiApproveAndBroadcastanduseBridgeApiApproveAndBroadcast, both with an optionalonProgresslistener reporting{ step, phase, index, total, hash?, error? }. - Swap status readable from any hash — [#371](#371).
sodax.swaps.getDetailedStatus({ srcChainKey, srcTxHash })+useDetailedStatus. Each read is bounded (getTransactionPackets/SolverApiService.getStatustake an optional timeout;RELAY_REQUEST_TIMEOUT_MSexported), and dependency failures stay retryable rather than counting against the not-delivered budget. getStatusreconciles against the durable backend record — [#371](#371). A solver restart no longer reports a filled intent asNOT_FOUND:getStatuscross-checks the backend intent record and returnsSOLVEDwith the recoveredfill_tx_hash. An unreadable record (5xx/transport) returns a failedResultrather than an unverified miss. AddsisFillEvent/FillEvent.sodax.leverageYield.getQuote()and dapp-kit'suseLeverageYieldQuote— [#366](#366).LeverageYieldSwapWithdrawParamsaccepts an optionalpartnerFee.radfi.signRequesthook — [#322](#322). A statelessRadfiSignerthe SDK calls per outbound Bound Exchange request, so a server-side caller can attachx-api-signaturewithout the SDK ever holding the credential.hook?: HookRequestV2on Swaps API v2 extras — [#364](#364). Wire contract only, onCreateIntentParamsV2andQuoteRequestV2; backend honouring is deployment-dependent, andgetQuotesupport is unverified from this repo.- Bitcoin dust-limit guard — [#261](#261). Native-BTC swap/bridge amounts below the dust limit are rejected up front.
BITCOIN_DUST_SATSandisNativeBitcoinTokenexported from@sodax/types. - Per-attempt timeout budgets for submit-tx — [#362](#362). The backend attempt and the relay fallback each get a full
timeout; every backend request is clamped tomin(budget left, api.timeout). AddsSwapsApiService.getTimeout().
🐛 Fixes
apiconfig resolution dropped flat fields when a slice was present — abaseURLbesideswapsApiConfigwas silently ignored and clients fell back to the packaged endpoint. Layering is now defaults → flat →baseApiConfig→swapsApiConfig.useQuotecached quotes priced with the wrong partner fee — the effective fee is now part of the query key.SwapService.partnerFee/MoneyMarketService.partnerFeebecame live getters (so they no longer appear inObject.keys(...)/ spreads). ExportsgetSwapQuoteQueryOptions.useStatuspolled forever — now stops onSOLVED/FAILEDand after 40 consecutiveNOT_FOUNDreads; an in-flight status resets the streak. Restore old behaviour withqueryOptions.refetchInterval: 3000.- Bridge partner-fee target on the no-deposit path — [#261](https://github.com/icon-project/sodax-sdk...
@sdks@2.1.0-rc.9
What's Changed
- feat(types,sdk): register the deployed FlintDepositHook on Ethereum by @AntonAndell in #364
Full Changelog: https://github.com/icon-project/sodax-sdks/compare/@sdks@2.1.0-rc.8...@sdks@2.1.0-rc.9
@sdks@2.1.0-rc.8
What's Changed
- feat(types): add Stellar and Hedera spoke tokens by @AntonAndell in #384
- feat: add Robinhood Chain and tokens by @gcranju in #326
- feat(sdk,types,dapp-kit): unsigned bridge approvals can clear a stale allowance by @0x0603 in #379
- fix(demo,types): swap crash guard + promote Robinhood Chain to production by @0x0603 in #393
Full Changelog: https://github.com/icon-project/sodax-sdks/compare/@sdks@2.1.0-rc.7...@sdks@2.1.0-rc.8
@sdks@2.1.0-rc.7
What's Changed
- test(sdk): skip stellar soda vault hub-asset drift by @R0bi7 in #385
- fix(types): correct EIP-55 checksum casing on 3 EVM token addresses by @R0bi7-sodax-worker in #357
- docs: add Stellar Sponsoring getting-started guide by @R0bi7 in #386
- feat(sui)!: move every Sui path from JSON-RPC to gRPC by @0x0603 in #367
New Contributors
- @R0bi7-sodax-worker made their first contribution in #357
Full Changelog: https://github.com/icon-project/sodax-sdks/compare/@sdks@2.1.0-rc.6...@sdks@2.1.0-rc.7
@sdks@2.1.0-rc.6
What's Changed
Full Changelog: https://github.com/icon-project/sodax-sdks/compare/@sdks@2.1.0-rc.5...@sdks@2.1.0-rc.6
@sdks@2.1.0-rc.5
What's Changed
- feat(demo,node): remove dev from solver by @gosiast in #363
- fix(sdk,types): api baseURL is the gateway root, not /be by @R0bi7 in #369
- docs: state that the Swaps API requires an explicit partnerFee by @gosiast in #361
Full Changelog: https://github.com/icon-project/sodax-sdks/compare/@sdks@2.1.0-rc.4...@sdks@2.1.0-rc.5
@sdks@2.1.0-rc.4
What's Changed
- fix(types,wallet-sdk-react): replace the dead Sui JSON-RPC default endpoint by @0x0603 in #360
- feat(sdk,types)!: unify useBackendSubmitTx, default it on by @R0bi7 in #362
- fix(sdk): use leverage-yield partner fees for vault intents by @R0bi7 in #366
Full Changelog: https://github.com/icon-project/sodax-sdks/compare/@sdks@2.1.0-rc.3...@sdks@2.1.0-rc.4
@sdks@2.1.0-rc.3
What's Changed
- fix(demo): make the bridge-api showcase work for Stacks and Bitcoin by @0x0603 in #348
- fix(sdk): reset a stale allowance before approving USDT-class tokens by @0x0603 in #341
- feat(types,sdk): add Flint RWA deposit hook kind and payload codec by @AntonAndell in #347
- docs: capitalize SODAX brand name in prose across audits and user-facing docs by @gosiast in #350
Full Changelog: https://github.com/icon-project/sodax-sdks/compare/@sdks@2.1.0-rc.2...@sdks@2.1.0-rc.3