@alipay/ams-checkout 2.0.19 → 2.0.21

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 (60) hide show
  1. package/ams-checkout.js +3 -3
  2. package/dist/ams-checkout.min.js +1 -1
  3. package/esm/config/index.d.ts +7 -0
  4. package/esm/config/index.js +2 -2
  5. package/esm/constant/element.d.ts +2 -1
  6. package/esm/constant/element.js +1 -0
  7. package/esm/constant/index.d.ts +4 -21
  8. package/esm/core/component/ckp/index.d.ts +1 -1
  9. package/esm/core/component/ckp/index.js +5 -2
  10. package/esm/core/component/element/elementController/index.d.ts +3 -3
  11. package/esm/core/component/element/elementController/index.js +66 -42
  12. package/esm/core/component/element/elementProcessor/baseElementProcessor.d.ts +1 -0
  13. package/esm/core/component/element/elementProcessor/baseElementProcessor.js +1 -0
  14. package/esm/core/component/element/elementProcessor/convertPaymentMethods.d.ts +22 -0
  15. package/esm/core/component/element/elementProcessor/convertPaymentMethods.js +159 -0
  16. package/esm/core/component/element/elementProcessor/paymentProcessor.d.ts +5 -0
  17. package/esm/core/component/element/elementProcessor/paymentProcessor.js +107 -29
  18. package/esm/core/component/element/index.d.ts +4 -1
  19. package/esm/core/component/element/index.js +19 -4
  20. package/esm/core/component/element/mock.js +2 -2
  21. package/esm/core/component/element/modernElementController/adapter.d.ts +19 -0
  22. package/esm/core/component/element/modernElementController/adapter.js +79 -0
  23. package/esm/core/component/element/modernElementController/index.d.ts +155 -0
  24. package/esm/core/component/element/modernElementController/index.js +1780 -0
  25. package/esm/core/component/element/type.d.ts +74 -19
  26. package/esm/core/component/element/util.d.ts +9 -2
  27. package/esm/core/component/element/util.js +3 -2
  28. package/esm/core/instance/index.d.ts +12 -4
  29. package/esm/core/instance/index.js +152 -26
  30. package/esm/foundation/service/event-center.js +1 -1
  31. package/esm/foundation/service/security/index.d.ts +9 -4
  32. package/esm/foundation/service/security/index.js +158 -35
  33. package/esm/foundation/service/security/security.d.ts +22 -1
  34. package/esm/foundation/service/security/security.js +150 -37
  35. package/esm/foundation/utils/preload_helper.d.ts +6 -3
  36. package/esm/foundation/utils/preload_helper.js +122 -32
  37. package/esm/main.js +4 -4
  38. package/esm/modern/global.d.ts +3 -0
  39. package/esm/modern/index.d.ts +5 -1
  40. package/esm/modern/index.js +1 -51
  41. package/esm/modern/tools.js +1 -0
  42. package/esm/plugin/component/channel.d.ts +2 -2
  43. package/esm/plugin/component/channel.js +18 -18
  44. package/esm/plugin/component/index.js +36 -29
  45. package/esm/tsdoc-metadata.json +1 -1
  46. package/esm/types/index.d.ts +5 -1
  47. package/esm/util/beforeConfirm.d.ts +4 -2
  48. package/esm/util/beforeConfirm.js +15 -14
  49. package/esm/util/jshield-apdid/apdid-loader.js +377 -0
  50. package/esm/util/jshield-apdid/index.js +21 -0
  51. package/esm/util/logger.js +1 -2
  52. package/esm/util/security-registry.d.ts +72 -0
  53. package/esm/util/security-registry.js +175 -0
  54. package/esm/util/security.d.ts +22 -1
  55. package/esm/util/security.js +150 -39
  56. package/package.json +15 -9
  57. package/types.d.ts +843 -1103
  58. package/types.untrimmed.d.ts +995 -1122
  59. package/esm/modern/stageName.d.ts +0 -3
  60. package/esm/modern/stageName.js +0 -1
