@alipay/ams-checkout 0.0.1776306844-dev.2 → 0.0.1777017092-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.
- package/ams-checkout.js +3 -3
- package/dist/ams-checkout.min.js +1 -1
- package/esm/core/component/element/EventCenter/index.d.ts +10 -0
- package/esm/core/component/element/EventCenter/index.js +40 -4
- package/esm/core/component/element/elementController/index.d.ts +2 -0
- package/esm/core/component/element/elementController/index.js +29 -2
- package/esm/core/component/element/elementProcessor/paymentProcessor.js +5 -0
- package/esm/core/instance/index.d.ts +12 -4
- package/esm/core/instance/index.js +152 -26
- package/esm/foundation/service/security/index.d.ts +9 -4
- package/esm/foundation/service/security/index.js +158 -35
- package/esm/foundation/service/security/security.d.ts +22 -1
- package/esm/foundation/service/security/security.js +150 -36
- package/esm/foundation/utils/preload_helper.d.ts +6 -3
- package/esm/foundation/utils/preload_helper.js +122 -32
- package/esm/main.js +4 -4
- package/esm/modern/index.js +1 -1
- package/esm/plugin/component/index.js +36 -29
- package/esm/tsdoc-metadata.json +1 -1
- package/esm/util/jshield-apdid/apdid-loader.js +400 -0
- package/esm/util/jshield-apdid/index.js +21 -0
- package/esm/util/security-registry.d.ts +72 -0
- package/esm/util/security-registry.js +175 -0
- package/esm/util/security.d.ts +22 -1
- package/esm/util/security.js +150 -36
- package/package.json +1 -1
- package/types.d.ts +4 -1
- package/types.untrimmed.d.ts +7 -1
|
@@ -0,0 +1,175 @@
|
|
|
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
|
+
* SecuritySdkRegistry - Shared registry for Security SDK instances
|
|
13
|
+
*
|
|
14
|
+
* Unifies the securitySdkMap management across SecurityService, PreloadHelper, and AMSSDK.
|
|
15
|
+
* Supports three states: loading, ready, failed to handle async script loading.
|
|
16
|
+
*
|
|
17
|
+
* Key behaviors:
|
|
18
|
+
* - scene-based key (same as the original securitySdkMap key)
|
|
19
|
+
* - 'loading' state holds a shared loadingPromise so concurrent callers can await the same promise
|
|
20
|
+
* - 'ready' state holds the Security instance
|
|
21
|
+
* - 'failed' state holds the error
|
|
22
|
+
*
|
|
23
|
+
* Uses a generic interface to avoid tight coupling to a specific Security class
|
|
24
|
+
* (there are two Security class implementations in the codebase).
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* Minimal interface for Security SDK instances stored in the registry.
|
|
28
|
+
* Both Security class implementations (util/security and foundation/service/security/security) satisfy this.
|
|
29
|
+
*/
|
|
30
|
+
/**
|
|
31
|
+
* Security SDK entry states:
|
|
32
|
+
* - loading: Security instance is being created and initialized (holds shared promise)
|
|
33
|
+
* - ready: Security instance is available
|
|
34
|
+
* - failed: Security initialization failed (holds error)
|
|
35
|
+
*/
|
|
36
|
+
/**
|
|
37
|
+
* SecuritySdkRegistry - Singleton registry for Security SDK instances
|
|
38
|
+
*/
|
|
39
|
+
var SecuritySdkRegistryClass = /*#__PURE__*/function () {
|
|
40
|
+
function SecuritySdkRegistryClass() {
|
|
41
|
+
_classCallCheck(this, SecuritySdkRegistryClass);
|
|
42
|
+
_defineProperty(this, "registry", new Map());
|
|
43
|
+
}
|
|
44
|
+
_createClass(SecuritySdkRegistryClass, [{
|
|
45
|
+
key: "get",
|
|
46
|
+
value: /** Get the registry entry for a scene */
|
|
47
|
+
function get(scene) {
|
|
48
|
+
return this.registry.get(scene);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/** Set a loading entry with its promise */
|
|
52
|
+
}, {
|
|
53
|
+
key: "setLoading",
|
|
54
|
+
value: function setLoading(scene, loadingPromise) {
|
|
55
|
+
this.registry.set(scene, {
|
|
56
|
+
status: 'loading',
|
|
57
|
+
loadingPromise: loadingPromise
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/** Set a ready entry with the Security instance */
|
|
62
|
+
}, {
|
|
63
|
+
key: "setReady",
|
|
64
|
+
value: function setReady(scene, instance) {
|
|
65
|
+
this.registry.set(scene, {
|
|
66
|
+
status: 'ready',
|
|
67
|
+
instance: instance
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** Set a failed entry with the error */
|
|
72
|
+
}, {
|
|
73
|
+
key: "setFailed",
|
|
74
|
+
value: function setFailed(scene, error) {
|
|
75
|
+
this.registry.set(scene, {
|
|
76
|
+
status: 'failed',
|
|
77
|
+
error: error
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/** Get a ready Security instance, or undefined if not ready */
|
|
82
|
+
}, {
|
|
83
|
+
key: "getReadyInstance",
|
|
84
|
+
value: function getReadyInstance(scene) {
|
|
85
|
+
var entry = this.registry.get(scene);
|
|
86
|
+
if (entry && entry.status === 'ready') {
|
|
87
|
+
return entry.instance;
|
|
88
|
+
}
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Get a Security instance, awaiting if currently loading.
|
|
94
|
+
* Returns undefined if not found, failed, or loading fails.
|
|
95
|
+
*/
|
|
96
|
+
}, {
|
|
97
|
+
key: "getInstance",
|
|
98
|
+
value: (function () {
|
|
99
|
+
var _getInstance = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(scene) {
|
|
100
|
+
var entry;
|
|
101
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
102
|
+
while (1) switch (_context.prev = _context.next) {
|
|
103
|
+
case 0:
|
|
104
|
+
entry = this.registry.get(scene);
|
|
105
|
+
if (entry) {
|
|
106
|
+
_context.next = 3;
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
return _context.abrupt("return", undefined);
|
|
110
|
+
case 3:
|
|
111
|
+
if (!(entry.status === 'ready')) {
|
|
112
|
+
_context.next = 5;
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
115
|
+
return _context.abrupt("return", entry.instance);
|
|
116
|
+
case 5:
|
|
117
|
+
if (!(entry.status === 'loading')) {
|
|
118
|
+
_context.next = 15;
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
_context.prev = 6;
|
|
122
|
+
_context.next = 9;
|
|
123
|
+
return entry.loadingPromise;
|
|
124
|
+
case 9:
|
|
125
|
+
return _context.abrupt("return", _context.sent);
|
|
126
|
+
case 12:
|
|
127
|
+
_context.prev = 12;
|
|
128
|
+
_context.t0 = _context["catch"](6);
|
|
129
|
+
return _context.abrupt("return", undefined);
|
|
130
|
+
case 15:
|
|
131
|
+
return _context.abrupt("return", undefined);
|
|
132
|
+
case 16:
|
|
133
|
+
case "end":
|
|
134
|
+
return _context.stop();
|
|
135
|
+
}
|
|
136
|
+
}, _callee, this, [[6, 12]]);
|
|
137
|
+
}));
|
|
138
|
+
function getInstance(_x) {
|
|
139
|
+
return _getInstance.apply(this, arguments);
|
|
140
|
+
}
|
|
141
|
+
return getInstance;
|
|
142
|
+
}() /** Check if a scene has a ready instance */)
|
|
143
|
+
}, {
|
|
144
|
+
key: "isReady",
|
|
145
|
+
value: function isReady(scene) {
|
|
146
|
+
var entry = this.registry.get(scene);
|
|
147
|
+
return (entry === null || entry === void 0 ? void 0 : entry.status) === 'ready';
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/** Check if a scene is currently loading */
|
|
151
|
+
}, {
|
|
152
|
+
key: "isLoading",
|
|
153
|
+
value: function isLoading(scene) {
|
|
154
|
+
var entry = this.registry.get(scene);
|
|
155
|
+
return (entry === null || entry === void 0 ? void 0 : entry.status) === 'loading';
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/** Delete a scene entry */
|
|
159
|
+
}, {
|
|
160
|
+
key: "delete",
|
|
161
|
+
value: function _delete(scene) {
|
|
162
|
+
return this.registry.delete(scene);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/** Clear all entries */
|
|
166
|
+
}, {
|
|
167
|
+
key: "clear",
|
|
168
|
+
value: function clear() {
|
|
169
|
+
this.registry.clear();
|
|
170
|
+
}
|
|
171
|
+
}]);
|
|
172
|
+
return SecuritySdkRegistryClass;
|
|
173
|
+
}();
|
|
174
|
+
/** Singleton instance of SecuritySdkRegistry */
|
|
175
|
+
export var SecuritySdkRegistry = new SecuritySdkRegistryClass();
|
package/esm/util/security.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { IsecurityConfig, ProductSceneEnum, DeviceIdParameter } from '../types';
|
|
2
|
+
import type { ApdidEnvironment } from './jshield-apdid';
|
|
2
3
|
export declare const getSecurityConfigStorageKey: (scene: ProductSceneEnum) => string;
|
|
3
4
|
export declare enum SecurityRegionEnum {
|
|
4
5
|
SG = "SG",
|
|
@@ -23,10 +24,30 @@ export declare const sceneMap: {
|
|
|
23
24
|
};
|
|
24
25
|
export declare const getSecurityHost: (region: string) => string;
|
|
25
26
|
export declare const getSecurityScene: (product: string) => string;
|
|
27
|
+
/**
|
|
28
|
+
* Map SDK environment string to ApdidEnvironment for CDN URL selection.
|
|
29
|
+
*/
|
|
30
|
+
export declare const mapEnvironment: (env?: string) => ApdidEnvironment;
|
|
26
31
|
export declare class Security {
|
|
27
32
|
scene: string;
|
|
28
33
|
h5gateway: string;
|
|
29
|
-
|
|
34
|
+
private environment?;
|
|
35
|
+
private apdidLoaded;
|
|
36
|
+
private apdidLoadFailed;
|
|
37
|
+
constructor(options: IsecurityConfig & {
|
|
38
|
+
environment?: string;
|
|
39
|
+
});
|
|
40
|
+
/**
|
|
41
|
+
* Ensure the apdid-core script is loaded async.
|
|
42
|
+
* Returns true if loaded successfully, false otherwise.
|
|
43
|
+
* On failure, sets apdidLoadFailed flag for graceful degradation.
|
|
44
|
+
*/
|
|
45
|
+
private ensureApdidLoaded;
|
|
46
|
+
/**
|
|
47
|
+
* Get the APDID module from the loader.
|
|
48
|
+
* Returns undefined if not loaded.
|
|
49
|
+
*/
|
|
50
|
+
private getAPDIDModule;
|
|
30
51
|
initSecurity(successCallback: any, failCallback: any): void;
|
|
31
52
|
private initToken;
|
|
32
53
|
pollingGetApdidToken(config?: DeviceIdParameter): Promise<string>;
|
package/esm/util/security.js
CHANGED
|
@@ -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
|
|
12
|
+
import { ApdidLoader } from "./jshield-apdid";
|
|
13
13
|
export var getSecurityConfigStorageKey = function getSecurityConfigStorageKey(scene) {
|
|
14
14
|
return "AMSSDK_SECURITY_CONFIG_".concat(scene);
|
|
15
15
|
};
|
|
@@ -32,17 +32,108 @@ export var getSecurityScene = function getSecurityScene(product) {
|
|
|
32
32
|
console.log('getSecurityScene', product);
|
|
33
33
|
return sceneMap[product] || '';
|
|
34
34
|
};
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Map SDK environment string to ApdidEnvironment for CDN URL selection.
|
|
38
|
+
*/
|
|
39
|
+
export var mapEnvironment = function mapEnvironment(env) {
|
|
40
|
+
if (!env) return 'production';
|
|
41
|
+
var lower = env.toLowerCase();
|
|
42
|
+
if (lower === 'pre' || lower === 'light_sandbox') return 'pre';
|
|
43
|
+
if (lower === 'dev' || lower === 'test' || lower === 'local') return 'dev';
|
|
44
|
+
return 'production';
|
|
45
|
+
};
|
|
35
46
|
export var Security = /*#__PURE__*/function () {
|
|
36
47
|
function Security(options) {
|
|
37
48
|
_classCallCheck(this, Security);
|
|
38
49
|
_defineProperty(this, "scene", void 0);
|
|
39
50
|
_defineProperty(this, "h5gateway", void 0);
|
|
51
|
+
_defineProperty(this, "environment", void 0);
|
|
52
|
+
_defineProperty(this, "apdidLoaded", false);
|
|
53
|
+
_defineProperty(this, "apdidLoadFailed", false);
|
|
40
54
|
this.scene = options.scene;
|
|
41
55
|
this.h5gateway = options.h5gateway || securityHost[SecurityRegionEnum.SG];
|
|
56
|
+
this.environment = options.environment;
|
|
42
57
|
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Ensure the apdid-core script is loaded async.
|
|
61
|
+
* Returns true if loaded successfully, false otherwise.
|
|
62
|
+
* On failure, sets apdidLoadFailed flag for graceful degradation.
|
|
63
|
+
*/
|
|
43
64
|
_createClass(Security, [{
|
|
65
|
+
key: "ensureApdidLoaded",
|
|
66
|
+
value: (function () {
|
|
67
|
+
var _ensureApdidLoaded = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
68
|
+
var loader, apdidEnv;
|
|
69
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
70
|
+
while (1) switch (_context.prev = _context.next) {
|
|
71
|
+
case 0:
|
|
72
|
+
if (!this.apdidLoaded) {
|
|
73
|
+
_context.next = 2;
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
return _context.abrupt("return", true);
|
|
77
|
+
case 2:
|
|
78
|
+
if (!this.apdidLoadFailed) {
|
|
79
|
+
_context.next = 4;
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
return _context.abrupt("return", false);
|
|
83
|
+
case 4:
|
|
84
|
+
loader = ApdidLoader.getInstance();
|
|
85
|
+
apdidEnv = mapEnvironment(this.environment);
|
|
86
|
+
_context.prev = 6;
|
|
87
|
+
_context.next = 9;
|
|
88
|
+
return loader.load({
|
|
89
|
+
environment: apdidEnv,
|
|
90
|
+
callbacks: {
|
|
91
|
+
onLoad: function onLoad(duration) {
|
|
92
|
+
console.log("[Security] apdid-core script loaded in ".concat(duration, "ms"));
|
|
93
|
+
},
|
|
94
|
+
onLoadFailed: function onLoadFailed(error) {
|
|
95
|
+
console.error('[Security] apdid-core script load failed:', error.message);
|
|
96
|
+
},
|
|
97
|
+
onLoadTimeout: function onLoadTimeout() {
|
|
98
|
+
console.error('[Security] apdid-core script load timeout');
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
case 9:
|
|
103
|
+
this.apdidLoaded = true;
|
|
104
|
+
return _context.abrupt("return", true);
|
|
105
|
+
case 13:
|
|
106
|
+
_context.prev = 13;
|
|
107
|
+
_context.t0 = _context["catch"](6);
|
|
108
|
+
console.error('[Security] apdid-core load error, degrading:', _context.t0);
|
|
109
|
+
this.apdidLoadFailed = true;
|
|
110
|
+
return _context.abrupt("return", false);
|
|
111
|
+
case 18:
|
|
112
|
+
case "end":
|
|
113
|
+
return _context.stop();
|
|
114
|
+
}
|
|
115
|
+
}, _callee, this, [[6, 13]]);
|
|
116
|
+
}));
|
|
117
|
+
function ensureApdidLoaded() {
|
|
118
|
+
return _ensureApdidLoaded.apply(this, arguments);
|
|
119
|
+
}
|
|
120
|
+
return ensureApdidLoaded;
|
|
121
|
+
}()
|
|
122
|
+
/**
|
|
123
|
+
* Get the APDID module from the loader.
|
|
124
|
+
* Returns undefined if not loaded.
|
|
125
|
+
*/
|
|
126
|
+
)
|
|
127
|
+
}, {
|
|
128
|
+
key: "getAPDIDModule",
|
|
129
|
+
value: function getAPDIDModule() {
|
|
130
|
+
var loader = ApdidLoader.getInstance();
|
|
131
|
+
return loader.getApdidModule();
|
|
132
|
+
}
|
|
133
|
+
}, {
|
|
44
134
|
key: "initSecurity",
|
|
45
135
|
value: function initSecurity(successCallback, failCallback) {
|
|
136
|
+
var _this = this;
|
|
46
137
|
console.log(this.scene, 'preloadSecuritySDK');
|
|
47
138
|
if (!this.scene) {
|
|
48
139
|
throw new Error('securityConfig parameter error');
|
|
@@ -52,12 +143,23 @@ export var Security = /*#__PURE__*/function () {
|
|
|
52
143
|
console.error(errorMsg);
|
|
53
144
|
throw new Error(errorMsg);
|
|
54
145
|
}
|
|
55
|
-
|
|
146
|
+
|
|
147
|
+
// Async: ensure script is loaded before calling initToken
|
|
148
|
+
this.ensureApdidLoaded().then(function (loaded) {
|
|
149
|
+
if (!loaded) {
|
|
150
|
+
failCallback && failCallback('apdid-core script load failed');
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
_this.initToken(successCallback, failCallback);
|
|
154
|
+
}).catch(function () {
|
|
155
|
+
failCallback && failCallback('apdid-core script load failed');
|
|
156
|
+
});
|
|
56
157
|
}
|
|
57
158
|
}, {
|
|
58
159
|
key: "initToken",
|
|
59
160
|
value: function initToken(successCallback, failCallback) {
|
|
60
161
|
try {
|
|
162
|
+
var APDID = this.getAPDIDModule();
|
|
61
163
|
APDID === null || APDID === void 0 || APDID.initToken(this.scene, {
|
|
62
164
|
host: this.h5gateway
|
|
63
165
|
}, function (success, tokenResult, msg) {
|
|
@@ -75,48 +177,48 @@ export var Security = /*#__PURE__*/function () {
|
|
|
75
177
|
}, {
|
|
76
178
|
key: "pollingGetApdidToken",
|
|
77
179
|
value: function () {
|
|
78
|
-
var _pollingGetApdidToken = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function
|
|
79
|
-
var
|
|
180
|
+
var _pollingGetApdidToken = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(config) {
|
|
181
|
+
var _this2 = this;
|
|
80
182
|
var tokenCollectTime, dataPollingInterval, asyncFunc;
|
|
81
|
-
return _regeneratorRuntime().wrap(function
|
|
82
|
-
while (1) switch (
|
|
183
|
+
return _regeneratorRuntime().wrap(function _callee4$(_context4) {
|
|
184
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
83
185
|
case 0:
|
|
84
186
|
tokenCollectTime = parseInt((config === null || config === void 0 ? void 0 : config.tokenCollectTime) || '0', 10);
|
|
85
187
|
dataPollingInterval = parseInt((config === null || config === void 0 ? void 0 : config.dataPollingInterval) || '500', 10);
|
|
86
188
|
asyncFunc = /*#__PURE__*/function () {
|
|
87
|
-
var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function
|
|
189
|
+
var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(resolve) {
|
|
88
190
|
var deviceId, interval, polling;
|
|
89
|
-
return _regeneratorRuntime().wrap(function
|
|
90
|
-
while (1) switch (
|
|
191
|
+
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
|
|
192
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
91
193
|
case 0:
|
|
92
|
-
|
|
93
|
-
return
|
|
194
|
+
_context3.next = 2;
|
|
195
|
+
return _this2.getApdidToken();
|
|
94
196
|
case 2:
|
|
95
|
-
deviceId =
|
|
197
|
+
deviceId = _context3.sent;
|
|
96
198
|
if (!deviceId) {
|
|
97
|
-
|
|
199
|
+
_context3.next = 5;
|
|
98
200
|
break;
|
|
99
201
|
}
|
|
100
|
-
return
|
|
202
|
+
return _context3.abrupt("return", resolve(deviceId));
|
|
101
203
|
case 5:
|
|
102
204
|
polling = /*#__PURE__*/function () {
|
|
103
|
-
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function
|
|
104
|
-
return _regeneratorRuntime().wrap(function
|
|
105
|
-
while (1) switch (
|
|
205
|
+
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
|
|
206
|
+
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
207
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
106
208
|
case 0:
|
|
107
|
-
|
|
108
|
-
return
|
|
209
|
+
_context2.next = 2;
|
|
210
|
+
return _this2.getApdidToken();
|
|
109
211
|
case 2:
|
|
110
|
-
deviceId =
|
|
212
|
+
deviceId = _context2.sent;
|
|
111
213
|
if (deviceId) {
|
|
112
214
|
clearInterval(interval);
|
|
113
215
|
resolve(deviceId);
|
|
114
216
|
}
|
|
115
217
|
case 4:
|
|
116
218
|
case "end":
|
|
117
|
-
return
|
|
219
|
+
return _context2.stop();
|
|
118
220
|
}
|
|
119
|
-
},
|
|
221
|
+
}, _callee2);
|
|
120
222
|
}));
|
|
121
223
|
return function polling() {
|
|
122
224
|
return _ref2.apply(this, arguments);
|
|
@@ -129,22 +231,22 @@ export var Security = /*#__PURE__*/function () {
|
|
|
129
231
|
}, tokenCollectTime);
|
|
130
232
|
case 8:
|
|
131
233
|
case "end":
|
|
132
|
-
return
|
|
234
|
+
return _context3.stop();
|
|
133
235
|
}
|
|
134
|
-
},
|
|
236
|
+
}, _callee3);
|
|
135
237
|
}));
|
|
136
238
|
return function asyncFunc(_x2) {
|
|
137
239
|
return _ref.apply(this, arguments);
|
|
138
240
|
};
|
|
139
241
|
}();
|
|
140
|
-
return
|
|
242
|
+
return _context4.abrupt("return", new Promise(function (resolve) {
|
|
141
243
|
asyncFunc(resolve);
|
|
142
244
|
}));
|
|
143
245
|
case 4:
|
|
144
246
|
case "end":
|
|
145
|
-
return
|
|
247
|
+
return _context4.stop();
|
|
146
248
|
}
|
|
147
|
-
},
|
|
249
|
+
}, _callee4);
|
|
148
250
|
}));
|
|
149
251
|
function pollingGetApdidToken(_x) {
|
|
150
252
|
return _pollingGetApdidToken.apply(this, arguments);
|
|
@@ -154,25 +256,37 @@ export var Security = /*#__PURE__*/function () {
|
|
|
154
256
|
}, {
|
|
155
257
|
key: "getApdidToken",
|
|
156
258
|
value: function () {
|
|
157
|
-
var _getApdidToken = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function
|
|
158
|
-
var
|
|
159
|
-
|
|
160
|
-
|
|
259
|
+
var _getApdidToken = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5() {
|
|
260
|
+
var _this3 = this;
|
|
261
|
+
var loaded;
|
|
262
|
+
return _regeneratorRuntime().wrap(function _callee5$(_context5) {
|
|
263
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
161
264
|
case 0:
|
|
162
|
-
|
|
265
|
+
_context5.next = 2;
|
|
266
|
+
return this.ensureApdidLoaded();
|
|
267
|
+
case 2:
|
|
268
|
+
loaded = _context5.sent;
|
|
269
|
+
if (loaded) {
|
|
270
|
+
_context5.next = 5;
|
|
271
|
+
break;
|
|
272
|
+
}
|
|
273
|
+
return _context5.abrupt("return", '');
|
|
274
|
+
case 5:
|
|
275
|
+
return _context5.abrupt("return", new Promise(function (resolve) {
|
|
163
276
|
try {
|
|
164
|
-
|
|
277
|
+
var APDID = _this3.getAPDIDModule();
|
|
278
|
+
APDID === null || APDID === void 0 || APDID.getApdidToken(_this3.scene, function (tokenResult) {
|
|
165
279
|
resolve(tokenResult === null || tokenResult === void 0 ? void 0 : tokenResult.token);
|
|
166
280
|
});
|
|
167
281
|
} catch (error) {
|
|
168
282
|
resolve('');
|
|
169
283
|
}
|
|
170
284
|
}));
|
|
171
|
-
case
|
|
285
|
+
case 6:
|
|
172
286
|
case "end":
|
|
173
|
-
return
|
|
287
|
+
return _context5.stop();
|
|
174
288
|
}
|
|
175
|
-
},
|
|
289
|
+
}, _callee5, this);
|
|
176
290
|
}));
|
|
177
291
|
function getApdidToken() {
|
|
178
292
|
return _getApdidToken.apply(this, arguments);
|
package/package.json
CHANGED
package/types.d.ts
CHANGED
|
@@ -611,7 +611,9 @@ declare class AxiosHeaders {
|
|
|
611
611
|
...targets: Array<AxiosHeaders | RawAxiosHeaders | string | undefined | null>
|
|
612
612
|
): AxiosHeaders;
|
|
613
613
|
|
|
614
|
-
toJSON(asStrings
|
|
614
|
+
toJSON(asStrings: true): Record<string, string>;
|
|
615
|
+
toJSON(asStrings?: false): Record<string, string | string[]>;
|
|
616
|
+
toJSON(asStrings?: boolean): Record<string, string | string[]>;
|
|
615
617
|
|
|
616
618
|
static from(thing?: AxiosHeaders | RawAxiosHeaders | string): AxiosHeaders;
|
|
617
619
|
|
|
@@ -695,6 +697,7 @@ declare interface BaseAppearance<A extends Partial<Appearance>> {
|
|
|
695
697
|
declare interface BaseBridgeEventMap<AppConfig extends Record<string, any> = Record<string, any>, SubmitReplay extends Record<string, any> = Record<string, any>, SubmitParams extends Record<string, any> = Record<string, any>, AppErrorCodes extends string = string, OpenModalConfig extends BaseOpenModalConfig = BaseOpenModalConfig> {
|
|
696
698
|
error: ErrorPayload<AppErrorCodes>;
|
|
697
699
|
/* Excluded from this release type: "OPENSDK@HANDSHAKE" */
|
|
700
|
+
/* Excluded from this release type: "OPENSDK@READY_HANDSHAKE" */
|
|
698
701
|
/* Excluded from this release type: "OPENSDK@UPDATE_CONFIG" */
|
|
699
702
|
/* Excluded from this release type: "OPENSDK@HANDSHAKE_ACK" */
|
|
700
703
|
/* Excluded from this release type: "OPENSDK@SUBMIT" */
|
package/types.untrimmed.d.ts
CHANGED
|
@@ -638,7 +638,9 @@ declare class AxiosHeaders {
|
|
|
638
638
|
...targets: Array<AxiosHeaders | RawAxiosHeaders | string | undefined | null>
|
|
639
639
|
): AxiosHeaders;
|
|
640
640
|
|
|
641
|
-
toJSON(asStrings
|
|
641
|
+
toJSON(asStrings: true): Record<string, string>;
|
|
642
|
+
toJSON(asStrings?: false): Record<string, string | string[]>;
|
|
643
|
+
toJSON(asStrings?: boolean): Record<string, string | string[]>;
|
|
642
644
|
|
|
643
645
|
static from(thing?: AxiosHeaders | RawAxiosHeaders | string): AxiosHeaders;
|
|
644
646
|
|
|
@@ -725,6 +727,10 @@ declare interface BaseBridgeEventMap<AppConfig extends Record<string, any> = Rec
|
|
|
725
727
|
* @internal 内部事件 不暴露给商户
|
|
726
728
|
*/
|
|
727
729
|
"OPENSDK@HANDSHAKE": AppConfig;
|
|
730
|
+
/**
|
|
731
|
+
* @internal 内部事件 不暴露给商户
|
|
732
|
+
*/
|
|
733
|
+
"OPENSDK@READY_HANDSHAKE": void;
|
|
728
734
|
/**
|
|
729
735
|
* @internal 内部事件 不暴露给商户
|
|
730
736
|
*/
|