blob: 2f07273fc28e2b79538752fc8f03454b1180f70c [file] [log] [blame]
// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
//
// API docs from [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web).
// Attributions and copyright licensing by Mozilla Contributors is licensed
// under [CC-BY-SA 2.5](https://creativecommons.org/licenses/by-sa/2.5/.
// Generated from Web IDL definitions.
// ignore_for_file: unintended_html_in_doc_comment
@JS()
library;
import 'dart:js_interop';
import 'dom.dart';
import 'html.dart';
typedef BinaryType = String;
/// The `WebSocket` object provides the API for creating and managing a
/// [WebSocket](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API)
/// connection to a server, as well as for sending and receiving data on the
/// connection.
///
/// To construct a `WebSocket`, use the
/// [`WebSocket()`](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/WebSocket)
/// constructor.
///
/// > [!NOTE]
/// > The `WebSocket` API has no way to apply
/// > [backpressure](https://developer.mozilla.org/en-US/docs/Web/API/Streams_API/Concepts#backpressure),
/// > therefore when messages arrive faster than the application can process
/// > them, the application will either fill up the device's memory by buffering
/// > those messages, become unresponsive due to 100% CPU usage, or both. For an
/// > alternative that provides backpressure automatically, see
/// > [WebSocketStream].
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket).
extension type WebSocket._(JSObject _) implements EventTarget, JSObject {
external factory WebSocket(
String url, [
JSAny protocols,
]);
static const int CONNECTING = 0;
static const int OPEN = 1;
static const int CLOSING = 2;
static const int CLOSED = 3;
/// The **`WebSocket.close()`** method closes the
/// [WebSocket] connection or connection attempt, if any. If the connection is
/// already `CLOSED`, this method does nothing.
///
/// > [!NOTE]
/// > The process of closing the connection begins with a
/// > [closing handshake](https://www.rfc-editor.org/rfc/rfc6455.html#section-1.4),
/// > and the `close()` method does not discard previously-sent messages
/// > before starting that closing handshake; even if the user agent is still
/// > busy sending those messages, the handshake will only start after the
/// > messages are sent.
external void close([
int code,
String reason,
]);
/// The **`WebSocket.send()`** method enqueues the specified data
/// to be transmitted to the server over the WebSocket connection, increasing
/// the value of
/// `bufferedAmount` by the number of bytes needed to contain the data. If the
/// data can't be sent (for example, because it needs to be buffered but the
/// buffer is
/// full), the socket is closed automatically.
/// The browser will throw an exception if you call `send()` when the
/// connection is in the `CONNECTING` state. If you call `send()` when the
/// connection is in the `CLOSING` or `CLOSED` states, the browser will
/// silently discard the data.
external void send(JSAny data);
/// The **`WebSocket.url`** read-only property returns the absolute
/// URL of the [WebSocket] as resolved by the constructor.
external String get url;
/// The **`WebSocket.readyState`** read-only property returns the
/// current state of the [WebSocket] connection.
external int get readyState;
/// The **`WebSocket.bufferedAmount`** read-only property returns
/// the number of bytes of data that have been queued using calls to
/// [`send()`](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/send)
/// but
/// not yet transmitted to the network. This value resets to zero once all
/// queued data has
/// been sent. This value does not reset to zero when the connection is
/// closed; if you keep
/// calling
/// [`send()`](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/send),
/// this will continue to climb.
external int get bufferedAmount;
external EventHandler get onopen;
external set onopen(EventHandler value);
external EventHandler get onerror;
external set onerror(EventHandler value);
external EventHandler get onclose;
external set onclose(EventHandler value);
/// The **`WebSocket.extensions`** read-only property returns the
/// extensions selected by the server. This is currently only the empty string
/// or a list of
/// extensions as negotiated by the connection.
external String get extensions;
/// The **`WebSocket.protocol`** read-only property returns the name of the
/// [sub-protocol](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers#subprotocols)
/// the server selected; this will be one of the strings specified in the
/// [`protocols`](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/WebSocket#protocols)
/// parameter when creating the [WebSocket] object, or the empty string if no
/// connection is established.
external String get protocol;
external EventHandler get onmessage;
external set onmessage(EventHandler value);
/// The **`WebSocket.binaryType`** property controls the type of
/// binary data being received over the WebSocket connection.
external BinaryType get binaryType;
external set binaryType(BinaryType value);
}
/// A `CloseEvent` is sent to clients using when the connection is closed. This
/// is delivered to the listener indicated by the `WebSocket` object's `onclose`
/// attribute.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent).
extension type CloseEvent._(JSObject _) implements Event, JSObject {
external factory CloseEvent(
String type, [
CloseEventInit eventInitDict,
]);
/// The **`wasClean`** read-only property of the [CloseEvent] interface
/// returns `true` if the connection closed cleanly.
external bool get wasClean;
/// The **`code`** read-only property of the [CloseEvent] interface returns a
/// [WebSocket connection close code](https://www.rfc-editor.org/rfc/rfc6455.html#section-7.1.5)
/// indicating the reason the connection was closed.
external int get code;
/// The **`reason`** read-only property of the [CloseEvent] interface returns
/// the
/// [WebSocket connection close reason](https://www.rfc-editor.org/rfc/rfc6455.html#section-7.1.6)
/// the server gave for closing the connection; that is, a concise
/// human-readable prose explanation for the closure.
external String get reason;
}
extension type CloseEventInit._(JSObject _) implements EventInit, JSObject {
external factory CloseEventInit({
bool bubbles,
bool cancelable,
bool composed,
bool wasClean,
int code,
String reason,
});
external bool get wasClean;
external set wasClean(bool value);
external int get code;
external set code(int value);
external String get reason;
external set reason(String value);
}