@paydock/client-sdk 1.144.1-beta → 1.147.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/README.md +551 -32
  2. package/bundles/index.cjs +2683 -599
  3. package/bundles/index.cjs.d.ts +322 -21
  4. package/bundles/index.mjs +2683 -600
  5. package/bundles/index.mjs.d.ts +322 -21
  6. package/bundles/types/api/api-base.d.ts +6 -0
  7. package/bundles/types/api/api-base.d.ts.map +1 -1
  8. package/bundles/types/api/api-charge-internal.d.ts +1 -5
  9. package/bundles/types/api/api-charge-internal.d.ts.map +1 -1
  10. package/bundles/types/canvas-3ds/canvas-3ds-event-map.d.ts +50 -0
  11. package/bundles/types/canvas-3ds/canvas-3ds-event-map.d.ts.map +1 -1
  12. package/bundles/types/canvas-3ds/canvas-3ds.d.ts +7 -5
  13. package/bundles/types/canvas-3ds/canvas-3ds.d.ts.map +1 -1
  14. package/bundles/types/canvas-3ds/index.d.ts +1 -1
  15. package/bundles/types/canvas-3ds/index.d.ts.map +1 -1
  16. package/bundles/types/canvas-3ds/services/gpayments-service.d.ts +117 -2
  17. package/bundles/types/canvas-3ds/services/gpayments-service.d.ts.map +1 -1
  18. package/bundles/types/canvas-3ds/services/standalone3ds-service.d.ts +6 -0
  19. package/bundles/types/canvas-3ds/services/standalone3ds-service.d.ts.map +1 -1
  20. package/bundles/types/components/iframe-event.d.ts +4 -3
  21. package/bundles/types/components/iframe-event.d.ts.map +1 -1
  22. package/bundles/types/components/iframe.d.ts +5 -0
  23. package/bundles/types/components/iframe.d.ts.map +1 -1
  24. package/bundles/types/components/param.d.ts +19 -0
  25. package/bundles/types/components/param.d.ts.map +1 -1
  26. package/bundles/types/helper/browser.d.ts.map +1 -1
  27. package/bundles/types/helper/element-id.d.ts +3 -1
  28. package/bundles/types/helper/element-id.d.ts.map +1 -1
  29. package/bundles/types/helper/uuid.d.ts.map +1 -1
  30. package/bundles/types/index-cba.d.ts +1 -1
  31. package/bundles/types/index-cba.d.ts.map +1 -1
  32. package/bundles/types/index.d.ts +2 -2
  33. package/bundles/types/index.d.ts.map +1 -1
  34. package/bundles/types/open-wallets/apple-pay-open-wallet-button.d.ts +41 -0
  35. package/bundles/types/open-wallets/apple-pay-open-wallet-button.d.ts.map +1 -1
  36. package/bundles/types/open-wallets/base/open-wallet-buttons.d.ts +10 -0
  37. package/bundles/types/open-wallets/base/open-wallet-buttons.d.ts.map +1 -1
  38. package/bundles/types/open-wallets/base/service-config-cache.d.ts +23 -0
  39. package/bundles/types/open-wallets/base/service-config-cache.d.ts.map +1 -0
  40. package/bundles/types/open-wallets/google-pay-open-wallet-button.d.ts +33 -1
  41. package/bundles/types/open-wallets/google-pay-open-wallet-button.d.ts.map +1 -1
  42. package/bundles/types/open-wallets/index.d.ts +82 -1
  43. package/bundles/types/open-wallets/index.d.ts.map +1 -1
  44. package/bundles/types/open-wallets/interfaces/apple-pay/apple-pay-availability.interface.d.ts +41 -0
  45. package/bundles/types/open-wallets/interfaces/apple-pay/apple-pay-availability.interface.d.ts.map +1 -0
  46. package/bundles/types/open-wallets/interfaces/apple-pay/index.d.ts +1 -0
  47. package/bundles/types/open-wallets/interfaces/apple-pay/index.d.ts.map +1 -1
  48. package/bundles/types/open-wallets/interfaces/google-pay/google-pay-availability.interface.d.ts +25 -0
  49. package/bundles/types/open-wallets/interfaces/google-pay/google-pay-availability.interface.d.ts.map +1 -0
  50. package/bundles/types/open-wallets/interfaces/google-pay/index.d.ts +1 -0
  51. package/bundles/types/open-wallets/interfaces/google-pay/index.d.ts.map +1 -1
  52. package/bundles/types/open-wallets/interfaces/index.d.ts +3 -0
  53. package/bundles/types/open-wallets/interfaces/index.d.ts.map +1 -1
  54. package/bundles/types/open-wallets/interfaces/open-wallet-availability.interface.d.ts +31 -0
  55. package/bundles/types/open-wallets/interfaces/open-wallet-availability.interface.d.ts.map +1 -0
  56. package/bundles/types/open-wallets/services/apple-pay/apple-pay-availability.d.ts +58 -0
  57. package/bundles/types/open-wallets/services/apple-pay/apple-pay-availability.d.ts.map +1 -0
  58. package/bundles/types/open-wallets/services/apple-pay/apple-pay.open-wallet.service.d.ts +8 -10
  59. package/bundles/types/open-wallets/services/apple-pay/apple-pay.open-wallet.service.d.ts.map +1 -1
  60. package/bundles/types/open-wallets/services/apple-pay/index.d.ts +1 -0
  61. package/bundles/types/open-wallets/services/apple-pay/index.d.ts.map +1 -1
  62. package/bundles/types/open-wallets/services/google-pay/google-pay-availability.d.ts +53 -0
  63. package/bundles/types/open-wallets/services/google-pay/google-pay-availability.d.ts.map +1 -0
  64. package/bundles/types/open-wallets/services/google-pay/google-pay.open-wallet.service.d.ts.map +1 -1
  65. package/bundles/types/open-wallets/services/google-pay/index.d.ts +1 -0
  66. package/bundles/types/open-wallets/services/google-pay/index.d.ts.map +1 -1
  67. package/bundles/types/widget/multi-widget.d.ts +19 -0
  68. package/bundles/types/widget/multi-widget.d.ts.map +1 -1
  69. package/bundles/widget.umd.js +2683 -599
  70. package/bundles/widget.umd.js.d.ts +322 -21
  71. package/bundles/widget.umd.js.min.d.ts +322 -21
  72. package/bundles/widget.umd.min.js +1 -1
  73. package/docs/api-canvas3ds.md +10 -8
  74. package/docs/api-checkout-button.md +15 -0
  75. package/docs/api-ps-widget.md +15 -0
  76. package/docs/api-widget.md +15 -0
  77. package/docs/canvas3ds-examples.md +43 -1
  78. package/docs/open-wallet-buttons-examples.md +170 -2
  79. package/docs/open-wallet-buttons.md +252 -29
  80. package/docs/widget-examples.md +41 -0
  81. package/package.json +20 -11
  82. package/slate.md +254 -3
@@ -259,6 +259,24 @@ declare const SUPPORTED_CARD_TYPES: {
259
259
  EFTPOS_WHITE: string;
260
260
  UNIONPAY: string;
261
261
  };
