import type { us_listen_socket, WebSocket } from 'uWebSockets.js'
import type { AppOptions, TemplatedApp } from 'uWebSockets.js'
import { Namespace } from './Namespace/Namespace.js'
import logger from './Logger/Logger.js'
export declare type Handler<T> = (
  this: {
    id: escortID
    name: eventName
  },
  innerData: T,
) => void | Promise<void>
export declare type escortID = string
export declare type socketID = string
export declare type eventName = string
export declare type roomName = string
export declare interface IEscort<T> {
  get event(): eventName
  get id(): escortID
  get used(): T | undefined
}
export declare interface IManager<Escort> {
  spawn(event: eventName): Escort
  get(id: escortID): Escort | undefined
  drop(id: escortID): boolean
  drop(escort: Escort): boolean
}
declare function of(name: string): Namespace
declare function listen(port: number, callback: (ls: us_listen_socket) => void): void
export default function (options?: AppOptions): {
  app: TemplatedApp
  sockets: Map<string, WebSocket>
  of: typeof of
  listen: typeof listen
  logger: typeof logger
}
export * from './Behavior/Behavior.js'
export * from './EventManager/EventManager.js'
export * from './Namespace/Namespace.js'
export * from './ServerProxy/ServerProxy.js'
export * from './AliasPool/AliasPool.js'
export * from './DataManager/DataManager.js'
export * from './DataManager/DataEscort/DataEscort.js'
//# sourceMappingURL=io.d.ts.map
