import type { Document } from '../bson'; import type { ServerDescription } from './server_description'; import type { TopologyDescription } from './topology_description'; /** * Emitted when server description changes, but does NOT include changes to the RTT. * @public * @category Event */ export class ServerDescriptionChangedEvent { /** A unique identifier for the topology */ topologyId: number; /** The address (host/port pair) of the server */ address: string; /** The previous server description */ previousDescription: ServerDescription; /** The new server description */ newDescription: ServerDescription; /** @internal */ constructor( topologyId: number, address: string, previousDescription: ServerDescription, newDescription: ServerDescription ) { this.topologyId = topologyId; this.address = address; this.previousDescription = previousDescription; this.newDescription = newDescription; } } /** * Emitted when server is initialized. * @public * @category Event */ export class ServerOpeningEvent { /** A unique identifier for the topology */ topologyId: number; /** The address (host/port pair) of the server */ address: string; /** @internal */ constructor(topologyId: number, address: string) { this.topologyId = topologyId; this.address = address; } } /** * Emitted when server is closed. * @public * @category Event */ export class ServerClosedEvent { /** A unique identifier for the topology */ topologyId: number; /** The address (host/port pair) of the server */ address: string; /** @internal */ constructor(topologyId: number, address: string) { this.topologyId = topologyId; this.address = address; } } /** * Emitted when topology description changes. * @public * @category Event */ export class TopologyDescriptionChangedEvent { /** A unique identifier for the topology */ topologyId: number; /** The old topology description */ previousDescription: TopologyDescription; /** The new topology description */ newDescription: TopologyDescription; /** @internal */ constructor( topologyId: number, previousDescription: TopologyDescription, newDescription: TopologyDescription ) { this.topologyId = topologyId; this.previousDescription = previousDescription; this.newDescription = newDescription; } } /** * Emitted when topology is initialized. * @public * @category Event */ export class TopologyOpeningEvent { /** A unique identifier for the topology */ topologyId: number; /** @internal */ constructor(topologyId: number) { this.topologyId = topologyId; } } /** * Emitted when topology is closed. * @public * @category Event */ export class TopologyClosedEvent { /** A unique identifier for the topology */ topologyId: number; /** @internal */ constructor(topologyId: number) { this.topologyId = topologyId; } } /** * Emitted when the server monitor’s hello command is started - immediately before * the hello command is serialized into raw BSON and written to the socket. * * @public * @category Event */ export class ServerHeartbeatStartedEvent { /** The connection id for the command */ connectionId: string; /** Is true when using the streaming protocol. */ awaited: boolean; /** @internal */ constructor(connectionId: string, awaited: boolean) { this.connectionId = connectionId; this.awaited = awaited; } } /** * Emitted when the server monitor’s hello succeeds. * @public * @category Event */ export class ServerHeartbeatSucceededEvent { /** The connection id for the command */ connectionId: string; /** The execution time of the event in ms */ duration: number; /** The command reply */ reply: Document; /** Is true when using the streaming protocol. */ awaited: boolean; /** @internal */ constructor(connectionId: string, duration: number, reply: Document | null, awaited: boolean) { this.connectionId = connectionId; this.duration = duration; this.reply = reply ?? {}; this.awaited = awaited; } } /** * Emitted when the server monitor’s hello fails, either with an “ok: 0” or a socket exception. * @public * @category Event */ export class ServerHeartbeatFailedEvent { /** The connection id for the command */ connectionId: string; /** The execution time of the event in ms */ duration: number; /** The command failure */ failure: Error; /** Is true when using the streaming protocol. */ awaited: boolean; /** @internal */ constructor(connectionId: string, duration: number, failure: Error, awaited: boolean) { this.connectionId = connectionId; this.duration = duration; this.failure = failure; this.awaited = awaited; } }