262
+ /**
263
+ * Card schemes the widget is able to resolve from a card number, and therefore the only values
264
+ * `setAllowedCardSchemes` accepts. This is a separate vocabulary from SUPPORTED_CARD_TYPES, which drives the
265
+ * card icons: it omits the icon-only variants `visa_white` / `eftpos_white`, and the `laser` / `maestro`
266
+ * identifiers the widget can never resolve — allowing those would be configuration that can never match.
267
+ */
268
+ declare const CARD_SCHEME: {
269
+ AMEX: string;
270
+ AUSBC: string;
271
+ DINERS: string;
272
+ DISCOVER: string;
273
+ EFTPOS: string;
274
+ JAPCB: string;
275
+ MASTERCARD: string;
276
+ SOLO: string;
277
+ UNIONPAY: string;
278
+ VISA: string;
279
+ };
262
280
  interface IIcons {
263
281
  paypal_checkout_button?: string;
264
282
  afterpay_checkout_button?: string;
@@ -362,6 +380,7 @@ interface IParams extends IStyles$1, ITexts, ICommonParams {
362
380
  ref_id?: string;
363
381
  supported_card_types?: string;
364
382
  validate_card_types?: boolean;
383
+ allowed_card_schemes?: string;
365
384
  fields_validation?: boolean;
366
385
  hidden_elements?: string;
367
386
  icons?: string;
@@ -767,10 +786,15 @@ declare class Configuration {
767
786
  declare class IFrame {
768
787
  protected container: Container;
769
788
  constructor(container: Container);
789
+ /**
790
+ * @param options.onLoad Called on every `load` of the iframe (initial document and each
791
+ * subsequent navigation). Attached before `src` is set so a fast load is never missed.
792
+ */
770
793
  load(link: string, options?: {
771
794
  title?: string;
772
795
  attributes?: Record<string, string>;
773
796
  styles?: Record<string, string>;
797
+ onLoad?: (event: Event) => void;
774
798
  }, iframeClass?: string): void;
775
799
  loadFromHtml(content: string, options?: {
776
800
  title?: string;
@@ -842,15 +866,16 @@ declare const EVENT$3: {
842
866
  type EventTypes = typeof EVENT$3[keyof typeof EVENT$3];
843
867
  interface Listener {
844
868
  event: string;
845
- listener: (event: any) => void;
869
+ /** `origin` is the `MessageEvent.origin` of the postMessage that carried the data (undefined for direct `emit`). */
870
+ listener: (event: any, origin?: string) => void;
846
871
  widget_id: string;
847
872
  }
848
873
  declare type Listeners = Listener[];
849
874
  declare class IFrameEvent {
850
875
  protected listeners: Listeners;
851
876
  constructor(subject: Window | null);
852
- emit(data: IEventData$1): void;
853
- on<T>(eventName: string, widgetId: string, cb: (data: T) => void): void;
877
+ emit(data: IEventData$1, origin?: string): void;
878
+ on<T>(eventName: string, widgetId: string, cb: (data: T, origin?: string) => void): void;
854
879
  clear(): void;
855
880
  private subscribe;
856
881
  }
@@ -1206,6 +1231,25 @@ declare class MultiWidget {
1206
1231
  * @param {boolean} validateCardNumberInput - [validateCardNumberInput=false] - using this param you allow validation for card number input on supported card types
1207
1232
  */
1208
1233
  setSupportedCardIcons(elements: string[], validateCardNumberInput?: boolean): void;
1234
+ /**
1235
+ * Current method restricts which card schemes the card number input accepts, without changing which card
1236
+ * icons the widget displays. Scheme identifiers are matched case-insensitively and ignoring surrounding
1237
+ * whitespace; unsupported identifiers are ignored with a warning, so a list in which every identifier is
1238
+ * unsupported applies no restriction at all.
1239
+ *
1240
+ * Takes precedence over setSupportedCardIcons: when a non-empty list is supplied here, it is the only list
1241
+ * used for validation and the validateCardNumberInput flag of setSupportedCardIcons no longer affects it.
1242
+ * Calling this method more than once replaces the previous list rather than merging with it.
1243
+ *
1244
+ * Must be called before load().
1245
+ *
1246
+ * @example
1247
+ *
1248
+ * widget.setAllowedCardSchemes(['visa', 'mastercard']);
1249
+ *
1250
+ * @param {string[]} schemes - [CARD_SCHEME]{@link CARD_SCHEME}
1251
+ */
1252
+ setAllowedCardSchemes(schemes: string[]): void;
1209
1253
  /**
1210
1254
  * Current method can hide prevent the widget from showing the error messages
1211
1255
  *
@@ -2171,6 +2215,12 @@ declare class ApiBase {
2171
2215
  * @param {string} [alias] - Own domain alias
2172
2216
  */
2173
2217
  setEnv(env: string, alias?: string): ApiBase;
2218
+ /**
2219
+ * Origin (`scheme://host[:port]`) of the API this client talks to, for the current env/alias.
2220
+ * Used to validate the `origin` of postMessages the API itself sends to the page.
2221
+ */
2222
+ getApiOrigin(): string;
2223
+ static toOrigin(url: string): string;
2174
2224
  requestObservable<Req extends object, Res>(method: 'GET' | 'POST', url: string, requestBody: Req): Observable<Res>;
2175
2225
  private makeRequest;
2176
2226
  private onRequestLoad;
@@ -2301,6 +2351,11 @@ declare class Standalone3dsService {
2301
2351
  load(token: string, options: {
2302
2352
  title: string;
2303
2353
  }): void;
2354
+ /**
2355
+ * Origins allowed to deliver a processed 3DS outcome to the page via postMessage: the Paydock API
2356
+ * (inline callback page) and the Paydock widget (remote-app landing page), for the current env/alias.
2357
+ */
2358
+ protected getTrustedMessageOrigins(api: ApiBase): string[];
2304
2359
  setEnv(env: string, alias?: string): void;
2305
2360
  }
2306
2361
 
@@ -2319,6 +2374,38 @@ interface Canvas3dsAuthPayload {
2319
2374
  description?: string;
2320
2375
  };
2321
2376
  }
2377
+ /**
2378
+ * Payload of `chargeAuthChallengeLoaded` (Standalone 3DS, challenge flow only).
2379
+ * Emitted exactly once per challenge, after `chargeAuthChallenge`.
2380
+ */
2381
+ interface Canvas3dsChallengeLoadedPayload {
2382
+ /** The Paydock 3DS charge identifier the challenge belongs to. */
2383
+ charge_3ds_id: string;
2384
+ /**
2385
+ * `'load'` — the challenge iframe fired its first `load`: the ACS page has painted.
2386
+ * `'timeout'` — no `load` arrived within the SDK's 2.5 s safety fallback; the event is emitted anyway so a
2387
+ * loader is never held forever (the page may still be loading and will paint on its own). Useful for
2388
+ * analytics (how often the fallback fires) — you do not need to handle the two differently.
2389
+ */
2390
+ reason: 'load' | 'timeout';
2391
+ }
2392
+ /**
2393
+ * Payload of `chargeAuthChallengeCompleted` (Standalone 3DS, challenge and decoupled flows).
2394
+ * Emitted at most once per authentication, after the shopper finished the challenge (or approved a decoupled
2395
+ * authentication) and always before the terminal event.
2396
+ */
2397
+ interface Canvas3dsChallengeCompletedPayload {
2398
+ /** The Paydock 3DS charge identifier the authentication belongs to. */
2399
+ charge_3ds_id: string;
2400
+ /**
2401
+ * How the SDK learned that the issuer delivered the result:
2402
+ * `'poll'` — the 3DS Server's result monitor reported it (the usual case: it flips as soon as the issuer's
2403
+ * result reaches the 3DS Server, before the challenge iframe has even left the bank's page);
2404
+ * `'callback'` — the callback message carrying the outcome arrived first (the terminal event follows
2405
+ * immediately). Informational only — handle both the same way.
2406
+ */
2407
+ source: 'poll' | 'callback';
2408
+ }
2322
2409
  /**
2323
2410
  * Payload emitted by the Standalone 3DS flow for error events.
2324
2411
  * `error` is intentionally `unknown` — upstream emitters do not guarantee a shape.
@@ -2371,6 +2458,24 @@ interface Canvas3dsEventMap {
2371
2458
  error: Canvas3dsErrorPayload | Canvas3dsErrorEventPayload;
2372
2459
  /** Challenge required — issuer demands user interaction (OTP, biometric, etc.). Standalone-only. */
2373
2460
  chargeAuthChallenge: Canvas3dsAuthPayload;
2461
+ /**
2462
+ * The challenge iframe has painted (first `load`), or the 2.5 s fallback elapsed — see `reason`. Standalone-only,
2463
+ * challenge flow only (never emitted for decoupled challenges). Fires once, after `chargeAuthChallenge`.
2464
+ *
2465
+ * Recommended loader pattern: show a loader before the charge POST, keep it through `chargeAuthChallenge`,
2466
+ * reveal the challenge on this event, cover it with "Completing verification" on `chargeAuthChallengeCompleted`,
2467
+ * and finish on `chargeAuthSuccess` / `chargeAuthReject` / `error`.
2468
+ */
2469
+ chargeAuthChallengeLoaded: Canvas3dsChallengeLoadedPayload;
2470
+ /**
2471
+ * The shopper finished the challenge (or approved a decoupled authentication): the issuer delivered the final
2472
+ * result to the 3DS Server and the SDK is obtaining the outcome. Cover the challenge iframe with your own
2473
+ * "Completing verification" state — whatever the bank or the 3DS Server render from here on is plumbing, not
2474
+ * UX. Standalone-only. Fires at most once per authentication, always before `chargeAuthSuccess` /
2475
+ * `chargeAuthReject` / `error`, and never after them. A wrong OTP or a further interactive step does NOT fire
2476
+ * it (no result has been delivered yet), so no grace timer or reveal fallback is needed on your side.
2477
+ */
2478
+ chargeAuthChallengeCompleted: Canvas3dsChallengeCompletedPayload;
2374
2479
  /** Decoupled authentication — issuer will authenticate out-of-band and notify later. Standalone-only. */
2375
2480
  chargeAuthDecoupled: Canvas3dsAuthPayload;
2376
2481
  /** Iframe-path authentication event. Extends `IEventData` with optional 3DS correlation fields (`charge_3ds_id`, `status`). */
@@ -2426,11 +2531,13 @@ declare enum TOKEN_FORMAT {
2426
2531
  * @const STANDALONE_3DS_EVENT
2427
2532
  *
2428
2533
  * @type {object}
2429
- * @param {string} CHARGE_AUTH_SUCCESS=chargeAuthSuccess
2430
- * @param {string} CHARGE_AUTH_REJECT=chargeAuthReject
2431
- * @param {string} CHARGE_AUTH_DECOUPLED=chargeAuthDecoupled
2432
- * @param {string} CHARGE_AUTH_CHALLENGE=chargeAuthChallenge
2433
- * @param {string} CHARGE_AUTH_INFO=chargeAuthInfo
2534
+ * @param {string} AUTH_SUCCESS=chargeAuthSuccess
2535
+ * @param {string} AUTH_ERROR=chargeAuthReject
2536
+ * @param {string} DECOUPLED=chargeAuthDecoupled
2537
+ * @param {string} CHALLENGE=chargeAuthChallenge
2538
+ * @param {string} CHALLENGE_LOADED=chargeAuthChallengeLoaded - challenge iframe painted (first `load`, or 2.5 s fallback); reveal your challenge UI here
2539
+ * @param {string} CHALLENGE_COMPLETED=chargeAuthChallengeCompleted - the shopper finished the challenge (issuer result delivered to the 3DS Server); cover the challenge iframe with your own loader until the terminal event
2540
+ * @param {string} INFO=chargeAuthInfo
2434
2541
  * @param {string} ERROR=error
2435
2542
  */
2436
2543
  /**
@@ -2559,7 +2666,6 @@ declare class ApiChargeInternal {
2559
2666
  constructor(api: ApiInternal);
2560
2667
  walletCapture(payload: WalletCaptureBody): Promise<WalletCaptureResponse>;
2561
2668
  walletCallback(payload: WalletCallbackBody): Promise<WalletCallbackResponse>;
2562
- standalone3dsProcess(payload: Standalone3dsProcessBody): Promise<ProcessAuthenticationResponse>;
2563
2669
  standalone3dsHandle(): Promise<HandleResponseInterface>;
2564
2670
  }
2565
2671
  interface WalletCaptureResponse {
@@ -2600,9 +2706,6 @@ interface WalletCallbackResponse {
2600
2706
  callback_rel: string;
2601
2707
  callback_url: string;
2602
2708
  }
2603
- interface Standalone3dsProcessBody {
2604
- charge_3ds_id: string;
2605
- }
2606
2709
 
2607
2710
  declare class ApiCheckoutInternal {
2608
2711
  protected api: ApiInternal;
@@ -2885,6 +2988,20 @@ declare const CANVAS_3DS_EVENT: {
2885
2988
  readonly DECOUPLED: "chargeAuthDecoupled";
2886
2989
  /** Challenge required — issuer demands user interaction. Payload: `Canvas3dsAuthPayload`. */
2887
2990
  readonly CHALLENGE: "chargeAuthChallenge";
2991
+ /**
2992
+ * The challenge iframe fired its FIRST `load` after `chargeAuthChallenge` (the ACS page has painted),
2993
+ * or the `CHALLENGE_LOADED_FALLBACK_MS` safety fallback elapsed without one. Emitted exactly once per
2994
+ * challenge; never emitted for a decoupled challenge (no challenge iframe). Payload: `Canvas3dsChallengeLoadedPayload`.
2995
+ */
2996
+ readonly CHALLENGE_LOADED: "chargeAuthChallengeLoaded";
2997
+ /**
2998
+ * The issuer delivered the final authentication result to the 3DS Server (the shopper finished the
2999
+ * challenge, or approved a decoupled authentication) and the SDK is now obtaining the outcome. Emitted at
3000
+ * most once per authentication, always before the terminal event. Detected through the `secondary_url`
3001
+ * result monitor (`source: 'poll'`) or, when the callback message arrives first, right before the outcome
3002
+ * it carries (`source: 'callback'`). Payload: `Canvas3dsChallengeCompletedPayload`.
3003
+ */
3004
+ readonly CHALLENGE_COMPLETED: "chargeAuthChallengeCompleted";
2888
3005
  /** Informational signal emitted by the GPayments flow. Internal — not part of the public typed surface. */
2889
3006
  readonly INFO: "chargeAuthInfo";
2890
3007
  /** Error during the flow (network, parsing, etc.). Payload: `Canvas3dsErrorPayload`. */
@@ -3782,6 +3899,77 @@ declare enum ERROR_OPERATION {
3782
3899
  SHIPPING_UPDATE = "shipping_update"
3783
3900
  }
3784
3901
 
3902
+ /**
3903
+ * Base options shared by every wallet's static availability check
3904
+ * (e.g. `ApplePayOpenWalletButton.checkAvailability`). Wallet-specific option
3905
+ * interfaces extend this with their own fields.
3906
+ */
3907
+ interface OpenWalletAvailabilityOptions {
3908
+ /** Public key or access token used to fetch the service config when needed. */
3909
+ public_key_or_access_token?: string;
3910
+ /** Service ID — used with `public_key_or_access_token` to resolve the wallet configuration. */
3911
+ service_id?: string;
3912
+ /** Environment for the config fetch (e.g. `'sandbox'`). Defaults to the SDK default. */
3913
+ env?: string;
3914
+ /**
3915
+ * When `true`, performs only the cheap, network-free synchronous check and resolves
3916
+ * immediately — no config fetch, SDK load, or remote capability query.
3917
+ */
3918
+ sync?: boolean;
3919
+ }
3920
+ /**
3921
+ * Base result shared by every wallet's static availability check. Wallet-specific
3922
+ * result interfaces extend this with their own fields.
3923
+ */
3924
+ interface OpenWalletAvailabilityResult {
3925
+ /** Convenience verdict: the wallet is usable for a payment in the current context. */
3926
+ available: boolean;
3927
+ /** Whether the wallet is supported here at all (may be available via a fallback flow). */
3928
+ supported: boolean;
3929
+ /** Machine-readable reason when not available. */
3930
+ reason?: string;
3931
+ }
3932
+
3933
+ /**
3934
+ * Friendly capability tokens accepted as **input** — the same values used in
3935
+ * `ApplePayOpenWalletMeta.apple_pay_capabilities`. They declare which device
3936
+ * credential statuses should be treated as "available".
3937
+ */
3938
+ type ApplePayCapabilityToken = 'credentials_available' | 'credentials_status_unknown' | 'credentials_unavailable';
3939
+ /**
3940
+ * Device-reported credential status — the **output** of
3941
+ * `ApplePaySession.applePayCapabilities()`.
3942
+ */
3943
+ type ApplePayCredentialStatus = 'paymentCredentialsAvailable' | 'paymentCredentialStatusUnknown' | 'paymentCredentialsUnavailable' | 'applePayUnsupported';
3944
+ /**
3945
+ * Options for `ApplePayOpenWalletButton.checkAvailability`. Provide `merchant_id`
3946
+ * directly to skip the network call, **or** provide `public_key_or_access_token` +
3947
+ * `service_id` to have the SDK resolve the merchant identifier from the service config.
3948
+ */
3949
+ interface ApplePayAvailabilityOptions extends OpenWalletAvailabilityOptions {
3950
+ /** Apple merchant identifier. Provide this OR (`public_key_or_access_token` + `service_id`). */
3951
+ merchant_id?: string;
3952
+ /**
3953
+ * Device credential statuses that count as available. Defaults to
3954
+ * `['credentials_available', 'credentials_status_unknown']` — `credentials_status_unknown`
3955
+ * is what third-party / cross-device (QR) browsers report, so the default keeps Apple Pay
3956
+ * visible outside Safari.
3957
+ */
3958
+ apple_pay_capabilities?: ApplePayCapabilityToken[];
3959
+ }
3960
+ /** Result of `ApplePayOpenWalletButton.checkAvailability`. */
3961
+ interface ApplePayAvailabilityResult extends OpenWalletAvailabilityResult {
3962
+ /**
3963
+ * Whether a **native, same-device** Apple Pay session is present right now
3964
+ * (`ApplePaySession` exists and `canMakePayments()` is `true`). Apple does not expose
3965
+ * the transport directly, so use this to infer it: `available && has_native_session` ⇒
3966
+ * native sheet likely; `available && !has_native_session` ⇒ cross-device / QR handoff likely.
3967
+ */
3968
+ has_native_session: boolean;
3969
+ /** The raw device-reported credential status. Undefined when unsupported or not queried. */
3970
+ payment_credential_status?: ApplePayCredentialStatus;
3971
+ }
3972
+
3785
3973
  /**
3786
3974
  * Events emitted during the OpenWallet payment lifecycle.
3787
3975
  */
@@ -3933,6 +4121,30 @@ interface OnCancelEventData extends OpenWalletBaseEvent {
3933
4121
  event: EVENT$1.CHECKOUT_CLOSE;
3934
4122
  }
3935
4123
 
4124
+ /**
4125
+ * Options for `GooglePayOpenWalletButton.checkAvailability`. Extends
4126
+ * {@link OpenWalletAvailabilityOptions}. All fields are optional — Google Pay's
4127
+ * `isReadyToPay` check does not require a merchant identifier. Provide
4128
+ * `public_key_or_access_token` + `service_id` to validate that the service is a Google Pay
4129
+ * service (and resolve the merchant id), or `merchant_id` directly.
4130
+ */
4131
+ interface GooglePayAvailabilityOptions extends OpenWalletAvailabilityOptions {
4132
+ /**
4133
+ * Google Pay gateway merchant identifier. Optional — `isReadyToPay` does not require it;
4134
+ * when omitted the readiness check still runs.
4135
+ */
4136
+ merchant_id?: string;
4137
+ }
4138
+ /** Result of `GooglePayOpenWalletButton.checkAvailability`. */
4139
+ interface GooglePayAvailabilityResult extends OpenWalletAvailabilityResult {
4140
+ /**
4141
+ * Google's `isReadyToPay` `paymentMethodPresent` — whether the buyer already has a
4142
+ * payment method usable with Google Pay. `undefined` when not reported (e.g. the
4143
+ * synchronous check, or browsers where it is not surfaced).
4144
+ */
4145
+ payment_method_present?: boolean;
4146
+ }
4147
+
3936
4148
  /**
3937
4149
  * Base metadata required to configure an OpenWallet button.
3938
4150
  */
@@ -4201,6 +4413,16 @@ declare abstract class OpenWalletButtons<TMeta extends OpenWalletMeta = OpenWall
4201
4413
  abstract readonly walletType: WalletType;
4202
4414
  /** @private */
4203
4415
  constructor(selector: string, publicKeyOrAccessToken: string, serviceId: string, meta: TMeta);
4416
+ /**
4417
+ * Invalidates the cached service configuration whenever an error or unavailable
4418
+ * event fires, so the next `load()` re-fetches a fresh config. The cache is keyed
4419
+ * on the service ID with a 1-day TTL; clearing it on failure means a config that
4420
+ * changed server-side (and caused the failure) is not reused until the TTL expires.
4421
+ * Registered once per button, independently of any merchant-registered handlers.
4422
+ *
4423
+ * @private
4424
+ */
4425
+ private registerCacheInvalidationOnError;
4204
4426
  /**
4205
4427
  * Creates the wallet-specific service instance for this button.
4206
4428
  * Each concrete subclass implements this to instantiate its specific wallet service.
@@ -5062,11 +5284,6 @@ type ApplePayButtonStyle$1 = 'black' | 'white' | 'white-outline';
5062
5284
 
5063
5285
  type ApplePayButtonType$1 = 'add-money' | 'book' | 'buy' | 'check-out' | 'continue' | 'contribute' | 'donate' | 'order' | 'pay' | 'plain' | 'reload' | 'rent' | 'set-up' | 'subscribe' | 'support' | 'tip' | 'top-up';
5064
5286
 
5065
- declare global {
5066
- interface Window {
5067
- ApplePaySession: ApplePaySession;
5068
- }
5069
- }
5070
5287
  /** Styling configuration for the Apple Pay button. */
5071
5288
  interface ApplePayOpenWalletMetaStyles extends OpenWalletMetaStyles {
5072
5289
  /** Variant displayed on the button (e.g. `'buy'`, `'donate'`, `'plain'`, `'check-out'`). */
@@ -5127,12 +5344,24 @@ interface ApplePayOpenWalletMeta extends OpenWalletMeta, Omit<ApplePayPaymentReq
5127
5344
  /** Visual styling for the Apple Pay button. */
5128
5345
  style?: ApplePayOpenWalletMetaStyles;
5129
5346
  /**
5130
- * Device capabilities allowed for the wallet button to be considered available.
5131
- * Used as a relaxation knob for testing — defaults to `['paymentCredentialsAvailable']` only.
5347
+ * Device credential statuses that make the button render. Defaults to
5348
+ * `['credentials_available', 'credentials_status_unknown']`:
5349
+ * - `credentials_available` — the device has a confirmed Apple Pay card ready to use.
5350
+ * - `credentials_status_unknown` — a local card can't be confirmed, but Apple Pay can
5351
+ * still proceed (e.g. the cross-device flow where the buyer completes payment on their
5352
+ * iPhone via QR, used by Chrome, Edge and Firefox).
5353
+ * The button renders when the device's reported status is in this list. Narrow to
5354
+ * `['credentials_available']` to require a confirmed local card.
5132
5355
  */
5133
5356
  apple_pay_capabilities?: Array<'credentials_available' | 'credentials_status_unknown' | 'credentials_unavailable'>;
5134
5357
  }
5135
5358
 
5359
+ declare global {
5360
+ interface Window {
5361
+ ApplePaySession: ApplePaySession;
5362
+ }
5363
+ }
5364
+
5136
5365
  /**
5137
5366
  * @classdesc Apple Pay wallet button that creates One-Time Tokens (OTT) via Apple Pay.
5138
5367
  *
@@ -5171,6 +5400,46 @@ interface ApplePayOpenWalletMeta extends OpenWalletMeta, Omit<ApplePayPaymentReq
5171
5400
  declare class ApplePayOpenWalletButton extends OpenWalletButtons<ApplePayOpenWalletMeta> {
5172
5401
  /** @private */
5173
5402
  readonly walletType: WalletType;
5403
+ /**
5404
+ * Checks Apple Pay availability **without instantiating the button** — the single,
5405
+ * authoritative, cross-browser-aware availability entry point.
5406
+ *
5407
+ * Resolves the merchant identifier (either supplied directly or fetched from the
5408
+ * service configuration), loads Apple's web SDK if needed, then queries
5409
+ * `ApplePaySession.applePayCapabilities()`. Returns a convenience `available` verdict
5410
+ * (computed against `apple_pay_capabilities`), the raw device-reported
5411
+ * `payment_credential_status`, and `has_native_session` so callers can infer the transport:
5412
+ * `available && has_native_session` ⇒ native sheet likely; `available && !has_native_session`
5413
+ * ⇒ cross-device / QR handoff likely.
5414
+ *
5415
+ * Pass `{ sync: true }` for a cheap, network-free native same-device pre-check that
5416
+ * resolves immediately (see {@link ApplePayAvailabilityOptions.sync}).
5417
+ *
5418
+ * @param {ApplePayAvailabilityOptions} [options] - Merchant context, allowed capabilities, and mode.
5419
+ * @returns {Promise<ApplePayAvailabilityResult>} The availability result.
5420
+ *
5421
+ * @example
5422
+ * // Lightest path — no network, when you already know the merchant identifier:
5423
+ * const result = await ApplePayOpenWalletButton.checkAvailability({ merchant_id });
5424
+ *
5425
+ * @example
5426
+ * // Resolve the merchant identifier from the service configuration:
5427
+ * const result = await ApplePayOpenWalletButton.checkAvailability({
5428
+ * public_key_or_access_token,
5429
+ * service_id,
5430
+ * env: 'sandbox',
5431
+ * });
5432
+ * if (result.available) {
5433
+ * // Render the Apple Pay button (native sheet or cross-device QR, per has_native_session).
5434
+ * } else {
5435
+ * console.log('Unavailable:', result.reason, result.payment_credential_status);
5436
+ * }
5437
+ *
5438
+ * @example
5439
+ * // Synchronous native-only fast check (no network / SDK load):
5440
+ * const { has_native_session } = await ApplePayOpenWalletButton.checkAvailability({ sync: true });
5441
+ */
5442
+ static checkAvailability(options?: ApplePayAvailabilityOptions): Promise<ApplePayAvailabilityResult>;
5174
5443
  /**
5175
5444
  * Validates Apple Pay-specific required metadata fields.
5176
5445
  * Apple Pay requires `amount_label` and `store_name` to be present and strings.
@@ -5342,6 +5611,38 @@ interface GooglePayCardConfig {
5342
5611
  declare class GooglePayOpenWalletButton extends OpenWalletButtons<GooglePayOpenWalletMeta> {
5343
5612
  /** @private */
5344
5613
  readonly walletType: WalletType;
5614
+ /**
5615
+ * Checks Google Pay availability **without instantiating the button** — the static
5616
+ * availability entry point.
5617
+ *
5618
+ * Loads the Google Pay JS SDK if needed, then runs `PaymentsClient.isReadyToPay()` using
5619
+ * the **default** card configuration (a button instance with a custom `card_config` may
5620
+ * produce a different result). All options are optional — unlike Apple Pay, Google Pay's
5621
+ * readiness check does not require a merchant identifier; supplying `service_id` +
5622
+ * `public_key_or_access_token` additionally validates that the service is a Google Pay service.
5623
+ *
5624
+ * Pass `{ sync: true }` for a cheap, network-free check that only reports whether the
5625
+ * Google Pay JS API is already present (see {@link GooglePayAvailabilityOptions.sync}).
5626
+ *
5627
+ * @param {GooglePayAvailabilityOptions} [options] - Optional merchant context and mode.
5628
+ * @returns {Promise<GooglePayAvailabilityResult>} The availability result.
5629
+ *
5630
+ * @example
5631
+ * // Simplest form — no merchant context needed:
5632
+ * const result = await GooglePayOpenWalletButton.checkAvailability();
5633
+ * if (result.available) {
5634
+ * // Render the Google Pay button.
5635
+ * }
5636
+ *
5637
+ * @example
5638
+ * // Validate the service is a Google Pay service while checking:
5639
+ * const result = await GooglePayOpenWalletButton.checkAvailability({
5640
+ * public_key_or_access_token,
5641
+ * service_id,
5642
+ * env: 'sandbox',
5643
+ * });
5644
+ */
5645
+ static checkAvailability(options?: GooglePayAvailabilityOptions): Promise<GooglePayAvailabilityResult>;
5345
5646
  /**
5346
5647
  * Validates Google Pay-specific required metadata fields.
5347
5648
  * Google Pay has no additional required fields beyond the base (amount, currency, country).
@@ -7255,5 +7556,5 @@ declare global {
7255
7556
  }
7256
7557
  }
7257
7558
 
7258
- export { AfterpayCheckoutButton, AfterpayOnSiteMessaging, Api, ApplePayOpenWalletButton, ApplePayWalletButtonExpress, CANVAS_3DS_EVENT, CHECKOUT_BUTTON_EVENT, EVENT$2 as CHECKOUT_EVENT, Canvas3ds, Canvas3dsTokenFormat, Checkout, CheckoutActionCode, ClickToPay, Configuration, ContactShippingEditingMode, ELEMENT, ERROR_OPERATION, EVENT$3 as EVENT, Builder$1 as ExternalCheckoutBuilder, Checker as ExternalCheckoutChecker, FORM_FIELD, FRAUD_PREVENTION_EVENTS, FraudPreventionService, GooglePayOpenWalletButton, HtmlMultiWidget, HtmlPaymentSourceWidget, HtmlWidget, InstructionDebugger, MultiWidget, OpenWalletButtons, PAYMENT_EXPIRED, PAYMENT_FAILURE, PAYMENT_SUCCESSFUL, PAYMENT_TYPE, PURPOSE, PayPalDataCollector, PayPalSavePaymentSourceWidget, Builder as PaymentSourceBuilder, PaymentSourceWidget, PaypalCheckoutButton, PaypalWalletButtonExpress, STYLABLE_ELEMENT, STYLABLE_ELEMENT_STATE, STYLE, SUPPORTED_CARD_TYPES, TEXT, TOKEN_TYPE, TRIGGER, TYPE, VAULT_DISPLAY_STYLE, VaultDisplayWidget, EVENT as WALLET_BUTTONS_EXPRESS_EVENT, WALLET_TYPES, WalletButtons, ZipmoneyCheckoutButton };
7259
- export type { ApplePayButtonStyle, ApplePayButtonType, ApplePayOpenWalletMeta, ApplePayWalletMeta, AppleShippingType, BaseWalletMeta, Billing, Canvas3dsAuthPayload, Canvas3dsChargeAuthEventPayload, Canvas3dsErrorEventPayload, Canvas3dsErrorPayload, Canvas3dsEventMap, Canvas3dsEventName, CheckoutIntentTokenPayload, CheckoutPaymentExpiredPayload, CheckoutPaymentFailurePayload, CheckoutPaymentSuccessPayload, CheckoutResponse, CreateOTTData, CreateOTTRequest, CreateOTTResponse, CreateSessionRequest, CreateSessionResponse, EventTypes, FraudPreventionEvent, FraudPreventionEventType, FraudPreventionProvider, GooglePayCardConfig, GooglePayOpenWalletMeta, GooglePayOpenWalletMetaStyles, HandleResponseInterface, IApplePayShippingOption, ICheckout, IClickToPayMeta, IDetails, IElementStyleInput, IEventAfterLoadData, IEventCheckoutFinishData, IEventData$1 as IEventData, IEventError, IEventFinishData, IEventMetaData, IEventSizeData, IFormValidation, IOpenWalletProvider, IPayPalMeta, IStyles$1 as IStyles, ITexts, ITokenStandalone3DS, IWalletMeta, IWalletOnClickEvent, IWalletPaymentSuccessfulEvent, IWalletUnavailableEvent, IWalletUpdateData, IWalletUpdateEvent, OTTResponse, OnCancelEventData, OnClickEventData$1 as OnClickEventData, OnCreateOTTErrorEventData, OnCreateOTTErrorPayload, OnCreateOTTSuccessPayload, OnCreateOTTSuccessfulEventData, OnErrorEventData$1 as OnErrorEventData, OnErrorPayload, OnLoadedEventData, OnUnavailableDetails, OnUnavailableEventData$1 as OnUnavailableEventData, OnUnavailablePayload, OpenWalletBaseEvent, OpenWalletDataEvent, OpenWalletEventType, OpenWalletMeta, PaypalWalletMeta, ProcessAuthenticationResponse, Shipping, VaultDisplayStyle, OnClickEventData as WalletExpressOnClickEventData, OnCloseEventData as WalletExpressOnCloseEventData, OnErrorEventData as WalletExpressOnErrorEventData, OnPaymentErrorEventData as WalletExpressOnPaymentErrorEventData, OnPaymentInReviewEventData as WalletExpressOnPaymentInReviewEventData, OnPaymentSuccessfulEventData as WalletExpressOnPaymentSuccessfulEventData, OnShippingAddressChangeEventData as WalletExpressOnShippingAddressChangeEventData, OnShippingAddressChangeEventResponse as WalletExpressOnShippingAddressChangeEventResponse, OnShippingOptionChangeEventData as WalletExpressOnShippingOptionChangeEventData, OnShippingOptionChangeEventResponse as WalletExpressOnShippingOptionChangeEventResponse, OnUnavailableEventData as WalletExpressOnUnavailableEventData, WalletType, WidgetEventMap, WidgetEventName };
7559
+ export { AfterpayCheckoutButton, AfterpayOnSiteMessaging, Api, ApplePayOpenWalletButton, ApplePayWalletButtonExpress, CANVAS_3DS_EVENT, CARD_SCHEME, CHECKOUT_BUTTON_EVENT, EVENT$2 as CHECKOUT_EVENT, Canvas3ds, Canvas3dsTokenFormat, Checkout, CheckoutActionCode, ClickToPay, Configuration, ContactShippingEditingMode, ELEMENT, ERROR_OPERATION, EVENT$3 as EVENT, Builder$1 as ExternalCheckoutBuilder, Checker as ExternalCheckoutChecker, FORM_FIELD, FRAUD_PREVENTION_EVENTS, FraudPreventionService, GooglePayOpenWalletButton, HtmlMultiWidget, HtmlPaymentSourceWidget, HtmlWidget, InstructionDebugger, MultiWidget, OpenWalletButtons, PAYMENT_EXPIRED, PAYMENT_FAILURE, PAYMENT_SUCCESSFUL, PAYMENT_TYPE, PURPOSE, PayPalDataCollector, PayPalSavePaymentSourceWidget, Builder as PaymentSourceBuilder, PaymentSourceWidget, PaypalCheckoutButton, PaypalWalletButtonExpress, STYLABLE_ELEMENT, STYLABLE_ELEMENT_STATE, STYLE, SUPPORTED_CARD_TYPES, TEXT, TOKEN_TYPE, TRIGGER, TYPE, VAULT_DISPLAY_STYLE, VaultDisplayWidget, EVENT as WALLET_BUTTONS_EXPRESS_EVENT, WALLET_TYPES, WalletButtons, ZipmoneyCheckoutButton };
7560
+ export type { ApplePayAvailabilityOptions, ApplePayAvailabilityResult, ApplePayButtonStyle, ApplePayButtonType, ApplePayCapabilityToken, ApplePayCredentialStatus, ApplePayOpenWalletMeta, ApplePayWalletMeta, AppleShippingType, BaseWalletMeta, Billing, Canvas3dsAuthPayload, Canvas3dsChallengeCompletedPayload, Canvas3dsChallengeLoadedPayload, Canvas3dsChargeAuthEventPayload, Canvas3dsErrorEventPayload, Canvas3dsErrorPayload, Canvas3dsEventMap, Canvas3dsEventName, CheckoutIntentTokenPayload, CheckoutPaymentExpiredPayload, CheckoutPaymentFailurePayload, CheckoutPaymentSuccessPayload, CheckoutResponse, CreateOTTData, CreateOTTRequest, CreateOTTResponse, CreateSessionRequest, CreateSessionResponse, EventTypes, FraudPreventionEvent, FraudPreventionEventType, FraudPreventionProvider, GooglePayAvailabilityOptions, GooglePayAvailabilityResult, GooglePayCardConfig, GooglePayOpenWalletMeta, GooglePayOpenWalletMetaStyles, HandleResponseInterface, IApplePayShippingOption, ICheckout, IClickToPayMeta, IDetails, IElementStyleInput, IEventAfterLoadData, IEventCheckoutFinishData, IEventData$1 as IEventData, IEventError, IEventFinishData, IEventMetaData, IEventSizeData, IFormValidation, IOpenWalletProvider, IPayPalMeta, IStyles$1 as IStyles, ITexts, ITokenStandalone3DS, IWalletMeta, IWalletOnClickEvent, IWalletPaymentSuccessfulEvent, IWalletUnavailableEvent, IWalletUpdateData, IWalletUpdateEvent, OTTResponse, OnCancelEventData, OnClickEventData$1 as OnClickEventData, OnCreateOTTErrorEventData, OnCreateOTTErrorPayload, OnCreateOTTSuccessPayload, OnCreateOTTSuccessfulEventData, OnErrorEventData$1 as OnErrorEventData, OnErrorPayload, OnLoadedEventData, OnUnavailableDetails, OnUnavailableEventData$1 as OnUnavailableEventData, OnUnavailablePayload, OpenWalletAvailabilityOptions, OpenWalletAvailabilityResult, OpenWalletBaseEvent, OpenWalletDataEvent, OpenWalletEventType, OpenWalletMeta, PaypalWalletMeta, ProcessAuthenticationResponse, Shipping, VaultDisplayStyle, OnClickEventData as WalletExpressOnClickEventData, OnCloseEventData as WalletExpressOnCloseEventData, OnErrorEventData as WalletExpressOnErrorEventData, OnPaymentErrorEventData as WalletExpressOnPaymentErrorEventData, OnPaymentInReviewEventData as WalletExpressOnPaymentInReviewEventData, OnPaymentSuccessfulEventData as WalletExpressOnPaymentSuccessfulEventData, OnShippingAddressChangeEventData as WalletExpressOnShippingAddressChangeEventData, OnShippingAddressChangeEventResponse as WalletExpressOnShippingAddressChangeEventResponse, OnShippingOptionChangeEventData as WalletExpressOnShippingOptionChangeEventData, OnShippingOptionChangeEventResponse as WalletExpressOnShippingOptionChangeEventResponse, OnUnavailableEventData as WalletExpressOnUnavailableEventData, WalletType, WidgetEventMap, WidgetEventName };
@@ -22,6 +22,12 @@ export declare class ApiBase {
22
22
  * @param {string} [alias] - Own domain alias
23
23
  */
24
24
  setEnv(env: string, alias?: string): ApiBase;
25
+ /**
26
+ * Origin (`scheme://host[:port]`) of the API this client talks to, for the current env/alias.
27
+ * Used to validate the `origin` of postMessages the API itself sends to the page.
28
+ */
29
+ getApiOrigin(): string;
30
+ static toOrigin(url: string): string;
25
31
  requestObservable<Req extends object, Res>(method: 'GET' | 'POST', url: string, requestBody: Req): Observable<Res>;
26
32
  private makeRequest;
27
33
  private onRequestLoad;
@@ -1 +1 @@
1
- {"version":3,"file":"api-base.d.ts","sourceRoot":"","sources":["../../src/api/api-base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAmB,MAAM,MAAM,CAAC;AACnD,OAAO,EAAW,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAG9C,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAe,KAAK,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAClF,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,aAAa,EACnB,MAAM,iDAAiD,CAAC;AAEzD,oBAAY,aAAa;IACvB,UAAU,IAAI;IACd,KAAK,IAAI;CACV;AAED,qBAAa,OAAO;IAClB,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,aAAa,CAAC;gBAEZ,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,aAAa;IAMlD;;;;;;;;OAQG;IACI,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO;IAM5C,iBAAiB,CAAC,GAAG,SAAS,MAAM,EAAE,GAAG,EAC9C,MAAM,EAAE,KAAK,GAAG,MAAM,EACtB,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,GAAG,GACf,UAAU,CAAC,GAAG,CAAC;IAYlB,OAAO,CAAC,WAAW;IAoBnB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,cAAc;IAsBtB,WAAW;IAQX,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,iBAAiB,EAAE,KAAK,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM;;+BAKpD,CAAC,IAAI,KAAK,IAAI,mBAAmB,GAAG;;IA6B1D,gBAAgB,CAAC,GAAG,SAAS,MAAM,EAAE,GAAG,EACtC,MAAM,EAAE,OAAO,CAAC,iBAAiB,EAAE,KAAK,GAAG,MAAM,CAAC,EAClD,IAAI,EAAE,MAAM,GACX;QACD,MAAM,EAAE,cAAc,CAAC;QACvB,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;KACnC;IAkCD,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,EAAE,KAAA,EAAE,OAAO,KAAA;IAkBtE,aAAa,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAkBpF;;;;;;;OAOG;IACH,SAAS,CAAC,qBAAqB,CAC7B,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,UAAU,CAAA;KAAE,KAAK,IAAI;IAmBnE,WAAW,EAAE,aAAa,CAExB;IAEF,WAAW,EAAE,aAAa,CAExB;IAEF,SAAS,CAAC,aAAa,CACrB,MAAM,EAAE,OAAO,CAAC,iBAAiB,EAAE,KAAK,GAAG,MAAM,CAAC,EAClD,IAAI,EAAE,MAAM;IAoBd,IAAW,GAAG;;;;MAMb;CACF"}
1
+ {"version":3,"file":"api-base.d.ts","sourceRoot":"","sources":["../../src/api/api-base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAmB,MAAM,MAAM,CAAC;AACnD,OAAO,EAAW,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAG9C,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAe,KAAK,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAClF,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,aAAa,EACnB,MAAM,iDAAiD,CAAC;AAEzD,oBAAY,aAAa;IACvB,UAAU,IAAI;IACd,KAAK,IAAI;CACV;AAED,qBAAa,OAAO;IAClB,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,aAAa,CAAC;gBAEZ,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,aAAa;IAMlD;;;;;;;;OAQG;IACI,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO;IAMnD;;;OAGG;IACI,YAAY,IAAI,MAAM;WAIf,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAapC,iBAAiB,CAAC,GAAG,SAAS,MAAM,EAAE,GAAG,EAC9C,MAAM,EAAE,KAAK,GAAG,MAAM,EACtB,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,GAAG,GACf,UAAU,CAAC,GAAG,CAAC;IAYlB,OAAO,CAAC,WAAW;IAoBnB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,cAAc;IAsBtB,WAAW;IAQX,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,iBAAiB,EAAE,KAAK,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM;;+BAKpD,CAAC,IAAI,KAAK,IAAI,mBAAmB,GAAG;;IA6B1D,gBAAgB,CAAC,GAAG,SAAS,MAAM,EAAE,GAAG,EACtC,MAAM,EAAE,OAAO,CAAC,iBAAiB,EAAE,KAAK,GAAG,MAAM,CAAC,EAClD,IAAI,EAAE,MAAM,GACX;QACD,MAAM,EAAE,cAAc,CAAC;QACvB,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;KACnC;IAkCD,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,EAAE,KAAA,EAAE,OAAO,KAAA;IAkBtE,aAAa,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAkBpF;;;;;;;OAOG;IACH,SAAS,CAAC,qBAAqB,CAC7B,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,UAAU,CAAA;KAAE,KAAK,IAAI;IAmBnE,WAAW,EAAE,aAAa,CAExB;IAEF,WAAW,EAAE,aAAa,CAExB;IAEF,SAAS,CAAC,aAAa,CACrB,MAAM,EAAE,OAAO,CAAC,iBAAiB,EAAE,KAAK,GAAG,MAAM,CAAC,EAClD,IAAI,EAAE,MAAM;IAoBd,IAAW,GAAG;;;;MAMb;CACF"}
@@ -1,12 +1,11 @@
1
1
  import type { ApiInternal } from './api-internal';
2
- import type { HandleResponseInterface, ProcessAuthenticationResponse } from './api-shared-types';
2
+ import type { HandleResponseInterface } from './api-shared-types';
3
3
  export type { HandleResponseInterface, ProcessAuthenticationResponse, } from './api-shared-types';
4
4
  export declare class ApiChargeInternal {
5
5
  protected api: ApiInternal;
6
6
  constructor(api: ApiInternal);
7
7
  walletCapture(payload: WalletCaptureBody): Promise<WalletCaptureResponse>;
8
8
  walletCallback(payload: WalletCallbackBody): Promise<WalletCallbackResponse>;
9
- standalone3dsProcess(payload: Standalone3dsProcessBody): Promise<ProcessAuthenticationResponse>;
10
9
  standalone3dsHandle(): Promise<HandleResponseInterface>;
11
10
  }
12
11
  interface WalletCaptureResponse {
@@ -47,7 +46,4 @@ interface WalletCallbackResponse {
47
46
  callback_rel: string;
48
47
  callback_url: string;
49
48
  }
50
- interface Standalone3dsProcessBody {
51
- charge_3ds_id: string;
52
- }
53
49
  //# sourceMappingURL=api-charge-internal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-charge-internal.d.ts","sourceRoot":"","sources":["../../src/api/api-charge-internal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EACV,uBAAuB,EACvB,6BAA6B,EAC9B,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EACV,uBAAuB,EACvB,6BAA6B,GAC9B,MAAM,oBAAoB,CAAC;AAO5B,qBAAa,iBAAiB;IAChB,SAAS,CAAC,GAAG,EAAE,WAAW;gBAAhB,GAAG,EAAE,WAAW;IAEtC,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IASzE,cAAc,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAS5E,oBAAoB,CAClB,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,6BAA6B,CAAC;IASzC,mBAAmB,IAAI,OAAO,CAAC,uBAAuB,CAAC;CAQxD;AAED,UAAU,qBAAqB;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,iBAAiB;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE;QACT,cAAc,CAAC,EAAE;YACf,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;YAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;YACtB,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,aAAa,CAAC,EAAE,MAAM,CAAC;YACvB,aAAa,CAAC,EAAE,MAAM,CAAC;YACvB,YAAY,CAAC,EAAE,MAAM,CAAC;YACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;YAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;YACvB,eAAe,CAAC,EAAE,MAAM,CAAC;YACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;YAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,cAAc,CAAC,EAAE,OAAO,CAAC;SAC1B,CAAC;KACH,CAAC;CACH;AAED,UAAU,kBAAkB;IAC1B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,sBAAsB;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,wBAAwB;IAChC,aAAa,EAAE,MAAM,CAAC;CACvB"}
1
+ {"version":3,"file":"api-charge-internal.d.ts","sourceRoot":"","sources":["../../src/api/api-charge-internal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAElE,YAAY,EACV,uBAAuB,EACvB,6BAA6B,GAC9B,MAAM,oBAAoB,CAAC;AAM5B,qBAAa,iBAAiB;IAChB,SAAS,CAAC,GAAG,EAAE,WAAW;gBAAhB,GAAG,EAAE,WAAW;IAEtC,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IASzE,cAAc,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAS5E,mBAAmB,IAAI,OAAO,CAAC,uBAAuB,CAAC;CAQxD;AAED,UAAU,qBAAqB;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,iBAAiB;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE;QACT,cAAc,CAAC,EAAE;YACf,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;YAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;YACtB,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,aAAa,CAAC,EAAE,MAAM,CAAC;YACvB,aAAa,CAAC,EAAE,MAAM,CAAC;YACvB,YAAY,CAAC,EAAE,MAAM,CAAC;YACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;YAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;YACvB,eAAe,CAAC,EAAE,MAAM,CAAC;YACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;YAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,cAAc,CAAC,EAAE,OAAO,CAAC;SAC1B,CAAC;KACH,CAAC;CACH;AAED,UAAU,kBAAkB;IAC1B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,sBAAsB;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB"}
@@ -14,6 +14,38 @@ export interface Canvas3dsAuthPayload {
14
14
  description?: string;
15
15
  };
16
16
  }
17
+ /**
18
+ * Payload of `chargeAuthChallengeLoaded` (Standalone 3DS, challenge flow only).
19
+ * Emitted exactly once per challenge, after `chargeAuthChallenge`.
20
+ */
21
+ export interface Canvas3dsChallengeLoadedPayload {
22
+ /** The Paydock 3DS charge identifier the challenge belongs to. */
23
+ charge_3ds_id: string;
24
+ /**
25
+ * `'load'` — the challenge iframe fired its first `load`: the ACS page has painted.
26
+ * `'timeout'` — no `load` arrived within the SDK's 2.5 s safety fallback; the event is emitted anyway so a
27
+ * loader is never held forever (the page may still be loading and will paint on its own). Useful for
28
+ * analytics (how often the fallback fires) — you do not need to handle the two differently.
29
+ */
30
+ reason: 'load' | 'timeout';
31
+ }
32
+ /**
33
+ * Payload of `chargeAuthChallengeCompleted` (Standalone 3DS, challenge and decoupled flows).
34
+ * Emitted at most once per authentication, after the shopper finished the challenge (or approved a decoupled
35
+ * authentication) and always before the terminal event.
36
+ */
37
+ export interface Canvas3dsChallengeCompletedPayload {
38
+ /** The Paydock 3DS charge identifier the authentication belongs to. */
39
+ charge_3ds_id: string;
40
+ /**
41
+ * How the SDK learned that the issuer delivered the result:
42
+ * `'poll'` — the 3DS Server's result monitor reported it (the usual case: it flips as soon as the issuer's
43
+ * result reaches the 3DS Server, before the challenge iframe has even left the bank's page);
44
+ * `'callback'` — the callback message carrying the outcome arrived first (the terminal event follows
45
+ * immediately). Informational only — handle both the same way.
46
+ */
47
+ source: 'poll' | 'callback';
48
+ }
17
49
  /**
18
50
  * Payload emitted by the Standalone 3DS flow for error events.
19
51
  * `error` is intentionally `unknown` — upstream emitters do not guarantee a shape.
@@ -66,6 +98,24 @@ export interface Canvas3dsEventMap {
66
98
  error: Canvas3dsErrorPayload | Canvas3dsErrorEventPayload;
67
99
  /** Challenge required — issuer demands user interaction (OTP, biometric, etc.). Standalone-only. */
68
100
  chargeAuthChallenge: Canvas3dsAuthPayload;
101
+ /**
102
+ * The challenge iframe has painted (first `load`), or the 2.5 s fallback elapsed — see `reason`. Standalone-only,
103
+ * challenge flow only (never emitted for decoupled challenges). Fires once, after `chargeAuthChallenge`.
104
+ *
105
+ * Recommended loader pattern: show a loader before the charge POST, keep it through `chargeAuthChallenge`,
106
+ * reveal the challenge on this event, cover it with "Completing verification" on `chargeAuthChallengeCompleted`,
107
+ * and finish on `chargeAuthSuccess` / `chargeAuthReject` / `error`.
108
+ */
109
+ chargeAuthChallengeLoaded: Canvas3dsChallengeLoadedPayload;
110
+ /**
111
+ * The shopper finished the challenge (or approved a decoupled authentication): the issuer delivered the final
112
+ * result to the 3DS Server and the SDK is obtaining the outcome. Cover the challenge iframe with your own
113
+ * "Completing verification" state — whatever the bank or the 3DS Server render from here on is plumbing, not
114
+ * UX. Standalone-only. Fires at most once per authentication, always before `chargeAuthSuccess` /
115
+ * `chargeAuthReject` / `error`, and never after them. A wrong OTP or a further interactive step does NOT fire
116
+ * it (no result has been delivered yet), so no grace timer or reveal fallback is needed on your side.
117
+ */
118
+ chargeAuthChallengeCompleted: Canvas3dsChallengeCompletedPayload;
69
119
  /** Decoupled authentication — issuer will authenticate out-of-band and notify later. Standalone-only. */
70
120
  chargeAuthDecoupled: Canvas3dsAuthPayload;
71
121
  /** Iframe-path authentication event. Extends `IEventData` with optional 3DS correlation fields (`charge_3ds_id`, `status`). */
@@ -1 +1 @@
1
- {"version":3,"file":"canvas-3ds-event-map.d.ts","sourceRoot":"","sources":["../../src/canvas-3ds/canvas-3ds-event-map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAE7D;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,mIAAmI;IACnI,aAAa,EAAE,MAAM,CAAC;IACtB,sHAAsH;IACtH,MAAM,EAAE,MAAM,CAAC;IACf,yGAAyG;IACzG,MAAM,CAAC,EAAE;QACP,yEAAyE;QACzE,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,2FAA2F;IAC3F,aAAa,EAAE,MAAM,CAAC;IACtB,8FAA8F;IAC9F,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,+BAAgC,SAAQ,UAAU;IACjE,qGAAqG;IACrG,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uGAAuG;IACvG,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,MAAM,CAAC,EAAE;QACP,yEAAyE;QACzE,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,0BAA2B,SAAQ,UAAU;IAC5D,mEAAmE;IACnE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,4LAA4L;IAC5L,iBAAiB,EAAE,oBAAoB,GAAG,+BAA+B,CAAC;IAC1E,8EAA8E;IAC9E,gBAAgB,EAAE,oBAAoB,GAAG,+BAA+B,CAAC;IACzE,yIAAyI;IACzI,KAAK,EAAE,qBAAqB,GAAG,0BAA0B,CAAC;IAC1D,oGAAoG;IACpG,mBAAmB,EAAE,oBAAoB,CAAC;IAC1C,yGAAyG;IACzG,mBAAmB,EAAE,oBAAoB,CAAC;IAC1C,+HAA+H;IAC/H,UAAU,EAAE,+BAA+B,CAAC;IAC5C,6EAA6E;IAC7E,mBAAmB,EAAE,UAAU,CAAC;IAChC,2EAA2E;IAC3E,4BAA4B,EAAE,UAAU,CAAC;IACzC,iEAAiE;IACjE,2BAA2B,EAAE,UAAU,CAAC;CACzC;AAED,gDAAgD;AAChD,MAAM,MAAM,kBAAkB,GAAG,MAAM,iBAAiB,CAAC;AAEzD;;;GAGG;AACH,eAAO,MAAM,oBAAoB;IAC/B,0FAA0F;;IAE1F,yEAAyE;;IAEzE,2HAA2H;;CAEnH,CAAC;AAEX,MAAM,MAAM,oBAAoB,GAC9B,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,OAAO,oBAAoB,CAAC,CAAC"}
1
+ {"version":3,"file":"canvas-3ds-event-map.d.ts","sourceRoot":"","sources":["../../src/canvas-3ds/canvas-3ds-event-map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAE7D;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,mIAAmI;IACnI,aAAa,EAAE,MAAM,CAAC;IACtB,sHAAsH;IACtH,MAAM,EAAE,MAAM,CAAC;IACf,yGAAyG;IACzG,MAAM,CAAC,EAAE;QACP,yEAAyE;QACzE,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,+BAA+B;IAC9C,kEAAkE;IAClE,aAAa,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAED;;;;GAIG;AACH,MAAM,WAAW,kCAAkC;IACjD,uEAAuE;IACvE,aAAa,EAAE,MAAM,CAAC;IACtB;;;;;;OAMG;IACH,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,2FAA2F;IAC3F,aAAa,EAAE,MAAM,CAAC;IACtB,8FAA8F;IAC9F,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,+BAAgC,SAAQ,UAAU;IACjE,qGAAqG;IACrG,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uGAAuG;IACvG,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,MAAM,CAAC,EAAE;QACP,yEAAyE;QACzE,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,0BAA2B,SAAQ,UAAU;IAC5D,mEAAmE;IACnE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,4LAA4L;IAC5L,iBAAiB,EAAE,oBAAoB,GAAG,+BAA+B,CAAC;IAC1E,8EAA8E;IAC9E,gBAAgB,EAAE,oBAAoB,GAAG,+BAA+B,CAAC;IACzE,yIAAyI;IACzI,KAAK,EAAE,qBAAqB,GAAG,0BAA0B,CAAC;IAC1D,oGAAoG;IACpG,mBAAmB,EAAE,oBAAoB,CAAC;IAC1C;;;;;;;OAOG;IACH,yBAAyB,EAAE,+BAA+B,CAAC;IAC3D;;;;;;;OAOG;IACH,4BAA4B,EAAE,kCAAkC,CAAC;IACjE,yGAAyG;IACzG,mBAAmB,EAAE,oBAAoB,CAAC;IAC1C,+HAA+H;IAC/H,UAAU,EAAE,+BAA+B,CAAC;IAC5C,6EAA6E;IAC7E,mBAAmB,EAAE,UAAU,CAAC;IAChC,2EAA2E;IAC3E,4BAA4B,EAAE,UAAU,CAAC;IACzC,iEAAiE;IACjE,2BAA2B,EAAE,UAAU,CAAC;CACzC;AAED,gDAAgD;AAChD,MAAM,MAAM,kBAAkB,GAAG,MAAM,iBAAiB,CAAC;AAEzD;;;GAGG;AACH,eAAO,MAAM,oBAAoB;IAC/B,0FAA0F;;IAE1F,yEAAyE;;IAEzE,2HAA2H;;CAEnH,CAAC;AAEX,MAAM,MAAM,oBAAoB,GAC9B,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,OAAO,oBAAoB,CAAC,CAAC"}