@funkit/connect-core
v9.3.0
Published
Headless, platform-agnostic business logic shared by @funkit/connect (web) and @funkit/connect-rn (React Native). No DOM, vanilla-extract, or wagmi.
Readme
FunkitConnectCore
@funkit/connect-core holds the headless, platform-agnostic business logic shared by
@funkit/connect (web) and @funkit/connect-rn (React Native): domains,
utils, hooks, Statsig wrappers, theme factories, and the FunLogger class.
Invariant: no DOM, vanilla-extract, or wagmi imports anywhere under src/**. Platform
concerns (rendering, transports, storage) are supplied by the consuming package through the
contracts defined here. See ../connect-rn/README.md for the core/web/RN architecture.
Fiat routing tables
useFiatQuote takes a required routingTableSessionId and quotes through the
routing table unless unstable_routingOverrides is set.
The table sends the corridor and a methods array in its JSON body. An optional
getRoutingProviderInputs callback supplies client-held provider inputs at request time;
React Native reads MoonPay's access token once the buyer's connection is active. Tokens
are omitted when unavailable and never enter query keys, request logs (including debug
logs) or cached errors.
After provider authentication, the existing table invalidation marks the table stale,
so its next fetch reads fresh credentials.
Host provider overrides always use POST /fiat/quote.
That endpoint persists the host allowlist through backend KYC rediscovery; the
routing quote endpoint only accepts the provider selected for the current quote.
Moving pinned flows onto the table requires an API contract that preserves the
host allowlist separately from that selection.
The client does not throttle table requests; the server rate limits them per buyer.
Try again and a session remount fetch at once, and a refresh joins a request in flight.
Provider exhaustion refreshes the table once per route and amount, and once per interval.
A table's lifetime is read from expiresAt relative to its arrival, so a wrong phone
clock does not expire it early; it is held for at least 17 seconds and at most 60. The
replacement is requested 5 seconds before that deadline, and a table stops supplying
providers and bounds at the deadline. A failed refresh keeps the held table until then.
A failed table request is retried once (a 429 after 12 seconds), then surfaced as a quote
error; unpinned table flows do not fall back to the legacy endpoint.
