Skip to main content
Class: SummerClientStore · Inherits: RefCounted · Access: Summer.client.store Browse the current Game store and request trusted checkout. Lists immutable platform items and Sparks display prices through the trusted Player Host. Browsing requires the advertised player.store.read@1 capability and does not require joining a multiplayer session. Checkout additionally requires player.store.checkout@1. The application-owned Host displays the authoritative cart and handles approval. The Game cannot approve a purchase. A retained facade cannot follow a new authenticated binding after shutdown/reinitialization: acquire it again from the current client. Released facades expose no current checkout facts and refuse new operations. Host capabilities named here: player.store.read@1, player.store.checkout@1

Properties

Methods

check_browse_readiness

Returns the Engine’s advisory check of the authenticated binding and player.store.read@1 prerequisites also used by list_items(). The SummerResult includes a code and diagnostic message. invalid_lifecycle requires initialization or rebinding after an identity change; unavailable describes a missing execution/Host capability or unavailable Host. Does not submit, activate a provider, reserve capacity or guarantee later success. Arguments, in-flight page limits and transport results remain the operation’s responsibility. C# exposes CheckBrowseReadiness(). Returns: SummerResult

check_checkout_readiness

Returns the Engine’s advisory check of the same authenticated binding, player.store.checkout@1 grants and durable outcome event support used by request_checkout(). Readiness is independent of browsing and existing pending purchases. A known terminal outcome event-stream failure makes new checkout creation unavailable until the authenticated binding is restored. invalid_lifecycle requires initialization or rebinding after an identity change; unavailable describes missing prerequisites. The result includes a diagnostic message. No request, approval, acknowledgment or provider activation occurs. A successful check does not validate a cart, reserve capacity, approve a purchase or guarantee success. Recovery of existing outcomes continues independently of permission to create a new purchase. Every deliberate checkout call still creates a new identity: never retry an unknown purchase through another call. C# exposes CheckCheckoutReadiness(). Returns: SummerResult

has_pending_checkouts

Whether get_pending_checkout_request_ids() is nonempty. Includes requests without a quote, canceled or dropped observation handles, and recovered pending or manual-review outcomes. Terminal outcomes and definite no-effect refusals are not pending. This queries existing retained facts without submitting, polling, retrying, or acknowledging anything. False describes this binding’s local knowledge, not a guarantee that durable recovery is complete. For a checkout panel, connect checkout_status_changed synchronously, then render get_checkout_statuses() and query this method. Re-query after requesting checkout, on operation completion, and in each status callback instead of retaining another pending-ID or version map for rendering. Rendering should tolerate duplicate facts; side effects still require identity-based deduplication. Operation completion should display a creation failure only when no authoritative status exists and SummerCheckoutOperation.is_outcome_unknown() is false. Preserve canonical terminal status messages rather than overwriting them with a generic operation failure. Closing a panel disconnects observation and never cancels a purchase. Returns: bool

list_items

Requests one page containing at most limit items (1 to 100). Pass the previous operation’s SummerStoreItemsOperation.next_cursor to request another page. An empty cursor starts browsing. Completion is deferred; inspect the operation result before reading items. A second request while one is in flight fails with operation_in_progress. Cancellation discards the page and drains the old request before another may start. Game code supplies no Game ID, buyer identity, credentials, or prices. Returns: SummerStoreItemsOperation Returns at once. Wait for the result with var result: SummerResult = await op.get_result_or_completed_signal(); see SummerOperation.

request_checkout

Requests one cart containing 1 to 16 unique offers and at most 64 total units. Prices and authenticated identity come from the trusted Host. Human approval happens in application-owned UI. Creation acceptance is not purchase completion. The returned operation completes on purchased or a definite terminal failure; manual review remains unresolved. Dropping or canceling the operation does not cancel a purchase or discard the durable outcome. No status polling or Game approval API is exposed. Returns: SummerCheckoutOperation Returns at once. Wait for the result with var result: SummerResult = await op.get_result_or_completed_signal(); see SummerOperation.

get_checkout_statuses

Returns retained checkout states for this authenticated player and Game. Connect checkout_status_changed before inspecting retained state. Enumeration does not acknowledge delivery. Unobserved terminal outcomes remain durable in the Host/backend and locally retained; new requests are refused when the bounded retention capacity is full. Returns: SummerCheckoutStatus[]

get_pending_checkout_request_ids

Returns sorted retained unresolved request identities for this authenticated binding, including requests without a quote response and canceled or dropped handles. Terminal outcomes and definite no-effect refusals disappear from this list. Enumeration does not acknowledge or retry anything. Account changes and shutdown clear the local binding; the trusted Host recovers durable outcomes after rebinding. This list is local knowledge, not a claim that a request was accepted or that recovery is complete. Returns: PackedStringArray

Signals

checkout_status_changed

Delivers retained authoritative checkout state through a standard synchronous connection. Terminal delivery is acknowledged internally only after a synchronous callback returns and the authenticated binding still matches. A crash before acknowledgment may replay delivery: deduplicate by request ID and version. This guarantees callback dispatch, not successful Game business processing. Deferred-only connections do not acknowledge delivery. No listeners means the outcome is retained until a synchronous listener connects. Receipt handling never grants inventory; canonical inventory remains authoritative.
What is live on the platform today: platform capability status. Check availability at runtime before you offer a feature.