import type { FunnelStepId } from '../runtime/funnel-runtime.js'; export type FunnelAnswerKey = string; export type FunnelBinaryChoice = 'yes' | 'no'; export type FunnelBirthDate = { year: number; month: number; day: number; }; export type FunnelTempUpload = { key: string; publicUrl: string; contentType: string; sizeBytes: number; uploadedAt: string; }; /** * Typed SDK-facing answers object shared across all steps. * Keep this shape in sync with docs/references/funnel-sdk-user-answers.md so future funnels can extend it safely. */ export type FunnelUserAnswers = Record & { /** Generic branching answers by step id for yes/no splits. */ stepChoices?: Partial>; /** Core onboarding answers used by template steps. */ selectedDevices?: Array<'iphone' | 'laptop' | 'watch' | 'none'>; /** Upsell answers. */ upsellAccepted?: boolean; upsellEmail?: string; upsellSelectedPlanId?: string; selectedPaywallPlanId?: string; /** Manage subscription answers. */ manageSubscriptionHasActive?: boolean; manageSubscriptionReason?: string; manageSubscriptionCancelled?: boolean; manageSubscriptionCancelledId?: string; /** Optional location and astro metadata shared by astrology-style funnels. */ birthDate?: FunnelBirthDate; birthCity?: string; sunSign?: string; moonSign?: string; ascendantSign?: string; /** Optional media metadata for steps that capture and upload user images. */ palmPhotoUpload?: FunnelTempUpload; palmPhotoUrl?: string; }; export declare const readStepChoice: (answers: FunnelUserAnswers, stepId: FunnelStepId) => FunnelBinaryChoice | undefined; export declare const writeStepChoice: (answers: FunnelUserAnswers, stepId: FunnelStepId, choice: FunnelBinaryChoice) => FunnelUserAnswers;