websocket.d.ts 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. /// <reference types="node" />
  2. import type { Blob } from 'buffer'
  3. import type { ReadableStream, WritableStream } from 'stream/web'
  4. import type { MessagePort } from 'worker_threads'
  5. import {
  6. EventInit,
  7. EventListenerOptions,
  8. AddEventListenerOptions,
  9. EventListenerOrEventListenerObject
  10. } from './patch'
  11. import Dispatcher from './dispatcher'
  12. import { HeadersInit } from './fetch'
  13. export type BinaryType = 'blob' | 'arraybuffer'
  14. interface WebSocketEventMap {
  15. close: CloseEvent
  16. error: ErrorEvent
  17. message: MessageEvent
  18. open: Event
  19. }
  20. interface WebSocket extends EventTarget {
  21. binaryType: BinaryType
  22. readonly bufferedAmount: number
  23. readonly extensions: string
  24. onclose: ((this: WebSocket, ev: WebSocketEventMap['close']) => any) | null
  25. onerror: ((this: WebSocket, ev: WebSocketEventMap['error']) => any) | null
  26. onmessage: ((this: WebSocket, ev: WebSocketEventMap['message']) => any) | null
  27. onopen: ((this: WebSocket, ev: WebSocketEventMap['open']) => any) | null
  28. readonly protocol: string
  29. readonly readyState: number
  30. readonly url: string
  31. close(code?: number, reason?: string): void
  32. send(data: string | ArrayBufferLike | Blob | ArrayBufferView): void
  33. readonly CLOSED: number
  34. readonly CLOSING: number
  35. readonly CONNECTING: number
  36. readonly OPEN: number
  37. addEventListener<K extends keyof WebSocketEventMap>(
  38. type: K,
  39. listener: (this: WebSocket, ev: WebSocketEventMap[K]) => any,
  40. options?: boolean | AddEventListenerOptions
  41. ): void
  42. addEventListener(
  43. type: string,
  44. listener: EventListenerOrEventListenerObject,
  45. options?: boolean | AddEventListenerOptions
  46. ): void
  47. removeEventListener<K extends keyof WebSocketEventMap>(
  48. type: K,
  49. listener: (this: WebSocket, ev: WebSocketEventMap[K]) => any,
  50. options?: boolean | EventListenerOptions
  51. ): void
  52. removeEventListener(
  53. type: string,
  54. listener: EventListenerOrEventListenerObject,
  55. options?: boolean | EventListenerOptions
  56. ): void
  57. }
  58. export declare const WebSocket: {
  59. prototype: WebSocket
  60. new (url: string | URL, protocols?: string | string[] | WebSocketInit): WebSocket
  61. readonly CLOSED: number
  62. readonly CLOSING: number
  63. readonly CONNECTING: number
  64. readonly OPEN: number
  65. }
  66. interface CloseEventInit extends EventInit {
  67. code?: number
  68. reason?: string
  69. wasClean?: boolean
  70. }
  71. interface CloseEvent extends Event {
  72. readonly code: number
  73. readonly reason: string
  74. readonly wasClean: boolean
  75. }
  76. export declare const CloseEvent: {
  77. prototype: CloseEvent
  78. new (type: string, eventInitDict?: CloseEventInit): CloseEvent
  79. }
  80. interface MessageEventInit<T = any> extends EventInit {
  81. data?: T
  82. lastEventId?: string
  83. origin?: string
  84. ports?: (typeof MessagePort)[]
  85. source?: typeof MessagePort | null
  86. }
  87. interface MessageEvent<T = any> extends Event {
  88. readonly data: T
  89. readonly lastEventId: string
  90. readonly origin: string
  91. readonly ports: ReadonlyArray<typeof MessagePort>
  92. readonly source: typeof MessagePort | null
  93. initMessageEvent(
  94. type: string,
  95. bubbles?: boolean,
  96. cancelable?: boolean,
  97. data?: any,
  98. origin?: string,
  99. lastEventId?: string,
  100. source?: typeof MessagePort | null,
  101. ports?: (typeof MessagePort)[]
  102. ): void;
  103. }
  104. export declare const MessageEvent: {
  105. prototype: MessageEvent
  106. new<T>(type: string, eventInitDict?: MessageEventInit<T>): MessageEvent<T>
  107. }
  108. interface ErrorEventInit extends EventInit {
  109. message?: string
  110. filename?: string
  111. lineno?: number
  112. colno?: number
  113. error?: any
  114. }
  115. interface ErrorEvent extends Event {
  116. readonly message: string
  117. readonly filename: string
  118. readonly lineno: number
  119. readonly colno: number
  120. readonly error: Error
  121. }
  122. export declare const ErrorEvent: {
  123. prototype: ErrorEvent
  124. new (type: string, eventInitDict?: ErrorEventInit): ErrorEvent
  125. }
  126. interface WebSocketInit {
  127. protocols?: string | string[],
  128. dispatcher?: Dispatcher,
  129. headers?: HeadersInit
  130. }
  131. interface WebSocketStreamOptions {
  132. protocols?: string | string[]
  133. signal?: AbortSignal
  134. }
  135. interface WebSocketCloseInfo {
  136. closeCode: number
  137. reason: string
  138. }
  139. interface WebSocketStream {
  140. closed: Promise<WebSocketCloseInfo>
  141. opened: Promise<{
  142. extensions: string
  143. protocol: string
  144. readable: ReadableStream
  145. writable: WritableStream
  146. }>
  147. url: string
  148. }
  149. export declare const WebSocketStream: {
  150. prototype: WebSocketStream
  151. new (url: string | URL, options?: WebSocketStreamOptions): WebSocketStream
  152. }
  153. interface WebSocketError extends Event, WebSocketCloseInfo {}
  154. export declare const WebSocketError: {
  155. prototype: WebSocketError
  156. new (type: string, init?: WebSocketCloseInfo): WebSocketError
  157. }
  158. export declare const ping: (ws: WebSocket, body?: Buffer) => void