@alipay/ams-checkout 0.0.1783663570-dev.5 → 0.0.1784095668-dev.0

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.
@@ -9,7 +9,7 @@ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key i
9
9
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
10
10
  function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
11
11
  import { ProductSceneEnum } from "../types";
12
- import { ApdidLoader } from "./jshield-apdid";
12
+ import APDID from "./jshield-apdid/apdid-core.umd.min";
13
13
  export var getSecurityConfigStorageKey = function getSecurityConfigStorageKey(scene) {
14
14
  return "AMSSDK_SECURITY_CONFIG_".concat(scene);
15
15
  };
@@ -29,110 +29,21 @@ export var getSecurityHost = function getSecurityHost(region) {
29
29
  return securityHost[region] || securityHost[SecurityRegionEnum.SG];
30
30
  };
31
31
  export var getSecurityScene = function getSecurityScene(product) {
32
+ console.log('getSecurityScene', product);
32
33
  return sceneMap[product] || '';
33
34
  };
34
-
35
- /**
36
- * Map SDK environment string to ApdidEnvironment for CDN URL selection.
37
- */
38
- export var mapEnvironment = function mapEnvironment(env) {
39
- if (!env) return 'production';
40
- var lower = env.toLowerCase();
41
- if (lower === 'pre' || lower === 'light_sandbox') return 'pre';
42
- if (lower === 'dev' || lower === 'test' || lower === 'local') return 'dev';
43
- return 'production';
44
- };
45
35
  export var Security = /*#__PURE__*/function () {
46
36
  function Security(options) {
47
37
  _classCallCheck(this, Security);
48
38
  _defineProperty(this, "scene", void 0);
49
39
  _defineProperty(this, "h5gateway", void 0);
50
- _defineProperty(this, "environment", void 0);
51
- _defineProperty(this, "apdidLoaded", false);
52
- _defineProperty(this, "apdidLoadFailed", false);
53
40
  this.scene = options.scene;
54
41
  this.h5gateway = options.h5gateway || securityHost[SecurityRegionEnum.SG];
55
- this.environment = options.environment;
56
42
  }
57
-
58
- /**
59
- * Ensure the apdid-core script is loaded async.
60
- * Returns true if loaded successfully, false otherwise.
61
- * On failure, sets apdidLoadFailed flag for graceful degradation.
62
- */
63
43
  _createClass(Security, [{
64
- key: "ensureApdidLoaded",
65
- value: (function () {
66
- var _ensureApdidLoaded = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
67
- var loader, apdidEnv;
68
- return _regeneratorRuntime().wrap(function _callee$(_context) {
69
- while (1) switch (_context.prev = _context.next) {
70
- case 0:
71
- if (!this.apdidLoaded) {
72
- _context.next = 2;
73
- break;
74
- }
75
- return _context.abrupt("return", true);
76
- case 2:
77
- if (!this.apdidLoadFailed) {
78
- _context.next = 4;
79
- break;
80
- }
81
- return _context.abrupt("return", false);
82
- case 4:
83
- loader = ApdidLoader.getInstance();
84
- apdidEnv = mapEnvironment(this.environment);
85
- _context.prev = 6;
86
- _context.next = 9;
87
- return loader.load({
88
- environment: apdidEnv,
89
- callbacks: {
90
- onLoad: function onLoad(duration) {
91
- console.log("[Security] apdid-core script loaded in ".concat(duration, "ms"));
92
- },
93
- onLoadFailed: function onLoadFailed(error) {
94
- console.error('[Security] apdid-core script load failed:', error.message);
95
- },
96
- onLoadTimeout: function onLoadTimeout() {
97
- console.error('[Security] apdid-core script load timeout');
98
- }
99
- }
100
- });
101
- case 9:
102
- this.apdidLoaded = true;
103
- return _context.abrupt("return", true);
104
- case 13:
105
- _context.prev = 13;
106
- _context.t0 = _context["catch"](6);
107
- console.error('[Security] apdid-core load error, degrading:', _context.t0);
108
- this.apdidLoadFailed = true;
109
- return _context.abrupt("return", false);
110
- case 18:
111
- case "end":
112
- return _context.stop();
113
- }
114
- }, _callee, this, [[6, 13]]);
115
- }));
116
- function ensureApdidLoaded() {
117
- return _ensureApdidLoaded.apply(this, arguments);
118
- }
119
- return ensureApdidLoaded;
120
- }()
121
- /**
122
- * Get the APDID module from the loader.
123
- * Returns undefined if not loaded.
124
- */
125
- )
126
- }, {
127
- key: "getAPDIDModule",
128
- value: function getAPDIDModule() {
129
- var loader = ApdidLoader.getInstance();
130
- return loader.getApdidModule();
131
- }
132
- }, {
133
44
  key: "initSecurity",
134
45
  value: function initSecurity(successCallback, failCallback) {
135
- var _this = this;
46
+ console.log(this.scene, 'preloadSecuritySDK');
136
47
  if (!this.scene) {
137
48
  throw new Error('securityConfig parameter error');
138
49
  }
@@ -141,23 +52,12 @@ export var Security = /*#__PURE__*/function () {
141
52
  console.error(errorMsg);
142
53
  throw new Error(errorMsg);
143
54
  }
144
-
145
- // Async: ensure script is loaded before calling initToken
146
- this.ensureApdidLoaded().then(function (loaded) {
147
- if (!loaded) {
148
- failCallback && failCallback('apdid-core script load failed');
149
- return;
150
- }
151
- _this.initToken(successCallback, failCallback);
152
- }).catch(function () {
153
- failCallback && failCallback('apdid-core script load failed');
154
- });
55
+ this.initToken(successCallback, failCallback);
155
56
  }
156
57
  }, {
157
58
  key: "initToken",
158
59
  value: function initToken(successCallback, failCallback) {
159
60
  try {
160
- var APDID = this.getAPDIDModule();
161
61
  APDID === null || APDID === void 0 || APDID.initToken(this.scene, {
162
62
  host: this.h5gateway
163
63
  }, function (success, tokenResult, msg) {
@@ -166,6 +66,7 @@ export var Security = /*#__PURE__*/function () {
166
66
  } else {
167
67
  failCallback && failCallback(msg);
168
68
  }
69
+ console.log('initToken result tokenResult', JSON.stringify(tokenResult), msg);
169
70
  });
170
71
  } catch (error) {
171
72
  failCallback && failCallback(error === null || error === void 0 ? void 0 : error.toString());
@@ -174,48 +75,48 @@ export var Security = /*#__PURE__*/function () {
174
75
  }, {
175
76
  key: "pollingGetApdidToken",
176
77
  value: function () {
177
- var _pollingGetApdidToken = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(config) {
178
- var _this2 = this;
78
+ var _pollingGetApdidToken = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(config) {
79
+ var _this = this;
179
80
  var tokenCollectTime, dataPollingInterval, asyncFunc;
180
- return _regeneratorRuntime().wrap(function _callee4$(_context4) {
181
- while (1) switch (_context4.prev = _context4.next) {
81
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
82
+ while (1) switch (_context3.prev = _context3.next) {
182
83
  case 0:
183
84
  tokenCollectTime = parseInt((config === null || config === void 0 ? void 0 : config.tokenCollectTime) || '0', 10);
184
85
  dataPollingInterval = parseInt((config === null || config === void 0 ? void 0 : config.dataPollingInterval) || '500', 10);
185
86
  asyncFunc = /*#__PURE__*/function () {
186
- var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(resolve) {
87
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(resolve) {
187
88
  var deviceId, interval, polling;
188
- return _regeneratorRuntime().wrap(function _callee3$(_context3) {
189
- while (1) switch (_context3.prev = _context3.next) {
89
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
90
+ while (1) switch (_context2.prev = _context2.next) {
190
91
  case 0:
191
- _context3.next = 2;
192
- return _this2.getApdidToken();
92
+ _context2.next = 2;
93
+ return _this.getApdidToken();
193
94
  case 2:
194
- deviceId = _context3.sent;
95
+ deviceId = _context2.sent;
195
96
  if (!deviceId) {
196
- _context3.next = 5;
97
+ _context2.next = 5;
197
98
  break;
198
99
  }
199
- return _context3.abrupt("return", resolve(deviceId));
100
+ return _context2.abrupt("return", resolve(deviceId));
200
101
  case 5:
201
102
  polling = /*#__PURE__*/function () {
202
- var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
203
- return _regeneratorRuntime().wrap(function _callee2$(_context2) {
204
- while (1) switch (_context2.prev = _context2.next) {
103
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
104
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
105
+ while (1) switch (_context.prev = _context.next) {
205
106
  case 0:
206
- _context2.next = 2;
207
- return _this2.getApdidToken();
107
+ _context.next = 2;
108
+ return _this.getApdidToken();
208
109
  case 2:
209
- deviceId = _context2.sent;
110
+ deviceId = _context.sent;
210
111
  if (deviceId) {
211
112
  clearInterval(interval);
212
113
  resolve(deviceId);
213
114
  }
214
115
  case 4:
215
116
  case "end":
216
- return _context2.stop();
117
+ return _context.stop();
217
118
  }
218
- }, _callee2);
119
+ }, _callee);
219
120
  }));
220
121
  return function polling() {
221
122
  return _ref2.apply(this, arguments);
@@ -228,22 +129,22 @@ export var Security = /*#__PURE__*/function () {
228
129
  }, tokenCollectTime);
229
130
  case 8:
230
131
  case "end":
231
- return _context3.stop();
132
+ return _context2.stop();
232
133
  }
233
- }, _callee3);
134
+ }, _callee2);
234
135
  }));
235
136
  return function asyncFunc(_x2) {
236
137
  return _ref.apply(this, arguments);
237
138
  };
238
139
  }();
239
- return _context4.abrupt("return", new Promise(function (resolve) {
140
+ return _context3.abrupt("return", new Promise(function (resolve) {
240
141
  asyncFunc(resolve);
241
142
  }));
242
143
  case 4:
243
144
  case "end":
244
- return _context4.stop();
145
+ return _context3.stop();
245
146
  }
246
- }, _callee4);
147
+ }, _callee3);
247
148
  }));
248
149
  function pollingGetApdidToken(_x) {
249
150
  return _pollingGetApdidToken.apply(this, arguments);
@@ -253,37 +154,25 @@ export var Security = /*#__PURE__*/function () {
253
154
  }, {
254
155
  key: "getApdidToken",
255
156
  value: function () {
256
- var _getApdidToken = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5() {
257
- var _this3 = this;
258
- var loaded;
259
- return _regeneratorRuntime().wrap(function _callee5$(_context5) {
260
- while (1) switch (_context5.prev = _context5.next) {
157
+ var _getApdidToken = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
158
+ var _this2 = this;
159
+ return _regeneratorRuntime().wrap(function _callee4$(_context4) {
160
+ while (1) switch (_context4.prev = _context4.next) {
261
161
  case 0:
262
- _context5.next = 2;
263
- return this.ensureApdidLoaded();
264
- case 2:
265
- loaded = _context5.sent;
266
- if (loaded) {
267
- _context5.next = 5;
268
- break;
269
- }
270
- return _context5.abrupt("return", '');
271
- case 5:
272
- return _context5.abrupt("return", new Promise(function (resolve) {
162
+ return _context4.abrupt("return", new Promise(function (resolve) {
273
163
  try {
274
- var APDID = _this3.getAPDIDModule();
275
- APDID === null || APDID === void 0 || APDID.getApdidToken(_this3.scene, function (tokenResult) {
164
+ APDID === null || APDID === void 0 || APDID.getApdidToken(_this2.scene, function (tokenResult) {
276
165
  resolve(tokenResult === null || tokenResult === void 0 ? void 0 : tokenResult.token);
277
166
  });
278
167
  } catch (error) {
279
168
  resolve('');
280
169
  }
281
170
  }));
282
- case 6:
171
+ case 1:
283
172
  case "end":
284
- return _context5.stop();
173
+ return _context4.stop();
285
174
  }
286
- }, _callee5, this);
175
+ }, _callee4);
287
176
  }));
288
177
  function getApdidToken() {
289
178
  return _getApdidToken.apply(this, arguments);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alipay/ams-checkout",
3
- "version": "0.0.1783663570-dev.5",
3
+ "version": "0.0.1784095668-dev.0",
4
4
  "description": "",
5
5
  "author": "",
6
6
  "exports": {
@@ -1,340 +0,0 @@
1
- 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); }
2
- function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
3
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
4
- function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
5
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
6
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
7
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
8
- function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
9
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
10
- function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
11
- /**
12
- * ApdidLoader - Async loader for apdid-core security SDK (ESM)
13
- *
14
- * Features:
15
- * - Singleton pattern (ApdidLoader.getInstance())
16
- * - URL whitelist validation (production/pre/dev)
17
- * - Timeout control (10s)
18
- * - Retry mechanism (max 1 retry, transparent to caller)
19
- * - Concurrent call dedup (shared loadingPromise)
20
- * - State management: idle -> loading -> ready/failed
21
- * - Monitoring event hooks (onLoad callback)
22
- * - Uses dynamic import() for ESM modules
23
- */
24
-
25
- /** Environment type for CDN URL selection */
26
-
27
- /** State of the ApdidLoader */
28
-
29
- /** Callback for monitoring events */
30
-
31
- /** Configuration for ApdidLoader */
32
-
33
- /** CDN config for different environments */
34
- var APDID_CONFIG = {
35
- production: {
36
- url: 'https://cdn.marmot-cloud.com/page/antom-js/apdid-core.umd.min.js'
37
- },
38
- pre: {
39
- url: 'https://antom-js-pre-unio.page.alipay.net/apdid-core.umd.min.js'
40
- },
41
- dev: {
42
- url: 'https://antom-js-dev-unio.page.alipay.net/apdid-core.umd.min.js'
43
- }
44
- };
45
-
46
- /** All allowed URLs (whitelist) */
47
- var ALLOWED_URLS = new Set(Object.values(APDID_CONFIG).map(function (c) {
48
- return c.url;
49
- }));
50
-
51
- /** Timeout for script loading in milliseconds */
52
- var LOAD_TIMEOUT_MS = 10000;
53
-
54
- /** Maximum number of retries */
55
- var MAX_RETRIES = 1;
56
-
57
- /** Global variable name (fallback for UMD bundles) */
58
- var APDID_GLOBAL_NAME = 'APDID';
59
-
60
- /**
61
- * ApdidLoader - Singleton class responsible for async loading the apdid-core ESM module.
62
- *
63
- * Key behaviors:
64
- * - Uses dynamic import() to load ESM modules
65
- * - Concurrent calls share the same loading promise
66
- * - On success, the module export is stored internally
67
- * - On failure/timeout, the loader degrades gracefully and getApdidModule() returns undefined
68
- */
69
- export var ApdidLoader = /*#__PURE__*/function () {
70
- function ApdidLoader() {
71
- _classCallCheck(this, ApdidLoader);
72
- _defineProperty(this, "state", 'idle');
73
- _defineProperty(this, "loadingPromise", null);
74
- _defineProperty(this, "apdidModule", null);
75
- _defineProperty(this, "retryCount", 0);
76
- _defineProperty(this, "config", null);
77
- }
78
-
79
- /** Get the singleton instance */
80
- _createClass(ApdidLoader, [{
81
- key: "getState",
82
- value: /** Get current state */
83
- function getState() {
84
- return this.state;
85
- }
86
-
87
- /** Get the loaded APDID module (undefined if not loaded or failed) */
88
- }, {
89
- key: "getApdidModule",
90
- value: function getApdidModule() {
91
- return this.apdidModule;
92
- }
93
-
94
- /**
95
- * 非阻塞调度 apdid 加载
96
- * 利用 requestIdleCallback 在浏览器空闲时发起加载,2s 超时兜底
97
- * 调用方无需 await,不阻塞主流程
98
- */
99
- }, {
100
- key: "scheduleLoad",
101
- value: function scheduleLoad(config) {
102
- var _this = this;
103
- if (this.state !== 'idle') return;
104
- var trigger = function trigger() {
105
- _this.load(config).catch(function () {
106
- // 加载失败由 ApdidLoader 内部处理重试和状态更新
107
- });
108
- };
109
- if (typeof requestIdleCallback !== 'undefined') {
110
- var idleId = requestIdleCallback(trigger, {
111
- timeout: 2000
112
- });
113
- // 兜底:2s 后若仍未触发,强制发起
114
- setTimeout(function () {
115
- cancelIdleCallback(idleId);
116
- if (_this.state === 'idle') {
117
- trigger();
118
- }
119
- }, 2000);
120
- } else {
121
- // 不支持 requestIdleCallback 的浏览器降级为 setTimeout(0)
122
- setTimeout(trigger, 0);
123
- }
124
- }
125
-
126
- /**
127
- * Load the apdid-core script asynchronously.
128
- * If already loaded or currently loading, returns the existing promise.
129
- * Retries are transparent: the returned promise resolves only after the final
130
- * attempt succeeds, or rejects after all retries are exhausted.
131
- */
132
- }, {
133
- key: "load",
134
- value: (function () {
135
- var _load = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(config) {
136
- var envConfig, _config$callbacks, _config$callbacks$onL, _error, url, _config$callbacks2, _config$callbacks2$on, _error2;
137
- return _regeneratorRuntime().wrap(function _callee$(_context) {
138
- while (1) switch (_context.prev = _context.next) {
139
- case 0:
140
- if (!(this.state === 'ready')) {
141
- _context.next = 2;
142
- break;
143
- }
144
- return _context.abrupt("return", Promise.resolve());
145
- case 2:
146
- if (!(this.state === 'loading' && this.loadingPromise)) {
147
- _context.next = 4;
148
- break;
149
- }
150
- return _context.abrupt("return", this.loadingPromise);
151
- case 4:
152
- // Store config for potential retry
153
- this.config = config;
154
-
155
- // Validate environment and get config
156
- envConfig = APDID_CONFIG[config.environment];
157
- if (envConfig) {
158
- _context.next = 11;
159
- break;
160
- }
161
- _error = new Error("[ApdidLoader] Invalid environment: ".concat(config.environment, ". Must be one of: production, pre, dev"));
162
- this.state = 'failed';
163
- (_config$callbacks = config.callbacks) === null || _config$callbacks === void 0 || (_config$callbacks$onL = _config$callbacks.onLoadFailed) === null || _config$callbacks$onL === void 0 || _config$callbacks$onL.call(_config$callbacks, _error);
164
- return _context.abrupt("return", Promise.reject(_error));
165
- case 11:
166
- url = envConfig.url; // Validate URL against whitelist
167
- if (ALLOWED_URLS.has(url)) {
168
- _context.next = 17;
169
- break;
170
- }
171
- _error2 = new Error("[ApdidLoader] URL not in whitelist: ".concat(url));
172
- this.state = 'failed';
173
- (_config$callbacks2 = config.callbacks) === null || _config$callbacks2 === void 0 || (_config$callbacks2$on = _config$callbacks2.onLoadFailed) === null || _config$callbacks2$on === void 0 || _config$callbacks2$on.call(_config$callbacks2, _error2);
174
- return _context.abrupt("return", Promise.reject(_error2));
175
- case 17:
176
- if (!(this.state === 'failed' && this.retryCount > MAX_RETRIES)) {
177
- _context.next = 19;
178
- break;
179
- }
180
- return _context.abrupt("return", Promise.reject(new Error('[ApdidLoader] Max retries exceeded')));
181
- case 19:
182
- // Start loading - use _loadWithRetry which handles retries transparently
183
- this.state = 'loading';
184
- this.loadingPromise = this._loadWithRetry(url, config);
185
- return _context.abrupt("return", this.loadingPromise);
186
- case 22:
187
- case "end":
188
- return _context.stop();
189
- }
190
- }, _callee, this);
191
- }));
192
- function load(_x) {
193
- return _load.apply(this, arguments);
194
- }
195
- return load;
196
- }()
197
- /**
198
- * Load module with transparent retry logic.
199
- * The returned promise resolves/rejects based on the final retry outcome.
200
- */
201
- )
202
- }, {
203
- key: "_loadWithRetry",
204
- value: (function () {
205
- var _loadWithRetry2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(url, config) {
206
- var _config$callbacks3, _config$callbacks3$on;
207
- var lastError, attempt;
208
- return _regeneratorRuntime().wrap(function _callee2$(_context2) {
209
- while (1) switch (_context2.prev = _context2.next) {
210
- case 0:
211
- attempt = 0;
212
- case 1:
213
- if (!(attempt <= MAX_RETRIES)) {
214
- _context2.next = 16;
215
- break;
216
- }
217
- _context2.prev = 2;
218
- _context2.next = 5;
219
- return this._loadModuleOnce(url, config);
220
- case 5:
221
- // Success - reset retry count
222
- this.retryCount = 0;
223
- return _context2.abrupt("return");
224
- case 9:
225
- _context2.prev = 9;
226
- _context2.t0 = _context2["catch"](2);
227
- lastError = _context2.t0;
228
- if (attempt < MAX_RETRIES) {
229
- this.retryCount++;
230
- // Reset state for retry
231
- this.state = 'idle';
232
- }
233
- case 13:
234
- attempt++;
235
- _context2.next = 1;
236
- break;
237
- case 16:
238
- // All attempts failed
239
- this.state = 'failed';
240
- this.loadingPromise = null;
241
- (_config$callbacks3 = config.callbacks) === null || _config$callbacks3 === void 0 || (_config$callbacks3$on = _config$callbacks3.onLoadFailed) === null || _config$callbacks3$on === void 0 || _config$callbacks3$on.call(_config$callbacks3, lastError);
242
- throw lastError;
243
- case 20:
244
- case "end":
245
- return _context2.stop();
246
- }
247
- }, _callee2, this, [[2, 9]]);
248
- }));
249
- function _loadWithRetry(_x2, _x3) {
250
- return _loadWithRetry2.apply(this, arguments);
251
- }
252
- return _loadWithRetry;
253
- }()
254
- /**
255
- * Internal method: attempt to load the ESM module once via dynamic import() (no retry)
256
- */
257
- )
258
- }, {
259
- key: "_loadModuleOnce",
260
- value: function _loadModuleOnce(url, config) {
261
- var _this2 = this;
262
- var startTime = Date.now();
263
- var timeoutId;
264
-
265
- // Race dynamic import() against timeout
266
- var importPromise = import( /* webpackIgnore: true */url).then(function (module) {
267
- clearTimeout(timeoutId);
268
- // ESM default export or namespace
269
- var apdidCore = module.default || module;
270
- if (apdidCore) {
271
- _this2._onLoadSuccess(apdidCore, startTime, config);
272
- } else {
273
- // Fallback: check window.APDID (UMD bundle loaded separately)
274
- var globalApdid = window[APDID_GLOBAL_NAME];
275
- if (globalApdid) {
276
- _this2._onLoadSuccess(globalApdid, startTime, config);
277
- } else {
278
- throw new Error("[ApdidLoader] Module loaded but no export and window.".concat(APDID_GLOBAL_NAME, " not found"));
279
- }
280
- }
281
- });
282
- var timeoutPromise = new Promise(function (_resolve, reject) {
283
- timeoutId = setTimeout(function () {
284
- if (_this2.state === 'loading') {
285
- var _config$callbacks4, _config$callbacks4$on;
286
- (_config$callbacks4 = config.callbacks) === null || _config$callbacks4 === void 0 || (_config$callbacks4$on = _config$callbacks4.onLoadTimeout) === null || _config$callbacks4$on === void 0 || _config$callbacks4$on.call(_config$callbacks4);
287
- reject(new Error("[ApdidLoader] Module load timeout after ".concat(LOAD_TIMEOUT_MS, "ms: ").concat(url)));
288
- }
289
- }, LOAD_TIMEOUT_MS);
290
- });
291
- return Promise.race([importPromise, timeoutPromise]);
292
- }
293
-
294
- /**
295
- * Handle successful module load
296
- */
297
- }, {
298
- key: "_onLoadSuccess",
299
- value: function _onLoadSuccess(apdidCore, startTime, config) {
300
- var _config$callbacks5, _config$callbacks5$on;
301
- this.state = 'ready';
302
- this.apdidModule = apdidCore;
303
- var duration = Date.now() - startTime;
304
- (_config$callbacks5 = config.callbacks) === null || _config$callbacks5 === void 0 || (_config$callbacks5$on = _config$callbacks5.onLoad) === null || _config$callbacks5$on === void 0 || _config$callbacks5$on.call(_config$callbacks5, duration);
305
- }
306
-
307
- /**
308
- * Destroy the loader state and clean up
309
- */
310
- }, {
311
- key: "destroy",
312
- value: function destroy() {
313
- this.state = 'idle';
314
- this.apdidModule = null;
315
- this.loadingPromise = null;
316
- this.retryCount = 0;
317
- this.config = null;
318
- }
319
- }], [{
320
- key: "getInstance",
321
- value: function getInstance() {
322
- if (!ApdidLoader.instance) {
323
- ApdidLoader.instance = new ApdidLoader();
324
- }
325
- return ApdidLoader.instance;
326
- }
327
-
328
- /** Reset the singleton (for testing purposes only) */
329
- }, {
330
- key: "resetInstance",
331
- value: function resetInstance() {
332
- if (ApdidLoader.instance) {
333
- ApdidLoader.instance.destroy();
334
- }
335
- ApdidLoader.instance = null;
336
- }
337
- }]);
338
- return ApdidLoader;
339
- }();
340
- _defineProperty(ApdidLoader, "instance", null);