import { RequestGlobalsEventTarget } from "./shared.mjs";
import { WebSocketMiniProgramOptions } from "./networkDefaults.mjs";
import { BlobPolyfill } from "./web.mjs";

//#region src/websocket.d.ts
type WebSocketBinaryType = 'blob' | 'arraybuffer';
type WebSocketSendData = string | ArrayBuffer | ArrayBufferView | Blob;
type WebSocketMessageData = string | ArrayBuffer | Blob | BlobPolyfill;
interface WebSocketCloseEventLike {
  code: number;
  reason: string;
  type: 'close';
  wasClean: boolean;
}
interface WebSocketErrorEventLike {
  error?: unknown;
  message?: string;
  type: 'error';
}
interface WebSocketMessageEventLike {
  data: WebSocketMessageData;
  origin: string;
  type: 'message';
}
interface WebSocketPolyfillInit {
  protocols?: string | string[];
  miniProgram?: WebSocketMiniProgramOptions;
  miniprogram?: WebSocketMiniProgramOptions;
}
declare class WebSocketPolyfill extends RequestGlobalsEventTarget {
  static readonly CONNECTING = 0;
  static readonly OPEN = 1;
  static readonly CLOSING = 2;
  static readonly CLOSED = 3;
  readonly CONNECTING = 0;
  readonly OPEN = 1;
  readonly CLOSING = 2;
  readonly CLOSED = 3;
  readonly extensions = "";
  readonly protocol = "";
  readonly url: string;
  binaryType: WebSocketBinaryType;
  bufferedAmount: number;
  readyState: number;
  onclose: ((event: WebSocketCloseEventLike) => void) | null;
  onerror: ((event: WebSocketErrorEventLike) => void) | null;
  onmessage: ((event: WebSocketMessageEventLike) => void) | null;
  onopen: ((event: {
    type: 'open';
  }) => void) | null;
  private socketTask?;
  constructor(url: string, protocols?: string | string[] | WebSocketPolyfillInit);
  close(code?: number, reason?: string): void;
  send(data: WebSocketSendData): void;
  private closeFromRuntime;
  private emitError;
}
//#endregion
export { WebSocketPolyfill, WebSocketPolyfillInit };