blob: cd02ca782b027eb9691a3cbafc0950d1ad8c613f [file] [log] [blame]
// Copyright (c) 2024, 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.
@JS()
library;
import 'dart:js_interop';
import 'dom.dart';
import 'html.dart';
typedef PaymentComplete = String;
/// The [Payment Request API's](/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,
);
/// 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`](/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();
external String get id;
external set onpaymentmethodchange(EventHandler value);
external EventHandler get onpaymentmethodchange;
}
extension type PaymentMethodData._(JSObject _) implements JSObject {
external factory PaymentMethodData({
required String supportedMethods,
JSObject data,
});
external set supportedMethods(String value);
external String get supportedMethods;
external set data(JSObject value);
external JSObject get data;
}
extension type PaymentCurrencyAmount._(JSObject _) implements JSObject {
external factory PaymentCurrencyAmount({
required String currency,
required String value,
});
external set currency(String value);
external String get currency;
external set value(String value);
external String get value;
}
extension type PaymentDetailsBase._(JSObject _) implements JSObject {
external factory PaymentDetailsBase({
JSArray<PaymentItem> displayItems,
JSArray<PaymentDetailsModifier> modifiers,
});
external set displayItems(JSArray<PaymentItem> value);
external JSArray<PaymentItem> get displayItems;
external set modifiers(JSArray<PaymentDetailsModifier> value);
external JSArray<PaymentDetailsModifier> get modifiers;
}
extension type PaymentDetailsInit._(JSObject _)
implements PaymentDetailsBase, JSObject {
external factory PaymentDetailsInit({
JSArray<PaymentItem> displayItems,
JSArray<PaymentDetailsModifier> modifiers,
String id,
required PaymentItem total,
});
external set id(String value);
external String get id;
external set total(PaymentItem value);
external PaymentItem get total;
}
extension type PaymentDetailsUpdate._(JSObject _)
implements PaymentDetailsBase, JSObject {
external factory PaymentDetailsUpdate({
JSArray<PaymentItem> displayItems,
JSArray<PaymentDetailsModifier> modifiers,
PaymentItem total,
JSObject paymentMethodErrors,
});
external set total(PaymentItem value);
external PaymentItem get total;
external set paymentMethodErrors(JSObject value);
external JSObject get paymentMethodErrors;
}
extension type PaymentDetailsModifier._(JSObject _) implements JSObject {
external factory PaymentDetailsModifier({
required String supportedMethods,
PaymentItem total,
JSArray<PaymentItem> additionalDisplayItems,
JSObject data,
});
external set supportedMethods(String value);
external String get supportedMethods;
external set total(PaymentItem value);
external PaymentItem get total;
external set additionalDisplayItems(JSArray<PaymentItem> value);
external JSArray<PaymentItem> get additionalDisplayItems;
external set data(JSObject value);
external JSObject get data;
}
extension type PaymentItem._(JSObject _) implements JSObject {
external factory PaymentItem({
required String label,
required PaymentCurrencyAmount amount,
bool pending,
});
external set label(String value);
external String get label;
external set amount(PaymentCurrencyAmount value);
external PaymentCurrencyAmount get amount;
external set pending(bool value);
external bool get pending;
}
extension type PaymentCompleteDetails._(JSObject _) implements JSObject {
external factory PaymentCompleteDetails({JSObject? data});
external set data(JSObject? value);
external JSObject? get data;
}
/// 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]);
external String get requestId;
external String get methodName;
external JSObject get details;
}
extension type PaymentValidationErrors._(JSObject _) implements JSObject {
external factory PaymentValidationErrors({
String error,
JSObject paymentMethod,
});
external set error(String value);
external String get error;
external set paymentMethod(JSObject value);
external JSObject get paymentMethod;
}
/// 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,
]);
external String get methodName;
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 set methodName(String value);
external String get methodName;
external set methodDetails(JSObject? value);
external JSObject? get methodDetails;
}
/// 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,
});
}