index.d.ts 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. /* eslint-disable @typescript-eslint/no-explicit-any */
  2. /// <reference types="node" />
  3. import { Server } from "net";
  4. import { EventEmitter } from "events";
  5. import WebSocketLib from "ws";
  6. import Express from "express";
  7. declare type MyWebSocket = WebSocketLib & EventEmitter;
  8. declare type Optional<T> = {
  9. [P in keyof T]?: (T[P] | undefined);
  10. };
  11. declare interface IConfig {
  12. readonly port?: number;
  13. readonly expire_timeout?: number;
  14. readonly alive_timeout?: number;
  15. readonly key?: string;
  16. readonly path?: string;
  17. readonly concurrent_limit?: number;
  18. readonly allow_discovery?: boolean;
  19. readonly proxied?: boolean | string;
  20. readonly cleanup_out_msgs?: number;
  21. readonly ssl?: {
  22. key: string;
  23. cert: string;
  24. };
  25. readonly generateClientId?: () => string;
  26. readonly createWebSocketServer?: (options: WebSocketLib.ServerOptions) => WebSocketLib.Server;
  27. }
  28. declare interface IClient {
  29. getId(): string;
  30. getToken(): string;
  31. getSocket(): MyWebSocket | null;
  32. setSocket(socket: MyWebSocket | null): void;
  33. getLastPing(): number;
  34. setLastPing(lastPing: number): void;
  35. send(data: any): void;
  36. }
  37. declare enum MessageType {
  38. OPEN = "OPEN",
  39. LEAVE = "LEAVE",
  40. CANDIDATE = "CANDIDATE",
  41. OFFER = "OFFER",
  42. ANSWER = "ANSWER",
  43. EXPIRE = "EXPIRE",
  44. HEARTBEAT = "HEARTBEAT",
  45. ID_TAKEN = "ID-TAKEN",
  46. ERROR = "ERROR"
  47. }
  48. declare interface IMessage {
  49. readonly type: MessageType;
  50. readonly src: string;
  51. readonly dst: string;
  52. readonly payload?: any;
  53. }
  54. declare interface CustomExpress extends Express.Express {
  55. on(event: string, callback: (...args: any[]) => void): this;
  56. on(event: 'connection', callback: (client: IClient) => void): this;
  57. on(event: 'disconnect', callback: (client: IClient) => void): this;
  58. on(event: 'message', callback: (client: IClient, message: IMessage) => void): this;
  59. on(event: 'error', callback: (error: Error) => void): this;
  60. }
  61. declare function ExpressPeerServer(server: Server, options?: IConfig): CustomExpress;
  62. declare function PeerServer(options?: Optional<IConfig>, callback?: (server: Server) => void): CustomExpress;
  63. export { ExpressPeerServer, PeerServer };