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

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,116 @@ 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
+ // 仅结束resove,传出回调码
566
+ readyCallback({
567
+ error: error
568
+ });
569
+ }
570
+ if (this.areAllContainersReady()) {
571
+ this.elementContainerService.getContainerServices().forEach(function (_, key) {
572
+ _this5.sendReady(key, options);
573
+ });
574
+ }
575
+ _context5.next = 23;
576
+ break;
577
+ case 19:
578
+ _context5.prev = 19;
579
+ _context5.t0 = _context5["catch"](1);
580
+ this.handleInitializationError();
581
+ readyCallback({
582
+ error: _objectSpread(_objectSpread({}, ERRORMESSAGE.INITALIZE_TIMEOUT.API), {}, {
583
+ traceId: _context5.t0 === null || _context5.t0 === void 0 ? void 0 : _context5.t0.traceId
584
+ })
585
+ });
586
+ case 23:
587
+ case "end":
588
+ return _context5.stop();
589
+ }
590
+ }, _callee5, this, [[1, 19]]);
591
+ }));
592
+ function sendRequestAndWaitWebLaunch(_x4, _x5) {
593
+ return _sendRequestAndWaitWebLaunch.apply(this, arguments);
594
+ }
595
+ return sendRequestAndWaitWebLaunch;
596
+ }()
597
+ }, {
598
+ key: "getErrorFromResponse",
599
+ value: function getErrorFromResponse(response) {
600
+ if (isLoadErrorPage(response === null || response === void 0 ? void 0 : response.originActionQueryResult)) {
601
+ var _response$originActio = response.originActionQueryResult,
602
+ traceId = _response$originActio.traceId,
603
+ errorCode = _response$originActio.errorCode;
604
+ var baseError = ERRORMESSAGE.ERR_DATA_STRUCT_UNRECOGNIZED;
605
+ if ([ERRORMESSAGE.INQUIRY_PAYMENT_SESSION_FAILED.code, ERRORMESSAGE.UNKNOWN_EXCEPTION.code].includes(errorCode)) {
606
+ baseError = ERRORMESSAGE[errorCode];
434
607
  }
608
+ return _objectSpread(_objectSpread({}, baseError), {}, {
609
+ traceId: traceId !== null && traceId !== void 0 ? traceId : ''
610
+ });
611
+ }
612
+ return null;
613
+ }
614
+ }, {
615
+ key: "areAllContainersReady",
616
+ value: function areAllContainersReady() {
617
+ var container = this.elementContainerService.getContainerServices();
618
+ return _toConsumableArray(container.values()).every(function (service) {
619
+ return service.getContainerStatus() === IContainerStatus.READY;
435
620
  });
436
621
  }
437
622
  }, {
438
623
  key: "sendReady",
439
624
  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();
625
+ var _this$elementProcesso2, _paymentSessionObj$co, _paymentSessionObj$pa, _paymentResult$origin;
626
+ var paymentResult = (_this$elementProcesso2 = this.elementProcessors[ElementType.payment]) === null || _this$elementProcesso2 === void 0 ? void 0 : _this$elementProcesso2.getObtainDataRes();
442
627
  var paymentContext = this.elementContainer.getPaymentContext();
443
628
  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;
629
+ 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
630
  if (!(paymentResult !== null && paymentResult !== void 0 && (_paymentResult$origin = paymentResult.originActionQueryResult) !== null && _paymentResult$origin !== void 0 && _paymentResult$origin.success) && isConnect) {
446
631
  var _this$onEventCallback;
447
632
  clearTimeout(this.initTimeout);
@@ -465,37 +650,37 @@ var ElementController = /*#__PURE__*/function () {
465
650
  }, {
466
651
  key: "updatePayment",
467
652
  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) {
653
+ var _updatePayment = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7(paymentSessionData) {
654
+ var _this6 = this;
655
+ return _regeneratorRuntime().wrap(function _callee7$(_context7) {
656
+ while (1) switch (_context7.prev = _context7.next) {
472
657
  case 0:
473
- return _context4.abrupt("return", new Promise( /*#__PURE__*/function () {
474
- var _ref6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(resolve) {
658
+ return _context7.abrupt("return", new Promise( /*#__PURE__*/function () {
659
+ var _ref5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6(resolve) {
475
660
  var prePaymentSessionData, data, LOCAL_MOCK;
476
- return _regeneratorRuntime().wrap(function _callee3$(_context3) {
477
- while (1) switch (_context3.prev = _context3.next) {
661
+ return _regeneratorRuntime().wrap(function _callee6$(_context6) {
662
+ while (1) switch (_context6.prev = _context6.next) {
478
663
  case 0:
479
664
  if (checkCanUpdate({
480
- status: _this7.elementContainer.getStatus(),
481
- paymentContainerService: _this7.elementContainerService.getContainerService(ElementType.payment),
665
+ status: _this6.elementContainer.getStatus(),
666
+ paymentContainerService: _this6.elementContainerService.getContainerService(ElementType.payment),
482
667
  newPaymentSessionData: paymentSessionData,
483
- oldPaymentSessionData: _this7.options.sessionData
668
+ oldPaymentSessionData: _this6.options.sessionData
484
669
  })) {
485
- _context3.next = 2;
670
+ _context6.next = 2;
486
671
  break;
487
672
  }
488
- return _context3.abrupt("return", resolve(false));
673
+ return _context6.abrupt("return", resolve(false));
489
674
  case 2:
490
- prePaymentSessionData = _this7.elementContainer.getPaymentContext().paymentSession;
491
- _this7.elementContainer.updatePaymentSessionData(paymentSessionData);
675
+ prePaymentSessionData = _this6.elementContainer.getPaymentContext().paymentSession;
676
+ _this6.elementContainer.updatePaymentSessionData(paymentSessionData);
492
677
  // 1、数据获取
493
- _context3.next = 6;
494
- return _this7.elementProcessors[ElementType.payment].obtainData();
678
+ _context6.next = 6;
679
+ return _this6.elementProcessors[ElementType.payment].obtainData();
495
680
  case 6:
496
- data = _context3.sent;
681
+ data = _context6.sent;
497
682
  LOCAL_MOCK = window.location.href.indexOf('LOCAL_MOCK=1') !== -1; // 2、发送update消息
498
- Object.values(_this7.elementProcessors).forEach(function (processor) {
683
+ Object.values(_this6.elementProcessors).forEach(function (processor) {
499
684
  processor.update({
500
685
  data: {
501
686
  originActionQueryResult: LOCAL_MOCK ? sdkActionUpdate : data.originActionQueryResult,
@@ -505,30 +690,30 @@ var ElementController = /*#__PURE__*/function () {
505
690
  });
506
691
  });
507
692
  // 3、返回更新结果
508
- _this7.serviceMap.EventCenter.listen(EVENT.updated.name, function (data) {
693
+ _this6.serviceMap.EventCenter.listen(EVENT.updated.name, function (data) {
509
694
  // 若更新不成功,还原core.paymentContext信息
510
695
  if (!data.success) {
511
- _this7.elementContainer.updatePaymentSessionData(prePaymentSessionData);
696
+ _this6.elementContainer.updatePaymentSessionData(prePaymentSessionData);
512
697
  }
513
698
  return resolve(data.success || false);
514
699
  });
515
700
  case 10:
516
701
  case "end":
517
- return _context3.stop();
702
+ return _context6.stop();
518
703
  }
519
- }, _callee3);
704
+ }, _callee6);
520
705
  }));
521
- return function (_x4) {
522
- return _ref6.apply(this, arguments);
706
+ return function (_x7) {
707
+ return _ref5.apply(this, arguments);
523
708
  };
524
709
  }()));
525
710
  case 1:
526
711
  case "end":
527
- return _context4.stop();
712
+ return _context7.stop();
528
713
  }
529
- }, _callee4);
714
+ }, _callee7);
530
715
  }));
531
- function updatePayment(_x3) {
716
+ function updatePayment(_x6) {
532
717
  return _updatePayment.apply(this, arguments);
533
718
  }
534
719
  return updatePayment;
@@ -548,8 +733,13 @@ var ElementController = /*#__PURE__*/function () {
548
733
  }, {
549
734
  key: "destroy",
550
735
  value: function destroy() {
551
- this.destroyHandle();
552
- this.setControllerStatusOrView(IElementStatus.DESTROYED);
736
+ var startEventId = this.elementEventCenter.registerEvent(EXPOSURE_API_EVENT.DESTORY);
737
+ try {
738
+ this.destroyHandle();
739
+ this.setControllerStatusOrView(IElementStatus.DESTROYED);
740
+ } finally {
741
+ this.elementEventCenter.endEvent(startEventId);
742
+ }
553
743
  }
554
744
  }, {
555
745
  key: "setControllerStatusOrView",