@alipay/ams-checkout 0.0.1757298389-dev.10 → 0.0.1757298389-dev.11

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.
@@ -1,5 +1,9 @@
1
1
  var _excluded = ["type"];
2
2
  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); }
3
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
4
+ 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."); }
5
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
6
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
3
7
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
4
8
  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."); }
5
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); }
@@ -31,13 +35,12 @@ import { ElementProcessor } from "../../../../foundation/product-processor/eleme
31
35
  import { ProductSceneEnum } from "../../../../types";
32
36
  import { ElementContainerService } from "../elementContainerService"; // 引入 ElementContainerService
33
37
  import { IContainerStatus } from "../elementContainerService/containerService";
38
+ import { EventCenter as ElementEventCenter } from "../EventCenter/index";
34
39
  import { oneAccountUpdate, sdkActionUpdate } from "../mock";
35
- import { ElementPaymentEvent, ElementPaymentMethod, ElementType, EventCallbackCode, MountElementType } from "../type";
36
- import { checkCanMount, checkCanUpdate, handleRedirect, showToast } from "../util";
40
+ import { ElementPaymentEvent, ElementPaymentMethod, ElementType, EventCallbackCode, EXPOSURE_API_EVENT, MountElementType } from "../type";
41
+ import { checkCanMount, checkCanUpdate, handleRedirect, isLoadErrorPage, showToast } from "../util";
37
42
  var TIMEOUT_DURATION = 10000;
