blob: c3c7562fd808eb34be31ea776ecdbdd5bd5bb163 [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 PaymentShippingType = String;
typedef PaymentComplete = String;
/// The [Payment Request
/// API's](https://developer.mozilla.org/en-US/docs/Web/API/Payment_Request_API)
/// **`PaymentRequest`** interface is the primary access point into the API, and
/// lets web content and apps accept payments from the end user on behalf of the
/// operator of the site or the publisher of the app.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/PaymentRequest).
extension type PaymentRequest._(JSObject _) implements EventTarget, JSObject {
external factory PaymentRequest(
JSArray<PaymentMethodData> methodData,
PaymentDetailsInit details, [
PaymentOptions options,
]);
/// The **[PaymentRequest]** interface's
/// **`show()`** method instructs the user agent to begin the
/// process of showing and handling the user interface for the payment request
/// to the
/// user.
///
/// Only one payment request can be in the process of being handled at once,
/// across all
/// documents. Once one `PaymentRequest`'s `show()` method has been
/// called, any other call to `show()` will by rejected with an
/// `AbortError` until the returned promise has been concluded, either by
/// being
/// fulfilled with a [PaymentResponse] indicating the results of the payment
/// request, or by being rejected with an error.
///
/// > [!NOTE]
/// > In reality, despite the fact that the specification says this
/// > can't be done, some browsers, including Firefox, support multiple active
/// > payment
/// > requests at a time.
///
/// If your architecture doesn't necessarily have all of the data ready to go
/// at the moment
/// it instantiates the payment interface by calling `show()`, specify the
/// `detailsPromise` parameter, providing a `Promise` that is
/// fulfilled once the data is ready. If this is provided, `show()` will not
/// allow the user to interact with the payment interface until the promise is
/// fulfilled, so
/// that data can be updated prior to the user engaging with the payment
/// process.
///
/// Processing the result and, if necessary, calling [PaymentResponse.retry]
/// to retry a failed payment can all be done either asynchronously or
/// synchronously,
/// depending on your needs. For the best user experience, asynchronous
/// solutions are
/// typically the best way to go. Most examples on MDN and elsewhere use
/// [`async`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function)/[`await`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await)
/// to wait asynchronously while results are validated and so forth.
external JSPromise<PaymentResponse> show(
[JSPromise<PaymentDetailsUpdate> detailsPromise]);
/// The `PaymentRequest.abort()` method of the [PaymentRequest]
/// interface causes the user agent to end the payment request and to remove
/// any user
/// interface that might be shown.
external JSPromise<JSAny?> abort();
/// The [PaymentRequest] method
/// **`canMakePayment()`** determines whether or not the request
/// is configured in a way that is compatible with at least one payment method
/// supported
/// by the .
///
/// You can call this before calling
/// [PaymentRequest.show] to provide a streamlined user experience
/// when the user's browser can't handle any of the payment methods you
/// accept.
///
/// For instance, you might call `canMakePayment()` to determine if the
/// browser
/// will let the user pay using Payment Request API, and if it won't, you
/// could fall back to
/// another payment method, or offer a list of methods that aren't handled by
/// Payment
/// Request API (or even provide instructions for paying by mail or by phone).
external JSPromise<JSBoolean> canMakePayment();
/// The **`id`** read-only attribute of the
/// [PaymentRequest] interface returns a unique identifier for a particular
/// [PaymentRequest] instance.
///
/// When constructing an instance of the [PaymentRequest], you are able to
/// supply an custom id. If none is provided, the browser automatically sets
/// the id value to a UUID.
external String get id;
external EventHandler get onpaymentmethodchange;
external set onpaymentmethodchange(EventHandler value);
}
extension type PaymentMethodData._(JSObject _) implements JSObject {
external factory PaymentMethodData({
required String supportedMethods,
JSObject data,
});
external String get supportedMethods;
external set supportedMethods(String value);
external JSObject get data;
external set data(JSObject value);
}
extension type PaymentCurrencyAmount._(JSObject _) implements JSObject {
external factory PaymentCurrencyAmount({
required String currency,
required String value,
});
external String get currency;
external set currency(String value);
external String get value;
external set value(String value);
}
extension type PaymentDetailsBase._(JSObject _) implements JSObject {
external factory PaymentDetailsBase({
JSArray<PaymentItem> displayItems,
JSArray<PaymentShippingOption> shippingOptions,
JSArray<PaymentDetailsModifier> modifiers,
});
external JSArray<PaymentItem> get displayItems;
external set displayItems(JSArray<PaymentItem> value);
external JSArray<PaymentShippingOption> get shippingOptions;
external set shippingOptions(JSArray<PaymentShippingOption> value);
external JSArray<PaymentDetailsModifier> get modifiers;
external set modifiers(JSArray<PaymentDetailsModifier> value);
}
extension type PaymentDetailsInit._(JSObject _)
implements PaymentDetailsBase, JSObject {
external factory PaymentDetailsInit({
JSArray<PaymentItem> displayItems,
JSArray<PaymentShippingOption> shippingOptions,
JSArray<PaymentDetailsModifier> modifiers,
String id,
required PaymentItem total,
});
external String get id;
external set id(String value);
external PaymentItem get total;
external set total(PaymentItem value);
}
extension type PaymentDetailsUpdate._(JSObject _)
implements PaymentDetailsBase, JSObject {
external factory PaymentDetailsUpdate({
JSArray<PaymentItem> displayItems,
JSArray<PaymentShippingOption> shippingOptions,
JSArray<PaymentDetailsModifier> modifiers,
String error,
PaymentItem total,
AddressErrors shippingAddressErrors,
PayerErrors payerErrors,
JSObject paymentMethodErrors,
});
external String get error;
external set error(String value);
external PaymentItem get total;
external set total(PaymentItem value);
external AddressErrors get shippingAddressErrors;
external set shippingAddressErrors(AddressErrors value);
external PayerErrors get payerErrors;
external set payerErrors(PayerErrors value);
external JSObject get paymentMethodErrors;
external set paymentMethodErrors(JSObject value);
}
extension type PaymentDetailsModifier._(JSObject _) implements JSObject {
external factory PaymentDetailsModifier({
required String supportedMethods,
PaymentItem total,
JSArray<PaymentItem> additionalDisplayItems,
JSObject data,
});
external String get supportedMethods;
external set supportedMethods(String value);
external PaymentItem get total;
external set total(PaymentItem value);
external JSArray<PaymentItem> get additionalDisplayItems;
external set additionalDisplayItems(JSArray<PaymentItem> value);
external JSObject get data;
external set data(JSObject value);
}
extension type PaymentOptions._(JSObject _) implements JSObject {
external factory PaymentOptions({
bool requestPayerName,
bool requestBillingAddress,
bool requestPayerEmail,
bool requestPayerPhone,
bool requestShipping,
PaymentShippingType shippingType,
});
external bool get requestPayerName;
external set requestPayerName(bool value);
external bool get requestBillingAddress;
external set requestBillingAddress(bool value);
external bool get requestPayerEmail;
external set requestPayerEmail(bool value);
external bool get requestPayerPhone;
external set requestPayerPhone(bool value);
external bool get requestShipping;
external set requestShipping(bool value);
external PaymentShippingType get shippingType;
external set shippingType(PaymentShippingType value);
}
extension type PaymentItem._(JSObject _) implements JSObject {
external factory PaymentItem({
required String label,
required PaymentCurrencyAmount amount,
bool pending,
});
external String get label;
external set label(String value);
external PaymentCurrencyAmount get amount;
external set amount(PaymentCurrencyAmount value);
external bool get pending;
external set pending(bool value);
}
extension type PaymentCompleteDetails._(JSObject _) implements JSObject {
external factory PaymentCompleteDetails({JSObject? data});
external JSObject? get data;
external set data(JSObject? value);
}
extension type PaymentShippingOption._(JSObject _) implements JSObject {
external factory PaymentShippingOption({
required String id,
required String label,
required PaymentCurrencyAmount amount,
bool selected,
});
external String get id;
external set id(String value);
external String get label;
external set label(String value);
external PaymentCurrencyAmount get amount;
external set amount(PaymentCurrencyAmount value);
external bool get selected;
external set selected(bool value);
}
/// The **`PaymentResponse`** interface of the
/// [Payment Request API](https://developer.mozilla.org/en-US/docs/Web/API/Payment_Request_API)
/// is returned after a user selects a payment method and approves a payment
/// request.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/PaymentResponse).
extension type PaymentResponse._(JSObject _) implements EventTarget, JSObject {
/// The **`toJSON()`** method of the [PaymentResponse] interface is a ; it
/// returns a JSON representation of the [PaymentResponse] object.
external JSObject toJSON();
/// The [PaymentRequest] method
/// **`complete()`** of the
/// [Payment Request API](https://developer.mozilla.org/en-US/docs/Web/API/Payment_Request_API)
/// notifies the
/// that the user interaction is over, and causes any remaining
/// user interface to be closed.
///
/// This method must be called after the user accepts
/// the payment request and the `Promise` returned by the
/// [PaymentRequest.show] method is resolved.
external JSPromise<JSAny?> complete([
PaymentComplete result,
PaymentCompleteDetails details,
]);
/// The [PaymentResponse] interface's
/// **`retry()`** method makes it possible to ask the user to
/// retry a payment after an error occurs during processing.
///
/// This lets your app
/// gracefully deal with situations such as invalid shipping addresses or
/// declined credit
/// cards.
external JSPromise<JSAny?> retry([PaymentValidationErrors errorFields]);
/// The **`requestId`** read-only property of the
/// [PaymentResponse] interface returns the free-form identifier supplied by
/// the `PaymentResponse()` constructor by details.id.
external String get requestId;
/// The **`methodName`** read-only
/// property of the [PaymentResponse] interface returns a string uniquely
/// identifying the payment handler selected by the user.
///
/// This string may be either
/// one of the standardized payment method identifiers or a URL used by the
/// payment handler
/// to process payments.
external String get methodName;
/// The **`details`** read-only property of the
/// [PaymentResponse] interface returns a JSON-serializable object that
/// provides a payment method specific message used by the merchant to process
/// the
/// transaction and determine a successful funds transfer.
///
/// This data is returned by the payment app that satisfies the payment
/// request. Developers need to consult whomever controls the URL for the
/// expected shape of the details object.
external JSObject get details;
/// The **`shippingAddress`** read-only property of
/// the `PaymentRequest` interface returns a [PaymentAddress] object
/// containing the shipping address provided by the user.
external JSObject? get shippingAddress;
/// The **`shippingOption`** read-only property of
/// the `PaymentRequest` interface returns the ID attribute of the shipping
/// option selected by the user. This option is only present when the
/// `requestShipping` option is set to `true` in the
/// `options` object passed to the
/// [PaymentRequest.PaymentRequest] constructor.
external String? get shippingOption;
/// The **`payerName`** read-only property of the
/// [PaymentResponse] interface returns the name supplied by the user. This
/// option is only present when the `requestPayerName` option is set to
/// `true` in the options parameter of the
/// [PaymentRequest.PaymentRequest] constructor.
external String? get payerName;
/// The `payerEmail` read-only property of the [PaymentResponse]
/// interface returns the email address supplied by the user. This option is
/// only present
/// when the `requestPayerEmail` option is set to `true` in the
/// `options` object passed to the
/// [PaymentRequest.PaymentRequest] constructor.
external String? get payerEmail;
/// The `payerPhone` read-only property of the [PaymentResponse]
/// interface returns the phone number supplied by the user. This option is
/// only present
/// when the `requestPayerPhone` option is set to `true` in the
/// `options` object passed to the
/// [PaymentRequest.PaymentRequest] constructor.
external String? get payerPhone;
external EventHandler get onpayerdetailchange;
external set onpayerdetailchange(EventHandler value);
}
extension type PaymentValidationErrors._(JSObject _) implements JSObject {
external factory PaymentValidationErrors({
PayerErrors payer,
AddressErrors shippingAddress,
String error,
JSObject paymentMethod,
});
external PayerErrors get payer;
external set payer(PayerErrors value);
external AddressErrors get shippingAddress;
external set shippingAddress(AddressErrors value);
external String get error;
external set error(String value);
external JSObject get paymentMethod;
external set paymentMethod(JSObject value);
}
extension type PayerErrors._(JSObject _) implements JSObject {
external factory PayerErrors({
String email,
String name,
String phone,
});
external String get email;
external set email(String value);
external String get name;
external set name(String value);
external String get phone;
external set phone(String value);
}
extension type AddressErrors._(JSObject _) implements JSObject {
external factory AddressErrors({
String addressLine,
String city,
String country,
String dependentLocality,
String organization,
String phone,
String postalCode,
String recipient,
String region,
String sortingCode,
});
external String get addressLine;
external set addressLine(String value);
external String get city;
external set city(String value);
external String get country;
external set country(String value);
external String get dependentLocality;
external set dependentLocality(String value);
external String get organization;
external set organization(String value);
external String get phone;
external set phone(String value);
external String get postalCode;
external set postalCode(String value);
external String get recipient;
external set recipient(String value);
external String get region;
external set region(String value);
external String get sortingCode;
external set sortingCode(String value);
}
/// The **`PaymentMethodChangeEvent`** interface of the
/// [Payment Request API](https://developer.mozilla.org/en-US/docs/Web/API/Payment_Request_API)
/// describes the [PaymentRequest.paymentmethodchange_event] event which is
/// fired by some payment handlers when the user switches payment instruments
/// (e.g., a user selects a "store" card to make a purchase while using Apple
/// Pay).
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/PaymentMethodChangeEvent).
extension type PaymentMethodChangeEvent._(JSObject _)
implements PaymentRequestUpdateEvent, JSObject {
external factory PaymentMethodChangeEvent(
String type, [
PaymentMethodChangeEventInit eventInitDict,
]);
/// The read-only **`methodName`** property of the [PaymentMethodChangeEvent]
/// interface is a string which
/// uniquely identifies the payment handler currently selected by the user.
/// The
/// payment handler may be a payment technology, such as Apple Pay or Android
/// Pay, and each
/// payment handler may support multiple payment methods; changes to the
/// payment method
/// within the payment handler are described by the
/// `PaymentMethodChangeEvent`.
external String get methodName;
/// The read-only **`methodDetails`** property of the
/// [PaymentMethodChangeEvent] interface is an object
/// containing any data the payment handler may provide to describe the change
/// the user
/// has made to their payment method. The value is `null` if no details
/// are available.
external JSObject? get methodDetails;
}
extension type PaymentMethodChangeEventInit._(JSObject _)
implements PaymentRequestUpdateEventInit, JSObject {
external factory PaymentMethodChangeEventInit({
bool bubbles,
bool cancelable,
bool composed,
String methodName,
JSObject? methodDetails,
});
external String get methodName;
external set methodName(String value);
external JSObject? get methodDetails;
external set methodDetails(JSObject? value);
}
/// The **`PaymentRequestUpdateEvent`** interface is used for events sent to a
/// [PaymentRequest] instance when changes are made to shipping-related
/// information for a pending [PaymentRequest]. Those events are:
///
/// - [PaymentRequest.shippingaddresschange_event]
/// - : Dispatched whenever the user changes their shipping address.
/// - [PaymentRequest.shippingoptionchange_event]
/// - : Dispatched whenever the user changes a shipping option.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/PaymentRequestUpdateEvent).
extension type PaymentRequestUpdateEvent._(JSObject _)
implements Event, JSObject {
external factory PaymentRequestUpdateEvent(
String type, [
PaymentRequestUpdateEventInit eventInitDict,
]);
/// The **`updateWith()`** method of the
/// [PaymentRequestUpdateEvent] interface updates the details of an existing
/// [PaymentRequest].
external void updateWith(JSPromise<PaymentDetailsUpdate> detailsPromise);
}
extension type PaymentRequestUpdateEventInit._(JSObject _)
implements EventInit, JSObject {
external factory PaymentRequestUpdateEventInit({
bool bubbles,
bool cancelable,
bool composed,
});
}