@alipay/ams-checkout 2.0.27 → 2.0.29

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.
@@ -290,8 +290,10 @@ export declare interface AntomOpenModalConfig extends OpenModalParams {
290
290
  export declare class AntomSDK extends BaseElementsFactory {
291
291
  static version: string;
292
292
  private stopModalMessageMonitor;
293
+ private readonly apiTracker;
293
294
  constructor(config?: AntomSDKConfig);
294
295
  protected canUseElements(): Array<ElementListItemType>;
296
+ init(): Promise<this>;
295
297
  /**
296
298
  * @description 更新配置
297
299
  */
@@ -313,19 +315,36 @@ export declare class AntomSDK extends BaseElementsFactory {
313
315
  elements(): Elements;
314
316
  createElement(elementType: 'payment', options?: PaymentAppConfig): PaymentElement;
315
317
  createElement(elementType: 'vaulting', options?: VaultingAppConfig): VaultingElement;
316
- createElement(elementType: 'CVV', options?: CVVAppConfig): CVVElement;
318
+ createElement(elementType: 'CVV', options: CVVAppConfig): CVVElement;
317
319
  createElement(elementType: 'express', options?: ExpressAppConfig): ExpressElement;
320
+ createElement(elementType: 'expressVaulting', options?: ExpressVaultingAppConfig): ExpressVaultingElement;
318
321
  getElement(elementType: 'payment', options?: PaymentAppConfig): PaymentElement;
319
322
  getElement(elementType: 'vaulting', options?: VaultingAppConfig): VaultingElement;
320
323
  getElement(elementType: 'CVV', options?: CVVAppConfig): CVVElement;
321
324
  getElement(elementType: 'express', options?: ExpressAppConfig): ExpressElement;
325
+ getElement(elementType: 'expressVaulting', options?: ExpressVaultingAppConfig): ExpressVaultingElement;
322
326
  /**
323
327
  * 从 elements 容器或直接传入的 MainElement 中提取指定类型的主元素
324
328
  * @throws {AntomSDKError} 当无法找到有效的主元素时抛出错误
325
329
  */
326
330
  private extractMainElement;
327
331
  confirmCardSetup(options: ConfirmCardSetupOptions): Promise<SubmitResult>;
332
+ private runConfirmCardSetup;
328
333
  confirmPayment(options: ConfirmPaymentOptions): Promise<SubmitResult>;
334
+ private runConfirmPayment;
335
+ /**
336
+ * 触发 Express Vaulting element 的 PayPal 绑卡提交流程。
337
+ *
338
+ * iframe 收到 OPENSDK@CONFIRM_VAULTING 后执行 submitPay + 单次 inquiry 兜底,
339
+ * 完成后通过 OPENSDK@CONFIRM_VAULTING_RESULT 回包,Promise resolve。
340
+ *
341
+ * @param options.elements 已挂载的 ExpressVaultingElement 或包含它的 Elements 实例
342
+ * @param options.redirect 跳转策略,默认 'always',透传给 iframe
343
+ */
344
+ confirmVaulting(options: {
345
+ elements: BaseMainElement | BaseElements;
346
+ redirect?: 'always' | 'if_required';
347
+ }): Promise<ExpressVaultingResult>;
329
348
  }
330
349
 
331
350
  /**
@@ -385,9 +404,29 @@ export declare const AntomSDKErrorCodes: {
385
404
  */
386
405
  readonly AMOUNT_VALUE_EMPTY: "AMOUNT_VALUE_EMPTY";
387
406
  /**
388
- * @description 金额格式非法(仅允许整数和小数)
407
+ * @description 金额格式非法(仅允许 ASCII 数字字符串)
389
408
  */
390
409
  readonly AMOUNT_VALUE_INVALID: "AMOUNT_VALUE_INVALID";
410
+ /**
411
+ * @description Amount currency does not match the payment session currency
412
+ */
413
+ readonly AMOUNT_CURRENCY_MISMATCH: "AMOUNT_CURRENCY_MISMATCH";
414
+ /**
415
+ * @description Amount currency is not supported
416
+ */
417
+ readonly AMOUNT_CURRENCY_UNSUPPORTED: "AMOUNT_CURRENCY_UNSUPPORTED";
418
+ /**
419
+ * @description Amount currency precision is not supported
420
+ */
421
+ readonly AMOUNT_PRECISION_UNSUPPORTED: "AMOUNT_PRECISION_UNSUPPORTED";
422
+ /**
423
+ * @description Amount conversion timed out
424
+ */
425
+ readonly AMOUNT_RESOLVE_TIMEOUT: "AMOUNT_RESOLVE_TIMEOUT";
426
+ /**
427
+ * @description Amount conversion failed
428
+ */
429
+ readonly AMOUNT_RESOLVE_FAILED: "AMOUNT_RESOLVE_FAILED";
391
430
  readonly GENERATE_ELEMENT_KEY_FAILED: "GENERATE_ELEMENT_KEY_FAILED";
392
431
  readonly ELEMENT_INIT_FAILED: "ELEMENT_INIT_FAILED";
393
432
  readonly MOUNT_TIMEOUT: "MOUNT_TIMEOUT";
@@ -400,8 +439,8 @@ export declare const AntomSDKErrorCodes: {
400
439
  readonly ELEMENT_DEFINE_ERROR: "ELEMENT_DEFINE_ERROR";
401
440
  readonly ELEMENT_ALREADY_REGISTERED: "ELEMENT_ALREADY_REGISTERED";
402
441
  readonly CANNOT_CREATE_SAME_ELEMENT_TWICE: "CANNOT_CREATE_SAME_ELEMENT_TWICE";
403
- readonly GROUPS_ONLY_ONE_MAIN_ELEMENT: "GROUPS_ONLY_ONE_MAIN_ELEMENT";
404
- readonly GROUPS_NOT_FOUND_MAIN_ELEMENT: "GROUPS_NOT_FOUND_MAIN_ELEMENT";
442
+ readonly GROUPS_ONLY_ONE_MAIN_ELEMENT: "GROUPS_ONLY_ONE_MAIN_ELEMENT"; /** @deprecated 传入 elements 时无需重复传递,且不会覆盖 Element 的会话。 */
443
+ readonly GROUPS_NOT_FOUND_MAIN_ELEMENT: "GROUPS_NOT_FOUND_MAIN_ELEMENT"; /** 无 UI 模式必填,仅用于创建内部 CVVElement。 */
405
444
  readonly NOT_SUPPORT_ELEMENT: "NOT_SUPPORT_ELEMENT";
406
445
  readonly NOT_SUPPORT_SUBMIT: "NOT_SUPPORT_SUBMIT";
407
446
  readonly UPDATE_CONFIG_TIMEOUT: "UPDATE_CONFIG_TIMEOUT";
@@ -2524,18 +2563,22 @@ export declare interface ConfirmCardSetupOptions {
2524
2563
  redirect?: 'always' | 'if_required';
2525
2564
  }
2526
2565
 
2527
- export declare interface ConfirmPaymentOptions extends Omit<ConfirmCardSetupOptions, 'elements'>, PaymentSubmitParams {
2528
- sessionData: string;
2529
- /**
2530
- * @description 传入已挂载的 CVVElement / PaymentElement / Elements 实例,不传则使用无 UI 自动提交模式
2531
- */
2532
- elements?: BaseMainElement | BaseElements;
2566
+ export declare type ConfirmPaymentOptions = PaymentSubmitParams & {
2533
2567
  appearance?: CVVAppearance;
2534
2568
  /**
2535
2569
  * @description 集成用户自定义信息(如 cardHolderName)
2536
2570
  */
2537
2571
  params?: Record<string, unknown>;
2538
- }
2572
+ } & ({
2573
+ /** 已挂载的 Element;确认时使用其创建时绑定的会话。 */
2574
+ elements: BaseMainElement | BaseElements;
2575
+ /** @deprecated 传入 elements 时无需重复传递,且不会覆盖 Element 的会话。 */
2576
+ sessionData?: string;
2577
+ } | {
2578
+ elements?: undefined;
2579
+ /** 无 UI 模式必填,仅用于创建内部 CVVElement。 */
2580
+ sessionData: string;
2581
+ });
2539
2582
 
2540
2583
  /**
2541
2584
  * @description Connect流程参数
@@ -2676,9 +2719,9 @@ export declare interface CVVAppConfig extends BaseElementAppConfig {
2676
2719
  /** CVV appearance configuration including optional alias-only Rules. */
2677
2720
  appearance?: CVVAppearance;
2678
2721
  /**
2679
- * @description sessionData
2722
+ * @description 创建时必填的支付会话;不可通过 updateConfig 或 submit 替换
2680
2723
  */
2681
- sessionData?: string;
2724
+ sessionData: string;
2682
2725
  /**
2683
2726
  * @internal sessionConfig 渲染数据,内部使用,无需用户传递
2684
2727
  */
@@ -2722,21 +2765,30 @@ export declare type CVVAppearanceProps = {
2722
2765
  */
2723
2766
  export declare class CVVElement extends BaseMainElement<CVVElementConfig, CVVElementEvents> {
2724
2767
  static elementType: string;
2768
+ private readonly sessionData;
2769
+ private readonly elementTracker;
2770
+ private _mountInProgress;
2771
+ private _destroyInProgress;
2725
2772
  constructor(name: string, config: CVVElementConfig);
2726
2773
  /**
2727
2774
  * @internal
2728
2775
  */
2729
2776
  setup(): Promise<Partial<CVVAppConfig> | undefined>;
2730
2777
  /**
2731
- * Updates CVV configuration while preserving the public Rules clear semantics.
2732
- * @param newConfig Partial CVV configuration patch.
2778
+ * @internal Not supported by the public CVV integration API.
2779
+ * Updates appearance only, preserving the Rules clear semantics.
2780
+ * @param newConfig Appearance configuration patch.
2733
2781
  * @returns The WebApp update acknowledgement.
2734
2782
  */
2735
- updateConfig(newConfig: Partial<CVVAppConfig>): Promise<CVVElementEvents['OPENSDK@UPDATE_CONFIG_REPLY']>;
2783
+ updateConfig(newConfig: Pick<CVVAppConfig, 'appearance'>): Promise<CVVElementEvents['OPENSDK@UPDATE_CONFIG_REPLY']>;
2736
2784
  /**
2737
2785
  * @internal
2738
2786
  */
2739
2787
  submit(data?: CVVSubmitParams): Promise<SubmitResult>;
2788
+ mount(container: HTMLElement): Promise<void>;
2789
+ on<T extends keyof CVVElementEvents>(event: T, handler: (payload: CVVElementEvents[T]) => void): void;
2790
+ unmount(): void;
2791
+ destroy(): void;
2740
2792
  protected focus(): void;
2741
2793
  protected blur(): void;
2742
2794
  protected clear(): void;
@@ -2747,20 +2799,10 @@ export declare class CVVElement extends BaseMainElement<CVVElementConfig, CVVEle
2747
2799
  * @description CVV element config type
2748
2800
  */
2749
2801
  export declare interface CVVElementConfig extends BaseElementConfig<CVVAppConfig> {
2802
+ appConfig: CVVAppConfig;
2750
2803
  }
2751
2804
 
2752
- export declare interface CVVElementEvents extends AntomBridgeEventMap<CVVAppConfig, CVVSubmitParams> {
2753
- /**
2754
- * @description Emitted event about form
2755
- */
2756
- form: {
2757
- errors?: Array<{
2758
- field: string | number;
2759
- message: string;
2760
- currentValue: any;
2761
- }>;
2762
- message: string;
2763
- };
2805
+ export declare interface CVVElementEvents extends AntomBridgeEventMap<CVVAppConfig, CVVSubmitParams & Pick<CVVAppConfig, 'sessionData'>> {
2764
2806
  /**
2765
2807
  * @description Emitted when the element is destroy
2766
2808
  */
@@ -2804,10 +2846,6 @@ export declare type CVVSubmitErrorCodes = 'NOT_FIND_MAINELEMENT' | 'SESSION_DATA
2804
2846
  * @description CVV 支付提交参数
2805
2847
  */
2806
2848
  export declare interface CVVSubmitParams {
2807
- /**
2808
- * 支付会话数据
2809
- */
2810
- sessionData?: string;
2811
2849
  /**
2812
2850
  * 重定向策略
2813
2851
  */
@@ -3491,8 +3529,12 @@ declare interface ElementPluginChangeStates {
3491
3529
  declare type ElementPluginNameEnum = 'SET_STATE' | 'PASSIVE_SET_STATE';
3492
3530
 
3493
3531
  declare class Elements extends BaseElements {
3532
+ private readonly apiTracker;
3494
3533
  protected canUseElements(): Array<ElementListItemType>;
3495
3534
  constructor(config: BaseElementsConfig);
3535
+ init(): Promise<this>;
3536
+ updateConfig(config: Partial<BaseElementsConfig>): void;
3537
+ destroy(): void;
3496
3538
  createElement(elementType: 'vaulting', options?: VaultingAppConfig): VaultingElement;
3497
3539
  createElement(elementType: 'express', options?: ExpressAppConfig): ExpressElement;
3498
3540
  getElement(elementType: 'vaulting', options?: VaultingAppConfig): VaultingElement;
@@ -3628,12 +3670,13 @@ export declare interface ExpressAppConfig extends BaseElementAppConfig {
3628
3670
  /**
3629
3671
  * Amount & Currency
3630
3672
  *
3631
- * Only effective via `updateConfig({ amount })` at runtime.
3632
- * Passing amount at creation time is ignored; the initial amount
3633
- * comes from the server-side sdkQuery result (renderData.paymentAmount).
3673
+ * For Apple Pay and Google Pay, `value` is a positive ASCII digit string in
3674
+ * the payment session currency's minor unit; `currency` may be omitted.
3675
+ * For example, USD 10.99 is passed as `{ value: '1099' }`.
3676
+ * PayPal keeps its existing major-unit amount semantics and requires `currency`.
3634
3677
  */
3635
3678
  amount?: {
3636
- currency: string;
3679
+ currency?: string;
3637
3680
  value: string;
3638
3681
  };
3639
3682
  /** PayPal 配置 */
@@ -3709,6 +3752,17 @@ export declare interface ExpressClickEvent {
3709
3752
  expressPaymentType: string;
3710
3753
  }
3711
3754
 
3755
+ declare type ExpressCompletePaymentResult = {
3756
+ success: boolean;
3757
+ result?: any;
3758
+ error?: {
3759
+ code: string;
3760
+ message: string;
3761
+ };
3762
+ userCanceled3D?: boolean;
3763
+ status?: 'SUCCESS' | 'CANCELLED' | 'FAIL' | 'PROCESSING';
3764
+ };
3765
+
3712
3766
  /** confirm 事件负载(统一终态,替代 approve) */
3713
3767
  export declare interface ExpressConfirmData {
3714
3768
  expressPaymentType: string;
@@ -3755,6 +3809,10 @@ export declare interface ExpressConfirmData {
3755
3809
  */
3756
3810
  export declare class ExpressElement extends BaseMainElement<ExpressElementConfig, ExpressElementEvents> {
3757
3811
  static elementType: string;
3812
+ private readonly elementTracker;
3813
+ private _mountInProgress;
3814
+ private _destroyInProgress;
3815
+ private _registeringInternalListeners;
3758
3816
  /**
3759
3817
  * Store all function-type callbacks locally, not involved in postMessage serialization
3760
3818
  */
@@ -3773,7 +3831,23 @@ export declare class ExpressElement extends BaseMainElement<ExpressElementConfig
3773
3831
  private _localHandlers;
3774
3832
  /** 支付流程进行中标志(click → confirm/error/cancel 之间) */
3775
3833
  private _paymentInProgress;
3834
+ /**
3835
+ * confirm 窗口超时标志:iframe 在 20s onTimeout 发 error(MERCHANT_CONFIRM_TIMEOUT) 时置位,
3836
+ * completePayment 入口据此立即返失败(不发 COMPLETE_PAYMENT,不进 5min 兜底)。
3837
+ * 每新一轮 confirm 事件到达时复位(见 on() 重写)。
3838
+ */
3839
+ private _confirmWindowTimedOut;
3840
+ /**
3841
+ * 是否已收到 iframe 业务层 ready 事件(app.tsx sendReady)。
3842
+ * 注意:与 host `status='ready'`(由 HANDSHAKE_ACK 触发,bridge.js:450 同步回发,与 amount 解析无关)不同。
3843
+ * 首屏 amount setupError 时 iframe 不发业务 ready → _readyReceived 保持 false,
3844
+ * 据此判别"首屏失败"以阻断后续 updateConfig。
3845
+ */
3846
+ private _readyReceived;
3847
+ /** 首屏 setupError 致命标志:置位后 updateConfig 被 CHECKOUT_NOT_READY 阻断,只能 destroy 重开。 */
3848
+ private _setupFailed;
3776
3849
  private _paypalOverlay;
3850
+ private _updateQueue;
3777
3851
  constructor(name: string, config: ExpressElementConfig);
3778
3852
  /**
3779
3853
  * 重写 on:对 confirm 事件拦截,在商户回调执行前注入 paymentFailed()
@@ -3785,24 +3859,29 @@ export declare class ExpressElement extends BaseMainElement<ExpressElementConfig
3785
3859
  */
3786
3860
  private _emit;
3787
3861
  updateConfig(newConfig: ExpressAppConfig): Promise<ExpressElementEvents['OPENSDK@UPDATE_CONFIG_REPLY']>;
3862
+ private runUpdateConfig;
3863
+ private updateConfigTransaction;
3864
+ private updateAmountConfigWithSanitizedDebug;
3865
+ private getAmountValidationReason;
3866
+ /** iframe 业务 ready 事件到达:置 _readyReceived,后续运行时 error 不再视为首屏失败。
3867
+ * ready 是"本次首屏成功"的确实信号(首屏 setupError 时 iframe 不发 ready),
3868
+ * 故同时清掉 _setupFailed——unmount+remount 同实例二次首屏成功后可恢复 updateConfig。
3869
+ */
3870
+ private _handleReady;
3871
+ /** iframe error 事件:若 business ready 未到达,视为首屏 setupError → 置 _setupFailed 阻断后续 updateConfig。 */
3872
+ private _handleError;
3788
3873
  /**
3789
3874
  * 商户在 confirm 回调内调用,触发实际支付提交。
3790
3875
  * iframe 收到 OPENSDK@COMPLETE_PAYMENT 后执行 submitPay / polling 等,
3791
3876
  * 完成后通过 OPENSDK@COMPLETE_PAYMENT_RESULT 回包,Promise resolve。
3792
3877
  */
3793
- completePayment(redirect?: 'always' | 'if_required'): Promise<{
3794
- success: boolean;
3795
- result?: any;
3796
- error?: {
3797
- code: string;
3798
- message: string;
3799
- };
3800
- /** 用户是否手动关闭 3D 弹窗(透传 webapp COMPLETE_PAYMENT_RESULT.userCanceled3D) */
3801
- userCanceled3D?: boolean;
3802
- status?: 'SUCCESS' | 'CANCELLED' | 'FAIL' | 'PROCESSING';
3803
- }>;
3878
+ completePayment(redirect?: 'always' | 'if_required'): Promise<ExpressCompletePaymentResult>;
3879
+ private runCompletePayment;
3804
3880
  setup(): Promise<Partial<ExpressAppConfig> | undefined>;
3805
3881
  private registerInternalListeners;
3882
+ mount(container: HTMLElement): Promise<void>;
3883
+ unmount(): void;
3884
+ destroy(): void;
3806
3885
  protected focus(): void;
3807
3886
  protected blur(): void;
3808
3887
  protected clear(): void;
@@ -3874,6 +3953,11 @@ export declare interface ExpressElementEvents extends AntomBridgeWithNativeEvent
3874
3953
  'OPENSDK@GET_APPLE_PAY_TOKEN': {
3875
3954
  requestId: string;
3876
3955
  expressPaymentType: string;
3956
+ /** iframe 已转好的 major unit 金额(来自 resolvedAmount);host 委托 Apple Pay 消费,不再做 minor→major 转换。 */
3957
+ walletAmount?: {
3958
+ value: string;
3959
+ currency: string;
3960
+ };
3877
3961
  };
3878
3962
  /** host 完成 Apple Pay token 获取后回包给 iframe,submit/3DS/polling 均由 webapp 完成 */
3879
3963
  'OPENSDK@GET_APPLE_PAY_TOKEN_REPLY': {
@@ -3906,6 +3990,201 @@ declare type ExpressSetupError = ErrorPayload & {
3906
3990
  mulityLanguageMapping?: boolean;
3907
3991
  };
3908
3992
 
3993
+ /**
3994
+ * @public
3995
+ * @description Express Vaulting element app config type
3996
+ */
3997
+ export declare interface ExpressVaultingAppConfig extends BaseElementAppConfig {
3998
+ /**
3999
+ * @description payment sessionData,无法通过 updateConfig 更新
4000
+ */
4001
+ sessionData?: string;
4002
+ /**
4003
+ * @description 开通的支付方式列表,本期固定为 ['PAYPAL_DIRECTDEBIT']
4004
+ */
4005
+ paymentMethods?: string[];
4006
+ /** PayPal 按钮配置 */
4007
+ paypal?: ExpressVaultingPayPalConfig;
4008
+ /** PayPal 按钮文案类型 */
4009
+ buttonType?: {
4010
+ paypal?: 'paypal' | 'checkout' | 'buynow' | 'pay';
4011
+ };
4012
+ /** 按钮统一高度(px) */
4013
+ buttonHeight?: number;
4014
+ /** PayPal 按钮主题色 */
4015
+ buttonTheme?: {
4016
+ paypal?: 'gold' | 'blue' | 'silver' | 'white' | 'black';
4017
+ };
4018
+ }
4019
+
4020
+ /**
4021
+ * @public
4022
+ * @description cancel 事件负载
4023
+ */
4024
+ export declare interface ExpressVaultingCancelEvent {
4025
+ paymentMethodType: ExpressVaultingMethod;
4026
+ data?: unknown;
4027
+ }
4028
+
4029
+ /**
4030
+ * @public
4031
+ * @description click 事件负载
4032
+ */
4033
+ export declare interface ExpressVaultingClickEvent {
4034
+ paymentMethodType: ExpressVaultingMethod;
4035
+ }
4036
+
4037
+ /**
4038
+ * @public
4039
+ * @description confirm 事件负载(PayPal onApprove 成功后触发,商户可在回调中调 confirmVaulting)
4040
+ */
4041
+ export declare interface ExpressVaultingConfirmEvent {
4042
+ paymentMethodType: ExpressVaultingMethod;
4043
+ payerInfo?: ExpressVaultingPayerInfo;
4044
+ }
4045
+
4046
+ /**
4047
+ * @public
4048
+ * @description Express Vaulting element - PayPal 绑卡 Element
4049
+ *
4050
+ * Host 侧只保留 Element 生命周期与 bridge 连接;PayPal 按钮渲染、Braintree SDK
4051
+ * 加载、submit/inquiry 都由 express_vaulting webapp 承接。
4052
+ *
4053
+ * setup 阶段调 sdkActionQuery 拿 paypalClientToken,握手时下发给 iframe(系分
4054
+ * 4.1 节 BR-007:client token 必须来自握手,iframe 不自调 sdkActionQuery)。
4055
+ */
4056
+ export declare class ExpressVaultingElement extends BaseMainElement<ExpressVaultingElementConfig, ExpressVaultingElementEvents> {
4057
+ static elementType: string;
4058
+ /**
4059
+ * Host-side fullscreen overlay shown while the PayPal popup is open.
4060
+ *
4061
+ * PayPal Braintree vault flow renders its own popup + backdrop inside the
4062
+ * iframe body, so without a host overlay the backdrop only masks the tiny
4063
+ * button area. Mirrors ExpressElement: show on `click`, hide on
4064
+ * `confirm` / `cancel` / `error`.
4065
+ */
4066
+ private _paypalOverlay;
4067
+ constructor(name: string, config: ExpressVaultingElementConfig);
4068
+ /**
4069
+ * @internal
4070
+ * 握手前调 sdkActionQuery 拿 paypalClientToken,连同按钮样式一起打包下发给 iframe。
4071
+ * 失败时以 setupError 形式返回,iframe 侧读取后透传 error 事件。
4072
+ */
4073
+ setup(): Promise<Partial<ExpressVaultingAppConfig> | undefined>;
4074
+ /**
4075
+ * @internal
4076
+ * Host-side bridge listeners. Only the PayPal overlay lifecycle here —
4077
+ * show when the PayPal popup opens (click), hide when it closes
4078
+ * (confirm / cancel / error). Mirrors ExpressElement's overlay handling.
4079
+ */
4080
+ private registerInternalListeners;
4081
+ protected focus(): void;
4082
+ protected blur(): void;
4083
+ protected clear(): void;
4084
+ /**
4085
+ * @internal
4086
+ * 由 SDK 容器(antom.ts.confirmVaulting)调用,向 iframe 发送 CONFIRM_VAULTING
4087
+ * 指令并等待 CONFIRM_VAULTING_RESULT 回包。iframe 侧执行 submitPay + 单次 inquiry
4088
+ * 兜底后回包终态结果。
4089
+ */
4090
+ _confirmVaulting(redirect?: 'always' | 'if_required'): Promise<ExpressVaultingResult>;
4091
+ }
4092
+
4093
+ /**
4094
+ * @public
4095
+ * @description Express Vaulting element config type
4096
+ */
4097
+ export declare interface ExpressVaultingElementConfig extends BaseElementConfig<ExpressVaultingAppConfig> {
4098
+ }
4099
+
4100
+ /**
4101
+ * @public
4102
+ * @description Express Vaulting element 事件类型
4103
+ */
4104
+ export declare interface ExpressVaultingElementEvents extends AntomBridgeWithNativeEventMap<ExpressVaultingAppConfig> {
4105
+ ready: ExpressVaultingReadyEvent;
4106
+ click: ExpressVaultingClickEvent;
4107
+ confirm: ExpressVaultingConfirmEvent;
4108
+ cancel: ExpressVaultingCancelEvent;
4109
+ error: ExpressVaultingErrorEvent;
4110
+ 'OPENSDK@CONFIRM_VAULTING': {
4111
+ requestId: string;
4112
+ redirect?: 'always' | 'if_required';
4113
+ };
4114
+ 'OPENSDK@CONFIRM_VAULTING_RESULT': {
4115
+ requestId: string;
4116
+ result: ExpressVaultingResult;
4117
+ };
4118
+ }
4119
+
4120
+ /**
4121
+ * @public
4122
+ * @description error 事件负载
4123
+ */
4124
+ export declare interface ExpressVaultingErrorEvent extends ErrorPayload<string> {
4125
+ paymentMethodType: ExpressVaultingMethod;
4126
+ }
4127
+
4128
+ /**
4129
+ * Supported express vaulting payment methods. All bridge event payloads carry
4130
+ * `paymentMethodType` — use this enum instead of硬编码 strings so adding a
4131
+ * new wallet only needs one entry here. Must match the iframe-side enum in
4132
+ * elements2/express_vaulting/interface.ts.
4133
+ */
4134
+ declare enum ExpressVaultingMethod {
4135
+ PAYPAL_DIRECTDEBIT = "PAYPAL_DIRECTDEBIT"
4136
+ }
4137
+
4138
+ /**
4139
+ * @public
4140
+ * @description Braintree tokenizePayment 返回的 payer 信息,随 confirm 事件透传给商户
4141
+ */
4142
+ export declare interface ExpressVaultingPayerInfo {
4143
+ payerId?: string;
4144
+ email?: string;
4145
+ firstName?: string;
4146
+ lastName?: string;
4147
+ countryCode?: string;
4148
+ phone?: string;
4149
+ }
4150
+
4151
+ /**
4152
+ * MERCHANT_CONFIRM_TIMEOUT is owned by the iframe side (mirrors express_element:
4153
+ * iframe starts a 20s timer on the `confirm` event and sends
4154
+ * `error(MERCHANT_CONFIRM_TIMEOUT)` if the merchant never calls confirmVaulting).
4155
+ * See elements2/express_vaulting/app.tsx + tools/error.ts.
4156
+ */
4157
+ /**
4158
+ * @public
4159
+ * @description PayPal 按钮配置
4160
+ */
4161
+ export declare interface ExpressVaultingPayPalConfig {
4162
+ /** 按钮形状 */
4163
+ buttonShape?: 'pill' | 'rect' | 'sharp';
4164
+ }
4165
+
4166
+ /**
4167
+ * @public
4168
+ * @description ready 事件负载
4169
+ */
4170
+ export declare interface ExpressVaultingReadyEvent {
4171
+ availablePaymentMethods: Partial<Record<ExpressVaultingMethod, boolean>>;
4172
+ }
4173
+
4174
+ /**
4175
+ * @public
4176
+ * @description confirmVaulting 返回结果
4177
+ */
4178
+ export declare interface ExpressVaultingResult {
4179
+ status: 'SUCCESS' | 'PROCESSING' | 'FAIL' | 'CANCELLED';
4180
+ paymentMethodId?: string;
4181
+ payerId?: string;
4182
+ error?: {
4183
+ code: string;
4184
+ message: string;
4185
+ };
4186
+ }
4187
+
3909
4188
  declare interface ExpSupportBank {
3910
4189
  /**
3911
4190
  * @description 银行名称
@@ -3984,6 +4263,57 @@ declare interface FrontSupportIppBank {
3984
4263
  logo?: Logo;
3985
4264
  }
3986
4265
 
4266
+ /** host 回传 webapp 的 OPENSDK@GET_APPLE_PAY_TOKEN_REPLY 形态(result 对齐老链路 {token,billingContact,shippingContact})。 */
4267
+ declare interface GetApplePayTokenReply {
4268
+ success: boolean;
4269
+ result?: {
4270
+ token?: unknown;
4271
+ billingContact?: unknown;
4272
+ shippingContact?: unknown;
4273
+ } | {
4274
+ errorCode: string;
4275
+ };
4276
+ }
4277
+
4278
+ /** webapp 传来的 OPENSDK@GET_APPLE_PAY_TOKEN payload 形态。 */
4279
+ declare interface GetApplePayTokenRequest {
4280
+ paymentMethod?: {
4281
+ paymentMethodDetail?: {
4282
+ applePayProps?: {
4283
+ paymentRequest?: unknown;
4284
+ };
4285
+ };
4286
+ };
4287
+ shipping?: unknown;
4288
+ }
4289
+
4290
+ /** host 回传 webapp 的 OPENSDK@GET_GOOGLE_PAY_TOKEN_REPLY 形态。 */
4291
+ declare interface GetGooglePayTokenReply {
4292
+ success: boolean;
4293
+ result?: unknown;
4294
+ err?: {
4295
+ statusCode?: string;
4296
+ [key: string]: unknown;
4297
+ };
4298
+ }
4299
+
4300
+ /** webapp 传来的 OPENSDK@GET_GOOGLE_PAY_TOKEN payload 形态。 */
4301
+ declare interface GetGooglePayTokenRequest {
4302
+ actionName?: string;
4303
+ data?: {
4304
+ environment?: string;
4305
+ paymentRequest?: unknown;
4306
+ paymentMethod?: unknown;
4307
+ paymentMethodDetail?: {
4308
+ googlePayProps?: {
4309
+ environment?: string;
4310
+ paymentRequest?: unknown;
4311
+ };
4312
+ };
4313
+ [key: string]: unknown;
4314
+ };
4315
+ }
4316
+
3987
4317
  declare type GetI18nQueryParam = string | {
3988
4318
  /**
3989
4319
  * 多语言文案的 key
@@ -7559,11 +7889,18 @@ export declare type PaymentAppearanceProps = {
7559
7889
  export declare class PaymentElement extends BaseMainElement<PaymentElementConfig, PaymentElementEvents> {
7560
7890
  static elementType: string;
7561
7891
  private _paymentInProgress;
7892
+ private readonly paymentTracker;
7893
+ private _mountStartedAt;
7894
+ private _mountInProgress;
7895
+ private _mountPhase;
7896
+ private _destroyInProgress;
7897
+ private readonly walletLogger;
7562
7898
  constructor(name: string, config: PaymentElementConfig);
7563
7899
  /**
7564
7900
  * @internal
7565
7901
  */
7566
7902
  setup(): Promise<Partial<PaymentAppConfig> | undefined>;
7903
+ mount(container: HTMLElement): Promise<void>;
7567
7904
  /**
7568
7905
  * @description Update payment element configuration with amount validation and appearance Rules support
7569
7906
  */
@@ -7572,6 +7909,9 @@ export declare class PaymentElement extends BaseMainElement<PaymentElementConfig
7572
7909
  * @internal
7573
7910
  */
7574
7911
  submit(data?: PaymentSubmitParams): Promise<PaymentSubmitResult>;
7912
+ on<T extends keyof PaymentElementEvents>(event: T, handler: (payload: PaymentElementEvents[T]) => void): void;
7913
+ unmount(): void;
7914
+ destroy(): void;
7575
7915
  protected focus(): void;
7576
7916
  protected blur(): void;
7577
7917
  protected clear(): void;
@@ -7587,6 +7927,25 @@ declare interface PaymentElementConfig extends BaseElementConfig<PaymentAppConfi
7587
7927
  * @description Payment element events
7588
7928
  */
7589
7929
  export declare interface PaymentElementEvents extends AntomBridgeWithNativeEventMap<PaymentAppConfig, PaymentSubmitParams, PaymentSubmitResult> {
7930
+ /**
7931
+ * webapp 委托 host(父 frame)拉起 Apple Pay 拿 token。
7932
+ * payload 结构对齐 ModernElementController.GetApplePayTokenRequest(放 paymentMethod/shipping)。
7933
+ */
7934
+ 'OPENSDK@GET_APPLE_PAY_TOKEN': GetApplePayTokenRequest;
7935
+ /** host 完成 Apple Pay token 获取后回包给 webapp */
7936
+ 'OPENSDK@GET_APPLE_PAY_TOKEN_REPLY': GetApplePayTokenReply;
7937
+ /**
7938
+ * webapp 委托 host(父 frame)拉起 Google Pay 拿 token。
7939
+ * payload 结构对齐 ModernElementController.GetGooglePayTokenRequest(放 data.environment/paymentRequest)。
7940
+ */
7941
+ 'OPENSDK@GET_GOOGLE_PAY_TOKEN': GetGooglePayTokenRequest;
7942
+ /** host 完成 Google Pay token 获取后回包给 webapp */
7943
+ 'OPENSDK@GET_GOOGLE_PAY_TOKEN_REPLY': GetGooglePayTokenReply;
7944
+ /** WebApp notifies the host when the selected payment method changes. */
7945
+ paymentMethodChanged: {
7946
+ type: string;
7947
+ name?: string;
7948
+ };
7590
7949
  }
7591
7950
 
7592
7951
  declare interface PaymentElementView {
@@ -25058,6 +25417,9 @@ export declare type VaultingAppearanceProps = {
25058
25417
  */
25059
25418
  export declare class VaultingElement extends BaseMainElement<VaultingElementConfig, VaultingElementEvents> {
25060
25419
  static elementType: string;
25420
+ private readonly elementTracker;
25421
+ private _mountInProgress;
25422
+ private _destroyInProgress;
25061
25423
  constructor(name: string, config: VaultingElementConfig);
25062
25424
  /**
25063
25425
  * @internal
@@ -25073,6 +25435,10 @@ export declare class VaultingElement extends BaseMainElement<VaultingElementConf
25073
25435
  * @internal
25074
25436
  */
25075
25437
  submit(data?: VaultingSubmitParams): Promise<SubmitResult>;
25438
+ mount(container: HTMLElement): Promise<void>;
25439
+ on<T extends keyof VaultingElementEvents>(event: T, handler: (payload: VaultingElementEvents[T]) => void): void;
25440
+ unmount(): void;
25441
+ destroy(): void;
25076
25442
  protected focus(): void;
25077
25443
  protected blur(): void;
25078
25444
  protected clear(): void;