38
43
  var ElementController = /*#__PURE__*/function () {
39
- // 新增变量
40
-
41
44
  function ElementController(options) {
42
45
  _classCallCheck(this, ElementController);
43
46
  _defineProperty(this, "options", void 0);
@@ -49,6 +52,9 @@ var ElementController = /*#__PURE__*/function () {
49
52
  _defineProperty(this, "elementContainerService", void 0);
50
53
  // 新增变量
51
54
  _defineProperty(this, "onStatusChangeCallback", void 0);
55
+ // 新增变量
56
+ _defineProperty(this, "submitPayPromise", void 0);
57
+ _defineProperty(this, "elementEventCenter", void 0);
52
58
  _defineProperty(this, "onValidateFunc", function (event, target) {
53
59
  return new Promise(function (resolve) {
54
60
  event.emitAndListen({
@@ -88,6 +94,9 @@ var ElementController = /*#__PURE__*/function () {
88
94
  instanceId: this.elementContainer.getInstanceId()
89
95
  });
90
96
  this.setControllerStatusOrView(IElementStatus.READY);
97
+ this.elementEventCenter = new ElementEventCenter({
98
+ logger: this.elementContainer.getServiceProvider().getService('Log')
99
+ });
91
100
  }
92
101
  _createClass(ElementController, [{
93
102
  key: "initService",
@@ -124,213 +133,324 @@ var ElementController = /*#__PURE__*/function () {
124
133
  result: result
125
134
  });
126
135
  }
136
+ /**
137
+ * 处理初始化错误的方法
138
+ */
127
139
  }, {
128
- key: "mount",
129
- value: function mount(renderOptions, sdkSelector) {
140
+ key: "handleInitializationError",
141
+ value: function handleInitializationError() {
142
+ this.changeLoading(false);
143
+ this.setControllerStatusOrView(IElementStatus.READY);
144
+ this.onEventCallback(ERRORMESSAGE.SDK_LAUNCH_PAYMENT_APP_ERROR.CALL_APP_URL_ERROR);
145
+ this.elementContainerService.getContainerServices().forEach(function (value) {
146
+ value.getContainerElement().remove();
147
+ });
148
+ this.elementContainerService.destroy();
149
+ } // 处理挂载检查失败
150
+ }, {
151
+ key: "handleMountError",
152
+ value: function handleMountError(_ref2) {
153
+ var result = _ref2.result,
154
+ resolve = _ref2.resolve;
155
+ var errorMsg = result.errorMsg,
156
+ error = result.error;
157
+ this.onEventCallback({
158
+ code: EventCallbackCode.SDK_CREATE_COMPONENT_ERROR,
159
+ message: errorMsg
160
+ });
161
+ resolve({
162
+ error: error
163
+ });
164
+ }
165
+
166
+ // 清除并设置初始化定时器
167
+ }, {
168
+ key: "clearAndSetInitTimeout",
169
+ value: function clearAndSetInitTimeout(resolve) {
170
+ clearTimeout(this.initTimeout);
171
+ this.initTimeout = null;
172
+ this.initTimeout = this.setInitTimeout(resolve);
173
+ }
174
+
175
+ // 设置初始化超时定时器
176
+ }, {
177
+ key: "setInitTimeout",
178
+ value: function setInitTimeout(resolve) {
130
179
  var _this = this;
131
- return new Promise(function (resolve) {
132
- var _checkCanMount = checkCanMount({
133
- sdkSelector: sdkSelector,
134
- status: _this.elementContainer.getStatus(),
135
- containerService: _this.elementContainerService.getContainerService(renderOptions.type)
136
- }),
137
- success = _checkCanMount.success,
138
- errorMsg = _checkCanMount.errorMsg;
139
- if (!success) {
140
- _this.onEventCallback({
141
- code: EventCallbackCode.SDK_CREATE_COMPONENT_ERROR,
142
- message: errorMsg
143
- });
144
- resolve({
145
- success: false
146
- });
147
- return;
148
- }
180
+ return setTimeout(function () {
149
181
  clearTimeout(_this.initTimeout);
150
182
  _this.initTimeout = null;
151
- _this.initTimeout = setTimeout(function () {
152
- clearTimeout(_this.initTimeout);
153
- _this.initTimeout = null;
154
- _this.changeLoading(false);
155
- _this.setControllerStatusOrView(IElementStatus.READY);
156
- _this.onEventCallback(ERRORMESSAGE.SDK_LAUNCH_PAYMENT_APP_ERROR.CALL_APP_URL_ERROR);
157
- _this.elementContainerService.getContainerServices().forEach(function (value) {
158
- value.getContainerElement().remove();
159
- });
160
- _this.elementContainerService.destroy();
161
- }, TIMEOUT_DURATION);
162
- _this.changeLoading(true);
163
- var startBizFlowData = {
164
- paymentSession: _this.options.sessionData,
165
- displayInfo: _objectSpread(_objectSpread({}, renderOptions), {}, {
166
- appendAliasContainerId: true
167
- })
183
+ _this.handleInitializationError();
184
+ resolve({
185
+ error: ERRORMESSAGE.INITALIZE_TIMEOUT.WEB
186
+ });
187
+ }, TIMEOUT_DURATION);
188
+ }
189
+
190
+ // 初始化并挂载元素处理器
191
+ }, {
192
+ key: "initializeAndMountProcessor",
193
+ value: function initializeAndMountProcessor(type, selector, options) {
194
+ this.initElementProcessors(type);
195
+ this.elementContainerService.mount({
196
+ type: type,
197
+ selector: selector,
198
+ processor: this.elementProcessors[type],
199
+ options: options
200
+ });
201
+ this.elementProcessors[type].registerEventCenter(this.elementContainerService.getEventService(type));
202
+ this.elementProcessors[type].beforeMount();
203
+ }
204
+ // 处理业务流程启动失败
205
+ }, {
206
+ key: "handleStartBizFlowError",
207
+ value: function handleStartBizFlowError(error, readyCallback) {
208
+ readyCallback({
209
+ error: _objectSpread(_objectSpread({}, ERRORMESSAGE.PARAM_INVALID), {}, {
210
+ context: JSON.stringify(error)
211
+ })
212
+ });
213
+ this.onEventCallback({
214
+ code: EventCallbackCode.SDK_CREATEPAYMENT_PARAMETER_ERROR,
215
+ message: (error === null || error === void 0 ? void 0 : error.message) || 'Initialization parameter exception.'
216
+ });
217
+ clearTimeout(this.initTimeout);
218
+ this.initTimeout = null;
219
+ this.changeLoading(false);
220
+ }
221
+ }, {
222
+ key: "mount",
223
+ value: function mount(renderOptions, sdkSelector) {
224
+ var _this2 = this;
225
+ var startEventId = this.elementEventCenter.registerEvent(EXPOSURE_API_EVENT.MOUNT);
226
+ return new Promise(function (resolve) {
227
+ var checkMountResult = checkCanMount({
228
+ sdkSelector: sdkSelector,
229
+ status: _this2.elementContainer.getStatus(),
230
+ containerService: _this2.elementContainerService.getContainerService(renderOptions.type)
231
+ });
232
+ var readyCallback = function readyCallback(payload) {
233
+ _this2.elementEventCenter.endEvent(startEventId, payload);
234
+ resolve(payload);
168
235
  };
169
- _this.setControllerStatusOrView(IElementStatus.IN_BIZ_FLOW);
170
- _this.elementContainer.startBizFlow(startBizFlowData).catch(function (error) {
171
- _this.onEventCallback({
172
- code: EventCallbackCode.SDK_CREATEPAYMENT_PARAMETER_ERROR,
173
- message: (error === null || error === void 0 ? void 0 : error.message) || 'Initialization parameter exception.'
236
+ if (!checkMountResult.success) {
237
+ _this2.handleMountError({
238
+ result: checkMountResult,
239
+ resolve: readyCallback
174
240
  });
175
- clearTimeout(_this.initTimeout);
176
- _this.initTimeout = null;
177
- _this.changeLoading(false);
178
241
  return;
179
- });
180
- _this.initElementProcessors(renderOptions.type);
181
- _this.elementContainerService.mount({
182
- type: renderOptions.type,
183
- selector: sdkSelector,
184
- processor: _this.elementProcessors[renderOptions.type],
185
- options: renderOptions
186
- });
187
- _this.elementProcessors[renderOptions.type].registerEventCenter(_this.elementContainerService.getEventService(renderOptions.type));
188
- _this.elementProcessors[renderOptions.type].beforeMount();
189
- _this.sendRequestAndWaitWebLaunch(renderOptions);
190
- function readyCallback(payload) {
191
- var _this2 = this;
192
- var resultData = _objectSpread({
193
- getValue: this === null || this === void 0 ? void 0 : this.elementProcessors[renderOptions.type].getValue.bind(this === null || this === void 0 ? void 0 : this.elementProcessors[renderOptions.type]),
194
- on: function on(event, callback) {
195
- _this2 === null || _this2 === void 0 || _this2.elementProcessors[renderOptions.type].registerEventListener(event, callback);
196
- }
197
- }, payload);
198
- resolve(resultData);
199
242
  }
200
- _this.addEventListener(readyCallback);
201
- _this.serviceMap.EventCenter.addIFrame(_this.elementContainerService.getContainerService(renderOptions.type).getContainerService().getWebApp());
243
+ _this2.clearAndSetInitTimeout(readyCallback);
244
+ _this2.changeLoading(true);
245
+ try {
246
+ var startBizFlowData = {
247
+ paymentSession: _this2.options.sessionData,
248
+ displayInfo: _objectSpread(_objectSpread({}, renderOptions), {}, {
249
+ appendAliasContainerId: true
250
+ })
251
+ };
252
+ _this2.setControllerStatusOrView(IElementStatus.IN_BIZ_FLOW);
253
+ _this2.elementContainer.startBizFlow(startBizFlowData);
254
+ _this2.initializeAndMountProcessor(renderOptions.type, sdkSelector, renderOptions);
255
+ _this2.sendRequestAndWaitWebLaunch(renderOptions, readyCallback);
256
+ _this2.addEventListener(readyCallback);
257
+ _this2.serviceMap.EventCenter.addIFrame(_this2.elementContainerService.getContainerService(renderOptions.type).getContainerService().getWebApp());
258
+ } catch (error) {
259
+ _this2.handleStartBizFlowError(error, readyCallback);
260
+ }
202
261
  });
203
262
  }
204
263
  }, {
205
264
  key: "validateFields",
206
- value:
265
+ value: (
207
266
  /**
208
267
  * 25/09/08 新增商户主动校验api
209
268
  * @returns {Promise<{isValid: boolean}>}
210
269
  */
211
- function validateFields() {
212
- var _this3 = this;
213
- return new Promise( /*#__PURE__*/function () {
214
- var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(resolve) {
215
- var _this3$elementProcess;
216
- var _this3$elementProcess2, validateResult;
217
- return _regeneratorRuntime().wrap(function _callee$(_context) {
218
- while (1) switch (_context.prev = _context.next) {
219
- case 0:
220
- if (!_this3.initTimeout) {
221
- _context.next = 4;
222
- break;
223
- }
224
- return _context.abrupt("return", resolve({
225
- isValid: false
226
- }));
227
- case 4:
228
- if (!((_this3$elementProcess = _this3.elementProcessors) !== null && _this3$elementProcess !== void 0 && _this3$elementProcess[ElementType.payment])) {
229
- _context.next = 17;
230
- break;
231
- }
232
- _context.prev = 5;
233
- _context.next = 8;
234
- return _this3.onValidateFunc((_this3$elementProcess2 = _this3.elementProcessors[ElementType.payment]) === null || _this3$elementProcess2 === void 0 ? void 0 : _this3$elementProcess2.eventCenter, ElementPaymentMethod.PAYMENT_ELEMENT);
235
- case 8:
236
- validateResult = _context.sent;
237
- return _context.abrupt("return", resolve(validateResult.data));
238
- case 12:
239
- _context.prev = 12;
240
- _context.t0 = _context["catch"](5);
241
- return _context.abrupt("return", resolve({
242
- isValid: false
243
- }));
244
- case 15:
245
- _context.next = 18;
270
+ function () {
271
+ var _validateFields = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
272
+ var startEventId, result, _this$elementProcesso, _validateResult$data, validateResult;
273
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
274
+ while (1) switch (_context.prev = _context.next) {
275
+ case 0:
276
+ startEventId = this.elementEventCenter.registerEvent(EXPOSURE_API_EVENT.VALIDATAFIELDS);
277
+ result = {
278
+ isValid: false
279
+ };
280
+ _context.prev = 2;
281
+ if (!(this.initTimeout || !((_this$elementProcesso = this.elementProcessors) !== null && _this$elementProcesso !== void 0 && _this$elementProcesso[ElementType.payment]))) {
282
+ _context.next = 5;
246
283
  break;
247
- case 17:
248
- return _context.abrupt("return", resolve({
249
- isValid: false
250
- }));
251
- case 18:
252
- case "end":
253
- return _context.stop();
254
- }
255
- }, _callee, null, [[5, 12]]);
256
- }));
257
- return function (_x) {
258
- return _ref2.apply(this, arguments);
259
- };
260
- }());
261
- }
284
+ }
285
+ return _context.abrupt("return", result);
286
+ case 5:
287
+ _context.next = 7;
288
+ return this.onValidateFunc(this.elementProcessors[ElementType.payment].eventCenter, ElementPaymentMethod.PAYMENT_ELEMENT);
289
+ case 7:
290
+ validateResult = _context.sent;
291
+ result = (_validateResult$data = validateResult.data) !== null && _validateResult$data !== void 0 ? _validateResult$data : {
292
+ isValid: false
293
+ };
294
+ return _context.abrupt("return", result);
295
+ case 12:
296
+ _context.prev = 12;
297
+ _context.t0 = _context["catch"](2);
298
+ return _context.abrupt("return", result);
299
+ case 15:
300
+ _context.prev = 15;
301
+ this.elementEventCenter.endEvent(startEventId, result);
302
+ return _context.finish(15);
303
+ case 18:
304
+ case "end":
305
+ return _context.stop();
306
+ }
307
+ }, _callee, this, [[2, 12, 15, 18]]);
308
+ }));
309
+ function validateFields() {
310
+ return _validateFields.apply(this, arguments);
311
+ }
312
+ return validateFields;
313
+ }())
262
314
  }, {
263
315
  key: "submitPayment",
264
- value: function submitPayment() {
265
- var _this4 = this;
266
- this.changeLoading(true);
267
- new Promise( /*#__PURE__*/function () {
268
- var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(resolve) {
269
- var params, _this4$elementProcess, _result$data, _result$data2, result, _this4$elementProcess2, _result$data3, _result$data4, _result, _this4$elementProcess3;
270
- return _regeneratorRuntime().wrap(function _callee2$(_context2) {
271
- while (1) switch (_context2.prev = _context2.next) {
272
- case 0:
273
- params = {};
274
- if (!_this4.elementProcessors[ElementType.auth]) {
275
- _context2.next = 8;
276
- break;
277
- }
278
- _context2.next = 4;
279
- return _this4.onValidateAndSubmitPay((_this4$elementProcess = _this4.elementProcessors[ElementType.auth]) === null || _this4$elementProcess === void 0 ? void 0 : _this4$elementProcess.eventCenter, ElementPaymentMethod.AUTH_ELEMENT);
280
- case 4:
281
- result = _context2.sent;
282
- params.accountInfo = (_result$data = result.data) === null || _result$data === void 0 || (_result$data = _result$data.data) === null || _result$data === void 0 ? void 0 : _result$data.accountInfo;
283
- if (result !== null && result !== void 0 && (_result$data2 = result.data) !== null && _result$data2 !== void 0 && _result$data2.success) {
284
- _context2.next = 8;
285
- break;
286
- }
287
- return _context2.abrupt("return", resolve(undefined));
288
- case 8:
289
- if (!_this4.elementProcessors[ElementType.address]) {
290
- _context2.next = 15;
291
- break;
292
- }
293
- _context2.next = 11;
294
- return _this4.onValidateAndSubmitPay((_this4$elementProcess2 = _this4.elementProcessors[ElementType.address]) === null || _this4$elementProcess2 === void 0 ? void 0 : _this4$elementProcess2.eventCenter, ElementPaymentMethod.ADDRESS_ELEMENT);
295
- case 11:
296
- _result = _context2.sent;
297
- params.shipping = (_result$data3 = _result.data) === null || _result$data3 === void 0 ? void 0 : _result$data3.data;
298
- if (_result !== null && _result !== void 0 && (_result$data4 = _result.data) !== null && _result$data4 !== void 0 && _result$data4.success) {
299
- _context2.next = 15;
300
- break;
301
- }
302
- return _context2.abrupt("return", resolve(undefined));
303
- case 15:
304
- if (!_this4.elementProcessors[ElementType.payment]) {
305
- _context2.next = 25;
306
- break;
307
- }
308
- _context2.prev = 16;
309
- _context2.next = 19;
310
- return _this4.onValidateAndSubmitPay((_this4$elementProcess3 = _this4.elementProcessors[ElementType.payment]) === null || _this4$elementProcess3 === void 0 ? void 0 : _this4$elementProcess3.eventCenter, ElementPaymentMethod.PAYMENT_ELEMENT, params);
311
- case 19:
312
- return _context2.abrupt("return", resolve(undefined));
313
- case 22:
314
- _context2.prev = 22;
315
- _context2.t0 = _context2["catch"](16);
316
- return _context2.abrupt("return", resolve(undefined));
317
- case 25:
318
- resolve(params);
319
- case 26:
320
- case "end":
321
- return _context2.stop();
322
- }
323
- }, _callee2, null, [[16, 22]]);
324
- }));
325
- return function (_x2) {
326
- return _ref3.apply(this, arguments);
327
- };
328
- }()).then(function () {
329
- _this4.changeLoading(false);
330
- }, function () {
331
- _this4.changeLoading(false);
332
- });
333
- }
316
+ value: function () {
317
+ var _submitPayment = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
318
+ var _this3 = this;
319
+ var startEventId, res, recordResult;
320
+ return _regeneratorRuntime().wrap(function _callee4$(_context4) {
321
+ while (1) switch (_context4.prev = _context4.next) {
322
+ case 0:
323
+ startEventId = this.elementEventCenter.registerEvent(EXPOSURE_API_EVENT.SUBMITPAYMENT);
324
+ if (!(this.elementContainer.getStatus() !== IElementStatus.IN_BIZ_FLOW)) {
325
+ _context4.next = 5;
326
+ break;
327
+ }
328
+ res = {
329
+ error: ERRORMESSAGE.CONTAINER_NOT_LOADED
330
+ };
331
+ this.elementEventCenter.endEvent(startEventId, res);
332
+ return _context4.abrupt("return", Promise.resolve(res));
333
+ case 5:
334
+ this.changeLoading(true);
335
+ recordResult = null;
336
+ _context4.prev = 7;
337
+ _context4.next = 10;
338
+ return new Promise( /*#__PURE__*/function () {
339
+ var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(resolve) {
340
+ var params, processStep, _yield$_this3$onValid2, data, errorResult;
341
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
342
+ while (1) switch (_context3.prev = _context3.next) {
343
+ case 0:
344
+ _context3.prev = 0;
345
+ _this3.submitPayPromise = resolve;
346
+ params = {}; // 统一处理逻辑
347
+ processStep = /*#__PURE__*/function () {
348
+ var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(elementType, method) {
349
+ var _yield$_this3$onValid, data;
350
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
351
+ while (1) switch (_context2.prev = _context2.next) {
352
+ case 0:
353
+ if (_this3.elementProcessors[elementType]) {
354
+ _context2.next = 2;
355
+ break;
356
+ }
357
+ return _context2.abrupt("return", true);
358
+ case 2:
359
+ _context2.next = 4;
360
+ return _this3.onValidateAndSubmitPay(_this3.elementProcessors[elementType].eventCenter, method);
361
+ case 4:
362
+ _yield$_this3$onValid = _context2.sent;
363
+ data = _yield$_this3$onValid.data;
364
+ params.shipping = data === null || data === void 0 ? void 0 : data.data;
365
+ if (data !== null && data !== void 0 && data.success) {
366
+ _context2.next = 11;
367
+ break;
368
+ }
369
+ recordResult = data;
370
+ resolve(data);
371
+ return _context2.abrupt("return", false);
372
+ case 11:
373
+ return _context2.abrupt("return", true);
374
+ case 12:
375
+ case "end":
376
+ return _context2.stop();
377
+ }
378
+ }, _callee2);
379
+ }));
380
+ return function processStep(_x2, _x3) {
381
+ return _ref4.apply(this, arguments);
382
+ };
383
+ }(); // 按顺序处理步骤
384
+ _context3.next = 6;
385
+ return processStep(ElementType.auth, ElementPaymentMethod.AUTH_ELEMENT);
386
+ case 6:
387
+ if (_context3.sent) {
388
+ _context3.next = 8;
389
+ break;
390
+ }
391
+ return _context3.abrupt("return");
392
+ case 8:
393
+ _context3.next = 10;
394
+ return processStep(ElementType.address, ElementPaymentMethod.ADDRESS_ELEMENT);
395
+ case 10:
396
+ if (_context3.sent) {
397
+ _context3.next = 12;
398
+ break;
399
+ }
400
+ return _context3.abrupt("return");
401
+ case 12:
402
+ if (!_this3.elementProcessors[ElementType.payment]) {
403
+ _context3.next = 19;
404
+ break;
405
+ }
406
+ _context3.next = 15;
407
+ return _this3.onValidateAndSubmitPay(_this3.elementProcessors[ElementType.payment].eventCenter, ElementPaymentMethod.PAYMENT_ELEMENT, params);
408
+ case 15:
409
+ _yield$_this3$onValid2 = _context3.sent;
410
+ data = _yield$_this3$onValid2.data;
411
+ recordResult = data;
412
+ resolve(data);
413
+ case 19:
414
+ _context3.next = 26;
415
+ break;
416
+ case 21:
417
+ _context3.prev = 21;
418
+ _context3.t0 = _context3["catch"](0);
419
+ errorResult = {
420
+ error: _objectSpread(_objectSpread({}, ERRORMESSAGE.ERR_DATA_STRUCT_UNRECOGNIZED), {}, {
421
+ context: JSON.stringify(_context3.t0)
422
+ })
423
+ };
424
+ recordResult = errorResult;
425
+ resolve(errorResult);
426
+ case 26:
427
+ case "end":
428
+ return _context3.stop();
429
+ }
430
+ }, _callee3, null, [[0, 21]]);
431
+ }));
432
+ return function (_x) {
433
+ return _ref3.apply(this, arguments);
434
+ };
435
+ }());
436
+ case 10:
437
+ return _context4.abrupt("return", _context4.sent);
438
+ case 11:
439
+ _context4.prev = 11;
440
+ this.elementEventCenter.endEvent(startEventId, recordResult);
441
+ this.changeLoading(false);
442
+ return _context4.finish(11);
443
+ case 15:
444
+ case "end":
445
+ return _context4.stop();
446
+ }
447
+ }, _callee4, this, [[7,, 11, 15]]);
448
+ }));
449
+ function submitPayment() {
450
+ return _submitPayment.apply(this, arguments);
451
+ }
452
+ return submitPayment;
453
+ }()
334
454
  }, {
335
455
  key: "changeLoading",
336
456
  value: function changeLoading(loading) {
@@ -353,21 +473,19 @@ var ElementController = /*#__PURE__*/function () {
353
473
  }, {
354
474
  key: "addEventListener",
355
475
  value: function addEventListener(renderCallback) {
356
- var _this5 = this;
476
+ var _this4 = this;
357
477
  this.serviceMap.EventCenter.listen(ElementPaymentEvent.ON_EVENT_CALLBACK, function (data) {
358
- var _this5$onEventCallbac;
359
- (_this5$onEventCallbac = _this5.onEventCallback) === null || _this5$onEventCallbac === void 0 || _this5$onEventCallbac.call(_this5, data);
478
+ var _this4$onEventCallbac;
479
+ (_this4$onEventCallbac = _this4.onEventCallback) === null || _this4$onEventCallbac === void 0 || _this4$onEventCallbac.call(_this4, data);
360
480
  });
361
481
  this.serviceMap.EventCenter.listen(EVENT.sizeChanged.name, function (data) {
362
- clearTimeout(_this5.initTimeout);
363
- _this5.initTimeout = null;
364
- if (_this5.elementContainerService.getContainerService(data.source)) {
365
- renderCallback({
366
- success: true
367
- });
368
- _this5.elementContainerService.getContainerService(data.source).switchContainerStatus(IContainerStatus.IN_BIZ_FLOW);
482
+ clearTimeout(_this4.initTimeout);
483
+ _this4.initTimeout = null;
484
+ if (_this4.elementContainerService.getContainerService(data.source)) {
485
+ renderCallback();
486
+ _this4.elementContainerService.getContainerService(data.source).switchContainerStatus(IContainerStatus.IN_BIZ_FLOW);
369
487
  }
370
- _this5.changeLoading(false);
488
+ _this4.changeLoading(false);
371
489
  // 遍历containerService中的所有container查看是否所有状态都是IN_BIZ_FLOW
372
490
  // const allContainersInBizFlow = Object.values(this.elementContainerService.getContainerServices()).every(
373
491
  // (containerService) => containerService.getContainerStatus() === IContainerStatus.IN_BIZ_FLOW,
@@ -377,23 +495,21 @@ var ElementController = /*#__PURE__*/function () {
377
495
  // }
378
496
  });
379
497
  this.serviceMap.EventCenter.listen(EVENT.redirect.name, function (data) {
380
- var onEventCallback = _this5.onEventCallback.bind(_this5);
498
+ var onEventCallback = _this4.onEventCallback.bind(_this4);
381
499
  handleRedirect(data, false, onEventCallback);
382
500
  });
383
501
  this.serviceMap.EventCenter.listen(EVENT.destroy.name, function () {
384
- _this5.setControllerStatusOrView(IElementStatus.READY);
385
- _this5.destroyHandle();
502
+ _this4.setControllerStatusOrView(IElementStatus.READY);
503
+ _this4.destroyHandle();
386
504
  });
387
505
  this.serviceMap.EventCenter.listen(EVENT.webAppReady.name, function (data) {
388
- clearTimeout(_this5.initTimeout);
389
- _this5.initTimeout = null;
390
- if (_this5.elementContainerService.getContainerService(data.source)) {
391
- renderCallback({
392
- success: true
393
- });
394
- _this5.elementContainerService.getContainerService(data.source).switchContainerStatus(IContainerStatus.IN_BIZ_FLOW);
506
+ clearTimeout(_this4.initTimeout);
507
+ _this4.initTimeout = null;
508
+ if (_this4.elementContainerService.getContainerService(data.source)) {
509
+ renderCallback();
510
+ _this4.elementContainerService.getContainerService(data.source).switchContainerStatus(IContainerStatus.IN_BIZ_FLOW);
395
511
  }
396
- _this5.changeLoading(false);
512
+ _this4.changeLoading(false);
397
513
  });
398
514
  this.serviceMap.EventCenter.listen(EVENT.showToast.name, function (data) {
399
515
  showToast(data);
@@ -401,47 +517,120 @@ var ElementController = /*#__PURE__*/function () {
401
517
  this.serviceMap.EventCenter.listen(EVENT.messageForward.name, function (data) {
402
518
  var source = MountElementType[data.source];
403
519
  var target = MountElementType[data.target];
404
- if (_this5.elementProcessors[source] && _this5.elementProcessors[target]) {
405
- _this5.elementProcessors[target].eventCenter.dispatchToApp({
520
+ if (_this4.elementProcessors[source] && _this4.elementProcessors[target]) {
521
+ _this4.elementProcessors[target].eventCenter.dispatchToApp({
406
522
  event: data.event,
407
523
  data: data
408
524
  });
409
525
  }
410
526
  });
527
+ this.serviceMap.EventCenter.listen(EVENT.submitPromiseCallback.name, function (data) {
528
+ var _this4$submitPayPromi;
529
+ (_this4$submitPayPromi = _this4.submitPayPromise) === null || _this4$submitPayPromi === void 0 || _this4$submitPayPromi.call(_this4, data);
530
+ });
411
531
  }
412
532
  }, {
413
533
  key: "sendRequestAndWaitWebLaunch",
414
- value: function sendRequestAndWaitWebLaunch(renderOptions) {
415
- var _this6 = this;
416
- var type = renderOptions.type,
417
- options = _objectWithoutProperties(renderOptions, _excluded);
418
- var webLaunchPromise = this.elementContainerService.getContainerService(type).createWebLaunchPromise();
419
- Promise.all([webLaunchPromise, this.elementProcessors[type].obtainData()]).then(function (_ref4) {
420
- var _this6$elementContain;
421
- var _ref5 = _slicedToArray(_ref4, 2),
422
- _webLaunchRes = _ref5[0],
423
- _obtainDataRes = _ref5[1];
424
- (_this6$elementContain = _this6.elementContainerService.getContainerService(type)) === null || _this6$elementContain === void 0 || _this6$elementContain.switchContainerStatus(IContainerStatus.READY);
425
- var allReady = true;
426
- _this6.elementContainerService.getContainerServices().forEach(function (item) {
427
- if (!allReady) return;
428
- allReady = item.getContainerStatus() === IContainerStatus.READY;
429
- });
430
- if (allReady) {
431
- _this6.elementContainerService.getContainerServices().forEach(function (value, key) {
432
- _this6.sendReady(key, options);
433
- });
534
+ value: function () {
535
+ var _sendRequestAndWaitWebLaunch = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5(renderOptions, readyCallback) {
536
+ var _this5 = this;
537
+ var type, options, containerService, _yield$Promise$all, _yield$Promise$all2, _, obtainDataResult, error;
538
+ return _regeneratorRuntime().wrap(function _callee5$(_context5) {
539
+ while (1) switch (_context5.prev = _context5.next) {
540
+ case 0:
541
+ type = renderOptions.type, options = _objectWithoutProperties(renderOptions, _excluded);
542
+ _context5.prev = 1;
543
+ containerService = this.elementContainerService.getContainerService(type);
544
+ if (containerService) {
545
+ _context5.next = 7;
546
+ break;
547
+ }
548
+ this.handleInitializationError();
549
+ // 容器服务不存在,直接返回
550
+ readyCallback({
551
+ error: ERRORMESSAGE.UI_STATE_ERROR
552
+ });
553
+ return _context5.abrupt("return");
554
+ case 7:
555
+ _context5.next = 9;
556
+ return Promise.all([containerService.createWebLaunchPromise(), this.elementProcessors[type].obtainData()]);
557
+ case 9:
558
+ _yield$Promise$all = _context5.sent;
559
+ _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 2);
560
+ _ = _yield$Promise$all2[0];
561
+ obtainDataResult = _yield$Promise$all2[1];
562
+ containerService === null || containerService === void 0 || containerService.switchContainerStatus(IContainerStatus.READY);
563
+ error = this.getErrorFromResponse(obtainDataResult);
564
+ if (!error) {
565
+ _context5.next = 19;
566
+ break;
567
+ }
568
+ this.handleInitializationError();
569
+ readyCallback({
570
+ error: error
571
+ });
572
+ return _context5.abrupt("return");
573
+ case 19:
574
+ if (this.areAllContainersReady()) {
575
+ this.elementContainerService.getContainerServices().forEach(function (_, key) {
576
+ _this5.sendReady(key, options);
577
+ });
578
+ }
579
+ _context5.next = 26;
580
+ break;
581
+ case 22:
582
+ _context5.prev = 22;
583
+ _context5.t0 = _context5["catch"](1);
584
+ this.handleInitializationError();
585
+ readyCallback({
586
+ error: _objectSpread(_objectSpread({}, ERRORMESSAGE.INITALIZE_TIMEOUT.API), {}, {
587
+ traceId: _context5.t0 === null || _context5.t0 === void 0 ? void 0 : _context5.t0.traceId
588
+ })
589
+ });
590
+ case 26:
591
+ case "end":
592
+ return _context5.stop();
593
+ }
594
+ }, _callee5, this, [[1, 22]]);
595
+ }));
596
+ function sendRequestAndWaitWebLaunch(_x4, _x5) {
597
+ return _sendRequestAndWaitWebLaunch.apply(this, arguments);
598
+ }
599
+ return sendRequestAndWaitWebLaunch;
600
+ }()
601
+ }, {
602
+ key: "getErrorFromResponse",
603
+ value: function getErrorFromResponse(response) {
604
+ if (isLoadErrorPage(response === null || response === void 0 ? void 0 : response.originActionQueryResult)) {
605
+ var _response$originActio = response.originActionQueryResult,
606
+ traceId = _response$originActio.traceId,
607
+ errorCode = _response$originActio.errorCode;
608
+ var baseError = ERRORMESSAGE.ERR_DATA_STRUCT_UNRECOGNIZED;
609
+ if ([ERRORMESSAGE.INQUIRY_PAYMENT_SESSION_FAILED.code, ERRORMESSAGE.UNKNOWN_EXCEPTION.code].includes(errorCode)) {
610
+ baseError = ERRORMESSAGE[errorCode];
434
611
  }
612
+ return _objectSpread(_objectSpread({}, baseError), {}, {
613
+ traceId: traceId !== null && traceId !== void 0 ? traceId : ''
614
+ });
615
+ }
616
+ return null;
617
+ }
618
+ }, {
619
+ key: "areAllContainersReady",
620
+ value: function areAllContainersReady() {
621
+ var container = this.elementContainerService.getContainerServices();
622
+ return _toConsumableArray(container.values()).every(function (service) {
623
+ return service.getContainerStatus() === IContainerStatus.READY;
435
624
  });
436
625
  }
437
626
  }, {
438
627
  key: "sendReady",
439
628
  value: function sendReady(type, options) {
440
- var _this$elementProcesso, _paymentSessionObj$pa, _paymentResult$origin;
441
- var paymentResult = (_this$elementProcesso = this.elementProcessors[ElementType.payment]) === null || _this$elementProcesso === void 0 ? void 0 : _this$elementProcesso.getObtainDataRes();
629
+ var _this$elementProcesso2, _paymentSessionObj$co, _paymentSessionObj$pa, _paymentResult$origin;
630
+ var paymentResult = (_this$elementProcesso2 = this.elementProcessors[ElementType.payment]) === null || _this$elementProcesso2 === void 0 ? void 0 : _this$elementProcesso2.getObtainDataRes();
442
631
  var paymentContext = this.elementContainer.getPaymentContext();
443
632
  var paymentSessionObj = paymentContext.paymentSessionObj;
444
- var isConnect = paymentSessionObj.connectFactor.enableConnect && ((_paymentSessionObj$pa = paymentSessionObj.paymentSessionConfig) === null || _paymentSessionObj$pa === void 0 ? void 0 : _paymentSessionObj$pa.productScene) === ProductSceneEnum.ELEMENT_PAYMENT;
633
+ var isConnect = ((_paymentSessionObj$co = paymentSessionObj.connectFactor) === null || _paymentSessionObj$co === void 0 ? void 0 : _paymentSessionObj$co.enableConnect) && ((_paymentSessionObj$pa = paymentSessionObj.paymentSessionConfig) === null || _paymentSessionObj$pa === void 0 ? void 0 : _paymentSessionObj$pa.productScene) === ProductSceneEnum.ELEMENT_PAYMENT;
445
634
  if (!(paymentResult !== null && paymentResult !== void 0 && (_paymentResult$origin = paymentResult.originActionQueryResult) !== null && _paymentResult$origin !== void 0 && _paymentResult$origin.success) && isConnect) {
446
635
  var _this$onEventCallback;
447
636
  clearTimeout(this.initTimeout);
@@ -465,37 +654,37 @@ var ElementController = /*#__PURE__*/function () {
465
654
  }, {
466
655
  key: "updatePayment",
467
656
  value: function () {
468
- var _updatePayment = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(paymentSessionData) {
469
- var _this7 = this;
470
- return _regeneratorRuntime().wrap(function _callee4$(_context4) {
471
- while (1) switch (_context4.prev = _context4.next) {
657
+ var _updatePayment = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7(paymentSessionData) {
658
+ var _this6 = this;
659
+ return _regeneratorRuntime().wrap(function _callee7$(_context7) {
660
+ while (1) switch (_context7.prev = _context7.next) {
472
661
  case 0:
473
- return _context4.abrupt("return", new Promise( /*#__PURE__*/function () {
474
- var _ref6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(resolve) {
662
+ return _context7.abrupt("return", new Promise( /*#__PURE__*/function () {
663
+ var _ref5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6(resolve) {
475
664
  var prePaymentSessionData, data, LOCAL_MOCK;
476
- return _regeneratorRuntime().wrap(function _callee3$(_context3) {
477
- while (1) switch (_context3.prev = _context3.next) {
665
+ return _regeneratorRuntime().wrap(function _callee6$(_context6) {
666
+ while (1) switch (_context6.prev = _context6.next) {
478
667
  case 0:
479
668
  if (checkCanUpdate({
480
- status: _this7.elementContainer.getStatus(),
481
- paymentContainerService: _this7.elementContainerService.getContainerService(ElementType.payment),
669
+ status: _this6.elementContainer.getStatus(),
670
+ paymentContainerService: _this6.elementContainerService.getContainerService(ElementType.payment),
482
671
  newPaymentSessionData: paymentSessionData,
483
- oldPaymentSessionData: _this7.options.sessionData
672
+ oldPaymentSessionData: _this6.options.sessionData
484
673
  })) {
485
- _context3.next = 2;
674
+ _context6.next = 2;
486
675
  break;
487
676
  }
488
- return _context3.abrupt("return", resolve(false));
677
+ return _context6.abrupt("return", resolve(false));
489
678
  case 2:
490
- prePaymentSessionData = _this7.elementContainer.getPaymentContext().paymentSession;
491
- _this7.elementContainer.updatePaymentSessionData(paymentSessionData);
679
+ prePaymentSessionData = _this6.elementContainer.getPaymentContext().paymentSession;
680
+ _this6.elementContainer.updatePaymentSessionData(paymentSessionData);
492
681
  // 1、数据获取
493
- _context3.next = 6;
494
- return _this7.elementProcessors[ElementType.payment].obtainData();
682
+ _context6.next = 6;
683
+ return _this6.elementProcessors[ElementType.payment].obtainData();
495
684
  case 6:
496
- data = _context3.sent;
685
+ data = _context6.sent;
497
686
  LOCAL_MOCK = window.location.href.indexOf('LOCAL_MOCK=1') !== -1; // 2、发送update消息
498
- Object.values(_this7.elementProcessors).forEach(function (processor) {
687
+ Object.values(_this6.elementProcessors).forEach(function (processor) {
499
688
  processor.update({
500
689
  data: {
501
690
  originActionQueryResult: LOCAL_MOCK ? sdkActionUpdate : data.originActionQueryResult,
@@ -505,30 +694,30 @@ var ElementController = /*#__PURE__*/function () {
505
694
  });
506
695
  });
507
696
  // 3、返回更新结果
508
- _this7.serviceMap.EventCenter.listen(EVENT.updated.name, function (data) {
697
+ _this6.serviceMap.EventCenter.listen(EVENT.updated.name, function (data) {
509
698
  // 若更新不成功,还原core.paymentContext信息
510
699
  if (!data.success) {
511
- _this7.elementContainer.updatePaymentSessionData(prePaymentSessionData);
700
+ _this6.elementContainer.updatePaymentSessionData(prePaymentSessionData);
512
701
  }
513
702
  return resolve(data.success || false);
514
703
  });
515
704
  case 10:
516
705
  case "end":
517
- return _context3.stop();
706
+ return _context6.stop();
518
707
  }
519
- }, _callee3);
708
+ }, _callee6);
520
709
  }));
521
- return function (_x4) {
522
- return _ref6.apply(this, arguments);
710
+ return function (_x7) {
711
+ return _ref5.apply(this, arguments);
523
712
  };
524
713
  }()));
525
714
  case 1:
526
715
  case "end":
527
- return _context4.stop();
716
+ return _context7.stop();
528
717
  }
529
- }, _callee4);
718
+ }, _callee7);
530
719
  }));
531
- function updatePayment(_x3) {
720
+ function updatePayment(_x6) {
532
721
  return _updatePayment.apply(this, arguments);
533
722
  }
534
723
  return updatePayment;
@@ -548,8 +737,13 @@ var ElementController = /*#__PURE__*/function () {
548
737
  }, {
549
738
  key: "destroy",
550
739
  value: function destroy() {
551
- this.destroyHandle();
552
- this.setControllerStatusOrView(IElementStatus.DESTROYED);
740
+ var startEventId = this.elementEventCenter.registerEvent(EXPOSURE_API_EVENT.DESTORY);
741
+ try {
742
+ this.destroyHandle();
743
+ this.setControllerStatusOrView(IElementStatus.DESTROYED);
744
+ } finally {
745
+ this.elementEventCenter.endEvent(startEventId);
746
+ }
553
747
  }
554
748
  }, {
555
749
  key: "setControllerStatusOrView",