import type { StreamWebSocketConstructor } from "./transport/types"; export type OnClientEvent = (collection: string, eventType: EventType, event: BaseStreamMessage) => boolean; /** * Connection tuning for the stream socket. * * Replaces the `Partial` type that `@opensea/stream-js` * borrowed from `@types/phoenix`. The options that only ever fed phoenix's * longpoll fallback and binary serializer (`sessionStorage`, * `longPollFallbackMs`, `binaryType`, `vsn`, `encode`, `decode`) are gone, * because neither path is used against the OpenSea stream. */ export type StreamConnectOptions = { /** * WebSocket implementation. Defaults to the global `WebSocket`, which every * browser and Node 22+ provides. Only set this on older runtimes, passing * something like the `ws` package. */ transport?: StreamWebSocketConstructor; /** Extra query parameters to append to the socket URL. */ params?: Record; /** Milliseconds to wait for a subscription acknowledgement. Default 10000. */ timeout?: number; /** Milliseconds between heartbeats. Default 30000. */ heartbeatIntervalMs?: number; /** Backoff before reconnect attempt `tries` (1-indexed). */ reconnectAfterMs?: (tries: number) => number; }; /** * OpenSea Stream API configuration object. * * @param apiKey OpenSea API key. Preferred over `token`, and named to match * `OpenSeaAPIConfig.apiKey` used elsewhere in the SDK. * @param token Deprecated alias for `apiKey`, kept so code migrating from * `@opensea/stream-js` keeps working unchanged. * @param network `Network` to use. Defaults to `Network.MAINNET`. * @param apiUrl Optional base URL override for the socket. * @param connectOptions connection tuning, see `StreamConnectOptions`. * @param onError a callback invoked whenever a transport error occurs. * @param logLevel `LogLevel` controlling how much the client logs. * @param onEvent a callback invoked whenever an event is emitted, useful for * metrics or logging. Returning false filters the event so the subscription * callback is not invoked. */ export type ClientConfig = { network?: Network; apiUrl?: string; /** OpenSea API key. Provide either this or `token`. */ apiKey?: string; /** @deprecated Use `apiKey` instead. */ token?: string; connectOptions?: StreamConnectOptions; onError?: (error: unknown) => void; logLevel?: LogLevel; onEvent?: OnClientEvent; }; export declare enum Network { MAINNET = "mainnet" } export declare enum EventType { ITEM_METADATA_UPDATED = "item_metadata_updated", ITEM_LISTED = "item_listed", ITEM_SOLD = "item_sold", ITEM_TRANSFERRED = "item_transferred", /** * Never emitted by the Stream API. Item-level offers arrive as * {@link EventType.ITEM_RECEIVED_BID}. Kept so existing references compile. * * @deprecated Use {@link EventType.ITEM_RECEIVED_BID}. * @hidden */ ITEM_RECEIVED_OFFER = "item_received_offer", ITEM_RECEIVED_BID = "item_received_bid", ITEM_CANCELLED = "item_cancelled", COLLECTION_OFFER = "collection_offer", TRAIT_OFFER = "trait_offer", ORDER_INVALIDATE = "order_invalidate", ORDER_REVALIDATE = "order_revalidate" } interface BaseItemMetadataType { name: string | null; image_url: string | null; animation_url: string | null; metadata_url: string | null; } export type BaseItemType = { nft_id: string; permalink: string; metadata: Metadata; chain: { name: string; }; }; export type Payload = { item: BaseItemType; collection: { slug: string; }; chain: string; }; export type BaseStreamMessage = { event_type: string; version: number; sent_at: string; payload: Payload; }; export type Trait = { trait_type: string; value: string | null; display_type: string | null; max_value: number | null; trait_count: number | null; order: number | null; }; interface ExtendedItemMetadataType extends BaseItemMetadataType { description: string | null; background_color: string | null; traits: Trait[]; } export type ItemMetadataUpdatePayload = { collection: { slug: string; }; item: BaseItemType; }; export type ItemMetadataUpdate = BaseStreamMessage; export type Account = { address: string; }; export type PaymentToken = { address: string; decimals: number; eth_price: string; name: string; symbol: string; usd_price: string; }; export type AssetContractCriteria = { address: string; }; export type CollectionIdentifier = { slug: string; }; interface BaseOrderEventPayload extends Payload { quantity: number; maker: Account; taker: Account; order_hash: string; payment_token: PaymentToken; event_timestamp: string; } interface BasePricedOrderEventPayload extends BaseOrderEventPayload { base_price: string; expiration_date: string; } export interface ItemListedEventPayload extends BasePricedOrderEventPayload { listing_type: string; listing_date: string; is_private: boolean; } export type ItemListedEvent = BaseStreamMessage; export type Transaction = { hash: string; timestamp: string; }; export interface ItemSoldEventPayload extends BaseOrderEventPayload { listing_type: string; closing_date: string; transaction: Transaction; sale_price: string; is_private: boolean; } export type ItemSoldEvent = BaseStreamMessage; export interface ItemTransferredEventPayload extends Payload { from_account: Account; quantity: number; to_account: Account; transaction: Transaction; event_timestamp: string; } export type ItemTransferredEvent = BaseStreamMessage; export interface ItemReceivedBidEventPayload extends BasePricedOrderEventPayload { created_date: string; } export type ItemReceivedBidEvent = BaseStreamMessage; /** * @deprecated Never emitted. Use {@link ItemReceivedBidEventPayload}. * @hidden */ export interface ItemReceivedOfferEventPayload extends ItemReceivedBidEventPayload { } /** * @deprecated Never emitted. Use {@link ItemReceivedBidEvent}. * @hidden */ export type ItemReceivedOfferEvent = BaseStreamMessage; export interface ItemCancelledEventPayload extends BasePricedOrderEventPayload { listing_type: string; listing_date: string; transaction: Transaction; is_private: boolean; } export type ItemCancelledEvent = BaseStreamMessage; export interface CollectionOfferEventPayload extends BasePricedOrderEventPayload { created_date: string; collection_criteria: CollectionIdentifier; asset_contract_criteria: AssetContractCriteria; } export type CollectionOfferEvent = BaseStreamMessage; export type TraitCriteria = { trait_type: string; trait_name: string; }; export interface TraitOfferEventPayload extends CollectionOfferEventPayload { trait_criteria?: TraitCriteria; trait_criteria_list?: TraitCriteria[]; } export type TraitOfferEvent = BaseStreamMessage; export interface OrderValidationEventPayload { event_timestamp: string; order_hash: string; protocol_address: string; chain: { name: string; }; collection: { slug: string; }; item: BaseItemType; } export type OrderValidationEvent = BaseStreamMessage; export type Callback = (event: Event) => unknown; export declare enum LogLevel { DEBUG = 20, INFO = 30, WARN = 40, ERROR = 50 } export {};