@coinlist-co/react 0.11.1-rc.e102bdb → 0.12.0

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 (33) hide show
  1. package/dist/{chunk-7CTH4KPU.js → chunk-6CQHDASY.js} +648 -620
  2. package/dist/chunk-6CQHDASY.js.map +1 -0
  3. package/dist/{chunk-UZUQALFY.js → chunk-F6WGUKZC.js} +9 -9
  4. package/dist/chunk-F6WGUKZC.js.map +1 -0
  5. package/dist/{chunk-LSPZETDH.js → chunk-ZFBEI3BW.js} +131 -134
  6. package/dist/chunk-ZFBEI3BW.js.map +1 -0
  7. package/dist/client/index.cjs +1489 -1346
  8. package/dist/client/index.cjs.map +1 -1
  9. package/dist/client/index.d.cts +395 -254
  10. package/dist/client/index.d.ts +395 -254
  11. package/dist/client/index.js +852 -739
  12. package/dist/client/index.js.map +1 -1
  13. package/dist/{collections-BBI_XydI.d.cts → collections-DOm9VKVm.d.cts} +1 -1
  14. package/dist/{collections-BrX9rRWc.d.ts → collections-aCv-Wr2a.d.ts} +1 -1
  15. package/dist/{config-CMl1bR3F.d.cts → config-DIaFzrMW.d.cts} +56 -13
  16. package/dist/{config-CMl1bR3F.d.ts → config-DIaFzrMW.d.ts} +56 -13
  17. package/dist/server/index.cjs +262 -236
  18. package/dist/server/index.cjs.map +1 -1
  19. package/dist/server/index.d.cts +4 -4
  20. package/dist/server/index.d.ts +4 -4
  21. package/dist/server/index.js +3 -3
  22. package/dist/server/index.js.map +1 -1
  23. package/dist/{shared → universal}/index.cjs +948 -919
  24. package/dist/universal/index.cjs.map +1 -0
  25. package/dist/{shared → universal}/index.d.cts +566 -536
  26. package/dist/{shared → universal}/index.d.ts +566 -536
  27. package/dist/{shared → universal}/index.js +9 -5
  28. package/package.json +23 -17
  29. package/dist/chunk-7CTH4KPU.js.map +0 -1
  30. package/dist/chunk-LSPZETDH.js.map +0 -1
  31. package/dist/chunk-UZUQALFY.js.map +0 -1
  32. package/dist/shared/index.cjs.map +0 -1
  33. /package/dist/{shared → universal}/index.js.map +0 -0
@@ -1,10 +1,9 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
1
  import * as react from 'react';
3
2
  import { ReactNode, ButtonHTMLAttributes } from 'react';
4
- import { A as AuthorizationCode, C as CodeVerifier, L as Logger, W as WalletError, E as Erc20Namespace, a as EthereumChain, b as EvmContractAddress, B as BlockchainAmount, c as CoinListTokenSaleNamespace, O as OfferId, d as OfferOptionId, e as AssetId, P as Participation, f as CoinListTokenSaleNamespaceImpl, S as SharedNamespaceContext, g as OndoNamespace, h as AssetSymbol, i as OndoBuyTransaction, j as OndoSellTransaction, k as OndoSwapTransactionCore, l as OrderBookSide, m as OndoNamespaceImpl, n as SuperstateSwapNamespace, o as WalletsNamespace, p as Bps, q as EvmWalletAddress, r as SuperstateSwapNamespaceImpl, R as RequirementsNamespace, s as Requirement, t as RequirementsNamespaceImpl, u as Config, v as OAuthAccessToken, w as OffersNamespace, T as TokensNamespace, x as StablecoinSymbol, y as Erc20Asset, z as OfferDetail, D as OfferType, F as Offer, G as RequirementStatusInfo, H as RequirementType, I as RequirementStatusValue, J as OfferOptionAddress, K as RequirementId, M as KycLevelName, N as DocumentSubmission, Q as WalletChallengeType, U as PinoLoggerOptions, V as OndoTradingStatus, X as AssetDecimals, Y as BuildOndoBuyParams, Z as BuildOndoSellParams, _ as OndoQuote, $ as OndoQuoteSize, a0 as OfferOptionAddressId, a1 as TokenMetadata, a2 as TokenIdentifier } from '../config-CMl1bR3F.js';
5
- export { a3 as DebugEvent, a4 as FrontlineEventId, a5 as HttpError, a6 as HttpResponse, a7 as KycToken, a8 as LogBinding, a9 as LogBindings, aa as LogCause, ab as LogLevel, ac as LogScope, ad as LogValue, ae as ProductionLogLevel, af as RedactedWalletError, ag as RequestId, ah as SafeEvent, ai as SafeFields, aj as UnredactedFields } from '../config-CMl1bR3F.js';
6
- import { P as PKCEConfig, E as EvmWallet, S as SwapQuote, A as AssetIconUrl, a as ShortenedWalletAddress, F as FormattedAmountAssetUi, b as FormattedPercentUi, T as TxExplorerUrl, C as ConnectWallet, N as NonEmptyArray } from '../collections-BrX9rRWc.js';
7
- export { B as BroadcastTxParams, c as EvmSigner, W as WriteContractParams } from '../collections-BrX9rRWc.js';
3
+ import { A as AuthorizationCode, C as CodeVerifier, L as Logger, W as WalletError, E as Erc20Namespace, a as EthereumChain, b as EvmContractAddress, B as BlockchainAmount, c as CoinListTokenSaleNamespace, O as OfferId, d as OfferOptionId, e as AssetId, P as Participation, f as CoinListTokenSaleNamespaceImpl, U as UniversalNamespaceContext, g as OndoNamespace, h as AssetSymbol, i as OfferSwapContract, j as OndoBuyTransaction, k as OndoSellTransaction, l as OndoSwapTransactionCore, m as OrderBookSide, n as OndoNamespaceImpl, S as SuperstateSwapNamespace, o as WalletsNamespace, p as Bps, q as EvmWalletAddress, r as SuperstateSwapNamespaceImpl, R as RequirementsNamespace, s as Requirement, t as RequirementsNamespaceImpl, u as Config, v as OAuthAccessToken, w as OffersNamespace, T as TokensNamespace, x as StablecoinSymbol, y as Erc20Asset, z as OfferDetail, D as TokenMetadata, F as OfferType, G as Offer, H as RequirementStatusInfo, I as RequirementType, J as RequirementStatusValue, K as OfferOptionAddress, M as RequirementId, N as KycLevelName, Q as DocumentSubmission, V as WalletChallengeType, X as PinoLoggerOptions, Y as OndoTradingStatus, Z as AssetDecimals, _ as BuildOndoBuyParams, $ as BuildOndoSellParams, a0 as OndoQuote, a1 as OndoQuoteSize, a2 as TokenIdentifier, a3 as OfferOptionAddressId, a4 as TokenLogo } from '../config-DIaFzrMW.js';
4
+ export { a5 as DebugEvent, a6 as FrontlineEventId, a7 as HttpError, a8 as HttpResponse, a9 as KycToken, aa as LogBinding, ab as LogBindings, ac as LogCause, ad as LogLevel, ae as LogScope, af as LogValue, ag as ProductionLogLevel, ah as RedactedWalletError, ai as RequestId, aj as SafeEvent, ak as SafeFields, al as UnredactedFields } from '../config-DIaFzrMW.js';
5
+ import { P as PKCEConfig, E as EvmWallet, S as SwapQuote, A as AssetIconUrl, a as ShortenedWalletAddress, F as FormattedAmountAssetUi, b as FormattedPercentUi, T as TxExplorerUrl, C as ConnectWallet, N as NonEmptyArray } from '../collections-aCv-Wr2a.js';
6
+ export { B as BroadcastTxParams, c as EvmSigner, W as WriteContractParams } from '../collections-aCv-Wr2a.js';
8
7
  import { Hash } from 'viem';
9
8
  import * as class_variance_authority_types from 'class-variance-authority/types';
10
9
  import { VariantProps } from 'class-variance-authority';
@@ -251,7 +250,7 @@ interface ClientCoinListTokenSaleNamespace extends CoinListTokenSaleNamespace {
251
250
  }
252
251
  declare class ClientCoinListTokenSaleNamespaceImpl extends CoinListTokenSaleNamespaceImpl implements ClientCoinListTokenSaleNamespace {
253
252
  private readonly erc20;
254
- constructor(ctx: SharedNamespaceContext, erc20: Erc20Namespace);
253
+ constructor(ctx: UniversalNamespaceContext, erc20: Erc20Namespace);
255
254
  execute(params: Omit<ExecuteTokenSaleParams, 'erc20' | 'tokenSale'>): Promise<TokenSaleExecutionResult>;
256
255
  }
257
256
 
@@ -306,6 +305,15 @@ type PrepareOndoSwapParamsCore = {
306
305
  symbol: AssetSymbol;
307
306
  /** The chain the swap executes on, which the swap contract lives on. */
308
307
  chain: EthereumChain;
308
+ /**
309
+ * The offer's `swap_contracts` - every chain it can be swapped on, with the
310
+ * contract each settles through.
311
+ *
312
+ * Passed in rather than fetched here because it belongs to the offer the
313
+ * caller already holds, and it varies per offer. An array with no entry for
314
+ * `chain` yields `unsupported-chain`, as does an empty one.
315
+ */
316
+ swapContracts: OfferSwapContract[];
309
317
  onProgress?: (phase: OndoSwapPreparationPhase) => void;
310
318
  };
