blob: af05f3915ff3e4712054be976344de05e3eab2a6 [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 'fileapi.dart';
import 'hr_time.dart';
import 'service_workers.dart';
typedef PushMessageDataInit = JSAny;
typedef PushEncryptionKeyName = String;
/// The **`PushManager`** interface of the
/// [Push API](https://developer.mozilla.org/en-US/docs/Web/API/Push_API)
/// provides a way to receive notifications from third-party servers as well as
/// request URLs for push notifications.
///
/// This interface is accessed via the [ServiceWorkerRegistration.pushManager]
/// property.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/PushManager).
extension type PushManager._(JSObject _) implements JSObject {
/// The **`supportedContentEncodings`** read-only static property of the
/// [PushManager] interface returns an array of supported content codings that
/// can be used to encrypt the payload of a push message.
///
/// User agents must support the `aes128gcm` content coding defined in `8291`,
/// and may also support content codings defined from previous versions of the
/// specification.
/// The returned array is frozen, and may not be modified by the recipient.
///
/// The application server requires this coding in order to encrypt push
/// messages for sending to the push server.
/// The coding used for encryption is also included by the app server in the
/// HTTP header field of each push message.
///
/// The specification does not define how the client code should send the
/// application server the supported codings, or the information in the
/// [PushSubscription] that it also needs in order to encrypt and send a push
/// message.
/// One approach is shown in the examples section below.
external static JSArray<JSString> get supportedContentEncodings;
/// The **`subscribe()`** method of the [PushManager]
/// interface subscribes to a push service.
///
/// It returns a `Promise` that resolves to a [PushSubscription]
/// object containing details of a push subscription. A new push subscription
/// is created if
/// the current service worker does not have an existing subscription.
external JSPromise<PushSubscription> subscribe(
[PushSubscriptionOptionsInit options]);
/// The **`PushManager.getSubscription()`** method of the [PushManager]
/// interface retrieves an existing push subscription.
///
/// It returns a `Promise` that resolves to a [PushSubscription] object
/// containing details of an existing subscription. If no existing
/// subscription exists, this resolves to a `null` value.
external JSPromise<PushSubscription?> getSubscription();
/// The **`permissionState()`** method of the
/// [PushManager] interface returns a `Promise` that resolves to a
/// string indicating the permission state of the push manager. Possible
/// values are `'prompt'`, `'denied'`, or `'granted'`.
///
/// > [!NOTE]
/// > As of Firefox 44, the permissions for
/// > [Notifications](https://developer.mozilla.org/en-US/docs/Web/API/Notifications_API)
/// > and [Push](https://developer.mozilla.org/en-US/docs/Web/API/Push_API)
/// > have been merged. If permission is
/// > granted for notifications, push will also be enabled.
external JSPromise<JSString> permissionState(
[PushSubscriptionOptionsInit options]);
}
/// The **`PushSubscriptionOptions`** interface of the [Push API] represents the
/// options associated with a push subscription.
///
/// The read-only `PushSubscriptionOptions` object is returned by calling
/// [PushSubscription.options] on a [PushSubscription]. This interface has no
/// constructor of its own.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/PushSubscriptionOptions).
extension type PushSubscriptionOptions._(JSObject _) implements JSObject {
/// The **`userVisibleOnly`** read-only property of the
/// [PushSubscriptionOptions] interface indicates if the returned push
/// subscription will only be used for messages whose effect is made visible
/// to the user.
external bool get userVisibleOnly;
/// The **`applicationServerKey`** read-only property of the
/// [PushSubscriptionOptions] interface contains the public key used by the
/// push server.
external JSArrayBuffer? get applicationServerKey;
}
extension type PushSubscriptionOptionsInit._(JSObject _) implements JSObject {
external factory PushSubscriptionOptionsInit({
bool userVisibleOnly,
JSAny? applicationServerKey,
});
external bool get userVisibleOnly;
external set userVisibleOnly(bool value);
external JSAny? get applicationServerKey;
external set applicationServerKey(JSAny? value);
}
/// The `PushSubscription` interface of the
/// [Push API](https://developer.mozilla.org/en-US/docs/Web/API/Push_API)
/// provides a subscription's URL endpoint along with the public key and secrets
/// that should be used for encrypting push messages to this subscription.
/// This information must be passed to the application server, using any desired
/// application-specific method.
///
/// The interface also provides information about when the subscription will
/// expire, and a method to unsubscribe from the subscription.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/PushSubscription).
extension type PushSubscription._(JSObject _) implements JSObject {
/// The `getKey()` method of the [PushSubscription] interface
/// returns an `ArrayBuffer` representing a client public key, which can then
/// be sent to a server and used in encrypting push message data.
external JSArrayBuffer? getKey(PushEncryptionKeyName name);
/// The `unsubscribe()` method of the [PushSubscription] interface
/// returns a `Promise` that resolves to a boolean value when the
/// current subscription is successfully unsubscribed.
external JSPromise<JSBoolean> unsubscribe();
/// The `toJSON()` method of the [PushSubscription] interface is a
/// standard serializer: it returns a JSON representation of the subscription
/// properties,
/// providing a useful shortcut.
external PushSubscriptionJSON toJSON();
/// The **`endpoint`** read-only property of the
/// [PushSubscription] interface returns a string containing
/// the endpoint associated with the push subscription.
///
/// The endpoint takes the form of a custom URL pointing to a push server,
/// which can be
/// used to send a push message to the particular service worker instance that
/// subscribed to
/// the push service. For this reason, it is a good idea to keep your endpoint
/// a secret, so
/// others do not hijack it and abuse the push functionality.
external String get endpoint;
/// The **`expirationTime`** read-only property of the
/// [PushSubscription] interface returns a [DOMHighResTimeStamp]
/// of the subscription expiration time associated with the push subscription,
/// if there is
/// one, or `null` otherwise.
external EpochTimeStamp? get expirationTime;
/// The **`options`** read-only property
/// of the [PushSubscription] interface is an object containing the options
/// used to create the subscription.
external PushSubscriptionOptions get options;
}
extension type PushSubscriptionJSON._(JSObject _) implements JSObject {
external factory PushSubscriptionJSON({
String endpoint,
EpochTimeStamp? expirationTime,
JSObject keys,
});
external String get endpoint;
external set endpoint(String value);
external EpochTimeStamp? get expirationTime;
external set expirationTime(EpochTimeStamp? value);
external JSObject get keys;
external set keys(JSObject value);
}
/// @AvailableInWorkers("service")
///
/// The **`PushMessageData`** interface of the
/// [Push API](https://developer.mozilla.org/en-US/docs/Web/API/Push_API)
/// provides methods which let you retrieve the push data sent by a server in
/// various formats.
///
/// Unlike the similar methods in the
/// [Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API),
/// which only allow the method to be invoked once, these methods can be called
/// multiple times.
///
/// Messages received through the Push API are sent encrypted by push services
/// and then automatically decrypted by browsers before they are made accessible
/// through the methods of the `PushMessageData` interface.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/PushMessageData).
extension type PushMessageData._(JSObject _) implements JSObject {
/// @AvailableInWorkers("service")
///
/// The **`arrayBuffer()`** method of the [PushMessageData] interface extracts
/// push message data as an `ArrayBuffer` object.
external JSArrayBuffer arrayBuffer();
/// @AvailableInWorkers("service")
///
/// The **`blob()`** method of the [PushMessageData] interface extracts push
/// message data as a [Blob] object.
external Blob blob();
/// @AvailableInWorkers("service")
///
/// The **`bytes()`** method of the [PushMessageData] interface extracts push
/// message data as an `Uint8Array` object.
external JSUint8Array bytes();
/// @AvailableInWorkers("service")
///
/// The **`json()`** method of the [PushMessageData] interface extracts push
/// message data by parsing it as a
/// [JSON](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON)
/// string and returning the result.
external JSAny? json();
/// @AvailableInWorkers("service")
///
/// The **`text()`** method of the [PushMessageData] interface extracts push
/// message data as a plain text string.
external String text();
}
/// @AvailableInWorkers("service")
///
/// The **`PushEvent`** interface of the
/// [Push API](https://developer.mozilla.org/en-US/docs/Web/API/Push_API)
/// represents a push message that has been received. This event is sent to the
/// [global scope](https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerGlobalScope)
/// of a [ServiceWorker]. It contains the information sent from an application
/// server to a [PushSubscription].
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/PushEvent).
extension type PushEvent._(JSObject _) implements ExtendableEvent, JSObject {
external factory PushEvent(
String type, [
PushEventInit eventInitDict,
]);
/// @AvailableInWorkers("service")
///
/// The `data` read-only property of the **`PushEvent`** interface returns a
/// reference to a [PushMessageData] object containing data sent to the
/// [PushSubscription].
external PushMessageData? get data;
}
extension type PushEventInit._(JSObject _)
implements ExtendableEventInit, JSObject {
external factory PushEventInit({
bool bubbles,
bool cancelable,
bool composed,
PushMessageDataInit data,
});
external PushMessageDataInit get data;
external set data(PushMessageDataInit value);
}
extension type PushSubscriptionChangeEvent._(JSObject _)
implements ExtendableEvent, JSObject {
external PushSubscription? get newSubscription;
external PushSubscription? get oldSubscription;
}