@@ -32,7 +32,7 @@ export declare class ApplePaySdk {
32
32
  */
33
33
  private paymentStatus;
34
34
  /**
35
- * @description oncancel 原因标记,用于区分用户主动取消 vs 商户通过 onBeforeConfirm 中止
35
+ * @description oncancel 原因标记,用于区分用户主动取消 vs 商户通过 onBeforeConfirm 中止/超时
36
36
  */
37
37
  private cancelReason;
38
38
  private logger;
@@ -40,7 +40,7 @@ export declare class ApplePaySdk {
40
40
  private shipping?;
41
41
  private merchantAmount;
42
42
  private merchantCurrency;
43
- private onBeforeConfirm?;
43
+ private onBeforeConfirm;
44
44
  constructor({ paymentSessionData, parseData, logger, env, shipping, merchantAmount, merchantCurrency, }: {
45
45
  paymentSessionData: string;
46
46
  parseData: IPaymentSessionMetaData;
@@ -17,7 +17,7 @@ import { getDoubleFaUrlFromSession } from "../../foundation/utils/web_app_url_ut
17
17
  import { getApplePayPaymentSession, submitPayInfo } from "../../service";
18
18
  import { EnvironmentEnum } from "../../types";
19
19
  import { device, isEmpty } from "../../util";
20
- import { executeWithTimeout, BEFORE_CONFIRM_TIMEOUT_MS } from "../../util/beforeConfirm";
20
+ import { executeWithTimeout, BEFORE_CONFIRM_TIMEOUT_MS, MERCHANT_CONFIRM_ABORT_CODE, MERCHANT_CONFIRM_TIMEOUT_CODE } from "../../util/beforeConfirm";
21
21
  import { APPLE_PAY_RECURRING_VERSION, APPLE_PAY_VERSION } from "../applepay/interface";
22
22
  var APPLEPAYERRORENUM = /*#__PURE__*/function (APPLEPAYERRORENUM) {
23
23
  APPLEPAYERRORENUM["APPLE_PAY_MISSING_DATA"] = "APPLE_PAY_MISSING_DATA";
@@ -155,7 +155,7 @@ export var ApplePaySdk = /*#__PURE__*/function () {
155
155
  */
156
156
  _defineProperty(this, "paymentStatus", void 0);
157
157
  /**
158
- * @description oncancel 原因标记,用于区分用户主动取消 vs 商户通过 onBeforeConfirm 中止
158
+ * @description oncancel 原因标记,用于区分用户主动取消 vs 商户通过 onBeforeConfirm 中止/超时
159
159
  */
160
160
  _defineProperty(this, "cancelReason", null);
161
161
  _defineProperty(this, "logger", void 0);
@@ -163,7 +163,7 @@ export var ApplePaySdk = /*#__PURE__*/function () {
163
163
  _defineProperty(this, "shipping", void 0);
164
164
  _defineProperty(this, "merchantAmount", void 0);
165
165
  _defineProperty(this, "merchantCurrency", void 0);
166
- _defineProperty(this, "onBeforeConfirm", void 0);
166
+ _defineProperty(this, "onBeforeConfirm", null);
167
167
  this.paymentSessionData = paymentSessionData;
168
168
  this.parseData = parseData;
169
169
  this.env = env;
@@ -213,6 +213,7 @@ export var ApplePaySdk = /*#__PURE__*/function () {
213
213
  try {
214
214
  if (!_this.session) return;
215
215
  _this.paymentStatus = PAYMENT_STATUS.PENDING;
216
+ _this.cancelReason = 'USER_CANCEL';
216
217
  _this.session.onvalidatemerchant = /*#__PURE__*/function () {
217
218
  var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(event) {
218
219
  var requestParams, res, merchantSession, _this$logger, _this$logger2;
@@ -282,7 +283,7 @@ export var ApplePaySdk = /*#__PURE__*/function () {
282
283
  }();
283
284
  _this.session.onpaymentauthorized = /*#__PURE__*/function () {
284
285
  var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(event) {
285
- var exception, _event$payment, token, billingContact, shippingContact, _this$parseData, obj, _this$parseData$payme, requiredBillingContactFields, requiredShippingContactFields, _this$logger3, _this$logger4, _this$logger6, startTime, _yield$executeWithTim, rawResult, timedOut, shouldContinue, _this$logger5, _this$session2, _this$session2$comple, _this$logger7, _this$session3, _this$session3$comple, res, _this$logger8;
286
+ var exception, _event$payment, token, billingContact, shippingContact, _this$parseData, obj, _this$parseData$payme, requiredBillingContactFields, requiredShippingContactFields, _this$logger3, _this$logger4, _this$logger6, startTime, _yield$executeWithTim, rawResult, timedOut, shouldContinue, isTimeout, _this$logger5, _this$session2, _this$session2$comple, _this$logger7, _this$session3, _this$session3$comple, res, _this$logger8;
286
287
  return _regeneratorRuntime().wrap(function _callee3$(_context3) {
287
288
  while (1) switch (_context3.prev = _context3.next) {
288
289
  case 0:
@@ -323,26 +324,25 @@ export var ApplePaySdk = /*#__PURE__*/function () {
323
324
  _context3.next = 39;
324
325
  break;
325
326
  case 11:
326
- // 清空回原始状态
327
- _this.cancelReason = 'USER_CANCEL';
328
327
  (_this$logger4 = _this.logger) === null || _this$logger4 === void 0 || _this$logger4.logInfo({
329
328
  title: 'sdk_before_confirm_start'
330
329
  }, {
331
330
  paymentMethodType: 'APPLEPAY',
332
331
  path: 'applePay_chrome_sdk'
333
332
  });
334
- _context3.prev = 13;
333
+ _context3.prev = 12;
335
334
  startTime = Date.now();
336
- _context3.next = 17;
335
+ _context3.next = 16;
337
336
  return executeWithTimeout(function () {
338
337
  return _this.onBeforeConfirm();
339
338
  });
340
- case 17:
339
+ case 16:
341
340
  _yield$executeWithTim = _context3.sent;
342
341
  rawResult = _yield$executeWithTim.result;
343
342
  timedOut = _yield$executeWithTim.timedOut;
344
343
  shouldContinue = rawResult;
345
- if (timedOut || Date.now() - startTime >= BEFORE_CONFIRM_TIMEOUT_MS) {
344
+ isTimeout = timedOut || Date.now() - startTime >= BEFORE_CONFIRM_TIMEOUT_MS;
345
+ if (isTimeout) {
346
346
  (_this$logger5 = _this.logger) === null || _this$logger5 === void 0 || _this$logger5.logError({
347
347
  title: 'sdk_before_confirm_timeout'
348
348
  });
@@ -357,11 +357,11 @@ export var ApplePaySdk = /*#__PURE__*/function () {
357
357
  _context3.next = 29;
358
358
  break;
359
359
  }
360
- _this.cancelReason = 'MERCHANT_ABORT';
360
+ _this.cancelReason = isTimeout ? 'MERCHANT_TIMEOUT' : 'MERCHANT_ABORT';
361
361
  (_this$session2 = _this.session) === null || _this$session2 === void 0 || (_this$session2$comple = _this$session2.completePayment) === null || _this$session2$comple === void 0 || _this$session2$comple.call(_this$session2, window.ApplePaySession.STATUS_FAILURE);
362
362
  _this.abortSession();
363
363
  reject({
364
- errorCode: 'MERCHANT_CONFIRM_ABORT'
364
+ errorCode: isTimeout ? MERCHANT_CONFIRM_TIMEOUT_CODE : MERCHANT_CONFIRM_ABORT_CODE
365
365
  });
366
366
  return _context3.abrupt("return");
367
367
  case 29:
@@ -369,7 +369,7 @@ export var ApplePaySdk = /*#__PURE__*/function () {
369
369
  break;
370
370
  case 31:
371
371
  _context3.prev = 31;
372
- _context3.t0 = _context3["catch"](13);
372
+ _context3.t0 = _context3["catch"](12);
373
373
  (_this$logger7 = _this.logger) === null || _this$logger7 === void 0 || _this$logger7.logError({
374
374
  title: 'sdk_before_confirm_error'
375
375
  }, {
@@ -381,7 +381,7 @@ export var ApplePaySdk = /*#__PURE__*/function () {
381
381
  (_this$session3 = _this.session) === null || _this$session3 === void 0 || (_this$session3$comple = _this$session3.completePayment) === null || _this$session3$comple === void 0 || _this$session3$comple.call(_this$session3, window.ApplePaySession.STATUS_FAILURE);
382
382
  _this.abortSession();
383
383
  reject({
384
- errorCode: 'MERCHANT_CONFIRM_ABORT'
384
+ errorCode: MERCHANT_CONFIRM_ABORT_CODE
385
385
  });
386
386
  return _context3.abrupt("return");
387
387
  case 39:
@@ -402,7 +402,7 @@ export var ApplePaySdk = /*#__PURE__*/function () {
402
402
  case "end":
403
403
  return _context3.stop();
404
404
  }
405
- }, _callee3, null, [[13, 31]]);
405
+ }, _callee3, null, [[12, 31]]);
406
406
  }));
407
407
  return function (_x2) {
408
408
  return _ref3.apply(this, arguments);
@@ -420,10 +420,10 @@ export var ApplePaySdk = /*#__PURE__*/function () {
420
420
  title: 'a3753.b103030.c386485.d507498'
421
421
  });
422
422
  }
423
- // cancelReason === 'MERCHANT_ABORT': onBeforeConfirm 返回 false 或异常,由商户主动中止
424
- // 其他:用户主动取消付款界面
423
+ // cancelReason 标识 onBeforeConfirm 主动中止/超时;其他情况视为用户主动取消付款界面
424
+ var merchantCancelErrorCode = _this.cancelReason === 'MERCHANT_TIMEOUT' ? MERCHANT_CONFIRM_TIMEOUT_CODE : MERCHANT_CONFIRM_ABORT_CODE;
425
425
  reject({
426
- errorCode: _this.cancelReason === 'MERCHANT_ABORT' ? 'MERCHANT_CONFIRM_ABORT' : APPLEPAYERRORENUM.APPLE_PAY_CANCEL
426
+ errorCode: _this.cancelReason === 'MERCHANT_ABORT' || _this.cancelReason === 'MERCHANT_TIMEOUT' ? merchantCancelErrorCode : APPLEPAYERRORENUM.APPLE_PAY_CANCEL
427
427
  });
428
428
  };
429
429
  _this.session.begin();
@@ -156,24 +156,28 @@ var ComponentApp = /*#__PURE__*/function () {
156
156
  var securitySDK = this.AMSSDK._getSecuritySDKByProductScene({
157
157
  product: product
158
158
  });
159
- if (!securitySDK) {
160
- this.AMSSDK.logger.logInfo({
161
- title: 'sdk_event_securitySdkInit'
159
+ if (securitySDK) {
160
+ // Already ready
161
+ return;
162
+ }
163
+
164
+ // Use _newSecuritySDKByScene which handles loading/ready/failed states internally
165
+ this.AMSSDK.logger.logInfo({
166
+ title: 'sdk_event_securitySdkInit'
167
+ });
168
+ this.AMSSDK._newSecuritySDKByScene({
169
+ product: product
170
+ }, function () {
171
+ _this.AMSSDK.logger.logInfo({
172
+ title: 'sdk_event_securitySdkInitSuccess'
162
173
  });
163
- this.AMSSDK._newSecuritySDKByScene({
164
- product: product
165
- }, function () {
166
- _this.AMSSDK.logger.logInfo({
167
- title: 'sdk_event_securitySdkInitSuccess'
168
- });
169
- }, function () {
170
- _this.AMSSDK.logger.logError({
171
- title: 'sdk_error_securitySdkInitFailed'
172
- }, {
173
- sign: 'SDK internal initialization'
174
- });
174
+ }, function () {
175
+ _this.AMSSDK.logger.logError({
176
+ title: 'sdk_error_securitySdkInitFailed'
177
+ }, {
178
+ sign: 'SDK internal initialization'
175
179
  });
176
- }
180
+ });
177
181
  }
178
182
  }, {
179
183
  key: "logDeviceId",
@@ -208,36 +212,39 @@ var ComponentApp = /*#__PURE__*/function () {
208
212
  while (1) switch (_context.prev = _context.next) {
209
213
  case 0:
210
214
  productScene = (_this2$_renderParams = _this2._renderParams) === null || _this2$_renderParams === void 0 || (_this2$_renderParams = _this2$_renderParams.paymentSessionMetaData) === null || _this2$_renderParams === void 0 || (_this2$_renderParams = _this2$_renderParams.paymentSessionConfig) === null || _this2$_renderParams === void 0 ? void 0 : _this2$_renderParams.productScene;
211
- getDeviceIdStartTime = Date.now();
212
- securitySDK = _this2.AMSSDK._getSecuritySDKByProductScene({
215
+ getDeviceIdStartTime = Date.now(); // Use async version to handle loading state
216
+ _context.next = 4;
217
+ return _this2.AMSSDK._awaitSecuritySDKByProductScene({
213
218
  product: (deviceIdParameter === null || deviceIdParameter === void 0 ? void 0 : deviceIdParameter.productScene) || productScene
214
219
  });
220
+ case 4:
221
+ securitySDK = _context.sent;
215
222
  deviceId = '';
216
223
  if (!securitySDK) {
217
- _context.next = 16;
224
+ _context.next = 18;
218
225
  break;
219
226
  }
220
227
  if (!(isPolling && parseInt(deviceIdParameter === null || deviceIdParameter === void 0 ? void 0 : deviceIdParameter.tokenCollectTime) > 0)) {
221
- _context.next = 11;
228
+ _context.next = 13;
222
229
  break;
223
230
  }
224
- _context.next = 8;
231
+ _context.next = 10;
225
232
  return securitySDK.pollingGetApdidToken(deviceIdParameter);
226
- case 8:
233
+ case 10:
227
234
  _context.t0 = _context.sent;
228
- _context.next = 14;
235
+ _context.next = 16;
229
236
  break;
230
- case 11:
231
- _context.next = 13;
232
- return securitySDK.getApdidToken();
233
237
  case 13:
238
+ _context.next = 15;
239
+ return securitySDK.getApdidToken();
240
+ case 15:
234
241
  _context.t0 = _context.sent;
235
- case 14:
242
+ case 16:
236
243
  deviceId = _context.t0;
237
244
  _this2.logDeviceId(deviceId, getDeviceIdStartTime);
238
- case 16:
245
+ case 18:
239
246
  resolve(deviceId);
240
- case 17:
247
+ case 19:
241
248
  case "end":
242
249
  return _context.stop();
243
250
  }
@@ -5,7 +5,7 @@
5
5
  "toolPackages": [
6
6
  {
7
7
  "packageName": "@microsoft/api-extractor",
8
- "packageVersion": "7.58.9"
8
+ "packageVersion": "7.58.11"
9
9
  }
10
10
  ]
11
11
  }
@@ -8,7 +8,7 @@
8
8
  import type { AxiosHeaderValue } from 'axios';
9
9
  import { IApplePayContactField } from '../plugin/applepay/interface';
10
10
  export type onChange = () => onCnageResult;
11
- export { type IElementOptions, ElementType, PaymentElementLayout, ThemeType } from '../core/component/element/type';
11
+ export { ElementType, PaymentElementLayout, ThemeType, type IElementOptions } from '../core/component/element/type';
12
12
  interface onCnageResult {
13
13
  complete: boolean;
14
14
  addressValue: AddressItem[];
@@ -40,6 +40,7 @@ export interface IoptionsParams {
40
40
  networkMode?: string;
41
41
  mode?: string;
42
42
  securityRegion?: 'US' | 'SG' | 'DE';
43
+ preview?: boolean | 'web' | 'mobile';
43
44
  }
44
45
  export interface ValidationResult {
45
46
  isValid: boolean;
@@ -126,6 +127,7 @@ export interface IcreateComponent {
126
127
  isAppWebview?: boolean;
127
128
  merchantAppointParam?: IMerchantAppointParam;
128
129
  isNativeAppWebview?: boolean;
130
+ isDemoMode?: boolean;
129
131
  }
130
132
  export interface IappendIframeNodesParams extends IcreateComponent {
131
133
  paymentSessionMetaData: IPaymentSessionMetaData;
@@ -352,6 +354,7 @@ export interface IPaymentSessionMetaData {
352
354
  };
353
355
  skipRenderPaymentMethod?: boolean;
354
356
  needAccountConfirmPage?: boolean;
357
+ modernWeb?: boolean;
355
358
  }
356
359
  export interface IPaymentSessionFactor {
357
360
  merchantInfo?: IMerchantInfo;
@@ -810,6 +813,7 @@ export interface IPaymentMethod {
810
813
  applePayProps?: {
811
814
  paymentRequest: ApplePayPaymentRequest;
812
815
  };
816
+ googlePayProps?: any;
813
817
  };
814
818
  interActionType?: InterActionTypeEnum;
815
819
  recommend?: boolean;
@@ -1,9 +1,11 @@
1
- export declare const BEFORE_CONFIRM_TIMEOUT_MS = 15000;
1
+ export declare const BEFORE_CONFIRM_TIMEOUT_MS = 20000;
2
+ export declare const MERCHANT_CONFIRM_ABORT_CODE = "MERCHANT_CONFIRM_ABORT";
3
+ export declare const MERCHANT_CONFIRM_TIMEOUT_CODE = "MERCHANT_CONFIRM_TIMEOUT";
2
4
  /**
3
5
  * 带超时的异步执行,始终清理定时器避免 unhandled promise rejection。
4
6
  *
5
7
  * @param fn - 要执行的异步函数
6
- * @param timeoutMs - 超时时间(毫秒),默认 15000
8
+ * @param timeoutMs - 超时时间(毫秒),默认 20000
7
9
  * @returns result 为 fn 的返回值(超时时为 undefined),timedOut 表示是否因超时返回
8
10
  */
9
11
  export declare function executeWithTimeout<T>(fn: () => Promise<T>, timeoutMs?: number): Promise<{
@@ -2,13 +2,16 @@ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" ==
2
2
  function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
3
3
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
4
4
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
5
- export var BEFORE_CONFIRM_TIMEOUT_MS = 15000;
5
+ export var BEFORE_CONFIRM_TIMEOUT_MS = 20000;
6
+ export var MERCHANT_CONFIRM_ABORT_CODE = 'MERCHANT_CONFIRM_ABORT';
7
+ export var MERCHANT_CONFIRM_TIMEOUT_CODE = 'MERCHANT_CONFIRM_TIMEOUT';
8
+ var BEFORE_CONFIRM_TIMEOUT_SIGNAL = Symbol('BEFORE_CONFIRM_TIMEOUT');
6
9
 
7
10
  /**
8
11
  * 带超时的异步执行,始终清理定时器避免 unhandled promise rejection。
9
- *
12
+ *
10
13
  * @param fn - 要执行的异步函数
11
- * @param timeoutMs - 超时时间(毫秒),默认 15000
14
+ * @param timeoutMs - 超时时间(毫秒),默认 20000
12
15
  * @returns result 为 fn 的返回值(超时时为 undefined),timedOut 表示是否因超时返回
13
16
  */
14
17
  export function executeWithTimeout(_x) {
@@ -20,7 +23,6 @@ function _executeWithTimeout() {
20
23
  timerId,
21
24
  timeoutPromise,
22
25
  result,
23
- isTimeout,
24
26
  _args = arguments;
25
27
  return _regeneratorRuntime().wrap(function _callee$(_context) {
26
28
  while (1) switch (_context.prev = _context.next) {
@@ -28,7 +30,7 @@ function _executeWithTimeout() {
28
30
  timeoutMs = _args.length > 1 && _args[1] !== undefined ? _args[1] : BEFORE_CONFIRM_TIMEOUT_MS;
29
31
  timeoutPromise = new Promise(function (_, reject) {
30
32
  timerId = setTimeout(function () {
31
- return reject(new Error('timed out'));
33
+ return reject(BEFORE_CONFIRM_TIMEOUT_SIGNAL);
32
34
  }, timeoutMs);
33
35
  });
34
36
  _context.prev = 2;
@@ -43,26 +45,25 @@ function _executeWithTimeout() {
43
45
  case 9:
44
46
  _context.prev = 9;
45
47
  _context.t0 = _context["catch"](2);
46
- isTimeout = _context.t0 instanceof Error && _context.t0.message === 'timed out';
47
- if (!isTimeout) {
48
- _context.next = 14;
48
+ if (!(_context.t0 === BEFORE_CONFIRM_TIMEOUT_SIGNAL)) {
49
+ _context.next = 13;
49
50
  break;
50
51
  }
51
52
  return _context.abrupt("return", {
52
53
  result: undefined,
53
54
  timedOut: true
54
55
  });
55
- case 14:
56
+ case 13:
56
57
  throw _context.t0;
57
- case 15:
58
- _context.prev = 15;
58
+ case 14:
59
+ _context.prev = 14;
59
60
  clearTimeout(timerId);
60
- return _context.finish(15);
61
- case 18:
61
+ return _context.finish(14);
62
+ case 17:
62
63
  case "end":
63
64
  return _context.stop();
64
65
  }
65
- }, _callee, null, [[2, 9, 15, 18]]);
66
+ }, _callee, null, [[2, 9, 14, 17]]);
66
67
  }));
67
68
  return _executeWithTimeout.apply(this, arguments);
68
69
  }