import { type Component, Connector } from '@toa.io/core' import { type Routes } from './Routes' export class Realtime extends Connector { private readonly discovery: Promise private streams: Component | null = null public constructor (routes: Routes, discovery: Promise) { super() this.discovery = discovery routes.events.on('data', this.push.bind(this)) } protected override async open (): Promise { this.streams = await this.discovery this.depends(this.streams) await this.streams.connect() console.log('Realtime has started.') } protected override dispose (): void { console.log('Realtime shutdown complete.') } private push (event: Event): void { void this.streams?.invoke('push', { input: event }) } } interface Event { key: string event: string data: string }