import type { Address } from 'viem';
import type { LoginType } from '../utils/userInfo';
/**
 * Platform-agnostic **user** identity surface consumed by core hooks.
 *
 * Deliberately scoped to who the *end user* is — `apiKey` (the *customer*
 * identity, set by the integrator) is kept on `useFunkitConfig` so the two
 * concerns don't get conflated. Core hooks that need both read each from its
 * own seam.
 *
 * On web this is derived from wagmi + `GeneralWalletProvider`; on React Native
 * it will be derived from host-app props. Widen this surface only when a core
 * hook genuinely needs more — keep it free of DOM- and wagmi-bound types so it
 * can move to `@funkit/connect-core` untouched.
 */
export interface FunkitIdentity {
    /**
     * Stable user id used to key user-scoped API calls. Equals the configured
     * `externalUserId` (or a synthetic namespaced id derived from it) when one is
     * present, otherwise the connected wallet address, or the `'0x'` placeholder
     * when neither is present. Mirrors `userInfo.id`.
     */
    userId: string;
    /**
     * Effective wallet address user-scoped flows transact against, or `''` when
     * there is no connected/trusted address. Distinct from a display address:
     * this is the resolved address (`effectiveAddress`), not `userInfo.address`,
     * which carries the `'0x'` placeholder for guests.
     */
    walletAddress: Address | '';
    /** How the user authenticated (guest vs web3). */
    loginType: LoginType;
}
/**
 * Contract a platform implements to feed identity into core. Each platform
 * supplies a `useIdentity` hook: web wraps wagmi + `GeneralWalletProvider`
 * (see `useIdentity` there); React Native will wrap host-app-provided props.
 */
export interface IdentityProvider {
    useIdentity(): FunkitIdentity;
}
