import type { ThreeDsRealtimeTransport } from "@fluid-app/fluid-pay-ui";
import type { ThreeDSStatus } from "@fluid-app/fluid-pay-core/types";
import type { ThreeDsSessionState } from "@fluid-app/portal-core/pay-types";
/**
 * Polling-only realtime transport. A no-op channel keeps useVgs3DSCompletion's
 * `hasPusher` true so it does not log the misleading "subscribe returned null"
 * error; the 3s status poll is the sole resolver. The Pusher fast-follow
 * replaces this constant with a real pusher-js client.
 */
export declare const POLLING_ONLY_TRANSPORT: ThreeDsRealtimeTransport;
/**
 * Map the BFF 3ds_status session state -> the FE-A hook's ThreeDSStatus. Only
 * the known terminal states resolve the poll (approved/skipped -> completed,
 * denied/timed_out/expired -> failed, cancelled -> canceled); any other value
 * (initialized/pending or a future backend state) stays non-terminal so the
 * poll keeps running until the EMVCo timeout, rather than being mis-classified.
 */
export declare function mapSessionStateToThreeDSStatus(state: ThreeDsSessionState, expired: boolean | null): ThreeDSStatus;
/**
 * Dig the portal BFF error code off a thrown ApiError. Structural and
 * self-validating: a non-ApiError simply yields undefined (no instanceof gate).
 */
export declare function cardAdd3DSErrorCode(error: unknown): string | undefined;
/**
 * Customer-facing message off a thrown portal ApiError. The client lifts the
 * portal `{ error: { message } }` onto ApiError.message; fall back to the
 * nested field, then the supplied generic. (`data.error_message` is the
 * storefront shape and is always undefined here.)
 */
export declare function cardAdd3DSErrorMessage(error: unknown, fallback: string): string;
//# sourceMappingURL=three-ds-card-add-helpers.d.ts.map