export type PairingSecretResult = {
    secret: string;
    expiresAt: Date;
};
export type PairingExchangePayload = {
    token: string;
    baseUrl: string | null;
    lanUrl: string | null;
    connectUrls: string[];
};
export declare function cachePairingExchange(secret: string, payload: PairingExchangePayload): void;
export declare function getCachedPairingExchange(secret: string): PairingExchangePayload | null;
/**
 * Consume a pairing secret once and build the exchange payload.
 * Concurrent requests for the same secret share one in-flight exchange (mobile cold-start deeplink).
 */
export declare function exchangePairingSecretOnce(secret: string, buildPayload: () => PairingExchangePayload): Promise<PairingExchangePayload | null>;
export declare function createPairingSecret(): PairingSecretResult;
export declare function consumePairingSecret(secret: string): boolean;
/** @internal */
export declare function resetPairingSessionsForTests(): void;
