@alipay/ams-checkout 0.0.1783663570-dev.1 → 0.0.1783663570-dev.2
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/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 -37
- 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/plugin/component/index.js +36 -29
- package/esm/util/jshield-apdid/apdid-loader.js +340 -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 -39
- package/package.json +1 -1
|
@@ -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 "../../../util/jshield-apdid";
|
|
13
13
|
export var getSecurityConfigStorageKey = function getSecurityConfigStorageKey(scene) {
|
|
14
14
|
return "AMSSDK_SECURITY_CONFIG_".concat(scene);
|
|
15
15
|
};
|
|
@@ -31,17 +31,108 @@ export var getSecurityHost = function getSecurityHost(region) {
|
|
|
31
31
|
export var getSecurityScene = function getSecurityScene(product) {
|
|
32
32
|
return sceneMap[product] || '';
|
|
33
33
|
};
|
|
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
|
+
};
|
|
34
45
|
export var Security = /*#__PURE__*/function () {
|
|
35
46
|
function Security(options) {
|
|
36
47
|
_classCallCheck(this, Security);
|
|
37
48
|
_defineProperty(this, "scene", void 0);
|
|
38
49
|
_defineProperty(this, "h5gateway", void 0);
|
|
50
|
+
_defineProperty(this, "environment", void 0);
|
|
51
|
+
_defineProperty(this, "apdidLoaded", false);
|
|
52
|
+
_defineProperty(this, "apdidLoadFailed", false);
|
|
39
53
|
this.scene = options.scene;
|
|
40
54
|
this.h5gateway = options.h5gateway || securityHost[SecurityRegionEnum.SG];
|
|
55
|
+
this.environment = options.environment;
|
|
41
56
|
}
|
|
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
|
+
*/
|
|
42
63
|
_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
|
+
}, {
|
|
43
133
|
key: "initSecurity",
|
|
44
134
|
value: function initSecurity(successCallback, failCallback) {
|
|
135
|
+
var _this = this;
|
|
45
136
|
if (!this.scene) {
|
|
46
137
|
throw new Error('securityConfig parameter error');
|
|
47
138
|
}
|
|
@@ -50,12 +141,23 @@ export var Security = /*#__PURE__*/function () {
|
|
|
50
141
|
console.error(errorMsg);
|
|
51
142
|
throw new Error(errorMsg);
|
|
52
143
|
}
|
|
53
|
-
|
|
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
|
+
});
|
|
54
155
|
}
|
|
55
156
|
}, {
|
|
56
157
|
key: "initToken",
|
|
57
158
|
value: function initToken(successCallback, failCallback) {
|
|
58
159
|
try {
|
|
160
|
+
var APDID = this.getAPDIDModule();
|
|
59
161
|
APDID === null || APDID === void 0 || APDID.initToken(this.scene, {
|
|
60
162
|
host: this.h5gateway
|
|
61
163
|
}, function (success, tokenResult, msg) {
|
|
@@ -64,7 +166,6 @@ export var Security = /*#__PURE__*/function () {
|
|
|
64
166
|
} else {
|
|
65
167
|
failCallback && failCallback(msg);
|
|
66
168
|
}
|
|
67
|
-
console.log('initToken result tokenResult', JSON.stringify(tokenResult), msg);
|
|
68
169
|
});
|
|
69
170
|
} catch (error) {
|
|
70
171
|
failCallback && failCallback(error === null || error === void 0 ? void 0 : error.toString());
|
|
@@ -73,48 +174,48 @@ export var Security = /*#__PURE__*/function () {
|
|
|
73
174
|
}, {
|
|
74
175
|
key: "pollingGetApdidToken",
|
|
75
176
|
value: function () {
|
|
76
|
-
var _pollingGetApdidToken = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function
|
|
77
|
-
var
|
|
177
|
+
var _pollingGetApdidToken = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(config) {
|
|
178
|
+
var _this2 = this;
|
|
78
179
|
var tokenCollectTime, dataPollingInterval, asyncFunc;
|
|
79
|
-
return _regeneratorRuntime().wrap(function
|
|
80
|
-
while (1) switch (
|
|
180
|
+
return _regeneratorRuntime().wrap(function _callee4$(_context4) {
|
|
181
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
81
182
|
case 0:
|
|
82
183
|
tokenCollectTime = parseInt((config === null || config === void 0 ? void 0 : config.tokenCollectTime) || '0', 10);
|
|
83
184
|
dataPollingInterval = parseInt((config === null || config === void 0 ? void 0 : config.dataPollingInterval) || '500', 10);
|
|
84
185
|
asyncFunc = /*#__PURE__*/function () {
|
|
85
|
-
var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function
|
|
186
|
+
var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(resolve) {
|
|
86
187
|
var deviceId, interval, polling;
|
|
87
|
-
return _regeneratorRuntime().wrap(function
|
|
88
|
-
while (1) switch (
|
|
188
|
+
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
|
|
189
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
89
190
|
case 0:
|
|
90
|
-
|
|
91
|
-
return
|
|
191
|
+
_context3.next = 2;
|
|
192
|
+
return _this2.getApdidToken();
|
|
92
193
|
case 2:
|
|
93
|
-
deviceId =
|
|
194
|
+
deviceId = _context3.sent;
|
|
94
195
|
if (!deviceId) {
|
|
95
|
-
|
|
196
|
+
_context3.next = 5;
|
|
96
197
|
break;
|
|
97
198
|
}
|
|
98
|
-
return
|
|
199
|
+
return _context3.abrupt("return", resolve(deviceId));
|
|
99
200
|
case 5:
|
|
100
201
|
polling = /*#__PURE__*/function () {
|
|
101
|
-
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function
|
|
102
|
-
return _regeneratorRuntime().wrap(function
|
|
103
|
-
while (1) switch (
|
|
202
|
+
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
|
|
203
|
+
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
204
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
104
205
|
case 0:
|
|
105
|
-
|
|
106
|
-
return
|
|
206
|
+
_context2.next = 2;
|
|
207
|
+
return _this2.getApdidToken();
|
|
107
208
|
case 2:
|
|
108
|
-
deviceId =
|
|
209
|
+
deviceId = _context2.sent;
|
|
109
210
|
if (deviceId) {
|
|
110
211
|
clearInterval(interval);
|
|
111
212
|
resolve(deviceId);
|
|
112
213
|
}
|
|
113
214
|
case 4:
|
|
114
215
|
case "end":
|
|
115
|
-
return
|
|
216
|
+
return _context2.stop();
|
|
116
217
|
}
|
|
117
|
-
},
|
|
218
|
+
}, _callee2);
|
|
118
219
|
}));
|
|
119
220
|
return function polling() {
|
|
120
221
|
return _ref2.apply(this, arguments);
|
|
@@ -127,22 +228,22 @@ export var Security = /*#__PURE__*/function () {
|
|
|
127
228
|
}, tokenCollectTime);
|
|
128
229
|
case 8:
|
|
129
230
|
case "end":
|
|
130
|
-
return
|
|
231
|
+
return _context3.stop();
|
|
131
232
|
}
|
|
132
|
-
},
|
|
233
|
+
}, _callee3);
|
|
133
234
|
}));
|
|
134
235
|
return function asyncFunc(_x2) {
|
|
135
236
|
return _ref.apply(this, arguments);
|
|
136
237
|
};
|
|
137
238
|
}();
|
|
138
|
-
return
|
|
239
|
+
return _context4.abrupt("return", new Promise(function (resolve) {
|
|
139
240
|
asyncFunc(resolve);
|
|
140
241
|
}));
|
|
141
242
|
case 4:
|
|
142
243
|
case "end":
|
|
143
|
-
return
|
|
244
|
+
return _context4.stop();
|
|
144
245
|
}
|
|
145
|
-
},
|
|
246
|
+
}, _callee4);
|
|
146
247
|
}));
|
|
147
248
|
function pollingGetApdidToken(_x) {
|
|
148
249
|
return _pollingGetApdidToken.apply(this, arguments);
|
|
@@ -152,25 +253,37 @@ export var Security = /*#__PURE__*/function () {
|
|
|
152
253
|
}, {
|
|
153
254
|
key: "getApdidToken",
|
|
154
255
|
value: function () {
|
|
155
|
-
var _getApdidToken = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function
|
|
156
|
-
var
|
|
157
|
-
|
|
158
|
-
|
|
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) {
|
|
159
261
|
case 0:
|
|
160
|
-
|
|
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) {
|
|
161
273
|
try {
|
|
162
|
-
|
|
274
|
+
var APDID = _this3.getAPDIDModule();
|
|
275
|
+
APDID === null || APDID === void 0 || APDID.getApdidToken(_this3.scene, function (tokenResult) {
|
|
163
276
|
resolve(tokenResult === null || tokenResult === void 0 ? void 0 : tokenResult.token);
|
|
164
277
|
});
|
|
165
278
|
} catch (error) {
|
|
166
279
|
resolve('');
|
|
167
280
|
}
|
|
168
281
|
}));
|
|
169
|
-
case
|
|
282
|
+
case 6:
|
|
170
283
|
case "end":
|
|
171
|
-
return
|
|
284
|
+
return _context5.stop();
|
|
172
285
|
}
|
|
173
|
-
},
|
|
286
|
+
}, _callee5, this);
|
|
174
287
|
}));
|
|
175
288
|
function getApdidToken() {
|
|
176
289
|
return _getApdidToken.apply(this, arguments);
|
|
@@ -3,10 +3,13 @@ import { Security } from '../../util/security';
|
|
|
3
3
|
export default class PreloadHelper {
|
|
4
4
|
static isWebAppPreloaded: boolean;
|
|
5
5
|
static isSecuritySDKPreloaded: boolean;
|
|
6
|
-
private static securitySdkMap;
|
|
7
6
|
static preloadWebApp(productScene: ProductSceneEnum, paymentMethodCategoryType: PaymentMethodCategoryTypeEnum, environment?: string, useV2?: boolean): void;
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
/**
|
|
8
|
+
* Preload security SDK asynchronously.
|
|
9
|
+
* Triggers ApdidLoader.load() for async script loading and registers in SecuritySdkRegistry.
|
|
10
|
+
*/
|
|
11
|
+
static preloadSecuritySDK(product: ProductSceneEnum, securityRegion?: string, environment?: string): Promise<void>;
|
|
12
|
+
static getSecuritySdk(scene: string): Security | undefined;
|
|
10
13
|
static buildWebAppPreloadUrl(productScene: ProductSceneEnum, paymentMethodCategoryType: PaymentMethodCategoryTypeEnum, environment: string, useV2?: boolean): {
|
|
11
14
|
preloadUrl: string;
|
|
12
15
|
containerId: string;
|
|
@@ -1,4 +1,7 @@
|
|
|
1
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); }); }; }
|
|
2
5
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
3
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); } }
|
|
4
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; }
|
|
@@ -11,8 +14,10 @@ import { ProductSceneEnum } from "../../types";
|
|
|
11
14
|
import { getWebAppUrl, getWebAppV2Url } from "../utils/web_app_url_utils";
|
|
12
15
|
import { ProductInfoCacheUtil } from "../utils/payment_product_utils";
|
|
13
16
|
import { getWebAppVersion } from "./payment_context_utils";
|
|
14
|
-
import { getSecurityConfigStorageKey, getSecurityHost, getSecurityScene, Security } from "../../util/security";
|
|
17
|
+
import { getSecurityConfigStorageKey, getSecurityHost, getSecurityScene, Security, mapEnvironment } from "../../util/security";
|
|
15
18
|
import { getOrSetStorageId, safeJson } from "../../util";
|
|
19
|
+
import { SecuritySdkRegistry } from "../../util/security-registry";
|
|
20
|
+
import { ApdidLoader } from "../../util/jshield-apdid";
|
|
16
21
|
var MAX_CLEAR_TIME = 10000;
|
|
17
22
|
var PreloadHelper = /*#__PURE__*/function () {
|
|
18
23
|
function PreloadHelper() {
|
|
@@ -50,42 +55,128 @@ var PreloadHelper = /*#__PURE__*/function () {
|
|
|
50
55
|
console.error('[web-sdk] preload web app failed', error);
|
|
51
56
|
}
|
|
52
57
|
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Preload security SDK asynchronously.
|
|
61
|
+
* Triggers ApdidLoader.load() for async script loading and registers in SecuritySdkRegistry.
|
|
62
|
+
*/
|
|
53
63
|
}, {
|
|
54
64
|
key: "preloadSecuritySDK",
|
|
55
|
-
value: function
|
|
56
|
-
var
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
65
|
+
value: (function () {
|
|
66
|
+
var _preloadSecuritySDK = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(product) {
|
|
67
|
+
var _this = this;
|
|
68
|
+
var securityRegion,
|
|
69
|
+
environment,
|
|
70
|
+
storage,
|
|
71
|
+
scene,
|
|
72
|
+
h5gateway,
|
|
73
|
+
existing,
|
|
74
|
+
apdidEnv,
|
|
75
|
+
loader,
|
|
76
|
+
securitySdk,
|
|
77
|
+
loadingPromise,
|
|
78
|
+
_args = arguments;
|
|
79
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
80
|
+
while (1) switch (_context.prev = _context.next) {
|
|
81
|
+
case 0:
|
|
82
|
+
securityRegion = _args.length > 1 && _args[1] !== undefined ? _args[1] : 'SG';
|
|
83
|
+
environment = _args.length > 2 ? _args[2] : undefined;
|
|
84
|
+
_context.prev = 2;
|
|
85
|
+
if (!this.isSecuritySDKPreloaded) {
|
|
86
|
+
_context.next = 6;
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
console.log('[web-sdk] security sdk is already loaded');
|
|
90
|
+
return _context.abrupt("return");
|
|
91
|
+
case 6:
|
|
92
|
+
storage = PreloadHelper.getSecurityConfigStorage(product);
|
|
93
|
+
scene = storage.scene || getSecurityScene(product);
|
|
94
|
+
console.log('getSecurityScene', scene);
|
|
95
|
+
h5gateway = storage.h5gateway || getSecurityHost(securityRegion);
|
|
96
|
+
console.log('preloadSecuritySDK', scene);
|
|
97
|
+
|
|
98
|
+
// Check if already in registry
|
|
99
|
+
if (!SecuritySdkRegistry.isReady(scene)) {
|
|
100
|
+
_context.next = 15;
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
console.log('[web-sdk] security sdk already ready in registry');
|
|
104
|
+
this.isSecuritySDKPreloaded = true;
|
|
105
|
+
return _context.abrupt("return");
|
|
106
|
+
case 15:
|
|
107
|
+
if (!SecuritySdkRegistry.isLoading(scene)) {
|
|
108
|
+
_context.next = 30;
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
console.log('[web-sdk] security sdk is already loading, waiting...');
|
|
112
|
+
existing = SecuritySdkRegistry.get(scene);
|
|
113
|
+
if (!(existing && existing.status === 'loading')) {
|
|
114
|
+
_context.next = 29;
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
_context.prev = 19;
|
|
118
|
+
_context.next = 22;
|
|
119
|
+
return existing.loadingPromise;
|
|
120
|
+
case 22:
|
|
121
|
+
this.isSecuritySDKPreloaded = true;
|
|
122
|
+
console.log('[web-sdk] preload security sdk succeed (waited for existing load)');
|
|
123
|
+
_context.next = 29;
|
|
124
|
+
break;
|
|
125
|
+
case 26:
|
|
126
|
+
_context.prev = 26;
|
|
127
|
+
_context.t0 = _context["catch"](19);
|
|
128
|
+
console.error('[web-sdk] preload security sdk failed (existing load failed)');
|
|
129
|
+
case 29:
|
|
130
|
+
return _context.abrupt("return");
|
|
131
|
+
case 30:
|
|
132
|
+
// 非阻塞调度 ApdidLoader 加载,preload 立即返回,不阻塞主流程
|
|
133
|
+
// Security 内部的 ensureApdidLoaded() 会在需要 token 时按需等待加载完成
|
|
134
|
+
apdidEnv = mapEnvironment(environment);
|
|
135
|
+
loader = ApdidLoader.getInstance();
|
|
136
|
+
loader.scheduleLoad({
|
|
137
|
+
environment: apdidEnv
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
// Create Security instance and register in registry
|
|
141
|
+
securitySdk = new Security({
|
|
142
|
+
scene: scene,
|
|
143
|
+
h5gateway: h5gateway,
|
|
144
|
+
environment: environment
|
|
145
|
+
});
|
|
146
|
+
loadingPromise = new Promise(function (resolveLoading, rejectLoading) {
|
|
147
|
+
securitySdk.initSecurity(function () {
|
|
148
|
+
SecuritySdkRegistry.setReady(scene, securitySdk);
|
|
149
|
+
_this.isSecuritySDKPreloaded = true;
|
|
150
|
+
console.log('[web-sdk] preload security sdk succeed');
|
|
151
|
+
resolveLoading(securitySdk);
|
|
152
|
+
}, function () {
|
|
153
|
+
SecuritySdkRegistry.setFailed(scene, new Error('Preload security sdk init failed'));
|
|
154
|
+
console.error('[web-sdk] preload security sdk failed');
|
|
155
|
+
rejectLoading(new Error('Preload security sdk init failed'));
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
SecuritySdkRegistry.setLoading(scene, loadingPromise);
|
|
159
|
+
_context.next = 41;
|
|
160
|
+
break;
|
|
161
|
+
case 38:
|
|
162
|
+
_context.prev = 38;
|
|
163
|
+
_context.t1 = _context["catch"](2);
|
|
164
|
+
console.error('[web-sdk] preload security sdk failed', _context.t1);
|
|
165
|
+
case 41:
|
|
166
|
+
case "end":
|
|
167
|
+
return _context.stop();
|
|
168
|
+
}
|
|
169
|
+
}, _callee, this, [[2, 38], [19, 26]]);
|
|
170
|
+
}));
|
|
171
|
+
function preloadSecuritySDK(_x) {
|
|
172
|
+
return _preloadSecuritySDK.apply(this, arguments);
|
|
82
173
|
}
|
|
83
|
-
|
|
174
|
+
return preloadSecuritySDK;
|
|
175
|
+
}())
|
|
84
176
|
}, {
|
|
85
177
|
key: "getSecuritySdk",
|
|
86
178
|
value: function getSecuritySdk(scene) {
|
|
87
|
-
|
|
88
|
-
return result;
|
|
179
|
+
return SecuritySdkRegistry.getReadyInstance(scene);
|
|
89
180
|
}
|
|
90
181
|
}, {
|
|
91
182
|
key: "buildWebAppPreloadUrl",
|
|
@@ -143,5 +234,4 @@ var PreloadHelper = /*#__PURE__*/function () {
|
|
|
143
234
|
}();
|
|
144
235
|
_defineProperty(PreloadHelper, "isWebAppPreloaded", false);
|
|
145
236
|
_defineProperty(PreloadHelper, "isSecuritySDKPreloaded", false);
|
|
146
|
-
_defineProperty(PreloadHelper, "securitySdkMap", new Map());
|
|
147
237
|
export { PreloadHelper as default };
|
package/esm/main.js
CHANGED
|
@@ -77,7 +77,7 @@ export var AMSAutoDebitPay = /*#__PURE__*/function (_AMSCheckout) {
|
|
|
77
77
|
environment: 'prod'
|
|
78
78
|
};
|
|
79
79
|
PreloadHelper.preloadWebApp(ProductSceneEnum.AUTO_DEBIT_PAY, PaymentMethodCategoryTypeEnum.WALLET, options.environment);
|
|
80
|
-
PreloadHelper.preloadSecuritySDK(ProductSceneEnum.AUTO_DEBIT_PAY, options.securityRegion);
|
|
80
|
+
PreloadHelper.preloadSecuritySDK(ProductSceneEnum.AUTO_DEBIT_PAY, options.securityRegion, options.environment);
|
|
81
81
|
}
|
|
82
82
|
}]);
|
|
83
83
|
return AMSAutoDebitPay;
|
|
@@ -164,7 +164,7 @@ export var AMSCashierPayment = /*#__PURE__*/function (_AMSCheckout2) {
|
|
|
164
164
|
} catch (error) {
|
|
165
165
|
console.error('[web-sdk] preload web app error', error);
|
|
166
166
|
}
|
|
167
|
-
PreloadHelper.preloadSecuritySDK(ProductSceneEnum.CASHIER_PAYMENT, options.securityRegion);
|
|
167
|
+
PreloadHelper.preloadSecuritySDK(ProductSceneEnum.CASHIER_PAYMENT, options.securityRegion, options.environment);
|
|
168
168
|
}
|
|
169
169
|
}]);
|
|
170
170
|
return AMSCashierPayment;
|
|
@@ -188,7 +188,7 @@ export var AMSVaulting = /*#__PURE__*/function (_AMSCheckout3) {
|
|
|
188
188
|
environment: 'prod'
|
|
189
189
|
};
|
|
190
190
|
PreloadHelper.preloadWebApp(ProductSceneEnum.CASHIER_PAYMENT, PaymentMethodCategoryTypeEnum.CARD, options.environment);
|
|
191
|
-
PreloadHelper.preloadSecuritySDK(ProductSceneEnum.VAULTING, options.securityRegion);
|
|
191
|
+
PreloadHelper.preloadSecuritySDK(ProductSceneEnum.VAULTING, options.securityRegion, options.environment);
|
|
192
192
|
}
|
|
193
193
|
}]);
|
|
194
194
|
return AMSVaulting;
|
|
@@ -336,7 +336,7 @@ export var AMSAutoDebit = /*#__PURE__*/function () {
|
|
|
336
336
|
environment: 'prod'
|
|
337
337
|
};
|
|
338
338
|
PreloadHelper.preloadWebApp(ProductSceneEnum.AUTO_DEBIT, PaymentMethodCategoryTypeEnum.WALLET, options.environment);
|
|
339
|
-
PreloadHelper.preloadSecuritySDK(ProductSceneEnum.AUTO_DEBIT, options.securityRegion);
|
|
339
|
+
PreloadHelper.preloadSecuritySDK(ProductSceneEnum.AUTO_DEBIT, options.securityRegion, options.environment);
|
|
340
340
|
}
|
|
341
341
|
}]);
|
|
342
342
|
return AMSAutoDebit;
|
|
@@ -156,24 +156,28 @@ var ComponentApp = /*#__PURE__*/function () {
|
|
|
156
156
|
var securitySDK = this.AMSSDK._getSecuritySDKByProductScene({
|
|
157
157
|
product: product
|
|
158
158
|
});
|
|
159
|
-
if (
|
|
160
|
-
|
|
161
|
-
|
|
159
|
+
if (securitySDK) {
|
|
160
|
+
// Already ready
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// Use _newSecuritySDKByScene which handles loading/ready/failed states internally
|
|
165
|
+
this.AMSSDK.logger.logInfo({
|
|
166
|
+
title: 'sdk_event_securitySdkInit'
|
|
167
|
+
});
|
|
168
|
+
this.AMSSDK._newSecuritySDKByScene({
|
|
169
|
+
product: product
|
|
170
|
+
}, function () {
|
|
171
|
+
_this.AMSSDK.logger.logInfo({
|
|
172
|
+
title: 'sdk_event_securitySdkInitSuccess'
|
|
162
173
|
});
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
});
|
|
169
|
-
}, function () {
|
|
170
|
-
_this.AMSSDK.logger.logError({
|
|
171
|
-
title: 'sdk_error_securitySdkInitFailed'
|
|
172
|
-
}, {
|
|
173
|
-
sign: 'SDK internal initialization'
|
|
174
|
-
});
|
|
174
|
+
}, function () {
|
|
175
|
+
_this.AMSSDK.logger.logError({
|
|
176
|
+
title: 'sdk_error_securitySdkInitFailed'
|
|
177
|
+
}, {
|
|
178
|
+
sign: 'SDK internal initialization'
|
|
175
179
|
});
|
|
176
|
-
}
|
|
180
|
+
});
|
|
177
181
|
}
|
|
178
182
|
}, {
|
|
179
183
|
key: "logDeviceId",
|
|
@@ -208,36 +212,39 @@ var ComponentApp = /*#__PURE__*/function () {
|
|
|
208
212
|
while (1) switch (_context.prev = _context.next) {
|
|
209
213
|
case 0:
|
|
210
214
|
productScene = (_this2$_renderParams = _this2._renderParams) === null || _this2$_renderParams === void 0 || (_this2$_renderParams = _this2$_renderParams.paymentSessionMetaData) === null || _this2$_renderParams === void 0 || (_this2$_renderParams = _this2$_renderParams.paymentSessionConfig) === null || _this2$_renderParams === void 0 ? void 0 : _this2$_renderParams.productScene;
|
|
211
|
-
getDeviceIdStartTime = Date.now();
|
|
212
|
-
|
|
215
|
+
getDeviceIdStartTime = Date.now(); // Use async version to handle loading state
|
|
216
|
+
_context.next = 4;
|
|
217
|
+
return _this2.AMSSDK._awaitSecuritySDKByProductScene({
|
|
213
218
|
product: (deviceIdParameter === null || deviceIdParameter === void 0 ? void 0 : deviceIdParameter.productScene) || productScene
|
|
214
219
|
});
|
|
220
|
+
case 4:
|
|
221
|
+
securitySDK = _context.sent;
|
|
215
222
|
deviceId = '';
|
|
216
223
|
if (!securitySDK) {
|
|
217
|
-
_context.next =
|
|
224
|
+
_context.next = 18;
|
|
218
225
|
break;
|
|
219
226
|
}
|
|
220
227
|
if (!(isPolling && parseInt(deviceIdParameter === null || deviceIdParameter === void 0 ? void 0 : deviceIdParameter.tokenCollectTime) > 0)) {
|
|
221
|
-
_context.next =
|
|
228
|
+
_context.next = 13;
|
|
222
229
|
break;
|
|
223
230
|
}
|
|
224
|
-
_context.next =
|
|
231
|
+
_context.next = 10;
|
|
225
232
|
return securitySDK.pollingGetApdidToken(deviceIdParameter);
|
|
226
|
-
case
|
|
233
|
+
case 10:
|
|
227
234
|
_context.t0 = _context.sent;
|
|
228
|
-
_context.next =
|
|
235
|
+
_context.next = 16;
|
|
229
236
|
break;
|
|
230
|
-
case 11:
|
|
231
|
-
_context.next = 13;
|
|
232
|
-
return securitySDK.getApdidToken();
|
|
233
237
|
case 13:
|
|
238
|
+
_context.next = 15;
|
|
239
|
+
return securitySDK.getApdidToken();
|
|
240
|
+
case 15:
|
|
234
241
|
_context.t0 = _context.sent;
|
|
235
|
-
case
|
|
242
|
+
case 16:
|
|
236
243
|
deviceId = _context.t0;
|
|
237
244
|
_this2.logDeviceId(deviceId, getDeviceIdStartTime);
|
|
238
|
-
case
|
|
245
|
+
case 18:
|
|
239
246
|
resolve(deviceId);
|
|
240
|
-
case
|
|
247
|
+
case 19:
|
|
241
248
|
case "end":
|
|
242
249
|
return _context.stop();
|
|
243
250
|
}
|