import { Unsubscribe } from 'nanoevents' import { Logger } from '../logger/index.js' export type TransportEvents = { open: () => void close: (err?: Error) => void error: (err: Error) => void data: (payload: T) => void } export interface Env { [index: string]: string } export interface Transport { readonly url: string open(): Promise send(data: PayloadType): void close(): Promise setURL(url: string): void setParam(key: string, value: string): void setToken(value: string, param?: string): void displayName(): string on>( event: E, callback: TransportEvents[E] ): Unsubscribe once>( event: E, callback: TransportEvents[E] ): Unsubscribe } export type FallbackTransportOpts = Partial<{ logger: Logger }> export class FallbackTransport implements Transport { readonly url: string constructor( transports: Transport[], opts?: FallbackTransportOpts ) open(): Promise send(data: PayloadType): void close(): Promise displayName(): string setURL(url: string): void setParam(key: string, value: string): void setToken(value: string, param?: string): void on>( event: E, callback: TransportEvents[E] ): Unsubscribe once>( event: E, callback: TransportEvents[E] ): Unsubscribe }