Checkout and payments SDK reference

Checkout drafts, validation, submission and payment-facing presentation data.

Import these public values from @upstorr/theme-sdk/v1. Do not import their internal source files.

createThemeCheckoutDraft

createThemeCheckoutDraft(checkout: ThemeCheckoutRuntimeSnapshot | ThemeCheckoutSnapshot | null, current?: ThemeCheckoutDraft): ThemeCheckoutDraft

createThemeCheckoutLineItemView

createThemeCheckoutLineItemView(item: unknown, index: number, checkout: ThemeCheckoutRuntimeSnapshot | ThemeCheckoutSnapshot | null): ThemeCheckoutLineItemView

createThemeCheckoutRuntimeInputFingerprint

createThemeCheckoutRuntimeInputFingerprint(input: { snapshot: ThemeCheckoutRuntimeSnapshot | null; error: string | null; }): string

createThemeCheckoutSavedAddressPatch

createThemeCheckoutSavedAddressPatch(type: "shipping" | "billing", address: Record<string, unknown>): ThemeCheckoutDraft

createThemeCheckoutSavedAddressSelect

createThemeCheckoutSavedAddressSelect(checkout: ThemeCheckoutRuntimeSnapshot | ThemeCheckoutSnapshot | null, draft: ThemeCheckoutDraft, type: "shipping" | "billing"): ThemeCheckoutSavedAddressView

createThemeCheckoutView

createThemeCheckoutView(checkout: ThemeCheckoutRuntimeSnapshot | ThemeCheckoutSnapshot | null, draft: ThemeCheckoutDraft, status?: { error?: string | null; message?: string | null; }): ThemeCheckoutView

createThemeDeliveryAddressPatch

createThemeDeliveryAddressPatch(place: ThemeMapPlace): ThemeCheckoutDraft

createThemeQrDataUrl

createThemeQrDataUrl(value: string, options?: { width?: number; color?: { dark?: string; light?: string; }; }): Promise<string>

fetchThemeCheckout

fetchThemeCheckout(sessionId?: string): Promise<ThemeCheckoutSnapshot>

fetchThemeMapPlace

fetchThemeMapPlace(placeId: string): Promise<ThemeMapPlace>

formatThemeCheckoutPrice

formatThemeCheckoutPrice(value: number | undefined, checkout: ThemeCheckoutRuntimeSnapshot | ThemeCheckoutSnapshot | null): string

mergeThemeCheckoutDraftPatch

mergeThemeCheckoutDraftPatch(current: ThemeCheckoutDraft, patch: ThemeCheckoutDraft): ThemeCheckoutDraft

normalizeThemeCheckoutDraft

normalizeThemeCheckoutDraft(draft: ThemeCheckoutDraft, checkout: ThemeCheckoutRuntimeSnapshot | ThemeCheckoutSnapshot | null): ThemeCheckoutDraft

quoteThemeLocalDelivery

quoteThemeLocalDelivery(input: { sessionId: string; place: ThemeMapPlace; draftVersion?: number; }): Promise<ThemeCheckoutSnapshot>

requireThemeCheckoutRuntimeSnapshot

requireThemeCheckoutRuntimeSnapshot(value: unknown): ThemeCheckoutRuntimeSnapshot

resolveThemeCheckoutLineItemImageAspectRatio

resolveThemeCheckoutLineItemImageAspectRatio(value: unknown, item: unknown): string

resolveThemeCheckoutResourceSessionId

resolveThemeCheckoutResourceSessionId(currentSessionId: string | null, incomingSessionId: string | null): string | null

reverseThemeMapPlace

reverseThemeMapPlace(latitude: number, longitude: number): Promise<ThemeMapPlace>

runThemePaymentAction

runThemePaymentAction({ action, labels, prefill, }: { action: ThemePaymentAction; labels: ThemePaymentLabels; prefill?: ThemePaymentPrefill; }): Promise<ThemePaymentConfirmation>

saveThemeCheckoutDraft

saveThemeCheckoutDraft(sessionId: string, draft: ThemeCheckoutDraft): Promise<ThemeCheckoutSnapshot>

searchThemeMapAddresses

searchThemeMapAddresses(input: string, bias?: { latitude: number; longitude: number; } | null): Promise<ThemeMapAddressSuggestion[]>

shouldResetThemeCheckoutTransientState

shouldResetThemeCheckoutTransientState(current: ThemeCheckoutRuntimeSnapshot | null, next: ThemeCheckoutRuntimeSnapshot | null): boolean

submitThemeCheckout

submitThemeCheckout(input: { sessionId?: string; draft: ThemeCheckoutDraft; checkout?: ThemeCheckoutSnapshot | null; onCheckoutSaved?: (checkout: ThemeCheckoutSnapshot) => void; labels?: Partial<ThemePaymentLabels>; }): Promise<ThemeCheckoutSubmitResponse>

THEME_CHECKOUT_MANUAL_ADDRESS_OPTION

THEME_CHECKOUT_MANUAL_ADDRESS_OPTION: "__manual__"

ThemeCheckoutRuntime

type ThemeCheckoutRuntime = {
    view: ThemeCheckoutView;
    isEmpty: boolean;
    isUpdating: boolean;
    isComplete: boolean;
    message: string | null;
    error: string | null;
    addressSuggestions: ThemeMapAddressSuggestion[];
    isAddressSearching: boolean;
    updateDraftFields: (patch: ThemeCheckoutDraft, persist?: boolean) => void;
    saveDraft: () => Promise<void>;
    saveDraftWithPatch: (patch: ThemeCheckoutDraft) => Promise<void>;
    removeUnavailableItem: (lineItemId: string) => Promise<void>;
    searchLocalDeliveryAddresses: (input: string) => Promise<void>;
    selectLocalDeliveryAddress: (placeId: string) => Promise<void>;
    confirmLocalDeliveryPin: (latitude: number, longitude: number) => Promise<void>;
    useCurrentLocationForLocalDelivery: () => Promise<void>;
    placeOrder: () => Promise<void>;
};

useThemeCheckout

useThemeCheckout(checkout: unknown): ThemeCheckoutRuntime