@coinlist-co/react 0.12.2-rc.7b430dd → 0.12.2-rc.8a0d02a

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 (31) hide show
  1. package/dist/{chunk-DCW7NQXH.js → chunk-3WW5FLT7.js} +52 -19
  2. package/dist/chunk-3WW5FLT7.js.map +1 -0
  3. package/dist/{chunk-MOE5S6CE.js → chunk-C6GF7MDF.js} +915 -458
  4. package/dist/chunk-C6GF7MDF.js.map +1 -0
  5. package/dist/{chunk-VH34YC3Q.js → chunk-IZJ4JSSC.js} +78 -4
  6. package/dist/chunk-IZJ4JSSC.js.map +1 -0
  7. package/dist/client/index.cjs +12103 -8452
  8. package/dist/client/index.cjs.map +1 -1
  9. package/dist/client/index.d.cts +1640 -37
  10. package/dist/client/index.d.ts +1640 -37
  11. package/dist/client/index.js +7923 -4800
  12. package/dist/client/index.js.map +1 -1
  13. package/dist/server/index.cjs +789 -142
  14. package/dist/server/index.cjs.map +1 -1
  15. package/dist/server/index.d.cts +69 -41
  16. package/dist/server/index.d.ts +69 -41
  17. package/dist/server/index.js +323 -65
  18. package/dist/server/index.js.map +1 -1
  19. package/dist/{tokens-namespace-CIWBtgt2.d.cts → time-CVZpAkGY.d.cts} +878 -192
  20. package/dist/{tokens-namespace-CIWBtgt2.d.ts → time-CVZpAkGY.d.ts} +878 -192
  21. package/dist/{token-registry-snapshot-BNBNuDu1.d.ts → token-registry-snapshot-BkwA8KmD.d.ts} +74 -8
  22. package/dist/{token-registry-snapshot-CqI6dXM_.d.cts → token-registry-snapshot-bR14QehS.d.cts} +74 -8
  23. package/dist/universal/index.cjs +982 -448
  24. package/dist/universal/index.cjs.map +1 -1
  25. package/dist/universal/index.d.cts +91 -5
  26. package/dist/universal/index.d.ts +91 -5
  27. package/dist/universal/index.js +44 -2
  28. package/package.json +1 -1
  29. package/dist/chunk-DCW7NQXH.js.map +0 -1
  30. package/dist/chunk-MOE5S6CE.js.map +0 -1
  31. package/dist/chunk-VH34YC3Q.js.map +0 -1
@@ -1,9 +1,9 @@
1
1
  import * as react from 'react';
2
2
  import { ReactNode, ButtonHTMLAttributes } from 'react';
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 OndoSwapOfferDetail, H as CoinListTokenSaleOfferDetail, I as SuperstateSwapOfferDetail, J as Offer, K as RequirementStatusInfo, M as RequirementType, N as RequirementStatusValue, Q as OfferOptionAddress, V as RequirementId, X as KycLevelName, Y as DocumentSubmission, Z as WalletChallengeType, _ as PinoLoggerOptions, $ as OndoTradingStatus, a0 as AssetDecimals, a1 as BuildOndoBuyParams, a2 as BuildOndoSellParams, a3 as OndoQuote, a4 as OndoQuoteSize, a5 as TokenIdentifier, a6 as OfferOptionAddressId, a7 as TokenLogo } from '../tokens-namespace-CIWBtgt2.js';
4
- export { a8 as DebugEvent, a9 as FrontlineEventId, aa as HttpError, ab as HttpResponse, ac as KycToken, ad as LogBinding, ae as LogBindings, af as LogCause, ag as LogLevel, ah as LogScope, ai as LogValue, aj as ProductionLogLevel, ak as RedactedWalletError, al as RequestId, am as RpcFailureReason, an as SafeEvent, ao as SafeFields, ap as UnredactedFields } from '../tokens-namespace-CIWBtgt2.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, c as TokenRegistrySnapshot } from '../token-registry-snapshot-BNBNuDu1.js';
6
- export { B as BroadcastTxParams, d as EvmSigner, W as WriteContractParams } from '../token-registry-snapshot-BNBNuDu1.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 CentrifugeNamespace, d as AssetSymbol, O as OfferVaultContract, e as CentrifugeVaultBuyTransaction, f as CentrifugeClaimDirection, g as CentrifugeNamespaceImpl, U as UniversalNamespaceContext, h as CoinListTokenSaleNamespace, i as OfferId, j as OfferOptionId, k as AssetId, P as Participation, l as CoinListTokenSaleNamespaceImpl, m as OndoNamespace, n as OfferSwapContract, o as OndoBuyTransaction, p as OndoSellTransaction, q as OndoSwapTransactionCore, r as OrderBookSide, s as OndoNamespaceImpl, S as SuperstateSwapNamespace, t as WalletsNamespace, u as Bps, v as EvmWalletAddress, w as SuperstateSwapNamespaceImpl, R as RequirementsNamespace, x as Requirement, y as RequirementsNamespaceImpl, z as Config, D as OAuthAccessToken, F as OffersNamespace, T as TokensNamespace, G as StablecoinSymbol, H as Erc20Asset, I as OfferDetail, J as TokenMetadata, K as CentrifugeVaultOfferDetail, M as OfferType, N as OndoSwapOfferDetail, Q as CoinListTokenSaleOfferDetail, V as SuperstateSwapOfferDetail, X as CentrifugeVaultLegId, Y as Seconds, Z as AsyncOfferType, _ as AsyncOfferDetail, $ as Offer, a0 as RequirementStatusInfo, a1 as RequirementType, a2 as RequirementStatusValue, a3 as OfferOptionAddress, a4 as RequirementId, a5 as KycLevelName, a6 as DocumentSubmission, a7 as WalletChallengeType, a8 as PinoLoggerOptions, a9 as AssetDecimals, aa as BuildCentrifugeVaultBuyParams, ab as CentrifugeOrderReason, ac as CentrifugeOrderability, ad as OndoTradingStatus, ae as BuildOndoBuyParams, af as BuildOndoSellParams, ag as OndoQuote, ah as OndoQuoteSize, ai as TokenIdentifier, aj as CentrifugeVaultLeg, ak as OfferOptionAddressId, al as CentrifugeVaultStatus, am as TokenLogo } from '../time-CVZpAkGY.js';
4
+ export { an as DebugEvent, ao as FrontlineEventId, ap as HttpError, aq as HttpResponse, ar as KycToken, as as LogBinding, at as LogBindings, au as LogCause, av as LogLevel, aw as LogScope, ax as LogValue, ay as ProductionLogLevel, az as RedactedWalletError, aA as RequestId, aB as RpcFailureReason, aC as SafeEvent, aD as SafeFields, aE as UnredactedFields } from '../time-CVZpAkGY.js';
5
+ import { P as PKCEConfig, E as EvmWallet, S as SwapQuote, A as AssetIconUrl, F as FormattedAmountAssetUi, a as ShortenedWalletAddress, b as FormattedPercentUi, T as TxExplorerUrl, W as WalletSelection, c as WalletLabelResolver, C as ConnectWallet, N as NonEmptyArray, d as TokenRegistrySnapshot } from '../token-registry-snapshot-BkwA8KmD.js';
6
+ export { B as BroadcastTxParams, e as EvmSigner, f as ExternalWalletAdapter, g as WriteContractParams } from '../token-registry-snapshot-BkwA8KmD.js';
7
7
  import { Hash } from 'viem';
8
8
  import * as class_variance_authority_types from 'class-variance-authority/types';
9
9
  import { VariantProps } from 'class-variance-authority';
@@ -165,6 +165,267 @@ declare function submitErc20Approval<Phase extends string>(args: {
165
165
  emit: (phase: Phase) => void;
166
166
  }): Promise<SubmitErc20ApprovalResult>;
167
167
 
