@alipay/ams-checkout 2.0.28 → 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.
@@ -5,7 +5,7 @@
5
5
  "toolPackages": [
6
6
  {
7
7
  "packageName": "@microsoft/api-extractor",
8
- "packageVersion": "7.59.1"
8
+ "packageVersion": "7.59.2"
9
9
  }
10
10
  ]
11
11
  }
@@ -296,6 +296,6 @@ export var LogConfig = {
296
296
  version: 'iteration/20231021',
297
297
  mdata: {
298
298
  firstLogTime: Date.now(),
299
- sdkVersion: "2.0.28"
299
+ sdkVersion: "2.0.29"
300
300
  }
301
301
  };
@@ -0,0 +1 @@
1
+ export declare const getIdengineTimezone: () => string;
@@ -0,0 +1,8 @@
1
+ export var getIdengineTimezone = function getIdengineTimezone() {
2
+ var offsetMinutes = -new Date().getTimezoneOffset();
3
+ var sign = offsetMinutes >= 0 ? '+' : '-';
4
+ var absoluteMinutes = Math.abs(offsetMinutes);
5
+ var hours = Math.floor(absoluteMinutes / 60);
6
+ var minutes = absoluteMinutes % 60;
7
+ return "UTC".concat(sign).concat(hours).concat(minutes ? ":".concat(String(minutes).padStart(2, '0')) : '');
8
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alipay/ams-checkout",
3
- "version": "2.0.28",
3
+ "version": "2.0.29",
4
4
  "description": "",
5
5
  "author": "",
6
6
  "exports": {
package/types.d.ts CHANGED
@@ -209,8 +209,10 @@ export declare type AntomLayouts = 'tabs' | 'accordion';
209
209
  export declare class AntomSDK extends BaseElementsFactory {
210
210
  static version: string;
211
211
  private stopModalMessageMonitor;
212
+ private readonly apiTracker;
212
213
  constructor(config?: AntomSDKConfig);
213
214
  protected canUseElements(): Array<ElementListItemType>;
215
+ init(): Promise<this>;
214
216
  /**
215
217
  * @description 更新配置
216
218
  */
@@ -223,17 +225,34 @@ export declare class AntomSDK extends BaseElementsFactory {
223
225
  createElement(elementType: 'vaulting', options?: VaultingAppConfig): VaultingElement;
224
226
  createElement(elementType: 'CVV', options: CVVAppConfig): CVVElement;
225
227
  createElement(elementType: 'express', options?: ExpressAppConfig): ExpressElement;
228
+ createElement(elementType: 'expressVaulting', options?: ExpressVaultingAppConfig): ExpressVaultingElement;
226
229
  getElement(elementType: 'payment', options?: PaymentAppConfig): PaymentElement;
227
230
  getElement(elementType: 'vaulting', options?: VaultingAppConfig): VaultingElement;
228
231
  getElement(elementType: 'CVV', options?: CVVAppConfig): CVVElement;
229
232
  getElement(elementType: 'express', options?: ExpressAppConfig): ExpressElement;
233
+ getElement(elementType: 'expressVaulting', options?: ExpressVaultingAppConfig): ExpressVaultingElement;
230
234
  /**
231
235
  * 从 elements 容器或直接传入的 MainElement 中提取指定类型的主元素
232
236
  * @throws {AntomSDKError} 当无法找到有效的主元素时抛出错误
233
237
  */
234
238
  private extractMainElement;
235
239
  confirmCardSetup(options: ConfirmCardSetupOptions): Promise<SubmitResult>;
240
+ private runConfirmCardSetup;
236
241
  confirmPayment(options: ConfirmPaymentOptions): Promise<SubmitResult>;
242
+ private runConfirmPayment;
243
+ /**
244
+ * 触发 Express Vaulting element 的 PayPal 绑卡提交流程。
245
+ *
246
+ * iframe 收到 OPENSDK@CONFIRM_VAULTING 后执行 submitPay + 单次 inquiry 兜底,
247
+ * 完成后通过 OPENSDK@CONFIRM_VAULTING_RESULT 回包,Promise resolve。
248
+ *
249
+ * @param options.elements 已挂载的 ExpressVaultingElement 或包含它的 Elements 实例
250
+ * @param options.redirect 跳转策略,默认 'always',透传给 iframe
251
+ */
252
+ confirmVaulting(options: {
253
+ elements: BaseMainElement | BaseElements;
254
+ redirect?: 'always' | 'if_required';
255
+ }): Promise<ExpressVaultingResult>;
237
256
  }
238
257
 
239
258
  /**
@@ -2334,10 +2353,17 @@ export declare type CVVAppearanceProps = {
2334
2353
  export declare class CVVElement extends BaseMainElement<CVVElementConfig, CVVElementEvents> {
2335
2354
  static elementType: string;
2336
2355
  private readonly sessionData;
2356
+ private readonly elementTracker;
2357
+ private _mountInProgress;
2358
+ private _destroyInProgress;
2337
2359
  constructor(name: string, config: CVVElementConfig);
2338
2360
  /* Excluded from this release type: setup */
2339
2361
  /* Excluded from this release type: updateConfig */
2340
2362
  /* Excluded from this release type: submit */
2363
+ mount(container: HTMLElement): Promise<void>;
2364
+ on<T extends keyof CVVElementEvents>(event: T, handler: (payload: CVVElementEvents[T]) => void): void;
2365
+ unmount(): void;
2366
+ destroy(): void;
2341
2367
  protected focus(): void;
2342
2368
  protected blur(): void;
2343
2369
  protected clear(): void;
@@ -3078,8 +3104,12 @@ declare interface ElementPluginChangeStates {
3078
3104
  declare type ElementPluginNameEnum = 'SET_STATE' | 'PASSIVE_SET_STATE';
3079
3105
 
3080
3106
  declare class Elements extends BaseElements {
3107
+ private readonly apiTracker;
3081
3108
  protected canUseElements(): Array<ElementListItemType>;
3082
3109
  constructor(config: BaseElementsConfig);
3110
+ init(): Promise<this>;
3111
+ updateConfig(config: Partial<BaseElementsConfig>): void;
3112
+ destroy(): void;
3083
3113
  createElement(elementType: 'vaulting', options?: VaultingAppConfig): VaultingElement;
3084
3114
  createElement(elementType: 'express', options?: ExpressAppConfig): ExpressElement;
3085
3115
  getElement(elementType: 'vaulting', options?: VaultingAppConfig): VaultingElement;
@@ -3288,6 +3318,17 @@ export declare interface ExpressClickEvent {
3288
3318
  expressPaymentType: string;
3289
3319
  }
3290
3320
 
3321
+ declare type ExpressCompletePaymentResult = {
3322
+ success: boolean;
3323
+ result?: any;
3324
+ error?: {
3325
+ code: string;
3326
+ message: string;
3327
+ };
3328
+ userCanceled3D?: boolean;
3329
+ status?: 'SUCCESS' | 'CANCELLED' | 'FAIL' | 'PROCESSING';
3330
+ };
3331
+
3291
3332
  /** confirm 事件负载(统一终态,替代 approve) */
3292
3333
  export declare interface ExpressConfirmData {
3293
3334
  expressPaymentType: string;
@@ -3334,6 +3375,10 @@ export declare interface ExpressConfirmData {
3334
3375
  */
3335
3376
  export declare class ExpressElement extends BaseMainElement<ExpressElementConfig, ExpressElementEvents> {
3336
3377
  static elementType: string;
3378
+ private readonly elementTracker;
3379
+ private _mountInProgress;
3380
+ private _destroyInProgress;
3381
+ private _registeringInternalListeners;
3337
3382
  /**
3338
3383
  * Store all function-type callbacks locally, not involved in postMessage serialization
3339
3384
  */
@@ -3352,6 +3397,12 @@ export declare class ExpressElement extends BaseMainElement<ExpressElementConfig
3352
3397
  private _localHandlers;
3353
3398
  /** 支付流程进行中标志(click → confirm/error/cancel 之间) */
3354
3399
  private _paymentInProgress;
3400
+ /**
3401
+ * confirm 窗口超时标志:iframe 在 20s onTimeout 发 error(MERCHANT_CONFIRM_TIMEOUT) 时置位,
3402
+ * completePayment 入口据此立即返失败(不发 COMPLETE_PAYMENT,不进 5min 兜底)。
3403
+ * 每新一轮 confirm 事件到达时复位(见 on() 重写)。
3404
+ */
3405
+ private _confirmWindowTimedOut;
3355
3406
  /**
3356
3407
  * 是否已收到 iframe 业务层 ready 事件(app.tsx sendReady)。
3357
3408
  * 注意:与 host `status='ready'`(由 HANDSHAKE_ACK 触发,bridge.js:450 同步回发,与 amount 解析无关)不同。
@@ -3374,6 +3425,7 @@ export declare class ExpressElement extends BaseMainElement<ExpressElementConfig
3374
3425
  */
3375
3426
  private _emit;
3376
3427
  updateConfig(newConfig: ExpressAppConfig): Promise<ExpressElementEvents['OPENSDK@UPDATE_CONFIG_REPLY']>;
3428
+ private runUpdateConfig;
3377
3429
  private updateConfigTransaction;
3378
3430
  private updateAmountConfigWithSanitizedDebug;
3379
3431
  private getAmountValidationReason;
@@ -3389,19 +3441,13 @@ export declare class ExpressElement extends BaseMainElement<ExpressElementConfig
3389
3441
  * iframe 收到 OPENSDK@COMPLETE_PAYMENT 后执行 submitPay / polling 等,
3390
3442
  * 完成后通过 OPENSDK@COMPLETE_PAYMENT_RESULT 回包,Promise resolve。
3391
3443
  */
3392
- completePayment(redirect?: 'always' | 'if_required'): Promise<{
3393
- success: boolean;
3394
- result?: any;
3395
- error?: {
3396
- code: string;
3397
- message: string;
3398
- };
3399
- /** 用户是否手动关闭 3D 弹窗(透传 webapp COMPLETE_PAYMENT_RESULT.userCanceled3D) */
3400
- userCanceled3D?: boolean;
3401
- status?: 'SUCCESS' | 'CANCELLED' | 'FAIL' | 'PROCESSING';
3402
- }>;
3444
+ completePayment(redirect?: 'always' | 'if_required'): Promise<ExpressCompletePaymentResult>;
3445
+ private runCompletePayment;
3403
3446
  setup(): Promise<Partial<ExpressAppConfig> | undefined>;
3404
3447
  private registerInternalListeners;
3448
+ mount(container: HTMLElement): Promise<void>;
3449
+ unmount(): void;
3450
+ destroy(): void;
3405
3451
  protected focus(): void;
3406
3452
  protected blur(): void;
3407
3453
  protected clear(): void;
@@ -3510,6 +3556,184 @@ declare type ExpressSetupError = ErrorPayload & {
3510
3556
  mulityLanguageMapping?: boolean;
3511
3557
  };
3512
3558
 
3559
+ /**
3560
+ * @public
3561
+ * @description Express Vaulting element app config type
3562
+ */
3563
+ export declare interface ExpressVaultingAppConfig extends BaseElementAppConfig {
3564
+ /**
3565
+ * @description payment sessionData,无法通过 updateConfig 更新
3566
+ */
3567
+ sessionData?: string;
3568
+ /**
3569
+ * @description 开通的支付方式列表,本期固定为 ['PAYPAL_DIRECTDEBIT']
3570
+ */
3571
+ paymentMethods?: string[];
3572
+ /** PayPal 按钮配置 */
3573
+ paypal?: ExpressVaultingPayPalConfig;
3574
+ /** PayPal 按钮文案类型 */
3575
+ buttonType?: {
3576
+ paypal?: 'paypal' | 'checkout' | 'buynow' | 'pay';
3577
+ };
3578
+ /** 按钮统一高度(px) */
3579
+ buttonHeight?: number;
3580
+ /** PayPal 按钮主题色 */
3581
+ buttonTheme?: {
3582
+ paypal?: 'gold' | 'blue' | 'silver' | 'white' | 'black';
3583
+ };
3584
+ }
3585
+
3586
+ /**
3587
+ * @public
3588
+ * @description cancel 事件负载
3589
+ */
3590
+ export declare interface ExpressVaultingCancelEvent {
3591
+ paymentMethodType: ExpressVaultingMethod;
3592
+ data?: unknown;
3593
+ }
3594
+
3595
+ /**
3596
+ * @public
3597
+ * @description click 事件负载
3598
+ */
3599
+ export declare interface ExpressVaultingClickEvent {
3600
+ paymentMethodType: ExpressVaultingMethod;
3601
+ }
3602
+
3603
+ /**
3604
+ * @public
3605
+ * @description confirm 事件负载(PayPal onApprove 成功后触发,商户可在回调中调 confirmVaulting)
3606
+ */
3607
+ export declare interface ExpressVaultingConfirmEvent {
3608
+ paymentMethodType: ExpressVaultingMethod;
3609
+ payerInfo?: ExpressVaultingPayerInfo;
3610
+ }
3611
+
3612
+ /**
3613
+ * @public
3614
+ * @description Express Vaulting element - PayPal 绑卡 Element
3615
+ *
3616
+ * Host 侧只保留 Element 生命周期与 bridge 连接;PayPal 按钮渲染、Braintree SDK
3617
+ * 加载、submit/inquiry 都由 express_vaulting webapp 承接。
3618
+ *
3619
+ * setup 阶段调 sdkActionQuery 拿 paypalClientToken,握手时下发给 iframe(系分
3620
+ * 4.1 节 BR-007:client token 必须来自握手,iframe 不自调 sdkActionQuery)。
3621
+ */
3622
+ export declare class ExpressVaultingElement extends BaseMainElement<ExpressVaultingElementConfig, ExpressVaultingElementEvents> {
3623
+ static elementType: string;
3624
+ /**
3625
+ * Host-side fullscreen overlay shown while the PayPal popup is open.
3626
+ *
3627
+ * PayPal Braintree vault flow renders its own popup + backdrop inside the
3628
+ * iframe body, so without a host overlay the backdrop only masks the tiny
3629
+ * button area. Mirrors ExpressElement: show on `click`, hide on
3630
+ * `confirm` / `cancel` / `error`.
3631
+ */
3632
+ private _paypalOverlay;
3633
+ constructor(name: string, config: ExpressVaultingElementConfig);
3634
+ /* Excluded from this release type: setup */
3635
+ /* Excluded from this release type: registerInternalListeners */
3636
+ protected focus(): void;
3637
+ protected blur(): void;
3638
+ protected clear(): void;
3639
+ /* Excluded from this release type: _confirmVaulting */
3640
+ }
3641
+
3642
+ /**
3643
+ * @public
3644
+ * @description Express Vaulting element config type
3645
+ */
3646
+ export declare interface ExpressVaultingElementConfig extends BaseElementConfig<ExpressVaultingAppConfig> {
3647
+ }
3648
+
3649
+ /**
3650
+ * @public
3651
+ * @description Express Vaulting element 事件类型
3652
+ */
3653
+ export declare interface ExpressVaultingElementEvents extends AntomBridgeWithNativeEventMap<ExpressVaultingAppConfig> {
3654
+ ready: ExpressVaultingReadyEvent;
3655
+ click: ExpressVaultingClickEvent;
3656
+ confirm: ExpressVaultingConfirmEvent;
3657
+ cancel: ExpressVaultingCancelEvent;
3658
+ error: ExpressVaultingErrorEvent;
3659
+ 'OPENSDK@CONFIRM_VAULTING': {
3660
+ requestId: string;
3661
+ redirect?: 'always' | 'if_required';
3662
+ };
3663
+ 'OPENSDK@CONFIRM_VAULTING_RESULT': {
3664
+ requestId: string;
3665
+ result: ExpressVaultingResult;
3666
+ };
3667
+ }
3668
+
3669
+ /**
3670
+ * @public
3671
+ * @description error 事件负载
3672
+ */
3673
+ export declare interface ExpressVaultingErrorEvent extends ErrorPayload<string> {
3674
+ paymentMethodType: ExpressVaultingMethod;
3675
+ }
3676
+
3677
+ /**
3678
+ * Supported express vaulting payment methods. All bridge event payloads carry
3679
+ * `paymentMethodType` — use this enum instead of硬编码 strings so adding a
3680
+ * new wallet only needs one entry here. Must match the iframe-side enum in
3681
+ * elements2/express_vaulting/interface.ts.
3682
+ */
3683
+ declare enum ExpressVaultingMethod {
3684
+ PAYPAL_DIRECTDEBIT = "PAYPAL_DIRECTDEBIT"
3685
+ }
3686
+
3687
+ /**
3688
+ * @public
3689
+ * @description Braintree tokenizePayment 返回的 payer 信息,随 confirm 事件透传给商户
3690
+ */
3691
+ export declare interface ExpressVaultingPayerInfo {
3692
+ payerId?: string;
3693
+ email?: string;
3694
+ firstName?: string;
3695
+ lastName?: string;
3696
+ countryCode?: string;
3697
+ phone?: string;
3698
+ }
3699
+
3700
+ /**
3701
+ * MERCHANT_CONFIRM_TIMEOUT is owned by the iframe side (mirrors express_element:
3702
+ * iframe starts a 20s timer on the `confirm` event and sends
3703
+ * `error(MERCHANT_CONFIRM_TIMEOUT)` if the merchant never calls confirmVaulting).
3704
+ * See elements2/express_vaulting/app.tsx + tools/error.ts.
3705
+ */
3706
+ /**
3707
+ * @public
3708
+ * @description PayPal 按钮配置
3709
+ */
3710
+ export declare interface ExpressVaultingPayPalConfig {
3711
+ /** 按钮形状 */
3712
+ buttonShape?: 'pill' | 'rect' | 'sharp';
3713
+ }
3714
+
3715
+ /**
3716
+ * @public
3717
+ * @description ready 事件负载
3718
+ */
3719
+ export declare interface ExpressVaultingReadyEvent {
3720
+ availablePaymentMethods: Partial<Record<ExpressVaultingMethod, boolean>>;
3721
+ }
3722
+
3723
+ /**
3724
+ * @public
3725
+ * @description confirmVaulting 返回结果
3726
+ */
3727
+ export declare interface ExpressVaultingResult {
3728
+ status: 'SUCCESS' | 'PROCESSING' | 'FAIL' | 'CANCELLED';
3729
+ paymentMethodId?: string;
3730
+ payerId?: string;
3731
+ error?: {
3732
+ code: string;
3733
+ message: string;
3734
+ };
3735
+ }
3736
+
3513
3737
  declare interface ExpSupportBank {
3514
3738
  /**
3515
3739
  * @description 银行名称
@@ -7178,14 +7402,23 @@ export declare type PaymentAppearanceProps = {
7178
7402
  export declare class PaymentElement extends BaseMainElement<PaymentElementConfig, PaymentElementEvents> {
7179
7403
  static elementType: string;
7180
7404
  private _paymentInProgress;
7405
+ private readonly paymentTracker;
7406
+ private _mountStartedAt;
7407
+ private _mountInProgress;
7408
+ private _mountPhase;
7409
+ private _destroyInProgress;
7181
7410
  private readonly walletLogger;
7182
7411
  constructor(name: string, config: PaymentElementConfig);
7183
7412
  /* Excluded from this release type: setup */
7413
+ mount(container: HTMLElement): Promise<void>;
7184
7414
  /**
7185
7415
  * @description Update payment element configuration with amount validation and appearance Rules support
7186
7416
  */
7187
7417
  updateConfig(newConfig: Partial<PaymentAppConfig>): Promise<PaymentElementEvents['OPENSDK@UPDATE_CONFIG_REPLY']>;
7188
7418
  /* Excluded from this release type: submit */
7419
+ on<T extends keyof PaymentElementEvents>(event: T, handler: (payload: PaymentElementEvents[T]) => void): void;
7420
+ unmount(): void;
7421
+ destroy(): void;
7189
7422
  protected focus(): void;
7190
7423
  protected blur(): void;
7191
7424
  protected clear(): void;
@@ -7215,6 +7448,11 @@ export declare interface PaymentElementEvents extends AntomBridgeWithNativeEvent
7215
7448
  'OPENSDK@GET_GOOGLE_PAY_TOKEN': GetGooglePayTokenRequest;
7216
7449
  /** host 完成 Google Pay token 获取后回包给 webapp */
7217
7450
  'OPENSDK@GET_GOOGLE_PAY_TOKEN_REPLY': GetGooglePayTokenReply;
7451
+ /** WebApp notifies the host when the selected payment method changes. */
7452
+ paymentMethodChanged: {
7453
+ type: string;
7454
+ name?: string;
7455
+ };
7218
7456
  }
7219
7457
 
7220
7458
  declare interface PaymentElementView {
@@ -24661,6 +24899,9 @@ export declare type VaultingAppearanceProps = {
24661
24899
  */
24662
24900
  export declare class VaultingElement extends BaseMainElement<VaultingElementConfig, VaultingElementEvents> {
24663
24901
  static elementType: string;
24902
+ private readonly elementTracker;
24903
+ private _mountInProgress;
24904
+ private _destroyInProgress;
24664
24905
  constructor(name: string, config: VaultingElementConfig);
24665
24906
  /* Excluded from this release type: setup */
24666
24907
  /**
@@ -24670,6 +24911,10 @@ export declare class VaultingElement extends BaseMainElement<VaultingElementConf
24670
24911
  */
24671
24912
  updateConfig(newConfig: Partial<VaultingAppConfig>): Promise<VaultingElementEvents['OPENSDK@UPDATE_CONFIG_REPLY']>;
24672
24913
  /* Excluded from this release type: submit */
24914
+ mount(container: HTMLElement): Promise<void>;
24915
+ on<T extends keyof VaultingElementEvents>(event: T, handler: (payload: VaultingElementEvents[T]) => void): void;
24916
+ unmount(): void;
24917
+ destroy(): void;
24673
24918
  protected focus(): void;
24674
24919
  protected blur(): void;
24675
24920
  protected clear(): void;