createReactiveStoreWithInitialValueAndSlotTracking
Creates a ReactiveStreamStore that combines an initial RPC fetch with an ongoing subscription to keep its state up to date.
The store uses slot-based comparison to ensure that only the most recent value is kept, regardless of whether it came from the initial RPC response or a subscription notification. This prevents stale data from overwriting newer data when the RPC response and subscription notifications arrive out of order.
Things to note:
- The returned store starts in
status: 'idle'. Call ReactiveStreamStore.connect | `connect()` to fire the RPC request and open the subscription. - The store transitions through
loadinguntil the first response or notification arrives, then toloadedwith a SolanaRpcResponse containing the value and the slot context at which it was observed. - On error from either source, the store transitions to
status: 'error'preserving the last known value. Only the first error per connection window is captured. - A subsequent
connect()aborts the current connection, transitions back tostatus: 'loading'(preserving the last knowndataanderrorfor stale-while-revalidate), and re-fires the RPC request and subscription with a fresh inner abort signal. - ReactiveStreamStore.reset | `reset()` aborts the current connection and returns the
store to
idle, clearingdataanderror. - Attach a caller-provided cancellation source via
ReactiveStreamStore.withSignal | `withSignal()` —
store.withSignal(signal).connect()composes the signal with the per-connection controller. Aborting the caller's signal transitions the store toerrorwith that abort reason.
Type Parameters
| Type Parameter |
|---|
TRpcValue |
TSubscriptionValue |
TItem |
Parameters
| Parameter | Type | Description |
|---|---|---|
config | CreateReactiveStoreWithInitialValueAndSlotTrackingConfig<TRpcValue, TSubscriptionValue, TItem> | - |
Returns
ReactiveStreamStore<Readonly<{
context: Readonly<{
slot: Slot;
}>;
value: TItem;
}>>
Example
See
ReactiveStreamStore