@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.
- package/ams-checkout.js +3 -3
- package/dist/ams-checkout.min.js +1 -1
- package/esm/config/index.js +1 -1
- package/esm/core/component/element/modernElementController/index.d.ts +4 -1
- package/esm/core/component/element/modernElementController/index.js +184 -132
- package/esm/modern/index.js +1 -1
- package/esm/modern/loadAntomTracker.d.ts +7 -0
- package/esm/modern/loadAntomTracker.js +64 -0
- package/esm/modern/tools.js +1 -1
- package/esm/tsdoc-metadata.json +1 -1
- package/esm/util/logger.js +1 -1
- package/esm/util/timezone.d.ts +1 -0
- package/esm/util/timezone.js +8 -0
- package/package.json +1 -1
- package/types.d.ts +256 -11
- package/types.untrimmed.d.ts +273 -11
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
var _excluded = ["onStatusChange"],
|
|
2
2
|
_excluded2 = ["onBeforeConfirm"];
|
|
3
|
-
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
3
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
5
4
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
6
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
7
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
8
5
|
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
9
6
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
7
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
8
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
9
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
10
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
11
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
12
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
13
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
10
14
|
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
11
15
|
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
12
16
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
@@ -33,25 +37,27 @@ import { ERRORMESSAGE, PROMISE_CALLBACK_CODE } from "../../../../constant";
|
|
|
33
37
|
import { BusManager, BusMessage } from "../../../bus";
|
|
34
38
|
import { ApplePayActionEnum } from "../../../bus/interface";
|
|
35
39
|
import { shouldQueryOneAccount } from "../../../utils/connectConfig";
|
|
36
|
-
import { ApplePayHostService, awaitWrap, buildPageUrl, buildRecurringPaymentRequest, checkSessionData, debug, debugError, getDevReqConfig, getLocaleFromRenderData,
|
|
40
|
+
import { ApplePayHostService, awaitWrap, buildPageUrl, buildRecurringPaymentRequest, checkSessionData, debug, debugError, getDevReqConfig, getLocaleFromRenderData, getMetaData, getModalMessageTrackData, installModalMessageMonitor, MessageType, ModalPort, oneAccountQuery, openModal, OpenSDKError, parseHostSign, parseTrackerId, request, SDKBridge, sdkQuery, sdkTracker, showToast, themeColorMap } from "../../../../modern/tools";
|
|
37
41
|
import { getApplePayPaymentSession } from "../../../../service";
|
|
38
42
|
import { device } from "../../../../util";
|
|
39
43
|
import { BEFORE_CONFIRM_TIMEOUT_MS, executeWithTimeout, MERCHANT_CONFIRM_ABORT_CODE, MERCHANT_CONFIRM_TIMEOUT_CODE } from "../../../../util/beforeConfirm";
|
|
40
44
|
import CallApp from "../../../../util/intl-callapp/es/main";
|
|
41
45
|
import { LogConfig, Logger } from "../../../../util/logger";
|
|
46
|
+
import { getIdengineTimezone } from "../../../../util/timezone";
|
|
42
47
|
import { v4 as uuid } from 'uuid';
|
|
43
48
|
import { EventCallbackCode } from "../type";
|
|
44
49
|
import { safeParse } from "../util";
|
|
45
50
|
import { adaptAppearance, adaptSubmitResult } from "./adapter";
|
|
46
51
|
|
|
47
52
|
// ============================================================
|
|
48
|
-
//
|
|
49
|
-
// code
|
|
50
|
-
//
|
|
51
|
-
//
|
|
53
|
+
// Tracking helpers reuse the OpenSDK tracker singleton without changing OpenSDK code.
|
|
54
|
+
// Tracking code uses the 7882 prefix plus a phase suffix:
|
|
55
|
+
// 7882mount, 7882handshake, 7882element, and 7882 for errors.
|
|
56
|
+
// These calls are diagnostic only and do not change the business flow.
|
|
52
57
|
// ============================================================
|
|
53
58
|
|
|
54
|
-
var TRACK_CODE_PREFIX = '
|
|
59
|
+
var TRACK_CODE_PREFIX = '7882';
|
|
60
|
+
var MODERN_CONTROLLER_ELEMENT_TYPE = 'payment_v1';
|
|
55
61
|
|
|
56
62
|
/**
|
|
57
63
|
* 优先取 sessionData 解析出的 clientId;
|
|
@@ -75,14 +81,17 @@ var resolveMerchantId = function resolveMerchantId(parseData) {
|
|
|
75
81
|
};
|
|
76
82
|
// reportApiEnd 留为模块级,merchant_id 改为显式参数(由 runApi 从实例传入),
|
|
77
83
|
// 避免原模块级 _merchantId 的多实例共享竞争。track/trackXxx 已改为实例方法读 this.merchantId。
|
|
78
|
-
var reportApiEnd = function reportApiEnd(api, durationMs, merchantId) {
|
|
79
|
-
var extra = arguments.length >
|
|
84
|
+
var reportApiEnd = function reportApiEnd(api, durationMs, merchantId, productScene) {
|
|
85
|
+
var extra = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
|
|
80
86
|
try {
|
|
81
87
|
sdkTracker.log(_objectSpread({
|
|
82
88
|
code: "".concat(TRACK_CODE_PREFIX, "api"),
|
|
83
89
|
msg: api,
|
|
84
90
|
m1: durationMs,
|
|
85
|
-
merchant_id: merchantId
|
|
91
|
+
merchant_id: merchantId,
|
|
92
|
+
product_scene: productScene,
|
|
93
|
+
element_type: MODERN_CONTROLLER_ELEMENT_TYPE,
|
|
94
|
+
idengine_timezone: getIdengineTimezone()
|
|
86
95
|
}, extra));
|
|
87
96
|
} catch (_unused2) {
|
|
88
97
|
/* 埋点失败绝不影响主流程 */
|
|
@@ -140,7 +149,7 @@ var normalizeApiInput = function normalizeApiInput(api, params) {
|
|
|
140
149
|
// 统一包裹:捕获终态(resolve/reject)后上报,原值/原异常原样透传,不影响任何已有逻辑。
|
|
141
150
|
// extraBuilder 供调用方注入实例上下文字段(如 paymentMethodType),其值覆盖 normalizeApiResult 结果。
|
|
142
151
|
var runApi = /*#__PURE__*/function () {
|
|
143
|
-
var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(api, fn, extraBuilder, inputExtra, merchantId) {
|
|
152
|
+
var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(api, fn, extraBuilder, inputExtra, merchantId, productScene) {
|
|
144
153
|
var startedAt, result;
|
|
145
154
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
146
155
|
while (1) switch (_context.prev = _context.next) {
|
|
@@ -151,12 +160,12 @@ var runApi = /*#__PURE__*/function () {
|
|
|
151
160
|
return fn();
|
|
152
161
|
case 4:
|
|
153
162
|
result = _context.sent;
|
|
154
|
-
reportApiEnd(api, Date.now() - startedAt, merchantId, _objectSpread(_objectSpread(_objectSpread({}, inputExtra), normalizeApiResult(api, result)), extraBuilder === null || extraBuilder === void 0 ? void 0 : extraBuilder(false)));
|
|
163
|
+
reportApiEnd(api, Date.now() - startedAt, merchantId, productScene, _objectSpread(_objectSpread(_objectSpread({}, inputExtra), normalizeApiResult(api, result)), extraBuilder === null || extraBuilder === void 0 ? void 0 : extraBuilder(false)));
|
|
155
164
|
return _context.abrupt("return", result);
|
|
156
165
|
case 9:
|
|
157
166
|
_context.prev = 9;
|
|
158
167
|
_context.t0 = _context["catch"](1);
|
|
159
|
-
reportApiEnd(api, Date.now() - startedAt, merchantId, _objectSpread(_objectSpread({}, inputExtra), {}, {
|
|
168
|
+
reportApiEnd(api, Date.now() - startedAt, merchantId, productScene, _objectSpread(_objectSpread({}, inputExtra), {}, {
|
|
160
169
|
d1: 'error',
|
|
161
170
|
d2: (_context.t0 === null || _context.t0 === void 0 ? void 0 : _context.t0.code) || 'UNKNOWN'
|
|
162
171
|
}, extraBuilder === null || extraBuilder === void 0 ? void 0 : extraBuilder(true)));
|
|
@@ -167,7 +176,7 @@ var runApi = /*#__PURE__*/function () {
|
|
|
167
176
|
}
|
|
168
177
|
}, _callee, null, [[1, 9]]);
|
|
169
178
|
}));
|
|
170
|
-
return function runApi(_x, _x2, _x3, _x4, _x5) {
|
|
179
|
+
return function runApi(_x, _x2, _x3, _x4, _x5, _x6) {
|
|
171
180
|
return _ref.apply(this, arguments);
|
|
172
181
|
};
|
|
173
182
|
}();
|
|
@@ -296,13 +305,15 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
296
305
|
_defineProperty(this, "currentPaymentMethodType", '');
|
|
297
306
|
/** Removes the passive host-window modal monitor for this controller. */
|
|
298
307
|
_defineProperty(this, "stopModalMessageMonitor", void 0);
|
|
299
|
-
/**
|
|
308
|
+
/** True while submitPayment is running; prevents concurrent re-entry and duplicate wallet launches. */
|
|
300
309
|
_defineProperty(this, "isSubmitting", false);
|
|
301
310
|
/**
|
|
302
311
|
* 当前实例解析出的 merchantId,供 trackXxx / reportApiEnd 统一带上。
|
|
303
312
|
* 实例隔离:多实例并发 mount 时各自持有,避免原模块级 _merchantId 的共享竞争。
|
|
304
313
|
*/
|
|
305
314
|
_defineProperty(this, "merchantId", '');
|
|
315
|
+
/** session 中的真实业务场景,仅作为埋点公共维度,不参与业务判断。 */
|
|
316
|
+
_defineProperty(this, "productScene", '');
|
|
306
317
|
this.options = options;
|
|
307
318
|
this.onStatusChange = onStatusChange;
|
|
308
319
|
if (options.sessionData) {
|
|
@@ -341,7 +352,10 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
341
352
|
sdkTracker.log(_objectSpread({
|
|
342
353
|
code: code,
|
|
343
354
|
msg: msg,
|
|
344
|
-
merchant_id: this.merchantId
|
|
355
|
+
merchant_id: this.merchantId,
|
|
356
|
+
product_scene: this.productScene,
|
|
357
|
+
element_type: MODERN_CONTROLLER_ELEMENT_TYPE,
|
|
358
|
+
idengine_timezone: getIdengineTimezone()
|
|
345
359
|
}, extra));
|
|
346
360
|
} catch (_unused3) {
|
|
347
361
|
/* 埋点失败绝不影响主流程 */
|
|
@@ -371,11 +385,44 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
371
385
|
var extra = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
372
386
|
this.track('error', msg, extra);
|
|
373
387
|
}
|
|
388
|
+
}, {
|
|
389
|
+
key: "createRequestTracker",
|
|
390
|
+
value: function createRequestTracker() {
|
|
391
|
+
var _this2 = this;
|
|
392
|
+
try {
|
|
393
|
+
var requestTracker = Object.create(sdkTracker);
|
|
394
|
+
requestTracker.log = function () {
|
|
395
|
+
try {
|
|
396
|
+
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
397
|
+
args[_key2] = arguments[_key2];
|
|
398
|
+
}
|
|
399
|
+
var event = args[0],
|
|
400
|
+
rest = args.slice(1);
|
|
401
|
+
if (event && _typeof(event) === 'object') {
|
|
402
|
+
sdkTracker.log.apply(sdkTracker, [_objectSpread(_objectSpread({}, event), {}, {
|
|
403
|
+
merchant_id: _this2.merchantId,
|
|
404
|
+
product_scene: _this2.productScene,
|
|
405
|
+
element_type: MODERN_CONTROLLER_ELEMENT_TYPE,
|
|
406
|
+
idengine_timezone: getIdengineTimezone()
|
|
407
|
+
})].concat(_toConsumableArray(rest)));
|
|
408
|
+
return;
|
|
409
|
+
}
|
|
410
|
+
sdkTracker.log.apply(sdkTracker, args);
|
|
411
|
+
} catch (_unused4) {
|
|
412
|
+
/* 埋点失败绝不影响请求 */
|
|
413
|
+
}
|
|
414
|
+
};
|
|
415
|
+
return requestTracker;
|
|
416
|
+
} catch (_unused5) {
|
|
417
|
+
return sdkTracker;
|
|
418
|
+
}
|
|
419
|
+
}
|
|
374
420
|
}, {
|
|
375
421
|
key: "mount",
|
|
376
422
|
value: function () {
|
|
377
423
|
var _mount = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(renderOptions, sdkSelector) {
|
|
378
|
-
var
|
|
424
|
+
var _this3 = this;
|
|
425
|
+
var _metaData$paymentSess, metaData;
|
|
379
426
|
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
380
427
|
while (1) switch (_context2.prev = _context2.next) {
|
|
381
428
|
case 0:
|
|
@@ -384,23 +431,25 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
384
431
|
// 缺失/无效时会 throw,这里容错吞掉——失败的校验仍由后续 setup() 内的 checkSessionData
|
|
385
432
|
// 抛出、走 mount_error 统一上报,不改变错误时序。
|
|
386
433
|
try {
|
|
387
|
-
|
|
388
|
-
|
|
434
|
+
metaData = checkSessionData(this.options.sessionData, 'ELEMENT_PAYMENT');
|
|
435
|
+
this.merchantId = resolveMerchantId(metaData);
|
|
436
|
+
this.productScene = (metaData === null || metaData === void 0 || (_metaData$paymentSess = metaData.paymentSessionConfig) === null || _metaData$paymentSess === void 0 ? void 0 : _metaData$paymentSess.productScene) || '';
|
|
437
|
+
} catch (_unused6) {
|
|
389
438
|
/* setup 校验异常会统一上报 */
|
|
390
439
|
}
|
|
391
440
|
return _context2.abrupt("return", runApi('mount', function () {
|
|
392
|
-
return
|
|
441
|
+
return _this3.doMount(renderOptions, sdkSelector);
|
|
393
442
|
}, undefined, normalizeApiInput('mount', {
|
|
394
443
|
renderOptions: renderOptions,
|
|
395
444
|
sdkSelector: sdkSelector
|
|
396
|
-
}), this.merchantId));
|
|
445
|
+
}), this.merchantId, this.productScene));
|
|
397
446
|
case 2:
|
|
398
447
|
case "end":
|
|
399
448
|
return _context2.stop();
|
|
400
449
|
}
|
|
401
450
|
}, _callee2, this);
|
|
402
451
|
}));
|
|
403
|
-
function mount(
|
|
452
|
+
function mount(_x7, _x8) {
|
|
404
453
|
return _mount.apply(this, arguments);
|
|
405
454
|
}
|
|
406
455
|
return mount;
|
|
@@ -454,7 +503,7 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
454
503
|
if (iframeOrigin && iframeOrigin !== 'null') {
|
|
455
504
|
this.bridge.setOrigin(iframeOrigin);
|
|
456
505
|
}
|
|
457
|
-
} catch (
|
|
506
|
+
} catch (_unused7) {
|
|
458
507
|
// URL 解析失败时保持默认 origin
|
|
459
508
|
}
|
|
460
509
|
} else {
|
|
@@ -547,7 +596,7 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
547
596
|
}
|
|
548
597
|
}, _callee3, this, [[8, 44]]);
|
|
549
598
|
}));
|
|
550
|
-
function doMount(
|
|
599
|
+
function doMount(_x9, _x10) {
|
|
551
600
|
return _doMount.apply(this, arguments);
|
|
552
601
|
}
|
|
553
602
|
return doMount;
|
|
@@ -566,8 +615,9 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
566
615
|
key: "setup",
|
|
567
616
|
value: (function () {
|
|
568
617
|
var _setup = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(renderOptions) {
|
|
569
|
-
var _parseData$
|
|
570
|
-
|
|
618
|
+
var _parseData$paymentSes,
|
|
619
|
+
_parseData$connectFac,
|
|
620
|
+
_this4 = this,
|
|
571
621
|
_parseData$paymentMet,
|
|
572
622
|
_sdkQueryResult$data;
|
|
573
623
|
var sessionData, parseData, lastEnv, isConnect, shouldQueryOneAccountFlag, paymentSessionConfig, genSdkQueryPromise, genOneAccountQueryPromise, promises, cancelDestroyCallback, destroyPromise, queryPromise, _yield$Promise$race$f, _yield$Promise$race$f2, sdkQueryResult, oneAccountQueryResult, _sdkQueryResult$error, _sdkQueryResult$error2, _oneAccountQueryResul, _oneAccountQueryResul2, preferredLocale, locale, renderDataError;
|
|
@@ -578,21 +628,23 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
578
628
|
this.trackMount('setup_start');
|
|
579
629
|
// 缓存起来,submit时使用
|
|
580
630
|
this.notRedirectAfterComplete = renderOptions.notRedirectAfterComplete || false;
|
|
581
|
-
sessionData = this.options.sessionData; // checkSessionData
|
|
582
|
-
//
|
|
631
|
+
sessionData = this.options.sessionData; // checkSessionData throws AntomSDKError (SESSION_DATA_INVALID) on invalid session data.
|
|
632
|
+
// The mount catch reports it as mount_error, so no extra handling is needed here.
|
|
583
633
|
parseData = checkSessionData(sessionData, 'ELEMENT_PAYMENT');
|
|
634
|
+
this.merchantId || (this.merchantId = resolveMerchantId(parseData));
|
|
635
|
+
this.productScene = (parseData === null || parseData === void 0 || (_parseData$paymentSes = parseData.paymentSessionConfig) === null || _parseData$paymentSes === void 0 ? void 0 : _parseData$paymentSes.productScene) || '';
|
|
584
636
|
lastEnv = this.options.environment === 'sandbox' ? 'sandbox' : 'prod';
|
|
585
637
|
this.options.environment;
|
|
586
638
|
|
|
587
639
|
// 初始化 request 全局配置,使 sdkQuery 能正确发起请求
|
|
588
|
-
// tracker
|
|
589
|
-
//
|
|
640
|
+
// 实例级 tracker wrapper 接入 HTTP 自动埋点,并仅在日志中补齐 controller 公共维度。
|
|
641
|
+
// 不传 tracker 则 sdkQuery/submitPay/inquiry 等网络细节不可观测。
|
|
590
642
|
request.setGlobalOptions(_objectSpread(_objectSpread({
|
|
591
643
|
hostSign: parseHostSign(sessionData),
|
|
592
644
|
env: lastEnv
|
|
593
645
|
}, getDevReqConfig()), {}, {
|
|
594
|
-
sdkVersion: "2.0.
|
|
595
|
-
tracker:
|
|
646
|
+
sdkVersion: "2.0.29" || '',
|
|
647
|
+
tracker: this.createRequestTracker()
|
|
596
648
|
}));
|
|
597
649
|
isConnect = !!(parseData !== null && parseData !== void 0 && (_parseData$connectFac = parseData.connectFactor) !== null && _parseData$connectFac !== void 0 && _parseData$connectFac.enableConnect);
|
|
598
650
|
shouldQueryOneAccountFlag = shouldQueryOneAccount(isConnect, parseData === null || parseData === void 0 ? void 0 : parseData.extendInfo);
|
|
@@ -604,14 +656,14 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
604
656
|
isUserPreferredLocale: true
|
|
605
657
|
},
|
|
606
658
|
merchantAppointParam: (_renderOptions$mercha = renderOptions.merchantAppointParam) !== null && _renderOptions$mercha !== void 0 && _renderOptions$mercha.storedCard ? renderOptions.merchantAppointParam : undefined,
|
|
607
|
-
notRedirectAfterComplete:
|
|
659
|
+
notRedirectAfterComplete: _this4.notRedirectAfterComplete,
|
|
608
660
|
// sdk需要传入该字段
|
|
609
661
|
paymentSessionConfig: parseData === null || parseData === void 0 ? void 0 : parseData.paymentSessionConfig,
|
|
610
662
|
paymentSessionData: sessionData
|
|
611
663
|
}, {
|
|
612
664
|
// 传商户初始化的 locale,服务端据此返回对应语言(缺失则回落用户偏好/en_US)
|
|
613
665
|
envInfo: {
|
|
614
|
-
locale:
|
|
666
|
+
locale: _this4.options.locale
|
|
615
667
|
}
|
|
616
668
|
}).catch(recoverSdkQueryBusinessResponse));
|
|
617
669
|
};
|
|
@@ -627,14 +679,14 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
627
679
|
promises = shouldQueryOneAccountFlag ? [genSdkQueryPromise(), genOneAccountQueryPromise()] : [genSdkQueryPromise(), undefined];
|
|
628
680
|
cancelDestroyCallback = function cancelDestroyCallback() {};
|
|
629
681
|
destroyPromise = new Promise(function (_, reject) {
|
|
630
|
-
cancelDestroyCallback =
|
|
682
|
+
cancelDestroyCallback = _this4.onDestroy(function () {
|
|
631
683
|
return reject(getDestroyedError());
|
|
632
684
|
});
|
|
633
685
|
});
|
|
634
686
|
queryPromise = Promise.all(promises);
|
|
635
|
-
_context4.next =
|
|
687
|
+
_context4.next = 21;
|
|
636
688
|
return Promise.race([queryPromise, destroyPromise]).finally(cancelDestroyCallback);
|
|
637
|
-
case
|
|
689
|
+
case 21:
|
|
638
690
|
_yield$Promise$race$f = _context4.sent;
|
|
639
691
|
_yield$Promise$race$f2 = _slicedToArray(_yield$Promise$race$f, 2);
|
|
640
692
|
sdkQueryResult = _yield$Promise$race$f2[0];
|
|
@@ -689,7 +741,7 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
689
741
|
// 新sdk字段
|
|
690
742
|
locale: locale,
|
|
691
743
|
// 新sdk字段
|
|
692
|
-
sdkVersion: "2.0.
|
|
744
|
+
sdkVersion: "2.0.29" || '',
|
|
693
745
|
// 新sdk字段
|
|
694
746
|
merchantId: (sdkQueryResult === null || sdkQueryResult === void 0 || (_sdkQueryResult$data = sdkQueryResult.data) === null || _sdkQueryResult$data === void 0 ? void 0 : _sdkQueryResult$data.merchantId) || '',
|
|
695
747
|
// 新sdk字段
|
|
@@ -699,13 +751,13 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
699
751
|
env: lastEnv
|
|
700
752
|
}, getDevReqConfig())
|
|
701
753
|
});
|
|
702
|
-
case
|
|
754
|
+
case 31:
|
|
703
755
|
case "end":
|
|
704
756
|
return _context4.stop();
|
|
705
757
|
}
|
|
706
758
|
}, _callee4, this);
|
|
707
759
|
}));
|
|
708
|
-
function setup(
|
|
760
|
+
function setup(_x11) {
|
|
709
761
|
return _setup.apply(this, arguments);
|
|
710
762
|
}
|
|
711
763
|
return setup;
|
|
@@ -802,20 +854,20 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
802
854
|
}, {
|
|
803
855
|
key: "bindBridgeEvents",
|
|
804
856
|
value: function bindBridgeEvents() {
|
|
805
|
-
var
|
|
857
|
+
var _this5 = this;
|
|
806
858
|
this.bridge.on(MessageType.HEIGHT_UPDATE, function (height) {
|
|
807
|
-
if (
|
|
859
|
+
if (_this5.iframe) _this5.iframe.style.height = "".concat(height, "px");
|
|
808
860
|
});
|
|
809
861
|
this.bridge.on(AMSMessageType.SHOWTOAST, function (payload, _ports, meta) {
|
|
810
|
-
var
|
|
811
|
-
if (meta && meta.source !== ((
|
|
862
|
+
var _this5$iframe, _this5$modalIframe;
|
|
863
|
+
if (meta && meta.source !== ((_this5$iframe = _this5.iframe) === null || _this5$iframe === void 0 ? void 0 : _this5$iframe.contentWindow) && meta.source !== ((_this5$modalIframe = _this5.modalIframe) === null || _this5$modalIframe === void 0 ? void 0 : _this5$modalIframe.contentWindow)) {
|
|
812
864
|
return;
|
|
813
865
|
}
|
|
814
866
|
showToast(payload);
|
|
815
867
|
});
|
|
816
868
|
this.bridge.on(MessageType.REDIRECT, function (payload, _ports, meta) {
|
|
817
|
-
var
|
|
818
|
-
if (meta && meta.source !== ((
|
|
869
|
+
var _this5$iframe2, _this5$modalIframe2;
|
|
870
|
+
if (meta && meta.source !== ((_this5$iframe2 = _this5.iframe) === null || _this5$iframe2 === void 0 ? void 0 : _this5$iframe2.contentWindow) && meta.source !== ((_this5$modalIframe2 = _this5.modalIframe) === null || _this5$modalIframe2 === void 0 ? void 0 : _this5$modalIframe2.contentWindow)) {
|
|
819
871
|
return;
|
|
820
872
|
}
|
|
821
873
|
var url = payload.url,
|
|
@@ -824,7 +876,7 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
824
876
|
schemaUrl = payload.schemaUrl,
|
|
825
877
|
destroy = payload.destroy;
|
|
826
878
|
// d1=mode(redirect/replace) d2=跳转类型 d3=兜底url d4=appLinkUrl d5=schemaUrl d6=是否销毁
|
|
827
|
-
|
|
879
|
+
_this5.trackElement('redirect', {
|
|
828
880
|
d1: mode || 'redirect',
|
|
829
881
|
d2: appLinkUrl ? 'app_link' : schemaUrl ? 'schema' : 'url',
|
|
830
882
|
d3: url || '',
|
|
@@ -833,7 +885,7 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
833
885
|
d6: destroy ? '1' : '0'
|
|
834
886
|
});
|
|
835
887
|
if (destroy) {
|
|
836
|
-
|
|
888
|
+
_this5.destroy();
|
|
837
889
|
}
|
|
838
890
|
function fallbackJump() {
|
|
839
891
|
if (mode === 'replace') {
|
|
@@ -847,7 +899,7 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
847
899
|
var app = new CallApp({
|
|
848
900
|
resultJudgmentTime: 2000,
|
|
849
901
|
fallback: function fallback() {
|
|
850
|
-
|
|
902
|
+
_this5.trackElement('redirect_fallback', {
|
|
851
903
|
d1: 'callapp_failed',
|
|
852
904
|
d2: url || ''
|
|
853
905
|
});
|
|
@@ -862,7 +914,7 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
862
914
|
fallbackJump();
|
|
863
915
|
}
|
|
864
916
|
} catch (error) {
|
|
865
|
-
|
|
917
|
+
_this5.trackError('redirect_error', {
|
|
866
918
|
d1: 'callapp_exception',
|
|
867
919
|
d2: (error === null || error === void 0 ? void 0 : error.message) || '',
|
|
868
920
|
d3: url || ''
|
|
@@ -871,34 +923,34 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
871
923
|
}
|
|
872
924
|
});
|
|
873
925
|
this.bridge.on(MessageType.OPEN_MODAL, function (payload, _ports, meta) {
|
|
874
|
-
var
|
|
875
|
-
if (meta && meta.source !== ((
|
|
926
|
+
var _this5$iframe3;
|
|
927
|
+
if (meta && meta.source !== ((_this5$iframe3 = _this5.iframe) === null || _this5$iframe3 === void 0 ? void 0 : _this5$iframe3.contentWindow)) {
|
|
876
928
|
return;
|
|
877
929
|
}
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
930
|
+
_this5.handleOpenModal(payload);
|
|
931
|
+
_this5.bridge.once(MessageType.CLOSE_MODAL, function () {
|
|
932
|
+
_this5.handleCloseModal();
|
|
881
933
|
});
|
|
882
934
|
});
|
|
883
935
|
this.bridge.on(MessageType.DESTROY_ELEMENT, function (_payload, _ports, meta) {
|
|
884
|
-
var
|
|
885
|
-
if (meta && meta.source !== ((
|
|
936
|
+
var _this5$iframe4;
|
|
937
|
+
if (meta && meta.source !== ((_this5$iframe4 = _this5.iframe) === null || _this5$iframe4 === void 0 ? void 0 : _this5$iframe4.contentWindow)) {
|
|
886
938
|
return;
|
|
887
939
|
}
|
|
888
|
-
|
|
940
|
+
_this5.destroy();
|
|
889
941
|
});
|
|
890
942
|
|
|
891
943
|
// skipRenderPaymentMethod 场景:webapp 委托 SDK 全权拉起 ApplePay,fire-and-forget
|
|
892
944
|
// 走 plugin/applepay 标准链路(onEventCallback 自动通知商户)
|
|
893
945
|
this.bridge.on(AMSMessageType.HANDLE_PAYMENT, function () {
|
|
894
|
-
|
|
946
|
+
_this5.handleHandlePayment();
|
|
895
947
|
});
|
|
896
948
|
|
|
897
949
|
// Apple Pay beforeConfirm:在 submitPayment 内通过 bridge.once 监听,此处不再注册
|
|
898
950
|
|
|
899
951
|
// 支付方式变化:iframe 通知 SDK 当前选中的支付方式类型
|
|
900
952
|
this.bridge.on(AMSMessageType.PAYMENT_METHOD_CHANGED, function (payload) {
|
|
901
|
-
|
|
953
|
+
_this5.currentPaymentMethodType = (payload === null || payload === void 0 ? void 0 : payload.type) || '';
|
|
902
954
|
});
|
|
903
955
|
}
|
|
904
956
|
|
|
@@ -912,7 +964,7 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
912
964
|
value: (function () {
|
|
913
965
|
var _handleGetApplePayToken = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7(payload, onBeforeConfirm) {
|
|
914
966
|
var _paymentMethod,
|
|
915
|
-
|
|
967
|
+
_this6 = this;
|
|
916
968
|
var sessionData, applePayProps, paymentRequest, merchantCapabilities, merchantInfo, paymentAmount, supportedNetworks, version, requiredBillingContactFields, requiredShippingContactFields, finalAmount, finalCurrency, capturedResult, recurringRequest, service, _capturedResult, errCode;
|
|
917
969
|
return _regeneratorRuntime().wrap(function _callee7$(_context7) {
|
|
918
970
|
while (1) switch (_context7.prev = _context7.next) {
|
|
@@ -984,7 +1036,7 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
984
1036
|
return _regeneratorRuntime().wrap(function _callee5$(_context5) {
|
|
985
1037
|
while (1) switch (_context5.prev = _context5.next) {
|
|
986
1038
|
case 0:
|
|
987
|
-
|
|
1039
|
+
_this6.trackElement('applepay_validate_start', {
|
|
988
1040
|
d1: 'merchant_validate'
|
|
989
1041
|
});
|
|
990
1042
|
_context5.next = 3;
|
|
@@ -993,7 +1045,7 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
993
1045
|
paymentSessionData: sessionData,
|
|
994
1046
|
merchantDomain: window.location.hostname
|
|
995
1047
|
}, {
|
|
996
|
-
env:
|
|
1048
|
+
env: _this6.options.environment,
|
|
997
1049
|
envInfo: {
|
|
998
1050
|
deviceId: ''
|
|
999
1051
|
}
|
|
@@ -1004,12 +1056,12 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
1004
1056
|
_context5.next = 7;
|
|
1005
1057
|
break;
|
|
1006
1058
|
}
|
|
1007
|
-
|
|
1059
|
+
_this6.trackElement('applepay_validate_success', {
|
|
1008
1060
|
d1: 'got_session'
|
|
1009
1061
|
});
|
|
1010
1062
|
return _context5.abrupt("return", typeof res.merchantSessionObject === 'string' ? JSON.parse(res.merchantSessionObject) : res.merchantSessionObject);
|
|
1011
1063
|
case 7:
|
|
1012
|
-
|
|
1064
|
+
_this6.trackError('applepay_merchant_validate_failed', {
|
|
1013
1065
|
d1: 'VALIDATION_FAILED',
|
|
1014
1066
|
d2: (res === null || res === void 0 ? void 0 : res.errorMessage) || 'Merchant validation failed'
|
|
1015
1067
|
});
|
|
@@ -1022,7 +1074,7 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
1022
1074
|
}
|
|
1023
1075
|
}, _callee5);
|
|
1024
1076
|
}));
|
|
1025
|
-
function validateMerchant(
|
|
1077
|
+
function validateMerchant(_x14) {
|
|
1026
1078
|
return _validateMerchant.apply(this, arguments);
|
|
1027
1079
|
}
|
|
1028
1080
|
return validateMerchant;
|
|
@@ -1052,7 +1104,7 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
1052
1104
|
isTimeout = timedOut || Date.now() - startTime >= BEFORE_CONFIRM_TIMEOUT_MS;
|
|
1053
1105
|
shouldContinue = !isTimeout && !!rawResult;
|
|
1054
1106
|
if (isTimeout) {
|
|
1055
|
-
|
|
1107
|
+
_this6.trackError('sdk_before_confirm_timeout', {
|
|
1056
1108
|
d1: 'applePay_chrome_modern'
|
|
1057
1109
|
});
|
|
1058
1110
|
}
|
|
@@ -1080,7 +1132,7 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
1080
1132
|
billingContact: billingContact,
|
|
1081
1133
|
shippingContact: shippingContact
|
|
1082
1134
|
};
|
|
1083
|
-
|
|
1135
|
+
_this6.trackElement('applepay_authorized', {
|
|
1084
1136
|
d1: token ? 'has_token' : 'no_token'
|
|
1085
1137
|
});
|
|
1086
1138
|
return _context6.abrupt("return", {
|
|
@@ -1093,7 +1145,7 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
1093
1145
|
}
|
|
1094
1146
|
}, _callee6, null, [[2, 16]]);
|
|
1095
1147
|
}));
|
|
1096
|
-
function onAuthorized(
|
|
1148
|
+
function onAuthorized(_x15) {
|
|
1097
1149
|
return _onAuthorized.apply(this, arguments);
|
|
1098
1150
|
}
|
|
1099
1151
|
return onAuthorized;
|
|
@@ -1142,7 +1194,7 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
1142
1194
|
}
|
|
1143
1195
|
}, _callee7, this, [[15, 22]]);
|
|
1144
1196
|
}));
|
|
1145
|
-
function handleGetApplePayToken(
|
|
1197
|
+
function handleGetApplePayToken(_x12, _x13) {
|
|
1146
1198
|
return _handleGetApplePayToken.apply(this, arguments);
|
|
1147
1199
|
}
|
|
1148
1200
|
return handleGetApplePayToken;
|
|
@@ -1167,7 +1219,7 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
1167
1219
|
key: "handleGetGooglePayToken",
|
|
1168
1220
|
value: function handleGetGooglePayToken(payload) {
|
|
1169
1221
|
var _data$paymentMethodDe,
|
|
1170
|
-
|
|
1222
|
+
_this7 = this,
|
|
1171
1223
|
_google;
|
|
1172
1224
|
var data = payload === null || payload === void 0 ? void 0 : payload.data;
|
|
1173
1225
|
var googlePayProps = data === null || data === void 0 || (_data$paymentMethodDe = data.paymentMethodDetail) === null || _data$paymentMethodDe === void 0 ? void 0 : _data$paymentMethodDe.googlePayProps;
|
|
@@ -1211,10 +1263,10 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
1211
1263
|
};
|
|
1212
1264
|
}).then(function (paymentData) {
|
|
1213
1265
|
if (paymentData) {
|
|
1214
|
-
|
|
1266
|
+
_this7.trackElement('googlepay_token_success', {
|
|
1215
1267
|
d1: 'has_token'
|
|
1216
1268
|
});
|
|
1217
|
-
|
|
1269
|
+
_this7.bridge.send(AMSMessageType.GET_GOOGLE_PAY_TOKEN_REPLY, {
|
|
1218
1270
|
success: true,
|
|
1219
1271
|
result: paymentData
|
|
1220
1272
|
});
|
|
@@ -1222,16 +1274,16 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
1222
1274
|
}).catch(function (err) {
|
|
1223
1275
|
var statusCode = (err === null || err === void 0 ? void 0 : err.statusCode) || 'GOOGLE_PAY_PAYMENT_FAILED';
|
|
1224
1276
|
if (statusCode === 'CANCELED') {
|
|
1225
|
-
|
|
1277
|
+
_this7.trackElement('googlepay_cancel', {
|
|
1226
1278
|
d1: 'user_cancel'
|
|
1227
1279
|
});
|
|
1228
1280
|
} else {
|
|
1229
|
-
|
|
1281
|
+
_this7.trackError('googlepay_token_failed', {
|
|
1230
1282
|
d1: statusCode,
|
|
1231
1283
|
d2: (err === null || err === void 0 ? void 0 : err.statusMessage) || ''
|
|
1232
1284
|
});
|
|
1233
1285
|
}
|
|
1234
|
-
|
|
1286
|
+
_this7.bridge.send(AMSMessageType.GET_GOOGLE_PAY_TOKEN_REPLY, {
|
|
1235
1287
|
success: false,
|
|
1236
1288
|
err: _objectSpread({
|
|
1237
1289
|
statusCode: statusCode
|
|
@@ -1263,10 +1315,10 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
1263
1315
|
loadAndPay();
|
|
1264
1316
|
};
|
|
1265
1317
|
script.onerror = function () {
|
|
1266
|
-
|
|
1318
|
+
_this7.trackError('googlepay_script_load_failed', {
|
|
1267
1319
|
d1: 'script_error'
|
|
1268
1320
|
});
|
|
1269
|
-
|
|
1321
|
+
_this7.bridge.send(AMSMessageType.GET_GOOGLE_PAY_TOKEN_REPLY, {
|
|
1270
1322
|
success: false,
|
|
1271
1323
|
err: {
|
|
1272
1324
|
statusCode: 'GOOGLE_PAY_NOT_SUPPORTED'
|
|
@@ -1315,7 +1367,7 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
1315
1367
|
}, {
|
|
1316
1368
|
key: "handleBeforeConfirmInternal",
|
|
1317
1369
|
value: function handleBeforeConfirmInternal(onBeforeConfirm) {
|
|
1318
|
-
var
|
|
1370
|
+
var _this8 = this;
|
|
1319
1371
|
if (!onBeforeConfirm) {
|
|
1320
1372
|
logger.logInfo({
|
|
1321
1373
|
title: 'sdk_before_confirm_skip'
|
|
@@ -1352,7 +1404,7 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
1352
1404
|
}, {
|
|
1353
1405
|
shouldContinue: shouldContinue
|
|
1354
1406
|
});
|
|
1355
|
-
|
|
1407
|
+
_this8.bridge.send(AMSMessageType.BEFORE_CONFIRM_REPLY, _objectSpread({
|
|
1356
1408
|
success: true,
|
|
1357
1409
|
result: !!shouldContinue
|
|
1358
1410
|
}, isTimeout ? {
|
|
@@ -1365,7 +1417,7 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
1365
1417
|
errorMessage: String((error === null || error === void 0 ? void 0 : error.message) || error).slice(0, 200),
|
|
1366
1418
|
path: 'modernController_bridge'
|
|
1367
1419
|
});
|
|
1368
|
-
|
|
1420
|
+
_this8.bridge.send(AMSMessageType.BEFORE_CONFIRM_REPLY, {
|
|
1369
1421
|
success: false,
|
|
1370
1422
|
result: false
|
|
1371
1423
|
});
|
|
@@ -1379,12 +1431,12 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
1379
1431
|
}, {
|
|
1380
1432
|
key: "waitForReadyHandshake",
|
|
1381
1433
|
value: function waitForReadyHandshake() {
|
|
1382
|
-
var
|
|
1434
|
+
var _this9 = this;
|
|
1383
1435
|
return new Promise(function (resolve, reject) {
|
|
1384
1436
|
var cancelDestroyCallback = function cancelDestroyCallback() {};
|
|
1385
1437
|
var timer = setTimeout(function () {
|
|
1386
1438
|
cancelDestroyCallback();
|
|
1387
|
-
|
|
1439
|
+
_this9.trackError('ready_handshake_timeout', {
|
|
1388
1440
|
d1: String(MOUNT_TIMEOUT)
|
|
1389
1441
|
});
|
|
1390
1442
|
reject({
|
|
@@ -1392,16 +1444,16 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
1392
1444
|
message: 'An error occurred; the transaction cannot be initiated.'
|
|
1393
1445
|
});
|
|
1394
1446
|
}, MOUNT_TIMEOUT);
|
|
1395
|
-
cancelDestroyCallback =
|
|
1447
|
+
cancelDestroyCallback = _this9.onDestroy(function () {
|
|
1396
1448
|
clearTimeout(timer);
|
|
1397
1449
|
reject(getDestroyedError());
|
|
1398
1450
|
});
|
|
1399
|
-
|
|
1400
|
-
var
|
|
1451
|
+
_this9.bridge.once(MessageType.READY_HANDSHAKE, function () {
|
|
1452
|
+
var _this9$iframe;
|
|
1401
1453
|
clearTimeout(timer);
|
|
1402
1454
|
cancelDestroyCallback();
|
|
1403
|
-
if (!((
|
|
1404
|
-
|
|
1455
|
+
if (!((_this9$iframe = _this9.iframe) !== null && _this9$iframe !== void 0 && _this9$iframe.contentWindow)) {
|
|
1456
|
+
_this9.trackError('iframe_contentwindow_unavailable', {
|
|
1405
1457
|
d1: 'after_ready_handshake'
|
|
1406
1458
|
});
|
|
1407
1459
|
reject({
|
|
@@ -1410,9 +1462,9 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
1410
1462
|
});
|
|
1411
1463
|
return;
|
|
1412
1464
|
}
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
m1:
|
|
1465
|
+
_this9.bridge.setTarget(_this9.iframe.contentWindow);
|
|
1466
|
+
_this9.trackHandshake('ready_handshake_received', {
|
|
1467
|
+
m1: _this9._mountStartTime ? Date.now() - _this9._mountStartTime : 0
|
|
1416
1468
|
});
|
|
1417
1469
|
resolve();
|
|
1418
1470
|
});
|
|
@@ -1437,12 +1489,12 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
1437
1489
|
}, {
|
|
1438
1490
|
key: "waitForHandshakeAck",
|
|
1439
1491
|
value: function waitForHandshakeAck() {
|
|
1440
|
-
var
|
|
1492
|
+
var _this10 = this;
|
|
1441
1493
|
return new Promise(function (resolve, reject) {
|
|
1442
1494
|
var cancelDestroyCallback = function cancelDestroyCallback() {};
|
|
1443
1495
|
var timer = setTimeout(function () {
|
|
1444
1496
|
cancelDestroyCallback();
|
|
1445
|
-
|
|
1497
|
+
_this10.trackError('handshake_ack_timeout', {
|
|
1446
1498
|
d1: String(MOUNT_TIMEOUT)
|
|
1447
1499
|
});
|
|
1448
1500
|
reject({
|
|
@@ -1450,15 +1502,15 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
1450
1502
|
message: 'An error occurred; the transaction cannot be initiated.'
|
|
1451
1503
|
});
|
|
1452
1504
|
}, MOUNT_TIMEOUT);
|
|
1453
|
-
cancelDestroyCallback =
|
|
1505
|
+
cancelDestroyCallback = _this10.onDestroy(function () {
|
|
1454
1506
|
clearTimeout(timer);
|
|
1455
1507
|
reject(getDestroyedError());
|
|
1456
1508
|
});
|
|
1457
|
-
|
|
1509
|
+
_this10.bridge.once(MessageType.HANDSHAKE_ACK, function () {
|
|
1458
1510
|
clearTimeout(timer);
|
|
1459
1511
|
cancelDestroyCallback();
|
|
1460
|
-
|
|
1461
|
-
m1:
|
|
1512
|
+
_this10.trackHandshake('handshake_ack_received', {
|
|
1513
|
+
m1: _this10._mountStartTime ? Date.now() - _this10._mountStartTime : 0
|
|
1462
1514
|
});
|
|
1463
1515
|
resolve();
|
|
1464
1516
|
});
|
|
@@ -1468,24 +1520,24 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
1468
1520
|
key: "submitPayment",
|
|
1469
1521
|
value: function () {
|
|
1470
1522
|
var _submitPayment = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8(params) {
|
|
1471
|
-
var
|
|
1523
|
+
var _this11 = this;
|
|
1472
1524
|
return _regeneratorRuntime().wrap(function _callee8$(_context8) {
|
|
1473
1525
|
while (1) switch (_context8.prev = _context8.next) {
|
|
1474
1526
|
case 0:
|
|
1475
1527
|
return _context8.abrupt("return", runApi('submitPayment', function () {
|
|
1476
|
-
return
|
|
1528
|
+
return _this11.doSubmitPayment(params);
|
|
1477
1529
|
}, function () {
|
|
1478
|
-
return
|
|
1479
|
-
d4:
|
|
1530
|
+
return _this11.currentPaymentMethodType ? {
|
|
1531
|
+
d4: _this11.currentPaymentMethodType
|
|
1480
1532
|
} : {};
|
|
1481
|
-
}, normalizeApiInput('submitPayment', params), this.merchantId));
|
|
1533
|
+
}, normalizeApiInput('submitPayment', params), this.merchantId, this.productScene));
|
|
1482
1534
|
case 1:
|
|
1483
1535
|
case "end":
|
|
1484
1536
|
return _context8.stop();
|
|
1485
1537
|
}
|
|
1486
1538
|
}, _callee8, this);
|
|
1487
1539
|
}));
|
|
1488
|
-
function submitPayment(
|
|
1540
|
+
function submitPayment(_x16) {
|
|
1489
1541
|
return _submitPayment.apply(this, arguments);
|
|
1490
1542
|
}
|
|
1491
1543
|
return submitPayment;
|
|
@@ -1494,7 +1546,7 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
1494
1546
|
key: "doSubmitPayment",
|
|
1495
1547
|
value: function () {
|
|
1496
1548
|
var _doSubmitPayment = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee9(params) {
|
|
1497
|
-
var
|
|
1549
|
+
var _this12 = this;
|
|
1498
1550
|
var _this$options$loading7, _this$options$loading8, isApplePay, _ref6, onBeforeConfirm, serializableParams, startTime, _yield$executeWithTim2, shouldContinue, timedOut, isTimeout, hasBeforeConfirmForApplePay, hasAmount, hasCurrency, cleanups, _result$error5, resultPromise, result, _this$options$loading9, _this$options$loading10;
|
|
1499
1551
|
return _regeneratorRuntime().wrap(function _callee9$(_context9) {
|
|
1500
1552
|
while (1) switch (_context9.prev = _context9.next) {
|
|
@@ -1647,20 +1699,20 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
1647
1699
|
resultPromise = new Promise(function (resolve) {
|
|
1648
1700
|
// 先注册事件监听,再发送 SUBMIT,避免 webapp 快速响应导致消息丢失
|
|
1649
1701
|
// PC 非 Safari:webapp 委托 SDK 拉起 Apple Pay 拿 token
|
|
1650
|
-
cleanups.push(
|
|
1651
|
-
|
|
1702
|
+
cleanups.push(_this12.bridge.once(AMSMessageType.GET_APPLE_PAY_TOKEN, function (payload) {
|
|
1703
|
+
_this12.handleGetApplePayToken(payload, onBeforeConfirm).then(function () {
|
|
1652
1704
|
// token 已回传 webapp,继续等 SUBMIT_REPLY
|
|
1653
1705
|
});
|
|
1654
1706
|
}));
|
|
1655
1707
|
// Web element GP:webapp 委托 SDK/父 frame 调 loadPaymentData 拿 token
|
|
1656
|
-
cleanups.push(
|
|
1657
|
-
|
|
1708
|
+
cleanups.push(_this12.bridge.once(AMSMessageType.GET_GOOGLE_PAY_TOKEN, function (payload) {
|
|
1709
|
+
_this12.handleGetGooglePayToken(payload);
|
|
1658
1710
|
}));
|
|
1659
1711
|
// Safari:webapp 请求执行商户 onBeforeConfirm 回调
|
|
1660
|
-
cleanups.push(
|
|
1661
|
-
|
|
1712
|
+
cleanups.push(_this12.bridge.once(AMSMessageType.BEFORE_CONFIRM, function () {
|
|
1713
|
+
_this12.handleBeforeConfirmInternal(onBeforeConfirm || null);
|
|
1662
1714
|
}));
|
|
1663
|
-
cleanups.push(
|
|
1715
|
+
cleanups.push(_this12.bridge.once(MessageType.SUBMIT_REPLY, resolve));
|
|
1664
1716
|
}); // 监听注册完成后再发送 SUBMIT,确保不会遗漏快速响应
|
|
1665
1717
|
this.send(MessageType.SUBMIT, _objectSpread(_objectSpread({}, serializableParams), {}, {
|
|
1666
1718
|
redirect: this.notRedirectAfterComplete ? 'if_required' : 'always',
|
|
@@ -1691,7 +1743,7 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
1691
1743
|
cleanups.forEach(function (fn) {
|
|
1692
1744
|
try {
|
|
1693
1745
|
fn();
|
|
1694
|
-
} catch (
|
|
1746
|
+
} catch (_unused9) {
|
|
1695
1747
|
/* ignore cleanup error */
|
|
1696
1748
|
}
|
|
1697
1749
|
});
|
|
@@ -1707,7 +1759,7 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
1707
1759
|
}
|
|
1708
1760
|
}, _callee9, this, [[7,, 60, 63], [12, 26], [42, 52, 56, 60]]);
|
|
1709
1761
|
}));
|
|
1710
|
-
function doSubmitPayment(
|
|
1762
|
+
function doSubmitPayment(_x17) {
|
|
1711
1763
|
return _doSubmitPayment.apply(this, arguments);
|
|
1712
1764
|
}
|
|
1713
1765
|
return doSubmitPayment;
|
|
@@ -1716,13 +1768,13 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
1716
1768
|
key: "validateFields",
|
|
1717
1769
|
value: function () {
|
|
1718
1770
|
var _validateFields = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee10() {
|
|
1719
|
-
var
|
|
1771
|
+
var _this13 = this;
|
|
1720
1772
|
return _regeneratorRuntime().wrap(function _callee10$(_context10) {
|
|
1721
1773
|
while (1) switch (_context10.prev = _context10.next) {
|
|
1722
1774
|
case 0:
|
|
1723
1775
|
return _context10.abrupt("return", runApi('validateFields', function () {
|
|
1724
|
-
return
|
|
1725
|
-
}, undefined, undefined, this.merchantId));
|
|
1776
|
+
return _this13.doValidateFields();
|
|
1777
|
+
}, undefined, undefined, this.merchantId, this.productScene));
|
|
1726
1778
|
case 1:
|
|
1727
1779
|
case "end":
|
|
1728
1780
|
return _context10.stop();
|
|
@@ -1738,7 +1790,7 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
1738
1790
|
key: "doValidateFields",
|
|
1739
1791
|
value: function () {
|
|
1740
1792
|
var _doValidateFields = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee11() {
|
|
1741
|
-
var
|
|
1793
|
+
var _this14 = this;
|
|
1742
1794
|
return _regeneratorRuntime().wrap(function _callee11$(_context11) {
|
|
1743
1795
|
while (1) switch (_context11.prev = _context11.next) {
|
|
1744
1796
|
case 0:
|
|
@@ -1756,17 +1808,17 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
1756
1808
|
this.send(AMSMessageType.VALIDATE);
|
|
1757
1809
|
return _context11.abrupt("return", new Promise(function (resolve) {
|
|
1758
1810
|
var timer = setTimeout(function () {
|
|
1759
|
-
|
|
1811
|
+
_this14.trackError('validate_fields_timeout', {
|
|
1760
1812
|
d1: '15000'
|
|
1761
1813
|
});
|
|
1762
1814
|
resolve({
|
|
1763
1815
|
isValid: false
|
|
1764
1816
|
});
|
|
1765
1817
|
}, 15000);
|
|
1766
|
-
|
|
1818
|
+
_this14.bridge.once(AMSMessageType.VALIDATE_REPLY, function (payload) {
|
|
1767
1819
|
clearTimeout(timer);
|
|
1768
1820
|
var isValid = !!(payload !== null && payload !== void 0 && payload.isValid);
|
|
1769
|
-
|
|
1821
|
+
_this14.trackElement('validate_result', {
|
|
1770
1822
|
d1: isValid ? 'valid' : 'invalid'
|
|
1771
1823
|
});
|
|
1772
1824
|
resolve(payload || {
|
|
@@ -1799,7 +1851,7 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
1799
1851
|
}
|
|
1800
1852
|
}, _callee12);
|
|
1801
1853
|
}));
|
|
1802
|
-
function updatePayment(
|
|
1854
|
+
function updatePayment(_x18) {
|
|
1803
1855
|
return _updatePayment.apply(this, arguments);
|
|
1804
1856
|
}
|
|
1805
1857
|
return updatePayment;
|
|
@@ -1850,7 +1902,7 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
1850
1902
|
}, {
|
|
1851
1903
|
key: "onDestroy",
|
|
1852
1904
|
value: function onDestroy(callback) {
|
|
1853
|
-
var
|
|
1905
|
+
var _this15 = this;
|
|
1854
1906
|
if (this.status === 'destroyed') {
|
|
1855
1907
|
callback();
|
|
1856
1908
|
return function () {
|
|
@@ -1859,7 +1911,7 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
1859
1911
|
}
|
|
1860
1912
|
this.destroyCallbacks.push(callback);
|
|
1861
1913
|
return function () {
|
|
1862
|
-
|
|
1914
|
+
_this15.destroyCallbacks = _this15.destroyCallbacks.filter(function (item) {
|
|
1863
1915
|
return item !== callback;
|
|
1864
1916
|
});
|
|
1865
1917
|
};
|
|
@@ -1899,12 +1951,12 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
1899
1951
|
}, {
|
|
1900
1952
|
key: "flushCachedMessages",
|
|
1901
1953
|
value: function flushCachedMessages() {
|
|
1902
|
-
var
|
|
1954
|
+
var _this16 = this;
|
|
1903
1955
|
if (this.cachedSend.length > 0) {
|
|
1904
1956
|
this.cachedSend.forEach(function (_ref7) {
|
|
1905
1957
|
var type = _ref7.type,
|
|
1906
1958
|
payload = _ref7.payload;
|
|
1907
|
-
|
|
1959
|
+
_this16.bridge.send(type, payload);
|
|
1908
1960
|
});
|
|
1909
1961
|
this.cachedSend = [];
|
|
1910
1962
|
}
|
|
@@ -1927,7 +1979,7 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
1927
1979
|
var _payload$appearance,
|
|
1928
1980
|
_themeColorMap$appear,
|
|
1929
1981
|
_payload$appearance2,
|
|
1930
|
-
|
|
1982
|
+
_this17 = this;
|
|
1931
1983
|
// 清理已存在的 modal
|
|
1932
1984
|
this.handleCloseModal();
|
|
1933
1985
|
var mode = device.isMobile ? 'mobile' : 'desktop';
|
|
@@ -1983,7 +2035,7 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
1983
2035
|
destroy = _openModal.destroy;
|
|
1984
2036
|
var offReady = modalBridge.once(MessageType.MODAL_TRANSFER_READY, function (_payload, _ports, meta) {
|
|
1985
2037
|
if (meta && meta.source !== iframe.contentWindow) return;
|
|
1986
|
-
|
|
2038
|
+
_this17.trackElement('modal_loaded', {
|
|
1987
2039
|
d1: payload.url
|
|
1988
2040
|
});
|
|
1989
2041
|
// 确保 target 已设置(如果 load 事件尚未触发,在此设置)
|
|
@@ -1994,7 +2046,7 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
1994
2046
|
if (iframeOrigin && iframeOrigin !== 'null') {
|
|
1995
2047
|
modalBridge.setOrigin(iframeOrigin);
|
|
1996
2048
|
}
|
|
1997
|
-
} catch (
|
|
2049
|
+
} catch (_unused10) {
|
|
1998
2050
|
// URL 解析失败时保持默认 origin
|
|
1999
2051
|
}
|
|
2000
2052
|
// 如果 payload 有 appearance,通过 TRANSFER_MODAL_APPEARANCE 消息发送给 modal
|
|
@@ -2012,13 +2064,13 @@ export var ModernElementController = /*#__PURE__*/function () {
|
|
|
2012
2064
|
this.modalIframe = iframe;
|
|
2013
2065
|
this.modalDestroy = function () {
|
|
2014
2066
|
if (payload.closeConfirm) {
|
|
2015
|
-
|
|
2067
|
+
_this17.trackElement('modal_close_confirm', {
|
|
2016
2068
|
d1: 'confirm_resolved'
|
|
2017
2069
|
});
|
|
2018
2070
|
}
|
|
2019
2071
|
destroy();
|
|
2020
2072
|
offReady();
|
|
2021
|
-
|
|
2073
|
+
_this17.modalIframe = null;
|
|
2022
2074
|
};
|
|
2023
2075
|
}
|
|
2024
2076
|
|