import * as Rx from "rxjs"; import * as Store from "../rate-limits/store"; import { ReceiveEvent, GatewayPayload, UpdatePresence } from "../types"; import * as Dispatch from "./dispatch"; import * as Sharder from "./sharder"; export interface Options { token: string; /** Override gateway handling with custom payload source */ payloads$?: Rx.Observable; rateLimits?: { store: Store.Store; identifyLimit?: number; identifyWindow?: number; sendLimit?: number; sendWindow?: number; }; /** * Bitfield of the gateway intents you want to subscribe to. * `Intents.GUILDS` is always enabled. */ intents?: number; /** * Set the initial presence */ presence?: UpdatePresence; shardConfig?: Sharder.Options["shardConfig"]; sharderStore?: Sharder.Options["store"]; } /** A client is one or more shards */ export declare const create: (routes: import("../types").Endpoints>) => ({ token, intents, rateLimits: { store: rateLimitStore, identifyLimit, identifyWindow, ...shardRateLimits }, shardConfig, sharderStore, presence, }: Options) => { raw$: Rx.Observable>; dispatch$: Rx.Observable>; fromDispatch: Dispatch.Dispatch; fromDispatchWithShard: Dispatch.DispatchWithShard; latestDispatch: Dispatch.Dispatch; shards$: Rx.Observable<{ id: [number, number]; conn: { setBaseUrl: (baseUrl: string) => void; raw$: Rx.Observable>; dispatch$: Rx.Observable>; heartbeat$: Rx.Observable>; reconnect$: Rx.Observable>; invalidSession$: Rx.Observable>; hello$: Rx.Observable>; heartbeatAck$: Rx.Observable>; }; send: (payload: GatewayPayload) => void; reconnect: () => void; raw$: Rx.Observable>; dispatch$: Rx.Observable>; ready$: Rx.Observable>; latency$: Rx.Observable; effects$: Rx.Observable; debug$: Rx.Observable; }>; shardsReady$: Rx.Observable; debug$: Rx.Observable; }; export type Client = ReturnType>; export declare const createFromPayloads: (incoming$: Rx.Observable) => Client;