311
319
  type PrepareOndoBuyParams = PrepareOndoSwapParamsCore & {
@@ -341,9 +349,8 @@ type PrepareOndoSellParams = PrepareOndoSwapParamsCore & {
341
349
  * a minute and an approval takes most of one to mine, so building first would
342
350
  * hand the user a transaction that had already expired by the time they could
343
351
  * act on it - and each build spends an attestation. That ordering is why the
344
- * spender is a constant ({@link ondoSwapContractAddress}) rather than the
345
- * `tx.to` the response returns; {@link executeOndoSwap} checks the two agree
346
- * before anything is broadcast.
352
+ * spender comes off the offer rather than from the `tx.to` the response
353
+ * returns: `tx.to` arrives too late to approve against.
347
354
  *
348
355
  * Total: every failure is returned step-tagged rather than thrown, so a caller
349
356
  * can map each one to its own copy.
@@ -363,15 +370,12 @@ type OndoSwapExecutionPhase = 'broadcasting-swap' | 'confirming-swap';
363
370
  /**
364
371
  * A step-tagged reason {@link executeOndoSwap} failed.
365
372
  *
366
- * `quote-expired` and `spender-mismatch` are refusals to broadcast rather than
367
- * failures of a broadcast: both would revert on chain and cost the user gas,
368
- * and both are fixed by building a fresh transaction.
373
+ * `quote-expired` is a refusal to broadcast rather than a failure of a
374
+ * broadcast: it would revert on chain and cost the user gas, and it is fixed
375
+ * by building a fresh transaction.
369
376
  */
370
377
  type OndoSwapExecutionError = {
371
378
  step: 'quote-expired';
372
- } | {
373
- step: 'spender-mismatch';
374
- expected: EvmContractAddress;
375
379
  } | {
376
380
  step: 'swap';
377
381
  cause: WalletError;
@@ -427,10 +431,14 @@ type ExecuteOndoSwapParams<T> = {
427
431
  * The calldata is broadcast verbatim - the SDK never re-encodes it, because
428
432
  * the contract verifies a signature over the exact arguments inside it.
429
433
  *
430
- * Two checks run first, both of which would otherwise surface as a reverted
431
- * transaction the user paid for: it must not have expired (its deadline is
432
- * encoded in the calldata), and its `to` must be the contract the approval
433
- * named, since anything else cannot pull the funds.
434
+ * One check runs first, which would otherwise surface as a reverted
435
+ * transaction the user paid for: the transaction must not have expired, its
436
+ * deadline being encoded in the calldata.
437
+ *
438
+ * Where `tx.to` points is deliberately not checked. Frontline compares it to
439
+ * its own configured contract in `addressed_to_our_contract/2`, and the
440
+ * spender this SDK approved came off the same offer frontline served, so a
441
+ * check here would compare two values derived from one source (ENG-1734).
434
442
  */
435
443
  declare function executeOndoSwap<T extends OndoSwapTransactionCore>(params: ExecuteOndoSwapParams<T>): Promise<OndoSwapExecutionResult<T>>;
436
444
 
@@ -467,8 +475,11 @@ interface ClientOndoNamespace extends OndoNamespace {
467
475
  prepareSell(params: Omit<PrepareOndoSellParams, 'ondo' | 'erc20'>): Promise<OndoSellPreparationResult>;
468
476
  /**
469
477
  * Broadcasts a built transaction and waits for it to mine, refusing one that
470
- * has expired or points at an unexpected contract. Returns a step-tagged
471
- * result rather than throwing.
478
+ * has expired. Returns a step-tagged result rather than throwing.
479
+ *
480
+ * Does not check the destination: frontline compares it to the contract it
481
+ * serves on the offer before answering, so the address here and the one it
482
+ * checked are the same value.
472
483
  *
473
484
  * Takes either direction's transaction and hands the same one back. The
474
485
  * `side` tag is required here and not by {@link executeOndoSwap} itself
@@ -481,7 +492,7 @@ interface ClientOndoNamespace extends OndoNamespace {
481
492
  }
482
493
  declare class ClientOndoNamespaceImpl extends OndoNamespaceImpl implements ClientOndoNamespace {
483
494
  private readonly erc20;
484
- constructor(ctx: SharedNamespaceContext, erc20: Erc20Namespace);
495
+ constructor(ctx: UniversalNamespaceContext, erc20: Erc20Namespace);
485
496
  prepareBuy(params: Omit<PrepareOndoBuyParams, 'ondo' | 'erc20'>): Promise<OndoBuyPreparationResult>;
486
497
  prepareSell(params: Omit<PrepareOndoSellParams, 'ondo' | 'erc20'>): Promise<OndoSellPreparationResult>;
487
498
  executeSwap<T extends OndoSwapTransactionCore & {
@@ -629,7 +640,7 @@ interface ClientSuperstateSwapNamespace extends SuperstateSwapNamespace {
629
640
  declare class ClientSuperstateSwapNamespaceImpl extends SuperstateSwapNamespaceImpl implements ClientSuperstateSwapNamespace {
630
641
  private readonly erc20;
631
642
  private readonly wallets;
632
- constructor(ctx: SharedNamespaceContext, erc20: Erc20Namespace, wallets: WalletsNamespace);
643
+ constructor(ctx: UniversalNamespaceContext, erc20: Erc20Namespace, wallets: WalletsNamespace);
633
644
  execute(params: Omit<ExecuteSwapParams, 'swap' | 'erc20'>): Promise<SwapExecutionResult>;
634
645
  authorizeWallet(params: Omit<AuthorizeWalletParams, 'swap' | 'wallets'>): Promise<WalletAuthorizationResult>;
635
646
  }
@@ -654,7 +665,7 @@ interface ClientRequirementsNamespace extends RequirementsNamespace {
654
665
  }
655
666
  declare class ClientRequirementsNamespaceImpl extends RequirementsNamespaceImpl implements ClientRequirementsNamespace {
656
667
  private readonly coinlistBaseUrl;
657
- constructor(ctx: SharedNamespaceContext, coinlistBaseUrl: string | undefined);
668
+ constructor(ctx: UniversalNamespaceContext, coinlistBaseUrl: string | undefined);
658
669
  handle(requirement: Requirement): void;
659
670
  }
660
671
 
@@ -824,7 +835,7 @@ type CoinListProviderProps = {
824
835
  * self-scope, so you do not need to wrap them in {@link CoinListStyleScope}.
825
836
  * {@link CoinListProvider} is an identical alias with a friendlier name.
826
837
  */
827
- declare function CoinListContextProvider({ config, locale, children, }: CoinListProviderProps): react_jsx_runtime.JSX.Element;
838
+ declare function CoinListContextProvider({ config, locale, children, }: CoinListProviderProps): react.JSX.Element;
828
839
  /**
829
840
  * The provider to mount once at your app root. Provides the CoinList client context
830
841
  * to the whole tree with zero visual impact: it renders no DOM, no `<style>`, and no
@@ -857,7 +868,7 @@ type CoinListStyleScopeProps = {
857
868
  * Inheritance (font, color, custom-property tokens) and the scoped descendant reset
858
869
  * (`.clco-sdk-root *`) still apply through it.
859
870
  */
860
- declare function CoinListStyleScope({ children }: CoinListStyleScopeProps): react_jsx_runtime.JSX.Element;
871
+ declare function CoinListStyleScope({ children }: CoinListStyleScopeProps): react.JSX.Element;
861
872
 
862
873
  declare const buttonVariants: (props?: ({
863
874
  variant?: "link" | "primary" | "gradient" | "secondary" | "destructive" | "ghost" | "destructiveLink" | null | undefined;
@@ -1106,10 +1117,8 @@ type CheckoutAssetUi = {
1106
1117
  name: string;
1107
1118
  symbol: AssetSymbol;
1108
1119
  /**
1109
- * `null` when no icon is known for this asset. The SDK ships no icon
1110
- * registry `TOKEN_REGISTRY` carries none and only `Offer.logoUrl` supplies
1111
- * one — so absence is the common case, not an edge case, and `AssetIcon`
1112
- * renders a neutral placeholder for it.
1120
+ * `null` when no icon is known for this asset: no registry metadata, and no
1121
+ * logo on the offer. `AssetIcon` renders a neutral placeholder for it.
1113
1122
  */
1114
1123
  iconUrl: AssetIconUrl | null;
1115
1124
  network: CheckoutNetworkUi;
@@ -1120,10 +1129,10 @@ declare const CheckoutAssetUi: {
1120
1129
  * name and symbol, the caller supplies the chain it is being traded on and
1121
1130
  * whatever icon it has for it.
1122
1131
  *
1123
- * `iconUrl` is a caller's parameter rather than the token's own because a
1124
- * token does not carry one - the SDK ships no icon registry, and the only
1125
- * source is the offer being bought. Which is also why it defaults to `null`:
1126
- * the input asset a user pays with has no offer behind it.
1132
+ * `iconUrl` is a caller's parameter rather than the token's own because an
1133
+ * `Erc20Asset` does not carry one, and which source supplies it is the
1134
+ * caller's to decide. Which is also why it defaults to `null`: the input
1135
+ * asset a user pays with has no offer behind it.
1127
1136
  *
1128
1137
  * An asset sourced from the offer rather than from a token has its own
1129
1138
  * companion, {@link fromOffer}. One companion per source, not one per call
@@ -1135,7 +1144,7 @@ declare const CheckoutAssetUi: {
1135
1144
  }) => CheckoutAssetUi;
1136
1145
  /**
1137
1146
  * The view of the asset an offer sells: the offer supplies its name and the
1138
- * only icon the SDK has, the caller supplies the symbol and the chain.
1147
+ * fallback artwork, the caller supplies the symbol and the chain.
1139
1148
  *
1140
1149
  * `symbol` is a parameter rather than `offer.asset.code` because the symbol a
1141
1150
  * provider trades under is the provider's, not the catalogue's - Ondo's
@@ -1143,13 +1152,22 @@ declare const CheckoutAssetUi: {
1143
1152
  * asset stands in. Keeping it out here is what lets one companion serve every
1144
1153
  * provider instead of forking per provider.
1145
1154
  *
1155
+ * The icon is resolved from the public token registry when `tokenMetadata`
1156
+ * carries a listed token — `useCheckoutOfferTokenMetadata` fetches it,
1157
+ * keyed by the token `OfferDetail.tokens` lists for this chain — and falls
1158
+ * back to the offer's own logo otherwise. `null` covers every way the
1159
+ * registry answer can be absent (unlisted, not settled, lookup failed);
1160
+ * which one it is stays the concern of the hook's state machine, not of
1161
+ * this model, because the icon is the same either way.
1162
+ *
1146
1163
  * Deliberately no decimals. An offer names an asset; it does not answer for
1147
1164
  * the scale of any particular quantity, and every amount a checkout renders
1148
1165
  * arrives as a `BlockchainAmount` carrying its own.
1149
1166
  */
1150
- fromOffer: (offer: OfferDetail, { symbol, networkName }: {
1167
+ fromOffer: (offer: OfferDetail, { symbol, networkName, tokenMetadata, }: {
1151
1168
  symbol: AssetSymbol;
1152
1169
  networkName: string;
1170
+ tokenMetadata: TokenMetadata | null;
1153
1171
  }) => CheckoutAssetUi;
1154
1172
  };
1155
1173
  /** The chain an asset lives on, as a checkout screen renders it. */
@@ -1371,7 +1389,10 @@ interface UseSuperstateReviewViewModelOptions {
1371
1389
  contractAddress: EvmContractAddress;
1372
1390
  /** The chain the order executes on: the approval and the swap. */
1373
1391
  chain: EthereumChain;
1374
- /** The offer's logo, which is the only icon the output asset has. */
1392
+ /**
1393
+ * The output asset's icon, resolved registry-first by the flow above:
1394
+ * the offer's logo covers an unlisted token.
1395
+ */
1375
1396
  assetIconUrl: AssetIconUrl | null;
1376
1397
  /** Called once the swap has mined. */
1377
1398
  onComplete: (order: SuperstateOrderPlaced) => void;
@@ -1855,11 +1876,12 @@ type OndoBuyReviewUiEvent = {
1855
1876
  */
1856
1877
  type OndoCheckoutErrorReason =
1857
1878
  /**
1858
- * No CoinList Ondo integration contract is deployed on the chain the host
1859
- * asked for, so there is no spender to approve and nothing to broadcast to.
1879
+ * The offer names no CoinList swap contract on the chain the host asked for,
1880
+ * so there is no spender to approve and nothing to broadcast to.
1860
1881
  *
1861
- * Not retryable, and not the host's mistake to correct at runtime: the chain
1862
- * is fixed for the lifetime of the mount. See `ondoSwapContractAddress`.
1882
+ * Not retryable, and not the host's mistake to correct at runtime: both the
1883
+ * offer and the chain are fixed for the lifetime of the mount. See
1884
+ * `swapSpender`.
1863
1885
  */
1864
1886
  'unsupported-chain';
1865
1887
 
@@ -3485,6 +3507,82 @@ interface ConnectedWalletListProps {
3485
3507
  */
3486
3508
  declare function ConnectedWalletList(props: ConnectedWalletListProps): ReactNode;
3487
3509
 
3510
+ interface IdentityVerificationContainerProps {
3511
+ /**
3512
+ * Sumsub verification level to start. Determines which screens the Sumsub
3513
+ * WebSDK shows. Defaults to the backend's standard identity level.
3514
+ */
3515
+ levelName?: KycLevelName;
3516
+ /**
3517
+ * Reset the Sumsub applicant before starting the flow, so an
3518
+ * already-approved level can be executed again (e.g. to update stale PII).
3519
+ * Pass the `kycReset` value from the requirement status. Applies only to
3520
+ * the initial token: mid-flow token refreshes never repeat the reset.
3521
+ */
3522
+ reset?: boolean;
3523
+ /** BCP-47 language tag for the Sumsub UI, e.g. `'en'`. */
3524
+ locale?: string;
3525
+ /**
3526
+ * Called when the user submits their data in the Sumsub flow. Verification
3527
+ * continues asynchronously on the backend, so the requirement typically moves
3528
+ * to a pending state first - refetch requirement statuses to observe it.
3529
+ */
3530
+ onSubmitted?: () => void;
3531
+ /** Called when the Sumsub flow reports an error. */
3532
+ onError?: (error: Error) => void;
3533
+ className?: string;
3534
+ }
3535
+ /**
3536
+ * Inline Sumsub identity verification flow, backed by
3537
+ * {@link useIdentityVerificationViewModel}, which fetches the Sumsub WebSDK
3538
+ * access token via {@link useKycToken}. Used by
3539
+ * `RequirementsChecklistContainer` for KYC-backed requirements, and can also
3540
+ * be rendered standalone.
3541
+ */
3542
+ declare function IdentityVerificationContainer({ levelName, reset, locale, onSubmitted, onError, className, }: IdentityVerificationContainerProps): ReactNode;
3543
+
3544
+ type IdentityVerificationUiState = {
3545
+ type: 'loading';
3546
+ } | {
3547
+ type: 'error';
3548
+ message: string;
3549
+ retryable: boolean;
3550
+ } | {
3551
+ type: 'ready';
3552
+ accessToken: string;
3553
+ /** BCP-47 language tag for the Sumsub UI, or `undefined` for its default. */
3554
+ locale: string | undefined;
3555
+ /**
3556
+ * Handed straight to the Sumsub WebSDK, which refreshes an expired token
3557
+ * by calling it and awaiting the new one. It has to be a callback rather
3558
+ * than an event, because the third-party SDK expects a promise back.
3559
+ */
3560
+ refreshToken: () => Promise<string>;
3561
+ };
3562
+ type IdentityVerificationUiEvent = {
3563
+ type: 'ON_RETRY';
3564
+ } | {
3565
+ type: 'ON_SUBMITTED';
3566
+ } | {
3567
+ type: 'ON_ERROR';
3568
+ error: Error;
3569
+ };
3570
+
3571
+ interface IdentityVerificationViewProps {
3572
+ state: IdentityVerificationUiState;
3573
+ onEvent: (event: IdentityVerificationUiEvent) => void;
3574
+ className?: string;
3575
+ }
3576
+ /**
3577
+ * Renders the inline Sumsub identity verification flow: its loading state, its
3578
+ * failure states, and the Sumsub iframe itself. Pure: the access token arrives
3579
+ * in `state`, and flow outcomes leave through `onEvent`.
3580
+ *
3581
+ * Self-scoped: renders fully styled on its own, with no `CoinListStyleScope`
3582
+ * needed.
3583
+ */
3584
+ declare function IdentityVerificationView(props: IdentityVerificationViewProps): ReactNode;
3585
+
3488
3586
  interface RequirementItemProps {
3489
3587
  ui: RequirementItemUi;
3490
3588
  expanded?: boolean;
@@ -3507,7 +3605,7 @@ interface RequirementItemProps {
3507
3605
  * renders fully styled on its own, with no `CoinListStyleScope` needed. Also composed
3508
3606
  * by {@link RequirementsChecklist}.
3509
3607
  */
3510
- declare function RequirementItem({ ui, expanded, onToggle, className, onAction, onRemoveWallet, walletsStatus, onContactSupport, }: RequirementItemProps): react_jsx_runtime.JSX.Element;
3608
+ declare function RequirementItem({ ui, expanded, onToggle, className, onAction, onRemoveWallet, walletsStatus, onContactSupport, }: RequirementItemProps): react.JSX.Element;
3511
3609
 
3512
3610
  type LoadRequirementsReason = 'not-authenticated' | 'generic-error';
3513
3611
  type LoadRequirementsState = {
@@ -3675,99 +3773,6 @@ interface RequirementsChecklistViewProps {
3675
3773
  */
3676
3774
  declare function RequirementsChecklistView(props: RequirementsChecklistViewProps): ReactNode;
3677
3775
 
3678
- interface VerificationOverlayProps {
3679
- onClose: () => void;
3680
- children: ReactNode;
3681
- }
3682
- /**
3683
- * Full-screen overlay hosting the identity verification flow. Mirrors
3684
- * frontline-web, where verification runs on a dedicated full page rather than
3685
- * inside the requirement row.
3686
- *
3687
- * Self-scoped: renders fully styled on its own, with no `CoinListStyleScope`
3688
- * needed. It has to be, because the checklist renders it as a sibling of
3689
- * `RequirementsChecklistView` rather than inside it, and its backdrop
3690
- * (`bg-overlay`) is token-backed: outside `.clco-sdk-root` the token is
3691
- * undefined and the scrim disappears entirely.
3692
- */
3693
- declare function VerificationOverlay({ onClose, children, }: VerificationOverlayProps): ReactNode;
3694
-
3695
- interface IdentityVerificationContainerProps {
3696
- /**
3697
- * Sumsub verification level to start. Determines which screens the Sumsub
3698
- * WebSDK shows. Defaults to the backend's standard identity level.
3699
- */
3700
- levelName?: KycLevelName;
3701
- /**
3702
- * Reset the Sumsub applicant before starting the flow, so an
3703
- * already-approved level can be executed again (e.g. to update stale PII).
3704
- * Pass the `kycReset` value from the requirement status. Applies only to
3705
- * the initial token: mid-flow token refreshes never repeat the reset.
3706
- */
3707
- reset?: boolean;
3708
- /** BCP-47 language tag for the Sumsub UI, e.g. `'en'`. */
3709
- locale?: string;
3710
- /**
3711
- * Called when the user submits their data in the Sumsub flow. Verification
3712
- * continues asynchronously on the backend, so the requirement typically moves
3713
- * to a pending state first - refetch requirement statuses to observe it.
3714
- */
3715
- onSubmitted?: () => void;
3716
- /** Called when the Sumsub flow reports an error. */
3717
- onError?: (error: Error) => void;
3718
- className?: string;
3719
- }
3720
- /**
3721
- * Inline Sumsub identity verification flow, backed by
3722
- * {@link useIdentityVerificationViewModel}, which fetches the Sumsub WebSDK
3723
- * access token via {@link useKycToken}. Used by
3724
- * `RequirementsChecklistContainer` for KYC-backed requirements, and can also
3725
- * be rendered standalone.
3726
- */
3727
- declare function IdentityVerificationContainer({ levelName, reset, locale, onSubmitted, onError, className, }: IdentityVerificationContainerProps): ReactNode;
3728
-
3729
- type IdentityVerificationUiState = {
3730
- type: 'loading';
3731
- } | {
3732
- type: 'error';
3733
- message: string;
3734
- retryable: boolean;
3735
- } | {
3736
- type: 'ready';
3737
- accessToken: string;
3738
- /** BCP-47 language tag for the Sumsub UI, or `undefined` for its default. */
3739
- locale: string | undefined;
3740
- /**
3741
- * Handed straight to the Sumsub WebSDK, which refreshes an expired token
3742
- * by calling it and awaiting the new one. It has to be a callback rather
3743
- * than an event, because the third-party SDK expects a promise back.
3744
- */
3745
- refreshToken: () => Promise<string>;
3746
- };
3747
- type IdentityVerificationUiEvent = {
3748
- type: 'ON_RETRY';
3749
- } | {
3750
- type: 'ON_SUBMITTED';
3751
- } | {
3752
- type: 'ON_ERROR';
3753
- error: Error;
3754
- };
3755
-
3756
- interface IdentityVerificationViewProps {
3757
- state: IdentityVerificationUiState;
3758
- onEvent: (event: IdentityVerificationUiEvent) => void;
3759
- className?: string;
3760
- }
3761
- /**
3762
- * Renders the inline Sumsub identity verification flow: its loading state, its
3763
- * failure states, and the Sumsub iframe itself. Pure: the access token arrives
3764
- * in `state`, and flow outcomes leave through `onEvent`.
3765
- *
3766
- * Self-scoped: renders fully styled on its own, with no `CoinListStyleScope`
3767
- * needed.
3768
- */
3769
- declare function IdentityVerificationView(props: IdentityVerificationViewProps): ReactNode;
3770
-
3771
3776
  interface TaxDocumentModalContainerProps {
3772
3777
  isOpen: boolean;
3773
3778
  onClose: () => void;
@@ -3878,6 +3883,23 @@ interface TaxDocumentModalViewProps {
3878
3883
  */
3879
3884
  declare function TaxDocumentModalView({ state, onEvent, className, }: TaxDocumentModalViewProps): ReactNode;
3880
3885
 
3886
+ interface VerificationOverlayProps {
3887
+ onClose: () => void;
3888
+ children: ReactNode;
3889
+ }
3890
+ /**
3891
+ * Full-screen overlay hosting the identity verification flow. Mirrors
3892
+ * frontline-web, where verification runs on a dedicated full page rather than
3893
+ * inside the requirement row.
3894
+ *
3895
+ * Self-scoped: renders fully styled on its own, with no `CoinListStyleScope`
3896
+ * needed. It has to be, because the checklist renders it as a sibling of
3897
+ * `RequirementsChecklistView` rather than inside it, and its backdrop
3898
+ * (`bg-overlay`) is token-backed: outside `.clco-sdk-root` the token is
3899
+ * undefined and the scrim disappears entirely.
3900
+ */
3901
+ declare function VerificationOverlay({ onClose, children, }: VerificationOverlayProps): ReactNode;
3902
+
3881
3903
  interface ConnectWalletModalContainerProps {
3882
3904
  isOpen: boolean;
3883
3905
  onClose: () => void;
@@ -4231,6 +4253,8 @@ interface UseOndoBuyAmountViewModelOptions {
4231
4253
  ondoSymbol: AssetSymbol;
4232
4254
  /** The chain the order executes on: balances, approval, and the contract. */
4233
4255
  chain: EthereumChain;
4256
+ /** The offer's swap contracts, forwarded to the preparation. */
4257
+ swapContracts: OfferSwapContract[];
4234
4258
  /**
4235
4259
  * When false, the step neither fetches nor polls. Defaults to true.
4236
4260
  *
@@ -4260,7 +4284,7 @@ interface UseOndoBuyAmountViewModelResult {
4260
4284
  * the balance, the offer's minimum, and Ondo's own order caps. Each of those
4261
4285
  * would otherwise cost the user a real approval transaction before failing.
4262
4286
  */
4263
- declare function useOndoBuyAmountViewModel({ stepInput, ondoSymbol, chain, enabled, onComplete, onEdit, }: UseOndoBuyAmountViewModelOptions): UseOndoBuyAmountViewModelResult;
4287
+ declare function useOndoBuyAmountViewModel({ stepInput, ondoSymbol, chain, swapContracts, enabled, onComplete, onEdit, }: UseOndoBuyAmountViewModelOptions): UseOndoBuyAmountViewModelResult;
4264
4288
  type OndoBuyAmountValidation = {
4265
4289
  valid: true;
4266
4290
  amount: BlockchainAmount;
@@ -4400,13 +4424,18 @@ interface UseOndoBuyReviewViewModelOptions {
4400
4424
  /** The chain the order executes on. */
4401
4425
  chain: EthereumChain;
4402
4426
  /**
4403
- * The offer being bought: the asset's name and its only icon.
4427
+ * The offer being bought: the asset's name and its fallback artwork.
4404
4428
  *
4405
4429
  * The identity comes from here rather than from the price poll, so the card
4406
4430
  * agrees with the reference panel beside it and a dropped poll cannot leave
4407
4431
  * the review unable to say what was bought.
4408
4432
  */
4409
4433
  offer: OfferDetail;
4434
+ /**
4435
+ * Registry metadata for the bought asset; `null` falls back to the offer's
4436
+ * logo.
4437
+ */
4438
+ outputTokenMetadata: TokenMetadata | null;
4410
4439
  /**
4411
4440
  * When false, the step neither builds a transaction nor counts down, and
4412
4441
  * neither refreshing the quote nor placing an order does anything. Defaults
@@ -4439,7 +4468,7 @@ interface UseOndoBuyReviewViewModelResult {
4439
4468
  * Refreshing is always something the user asks for. Each refresh builds a new
4440
4469
  * transaction, which spends an attestation, so nothing here is on a timer.
4441
4470
  */
4442
- declare function useOndoBuyReviewViewModel({ stepInput, ondoSymbol, chain, offer, enabled, onComplete, }: UseOndoBuyReviewViewModelOptions): UseOndoBuyReviewViewModelResult;
4471
+ declare function useOndoBuyReviewViewModel({ stepInput, ondoSymbol, chain, offer, outputTokenMetadata, enabled, onComplete, }: UseOndoBuyReviewViewModelOptions): UseOndoBuyReviewViewModelResult;
4443
4472
 
4444
4473
  /**
4445
4474
  * Which step is being filled in, carrying everything the ones before it
@@ -4600,8 +4629,16 @@ interface UseOndoSellAmountViewModelOptions {
4600
4629
  ondoSymbol: AssetSymbol;
4601
4630
  /** The chain the order executes on: the balance read, the approval and the broadcast. */
4602
4631
  chain: EthereumChain;
4603
- /** The offer being sold: supplies the asset's display name and its only icon. */
4632
+ /**
4633
+ * The offer being sold: supplies the asset's display name and its fallback
4634
+ * artwork.
4635
+ */
4604
4636
  offer: OfferDetail;
4637
+ /**
4638
+ * Registry metadata for the sold asset; `null` falls back to the offer's
4639
+ * logo.
4640
+ */
4641
+ inputTokenMetadata: TokenMetadata | null;
4605
4642
  /**
4606
4643
  * When false, the step neither fetches nor polls. Defaults to true.
4607
4644
  *
@@ -4640,7 +4677,7 @@ interface UseOndoSellAmountViewModelResult {
4640
4677
  * because doing it through a price that moves between the check and the build
4641
4678
  * would reject fillable orders and pass unfillable ones.
4642
4679
  */
4643
- declare function useOndoSellAmountViewModel({ stepInput, ondoSymbol, chain, offer, enabled, onComplete, onEdit, }: UseOndoSellAmountViewModelOptions): UseOndoSellAmountViewModelResult;
4680
+ declare function useOndoSellAmountViewModel({ stepInput, ondoSymbol, chain, offer, inputTokenMetadata, enabled, onComplete, onEdit, }: UseOndoSellAmountViewModelOptions): UseOndoSellAmountViewModelResult;
4644
4681
  type OndoSellAmountValidation = {
4645
4682
  valid: true;
4646
4683
  amount: BlockchainAmount;
@@ -5065,6 +5102,12 @@ interface UseOndoSidebarViewModelOptions {
5065
5102
  ondoSymbol: AssetSymbol;
5066
5103
  /** The chain the order executes on, and so the network shown. */
5067
5104
  chain: EthereumChain;
5105
+ /**
5106
+ * Registry metadata for the offered token, from the checkout flow above.
5107
+ * `null` covers every way the answer can be absent (unlisted, not settled,
5108
+ * lookup failed); the panel falls back to the offer's own logo for it.
5109
+ */
5110
+ tokenMetadata: TokenMetadata | null;
5068
5111
  /** The indicative price poll. */
5069
5112
  priceState: LoadOndoPriceState;
5070
5113
  /** The market-status poll. */
@@ -5085,7 +5128,7 @@ interface UseOndoSidebarViewModelResult {
5085
5128
  * the offer and is on screen from the first render, so a failed or in-flight
5086
5129
  * poll never blanks it.
5087
5130
  */
5088
- declare function useOndoSidebarViewModel({ offer, ondoSymbol, chain, priceState, tradingStatusState, }: UseOndoSidebarViewModelOptions): UseOndoSidebarViewModelResult;
5131
+ declare function useOndoSidebarViewModel({ offer, ondoSymbol, chain, tokenMetadata, priceState, tradingStatusState, }: UseOndoSidebarViewModelOptions): UseOndoSidebarViewModelResult;
5089
5132
 
5090
5133
  /**
5091
5134
  * Whether step 1 is being filled in or already answered.
@@ -5130,6 +5173,128 @@ interface UseOndoWalletSelectViewModelResult {
5130
5173
  */
5131
5174
  declare function useOndoWalletSelectViewModel({ stepInput, wallets, chain, onComplete, onEdit, }: UseOndoWalletSelectViewModelOptions): UseOndoWalletSelectViewModelResult;
5132
5175
 
5176
+ /**
5177
+ * The state of a token-metadata lookup.
5178
+ *
5179
+ * `CONTENT` with `null` means the registry answered and does not list the
5180
+ * token — a real domain answer callers render on (fall back to your own
5181
+ * display defaults). `ERROR` means the answer is unknown; the two must not be
5182
+ * conflated. `DISABLED` means the hook was switched off before an answer
5183
+ * arrived, so there is nothing to render a loading UI for. No
5184
+ * `not-authenticated` reason: the registry is public.
5185
+ */
5186
+ type LoadTokenMetadataState = {
5187
+ type: 'DISABLED';
5188
+ } | {
5189
+ type: 'LOADING';
5190
+ } | {
5191
+ type: 'ERROR';
5192
+ reason: 'generic-error';
5193
+ } | {
5194
+ type: 'CONTENT';
5195
+ tokenMetadata: TokenMetadata | null;
5196
+ };
5197
+ interface UseTokenMetadataOptions extends TokenIdentifier {
5198
+ /**
5199
+ * Metadata pre-fetched on the server (via `CoinListServer#tokens.get`).
5200
+ * When provided, the hook uses it as-is and skips the initial client-side
5201
+ * fetch; {@link UseTokenMetadataResult.refetch} still fetches. `null` is a
5202
+ * valid seed — it means "not in the registry" — and is distinct from
5203
+ * leaving `data` undefined.
5204
+ */
5205
+ data?: TokenMetadata | null;
5206
+ /** When false: no request; see {@link LoadTokenMetadataState}. Default true. */
5207
+ enabled?: boolean;
5208
+ }
5209
+ interface UseTokenMetadataResult {
5210
+ state: LoadTokenMetadataState;
5211
+ /**
5212
+ * Fetches again: the recovery path after a transient `ERROR`, and the way
5213
+ * past a server seed (`data`), which only the first fetch honours. No-op
5214
+ * while disabled.
5215
+ */
5216
+ refetch: () => void;
5217
+ }
5218
+ /**
5219
+ * Loads one token's display metadata (name, symbol, decimals, logos) from
5220
+ * CoinList's public token registry — the lookup `OfferDetail.tokens` entries
5221
+ * are keyed for. To display a whole catalogue, prefer one
5222
+ * `CoinListClient#tokens.list(chain)` over mounting this hook per token.
5223
+ *
5224
+ * No polling: registry content is immutable per version, so a
5225
+ * `(chain, address)` answer does not change under the page. `refetch` exists
5226
+ * for error recovery and for bypassing a server seed, not for freshness.
5227
+ *
5228
+ * Disabled without an answer in hand it reports `DISABLED` rather than
5229
+ * `LOADING` (nothing is in flight, so a spinner would wait forever) and
5230
+ * rather than an empty `CONTENT` (`CONTENT: null` asserts "not in the
5231
+ * registry" — an answer this hook would not actually have). A seeded or
5232
+ * already-fetched `CONTENT` survives disabling.
5233
+ */
5234
+ declare function useTokenMetadata(options: UseTokenMetadataOptions): UseTokenMetadataResult;
5235
+
5236
+ interface UseCheckoutOfferTokenMetadataOptions {
5237
+ /**
5238
+ * The offer being checked out: its `tokens` list supplies the
5239
+ * `(chain, address)` key the registry lookup is made with.
5240
+ */
5241
+ offer: OfferDetail;
5242
+ /** The chain the checkout executes on, which selects the token entry. */
5243
+ chain: EthereumChain;
5244
+ /**
5245
+ * Metadata pre-fetched on the server (via `CoinListServer#tokens.get`).
5246
+ * When provided, the hook uses it as-is and skips the client-side fetch.
5247
+ * `null` is a valid seed — it means "not in the registry" — and is distinct
5248
+ * from leaving `data` undefined.
5249
+ */
5250
+ data?: TokenMetadata | null;
5251
+ /**
5252
+ * When false: no request; see {@link LoadTokenMetadataState}. Default true.
5253
+ */
5254
+ enabled?: boolean;
5255
+ }
5256
+ interface UseCheckoutOfferTokenMetadataResult {
5257
+ state: LoadTokenMetadataState;
5258
+ }
5259
+ /**
5260
+ * The `(chain, address)` the public token registry keys the offer's asset by,
5261
+ * or `null` when the offer lists no token on this chain.
5262
+ *
5263
+ * The checkout renders the asset an offer sells, which is the `swap` entry on
5264
+ * its chain; a `distribution` entry names the same token for a sale product,
5265
+ * so it is accepted as the fallback. `funding` entries name what a swap is
5266
+ * paid with, never what it sells, so they are skipped — the funding row has
5267
+ * its own icon source in `stablecoinIconUrl`.
5268
+ */
5269
+ declare function offerTokenIdentifier(offer: OfferDetail, chain: EthereumChain): TokenIdentifier | null;
5270
+ /**
5271
+ * The metadata value `CheckoutAssetUi.fromOffer` wants, from the shared
5272
+ * lookup's state: `null` while the answer is unknown (loading, error,
5273
+ * disabled), which is the signal that renders the offer's own logo.
5274
+ *
5275
+ * Exported because every checkout god viewmodel projects its state exactly
5276
+ * once for the same reason — the steps below them render a value, not a
5277
+ * state machine — and three hand-written copies of the load-bearing
5278
+ * fallback rule would drift the first time the state union grows an arm.
5279
+ */
5280
+ declare function tokenMetadataOf(state: LoadTokenMetadataState): TokenMetadata | null;
5281
+ /**
5282
+ * Loads the public token registry's display metadata for the asset an offer
5283
+ * sells, keyed by the token `OfferDetail.tokens` lists for the checkout's
5284
+ * chain. Checkout screens feed the result into `CheckoutAssetUi.fromOffer`,
5285
+ * which prefers the registry logo and falls back to the offer's own.
5286
+ *
5287
+ * A composition rather than a re-implementation: `useTokenMetadata` already
5288
+ * owns the `(chain, address)` lookup and its state machine, so this hook
5289
+ * contributes only the offer step — which token entry is the asset being
5290
+ * sold — and delegates the rest. An offer that lists no token on this chain
5291
+ * is seeded with "not listed", which is a settled answer rather than a
5292
+ * spinner. There is deliberately no `refetch`: the offer and chain are fixed
5293
+ * for the lifetime of the checkout, and a failed lookup renders the offer
5294
+ * logo — there is no user-visible recovery to hang a retry on.
5295
+ */
5296
+ declare function useCheckoutOfferTokenMetadata({ offer, chain, data, enabled, }: UseCheckoutOfferTokenMetadataOptions): UseCheckoutOfferTokenMetadataResult;
5297
+
5133
5298
  /** How much the user is spending, and what they are spending it in. */
5134
5299
  type SuperstateAmountConfirmed = {
5135
5300
  amount: BlockchainAmount;
@@ -5301,7 +5466,10 @@ interface UseSuperstateSidebarViewModelOptions {
5301
5466
  offer: OfferDetail;
5302
5467
  /** The chain the token lives on, which names the network row. */
5303
5468
  chain: EthereumChain;
5304
- /** The offer's logo — the only icon the output asset has. */
5469
+ /**
5470
+ * The output asset's icon, resolved by the flow above: registry-first,
5471
+ * with the offer's logo as the fallback.
5472
+ */
5305
5473
  assetIconUrl: AssetIconUrl | null;
5306
5474
  /**
5307
5475
  * The swap's output token, or `null` while it is still being read. It names
@@ -5552,53 +5720,6 @@ interface UseOffersGridViewModelResult {
5552
5720
  */
5553
5721
  declare function useOffersGridViewModel(options?: UseOffersGridViewModelOptions): UseOffersGridViewModelResult;
5554
5722
 
5555
- interface UseRequirementsChecklistViewModelOptions {
5556
- offerId: OfferId;
5557
- optionId: OfferOptionId;
5558
- title: string;
5559
- description: string;
5560
- onContinue?: () => void;
5561
- /**
5562
- * Called when the user clicks a requirement's action button. Defaults to
5563
- * `CoinListClient#requirements.handle`, except for `document` requirements,
5564
- * which open the built-in tax document modal, and wallet requirements with a
5565
- * host wallet, which open the built-in connect flow. Pass `null` to disable
5566
- * the action button entirely.
5567
- */
5568
- onRequirementActionOverride?: ((requirement: Requirement) => void) | null;
5569
- /**
5570
- * Called when the user clicks "Contact support" on a rejected requirement.
5571
- * Defaults to `CoinListClient#support.contact`. Pass `null` to disable the
5572
- * button entirely.
5573
- */
5574
- onContactSupportOverride?: ((requirement: Requirement) => void) | null;
5575
- /** Host-provided connected wallet, or `null` while none is connected. */
5576
- wallet?: ConnectWallet | null;
5577
- /** Called when the user asks to connect a wallet and none is connected yet. */
5578
- onRequestConnect?: () => void;
5579
- /** Override the default label for a requirement type. */
5580
- getLabel?: (requirement: Requirement) => string;
5581
- /** Override the default description for a requirement type. */
5582
- getDescription?: (requirement: Requirement) => string | null;
5583
- /** Requirements pre-fetched on the server. */
5584
- data?: RequirementsData;
5585
- /** Options for the inline Sumsub verification flow. */
5586
- identityVerificationOptions?: {
5587
- levelName?: KycLevelName;
5588
- locale?: string;
5589
- };
5590
- }
5591
- interface UseRequirementsChecklistViewModelResult {
5592
- state: RequirementsChecklistUiState;
5593
- onEvent: (event: RequirementsChecklistUiEvent) => void;
5594
- }
5595
- /**
5596
- * Drives {@link RequirementsChecklistView}: loads the requirements and their
5597
- * statuses for one offer option, shapes each row, and owns the three flows the
5598
- * checklist can open (tax document, wallet connect, identity verification).
5599
- */
5600
- declare function useRequirementsChecklistViewModel(options: UseRequirementsChecklistViewModelOptions): UseRequirementsChecklistViewModelResult;
5601
-
5602
5723
  /**
5603
5724
  * A display-ready connect-wallet error: the core flow's machine-readable code
5604
5725
  * and `retryable` flag, plus copy for the UI.
@@ -5860,6 +5981,53 @@ interface UseTaxDocumentModalViewModelResult {
5860
5981
  */
5861
5982
  declare function useTaxDocumentModalViewModel({ isOpen, onClose, onSubmitted, }: UseTaxDocumentModalViewModelOptions): UseTaxDocumentModalViewModelResult;
5862
5983
 
5984
+ interface UseRequirementsChecklistViewModelOptions {
5985
+ offerId: OfferId;
5986
+ optionId: OfferOptionId;
5987
+ title: string;
5988
+ description: string;
5989
+ onContinue?: () => void;
5990
+ /**
5991
+ * Called when the user clicks a requirement's action button. Defaults to
5992
+ * `CoinListClient#requirements.handle`, except for `document` requirements,
5993
+ * which open the built-in tax document modal, and wallet requirements with a
5994
+ * host wallet, which open the built-in connect flow. Pass `null` to disable
5995
+ * the action button entirely.
5996
+ */
5997
+ onRequirementActionOverride?: ((requirement: Requirement) => void) | null;
5998
+ /**
5999
+ * Called when the user clicks "Contact support" on a rejected requirement.
6000
+ * Defaults to `CoinListClient#support.contact`. Pass `null` to disable the
6001
+ * button entirely.
6002
+ */
6003
+ onContactSupportOverride?: ((requirement: Requirement) => void) | null;
6004
+ /** Host-provided connected wallet, or `null` while none is connected. */
6005
+ wallet?: ConnectWallet | null;
6006
+ /** Called when the user asks to connect a wallet and none is connected yet. */
6007
+ onRequestConnect?: () => void;
6008
+ /** Override the default label for a requirement type. */
6009
+ getLabel?: (requirement: Requirement) => string;
6010
+ /** Override the default description for a requirement type. */
6011
+ getDescription?: (requirement: Requirement) => string | null;
6012
+ /** Requirements pre-fetched on the server. */
6013
+ data?: RequirementsData;
6014
+ /** Options for the inline Sumsub verification flow. */
6015
+ identityVerificationOptions?: {
6016
+ levelName?: KycLevelName;
6017
+ locale?: string;
6018
+ };
6019
+ }
6020
+ interface UseRequirementsChecklistViewModelResult {
6021
+ state: RequirementsChecklistUiState;
6022
+ onEvent: (event: RequirementsChecklistUiEvent) => void;
6023
+ }
6024
+ /**
6025
+ * Drives {@link RequirementsChecklistView}: loads the requirements and their
6026
+ * statuses for one offer option, shapes each row, and owns the three flows the
6027
+ * checklist can open (tax document, wallet connect, identity verification).
6028
+ */
6029
+ declare function useRequirementsChecklistViewModel(options: UseRequirementsChecklistViewModelOptions): UseRequirementsChecklistViewModelResult;
6030
+
5863
6031
  interface UseConnectWalletModalViewModelOptions {
5864
6032
  isOpen: boolean;
5865
6033
  onClose: () => void;
@@ -5986,66 +6154,6 @@ interface UseErc20TokenBalancesResult {
5986
6154
  */
5987
6155
  declare function useErc20TokenBalances(options: UseErc20TokenBalancesOptions): UseErc20TokenBalancesResult;
5988
6156
 
5989
- /**
5990
- * The state of a token-metadata lookup.
5991
- *
5992
- * `CONTENT` with `null` means the registry answered and does not list the
5993
- * token — a real domain answer callers render on (fall back to your own
5994
- * display defaults). `ERROR` means the answer is unknown; the two must not be
5995
- * conflated. `DISABLED` means the hook was switched off before an answer
5996
- * arrived, so there is nothing to render a loading UI for. No
5997
- * `not-authenticated` reason: the registry is public.
5998
- */
5999
- type LoadTokenMetadataState = {
6000
- type: 'DISABLED';
6001
- } | {
6002
- type: 'LOADING';
6003
- } | {
6004
- type: 'ERROR';
6005
- reason: 'generic-error';
6006
- } | {
6007
- type: 'CONTENT';
6008
- tokenMetadata: TokenMetadata | null;
6009
- };
6010
- interface UseTokenMetadataOptions extends TokenIdentifier {
6011
- /**
6012
- * Metadata pre-fetched on the server (via `CoinListServer#tokens.get`).
6013
- * When provided, the hook uses it as-is and skips the initial client-side
6014
- * fetch; {@link UseTokenMetadataResult.refetch} still fetches. `null` is a
6015
- * valid seed — it means "not in the registry" — and is distinct from
6016
- * leaving `data` undefined.
6017
- */
6018
- data?: TokenMetadata | null;
6019
- /** When false: no request; see {@link LoadTokenMetadataState}. Default true. */
6020
- enabled?: boolean;
6021
- }
6022
- interface UseTokenMetadataResult {
6023
- state: LoadTokenMetadataState;
6024
- /**
6025
- * Fetches again: the recovery path after a transient `ERROR`, and the way
6026
- * past a server seed (`data`), which only the first fetch honours. No-op
6027
- * while disabled.
6028
- */
6029
- refetch: () => void;
6030
- }
6031
- /**
6032
- * Loads one token's display metadata (name, symbol, decimals, logos) from
6033
- * CoinList's public token registry — the lookup `OfferDetail.tokens` entries
6034
- * are keyed for. To display a whole catalogue, prefer one
6035
- * `CoinListClient#tokens.list(chain)` over mounting this hook per token.
6036
- *
6037
- * No polling: registry content is immutable per version, so a
6038
- * `(chain, address)` answer does not change under the page. `refetch` exists
6039
- * for error recovery and for bypassing a server seed, not for freshness.
6040
- *
6041
- * Disabled without an answer in hand it reports `DISABLED` rather than
6042
- * `LOADING` (nothing is in flight, so a spinner would wait forever) and
6043
- * rather than an empty `CONTENT` (`CONTENT: null` asserts "not in the
6044
- * registry" — an answer this hook would not actually have). A seeded or
6045
- * already-fetched `CONTENT` survives disabling.
6046
- */
6047
- declare function useTokenMetadata(options: UseTokenMetadataOptions): UseTokenMetadataResult;
6048
-
6049
6157
  interface UseCoinListResult {
6050
6158
  /**
6051
6159
  * Indicates whether the CoinList client has been initialized and ready to use.
@@ -6080,9 +6188,10 @@ declare const USDT_ICON_URL: AssetIconUrl;
6080
6188
  *
6081
6189
  * `StablecoinSymbol` is a closed union of the two coins the swap flows accept,
6082
6190
  * so the lookup is total and stays total: adding a third funding coin is a
6083
- * compile error here. Every other asset a checkout renders comes from an offer
6084
- * and carries its own artwork, which is why `CheckoutAssetUi.fromErc20` still
6085
- * takes `iconUrl` from its caller and still defaults to `null`.
6191
+ * compile error here. Every other asset a checkout renders is an offer's,
6192
+ * whose artwork `offerAssetIconUrl` resolves registry-first; the funding
6193
+ * asset has no offer behind it, which is why `CheckoutAssetUi.fromErc20`
6194
+ * still takes `iconUrl` from its caller and still defaults to `null`.
6086
6195
  *
6087
6196
  * It lives in the SDK rather than in each host because the alternative was
6088
6197
  * every partner mapping the same two symbols to the same two URLs - which is
@@ -6107,12 +6216,44 @@ declare function stablecoinIconUrl(symbol: StablecoinSymbol): AssetIconUrl;
6107
6216
  * for `null`, which is what the offers grid already does.
6108
6217
  */
6109
6218
  declare function offerIconUrl(offer: OfferDetail): AssetIconUrl | null;
6219
+ /**
6220
+ * The URL of a token-registry logo, or `null` when the logo carries no usable
6221
+ * image (unrepresentable for a registry logo today, but a consumer must not
6222
+ * crash on it).
6223
+ *
6224
+ * A vector logo is a single SVG and needs no picking. A raster logo ships
6225
+ * webp variants at 32/64/128/256/512px plus an original, and `minWidth` picks
6226
+ * the smallest variant that covers it — a 64px webp for a 40px render beats
6227
+ * the 250px original, and beats an upscaled 32px. When no variant covers
6228
+ * `minWidth`, the original is used rather than the largest variant: the
6229
+ * registry never upscales past it, and a render that wide is the one case an
6230
+ * original-sized image is right for. The smallest qualifying variant is
6231
+ * chosen by width rather than by position, so a registry that serves its
6232
+ * variants out of order still resolves the same answer. Defaults to 40, the
6233
+ * edge length `AssetIcon` renders a checkout asset at.
6234
+ */
6235
+ declare function tokenLogoUrl(logo: TokenLogo, minWidth?: number): AssetIconUrl | null;
6236
+ /**
6237
+ * The artwork a checkout shows for the asset an offer sells.
6238
+ *
6239
+ * Resolved from the public token registry when the caller has metadata for
6240
+ * the offered token — `(chain, address)` entries of `OfferDetail.tokens`
6241
+ * key a `coinlist.tokens.get` lookup, which `useCheckoutOfferTokenMetadata`
6242
+ * performs for checkout screens — and from the offer's own logo otherwise.
6243
+ * The registry logo wins when both exist, because it is the token's real
6244
+ * artwork where `Offer.logoUrl` is catalogue artwork; the offer logo stays
6245
+ * as the fallback for `tokenMetadata: null`, which covers every way the
6246
+ * registry answer can be absent: the token is unlisted, the lookup has not
6247
+ * settled, or it failed. `null` is returned only when neither source
6248
+ * carries one.
6249
+ */
6250
+ declare function offerAssetIconUrl(offer: OfferDetail, tokenMetadata: TokenMetadata | null): AssetIconUrl | null;
6110
6251
 
6111
6252
  /**
6112
6253
  * Date presentation helpers.
6113
6254
  *
6114
6255
  * Every function takes an explicit `locale`, the way
6115
- * `@/shared/core/blockchain/formatters` does: the UI layer never reads the
6256
+ * `@/universal/core/shared/blockchain/formatters` does: the UI layer never reads the
6116
6257
  * locale from React context, so it stays pure and testable. Callers get the
6117
6258
  * locale from `useLocale()` in a viewmodel and pass it down.
6118
6259
  */
@@ -6205,4 +6346,4 @@ interface UseCountdownOptions {
6205
6346
  */
6206
6347
  declare function useCountdown({ until, tickMs, enabled, }: UseCountdownOptions): number | null;
6207
6348
 
6208
- export { type AuthState, type AuthorizeWalletParams, ChecklistStatus, CheckoutAssetUi, type CheckoutConfig, type CheckoutConfirmedWalletUi, CheckoutContainer, type CheckoutContainerProps, type CheckoutCtaUi, type CheckoutEmbeddedWalletUi, type CheckoutNetworkUi, type CheckoutSelectableInputAssetUi, type CheckoutStatusUi, type CheckoutWalletSelection, type CheckoutWalletTypeUi, type CheckoutWalletUi, type ClientAuthConfig, type ClientAuthNamespace, ClientAuthNamespaceImpl, type ClientAuthSession, type ClientCoinListTokenSaleNamespace, ClientCoinListTokenSaleNamespaceImpl, type ClientConfig, type ClientOndoNamespace, ClientOndoNamespaceImpl, type ClientRequirementsNamespace, ClientRequirementsNamespaceImpl, type ClientSuperstateSwapNamespace, ClientSuperstateSwapNamespaceImpl, type ClientSupportNamespace, ClientSupportNamespaceImpl, type CoinListClient, CoinListClientInitializationError, CoinListContext, CoinListContextProvider, type CoinListContextValue, CoinListProvider, type CoinListProviderProps, CoinListSignInButton, CoinListSignInCardContainer, type CoinListSignInCardContainerProps, type CoinListSignInCardUiEvent, type CoinListSignInCardUiState, CoinListSignInCardView, type CoinListSignInCardViewProps, CoinListStyleScope, type CoinListStyleScopeProps, type CoinListTokenSaleCheckoutConfig, type CompleteOAuthFailureReason, ConnectWallet, type ConnectWalletError, type ConnectWalletErrorCode, type ConnectWalletFlowError, type ConnectWalletFlowParams, type ConnectWalletFlowResult, ConnectWalletModalContainer, type ConnectWalletModalContainerProps, type ConnectWalletModalUiEvent, type ConnectWalletModalUiState, ConnectWalletModalView, type ConnectWalletModalViewProps, type ConnectWalletPhase, type ConnectWalletScreenUi, type ConnectWalletSignState, type ConnectWalletState, ConnectedWalletList, type ConnectedWalletListProps, type ConnectedWalletUi, ERC20_BALANCE_POLL_INTERVAL_MS, type Erc20AllowanceError, type Erc20AllowancePhase, type Erc20AllowanceResult, type Erc20ApprovalError, EvmWallet, type ExecuteOndoSwapParams, type ExecuteSwapParams, type ExecuteTokenSaleParams, IdentityVerificationContainer, type IdentityVerificationContainerProps, type IdentityVerificationUiEvent, type IdentityVerificationUiState, IdentityVerificationView, type IdentityVerificationViewProps, KycLevelName, type KycTokenErrorReason, type KycTokenState, type LoadOfferDetailsReason, type LoadOfferDetailsState, type LoadOffersReason, type LoadOffersState, type LoadOndoBuyTransactionState, type LoadOndoPriceState, type LoadOndoSellTransactionState, type LoadOndoTradingStatusState, type LoadOptionAddressesReason, type LoadOptionAddressesState, type LoadParticipationsReason, type LoadParticipationsState, type LoadRequirementsReason, type LoadRequirementsState, type LoadTokenMetadataState, Logger, OAUTH_CODE_VERIFIER_KEY, OAUTH_STATE_KEY, type OauthClientErrorReason, type OauthClientResult, OfferAssetCard, type OfferAssetCardProps, OfferAssetCardUi, OfferSaleCard, type OfferSaleCardProps, OfferSaleCardUi, OffersAssetGrid, type OffersAssetGridProps, OffersGridContainer, type OffersGridContainerProps, type OffersGridUiEvent, type OffersGridUiState, OffersGridView, type OffersGridViewProps, type OndoBuyAmountConfirmed, type OndoBuyAmountStepInput, type OndoBuyAmountUiEvent, type OndoBuyAmountUiState, type OndoBuyAmountValidation, OndoBuyAmountView, type OndoBuyAmountViewProps, OndoBuyCheckoutContainer, type OndoBuyCheckoutContainerProps, type OndoBuyCheckoutUiEvent, type OndoBuyCheckoutUiState, OndoBuyCheckoutView, type OndoBuyCheckoutViewProps, type OndoBuyExecutionResult, OndoBuyOrderConfirmed, type OndoBuyOrderPlaced, type OndoBuyOrderTerms, type OndoBuyPreparationResult, type OndoBuyQuoteStatusUi, type OndoBuyReviewStepInput, type OndoBuyReviewUiEvent, type OndoBuyReviewUiState, OndoBuyReviewView, type OndoBuyReviewViewProps, type OndoBuyStep, type OndoCheckoutConfig, OndoCheckoutError, type OndoCheckoutErrorProps, type OndoCheckoutErrorReason, type OndoLoadErrorReason, type OndoOrderConfirmedProps, type OndoOrderConfirmedUiEvent, type OndoOrderConfirmedUiState, type OndoOrderPlaced, type OndoOrderPlacedCore, type OndoSellAmountConfirmed, type OndoSellAmountStepInput, type OndoSellAmountUiEvent, type OndoSellAmountUiState, type OndoSellAmountValidation, OndoSellAmountView, type OndoSellAmountViewProps, type OndoSellAsset, type OndoSellBalanceUi, OndoSellCheckoutContainer, type OndoSellCheckoutContainerProps, type OndoSellCheckoutUiEvent, type OndoSellCheckoutUiState, OndoSellCheckoutView, type OndoSellCheckoutViewProps, type OndoSellExecutionResult, OndoSellOrderConfirmed, type OndoSellOrderConfirmedProps, type OndoSellOrderConfirmedUiEvent, type OndoSellOrderConfirmedUiState, type OndoSellOrderPlaced, type OndoSellOrderTerms, type OndoSellOutcomeUi, type OndoSellPreparationResult, type OndoSellQuoteStatusUi, type OndoSellReviewStepInput, type OndoSellReviewUiEvent, type OndoSellReviewUiState, OndoSellReviewView, type OndoSellReviewViewProps, type OndoSellSourceWalletUi, type OndoSellStep, type OndoSidebarPriceUi, type OndoSidebarUiState, OndoSidebarView, type OndoSidebarViewProps, type OndoSwapExecutionError, type OndoSwapExecutionPhase, type OndoSwapExecutionResult, type OndoSwapPreparationError, type OndoSwapPreparationPhase, type OndoSwapPreparationResult, type OndoWalletSelectStepInput, type OndoWalletSelectUiEvent, type OndoWalletSelectUiState, OndoWalletSelectView, type OndoWalletSelectViewProps, PinoLoggerOptions, type PrepareOndoBuyParams, type PrepareOndoSellParams, type PrepareOndoSwapParamsCore, type RequiredCheckoutConfig, RequirementItem, type RequirementItemProps, RequirementItemUi, RequirementStatus, RequirementVariant, RequirementsChecklistContainer, type RequirementsChecklistContainerProps, type RequirementsChecklistItemUi, type RequirementsChecklistUiEvent, type RequirementsChecklistUiState, RequirementsChecklistView, type RequirementsChecklistViewProps, type RequirementsData, type RequirementsVerificationUi, type SignState, SlippagePicker, type SlippagePickerProps, type SubmitErc20ApprovalResult, type SuperstateAmountConfirmed, type SuperstateAmountStepInput, type SuperstateAmountUiEvent, type SuperstateAmountUiState, type SuperstateAmountValidation, SuperstateAmountView, type SuperstateAmountViewProps, type SuperstateCheckoutConfig, SuperstateOrderConfirmed, type SuperstateOrderConfirmedProps, type SuperstateOrderConfirmedUiEvent, type SuperstateOrderConfirmedUiState, type SuperstateOrderPlaced, type SuperstateReviewStepInput, type SuperstateReviewUiEvent, type SuperstateReviewUiState, SuperstateReviewView, type SuperstateReviewViewProps, type SuperstateSidebarPriceUi, type SuperstateSidebarUiState, SuperstateSidebarView, type SuperstateSidebarViewProps, type SuperstateSlippageOptionUi, type SuperstateSlippageUi, SuperstateSwapCheckoutContainer, type SuperstateSwapCheckoutContainerProps, type SuperstateSwapCheckoutRetryUiEvent, type SuperstateSwapCheckoutUiEvent, type SuperstateSwapCheckoutUiState, SuperstateSwapCheckoutView, type SuperstateSwapCheckoutViewProps, type SuperstateSwapLoadErrorReason, type SuperstateSwapStep, type SuperstateWalletStepInput, type SuperstateWalletUiEvent, type SuperstateWalletUiState, SuperstateWalletView, type SuperstateWalletViewProps, type SwapExecutionError, type SwapExecutionPhase, type SwapExecutionResult, type SwapOutputTokenState, type TaxDocumentAddressParts, type TaxDocumentFieldUi, type TaxDocumentFields, TaxDocumentModalContainer, type TaxDocumentModalContainerProps, type TaxDocumentModalUiEvent, type TaxDocumentModalUiState, TaxDocumentModalView, type TaxDocumentModalViewProps, type TaxDocumentScreenUi, type TaxDocumentState, type TokenSaleExecutionError, type TokenSaleExecutionPhase, type TokenSaleExecutionResult, USDC_ICON_URL, USDT_ICON_URL, type UseCoinListResult, type UseCoinListSignInCardViewModelOptions, type UseCoinListSignInCardViewModelResult, type UseCompleteOAuthOptions, type UseConnectWalletModalViewModelOptions, type UseConnectWalletModalViewModelResult, type UseConnectWalletOptions, type UseConnectWalletResult, type UseCountdownOptions, type UseErc20BalanceOptions, type UseErc20BalanceResult, type UseErc20TokenBalancesOptions, type UseErc20TokenBalancesResult, type UseIdentityVerificationViewModelOptions, type UseIdentityVerificationViewModelResult, type UseKycTokenResult, type UseOfferDetailsOptions, type UseOfferDetailsResult, type UseOffersGridViewModelOptions, type UseOffersGridViewModelResult, type UseOffersOptions, type UseOffersResult, type UseOndoBuyAmountViewModelOptions, type UseOndoBuyAmountViewModelResult, type UseOndoBuyCheckoutViewModelOptions, type UseOndoBuyCheckoutViewModelResult, type UseOndoBuyReviewViewModelOptions, type UseOndoBuyReviewViewModelResult, type UseOndoBuyTransactionOptions, type UseOndoBuyTransactionResult, type UseOndoPriceOptions, type UseOndoPriceResult, type UseOndoSellAmountViewModelOptions, type UseOndoSellAmountViewModelResult, type UseOndoSellCheckoutViewModelOptions, type UseOndoSellCheckoutViewModelResult, type UseOndoSellReviewViewModelOptions, type UseOndoSellReviewViewModelResult, type UseOndoSellTransactionOptions, type UseOndoSellTransactionResult, type UseOndoSidebarViewModelOptions, type UseOndoSidebarViewModelResult, type UseOndoTradingStatusOptions, type UseOndoTradingStatusResult, type UseOndoWalletSelectViewModelOptions, type UseOndoWalletSelectViewModelResult, type UseOptionAddressesOptions, type UseOptionAddressesResult, type UseParticipationsOptions, type UseParticipationsResult, type UseRequirementsChecklistViewModelOptions, type UseRequirementsChecklistViewModelResult, type UseRequirementsOptions, type UseRequirementsResult, type UseSuperstateAmountViewModelOptions, type UseSuperstateAmountViewModelResult, type UseSuperstateReviewViewModelOptions, type UseSuperstateReviewViewModelResult, type UseSuperstateSidebarViewModelOptions, type UseSuperstateSidebarViewModelResult, type UseSuperstateSwapCheckoutViewModelOptions, type UseSuperstateSwapCheckoutViewModelResult, type UseSuperstateWalletViewModelOptions, type UseSuperstateWalletViewModelResult, type UseSwapOutputTokenOptions, type UseSwapOutputTokenResult, type UseSwapQuoteOptions, type UseSwapQuoteResult, type UseTaxDocumentModalViewModelOptions, type UseTaxDocumentModalViewModelResult, type UseTaxDocumentOptions, type UseTaxDocumentResult, type UseTokenMetadataOptions, type UseTokenMetadataResult, VerificationOverlay, type VerificationOverlayProps, type WalletAuthorizationError, type WalletAuthorizationPhase, type WalletAuthorizationResult, WalletError, type WalletsStatus, authorizeWallet, classifyWalletError, connectExternalWalletFlow, createCoinListClient, defaultCheckoutConfig, ensureErc20Allowance, executeOndoSwap, executeSwap, executeTokenSale, formatCountdown, formatMonthYear, formatSaleCardCountdown, offerIconUrl, ondoLoadErrorReason, pinoClientLogger, prepareOndoBuy, prepareOndoSell, quoteIsStale, quoteOverAsks, stablecoinIconUrl, submitErc20Approval, useCoinList, useCoinListSignInCardViewModel, useCompleteOAuth, useConnectWallet, useConnectWalletModalViewModel, useCountdown, useErc20Balance, useErc20TokenBalances, useIdentityVerificationViewModel, useKycToken, useOfferDetails, useOffers, useOffersGridViewModel, useOndoBuyAmountViewModel, useOndoBuyCheckoutViewModel, useOndoBuyReviewViewModel, useOndoBuyTransaction, useOndoPrice, useOndoSellAmountViewModel, useOndoSellCheckoutViewModel, useOndoSellReviewViewModel, useOndoSellTransaction, useOndoSidebarViewModel, useOndoTradingStatus, useOndoWalletSelectViewModel, useOptionAddresses, useParticipations, useRequirements, useRequirementsChecklistViewModel, useSuperstateAmountViewModel, useSuperstateReviewViewModel, useSuperstateSidebarViewModel, useSuperstateSwapCheckoutViewModel, useSuperstateWalletViewModel, useSwapOutputToken, useSwapQuote, useTaxDocument, useTaxDocumentModalViewModel, useTokenMetadata, validateAmount, validateSellAmount, validateSuperstateAmount };
6349
+ export { type AuthState, type AuthorizeWalletParams, ChecklistStatus, CheckoutAssetUi, type CheckoutConfig, type CheckoutConfirmedWalletUi, CheckoutContainer, type CheckoutContainerProps, type CheckoutCtaUi, type CheckoutEmbeddedWalletUi, type CheckoutNetworkUi, type CheckoutSelectableInputAssetUi, type CheckoutStatusUi, type CheckoutWalletSelection, type CheckoutWalletTypeUi, type CheckoutWalletUi, type ClientAuthConfig, type ClientAuthNamespace, ClientAuthNamespaceImpl, type ClientAuthSession, type ClientCoinListTokenSaleNamespace, ClientCoinListTokenSaleNamespaceImpl, type ClientConfig, type ClientOndoNamespace, ClientOndoNamespaceImpl, type ClientRequirementsNamespace, ClientRequirementsNamespaceImpl, type ClientSuperstateSwapNamespace, ClientSuperstateSwapNamespaceImpl, type ClientSupportNamespace, ClientSupportNamespaceImpl, type CoinListClient, CoinListClientInitializationError, CoinListContext, CoinListContextProvider, type CoinListContextValue, CoinListProvider, type CoinListProviderProps, CoinListSignInButton, CoinListSignInCardContainer, type CoinListSignInCardContainerProps, type CoinListSignInCardUiEvent, type CoinListSignInCardUiState, CoinListSignInCardView, type CoinListSignInCardViewProps, CoinListStyleScope, type CoinListStyleScopeProps, type CoinListTokenSaleCheckoutConfig, type CompleteOAuthFailureReason, ConnectWallet, type ConnectWalletError, type ConnectWalletErrorCode, type ConnectWalletFlowError, type ConnectWalletFlowParams, type ConnectWalletFlowResult, ConnectWalletModalContainer, type ConnectWalletModalContainerProps, type ConnectWalletModalUiEvent, type ConnectWalletModalUiState, ConnectWalletModalView, type ConnectWalletModalViewProps, type ConnectWalletPhase, type ConnectWalletScreenUi, type ConnectWalletSignState, type ConnectWalletState, ConnectedWalletList, type ConnectedWalletListProps, type ConnectedWalletUi, ERC20_BALANCE_POLL_INTERVAL_MS, type Erc20AllowanceError, type Erc20AllowancePhase, type Erc20AllowanceResult, type Erc20ApprovalError, EvmWallet, type ExecuteOndoSwapParams, type ExecuteSwapParams, type ExecuteTokenSaleParams, IdentityVerificationContainer, type IdentityVerificationContainerProps, type IdentityVerificationUiEvent, type IdentityVerificationUiState, IdentityVerificationView, type IdentityVerificationViewProps, KycLevelName, type KycTokenErrorReason, type KycTokenState, type LoadOfferDetailsReason, type LoadOfferDetailsState, type LoadOffersReason, type LoadOffersState, type LoadOndoBuyTransactionState, type LoadOndoPriceState, type LoadOndoSellTransactionState, type LoadOndoTradingStatusState, type LoadOptionAddressesReason, type LoadOptionAddressesState, type LoadParticipationsReason, type LoadParticipationsState, type LoadRequirementsReason, type LoadRequirementsState, type LoadTokenMetadataState, Logger, OAUTH_CODE_VERIFIER_KEY, OAUTH_STATE_KEY, type OauthClientErrorReason, type OauthClientResult, OfferAssetCard, type OfferAssetCardProps, OfferAssetCardUi, OfferSaleCard, type OfferSaleCardProps, OfferSaleCardUi, OffersAssetGrid, type OffersAssetGridProps, OffersGridContainer, type OffersGridContainerProps, type OffersGridUiEvent, type OffersGridUiState, OffersGridView, type OffersGridViewProps, type OndoBuyAmountConfirmed, type OndoBuyAmountStepInput, type OndoBuyAmountUiEvent, type OndoBuyAmountUiState, type OndoBuyAmountValidation, OndoBuyAmountView, type OndoBuyAmountViewProps, OndoBuyCheckoutContainer, type OndoBuyCheckoutContainerProps, type OndoBuyCheckoutUiEvent, type OndoBuyCheckoutUiState, OndoBuyCheckoutView, type OndoBuyCheckoutViewProps, type OndoBuyExecutionResult, OndoBuyOrderConfirmed, type OndoBuyOrderPlaced, type OndoBuyOrderTerms, type OndoBuyPreparationResult, type OndoBuyQuoteStatusUi, type OndoBuyReviewStepInput, type OndoBuyReviewUiEvent, type OndoBuyReviewUiState, OndoBuyReviewView, type OndoBuyReviewViewProps, type OndoBuyStep, type OndoCheckoutConfig, OndoCheckoutError, type OndoCheckoutErrorProps, type OndoCheckoutErrorReason, type OndoLoadErrorReason, type OndoOrderConfirmedProps, type OndoOrderConfirmedUiEvent, type OndoOrderConfirmedUiState, type OndoOrderPlaced, type OndoOrderPlacedCore, type OndoSellAmountConfirmed, type OndoSellAmountStepInput, type OndoSellAmountUiEvent, type OndoSellAmountUiState, type OndoSellAmountValidation, OndoSellAmountView, type OndoSellAmountViewProps, type OndoSellAsset, type OndoSellBalanceUi, OndoSellCheckoutContainer, type OndoSellCheckoutContainerProps, type OndoSellCheckoutUiEvent, type OndoSellCheckoutUiState, OndoSellCheckoutView, type OndoSellCheckoutViewProps, type OndoSellExecutionResult, OndoSellOrderConfirmed, type OndoSellOrderConfirmedProps, type OndoSellOrderConfirmedUiEvent, type OndoSellOrderConfirmedUiState, type OndoSellOrderPlaced, type OndoSellOrderTerms, type OndoSellOutcomeUi, type OndoSellPreparationResult, type OndoSellQuoteStatusUi, type OndoSellReviewStepInput, type OndoSellReviewUiEvent, type OndoSellReviewUiState, OndoSellReviewView, type OndoSellReviewViewProps, type OndoSellSourceWalletUi, type OndoSellStep, type OndoSidebarPriceUi, type OndoSidebarUiState, OndoSidebarView, type OndoSidebarViewProps, type OndoSwapExecutionError, type OndoSwapExecutionPhase, type OndoSwapExecutionResult, type OndoSwapPreparationError, type OndoSwapPreparationPhase, type OndoSwapPreparationResult, type OndoWalletSelectStepInput, type OndoWalletSelectUiEvent, type OndoWalletSelectUiState, OndoWalletSelectView, type OndoWalletSelectViewProps, PinoLoggerOptions, type PrepareOndoBuyParams, type PrepareOndoSellParams, type PrepareOndoSwapParamsCore, type RequiredCheckoutConfig, RequirementItem, type RequirementItemProps, RequirementItemUi, RequirementStatus, RequirementVariant, RequirementsChecklistContainer, type RequirementsChecklistContainerProps, type RequirementsChecklistItemUi, type RequirementsChecklistUiEvent, type RequirementsChecklistUiState, RequirementsChecklistView, type RequirementsChecklistViewProps, type RequirementsData, type RequirementsVerificationUi, type SignState, SlippagePicker, type SlippagePickerProps, type SubmitErc20ApprovalResult, type SuperstateAmountConfirmed, type SuperstateAmountStepInput, type SuperstateAmountUiEvent, type SuperstateAmountUiState, type SuperstateAmountValidation, SuperstateAmountView, type SuperstateAmountViewProps, type SuperstateCheckoutConfig, SuperstateOrderConfirmed, type SuperstateOrderConfirmedProps, type SuperstateOrderConfirmedUiEvent, type SuperstateOrderConfirmedUiState, type SuperstateOrderPlaced, type SuperstateReviewStepInput, type SuperstateReviewUiEvent, type SuperstateReviewUiState, SuperstateReviewView, type SuperstateReviewViewProps, type SuperstateSidebarPriceUi, type SuperstateSidebarUiState, SuperstateSidebarView, type SuperstateSidebarViewProps, type SuperstateSlippageOptionUi, type SuperstateSlippageUi, SuperstateSwapCheckoutContainer, type SuperstateSwapCheckoutContainerProps, type SuperstateSwapCheckoutRetryUiEvent, type SuperstateSwapCheckoutUiEvent, type SuperstateSwapCheckoutUiState, SuperstateSwapCheckoutView, type SuperstateSwapCheckoutViewProps, type SuperstateSwapLoadErrorReason, type SuperstateSwapStep, type SuperstateWalletStepInput, type SuperstateWalletUiEvent, type SuperstateWalletUiState, SuperstateWalletView, type SuperstateWalletViewProps, type SwapExecutionError, type SwapExecutionPhase, type SwapExecutionResult, type SwapOutputTokenState, type TaxDocumentAddressParts, type TaxDocumentFieldUi, type TaxDocumentFields, TaxDocumentModalContainer, type TaxDocumentModalContainerProps, type TaxDocumentModalUiEvent, type TaxDocumentModalUiState, TaxDocumentModalView, type TaxDocumentModalViewProps, type TaxDocumentScreenUi, type TaxDocumentState, type TokenSaleExecutionError, type TokenSaleExecutionPhase, type TokenSaleExecutionResult, USDC_ICON_URL, USDT_ICON_URL, type UseCheckoutOfferTokenMetadataOptions, type UseCheckoutOfferTokenMetadataResult, type UseCoinListResult, type UseCoinListSignInCardViewModelOptions, type UseCoinListSignInCardViewModelResult, type UseCompleteOAuthOptions, type UseConnectWalletModalViewModelOptions, type UseConnectWalletModalViewModelResult, type UseConnectWalletOptions, type UseConnectWalletResult, type UseCountdownOptions, type UseErc20BalanceOptions, type UseErc20BalanceResult, type UseErc20TokenBalancesOptions, type UseErc20TokenBalancesResult, type UseIdentityVerificationViewModelOptions, type UseIdentityVerificationViewModelResult, type UseKycTokenResult, type UseOfferDetailsOptions, type UseOfferDetailsResult, type UseOffersGridViewModelOptions, type UseOffersGridViewModelResult, type UseOffersOptions, type UseOffersResult, type UseOndoBuyAmountViewModelOptions, type UseOndoBuyAmountViewModelResult, type UseOndoBuyCheckoutViewModelOptions, type UseOndoBuyCheckoutViewModelResult, type UseOndoBuyReviewViewModelOptions, type UseOndoBuyReviewViewModelResult, type UseOndoBuyTransactionOptions, type UseOndoBuyTransactionResult, type UseOndoPriceOptions, type UseOndoPriceResult, type UseOndoSellAmountViewModelOptions, type UseOndoSellAmountViewModelResult, type UseOndoSellCheckoutViewModelOptions, type UseOndoSellCheckoutViewModelResult, type UseOndoSellReviewViewModelOptions, type UseOndoSellReviewViewModelResult, type UseOndoSellTransactionOptions, type UseOndoSellTransactionResult, type UseOndoSidebarViewModelOptions, type UseOndoSidebarViewModelResult, type UseOndoTradingStatusOptions, type UseOndoTradingStatusResult, type UseOndoWalletSelectViewModelOptions, type UseOndoWalletSelectViewModelResult, type UseOptionAddressesOptions, type UseOptionAddressesResult, type UseParticipationsOptions, type UseParticipationsResult, type UseRequirementsChecklistViewModelOptions, type UseRequirementsChecklistViewModelResult, type UseRequirementsOptions, type UseRequirementsResult, type UseSuperstateAmountViewModelOptions, type UseSuperstateAmountViewModelResult, type UseSuperstateReviewViewModelOptions, type UseSuperstateReviewViewModelResult, type UseSuperstateSidebarViewModelOptions, type UseSuperstateSidebarViewModelResult, type UseSuperstateSwapCheckoutViewModelOptions, type UseSuperstateSwapCheckoutViewModelResult, type UseSuperstateWalletViewModelOptions, type UseSuperstateWalletViewModelResult, type UseSwapOutputTokenOptions, type UseSwapOutputTokenResult, type UseSwapQuoteOptions, type UseSwapQuoteResult, type UseTaxDocumentModalViewModelOptions, type UseTaxDocumentModalViewModelResult, type UseTaxDocumentOptions, type UseTaxDocumentResult, type UseTokenMetadataOptions, type UseTokenMetadataResult, VerificationOverlay, type VerificationOverlayProps, type WalletAuthorizationError, type WalletAuthorizationPhase, type WalletAuthorizationResult, WalletError, type WalletsStatus, authorizeWallet, classifyWalletError, connectExternalWalletFlow, createCoinListClient, defaultCheckoutConfig, ensureErc20Allowance, executeOndoSwap, executeSwap, executeTokenSale, formatCountdown, formatMonthYear, formatSaleCardCountdown, offerAssetIconUrl, offerIconUrl, offerTokenIdentifier, ondoLoadErrorReason, pinoClientLogger, prepareOndoBuy, prepareOndoSell, quoteIsStale, quoteOverAsks, stablecoinIconUrl, submitErc20Approval, tokenLogoUrl, tokenMetadataOf, useCheckoutOfferTokenMetadata, useCoinList, useCoinListSignInCardViewModel, useCompleteOAuth, useConnectWallet, useConnectWalletModalViewModel, useCountdown, useErc20Balance, useErc20TokenBalances, useIdentityVerificationViewModel, useKycToken, useOfferDetails, useOffers, useOffersGridViewModel, useOndoBuyAmountViewModel, useOndoBuyCheckoutViewModel, useOndoBuyReviewViewModel, useOndoBuyTransaction, useOndoPrice, useOndoSellAmountViewModel, useOndoSellCheckoutViewModel, useOndoSellReviewViewModel, useOndoSellTransaction, useOndoSidebarViewModel, useOndoTradingStatus, useOndoWalletSelectViewModel, useOptionAddresses, useParticipations, useRequirements, useRequirementsChecklistViewModel, useSuperstateAmountViewModel, useSuperstateReviewViewModel, useSuperstateSidebarViewModel, useSuperstateSwapCheckoutViewModel, useSuperstateWalletViewModel, useSwapOutputToken, useSwapQuote, useTaxDocument, useTaxDocumentModalViewModel, useTokenMetadata, validateAmount, validateSellAmount, validateSuperstateAmount };