168
+ /**
169
+ * Progress phases emitted while a request is being prepared, in order. An
170
+ * allowance that already covers the deposit skips the approval phases.
171
+ */
172
+ type CentrifugeBuyPreparationPhase = Erc20AllowancePhase | 'building-transaction';
173
+ /**
174
+ * A step-tagged reason a preparation failed.
175
+ *
176
+ * `insufficient-allowance` is the one with a remedy that is not a new
177
+ * approval: the approval this flow just mined is not the one frontline sees,
178
+ * usually because its node is a block behind. Retrying reads it again.
179
+ */
180
+ type CentrifugeBuyPreparationError = {
181
+ step: 'unsupported-chain';
182
+ chain: EthereumChain;
183
+ } | Erc20AllowanceError | {
184
+ step: 'insufficient-allowance';
185
+ } | {
186
+ step: 'build-transaction';
187
+ };
188
+ type CentrifugeBuyPreparationResult = {
189
+ type: 'success';
190
+ transaction: CentrifugeVaultBuyTransaction;
191
+ } | {
192
+ type: 'error';
193
+ error: CentrifugeBuyPreparationError;
194
+ };
195
+ type PrepareCentrifugeBuyParams = {
196
+ centrifuge: CentrifugeNamespace;
197
+ erc20: Erc20Namespace;
198
+ wallet: EvmWallet;
199
+ /** The vault's share token symbol, e.g. `deJTRSY`. */
200
+ symbol: AssetSymbol;
201
+ chain: EthereumChain;
202
+ /**
203
+ * The offer's `vault_contracts`. The proxy is the spender, and it has to be
204
+ * known before the buy response arrives: the approval mines first, and
205
+ * `tx.to` comes too late to approve against.
206
+ */
207
+ vaultContracts: OfferVaultContract[];
208
+ /** The funding token being spent. Approval only; frontline resolves its own. */
209
+ tokenAddress: EvmContractAddress;
210
+ /** How much of the funding token to deposit, in its base units. */
211
+ amount: BlockchainAmount;
212
+ onProgress?: (phase: CentrifugeBuyPreparationPhase) => void;
213
+ };
214
+ /**
215
+ * Gets a deposit ready to broadcast: ensures the vault proxy may pull
216
+ * `amount` of the funding token, then builds the calldata that queues the
217
+ * request.
218
+ *
219
+ * The review step runs this when the user places the request, not when they
220
+ * confirm the amount. Approving on the amount step would make them sign
221
+ * again if they edit the amount. The allowance still has to land before the
222
+ * build: frontline refuses calldata the proxy cannot pull.
223
+ *
224
+ * Total: every failure is returned step-tagged rather than thrown.
225
+ */
226
+ declare function prepareCentrifugeBuy(params: PrepareCentrifugeBuyParams): Promise<CentrifugeBuyPreparationResult>;
227
+ /** Progress phases emitted by {@link placeCentrifugeRequest}, in order. */
228
+ type CentrifugeBuyPlacementPhase = 'broadcasting-request' | 'confirming-request';
229
+ /**
230
+ * A step-tagged reason {@link placeCentrifugeRequest} failed.
231
+ *
232
+ * `request-expired` is a refusal to broadcast: the deadline is inside the
233
+ * calldata, so sending it would revert and cost gas. A null deadline never
234
+ * takes this arm.
235
+ *
236
+ * `request` means the wallet never sent it, so placing again is safe.
237
+ * `request-unconfirmed` means it was sent and the receipt wait failed: the
238
+ * deposit may still mine, and placing again can queue a second one.
239
+ */
240
+ type CentrifugeBuyPlacementError = {
241
+ step: 'request-expired';
242
+ } | {
243
+ step: 'request';
244
+ cause: WalletError;
245
+ } | {
246
+ step: 'request-unconfirmed';
247
+ txHash: Hash;
248
+ cause: WalletError;
249
+ } | {
250
+ step: 'request-reverted';
251
+ };
252
+ type CentrifugeBuyPlacementResult = {
253
+ type: 'success';
254
+ txHash: Hash;
255
+ transaction: CentrifugeVaultBuyTransaction;
256
+ } | {
257
+ type: 'error';
258
+ error: CentrifugeBuyPlacementError;
259
+ };
260
+ type PlaceCentrifugeRequestParams = {
261
+ wallet: EvmWallet;
262
+ /**
263
+ * The request to place, from {@link prepareCentrifugeBuy}. Broadcasting it
264
+ * queues the deposit. It does not buy shares.
265
+ */
266
+ transaction: CentrifugeVaultBuyTransaction;
267
+ /** The chain it was built for. The response does not say. */
268
+ chain: EthereumChain;
269
+ /**
270
+ * Now, as the caller sees it. A parameter so the expiry check is testable.
271
+ */
272
+ now?: Date;
273
+ onProgress?: (phase: CentrifugeBuyPlacementPhase) => void;
274
+ };
275
+ /**
276
+ * Broadcasts a built deposit request and waits for it to mine.
277
+ *
278
+ * A transaction with no deadline (`expiresAt === null`) is broadcast as-is.
279
+ * One with a deadline that has passed is refused before the wallet is asked.
280
+ */
281
+ declare function placeCentrifugeRequest(params: PlaceCentrifugeRequestParams): Promise<CentrifugeBuyPlacementResult>;
282
+ /**
283
+ * Every phase {@link buyCentrifuge} can emit, in order. An allowance that
284
+ * already covers the deposit skips the approval phases.
285
+ */
286
+ type CentrifugeBuyPhase = CentrifugeBuyPreparationPhase | CentrifugeBuyPlacementPhase;
287
+ /** A step-tagged reason {@link buyCentrifuge} failed. The step says which half. */
288
+ type CentrifugeBuyError = CentrifugeBuyPreparationError | CentrifugeBuyPlacementError;
289
+ type CentrifugeBuyResult = {
290
+ type: 'success';
291
+ txHash: Hash;
292
+ transaction: CentrifugeVaultBuyTransaction;
293
+ } | {
294
+ type: 'error';
295
+ error: CentrifugeBuyError;
296
+ };
297
+ type BuyCentrifugeParams = Omit<PrepareCentrifugeBuyParams, 'onProgress'> & Pick<PlaceCentrifugeRequestParams, 'now'> & {
298
+ onProgress?: (phase: CentrifugeBuyPhase) => void;
299
+ };
300
+ /**
301
+ * Places a deposit request end to end: approves the vault proxy for `amount`,
302
+ * builds the calldata, and broadcasts it.
303
+ *
304
+ * The one call for a partner driving this from their own screen. The checkout
305
+ * keeps the two halves, because it has to drop a build that finishes after
306
+ * the user has left and must not broadcast it.
307
+ *
308
+ * Success means the request was placed. The fund fulfils it later.
309
+ * Broadcasting it does not buy shares.
310
+ *
311
+ * Total: every failure is returned step-tagged rather than thrown.
312
+ */
313
+ declare function buyCentrifuge(params: BuyCentrifugeParams): Promise<CentrifugeBuyResult>;
314
+
315
+ /** Progress phases emitted by {@link claimCentrifugeVault}, in order. */
316
+ type CentrifugeClaimPhase = 'preparing' | 'awaiting-wallet' | 'confirming';
317
+ /**
318
+ * A step-tagged reason a claim failed.
319
+ *
320
+ * `prepare` reasons are split out where the remedy differs: a wallet with
321
+ * nothing to claim has already been paid (a fill was claimed elsewhere, or a
322
+ * new request auto-claimed it), and a frozen wallet needs the issuer, not a
323
+ * retry. Everything else at that step is offered a retry.
324
+ *
325
+ * A mined transaction that reverted is a `confirm` failure carrying a
326
+ * `contract_reverted` cause, so a caller switches on one arm for "the chain
327
+ * said no" whether the wallet or the receipt reported it.
328
+ */
329
+ type CentrifugeClaimError = {
330
+ step: 'prepare';
331
+ reason: 'nothing-to-claim' | 'frozen' | 'generic';
332
+ } | {
333
+ step: 'broadcast';
334
+ cause: WalletError;
335
+ } | {
336
+ step: 'confirm';
337
+ cause: WalletError;
338
+ };
339
+ type CentrifugeClaimResult = {
340
+ type: 'success';
341
+ direction: CentrifugeClaimDirection;
342
+ txHash: Hash;
343
+ /**
344
+ * What the calldata was built to collect: shares for `invest`, the
345
+ * funding token for `redeem`. A floor rather than an exact figure - a
346
+ * fill landing before the broadcast raises it, and the claim collects
347
+ * everything.
348
+ */
349
+ claimed: BlockchainAmount;
350
+ } | {
351
+ type: 'error';
352
+ error: CentrifugeClaimError;
353
+ };
354
+ type ClaimCentrifugeVaultParams = {
355
+ centrifuge: CentrifugeNamespace;
356
+ /**
357
+ * The wallet that holds the position, and the one that broadcasts: the
358
+ * proxy credits the sender, so no other wallet can claim for it.
359
+ */
360
+ wallet: EvmWallet;
361
+ chain: EthereumChain;
362
+ /** Share token symbol of the vault, e.g. `deJTRSY`. */
363
+ symbol: AssetSymbol;
364
+ direction: CentrifugeClaimDirection;
365
+ onProgress?: (phase: CentrifugeClaimPhase) => void;
366
+ };
367
+ /**
368
+ * Claims everything a wallet has claimable on one side of a vault: builds the
369
+ * calldata, broadcasts it from that wallet and waits for it to mine.
370
+ *
371
+ * One function for both directions because the API forks only at the build
372
+ * step - `/claim` and `/claim-proceeds` are two endpoints - while broadcasting
373
+ * reads calldata and nothing else. Total: every failure comes back as a step
374
+ * tag rather than a throw.
375
+ *
376
+ * Nothing is approved first. A claim moves tokens out of the proxy, not out of
377
+ * the wallet, so there is no allowance to grant.
378
+ */
379
+ declare function claimCentrifugeVault(params: ClaimCentrifugeVaultParams): Promise<CentrifugeClaimResult>;
380
+
381
+ /**
382
+ * The Centrifuge namespace plus the halves of a vault trade that need a
383
+ * wallet - placing a request and claiming what a fill made claimable - and so
384
+ * cannot live on the shared namespace.
385
+ *
386
+ * {@link ClientCentrifugeNamespace.buy} is the one call: approve, build, and
387
+ * broadcast. The two halves stay beside it. The checkout runs them itself so
388
+ * it can drop a build that finishes after the user has left, and a host that
389
+ * wants to show the calldata before broadcasting can do the same. The amount
390
+ * step calls neither. The request settles later. Broadcasting it does not
391
+ * buy shares.
392
+ */
393
+ interface ClientCentrifugeNamespace extends CentrifugeNamespace {
394
+ /**
395
+ * Approves the vault proxy for `amount`, builds the request, and broadcasts
396
+ * it. Returns a step-tagged result rather than throwing.
397
+ *
398
+ * Success means the request was placed. The fund fulfils it later.
399
+ */
400
+ buy(params: Omit<BuyCentrifugeParams, 'centrifuge' | 'erc20'>): Promise<CentrifugeBuyResult>;
401
+ /**
402
+ * Approves the vault proxy to pull `amount` of the funding token, then
403
+ * builds the request that spends it. Returns a step-tagged result rather
404
+ * than throwing.
405
+ */
406
+ prepareBuy(params: Omit<PrepareCentrifugeBuyParams, 'centrifuge' | 'erc20'>): Promise<CentrifugeBuyPreparationResult>;
407
+ /**
408
+ * Broadcasts a built request and waits for it to mine, refusing one whose
409
+ * deadline has passed. Returns a step-tagged result rather than throwing.
410
+ *
411
+ * Success means the request was placed. The fund fulfils it later.
412
+ */
413
+ placeRequest(params: PlaceCentrifugeRequestParams): Promise<CentrifugeBuyPlacementResult>;
414
+ /**
415
+ * Claims everything the wallet has claimable on one side of the vault and
416
+ * waits for it to mine. Returns a step-tagged result rather than throwing.
417
+ */
418
+ claim(params: Omit<ClaimCentrifugeVaultParams, 'centrifuge'>): Promise<CentrifugeClaimResult>;
419
+ }
420
+ declare class ClientCentrifugeNamespaceImpl extends CentrifugeNamespaceImpl implements ClientCentrifugeNamespace {
421
+ private readonly erc20;
422
+ constructor(ctx: UniversalNamespaceContext, erc20: Erc20Namespace);
423
+ buy(params: Omit<BuyCentrifugeParams, 'centrifuge' | 'erc20'>): Promise<CentrifugeBuyResult>;
424
+ prepareBuy(params: Omit<PrepareCentrifugeBuyParams, 'centrifuge' | 'erc20'>): Promise<CentrifugeBuyPreparationResult>;
425
+ placeRequest(params: PlaceCentrifugeRequestParams): Promise<CentrifugeBuyPlacementResult>;
426
+ claim(params: Omit<ClaimCentrifugeVaultParams, 'centrifuge'>): Promise<CentrifugeClaimResult>;
427
+ }
428
+
168
429
  /**
169
430
  * Progress phases emitted by {@link executeTokenSale}, in the order they occur.
170
431
  * The `resetting-allowance`/`confirming-allowance-reset` phases only occur when
@@ -698,10 +959,24 @@ declare class ClientSupportNamespaceImpl implements ClientSupportNamespace {
698
959
 
699
960
  interface ClientConfig extends Config {
700
961
  /**
701
- * The SDK user must provide this function. It is responsible for fetching a
702
- * valid {@link OAuthAccessToken}, or **null** for logged-out users. If your
703
- * backend is in TypeScript, it is recommended to use
704
- * `CoinListServer#auth.getAccessToken` from `@/server/core/coinlist-server`.
962
+ * The SDK user must provide this function. It fetches a valid
963
+ * {@link OAuthAccessToken} from your backend. If your backend is in
964
+ * TypeScript, serve `CoinListServer#auth.getAccessToken` from it.
965
+ *
966
+ * Two answers, and they must not be confused:
967
+ *
968
+ * - **Resolve `null`** when there is no session - e.g. your endpoint
969
+ * answered 204. After a 401 the SDK asks once more a second later before
970
+ * it believes it, then signs the user out and calls
971
+ * {@link Config.onSessionExpired}.
972
+ * - **Throw** when you could not find out - a 5xx, a network failure. The
973
+ * SDK keeps its current auth state and fails only the request in hand.
974
+ *
975
+ * So a backend that answers "no session" for its own failures turns every
976
+ * outage into a logout. Map those to an error status and throw on it.
977
+ *
978
+ * The SDK calls this at most once at a time: concurrent requests that all
979
+ * need a new token share one call.
705
980
  */
706
981
  getAccessToken: () => Promise<OAuthAccessToken | null>;
707
982
  /**
@@ -790,6 +1065,15 @@ interface CoinListClient {
790
1065
  * {@link ClientOndoNamespace}.
791
1066
  */
792
1067
  readonly ondo: ClientOndoNamespace;
1068
+ /**
1069
+ * Centrifuge vault deposits and claims: the vault-wide ordering gate, each
1070
+ * wallet's position, the two halves of placing a request, and the claim
1071
+ * that settles a filled one.
1072
+ *
1073
+ * The reads are free to poll. `prepareBuy` and `placeRequest` are not.
1074
+ * Broadcasting places a request. It does not buy shares.
1075
+ */
1076
+ readonly centrifuge: ClientCentrifugeNamespace;
793
1077
  /**
794
1078
  * Token display metadata (name, symbol, decimals, logos) from CoinList's
795
1079
  * public token registry, keyed by chain + contract address — e.g.
@@ -810,6 +1094,10 @@ interface CoinListClient {
810
1094
  * the user's {@link AuthState}. This is called automatically by
811
1095
  * {@link CoinListProvider}; you typically do not need to call it yourself
812
1096
  * unless you are using the client outside of the provider.
1097
+ *
1098
+ * @throws whatever {@link ClientConfig.getAccessToken} throws. The auth
1099
+ * state is then left as it was (`'unknown'` on a first call), since a
1100
+ * failure to find out is not a logout.
813
1101
  */
814
1102
  init(): Promise<AuthState>;
815
1103
  }
