TypeScript Types
This page documents all exported types from@waitify-io/fanfare-sdk-core.
Importing Types
Copy
import type {
FanfareConfig,
FanfareSDK,
Session,
Queue,
QueueConsumerState,
Draw,
DrawResult,
AuctionDetails,
BidResult,
ExperienceJourney,
JourneySnapshot,
} from "@waitify-io/fanfare-sdk-core";
Configuration Types
FanfareConfig
Copy
interface FanfareConfig {
organizationId: string;
publishableKey: string;
environment?: "production" | "staging" | "development";
apiUrl?: string;
debug?: boolean;
auth?: {
persistSession?: boolean;
sessionDuration?: number;
};
logging?: {
level?: "error" | "warn" | "info" | "debug" | "metrics";
};
sync?:
| boolean
| {
enabled?: boolean;
syncKeys?: string[];
channelName?: string;
};
features?: {
fingerprinting?: boolean;
};
beacon?: BeaconConfig;
}
BeaconConfig
Copy
interface BeaconConfig {
enabled?: boolean;
batchSize?: number;
flushInterval?: number;
maxRetries?: number;
}
Session Types
Session
Copy
interface Session {
type: "guest" | "authenticated";
consumerId: string;
email?: string;
phone?: string;
expiresAt: string;
deviceFingerprint?: string;
}
GuestSession
Copy
interface GuestSession extends Session {
type: "guest";
guestId: string;
email: undefined;
}
AuthenticatedSession
Copy
interface AuthenticatedSession extends Session {
type: "authenticated";
email?: string;
phone?: string;
}
AuthStatus
Copy
interface AuthStatus {
isAuthenticated: boolean;
isGuest?: boolean;
session?: Session;
}
OtpRequest
Copy
interface OtpRequest {
email?: string;
phone?: string;
defaultCountry?: string;
name?: string;
}
OtpVerify
Copy
interface OtpVerify {
email?: string;
phone?: string;
code: string;
defaultCountry?: string;
}
ExternalExchange
Copy
interface ExternalExchange {
exchangeCode: string;
}
LoginOptions
Copy
interface LoginOptions {
email: string;
}
Queue Types
Queue
Copy
interface Queue {
id: string;
experienceId: string;
name: string;
status: "pending" | "open" | "closed" | "paused";
capacity?: number;
currentSize: number;
estimatedWaitTime?: number;
openAt?: string;
closeAt?: string;
}
QueueEnterResult
Copy
interface QueueEnterResult {
position: number;
estimatedWaitTimeInSeconds: number;
status: "QUEUED";
}
QueueConsumerState
Copy
type QueueConsumerState =
| QueuedConsumerState
| AdmittedConsumerState
| CompletedConsumerState
| LeftConsumerState
| DeniedConsumerState
| NotQueuedConsumerState
| ExpiredConsumerState;
QueuedConsumerState
Copy
interface QueuedConsumerState {
status: "QUEUED";
position: number;
estimatedWaitTimeInSeconds: number;
}
AdmittedConsumerState
Copy
interface AdmittedConsumerState {
status: "ADMITTED";
admissionToken: string;
position?: number;
dequeuedAt?: string;
expiresAt?: string;
}
CompletedConsumerState
Copy
interface CompletedConsumerState {
status: "COMPLETED";
admissionToken: string;
completedAt?: string;
position?: number;
}
LeftConsumerState
Copy
interface LeftConsumerState {
status: "LEFT";
dequeuedAt?: string;
position?: number;
}
DeniedConsumerState
Copy
interface DeniedConsumerState {
status: "DENIED";
reason: string;
dequeuedAt?: string;
position?: number;
}
NotQueuedConsumerState
Copy
interface NotQueuedConsumerState {
status: "NOT_QUEUED";
dequeuedAt?: string;
position?: number;
}
ExpiredConsumerState
Copy
interface ExpiredConsumerState {
status: "EXPIRED";
expiredAt?: string;
position?: number;
}
QueueParticipation
Copy
interface QueueParticipation {
queueId: string;
enteredAt: string;
status: "QUEUED" | "ADMITTED" | "COMPLETED" | "LEFT" | "DENIED" | "NOT_QUEUED" | "EXPIRED";
position?: number;
estimatedWaitTime?: number;
metadata?: Record<string, unknown>;
admissionToken?: string;
admittedAt?: string;
expiresAt?: string;
}
Draw Types
Draw
Copy
interface Draw {
id: string;
openAt?: string | null;
closeAt?: string | null;
timeZone: string;
supportsGuest: boolean;
drawAt: string;
capacity?: number | null;
continueSelectingUntilCompleted?: boolean | null;
}
DrawConsumerState
Copy
type DrawConsumerState = DrawNotEnteredState | DrawEnteredState | DrawWonState | DrawCompletedState | DrawDeniedState;
DrawNotEnteredState
Copy
interface DrawNotEnteredState {
status: "NOT_ENTERED";
}
DrawEnteredState
Copy
interface DrawEnteredState {
status: "ENTERED";
}
DrawWonState
Copy
interface DrawWonState {
status: "WON";
wonAt: string;
admissionToken: string;
fingerprint?: string;
}
DrawCompletedState
Copy
interface DrawCompletedState {
status: "COMPLETED";
completedAt: string;
admissionToken: string;
fingerprint?: string;
}
DrawDeniedState
Copy
interface DrawDeniedState {
status: "DENIED";
reason: string;
deniedAt: string;
}
DrawResult
Copy
interface DrawResult {
won: boolean;
drawTime: string;
admissionToken?: string;
prizeDetails?: Record<string, unknown>;
nextSteps?: string;
}
DrawParticipation
Copy
interface DrawParticipation {
drawId: string;
enteredAt: string;
status: "entered" | "drawn" | "won" | "lost" | "expired";
entryNumber?: string;
metadata?: Record<string, unknown>;
result?: DrawResult;
checkedAt?: string;
fingerprint?: string;
}
Auction Types
AuctionDetails
Copy
interface AuctionDetails {
id: string;
openAt?: string | null;
closeAt?: string | null;
settleAt: string;
currencyCode: string;
reservePrice?: string | null;
minBidIncrement?: string | null;
autoExtendSeconds?: number | null;
timeZone: string;
supportsGuest: boolean;
}
AuctionStatus
Copy
interface AuctionStatus {
auctionId: string;
status: "winning" | "outbid" | "watching";
currentBid?: string;
highestBid: string;
timeRemaining: number;
bidCount?: number;
position?: number;
}
Bid
Copy
interface Bid {
id?: string;
amount: string;
timestamp: string;
isWinning: boolean;
bidderAlias?: string;
isYours?: boolean;
}
BidResult
Copy
interface BidResult {
status: "winning" | "outbid" | "accepted";
amount: string;
highestBid: string;
bidCount: number;
position?: number;
}
AutoRebidConfig
Copy
interface AutoRebidConfig {
enabled: boolean;
maxBid: string;
increment: string;
remainingBudget?: string;
lastRebidAt?: string;
rebidCount?: number;
}
AuctionParticipation
Copy
interface AuctionParticipation {
auctionId: string;
enteredAt: string;
status: "watching" | "bidding" | "winning" | "outbid" | "won" | "lost";
currentBid?: string;
highestBid?: string;
bidCount?: number;
lastBidAt?: string;
metadata?: Record<string, unknown>;
fingerprint?: string;
}
Waitlist Types
WaitlistStatus
Copy
interface WaitlistStatus {
waitlistId: string;
isEntered: boolean;
enteredAt?: string;
}
WaitlistEntry
Copy
interface WaitlistEntry {
id: string;
waitlistId: string;
sequenceId: string;
consumerId: string;
enteredAt: string;
}
WaitlistParticipation
Copy
interface WaitlistParticipation {
id: string;
waitlistId: string;
sequenceId: string;
isEntered: boolean;
enteredAt?: string;
}
Timed Release Types
TimedRelease
Copy
interface TimedRelease {
id: string;
openAt?: string;
closeAt?: string;
timeZone: string;
supportsGuest: boolean;
}
TimedReleaseConsumerState
Copy
type TimedReleaseConsumerState =
| TimedReleaseNotEnteredState
| TimedReleaseEnteredState
| TimedReleaseCompletedState
| TimedReleaseLeftState;
TimedReleaseNotEnteredState
Copy
interface TimedReleaseNotEnteredState {
status: "NOT_ENTERED";
}
TimedReleaseEnteredState
Copy
interface TimedReleaseEnteredState {
status: "ENTERED";
enteredAt: string;
selectedVariantId?: string;
}
TimedReleaseCompletedState
Copy
interface TimedReleaseCompletedState {
status: "COMPLETED";
completedAt: string;
selectedVariantId?: string;
}
TimedReleaseLeftState
Copy
interface TimedReleaseLeftState {
status: "LEFT";
leftAt: string;
}
TimedReleaseParticipation
Copy
interface TimedReleaseParticipation {
timedReleaseId: string;
enteredAt: string;
status: "entered" | "completed" | "left";
selectedVariantId?: string;
metadata?: Record<string, unknown>;
}
Experience Journey Types
JourneyStage
Copy
type JourneyStage = "not_started" | "entering" | "needs_auth" | "needs_access_code" | "routing" | "routed";
SequenceStage
Copy
type SequenceStage =
| "none"
| "upcoming"
| "waitlist_entered"
| "active_enterable"
| "participating"
| "admitted"
| "admission_expired"
| "ended";
JourneySnapshot
Copy
interface JourneySnapshot {
revision: number;
updatedAt: number;
journeyStage: JourneyStage;
sequenceStage: SequenceStage;
requirements: Requirement[];
availableActions: {
journey: JourneyAction[];
sequence: SequenceAction[];
};
context: JourneyContext;
events: JourneyEvent[];
lastSeenEventId?: string;
}
Requirement
Copy
interface Requirement {
type: "authentication" | "access_code" | "bot_check";
required: boolean;
reason?: string;
metadata?: Record<string, unknown>;
}
JourneyContext
Copy
interface JourneyContext {
experienceId: string;
experience?: ExperienceSession;
sequenceId?: string;
distribution?: DistributionSummary;
participation?: {
id: string;
type: "queue" | "draw" | "auction" | "waitlist" | "timed_release";
};
accessCode?: string;
admittanceToken?: string;
admittanceExpiresAt?: number;
}
JourneyEvent
Copy
interface JourneyEvent {
id: string;
ts: number;
kind: "reroute" | "sequence_change" | "distribution_change" | "requirement" | "error" | "info";
severity: "info" | "success" | "warning" | "error";
audience: "user" | "system" | "analytics";
message: string;
detail?: Record<string, unknown>;
}
JourneyAction
Copy
type JourneyAction =
| "start"
| "authenticate"
| "provide_access_code"
| "skip_access_code"
| "request_reroute"
| "retry"
| "complete_bot_check"
| "refresh_distribution";
SequenceAction
Copy
type SequenceAction =
| "enter_waitlist"
| "leave_waitlist"
| "enter_queue"
| "enter_draw"
| "enter_auction"
| "enter_timed_release"
| "complete_timed_release"
| "leave_participation";
SDK Instance Type
FanfareSDK
Copy
interface FanfareSDK {
readonly auth: AuthModule;
readonly queues: QueueModule;
readonly draws: DrawModule;
readonly auctions: AuctionModule;
readonly experiences: ExperienceModule;
readonly waitlists: WaitlistModule;
readonly timedReleases: TimedReleaseModule;
readonly beacon: BeaconModule;
restore(): Promise<RestoreResult>;
resume(): Promise<void>;
getActiveExperiences(): Promise<ActiveExperiences>;
on<K extends keyof SDKEvents>(event: K, handler: (data: SDKEvents[K]) => void): () => void;
destroy(): Promise<void>;
}
RestoreResult
Copy
interface RestoreResult {
session: Session | null;
experiences: {
queues: Record<string, QueueParticipation>;
draws: Record<string, DrawParticipation>;
auctions: Record<string, AuctionParticipation>;
appointments: Record<string, unknown>;
waitlists: Record<string, WaitlistParticipation>;
timedReleases: Record<string, TimedReleaseParticipation>;
experiences: Record<string, ExperienceSession>;
};
}
ActiveExperiences
Copy
interface ActiveExperiences {
queues: string[];
draws: string[];
auctions: string[];
appointments: string[];
waitlists: string[];
timedReleases: string[];
experiences: string[];
}
Consumer Types
Consumer
Copy
interface Consumer {
id: string;
email?: string;
createdAt: string;
metadata?: Record<string, unknown>;
}