import { type GatewayChannelLayoutListener, type GatewayChannelLayoutSnapshot, type GatewayChannelLayoutSource, type GatewayChannelLayoutStatus } from "./gateway-channel-layout.js"; export declare const GATEWAY_EVENT_KINDS: readonly ["channel-created", "channel-deleted", "channel-pins-updated", "channel-updated", "guild-deleted", "guild-unavailable", "guild-updated", "message-bulk-deleted", "message-created", "message-deleted", "message-updated", "poll-vote-added", "poll-vote-removed", "reaction-added", "reaction-cleared", "reaction-emoji-cleared", "reaction-removed", "role-created", "role-deleted", "role-updated", "soundboard-sound-created", "soundboard-sound-deleted", "soundboard-sound-updated", "soundboard-sounds-updated", "stage-instance-created", "stage-instance-deleted", "stage-instance-updated", "thread-created", "thread-deleted", "thread-members-changed", "thread-updated"]; export type GatewayEventKind = typeof GATEWAY_EVENT_KINDS[number]; export type GatewayConnectionState = "authenticating" | "connecting" | "disabled" | "discovering" | "failed" | "ready" | "reconnecting" | "resolving-scope" | "stopped"; export type GatewayErrorCategory = "authentication-failed" | "authentication-timeout" | "connection-timeout" | "disallowed-intents" | "gateway-discovery-failed" | "gateway-scope-discovery-failed" | "heartbeat-timeout" | "identify-budget-exhausted" | "invalid-api-version" | "invalid-gateway-payload" | "invalid-gateway-discovery" | "invalid-gateway-scope-evidence" | "invalid-intents" | "invalid-ready-identity" | "invalid-ready-shard" | "invalid-resume-origin" | "invalid-shard-routing" | "invalid-shard" | "network-error" | "outbound-budget-exhausted" | "protocol-error" | "rate-limited" | "session-start-limit-exhausted" | "session-start-limit-insufficient" | "sharding-required" | "unknown-fatal-close"; export type GatewayChangeKind = "events" | "layout" | "status"; export type GatewayChangeListener = (kind: GatewayChangeKind) => void; export interface ContentFreeGatewayEvent { channelId?: string; cursor: string; guildId: string; kind: GatewayEventKind; messageId?: string; messageIds?: string[]; parentChannelId?: string; receivedAt: string; roleId?: string; soundId?: string; soundIds?: string[]; stageInstanceId?: string; } export type GatewayCursorResetReason = "ahead-cursor" | "connection-gap" | "expired-cursor" | "foreign-cursor" | "invalid-cursor"; export interface GatewayEventPage { events: ContentFreeGatewayEvent[]; page: { afterCursor: string | null; available: number; hasMore: boolean; nextCursor: string; resetReason: GatewayCursorResetReason | null; resetRequired: boolean; returned: number; }; schemaVersion: number; status: "disabled" | "ok"; } export interface GatewayStatusSnapshot { buffer: { capacity: number; continuityGaps: number; dropped: number; size: number; totalAccepted: number; }; connection: { connectedAt: string | null; identifies: number; lastError: { at: string; category: GatewayErrorCategory; } | null; readyAt: string | null; reconnects: number; resumes: number; state: GatewayConnectionState; }; discovery: { checkedAt: string | null; recommendedShards: number | null; sessionStartLimit: { localStartsSinceCheck: number; maxConcurrency: number; remainingAtCheck: number; resetAfterMs: number; total: number; } | null; topology: { activeShards: number; resolvedChannels: number; scopedGuilds: number; } | null; }; enabled: boolean; feedEnabled: boolean; intents: readonly ("GUILDS" | "GUILD_MESSAGES" | "GUILD_MESSAGE_REACTIONS" | "GUILD_MESSAGE_POLLS" | "GUILD_VOICE_STATES")[]; layout: GatewayChannelLayoutStatus; privacy: { contentStored: false; persistent: false; privilegedIntentsRequested: false; }; projections: { soundboardPlayback: { enabled: boolean; scopedChannels: number; }; voiceChannelStatus: { enabled: boolean; scopedChannels: number; }; }; schemaVersion: number; status: "ok"; } export interface GatewayEventSource extends GatewayChannelLayoutSource { readonly enabled: boolean; getStatus(): GatewayStatusSnapshot; listEvents(options?: { afterCursor?: string; limit?: number; }): GatewayEventPage; subscribe(listener: GatewayChangeListener): () => void; } export interface GatewayEventStoreOptions { allowedChannelIds: ReadonlySet; allowedGuildIds: ReadonlySet; bufferSize?: number; clock?: () => Date; cursorNamespace?: string; enabled: boolean; eventFeedEnabled?: boolean; layoutGuildIds?: ReadonlySet; soundboardPlaybackChannelCount?: number; voiceChannelStatusChannelCount?: number; } export interface GatewayDiscoveryStatusInput { recommendedShards: number; sessionStartLimit: { maxConcurrency: number; remaining: number; resetAfterMs: number; total: number; }; } export interface GatewayTopologyStatusInput { activeShards: number; recommendedShards: number; resolvedChannels: number; scopedGuilds: number; } export declare class GatewayEventStore implements GatewayEventSource { #private; readonly enabled: boolean; readonly eventFeedEnabled: boolean; readonly guildIntentRequired: boolean; readonly layoutEnabled: boolean; constructor(options: GatewayEventStoreOptions); ingestDispatch(name: string, raw: unknown): boolean; transition(state: GatewayConnectionState, errorCategory?: GatewayErrorCategory): void; recordDiscovery(value: GatewayDiscoveryStatusInput): void; recordTopology(value: GatewayTopologyStatusInput): void; recordIdentify(): void; recordContinuityGap(): void; recordReconnect(): void; recordResume(): void; getStatus(): GatewayStatusSnapshot; listEvents(options?: { afterCursor?: string; limit?: number; }): GatewayEventPage; getChannelLayout(guildId: string): GatewayChannelLayoutSnapshot; getChannelLayoutStatus(): GatewayChannelLayoutStatus; subscribeChannelLayouts(listener: GatewayChannelLayoutListener): () => void; subscribe(listener: GatewayChangeListener): () => void; } //# sourceMappingURL=gateway-events.d.ts.map