@@ -879,7 +1167,7 @@ type CoinListStyleScopeProps = {
879
1167
  declare function CoinListStyleScope({ children }: CoinListStyleScopeProps): react.JSX.Element;
880
1168
 
881
1169
  declare const buttonVariants: (props?: ({
882
- variant?: "link" | "primary" | "gradient" | "secondary" | "destructive" | "ghost" | "destructiveLink" | null | undefined;
1170
+ variant?: "link" | "primary" | "gradient" | "secondary" | "destructive" | "outline" | "ghost" | "destructiveLink" | null | undefined;
883
1171
  size?: "default" | "sm" | "lg" | "cta" | "icon" | null | undefined;
884
1172
  radius?: "pill" | "rounded" | null | undefined;
885
1173
  fullWidth?: boolean | null | undefined;
@@ -955,6 +1243,23 @@ interface CoinListSignInCardViewProps {
955
1243
  */
956
1244
  declare function CoinListSignInCardView({ state, onEvent, className, }: CoinListSignInCardViewProps): ReactNode;
957
1245
 
1246
+ /**
1247
+ * A deposit request that has been broadcast and mined.
1248
+ *
1249
+ * Named without `Buy` so it does not collide with the dialog component when
1250
+ * both are re-exported from the client barrel.
1251
+ *
1252
+ * Success means the request was placed. The fund fulfils it later, at a price
1253
+ * set then.
1254
+ */
1255
+ type CentrifugeOrderPlaced = {
1256
+ wallet: EvmWallet;
1257
+ /** What the request deposits, in the funding token's base units. */
1258
+ amount: BlockchainAmount;
1259
+ transaction: CentrifugeVaultBuyTransaction;
1260
+ txHash: Hash;
1261
+ };
1262
+
958
1263
  /**
959
1264
  * A filled Ondo order, as the confirmation dialog and the host's
960
1265
  * `onOrderConfirmed` callback need it.
@@ -1261,6 +1566,23 @@ type CheckoutSelectableInputAssetUi = {
1261
1566
  rawBalance: bigint;
1262
1567
  selected: boolean;
1263
1568
  };
1569
+ /**
1570
+ * One fundable stablecoin as the amount step's pay-with row.
1571
+ *
1572
+ * `balance` is `null` before the first read settles and after one that
1573
+ * failed. It renders as zero; the field above says why the CTA does not
1574
+ * treat that as a genuine empty wallet.
1575
+ *
1576
+ * `selected` is a parameter because a step with one funding asset is always
1577
+ * selected, and a step with several has to say which.
1578
+ */
1579
+ declare function toInputAssetUi({ symbol, balance, selected, networkName, locale, }: {
1580
+ symbol: StablecoinSymbol;
1581
+ balance: bigint | null;
1582
+ selected: boolean;
1583
+ networkName: string;
1584
+ locale: string;
1585
+ }): CheckoutSelectableInputAssetUi;
1264
1586
 
1265
1587
  /**
1266
1588
  * Step 3 of the Superstate checkout: what the swap comes to, the slippage it
@@ -1499,6 +1821,7 @@ type CheckoutConfigByOfferType = {
1499
1821
  'ondo::swap': OndoCheckoutConfig;
1500
1822
  'superstate::swap': SuperstateCheckoutConfig;
1501
1823
  'coinlist::token_sale': CoinListTokenSaleCheckoutConfig;
1824
+ 'centrifuge::vault': CentrifugeVaultCheckoutConfig;
1502
1825
  };
1503
1826
  type OndoCheckoutConfig = {
1504
1827
  /**
@@ -1566,13 +1889,42 @@ type SuperstateCheckoutConfig = {
1566
1889
  type CoinListTokenSaleCheckoutConfig = {
1567
1890
  render: (offer: CoinListTokenSaleOfferDetail) => ReactNode;
1568
1891
  };
1892
+ /**
1893
+ * What a Centrifuge vault deposit needs that the offer cannot tell it.
1894
+ *
1895
+ * The share symbol is per-asset and this config is per-integration, so
1896
+ * `symbol` takes the offer. It is called only for a `centrifuge::vault`
1897
+ * offer, when that branch is mounted.
1898
+ */
1899
+ type CentrifugeVaultCheckoutConfig = {
1900
+ /**
1901
+ * The share token symbol, e.g. `deJTRSY`.
1902
+ *
1903
+ * The SDK cannot read it off the offer: the symbol a vault trades under is
1904
+ * the provider's, and it can disagree with `offer.asset.code`. A host whose
1905
+ * catalogue does agree can return `AssetSymbol(offer.asset.code)`.
1906
+ */
1907
+ symbol: (offer: CentrifugeVaultOfferDetail) => AssetSymbol;
1908
+ /**
1909
+ * The fund the token tracks. Frontline does not send this yet. Omit it, or
1910
+ * return `null`, and the asset-details row stays hidden.
1911
+ */
1912
+ underlyingFund?: (offer: CentrifugeVaultOfferDetail) => string | null;
1913
+ /**
1914
+ * Trailing yield as display copy, e.g. `3.60%`. Omit it, or return `null`,
1915
+ * and the corner stays empty.
1916
+ */
1917
+ apy?: (offer: CentrifugeVaultOfferDetail) => string | null;
1918
+ /** Fired once the request has mined. The dialog shows either way. */
1919
+ onOrderPlaced?: (order: CentrifugeOrderPlaced) => void;
1920
+ };
1569
1921
  /**
1570
1922
  * The parts of {@link CheckoutConfig} only the host can know.
1571
1923
  *
1572
1924
  * What is missing from this list is what {@link defaultCheckoutConfig} can fill
1573
1925
  * in on its own.
1574
1926
  */
1575
- type RequiredCheckoutConfig = Pick<CheckoutConfig, 'ondo::swap' | 'coinlist::token_sale'>;
1927
+ type RequiredCheckoutConfig = Pick<CheckoutConfig, 'ondo::swap' | 'coinlist::token_sale' | 'centrifuge::vault'>;
1576
1928
  /**
1577
1929
  * Fills in the config entries that have a sensible default, so a host only
1578
1930
  * writes the ones that do not.
@@ -1588,6 +1940,9 @@ type RequiredCheckoutConfig = Pick<CheckoutConfig, 'ondo::swap' | 'coinlist::tok
1588
1940
  * side: () => 'buy',
1589
1941
  * },
1590
1942
  * 'coinlist::token_sale': { render: (offer) => <MyTokenSalePage offer={offer} /> },
1943
+ * 'centrifuge::vault': {
1944
+ * symbol: (offer) => AssetSymbol(offer.asset.code),
1945
+ * },
1591
1946
  * });
1592
1947
  * ```
1593
1948
  */
@@ -1677,6 +2032,9 @@ interface CheckoutContainerProps {
1677
2032
  * const config = defaultCheckoutConfig({
1678
2033
  * 'ondo::swap': { symbol: (o) => AssetSymbol(o.asset.code), side: () => 'sell' },
1679
2034
  * 'coinlist::token_sale': { render: (o) => <MyTokenSalePage offer={o} /> },
2035
+ * 'centrifuge::vault': {
2036
+ * symbol: (offer) => AssetSymbol(offer.asset.code),
2037
+ * },
1680
2038
  * });
1681
2039
  * ```
1682
2040
  *
@@ -1723,6 +2081,358 @@ interface CheckoutContainerProps {
1723
2081
  */
1724
2082
  declare function CheckoutContainer({ offer, chain, wallets, config, enabled, className, }: CheckoutContainerProps): ReactNode;
1725
2083
 
2084
+ /**
2085
+ * Step 2 of the Centrifuge checkout: how much of the funding token to deposit.
2086
+ *
2087
+ * Nothing here touches the chain. Confirming checks the amount in memory and
2088
+ * hands it up. The review step approves and places the request together.
2089
+ */
2090
+ type CentrifugeBuyAmountUiState = {
2091
+ type: 'incomplete';
2092
+ } | {
2093
+ type: 'active';
2094
+ /** Exactly what the user has typed. `'1.'` is a legal thing to hold. */
2095
+ amountInput: string;
2096
+ walletAddress: ShortenedWalletAddress;
2097
+ inputAssets: CheckoutSelectableInputAssetUi[];
2098
+ confirmCta: CheckoutCtaUi;
2099
+ error: string | null;
2100
+ } | {
2101
+ type: 'complete';
2102
+ inputAsset: CheckoutAssetUi;
2103
+ amountFormatted: FormattedAmountAssetUi;
2104
+ };
2105
+ type CentrifugeBuyAmountUiEvent = {
2106
+ type: 'ON_AMOUNT_CHANGE';
2107
+ value: string;
2108
+ } | {
2109
+ type: 'ON_MAX_AMOUNT_CLICK';
2110
+ } | {
2111
+ type: 'ON_SELECT_PAY_WITH';
2112
+ value: AssetSymbol;
2113
+ } | {
2114
+ type: 'ON_CONFIRM_AMOUNT';
2115
+ } | {
2116
+ type: 'ON_EDIT_AMOUNT';
2117
+ };
2118
+
2119
+ interface CentrifugeBuyAmountViewProps {
2120
+ state: CentrifugeBuyAmountUiState;
2121
+ onEvent: (event: CentrifugeBuyAmountUiEvent) => void;
2122
+ className?: string;
2123
+ }
2124
+ /**
2125
+ * Step 2 of the Centrifuge checkout. Pure: amounts arrive already formatted, and
2126
+ * every interaction leaves through `onEvent`.
2127
+ *
2128
+ * Self-scoped: renders fully styled on its own, with no `CoinListStyleScope`
2129
+ * needed around it.
2130
+ */
2131
+ declare function CentrifugeBuyAmountView(props: CentrifugeBuyAmountViewProps): ReactNode;
2132
+
2133
+ interface CentrifugeBuyCheckoutContainerProps {
2134
+ /** The vault being deposited into: names the asset and supplies its logo. */
2135
+ offer: CentrifugeVaultOfferDetail;
2136
+ /** Share token symbol, e.g. `deJTRSY`. */
2137
+ symbol: AssetSymbol;
2138
+ chain: EthereumChain;
2139
+ wallets: CheckoutWalletSelection;
2140
+ /**
2141
+ * Default `true`. `false` turns off every request and timer, for a checkout
2142
+ * that is mounted but not on screen yet.
2143
+ */
2144
+ enabled?: boolean;
2145
+ /** Fired once the request has mined. The dialog shows either way. */
2146
+ onOrderPlaced?: (order: CentrifugeOrderPlaced) => void;
2147
+ /**
2148
+ * The fund the token tracks, e.g. `Janus Henderson Treasury Fund`.
2149
+ * Frontline does not send this yet, so pass `null` and the row stays hidden.
2150
+ */
2151
+ underlyingFund: string | null;
2152
+ /**
2153
+ * Trailing yield as display copy, e.g. `3.60%`. Frontline does not send
2154
+ * this yet, so pass `null` and the corner stays empty.
2155
+ */
2156
+ apy: string | null;
2157
+ className?: string;
2158
+ }
2159
+ /**
2160
+ * The Centrifuge buy checkout a host mounts.
2161
+ *
2162
+ * Renders {@link CentrifugeBuyCheckoutView} from
2163
+ * {@link useCentrifugeBuyCheckoutViewModel}. Placing a request does not buy
2164
+ * shares. The fund fulfils it later.
2165
+ */
2166
+ declare function CentrifugeBuyCheckoutContainer({ offer, symbol, chain, wallets, enabled, onOrderPlaced, underlyingFund, apy, className, }: CentrifugeBuyCheckoutContainerProps): ReactNode;
2167
+
2168
+ /**
2169
+ * Step 3 of the Centrifuge checkout: confirming the deposit and placing it.
2170
+ *
2171
+ * Placing the request does not buy shares. The fund prices the fill later.
2172
+ */
2173
+ type CentrifugeBuyReviewUiState = {
2174
+ type: 'incomplete';
2175
+ } | {
2176
+ type: 'active';
2177
+ /** The funding token, shown beside the amount being deposited. */
2178
+ inputAsset: CheckoutAssetUi;
2179
+ /** What the request deposits, e.g. `100.00 USDC`. */
2180
+ investAmount: FormattedAmountAssetUi;
2181
+ /** Where the shares land — the wallet confirmed in step 1. */
2182
+ recipientAddress: ShortenedWalletAddress;
2183
+ /**
2184
+ * Always a formatted zero. This product charges no CoinList fee, and
2185
+ * the row stays so the total is the amount invested.
2186
+ */
2187
+ coinlistFee: FormattedAmountAssetUi;
2188
+ /** What the user pays. Equal to {@link investAmount}: no fee comes off. */
2189
+ total: FormattedAmountAssetUi;
2190
+ placeRequestCta: CheckoutCtaUi;
2191
+ error: string | null;
2192
+ };
2193
+ type CentrifugeBuyReviewUiEvent = {
2194
+ type: 'ON_PLACE_REQUEST';
2195
+ };
2196
+
2197
+ /**
2198
+ * Why a Centrifuge checkout cannot run right now, as opposed to a step of it
2199
+ * failing.
2200
+ */
2201
+ type CentrifugeCheckoutErrorReason =
2202
+ /**
2203
+ * The offer names no vault proxy on the chain the host asked for, so there
2204
+ * is no spender to approve and nothing to broadcast to.
2205
+ */
2206
+ 'unsupported-chain'
2207
+ /**
2208
+ * The vault is known to be unable to take a request: halted, unlinked, or
2209
+ * not permissioned. Known from a status whose orderability is blocked.
2210
+ * Loading and failed statuses are unknown, and unknown does not block.
2211
+ *
2212
+ * Shown only while the user is still choosing a wallet and no request-placed
2213
+ * dialog is up. Past that, a pause belongs to the step it interrupts.
2214
+ */
2215
+ | 'not-orderable';
2216
+ declare const CentrifugeCheckoutErrorReason: {
2217
+ /**
2218
+ * Which reason, if any, replaces the whole checkout. `null` means the steps
2219
+ * render.
2220
+ */
2221
+ of: ({ depositableHere, notOrderable, atEntry, }: {
2222
+ depositableHere: boolean;
2223
+ notOrderable: boolean;
2224
+ atEntry: boolean;
2225
+ }) => CentrifugeCheckoutErrorReason | null;
2226
+ };
2227
+
2228
+ /**
2229
+ * The asset panel beside the Centrifuge checkout.
2230
+ *
2231
+ * Read-only. The identity and the minimum come from the offer. Yield and
2232
+ * the fund the token tracks are `null` until frontline publishes them, and
2233
+ * a `null` hides its row.
2234
+ */
2235
+ type CentrifugeSidebarUiState = {
2236
+ asset: CheckoutAssetUi;
2237
+ /** The share token's symbol, e.g. `deJTRSY`. The same one under the name. */
2238
+ ticker: string;
2239
+ /**
2240
+ * The fund the token tracks, e.g. `Janus Henderson Treasury Fund`.
2241
+ * Frontline does not publish this yet. `null` hides the row.
2242
+ */
2243
+ underlyingFund: string | null;
2244
+ /**
2245
+ * What kind of instrument it is, in the supplier's own vocabulary, e.g.
2246
+ * `Tokenized Notes`. `null` hides the row.
2247
+ */
2248
+ assetType: string | null;
2249
+ minimumInvestment: CentrifugeSidebarMinimumUi;
2250
+ /** Display name of the chain the token lives on, e.g. `Ethereum`. */
2251
+ networkName: string;
2252
+ /** Who issues the token, e.g. `Centrifuge`. `null` hides the row. */
2253
+ issuer: string | null;
2254
+ /**
2255
+ * Trailing yield, already formatted, e.g. `3.60%`. The caption "APY" is
2256
+ * the view's. Frontline does not publish this yet. `null` leaves the
2257
+ * corner empty.
2258
+ */
2259
+ apy: FormattedPercentUi | null;
2260
+ };
2261
+ /**
2262
+ * The minimum deposit, from the offer.
2263
+ *
2264
+ * A vault that sets no minimum is `none`: the row is dropped rather than
2265
+ * dashed. `loading` stays for a caller that has not resolved the offer yet.
2266
+ */
2267
+ type CentrifugeSidebarMinimumUi = {
2268
+ type: 'loading';
2269
+ } | {
2270
+ type: 'known';
2271
+ amount: FormattedAmountAssetUi;
2272
+ } | {
2273
+ type: 'none';
2274
+ };
2275
+
2276
+ /**
2277
+ * Step 1 of the Centrifuge checkout: which wallet funds the deposit.
2278
+ *
2279
+ * There is no `inactive` arm. This step is the first one, so it is either being
2280
+ * filled in or already answered — it is never waiting on a step above it.
2281
+ *
2282
+ * Nothing is allow-listed: the user picks a wallet and confirms, and confirming
2283
+ * is synchronous. Hence a plain `confirmEnabled`.
2284
+ */
2285
+ type CentrifugeWalletSelectUiState = {
2286
+ type: 'active';
2287
+ /** The user's CoinList wallets. Empty when they have none. */
2288
+ embeddedWallets: CheckoutEmbeddedWalletUi[];
2289
+ /** `null` until an external wallet is connected. The row still renders. */
2290
+ externalWallet: CheckoutWalletUi | null;
2291
+ /** Whether the connected external wallet may be disconnected here. */
2292
+ canDisconnect: boolean;
2293
+ confirmEnabled: boolean;
2294
+ /** Copy for a failed connect, e.g. the user rejected the wallet prompt. */
2295
+ error: string | null;
2296
+ } | {
2297
+ type: 'completed';
2298
+ wallet: CheckoutConfirmedWalletUi;
2299
+ };
2300
+ type CentrifugeWalletSelectUiEvent = {
2301
+ type: 'ON_SELECT_WALLET';
2302
+ value: CheckoutWalletTypeUi;
2303
+ }
2304
+ /**
2305
+ * Tapping the external row while nothing is connected. Split from
2306
+ * `ON_SELECT_WALLET` because it opens the host's wallet connector rather than
2307
+ * changing the selection.
2308
+ */
2309
+ | {
2310
+ type: 'ON_CONNECT_WALLET';
2311
+ } | {
2312
+ type: 'ON_DISCONNECT_WALLET';
2313
+ } | {
2314
+ type: 'ON_CONFIRM_WALLET';
2315
+ } | {
2316
+ type: 'ON_EDIT_WALLET';
2317
+ };
2318
+
2319
+ /**
2320
+ * The whole Centrifuge buy checkout: three steps, the asset panel, and the
2321
+ * dialog that says the request was placed.
2322
+ */
2323
+ type CentrifugeBuyCheckoutUiState = {
2324
+ type: 'content';
2325
+ wallet: CentrifugeWalletSelectUiState;
2326
+ amount: CentrifugeBuyAmountUiState;
2327
+ review: CentrifugeBuyReviewUiState;
2328
+ sidebar: CentrifugeSidebarUiState;
2329
+ orderPlaced: CentrifugeOrderPlacedUiState;
2330
+ } | {
2331
+ type: 'error';
2332
+ reason: CentrifugeCheckoutErrorReason;
2333
+ };
2334
+ type CentrifugeBuyCheckoutUiEvent = CentrifugeWalletSelectUiEvent | CentrifugeBuyAmountUiEvent | CentrifugeBuyReviewUiEvent | CentrifugeOrderPlacedUiEvent;
2335
+ /**
2336
+ * The dialog that closes the checkout once the request has mined.
2337
+ *
2338
+ * It reports that the request was placed. It does not report a fill.
2339
+ */
2340
+ type CentrifugeOrderPlacedUiState = {
2341
+ type: 'hidden';
2342
+ } | {
2343
+ type: 'visible';
2344
+ outputAsset: CheckoutAssetUi;
2345
+ totalCost: FormattedAmountAssetUi;
2346
+ recipientAddress: ShortenedWalletAddress;
2347
+ txExplorerUrl: TxExplorerUrl;
2348
+ };
2349
+ type CentrifugeOrderPlacedUiEvent = {
2350
+ type: 'ON_CLOSE_ORDER_PLACED';
2351
+ };
2352
+
2353
+ interface CentrifugeBuyCheckoutViewProps {
2354
+ state: CentrifugeBuyCheckoutUiState;
2355
+ onEvent: (event: CentrifugeBuyCheckoutUiEvent) => void;
2356
+ className?: string;
2357
+ }
2358
+ /**
2359
+ * The whole Centrifuge buy checkout: three step cards, the asset panel, and
2360
+ * the dialog that says the request was placed.
2361
+ *
2362
+ * The panel leads on a phone and moves to the right column from `md` up.
2363
+ */
2364
+ declare function CentrifugeBuyCheckoutView({ state, onEvent, className, }: CentrifugeBuyCheckoutViewProps): ReactNode;
2365
+
2366
+ interface CentrifugeBuyOrderPlacedProps {
2367
+ state: CentrifugeOrderPlacedUiState;
2368
+ onEvent: (event: CentrifugeOrderPlacedUiEvent) => void;
2369
+ className?: string;
2370
+ }
2371
+ /**
2372
+ * The dialog that closes the checkout once the request has mined.
2373
+ *
2374
+ * It says the request was placed. The fund fulfils it later.
2375
+ */
2376
+ declare function CentrifugeBuyOrderPlaced({ state, onEvent, className, }: CentrifugeBuyOrderPlacedProps): ReactNode;
2377
+
2378
+ interface CentrifugeBuyReviewViewProps {
2379
+ state: CentrifugeBuyReviewUiState;
2380
+ onEvent: (event: CentrifugeBuyReviewUiEvent) => void;
2381
+ className?: string;
2382
+ }
2383
+ /**
2384
+ * Step 3 of the Centrifuge checkout. Pure: every number arrives formatted, and
2385
+ * whether the order can be placed is decided by `placeRequestCta`.
2386
+ *
2387
+ * Self-scoped: renders fully styled on its own, with no `CoinListStyleScope`
2388
+ * needed around it.
2389
+ */
2390
+ declare function CentrifugeBuyReviewView(props: CentrifugeBuyReviewViewProps): ReactNode;
2391
+
2392
+ interface CentrifugeCheckoutErrorProps {
2393
+ reason: CentrifugeCheckoutErrorReason;
2394
+ className?: string;
2395
+ }
2396
+ /**
2397
+ * What the checkout renders when there is no deposit to place, or the vault
2398
+ * is known to be unable to take one.
2399
+ */
2400
+ declare function CentrifugeCheckoutError({ reason, className, }: CentrifugeCheckoutErrorProps): ReactNode;
2401
+
2402
+ interface CentrifugeSidebarViewProps {
2403
+ state: CentrifugeSidebarUiState;
2404
+ className?: string;
2405
+ }
2406
+ /**
2407
+ * The asset panel beside the Centrifuge checkout. Read-only.
2408
+ */
2409
+ declare function CentrifugeSidebarView({ state, className, }: CentrifugeSidebarViewProps): ReactNode;
2410
+
2411
+ interface CentrifugeWalletSelectViewProps {
2412
+ state: CentrifugeWalletSelectUiState;
2413
+ onEvent: (event: CentrifugeWalletSelectUiEvent) => void;
2414
+ /**
2415
+ * The line under the heading. Defaults to the buy copy.
2416
+ *
2417
+ * A plain string rather than a slot: the sentence says what the wallet is for.
2418
+ */
2419
+ description?: string;
2420
+ className?: string;
2421
+ }
2422
+ /**
2423
+ * The wallet step of a Centrifuge checkout: which wallet funds the deposit.
2424
+ * Pure - the wallets arrive already shaped, and every interaction leaves
2425
+ * through `onEvent`.
2426
+ *
2427
+ * Nothing about choosing a wallet is allow-listed: confirming is a local
2428
+ * decision. The sentence under the heading is the only copy that names what
2429
+ * the wallet is for.
2430
+ *
2431
+ * Self-scoped: renders fully styled on its own, with no `CoinListStyleScope`
2432
+ * needed around it.
2433
+ */
2434
+ declare function CentrifugeWalletSelectView(props: CentrifugeWalletSelectViewProps): ReactNode;
2435
+
1726
2436
  /**
1727
2437
  * Step 2 of the Ondo checkout: how much to spend, and which asset to spend.
1728
2438
  *
@@ -1863,18 +2573,17 @@ type OndoBuyReviewUiEvent = {
1863
2573
  };
1864
2574
 
1865
2575
  /**
1866
- * Why an Ondo checkout cannot run at all, as opposed to a step of it failing.
2576
+ * Why an Ondo checkout cannot run right now, as opposed to a step of it
2577
+ * failing.
1867
2578
  *
1868
- * One arm today, and a union rather than a bare flag because the View switches
1869
- * on it for copy and because the next entry here is already foreseeable: an
1870
- * offer whose asset Ondo has delisted is the same kind of "there is no flow to
1871
- * render" that no step can localise.
2579
+ * A union rather than a bare flag because the View switches on it for copy.
1872
2580
  *
1873
- * Shared by both products because it is a property of the integration rather
1874
- * than of a direction: buying and selling go through the same contract, so a
1875
- * chain that cannot serve one cannot serve the other. That is the exception
1876
- * the provider-level `shared/` exists for, and it is narrow - the step states
1877
- * below stay per-product, since that is where the two genuinely diverge.
2581
+ * Shared by both products because each reason is a property of the integration
2582
+ * or of the market rather than of a direction: buying and selling go through
2583
+ * the same contract, so a chain that cannot serve one cannot serve the other,
2584
+ * and a closed market reads the same whichever way the trade runs. That is the
2585
+ * exception the provider-level `shared/` exists for, and it is narrow - the
2586
+ * step states stay per-product, since that is where the two genuinely diverge.
1878
2587
  */
1879
2588
  type OndoCheckoutErrorReason =
1880
2589
  /**
@@ -1885,7 +2594,38 @@ type OndoCheckoutErrorReason =
1885
2594
  * offer and the chain are fixed for the lifetime of the mount. See
1886
2595
  * `swapSpender`.
1887
2596
  */
1888
- 'unsupported-chain';
2597
+ 'unsupported-chain'
2598
+ /**
2599
+ * Ondo is not filling orders for this asset on this side right now: the
2600
+ * market is closed or paused, or the asset is paused or closed for the
2601
+ * session. Known from the trading-status poll, never assumed from a status
2602
+ * that is still loading or failed to load.
2603
+ *
2604
+ * Unlike `unsupported-chain` this one clears on its own. The trading-status
2605
+ * poll keeps running underneath it, and the checkout comes back once the
2606
+ * asset is tradable again. Only shown while the user is on the step the flow
2607
+ * opened on: once they are past it, a pause is a step's to report, so it
2608
+ * cannot pull an order out from under the user mid-flow.
2609
+ */
2610
+ | 'not-tradable';
2611
+ declare const OndoCheckoutErrorReason: {
2612
+ /**
2613
+ * Which reason, if any, replaces the whole checkout. `null` means the steps
2614
+ * render.
2615
+ *
2616
+ * `unsupported-chain` wins because it is settled at mount: no market state
2617
+ * can make a chain with no contract tradable. `not-tradable` needs both a
2618
+ * market *known* to be closed and a user still at the start of the flow,
2619
+ * with no order confirmation on screen. Past the first step a pause belongs
2620
+ * to the step it interrupts, and a just-placed order's dialog must not be
2621
+ * hidden by a market that closed after it filled.
2622
+ */
2623
+ of: ({ swappableHere, notTradable, atEntry, }: {
2624
+ swappableHere: boolean;
2625
+ notTradable: boolean;
2626
+ atEntry: boolean;
2627
+ }) => OndoCheckoutErrorReason | null;
2628
+ };
1889
2629
 
1890
2630
  /**
1891
2631
  * The reference panel beside the Ondo checkout: which asset is being bought,
@@ -2030,7 +2770,11 @@ type OndoBuyCheckoutUiState = {
2030
2770
  sidebar: OndoSidebarUiState;
2031
2771
  orderConfirmed: OndoOrderConfirmedUiState;
2032
2772
  }
2033
- /** There is no checkout to render. Nothing is fetched and no timer runs. */
2773
+ /**
2774
+ * There is no checkout to render. For `unsupported-chain` nothing is fetched
2775
+ * and no timer runs; for `not-tradable` the trading-status poll keeps
2776
+ * running, so the checkout comes back once the market opens.
2777
+ */
2034
2778
  | {
2035
2779
  type: 'error';
2036
2780
  reason: OndoCheckoutErrorReason;
@@ -2451,7 +3195,11 @@ type OndoSellCheckoutUiState = {
2451
3195
  sidebar: OndoSidebarUiState;
2452
3196
  orderConfirmed: OndoSellOrderConfirmedUiState;
2453
3197
  }
2454
- /** There is no checkout to render. Nothing is fetched and no timer runs. */
3198
+ /**
3199
+ * There is no checkout to render. For `unsupported-chain` nothing is fetched
3200
+ * and no timer runs; for `not-tradable` the trading-status poll keeps
3201
+ * running, so the checkout comes back once the market opens.
3202
+ */
2455
3203
  | {
2456
3204
  type: 'error';
2457
3205
  reason: OndoCheckoutErrorReason;
@@ -2647,7 +3395,8 @@ interface OndoCheckoutErrorProps {
2647
3395
  className?: string;
2648
3396
  }
2649
3397
  /**
2650
- * What an Ondo checkout renders when there is no checkout to render.
3398
+ * What an Ondo checkout renders when there is no checkout to render, or none
3399
+ * the user can act on right now.
2651
3400
  *
2652
3401
  * Shared by both products rather than duplicated in each, because the reason
2653
3402
  * is a property of the integration and not of the direction: a chain that
@@ -2655,9 +3404,10 @@ interface OndoCheckoutErrorProps {
2655
3404
  * sentence twice.
2656
3405
  *
2657
3406
  * No retry, deliberately. Superstate's equivalent offers one for `load-failed`,
2658
- * where a re-fetch can genuinely succeed; every reason here is settled at mount
2659
- * and cannot change under a button. Offering one that provably cannot help is
2660
- * worse than offering none.
3407
+ * where a re-fetch can genuinely succeed. Here `unsupported-chain` is settled
3408
+ * at mount and cannot change under a button, and `not-tradable` clears on its
3409
+ * own once the market opens, since the viewmodel keeps polling underneath it.
3410
+ * Offering a button that provably cannot help is worse than offering none.
2661
3411
  *
2662
3412
  * Self-scoped, like every exported component: it renders fully styled with no
2663
3413
  * provider in the tree, and the scope is idempotent so nesting costs nothing.
@@ -2977,8 +3727,6 @@ type SuperstateOrderConfirmedUiState = {
2977
3727
  type: 'visible';
2978
3728
  /** What was bought. */
2979
3729
  asset: CheckoutAssetUi;
2980
- /** Who issues it, e.g. `Superstate`. */
2981
- issuer: string;
2982
3730
  /** How much of it arrived, e.g. `981.2431 USTB`. */
2983
3731
  outputAmount: FormattedAmountAssetUi;
2984
3732
  /**
@@ -3186,7 +3934,329 @@ interface SuperstateWalletViewProps {
3186
3934
  * Self-scoped: renders fully styled on its own, with no `CoinListStyleScope`
3187
3935
  * needed around it.
3188
3936
  */
3189
- declare function SuperstateWalletView(props: SuperstateWalletViewProps): ReactNode;
3937
+ declare function SuperstateWalletView(props: SuperstateWalletViewProps): ReactNode;
3938
+
3939
+ /**
3940
+ * The claim card.
3941
+ *
3942
+ * `HIDDEN` renders nothing: the user is signed out, or there is nothing to
3943
+ * show and no wallet to connect. A host that wants an empty state can tell
3944
+ * both apart itself.
3945
+ */
3946
+ type CentrifugeVaultClaimUiState = {
3947
+ type: 'HIDDEN';
3948
+ } | {
3949
+ type: 'LOADING';
3950
+ externalWallet: ClaimExternalWalletUi;
3951
+ } | {
3952
+ type: 'ERROR';
3953
+ externalWallet: ClaimExternalWalletUi;
3954
+ } | {
3955
+ type: 'CONTENT';
3956
+ rows: CentrifugeClaimRowUi[];
3957
+ externalWallet: ClaimExternalWalletUi;
3958
+ dialog: CentrifugeClaimDialogUi;
3959
+ };
3960
+ type CentrifugeVaultClaimUiEvent = {
3961
+ type: 'ON_CLAIM';
3962
+ legId: CentrifugeVaultLegId;
3963
+ } | {
3964
+ type: 'ON_RETRY_CLAIM';
3965
+ } | {
3966
+ type: 'ON_CLOSE_CLAIM_DIALOG';
3967
+ } | {
3968
+ type: 'ON_RETRY_LOAD';
3969
+ } | {
3970
+ type: 'ON_CONNECT_WALLET';
3971
+ } | {
3972
+ type: 'ON_CHANGE_WALLET';
3973
+ };
3974
+ /** Why a claimable row cannot be claimed right now. */
3975
+ type CentrifugeClaimBlockedReasonUi = 'vault-paused' | 'wallet-frozen';
3976
+ /**
3977
+ * What a claimable row's Claim button does. `claiming` while a claim on the
3978
+ * row has not settled, including one whose dialog was closed: the
3979
+ * transaction is still in the wallet or the mempool, and a second press
3980
+ * would send another.
3981
+ */
3982
+ type CentrifugeClaimActionUi = {
3983
+ type: 'enabled';
3984
+ } | {
3985
+ type: 'claiming';
3986
+ } | {
3987
+ type: 'blocked';
3988
+ reason: CentrifugeClaimBlockedReasonUi;
3989
+ };
3990
+ /**
3991
+ * A row of the card. A leg yields a `pending` row while anything is queued
3992
+ * and a `claimable` row while anything is filled, so one wallet can show
3993
+ * both at once.
3994
+ *
3995
+ * The two kinds lay out differently on purpose: a pending row names the
3996
+ * offer and what is queued, a claimable row leads with what the user gets.
3997
+ */
3998
+ type CentrifugeClaimRowUi = {
3999
+ kind: 'pending';
4000
+ /** Unique within the card, for React keys. */
4001
+ key: string;
4002
+ iconUrl: AssetIconUrl | null;
4003
+ /** The offer's name, e.g. `JTRSY deRWA`. */
4004
+ title: string;
4005
+ /** What is queued: funding for `invest`, shares for `redeem`. */
4006
+ amount: FormattedAmountAssetUi;
4007
+ wallet: string;
4008
+ } | {
4009
+ kind: 'claimable';
4010
+ key: string;
4011
+ legId: CentrifugeVaultLegId;
4012
+ iconUrl: AssetIconUrl | null;
4013
+ /**
4014
+ * What a claim pays out: exact shares for `invest`, an estimate of the
4015
+ * funding token (prefixed `~`) for `redeem`.
4016
+ */
4017
+ amount: FormattedAmountAssetUi;
4018
+ wallet: string;
4019
+ action: CentrifugeClaimActionUi;
4020
+ };
4021
+ /** A connect or change request the host's connector is handling. */
4022
+ type ExternalWalletRequestUi = 'idle' | 'pending' | 'failed';
4023
+ /**
4024
+ * The card's footer. `hidden` when the host offers no connector, so there is
4025
+ * nothing to connect with.
4026
+ */
4027
+ type ClaimExternalWalletUi = {
4028
+ type: 'hidden';
4029
+ } | {
4030
+ type: 'disconnected';
4031
+ request: ExternalWalletRequestUi;
4032
+ } | {
4033
+ type: 'connected';
4034
+ wallet: string;
4035
+ request: ExternalWalletRequestUi;
4036
+ };
4037
+ /** The steps a claim goes through, in order, as the dialog lists them. */
4038
+ type CentrifugeClaimStepUi = 'preparing' | 'awaiting-wallet' | 'confirming';
4039
+ /** Why a claim failed, in the flavours the dialog words differently. */
4040
+ type CentrifugeClaimFailureUi = 'nothing-to-claim' | 'wallet-frozen' | 'rejected' | 'insufficient-gas' | 'reverted' | 'generic';
4041
+ type CentrifugeClaimProgressUi = {
4042
+ type: 'running';
4043
+ step: CentrifugeClaimStepUi;
4044
+ } | {
4045
+ type: 'failed';
4046
+ step: CentrifugeClaimStepUi;
4047
+ reason: CentrifugeClaimFailureUi;
4048
+ /**
4049
+ * Whether the dialog offers "Try again". `nothing-to-claim` has already
4050
+ * been paid and `wallet-frozen` needs the issuer, so retrying either only
4051
+ * repeats the refusal.
4052
+ */
4053
+ retryable: boolean;
4054
+ } | {
4055
+ type: 'succeeded';
4056
+ claimed: FormattedAmountAssetUi;
4057
+ explorerUrl: TxExplorerUrl;
4058
+ };
4059
+ type CentrifugeClaimDialogUi = {
4060
+ type: 'closed';
4061
+ } | {
4062
+ type: 'open';
4063
+ /** What the claim pays out, which the dialog's title names. */
4064
+ amount: FormattedAmountAssetUi;
4065
+ progress: CentrifugeClaimProgressUi;
4066
+ };
4067
+
4068
+ interface UseCentrifugeVaultClaimViewModelOptions {
4069
+ offer: CentrifugeVaultOfferDetail;
4070
+ wallets: WalletSelection;
4071
+ /** Names a wallet for display; unnamed ones show a shortened address. */
4072
+ walletLabel?: WalletLabelResolver;
4073
+ /** Fired once a claim has mined, whether or not the dialog is still open. */
4074
+ onClaimed?: (claim: CentrifugeVaultClaimed) => void;
4075
+ /** How often to re-read pending positions and vault status. */
4076
+ pollInterval?: Seconds;
4077
+ /** Default `true`. `false` turns off every request and timer. */
4078
+ enabled?: boolean;
4079
+ }
4080
+ interface UseCentrifugeVaultClaimViewModelResult {
4081
+ state: CentrifugeVaultClaimUiState;
4082
+ onEvent: (event: CentrifugeVaultClaimUiEvent) => void;
4083
+ }
4084
+ /**
4085
+ * What a host hears once a claim has mined. `claimed` is what the calldata
4086
+ * was built to collect: shares for `invest`, the funding token for `redeem`.
4087
+ */
4088
+ type CentrifugeVaultClaimed = {
4089
+ direction: CentrifugeClaimDirection;
4090
+ chain: EthereumChain;
4091
+ walletAddress: EvmWalletAddress;
4092
+ txHash: Hash;
4093
+ claimed: BlockchainAmount;
4094
+ };
4095
+ /**
4096
+ * The Centrifuge claim card: every wallet's pending and claimable positions on
4097
+ * an offer's vaults, and the claim that collects a filled one.
4098
+ *
4099
+ * The vaults come from the offer's `vaultContracts`, each chain's share and
4100
+ * funding token resolved through the token registry; a chain whose tokens the
4101
+ * registry does not list is left out and logged. Positions are read for every
4102
+ * wallet the host supplied, on both legs, and polled while anything is
4103
+ * pending. Vault status gates the Claim button, and is polled while the page
4104
+ * is visible.
4105
+ *
4106
+ * A claim runs in a dialog that tracks its steps. It is broadcast from the
4107
+ * wallet that holds the row - the proxy credits the sender - and on success
4108
+ * every position is read again, so the claimed amount leaves the card.
4109
+ */
4110
+ declare function useCentrifugeVaultClaimViewModel({ offer, wallets, walletLabel, onClaimed, pollInterval, enabled, }: UseCentrifugeVaultClaimViewModelOptions): UseCentrifugeVaultClaimViewModelResult;
4111
+
4112
+ /**
4113
+ * Everything `ClaimContainer` needs that the offer cannot tell it, keyed by
4114
+ * the async offer type it belongs to.
4115
+ *
4116
+ * Keyed by {@link AsyncOfferType} with every key required, for the same reason
4117
+ * as `CheckoutConfig`: a host rendering `ClaimContainer` is saying it will
4118
+ * handle whatever async offer it is given, so a new async provider is a
4119
+ * compile error in every host rather than a card that silently renders
4120
+ * nothing. Per-integration, not per-offer: a host builds it once.
4121
+ */
4122
+ type ClaimConfig = {
4123
+ [K in AsyncOfferType]: ClaimConfigByOfferType[K];
4124
+ };
4125
+ /**
4126
+ * What each async offer type needs, before {@link ClaimConfig} maps
4127
+ * `AsyncOfferType` over it. Private, so a new member of `AsyncOfferDetail`
4128
+ * with no entry here fails to index this type in the SDK first.
4129
+ */
4130
+ type ClaimConfigByOfferType = {
4131
+ 'centrifuge::vault': CentrifugeVaultClaimConfig;
4132
+ };
4133
+ /**
4134
+ * Centrifuge needs nothing required today: the vaults come from the offer and
4135
+ * the token registry. The key still has to be supplied, so that the day it
4136
+ * does need something the omission is a compile error.
4137
+ */
4138
+ type CentrifugeVaultClaimConfig = {
4139
+ /** Fired once a claim has mined. The dialog shows either way. */
4140
+ onClaimed?: (claim: CentrifugeVaultClaimed) => void;
4141
+ };
4142
+ interface ClaimContainerProps {
4143
+ /**
4144
+ * The async offer whose positions to show. Its `type` decides which
4145
+ * provider renders. Narrow an `OfferDetail` with `AsyncOfferDetail.is`.
4146
+ */
4147
+ offer: AsyncOfferDetail;
4148
+ /**
4149
+ * The wallets to read positions for and claim from, and the host's
4150
+ * external-wallet connector. Pass `externalAdapter: null` to hide the
4151
+ * connect affordance.
4152
+ */
4153
+ wallets: WalletSelection;
4154
+ /**
4155
+ * Names a wallet for display, e.g. `'CoinList Wallet'` for the embedded
4156
+ * one. Omitted, or returning `null`, shows the shortened address.
4157
+ */
4158
+ walletLabel?: WalletLabelResolver;
4159
+ /** What each async offer type needs beyond the offer itself. */
4160
+ config: ClaimConfig;
4161
+ /**
4162
+ * Default `true`. `false` turns off every request and timer in the mounted
4163
+ * provider, for a card that is on the tree but not on screen yet.
4164
+ */
4165
+ enabled?: boolean;
4166
+ className?: string;
4167
+ }
4168
+ /**
4169
+ * The plug-and-play claim card: hand it an async offer and it renders the
4170
+ * right provider's positions - what is pending, what is claimable - and the
4171
+ * claim that collects them.
4172
+ *
4173
+ * The second leg of an async trade. The user placed a request earlier, the
4174
+ * fund fills it on its own schedule, and they come back - days or weeks later
4175
+ * - to claim. So the card is its own entry on the offer page rather than a
4176
+ * checkout step.
4177
+ *
4178
+ * Only the matching provider's container is mounted, so its viewmodel is the
4179
+ * only one that runs. The `switch` is exhaustive against
4180
+ * {@link AsyncOfferType}, and the `default` branch assigns to
4181
+ * `const exhaustive: never`, so a new async offer type is a compile error here
4182
+ * as well as in {@link ClaimConfig}.
4183
+ *
4184
+ * ```tsx
4185
+ * {AsyncOfferDetail.is(offer) && (
4186
+ * <ClaimContainer
4187
+ * key={offer.id}
4188
+ * offer={offer}
4189
+ * wallets={{ embedded, external, externalAdapter }}
4190
+ * walletLabel={(address) => (isEmbedded(address) ? 'CoinList Wallet' : null)}
4191
+ * config={{ 'centrifuge::vault': {} }}
4192
+ * />
4193
+ * )}
4194
+ * ```
4195
+ */
4196
+ declare function ClaimContainer({ offer, wallets, walletLabel, config, enabled, className, }: ClaimContainerProps): ReactNode;
4197
+
4198
+ interface CentrifugeVaultClaimContainerProps {
4199
+ /** The vault offer whose positions to show: its chains come from `vaultContracts`. */
4200
+ offer: CentrifugeVaultOfferDetail;
4201
+ /** The wallets to read positions for and claim from. */
4202
+ wallets: WalletSelection;
4203
+ /** Names a wallet for display; unnamed ones show a shortened address. */
4204
+ walletLabel?: WalletLabelResolver;
4205
+ /** Fired once a claim has mined. The dialog shows either way. */
4206
+ onClaimed?: (claim: CentrifugeVaultClaimed) => void;
4207
+ /**
4208
+ * Default `true`. `false` turns off every request and timer, for a card
4209
+ * that is mounted but not on screen yet.
4210
+ */
4211
+ enabled?: boolean;
4212
+ className?: string;
4213
+ }
4214
+ /**
4215
+ * The Centrifuge claim card: every wallet's pending and claimable positions on
4216
+ * a vault offer, polled while anything is pending, and the claim that
4217
+ * collects a filled one.
4218
+ */
4219
+ declare function CentrifugeVaultClaimContainer({ offer, wallets, walletLabel, onClaimed, enabled, className, }: CentrifugeVaultClaimContainerProps): ReactNode;
4220
+
4221
+ interface CentrifugeVaultClaimDialogProps {
4222
+ dialog: CentrifugeClaimDialogUi;
4223
+ onRetry: () => void;
4224
+ onClose: () => void;
4225
+ }
4226
+ /**
4227
+ * The dialog a claim runs in: its steps as they happen, the step that broke
4228
+ * and why, or what was claimed.
4229
+ *
4230
+ * Closing it mid-claim is allowed and cancels nothing: a broadcast claim
4231
+ * still mines, and the card refetches when it does.
4232
+ */
4233
+ declare function CentrifugeVaultClaimDialog({ dialog, onRetry, onClose, }: CentrifugeVaultClaimDialogProps): ReactNode;
4234
+
4235
+ interface CentrifugeVaultClaimRowProps {
4236
+ row: CentrifugeClaimRowUi;
4237
+ /** Asked for when the row is claimable and its Claim button is pressed. */
4238
+ onClaim: () => void;
4239
+ }
4240
+ /**
4241
+ * One position row of the claim card.
4242
+ *
4243
+ * A pending row names the offer and, on the right, what is queued and from
4244
+ * which wallet. A claimable row leads with what the user gets, and puts the
4245
+ * Claim button where the amount would be. A blocked claim keeps its row and
4246
+ * says why under it, so the user is not left wondering where their claim went.
4247
+ */
4248
+ declare function CentrifugeVaultClaimRow({ row, onClaim, }: CentrifugeVaultClaimRowProps): ReactNode;
4249
+
4250
+ interface CentrifugeVaultClaimViewProps {
4251
+ state: CentrifugeVaultClaimUiState;
4252
+ onEvent: (event: CentrifugeVaultClaimUiEvent) => void;
4253
+ className?: string;
4254
+ }
4255
+ /**
4256
+ * The claim card: a wallet's pending and claimable Centrifuge positions, the
4257
+ * footer that connects an external wallet, and the dialog a claim runs in.
4258
+ */
4259
+ declare function CentrifugeVaultClaimView({ state, onEvent, className, }: CentrifugeVaultClaimViewProps): ReactNode;
3190
4260
 
3191
4261
  /**
3192
4262
  * One image as an `<img>` renders it: a `src` for a consumer that takes a
@@ -4334,6 +5404,294 @@ interface UseCompleteOAuthOptions {
4334
5404
  */
4335
5405
  declare function useCompleteOAuth(options: UseCompleteOAuthOptions): void;
4336
5406
 
5407
+ type CentrifugeBuyAmountConfirmed = {
5408
+ amount: BlockchainAmount;
5409
+ inputAsset: StablecoinSymbol;
5410
+ };
5411
+ type CentrifugeBuyAmountStepInput = {
5412
+ type: 'incomplete';
5413
+ } | {
5414
+ type: 'active';
5415
+ wallet: EvmWallet;
5416
+ /**
5417
+ * Set when the vault is known to be unable to take a request. Unknown
5418
+ * and failed statuses leave this null: they do not block a deposit.
5419
+ */
5420
+ depositBlockedMessage: string | null;
5421
+ /** The offer's minimum, in dollars. `null` when the offer sets none. */
5422
+ minimumPurchaseUsd: number | null;
5423
+ } | {
5424
+ type: 'complete';
5425
+ wallet: EvmWallet;
5426
+ amount: BlockchainAmount;
5427
+ inputAsset: StablecoinSymbol;
5428
+ };
5429
+ interface UseCentrifugeBuyAmountViewModelOptions {
5430
+ stepInput: CentrifugeBuyAmountStepInput;
5431
+ chain: EthereumChain;
5432
+ enabled?: boolean;
5433
+ onComplete: (confirmed: CentrifugeBuyAmountConfirmed) => void;
5434
+ onEdit: () => void;
5435
+ }
5436
+ interface UseCentrifugeBuyAmountViewModelResult {
5437
+ state: CentrifugeBuyAmountUiState;
5438
+ onEvent: (event: CentrifugeBuyAmountUiEvent) => void;
5439
+ }
5440
+ /**
5441
+ * Drives step 2: how much to deposit.
5442
+ *
5443
+ * Confirming validates the amount in memory and hands it up. The estimate
5444
+ * for that amount is polled for the review step. Nothing here is signed.
5445
+ */
5446
+ declare function useCentrifugeBuyAmountViewModel({ stepInput, chain, enabled, onComplete, onEdit, }: UseCentrifugeBuyAmountViewModelOptions): UseCentrifugeBuyAmountViewModelResult;
5447
+ type CentrifugeBuyAmountValidation = {
5448
+ valid: true;
5449
+ amount: BlockchainAmount;
5450
+ } | {
5451
+ valid: false;
5452
+ error: string;
5453
+ };
5454
+ declare function validateCentrifugeBuyAmount({ input, decimals, balance, symbol, minimum, locale, }: {
5455
+ input: string;
5456
+ decimals: AssetDecimals;
5457
+ balance: bigint | null;
5458
+ symbol: AssetSymbol;
5459
+ minimum: BlockchainAmount | null;
5460
+ locale: string;
5461
+ }): CentrifugeBuyAmountValidation;
5462
+
5463
+ /**
5464
+ * Why a Centrifuge read failed, in the only two flavours a UI acts on
5465
+ * differently.
5466
+ *
5467
+ * `not-authenticated` is split out because no retry helps until the user
5468
+ * signs in. Everything else collapses into `generic-error` and is offered a
5469
+ * retry.
5470
+ */
5471
+ type CentrifugeLoadErrorReason = 'not-authenticated' | 'generic-error';
5472
+ declare function centrifugeLoadErrorReason(error: unknown): CentrifugeLoadErrorReason;
5473
+
5474
+ /**
5475
+ * The built deposit request a review step can place.
5476
+ *
5477
+ * `isRefreshing` rides on `CONTENT` so a rebuild never blanks the numbers on
5478
+ * screen. A failed rebuild keeps them and says why.
5479
+ */
5480
+ type LoadCentrifugeBuyTransactionState = {
5481
+ type: 'LOADING';
5482
+ } | {
5483
+ type: 'ERROR';
5484
+ reason: CentrifugeLoadErrorReason;
5485
+ } | {
5486
+ type: 'CONTENT';
5487
+ transaction: CentrifugeVaultBuyTransaction;
5488
+ isRefreshing: boolean;
5489
+ refreshError: CentrifugeLoadErrorReason | null;
5490
+ };
5491
+ interface UseCentrifugeBuyTransactionOptions {
5492
+ /**
5493
+ * The request to build, or `null` before an amount is confirmed. A `null`
5494
+ * request fetches nothing.
5495
+ */
5496
+ request: BuildCentrifugeVaultBuyParams | null;
5497
+ /**
5498
+ * A request the caller already holds, typically the one `prepareBuy`
5499
+ * returned. When present the hook adopts it and skips the initial build.
5500
+ * `refetch` still builds.
5501
+ */
5502
+ data?: CentrifugeVaultBuyTransaction;
5503
+ /** When false, the hook does not build. */
5504
+ enabled: boolean;
5505
+ }
5506
+ interface UseCentrifugeBuyTransactionResult {
5507
+ state: LoadCentrifugeBuyTransactionState;
5508
+ /** Builds a fresh request for the same deposit. */
5509
+ refetch: () => void;
5510
+ }
5511
+ /**
5512
+ * Holds the deposit request the review step places, and rebuilds it when
5513
+ * asked.
5514
+ *
5515
+ * **Never polls.** A request is built once, when the user confirms an amount.
5516
+ */
5517
+ declare function useCentrifugeBuyTransaction(options: UseCentrifugeBuyTransactionOptions): UseCentrifugeBuyTransactionResult;
5518
+
5519
+ type CentrifugeBuyReviewStepInput = {
5520
+ type: 'incomplete';
5521
+ } | {
5522
+ type: 'active';
5523
+ wallet: EvmWallet;
5524
+ amount: BlockchainAmount;
5525
+ inputAsset: StablecoinSymbol;
5526
+ /** Known vault block. Unknown status leaves this null. */
5527
+ depositBlockedMessage: string | null;
5528
+ };
5529
+ interface UseCentrifugeBuyReviewViewModelOptions {
5530
+ stepInput: CentrifugeBuyReviewStepInput;
5531
+ symbol: AssetSymbol;
5532
+ chain: EthereumChain;
5533
+ /** The offer's vault proxies. The spender the approval is written to. */
5534
+ vaultContracts: OfferVaultContract[];
5535
+ /**
5536
+ * When false, placing the request does nothing. Defaults to true.
5537
+ *
5538
+ * The step being `incomplete` is not the same thing: a checkout switched
5539
+ * off mid-flow leaves this step `active`, with the amount still here.
5540
+ */
5541
+ enabled?: boolean;
5542
+ onComplete: (order: CentrifugeOrderPlaced) => void;
5543
+ }
5544
+ interface UseCentrifugeBuyReviewViewModelResult {
5545
+ state: CentrifugeBuyReviewUiState;
5546
+ onEvent: (event: CentrifugeBuyReviewUiEvent) => void;
5547
+ }
5548
+ /**
5549
+ * Drives step 3: confirming the deposit and placing the request.
5550
+ *
5551
+ * Placing approves the vault proxy when the allowance is short, builds the
5552
+ * request, and broadcasts it. None of that runs on the amount step, so a
5553
+ * user who edits the amount has not already signed an approval for the old
5554
+ * one.
5555
+ */
5556
+ declare function useCentrifugeBuyReviewViewModel({ stepInput, symbol, chain, vaultContracts, enabled, onComplete, }: UseCentrifugeBuyReviewViewModelOptions): UseCentrifugeBuyReviewViewModelResult;
5557
+
5558
+ type CentrifugeBuyStep = {
5559
+ type: 'wallet';
5560
+ } | {
5561
+ type: 'amount';
5562
+ wallet: EvmWallet;
5563
+ } | {
5564
+ type: 'review';
5565
+ wallet: EvmWallet;
5566
+ amount: BlockchainAmount;
5567
+ inputAsset: StablecoinSymbol;
5568
+ };
5569
+ interface UseCentrifugeBuyCheckoutViewModelOptions {
5570
+ offer: CentrifugeVaultOfferDetail;
5571
+ /** Share token symbol, e.g. `deJTRSY`. */
5572
+ symbol: AssetSymbol;
5573
+ chain: EthereumChain;
5574
+ wallets: CheckoutWalletSelection;
5575
+ enabled?: boolean;
5576
+ /** Fired once the request has mined. The dialog shows either way. */
5577
+ onOrderPlaced?: (order: CentrifugeOrderPlaced) => void;
5578
+ /**
5579
+ * The fund the token tracks. Frontline does not send this yet, so pass
5580
+ * `null` and the asset-details row stays hidden.
5581
+ */
5582
+ underlyingFund: string | null;
5583
+ /**
5584
+ * Trailing yield as display copy, e.g. `3.60%`. Frontline does not send
5585
+ * this yet, so pass `null` and the corner stays empty.
5586
+ */
5587
+ apy: string | null;
5588
+ }
5589
+ interface UseCentrifugeBuyCheckoutViewModelResult {
5590
+ state: CentrifugeBuyCheckoutUiState;
5591
+ onEvent: (event: CentrifugeBuyCheckoutUiEvent) => void;
5592
+ }
5593
+ /**
5594
+ * Drives the Centrifuge buy checkout.
5595
+ *
5596
+ * The container mounts this hook only. It composes the wallet, amount,
5597
+ * review, and sidebar steps. The status poll lives here. The amount step
5598
+ * only validates.
5599
+ *
5600
+ * A vault that is known to be blocked replaces the checkout only at the
5601
+ * wallet step. A status that is still loading, or that failed, does not.
5602
+ */
5603
+ declare function useCentrifugeBuyCheckoutViewModel({ offer, symbol, chain, wallets, enabled, onOrderPlaced, underlyingFund, apy, }: UseCentrifugeBuyCheckoutViewModelOptions): UseCentrifugeBuyCheckoutViewModelResult;
5604
+
5605
+ /**
5606
+ * User-facing copy for each `can_order` reason F-0 publishes.
5607
+ *
5608
+ * A record keyed by the closed set, so a new reason fails to compile here
5609
+ * until it has a sentence. The View (or a viewmodel mapping into one) should
5610
+ * render this rather than the wire token.
5611
+ *
5612
+ * Status never returns `below_minimum`. The copy stays so the closed set
5613
+ * still has a sentence for every reason.
5614
+ */
5615
+ declare const CENTRIFUGE_VAULT_ORDER_REASON_MESSAGES: Record<CentrifugeOrderReason, string>;
5616
+ declare function centrifugeVaultOrderReasonMessage(reason: CentrifugeOrderReason): string;
5617
+ /**
5618
+ * The most blocking reason in `reasons`, or `null` when the list is empty.
5619
+ */
5620
+ declare function primaryCentrifugeVaultOrderReason<T extends CentrifugeOrderReason>(reasons: readonly T[]): T | null;
5621
+ /**
5622
+ * The sentence to show for an {@link CentrifugeOrderability}, or `null` when
5623
+ * the request can proceed.
5624
+ */
5625
+ declare function centrifugeVaultOrderingMessage<R extends CentrifugeOrderReason>(orderability: CentrifugeOrderability<R>): string | null;
5626
+
5627
+ interface UseCentrifugeSidebarViewModelOptions {
5628
+ offer: CentrifugeVaultOfferDetail;
5629
+ symbol: AssetSymbol;
5630
+ chain: EthereumChain;
5631
+ tokenMetadata: TokenMetadata | null;
5632
+ /**
5633
+ * The fund the token tracks. Frontline does not send this yet, so callers
5634
+ * pass `null` and the row stays hidden.
5635
+ */
5636
+ underlyingFund: string | null;
5637
+ /**
5638
+ * Trailing yield as display copy, e.g. `3.60%`. Frontline does not send
5639
+ * this yet, so callers pass `null` and the corner stays empty.
5640
+ */
5641
+ apy: string | null;
5642
+ }
5643
+ interface UseCentrifugeSidebarViewModelResult {
5644
+ state: CentrifugeSidebarUiState;
5645
+ }
5646
+ /**
5647
+ * Drives the asset panel beside the Centrifuge checkout.
5648
+ *
5649
+ * The minimum is the offer's. Yield and the underlying fund are arguments:
5650
+ * frontline does not publish either yet, so callers pass `null`.
5651
+ */
5652
+ declare function useCentrifugeSidebarViewModel({ offer, symbol, chain, tokenMetadata, underlyingFund, apy, }: UseCentrifugeSidebarViewModelOptions): UseCentrifugeSidebarViewModelResult;
5653
+
5654
+ /**
5655
+ * Whether step 1 is being filled in or already answered.
5656
+ *
5657
+ * There is no `incomplete` arm: this is the first step, so it is never waiting
5658
+ * on one above it.
5659
+ */
5660
+ type CentrifugeWalletSelectStepInput = {
5661
+ type: 'active';
5662
+ } | {
5663
+ type: 'completed';
5664
+ wallet: EvmWallet;
5665
+ };
5666
+ interface UseCentrifugeWalletSelectViewModelOptions {
5667
+ stepInput: CentrifugeWalletSelectStepInput;
5668
+ /** The host's wallets, and the lambdas that connect and disconnect one. */
5669
+ wallets: CheckoutWalletSelection;
5670
+ /** The chain the order executes on, which names the network on each row. */
5671
+ chain: EthereumChain;
5672
+ /** Called with the wallet the user settled on. */
5673
+ onComplete: (wallet: EvmWallet) => void;
5674
+ /** Called when the user reopens this step from a later one. */
5675
+ onEdit: () => void;
5676
+ }
5677
+ interface UseCentrifugeWalletSelectViewModelResult {
5678
+ state: CentrifugeWalletSelectUiState;
5679
+ onEvent: (event: CentrifugeWalletSelectUiEvent) => void;
5680
+ }
5681
+ /**
5682
+ * Drives step 1 of the Centrifuge checkout: which wallet funds the deposit.
5683
+ *
5684
+ * Nothing here touches the network. A wallet is not allow-listed, so confirming
5685
+ * is a local decision the viewmodel makes on its own - which is why the step's
5686
+ * CTA is a plain `confirmEnabled`.
5687
+ *
5688
+ * Connecting an external wallet is the host's job: `connectExternal` opens
5689
+ * whatever connector it ships, and the result is read from `wallets.external`
5690
+ * on the next render rather than from a return value, so a connector that
5691
+ * redirects works as well as one that opens a modal.
5692
+ */
5693
+ declare function useCentrifugeWalletSelectViewModel({ stepInput, wallets, chain, onComplete, onEdit, }: UseCentrifugeWalletSelectViewModelOptions): UseCentrifugeWalletSelectViewModelResult;
5694
+
4337
5695
  type LoadParticipationsReason = 'not-authenticated' | 'generic-error';
4338
5696
  type LoadParticipationsState = {
4339
5697
  type: 'LOADING';
@@ -4473,11 +5831,13 @@ declare function validateAmount({ input, decimals, balance, symbol, minimumPurch
4473
5831
  }): OndoBuyAmountValidation;
4474
5832
 
4475
5833
  /**
4476
- * Why an Ondo read failed, in the only two flavours a UI acts on differently.
5834
+ * Why an Ondo read failed, in the three flavours a UI acts on differently.
4477
5835
  *
4478
5836
  * `not-authenticated` is split out because no retry helps until the user signs
4479
- * in, and because the remedy is one the UI can name. Everything else collapses
4480
- * into `generic-error` and is offered a retry.
5837
+ * in, and because the remedy is one the UI can name. `not-tradable` is split
5838
+ * out for the same reason: the market is closed or paused, so the remedy is to
5839
+ * wait for it to open, and a retry before then fails the same way. Everything
5840
+ * else collapses into `generic-error` and is offered a retry.
4481
5841
  *
4482
5842
  * That is a deliberate over-offer, not a claim that every such failure is
4483
5843
  * retryable. A `ValidationError` from the DTO boundary - an unreadable expiry,
@@ -4488,7 +5848,7 @@ declare function validateAmount({ input, decimals, balance, symbol, minimumPurch
4488
5848
  * branch in every consumer to distinguish. Split it out if that stops being
4489
5849
  * true.
4490
5850
  */
4491
- type OndoLoadErrorReason = 'not-authenticated' | 'generic-error';
5851
+ type OndoLoadErrorReason = 'not-authenticated' | 'not-tradable' | 'generic-error';
4492
5852
  declare function ondoLoadErrorReason(error: unknown): OndoLoadErrorReason;
4493
5853
 
4494
5854
  /**
@@ -4709,7 +6069,9 @@ interface UseOndoBuyCheckoutViewModelResult {
4709
6069
  * no Ondo integration contract is known before any step runs, and there is no
4710
6070
  * region to report it in that would not first have to render something untrue:
4711
6071
  * a wallet picker leading nowhere, a balance read for a token this flow will
4712
- * never spend. See {@link OndoCheckoutErrorReason}.
6072
+ * never spend. A market known to be closed while the user is still choosing a
6073
+ * wallet is the same kind of answer for as long as it lasts. See
6074
+ * {@link OndoCheckoutErrorReason}.
4713
6075
  *
4714
6076
  * `offer` and `chain` are read as fixed for the lifetime of the hook. The step
4715
6077
  * machine holds a committed quote and an approval granted on one chain for one
@@ -5096,7 +6458,9 @@ interface UseOndoSellCheckoutViewModelResult {
5096
6458
  * about whether there is a flow rather than about how one went. A chain with
5097
6459
  * no Ondo integration contract is known before any step runs, and there is no
5098
6460
  * region to report it in that would not first have to render something untrue.
5099
- * See {@link OndoCheckoutErrorReason}.
6461
+ * A market known to be closed while the user is still on the first step is the
6462
+ * same kind of answer for as long as it lasts. See
6463
+ * {@link OndoCheckoutErrorReason}.
5100
6464
  *
5101
6465
  * `offer` and `chain` are read as fixed for the lifetime of the hook, and so is
5102
6466
  * the wallet the flow opened on. The step machine holds a committed quote and
@@ -5204,6 +6568,12 @@ type LoadOndoTradingStatusState = {
5204
6568
  type: 'CONTENT';
5205
6569
  status: OndoTradingStatus;
5206
6570
  };
6571
+ /**
6572
+ * Whether the market is *known* to be closed for this side: the one reading of
6573
+ * the poll a caller may block an order on. `LOADING` and `ERROR` are unknown,
6574
+ * and unknown never blocks.
6575
+ */
6576
+ declare function isNotTradable(state: LoadOndoTradingStatusState): boolean;
5207
6577
  interface UseOndoTradingStatusOptions {
5208
6578
  /** Ondo's API symbol, e.g. `AAPLon`. */
5209
6579
  symbol: AssetSymbol;
@@ -5792,6 +7162,118 @@ interface UseSuperstateWalletViewModelResult {
5792
7162
  */
5793
7163
  declare function useSuperstateWalletViewModel({ stepInput, wallets, offerId, contractAddress, chain, onComplete, onEdit, }: UseSuperstateWalletViewModelOptions): UseSuperstateWalletViewModelResult;
5794
7164
 
7165
+ /**
7166
+ * Where one claim run stands. `FAILED` keeps the phase it stopped in, so a
7167
+ * progress list can mark the step that broke rather than only say that
7168
+ * something did.
7169
+ */
7170
+ type CentrifugeClaimState = {
7171
+ type: 'IDLE';
7172
+ } | {
7173
+ type: 'RUNNING';
7174
+ phase: CentrifugeClaimPhase;
7175
+ } | {
7176
+ type: 'FAILED';
7177
+ phase: CentrifugeClaimPhase;
7178
+ error: CentrifugeClaimError;
7179
+ } | {
7180
+ type: 'SUCCEEDED';
7181
+ success: Extract<CentrifugeClaimResult, {
7182
+ type: 'success';
7183
+ }>;
7184
+ };
7185
+ type CentrifugeClaimParams = Omit<ClaimCentrifugeVaultParams, 'centrifuge' | 'onProgress'>;
7186
+ interface UseCentrifugeClaimResult {
7187
+ state: CentrifugeClaimState;
7188
+ /**
7189
+ * Runs a claim and resolves with its result, whatever became of the state:
7190
+ * a claim abandoned with {@link reset} still mines, and the caller may want
7191
+ * to refetch when it does.
7192
+ */
7193
+ claim: (params: CentrifugeClaimParams) => Promise<CentrifugeClaimResult>;
7194
+ /** Back to `IDLE`. A run still in flight stops updating the state. */
7195
+ reset: () => void;
7196
+ }
7197
+ /**
7198
+ * Claims a filled Centrifuge position through `coinlist.centrifuge.claim`,
7199
+ * tracking which phase it is in.
7200
+ *
7201
+ * Unmounting or resetting does not cancel a claim - nothing can recall a
7202
+ * broadcast transaction - it only stops this state following it.
7203
+ */
7204
+ declare function useCentrifugeClaim(): UseCentrifugeClaimResult;
7205
+
7206
+ /** A vault on one chain, as the position endpoints key it. */
7207
+ type CentrifugePositionVault = {
7208
+ chain: EthereumChain;
7209
+ /** Share token symbol of the vault, e.g. `deJTRSY`. */
7210
+ symbol: AssetSymbol;
7211
+ };
7212
+ /**
7213
+ * The state of the position reads.
7214
+ *
7215
+ * `CONTENT` holds every read that has ever answered, kept through later
7216
+ * failures: a flaky tick must not make a claimable position vanish under the
7217
+ * user. A read that has never answered is absent, not zero. `ERROR` is
7218
+ * reserved for the case where nothing answered at all, so a screen has
7219
+ * nothing to show but a retry.
7220
+ */
7221
+ type LoadCentrifugeVaultPositionsState = {
7222
+ type: 'LOADING';
7223
+ } | {
7224
+ type: 'ERROR';
7225
+ reason: CentrifugeLoadErrorReason;
7226
+ } | {
7227
+ type: 'CONTENT';
7228
+ legs: CentrifugeVaultLeg[];
7229
+ };
7230
+ interface UseCentrifugeVaultPositionsOptions {
7231
+ /** The vaults to read, one per chain the offer runs on. */
7232
+ vaults: CentrifugePositionVault[];
7233
+ /** The wallets to read them for, in display order. */
7234
+ walletAddresses: EvmWalletAddress[];
7235
+ /**
7236
+ * How often to re-read a position that still has something pending.
7237
+ * Defaults to {@link CENTRIFUGE_POLL_INTERVAL_MS}.
7238
+ */
7239
+ pollIntervalMs?: number;
7240
+ /**
7241
+ * Reads pre-fetched on the server. When provided, the hook opens on them
7242
+ * and skips the first fetch; polling and {@link UseCentrifugeVaultPositionsResult.refetch}
7243
+ * still fetch.
7244
+ */
7245
+ data?: CentrifugeVaultLeg[];
7246
+ /**
7247
+ * Default `true`. When `false`: no requests, no timers, and an empty
7248
+ * `CONTENT`.
7249
+ */
7250
+ enabled?: boolean;
7251
+ }
7252
+ interface UseCentrifugeVaultPositionsResult {
7253
+ state: LoadCentrifugeVaultPositionsState;
7254
+ /**
7255
+ * Reads every position again: the retry after an `ERROR`, and what a claim
7256
+ * calls once it mined so the claimed amount leaves the screen.
7257
+ */
7258
+ refetch: () => void;
7259
+ }
7260
+ /**
7261
+ * Reads, and keeps reading, every wallet's position on every vault, on both
7262
+ * sides of the trade.
7263
+ *
7264
+ * A fill lands on the fund's schedule with no signal, so polling is the only
7265
+ * way a pending position is seen turning claimable. Each read is fetched once
7266
+ * when the inputs change, when {@link UseCentrifugeVaultPositionsResult.refetch}
7267
+ * is called and when the page becomes visible again. Between those, only the
7268
+ * reads with something still pending are polled - a position with nothing
7269
+ * pending cannot change on its own - and only while the page is visible.
7270
+ *
7271
+ * A read that fails keeps its last answer and is logged; one that has never
7272
+ * answered is left out, and retried on the next full fetch rather than on
7273
+ * the timer.
7274
+ */
7275
+ declare function useCentrifugeVaultPositions(options: UseCentrifugeVaultPositionsOptions): UseCentrifugeVaultPositionsResult;
7276
+
5795
7277
  type LoadOfferDetailsReason = 'not-authenticated' | 'generic-error';
5796
7278
  type LoadOfferDetailsState = {
5797
7279
  type: 'LOADING';
@@ -6219,6 +7701,116 @@ interface UseConnectWalletModalViewModelResult {
6219
7701
  */
6220
7702
  declare function useConnectWalletModalViewModel({ isOpen, onClose, offerId, optionId, wallet, onConnected, onRequestConnect, challengeType, statement, }: UseConnectWalletModalViewModelOptions): UseConnectWalletModalViewModelResult;
6221
7703
 
7704
+ /**
7705
+ * The state of one vault's status poll.
7706
+ *
7707
+ * Stale-preserving: a failed tick with a status in hand keeps it, so a flaky
7708
+ * read never reads as "vault halted". `ERROR` means the status is unknown -
7709
+ * which is not the same as `CONTENT` carrying a blocked orderability, and
7710
+ * callers must not conflate them. A vault that is *known* to be unorderable
7711
+ * may block a request; one that is merely unknown may not.
7712
+ *
7713
+ * `below_minimum` never appears here: it needs an amount, which this
7714
+ * endpoint is never given.
7715
+ */
7716
+ type LoadCentrifugeVaultStatusState = {
7717
+ type: 'LOADING';
7718
+ } | {
7719
+ type: 'ERROR';
7720
+ reason: CentrifugeLoadErrorReason;
7721
+ } | {
7722
+ type: 'CONTENT';
7723
+ status: CentrifugeVaultStatus;
7724
+ };
7725
+ /** A vault as the status endpoint keys it: one share token on one chain. */
7726
+ type CentrifugeStatusVault = {
7727
+ /** Share token symbol of the vault, e.g. `deJTRSY`. */
7728
+ symbol: AssetSymbol;
7729
+ chain: EthereumChain;
7730
+ };
7731
+ interface UseCentrifugeVaultStatusesOptions {
7732
+ /** The vaults to poll, typically one per chain an offer runs on. */
7733
+ vaults: CentrifugeStatusVault[];
7734
+ /** How often to refresh. Defaults to {@link CENTRIFUGE_POLL_INTERVAL_MS}. */
7735
+ pollIntervalMs?: number;
7736
+ /**
7737
+ * Statuses the caller already holds, typically fetched server-side, each
7738
+ * opening the state of the vault it names so a server-rendered panel needs
7739
+ * no loading pass.
7740
+ *
7741
+ * They seed the first render only: the poll still fetches immediately. A
7742
+ * vault that was orderable a minute ago can be unlinked now, so a seed
7743
+ * that suppressed the first read would be answering "can I act right now"
7744
+ * with whenever the page was rendered.
7745
+ */
7746
+ data?: CentrifugeVaultStatus[];
7747
+ /** When false, the hook neither fetches nor polls. */
7748
+ enabled: boolean;
7749
+ }
7750
+ interface UseCentrifugeVaultStatusesResult {
7751
+ /** One entry per vault asked for, in the order asked. */
7752
+ statuses: {
7753
+ vault: CentrifugeStatusVault;
7754
+ state: LoadCentrifugeVaultStatusState;
7755
+ }[];
7756
+ }
7757
+ /**
7758
+ * Polls whether each of several Centrifuge vaults can be acted on right now,
7759
+ * independent of any wallet or amount.
7760
+ *
7761
+ * Free to poll - it spends no attestation. Centrifuge announces none of the
7762
+ * changes this reports, so the poll is the only way a screen notices a vault
7763
+ * halting under it. Each vault is read independently on one shared timer, so
7764
+ * one failing chain never holds back another.
7765
+ *
7766
+ * A seeded status opens its vault's state instead of `LOADING` and is
7767
+ * otherwise left to the poll: the first tick fires as it always does, and
7768
+ * only replaces the seed once it has a status of its own.
7769
+ *
7770
+ * Disabled it neither fetches nor holds a timer, and each vault stays on
7771
+ * whatever state it held. That is `LOADING` and not an empty `CONTENT`
7772
+ * because there is no empty vault status - and an invented one would be
7773
+ * worse than none, since `CONTENT` here is what a caller is allowed to block
7774
+ * on.
7775
+ */
7776
+ declare function useCentrifugeVaultStatuses(options: UseCentrifugeVaultStatusesOptions): UseCentrifugeVaultStatusesResult;
7777
+
7778
+ interface UseCentrifugeVaultStatusOptions {
7779
+ /** Share token symbol of the vault, e.g. `deJTRSY`. */
7780
+ symbol: AssetSymbol;
7781
+ chain: EthereumChain;
7782
+ /** How often to refresh. Defaults to `CENTRIFUGE_POLL_INTERVAL_MS`. */
7783
+ pollIntervalMs?: number;
7784
+ /**
7785
+ * A status the caller already holds, typically fetched server-side, used
7786
+ * as the state the hook opens on so a server-rendered panel needs no
7787
+ * loading pass.
7788
+ *
7789
+ * It seeds the first render only: the poll still fetches immediately. A
7790
+ * vault that was orderable a minute ago can be unlinked now, so a seed
7791
+ * that suppressed the first read would be answering "can I invest right
7792
+ * now" with whenever the page was rendered.
7793
+ */
7794
+ data?: CentrifugeVaultStatus;
7795
+ /** When false, the hook neither fetches nor polls. */
7796
+ enabled: boolean;
7797
+ }
7798
+ interface UseCentrifugeVaultStatusResult {
7799
+ state: LoadCentrifugeVaultStatusState;
7800
+ }
7801
+ /**
7802
+ * Polls whether a Centrifuge vault can take a request at all right now,
7803
+ * independent of any amount.
7804
+ *
7805
+ * Free to poll - it spends no attestation. Centrifuge announces none of the
7806
+ * changes this reports, so the poll is the only way a checkout notices
7807
+ * mid-order.
7808
+ *
7809
+ * The one-vault case of {@link useCentrifugeVaultStatuses}, which carries the
7810
+ * seeding, stale-preserving and disabled semantics.
7811
+ */
7812
+ declare function useCentrifugeVaultStatus(options: UseCentrifugeVaultStatusOptions): UseCentrifugeVaultStatusResult;
7813
+
6222
7814
  interface UseErc20BalanceOptions {
6223
7815
  /**
6224
7816
  * The token to read, by contract address.
@@ -6589,4 +8181,15 @@ interface UseCountdownOptions {
6589
8181
  */
6590
8182
  declare function useCountdown({ until, tickMs, enabled, }: UseCountdownOptions): number | null;
6591
8183
 
6592
- 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, type LoadTokenRegistryState, Logger, type LogoImageUi, OAUTH_CODE_VERIFIER_KEY, OAUTH_STATE_KEY, type OauthClientErrorReason, type OauthClientResult, OfferAssetCard, type OfferAssetCardProps, OfferAssetCardUi, OfferLogoUi, OfferSaleCard, type OfferSaleCardProps, OfferSaleCardUi, OffersAssetGrid, type OffersAssetGridProps, OffersGridContainer, type OffersGridContainerProps, type OffersGridData, 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, type UseTokenRegistryOptions, type UseTokenRegistryResult, 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, tokenLogoSrcSet, 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, useTokenRegistry, validateAmount, validateSellAmount, validateSuperstateAmount };
8184
+ /**
8185
+ * Whether the page is visible right now: `false` while the tab is in the
8186
+ * background or the window is minimised, per the Page Visibility API.
8187
+ *
8188
+ * For a poll that should stop costing requests nobody is looking at. Reports
8189
+ * `true` during a server render and hydration, so a component renders as it
8190
+ * would on screen and hydrates without a mismatch, then the real visibility
8191
+ * straight after.
8192
+ */
8193
+ declare function usePageVisible(): boolean;
8194
+
8195
+ export { type AuthState, type AuthorizeWalletParams, type BuyCentrifugeParams, CENTRIFUGE_VAULT_ORDER_REASON_MESSAGES, type CentrifugeBuyAmountConfirmed, type CentrifugeBuyAmountStepInput, type CentrifugeBuyAmountUiEvent, type CentrifugeBuyAmountUiState, type CentrifugeBuyAmountValidation, CentrifugeBuyAmountView, type CentrifugeBuyAmountViewProps, CentrifugeBuyCheckoutContainer, type CentrifugeBuyCheckoutContainerProps, type CentrifugeBuyCheckoutUiEvent, type CentrifugeBuyCheckoutUiState, CentrifugeBuyCheckoutView, type CentrifugeBuyCheckoutViewProps, type CentrifugeBuyError, CentrifugeBuyOrderPlaced, type CentrifugeBuyOrderPlacedProps, type CentrifugeBuyPhase, type CentrifugeBuyPlacementError, type CentrifugeBuyPlacementPhase, type CentrifugeBuyPlacementResult, type CentrifugeBuyPreparationError, type CentrifugeBuyPreparationPhase, type CentrifugeBuyPreparationResult, type CentrifugeBuyResult, type CentrifugeBuyReviewStepInput, type CentrifugeBuyReviewUiEvent, type CentrifugeBuyReviewUiState, CentrifugeBuyReviewView, type CentrifugeBuyReviewViewProps, type CentrifugeBuyStep, CentrifugeCheckoutError, type CentrifugeCheckoutErrorProps, CentrifugeCheckoutErrorReason, type CentrifugeClaimActionUi, type CentrifugeClaimBlockedReasonUi, type CentrifugeClaimDialogUi, type CentrifugeClaimError, type CentrifugeClaimFailureUi, type CentrifugeClaimParams, type CentrifugeClaimPhase, type CentrifugeClaimProgressUi, type CentrifugeClaimResult, type CentrifugeClaimRowUi, type CentrifugeClaimState, type CentrifugeClaimStepUi, type CentrifugeLoadErrorReason, type CentrifugeOrderPlaced, type CentrifugeOrderPlacedUiEvent, type CentrifugeOrderPlacedUiState, type CentrifugePositionVault, type CentrifugeSidebarMinimumUi, type CentrifugeSidebarUiState, CentrifugeSidebarView, type CentrifugeSidebarViewProps, type CentrifugeStatusVault, type CentrifugeVaultCheckoutConfig, type CentrifugeVaultClaimConfig, CentrifugeVaultClaimContainer, type CentrifugeVaultClaimContainerProps, CentrifugeVaultClaimDialog, type CentrifugeVaultClaimDialogProps, CentrifugeVaultClaimRow, type CentrifugeVaultClaimRowProps, type CentrifugeVaultClaimUiEvent, type CentrifugeVaultClaimUiState, CentrifugeVaultClaimView, type CentrifugeVaultClaimViewProps, type CentrifugeVaultClaimed, type CentrifugeWalletSelectStepInput, type CentrifugeWalletSelectUiEvent, type CentrifugeWalletSelectUiState, CentrifugeWalletSelectView, type CentrifugeWalletSelectViewProps, 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 ClaimCentrifugeVaultParams, type ClaimConfig, ClaimContainer, type ClaimContainerProps, type ClaimExternalWalletUi, type ClientAuthConfig, type ClientAuthNamespace, ClientAuthNamespaceImpl, type ClientAuthSession, type ClientCentrifugeNamespace, ClientCentrifugeNamespaceImpl, 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, type ExternalWalletRequestUi, IdentityVerificationContainer, type IdentityVerificationContainerProps, type IdentityVerificationUiEvent, type IdentityVerificationUiState, IdentityVerificationView, type IdentityVerificationViewProps, KycLevelName, type KycTokenErrorReason, type KycTokenState, type LoadCentrifugeBuyTransactionState, type LoadCentrifugeVaultPositionsState, type LoadCentrifugeVaultStatusState, 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, type LoadTokenRegistryState, Logger, type LogoImageUi, OAUTH_CODE_VERIFIER_KEY, OAUTH_STATE_KEY, type OauthClientErrorReason, type OauthClientResult, OfferAssetCard, type OfferAssetCardProps, OfferAssetCardUi, OfferLogoUi, OfferSaleCard, type OfferSaleCardProps, OfferSaleCardUi, OffersAssetGrid, type OffersAssetGridProps, OffersGridContainer, type OffersGridContainerProps, type OffersGridData, 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, 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 PlaceCentrifugeRequestParams, type PrepareCentrifugeBuyParams, 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 UseCentrifugeBuyAmountViewModelOptions, type UseCentrifugeBuyAmountViewModelResult, type UseCentrifugeBuyCheckoutViewModelOptions, type UseCentrifugeBuyCheckoutViewModelResult, type UseCentrifugeBuyReviewViewModelOptions, type UseCentrifugeBuyReviewViewModelResult, type UseCentrifugeBuyTransactionOptions, type UseCentrifugeBuyTransactionResult, type UseCentrifugeClaimResult, type UseCentrifugeSidebarViewModelOptions, type UseCentrifugeSidebarViewModelResult, type UseCentrifugeVaultClaimViewModelOptions, type UseCentrifugeVaultClaimViewModelResult, type UseCentrifugeVaultPositionsOptions, type UseCentrifugeVaultPositionsResult, type UseCentrifugeVaultStatusOptions, type UseCentrifugeVaultStatusResult, type UseCentrifugeVaultStatusesOptions, type UseCentrifugeVaultStatusesResult, type UseCentrifugeWalletSelectViewModelOptions, type UseCentrifugeWalletSelectViewModelResult, 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, type UseTokenRegistryOptions, type UseTokenRegistryResult, VerificationOverlay, type VerificationOverlayProps, type WalletAuthorizationError, type WalletAuthorizationPhase, type WalletAuthorizationResult, WalletError, WalletLabelResolver, WalletSelection, type WalletsStatus, authorizeWallet, buyCentrifuge, centrifugeLoadErrorReason, centrifugeVaultOrderReasonMessage, centrifugeVaultOrderingMessage, claimCentrifugeVault, classifyWalletError, connectExternalWalletFlow, createCoinListClient, defaultCheckoutConfig, ensureErc20Allowance, executeOndoSwap, executeSwap, executeTokenSale, formatCountdown, formatMonthYear, formatSaleCardCountdown, isNotTradable, offerAssetIconUrl, offerIconUrl, offerTokenIdentifier, ondoLoadErrorReason, pinoClientLogger, placeCentrifugeRequest, prepareCentrifugeBuy, prepareOndoBuy, prepareOndoSell, primaryCentrifugeVaultOrderReason, quoteIsStale, quoteOverAsks, stablecoinIconUrl, submitErc20Approval, toInputAssetUi, tokenLogoSrcSet, tokenLogoUrl, tokenMetadataOf, useCentrifugeBuyAmountViewModel, useCentrifugeBuyCheckoutViewModel, useCentrifugeBuyReviewViewModel, useCentrifugeBuyTransaction, useCentrifugeClaim, useCentrifugeSidebarViewModel, useCentrifugeVaultClaimViewModel, useCentrifugeVaultPositions, useCentrifugeVaultStatus, useCentrifugeVaultStatuses, useCentrifugeWalletSelectViewModel, 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, usePageVisible, useParticipations, useRequirements, useRequirementsChecklistViewModel, useSuperstateAmountViewModel, useSuperstateReviewViewModel, useSuperstateSidebarViewModel, useSuperstateSwapCheckoutViewModel, useSuperstateWalletViewModel, useSwapOutputToken, useSwapQuote, useTaxDocument, useTaxDocumentModalViewModel, useTokenMetadata, useTokenRegistry, validateAmount, validateCentrifugeBuyAmount, validateSellAmount, validateSuperstateAmount };