@jolibox/sdk 1.1.12 → 1.1.13-beta.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/dist/index.js ADDED
@@ -0,0 +1,1519 @@
1
+ "use strict";
2
+
3
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
4
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
5
+ (() => {
6
+ // ../common/dist/index.es.js
7
+ var k = Object.defineProperty;
8
+ var ye = Object.defineProperties;
9
+ var ge = Object.getOwnPropertyDescriptor;
10
+ var Ee = Object.getOwnPropertyDescriptors;
11
+ var F = Object.getOwnPropertySymbols;
12
+ var Te = Object.prototype.hasOwnProperty;
13
+ var xe = Object.prototype.propertyIsEnumerable;
14
+ var H = (n, e, t) => e in n ? k(n, e, {
15
+ enumerable: true,
16
+ configurable: true,
17
+ writable: true,
18
+ value: t
19
+ }) : n[e] = t;
20
+ var f = (n, e) => {
21
+ for (var t in e || (e = {})) Te.call(e, t) && H(n, t, e[t]);
22
+ if (F) for (var t of F(e)) xe.call(e, t) && H(n, t, e[t]);
23
+ return n;
24
+ };
25
+ var b = (n, e) => ye(n, Ee(e));
26
+ var Re = (n, e) => {
27
+ for (var t in e) k(n, t, {
28
+ get: e[t],
29
+ enumerable: true
30
+ });
31
+ };
32
+ var I = (n, e, t, r) => {
33
+ for (var o = r > 1 ? void 0 : r ? ge(e, t) : e, i = n.length - 1, a; i >= 0; i--) (a = n[i]) && (o = (r ? a(e, t, o) : a(o)) || o);
34
+ return r && o && k(e, t, o), o;
35
+ };
36
+ var A = (n, e, t) => new Promise((r, o) => {
37
+ var i = s => {
38
+ try {
39
+ m(t.next(s));
40
+ } catch (c) {
41
+ o(c);
42
+ }
43
+ },
44
+ a = s => {
45
+ try {
46
+ m(t.throw(s));
47
+ } catch (c) {
48
+ o(c);
49
+ }
50
+ },
51
+ m = s => s.done ? r(s.value) : Promise.resolve(s.value).then(i, a);
52
+ m((t = t.apply(n, e)).next());
53
+ });
54
+ if (typeof window != "undefined" && !window.AbortController) {
55
+ let n = function () {
56
+ this.signal = new e();
57
+ };
58
+ n.prototype.abort = function () {
59
+ this.signal._aborted = true, typeof this.signal.onabort == "function" && this.signal.onabort(new Event("abort"));
60
+ let t = new Event("abort");
61
+ this.signal.dispatchEvent(t);
62
+ };
63
+ let e = function () {
64
+ this._aborted = false, this.aborted = false, this.onabort = null, this._eventListeners = {};
65
+ };
66
+ Object.defineProperty(e.prototype, "aborted", {
67
+ get: function () {
68
+ return this._aborted;
69
+ }
70
+ }), e.prototype.addEventListener = function (t, r) {
71
+ this._eventListeners[t] || (this._eventListeners[t] = []), this._eventListeners[t].push(r);
72
+ }, e.prototype.removeEventListener = function (t, r) {
73
+ if (!this._eventListeners[t]) return;
74
+ let o = this._eventListeners[t].indexOf(r);
75
+ o !== -1 && this._eventListeners[t].splice(o, 1);
76
+ }, e.prototype.dispatchEvent = function (t) {
77
+ if (this._eventListeners[t.type]) for (let r of this._eventListeners[t.type]) r.call(this, t);
78
+ }, window.AbortController = n, window.AbortSignal = e;
79
+ }
80
+ function K(n) {
81
+ return new Promise(e => {
82
+ setTimeout(() => {
83
+ e();
84
+ }, n);
85
+ });
86
+ }
87
+ function L(n) {
88
+ return typeof n == "string";
89
+ }
90
+ function he(n) {
91
+ return typeof n == "object" && n !== null && !Array.isArray(n) && !(n instanceof RegExp) && !(n instanceof Date);
92
+ }
93
+ function _e(n) {
94
+ return typeof n == "undefined";
95
+ }
96
+ function M(n) {
97
+ return _e(n) || n === null;
98
+ }
99
+ function S(n) {
100
+ return typeof n == "function";
101
+ }
102
+ function C(n) {
103
+ let e = n,
104
+ t = null,
105
+ r = function () {
106
+ for (var _len = arguments.length, o = new Array(_len), _key = 0; _key < _len; _key++) {
107
+ o[_key] = arguments[_key];
108
+ }
109
+ return t || (t = new e(...o)), t;
110
+ };
111
+ return r.prototype = e.prototype, r;
112
+ }
113
+ var ve = (s => (s[s.DEVELOPER_FILE_NOT_FOUND = 0] = "DEVELOPER_FILE_NOT_FOUND", s[s.INTERNAL_IOS_CAN_NOT_FOUND_PKG = 1] = "INTERNAL_IOS_CAN_NOT_FOUND_PKG", s[s.USER_IOS_LOAD_TIMEOUT = 2] = "USER_IOS_LOAD_TIMEOUT", s[s.INTERNAL_IOS_PKG_LOAD_ERROR = 3] = "INTERNAL_IOS_PKG_LOAD_ERROR", s[s.INTERNAL_IOS_PKG_PARSE_FAIL = 4] = "INTERNAL_IOS_PKG_PARSE_FAIL", s[s.USER_IOS_GET_EMPTY_DATA = 5] = "USER_IOS_GET_EMPTY_DATA", s[s.USER_ANDROID_GET_PKG_FAIL = 6] = "USER_ANDROID_GET_PKG_FAIL", s[s.DEVELOPER_ANDROID_PACKAGE_FILE_UNEXPECTED_REQUIRE = 7] = "DEVELOPER_ANDROID_PACKAGE_FILE_UNEXPECTED_REQUIRE", s))(ve || {});
114
+ var h = class extends Error {
115
+ constructor(e) {
116
+ if (typeof e == "string") {
117
+ super(e), this.priority = "P1";
118
+ return;
119
+ }
120
+ super(e.message), this.priority = "P1", this.stack = e.stack, this.raw = e;
121
+ }
122
+ };
123
+ var u = class extends h {
124
+ constructor() {
125
+ super(...arguments);
126
+ this.kind = "INTERNAL_ERROR";
127
+ }
128
+ };
129
+ var Q = class extends u {
130
+ constructor() {
131
+ super(...arguments);
132
+ this.name = "INTERNAL_JS_MODULE_FETCH_ERROR";
133
+ this.priority = "P0";
134
+ }
135
+ };
136
+ var X = class extends u {
137
+ constructor() {
138
+ super(...arguments);
139
+ this.name = "INTERNAL_JS_MODULE_EVAL_ERROR";
140
+ this.priority = "P0";
141
+ }
142
+ };
143
+ function _(n) {
144
+ return function () {
145
+ var r, o;
146
+ ((o = (r = globalThis.VConsole) == null ? void 0 : r[n]) != null ? o : globalThis.console[n])(...arguments);
147
+ };
148
+ }
149
+ var ae = {
150
+ log: _("log"),
151
+ warn: _("warn"),
152
+ info: _("info"),
153
+ error: _("error"),
154
+ debug: _("debug")
155
+ };
156
+ Object.assign(globalThis, {
157
+ logger: ae
158
+ });
159
+ var de = Symbol.for("Jolibox.canIUseMap");
160
+ var Ie = {};
161
+ globalThis[de] = Ie;
162
+ var Ln = {
163
+ get config() {
164
+ return globalThis[de];
165
+ }
166
+ };
167
+ function Dn(n, e, t) {
168
+ let r = 0;
169
+ if (n !== e) {
170
+ let o = n.split("."),
171
+ i = e.split("."),
172
+ a = Math.max(o.length, i.length);
173
+ for (let m = 0; m < a; m++) {
174
+ let s = parseInt(o[m], 10) || 0,
175
+ c = parseInt(i[m], 10) || 0;
176
+ if (s > c) {
177
+ r = 1;
178
+ break;
179
+ } else if (s < c) {
180
+ r = -1;
181
+ break;
182
+ }
183
+ }
184
+ }
185
+ if (!t) return r;
186
+ switch (t) {
187
+ case ">":
188
+ return r > 0;
189
+ case "<":
190
+ return r < 0;
191
+ case "=":
192
+ return r === 0;
193
+ case ">=":
194
+ return r >= 0;
195
+ case "<=":
196
+ return r <= 0;
197
+ default:
198
+ return false;
199
+ }
200
+ }
201
+ var Ae = (r => (r[r.System = 1e3] = "System", r[r.ErrorTrace = 1001] = "ErrorTrace", r[r.UserDefined = 1002] = "UserDefined", r))(Ae || {});
202
+ var Ce = (i => (i.MiniGame = "mini-game", i.MiniDrama = "mini-drama", i.App = "app", i.WebSDK = "web-sdk", i.AppSDK = "app-sdk", i))(Ce || {});
203
+ var Ne = (d => (d[d.App = 0] = "App", d[d.H5 = 1] = "H5", d[d.Weapp = 2] = "Weapp", d[d.Alipay = 3] = "Alipay", d[d.Gcash = 4] = "Gcash", d[d.Dana = 5] = "Dana", d[d.Umma = 6] = "Umma", d[d.WebSDK = 1e3] = "WebSDK", d[d.AppSDK = 1001] = "AppSDK", d[d.Other = 9999] = "Other", d))(Ne || {});
204
+ var le = ["name", "params"];
205
+ var Oe = ["name", "type", "location", "target", "extra", "timestamp", "userId"];
206
+ var we = ["platform", "os", "appVersion", "appId", "model", "brand", "uuid", "jsSdkVersion", "extra"];
207
+ function O(n, e) {
208
+ return e.map(t => {
209
+ if (t === "params" && n[t]) {
210
+ let r = n[t];
211
+ return Object.keys(r).reduce((o, i) => (o[i] = String(r[i]), o), {});
212
+ }
213
+ return n[t];
214
+ });
215
+ }
216
+ function Pe(n) {
217
+ let e = n.location ? O(n.location, le) : null,
218
+ t = n.target ? O(n.target, le) : null;
219
+ return O(b(f({}, n), {
220
+ location: e,
221
+ target: t
222
+ }), Oe);
223
+ }
224
+ function Hn(n) {
225
+ let e = n.events.map(r => Pe(r)),
226
+ t = O(n.device, we);
227
+ return [n.protocolVersion, e, t, n.project];
228
+ }
229
+ var me = () => "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, n => {
230
+ let e = Math.random() * 16 | 0;
231
+ return (n === "x" ? e : e & 3 | 8).toString(16);
232
+ });
233
+ var w = {
234
+ isiOS: navigator.userAgent.includes("iPhone") || navigator.userAgent.includes("iPod") || navigator.userAgent.includes("iPad") || navigator.userAgent.includes("iPhone OS"),
235
+ iosVersion: () => {
236
+ let n = navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/);
237
+ return [parseInt(n[1], 10), parseInt(n[2], 10), parseInt(n[3] || "0", 10)];
238
+ },
239
+ isAndroid: navigator.userAgent.includes("Android"),
240
+ isMac: navigator.userAgent.includes("Mac"),
241
+ isFacebook: navigator.userAgent.includes("FB_IAB"),
242
+ isPC: !navigator.userAgent.includes("iPhone") && !navigator.userAgent.includes("Android")
243
+ };
244
+ var ke = () => w.isiOS ? "iOS" : w.isAndroid ? "Android" : w.isMac ? "Mac" : w.isFacebook ? "Facebook" : "PC";
245
+ var Le = "device_id";
246
+ var Me = "advertising_id";
247
+ var ce = n => (localStorage.getItem(n) || localStorage.setItem(n, me()), localStorage.getItem(n));
248
+ var Se = () => ce(Le);
249
+ var Ue = () => ce(Me);
250
+ var De = n => n.charAt(0).toUpperCase() + n.slice(1);
251
+ var Ve = () => {
252
+ var e;
253
+ let n = new URLSearchParams(window.location.search);
254
+ return De((e = n.get("utm_source")) != null ? e : "") || "JoliboxSDK";
255
+ };
256
+ var Wn = n => {
257
+ let e = "JoliboxWebSDK",
258
+ t = ke(),
259
+ r = navigator.language,
260
+ o = Se(),
261
+ i = Ue();
262
+ return `${e} (${Ve()}${t}; UnknownModel; UnknownSystemVersion; ${r}) uuid/${o} adid/${i} version/${n || ""}`;
263
+ };
264
+ var E = class E2 {
265
+ constructor(e) {
266
+ this.element = e, this.next = E2.Undefined, this.prev = E2.Undefined;
267
+ }
268
+ };
269
+ E.Undefined = new E(void 0);
270
+ var l = E;
271
+ var P = class {
272
+ constructor() {
273
+ this._first = l.Undefined;
274
+ this._last = l.Undefined;
275
+ this._size = 0;
276
+ }
277
+ get size() {
278
+ return this._size;
279
+ }
280
+ isEmpty() {
281
+ return this._first === l.Undefined;
282
+ }
283
+ clear() {
284
+ let e = this._first;
285
+ for (; e !== l.Undefined;) {
286
+ let t = e.next;
287
+ e.prev = l.Undefined, e.next = l.Undefined, e = t;
288
+ }
289
+ this._first = l.Undefined, this._last = l.Undefined, this._size = 0;
290
+ }
291
+ unshift(e) {
292
+ return this._insert(e, false);
293
+ }
294
+ push(e) {
295
+ return this._insert(e, true);
296
+ }
297
+ _insert(e, t) {
298
+ let r = new l(e);
299
+ if (this._first === l.Undefined) this._first = r, this._last = r;else if (t) {
300
+ let i = this._last;
301
+ this._last = r, r.prev = i, i.next = r;
302
+ } else {
303
+ let i = this._first;
304
+ this._first = r, r.next = i, i.prev = r;
305
+ }
306
+ this._size += 1;
307
+ let o = false;
308
+ return () => {
309
+ o || (o = true, this._remove(r));
310
+ };
311
+ }
312
+ shift() {
313
+ if (this._first !== l.Undefined) {
314
+ let e = this._first.element;
315
+ return this._remove(this._first), e;
316
+ }
317
+ }
318
+ pop() {
319
+ if (this._last !== l.Undefined) {
320
+ let e = this._last.element;
321
+ return this._remove(this._last), e;
322
+ }
323
+ }
324
+ _remove(e) {
325
+ if (e.prev !== l.Undefined && e.next !== l.Undefined) {
326
+ let t = e.prev;
327
+ t.next = e.next, e.next.prev = t;
328
+ } else e.prev === l.Undefined && e.next === l.Undefined ? (this._first = l.Undefined, this._last = l.Undefined) : e.next === l.Undefined ? (this._last = this._last.prev, this._last.next = l.Undefined) : e.prev === l.Undefined && (this._first = this._first.next, this._first.prev = l.Undefined);
329
+ this._size -= 1;
330
+ }
331
+ *[Symbol.iterator]() {
332
+ let e = this._first;
333
+ for (; e !== l.Undefined;) yield e.element, e = e.next;
334
+ }
335
+ };
336
+ var Fe = 0;
337
+ var T = class {
338
+ constructor(e) {
339
+ this.value = e;
340
+ this.id = Fe++;
341
+ }
342
+ };
343
+ var p = class {
344
+ constructor(e) {
345
+ this.options = e;
346
+ this._size = 0;
347
+ }
348
+ dispose(e) {
349
+ var t, r;
350
+ this._disposed || (this._disposed = true, this._listeners && (e ? (this._listeners instanceof T && (this._listeners = [this._listeners]), this._listeners = this._listeners.filter(o => (o == null ? void 0 : o.value) === e)) : (this._listeners = void 0, this._size = 0)), (r = (t = this.options) == null ? void 0 : t.onDidRemoveLastListener) == null || r.call(t));
351
+ }
352
+ get event() {
353
+ var e;
354
+ return (e = this._event) != null || (this._event = (t, r) => {
355
+ var i, a, m, s, c, d;
356
+ if (this._disposed) return () => {
357
+ console.info("[Jolibox SDK] Emitter is _disposed");
358
+ };
359
+ r && (t = t.bind(r));
360
+ let o = new T(t);
361
+ this._listeners ? this._listeners instanceof T ? this._listeners = [this._listeners, o] : this._listeners.push(o) : ((a = (i = this.options) == null ? void 0 : i.onWillAddFirstListener) == null || a.call(i, this), this._listeners = o, (s = (m = this.options) == null ? void 0 : m.onDidFirstListener) == null || s.call(m, this)), (d = (c = this.options) == null ? void 0 : c.onDidAddListener) == null || d.call(c, this), this._size++;
362
+ }), this._event;
363
+ }
364
+ _deliver(e, t) {
365
+ var o;
366
+ if (!e) return;
367
+ let r = ((o = this.options) == null ? void 0 : o.onListenerError) || Error.constructor;
368
+ if (!r) {
369
+ e.value(t);
370
+ return;
371
+ }
372
+ try {
373
+ e.value(t);
374
+ } catch (i) {
375
+ r(i);
376
+ }
377
+ }
378
+ fire(e) {
379
+ this._listeners && (this._listeners instanceof T ? this._deliver(this._listeners, e) : this._listeners.forEach(t => this._deliver(t, e)));
380
+ }
381
+ hasListeners() {
382
+ return this._size > 0;
383
+ }
384
+ };
385
+ var v = class {
386
+ constructor() {
387
+ this.listeners = /* @__PURE__ */new Map();
388
+ this.listerHandlerMap = /* @__PURE__ */new WeakMap();
389
+ this.cachedEventQueue = /* @__PURE__ */new Map();
390
+ }
391
+ on(e, t) {
392
+ var a;
393
+ let r = (a = this.listeners.get(e)) != null ? a : new p(),
394
+ o = m => t(...m.args);
395
+ this.listerHandlerMap.set(t, o), r.event(o), this.listeners.set(e, r);
396
+ let i = this.cachedEventQueue.get(e);
397
+ if (i) for (; i.size > 0;) r.fire(f({
398
+ event: e
399
+ }, i.shift()));
400
+ }
401
+ off(e, t) {
402
+ let r = this.listeners.get(e);
403
+ if (r) {
404
+ let o = this.listerHandlerMap.get(t);
405
+ r.dispose(o);
406
+ }
407
+ }
408
+ emit(e) {
409
+ let r = this.listeners.get(e);
410
+ for (var _len2 = arguments.length, t = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
411
+ t[_key2 - 1] = arguments[_key2];
412
+ }
413
+ if (r) r.fire({
414
+ event: e,
415
+ args: t
416
+ });else {
417
+ let o = this.cachedEventQueue.get(e);
418
+ o || (o = new P(), this.cachedEventQueue.set(e, o)), o.push({
419
+ args: t
420
+ });
421
+ }
422
+ }
423
+ };
424
+ var x = {};
425
+ Re(x, {
426
+ None: () => He,
427
+ filter: () => Ke,
428
+ once: () => ue,
429
+ toPromise: () => je
430
+ });
431
+ var He = () => {
432
+ console.log("[Jolibox SDK] None Event");
433
+ };
434
+ function je(n) {
435
+ return new Promise(e => ue(n)(e));
436
+ }
437
+ function ue(n) {
438
+ return function (e) {
439
+ let t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
440
+ let r = false;
441
+ return n(i => {
442
+ if (!r) return r = true, e.call(t, i);
443
+ }, null);
444
+ };
445
+ }
446
+ function Ke(n, e) {
447
+ return (r => {
448
+ let o,
449
+ i = {
450
+ onWillAddFirstListener() {
451
+ o = r(a.fire, a);
452
+ }
453
+ },
454
+ a = new p(i);
455
+ return a.event;
456
+ })(function (r) {
457
+ let o = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
458
+ return n(i => e(i) && r.call(o, i), null);
459
+ });
460
+ }
461
+ var U = Symbol.for("Jolibox.hostEmitter");
462
+ var Ge = () => {
463
+ let n = new v();
464
+ return globalThis[U] || (globalThis[U] = {
465
+ on: n.on.bind(n),
466
+ off: n.off.bind(n),
467
+ emit: n.emit.bind(n)
468
+ }), globalThis[U];
469
+ };
470
+ var vt = Ge();
471
+ function pe(n, e) {
472
+ let t = Math.min(n.length, e.length);
473
+ for (let r = 0; r < t; r++) Je(n[r], e[r]);
474
+ }
475
+ function Je(n, e) {
476
+ if (L(e)) {
477
+ if (typeof n !== e) throw new Error(`argument does not match constraint: typeof ${e}`);
478
+ } else if (S(e)) {
479
+ try {
480
+ if (n instanceof e) return;
481
+ } catch (t) {}
482
+ if (!M(n) && n.constructor === e || e.length === 1 && e.call(void 0, n) === true) return;
483
+ throw new Error("[Jolibox SDK]argument does not match one of these constraints: arg instanceof constraint, arg.constructor === constraint, nor constraint(arg) === true");
484
+ }
485
+ }
486
+ var y = class {
487
+ constructor() {
488
+ this._commands = /* @__PURE__ */new Map();
489
+ this._onDidRegisterCommand = new p();
490
+ this.onDidRegisterCommand = this._onDidRegisterCommand.event;
491
+ console.log("[Jolibox SDK] command registry");
492
+ }
493
+ registerCommand(e) {
494
+ if (!e) throw new Error("invalid command");
495
+ if (e.metadata && Array.isArray(e.metadata.args)) {
496
+ let o = [];
497
+ for (let a of e.metadata.args) o.push(a.constraint);
498
+ let i = e.handler;
499
+ e.handler = function () {
500
+ for (var _len3 = arguments.length, a = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
501
+ a[_key3] = arguments[_key3];
502
+ }
503
+ return pe(a, o), i(...a);
504
+ };
505
+ }
506
+ let {
507
+ id: t
508
+ } = e;
509
+ this._commands.get(t) && console.info(`[Jolibox SDK] duplicated command is registered ${t}`), this._commands.set(t, e), this._onDidRegisterCommand.fire(t);
510
+ }
511
+ getCommand(e) {
512
+ return this._commands.get(e);
513
+ }
514
+ getCommands() {
515
+ let e = /* @__PURE__ */new Map();
516
+ for (let t of this._commands.keys()) {
517
+ let r = this.getCommand(t);
518
+ r && e.set(t, r);
519
+ }
520
+ return e;
521
+ }
522
+ };
523
+ y = I([C], y);
524
+ var R = class {
525
+ constructor() {
526
+ this._onWillExecuteCommand = new p();
527
+ this.onWillExecuteCommand = this._onWillExecuteCommand.event;
528
+ this._onDidExecuteCommand = new p();
529
+ this.onDidExecuteCommand = this._onDidExecuteCommand.event;
530
+ this.registry = new y();
531
+ this._starActivation = null;
532
+ }
533
+ _activateStar() {
534
+ return this._starActivation || (this._starActivation = K(3e4)), this._starActivation;
535
+ }
536
+ executeCommand(e) {
537
+ for (var _len4 = arguments.length, t = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {
538
+ t[_key4 - 1] = arguments[_key4];
539
+ }
540
+ return A(this, null, function* () {
541
+ return this.registry.getCommand(e) ? this._tryExecuteCommand(e, t) : (yield Promise.all([Promise.race([this._activateStar(), x.toPromise(x.filter(this.registry.onDidRegisterCommand, o => o === e))])]), this._tryExecuteCommand(e, t));
542
+ });
543
+ }
544
+ executeCommandThowErr(e) {
545
+ if (!!!this.registry.getCommand(e)) throw new Error(`command '${e}' not found`);
546
+ let o = this.registry.getCommand(e);
547
+ for (var _len5 = arguments.length, t = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {
548
+ t[_key5 - 1] = arguments[_key5];
549
+ }
550
+ this._onWillExecuteCommand.fire({
551
+ commandId: e,
552
+ args: t
553
+ });
554
+ let i = this.invokeFunction(o.handler, ...t);
555
+ return this._onDidExecuteCommand.fire({
556
+ commandId: e,
557
+ args: t
558
+ }), i;
559
+ }
560
+ _tryExecuteCommand(e, t) {
561
+ let r = this.registry.getCommand(e);
562
+ if (!r) return Promise.reject(new Error(`command '${e}' not found`));
563
+ try {
564
+ this._onWillExecuteCommand.fire({
565
+ commandId: e,
566
+ args: t
567
+ });
568
+ let o = this.invokeFunction(r.handler, ...t);
569
+ return this._onDidExecuteCommand.fire({
570
+ commandId: e,
571
+ args: t
572
+ }), Promise.resolve(o);
573
+ } catch (o) {
574
+ return Promise.reject(o);
575
+ }
576
+ }
577
+ invokeFunction(e) {
578
+ let r = false;
579
+ try {
580
+ for (var _len6 = arguments.length, t = new Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) {
581
+ t[_key6 - 1] = arguments[_key6];
582
+ }
583
+ return e(...t);
584
+ } finally {
585
+ r = true;
586
+ }
587
+ }
588
+ };
589
+ R = I([C], R);
590
+ var D = Symbol.for("Jolibox.commands");
591
+ function qt() {
592
+ if (globalThis[D]) return globalThis[D];
593
+ let n = new y(),
594
+ e = new R(),
595
+ t = {
596
+ registerCommand(r, o, i) {
597
+ n.registerCommand({
598
+ id: r,
599
+ handler: o,
600
+ metadata: i
601
+ });
602
+ },
603
+ executeCommand(r) {
604
+ for (var _len7 = arguments.length, o = new Array(_len7 > 1 ? _len7 - 1 : 0), _key7 = 1; _key7 < _len7; _key7++) {
605
+ o[_key7 - 1] = arguments[_key7];
606
+ }
607
+ return e.executeCommand(r, ...o);
608
+ },
609
+ excuteCommandSync(r) {
610
+ for (var _len8 = arguments.length, o = new Array(_len8 > 1 ? _len8 - 1 : 0), _key8 = 1; _key8 < _len8; _key8++) {
611
+ o[_key8 - 1] = arguments[_key8];
612
+ }
613
+ return e.executeCommandThowErr(r, ...o);
614
+ }
615
+ };
616
+ return globalThis[D] = t, t;
617
+ }
618
+
619
+ // src/utils/env.ts
620
+ var testMode = new URLSearchParams(window.location.search).get("joliboxEnv") === "staging";
621
+
622
+ // src/utils/event-tracker.ts
623
+ function getLocation() {
624
+ const urlParams = new URLSearchParams(window.location.search);
625
+ const params = {};
626
+ urlParams.forEach((value, key) => {
627
+ params[key] = value;
628
+ });
629
+ return {
630
+ name: "GamePage",
631
+ params
632
+ };
633
+ }
634
+ function getDevice() {
635
+ return {
636
+ platform: 1e3,
637
+ os: "h5",
638
+ appVersion: "__JOLIBOX_LOCAL_SDK_VERSION__",
639
+ // mock
640
+ appId: "1",
641
+ model: "UnknownModel",
642
+ brand: "UnknownBrand",
643
+ uuid: "1",
644
+ jsSdkVersion: "__JOLIBOX_LOCAL_SDK_VERSION__",
645
+ // mock
646
+ extra: {}
647
+ };
648
+ }
649
+ var hostToApiMap = {
650
+ default: {
651
+ test: "https://stg-collect.jolibox.com",
652
+ prod: "https://collect.jolibox.com"
653
+ },
654
+ "oss.jolibox.com": {
655
+ test: "https://stg-collect.jolibox.com",
656
+ prod: "https://collect.jolibox.com"
657
+ },
658
+ "oss.pico-game.com": {
659
+ test: "https://stg-collect.pico-game.com",
660
+ prod: "https://collect.pico-game.com"
661
+ }
662
+ };
663
+ var apiBaseURL = () => {
664
+ const api = hostToApiMap[window.location.host] ?? hostToApiMap.default;
665
+ return testMode ? api.test : api.prod;
666
+ };
667
+ var API_BASE_URL = apiBaseURL();
668
+ var timeoutFn = ms => {
669
+ const ctrl = new AbortController();
670
+ setTimeout(() => ctrl.abort(), ms);
671
+ return ctrl.signal;
672
+ };
673
+ AbortSignal.timeout ??= timeoutFn;
674
+ var getJoliSource = () => {
675
+ const urlParams = new URLSearchParams(window.location.search);
676
+ return urlParams.get("joliSource") ?? null;
677
+ };
678
+ var JOLI_SOURCE = getJoliSource();
679
+ var postToReporter = async data => {
680
+ try {
681
+ const reporterHost = API_BASE_URL;
682
+ const url = `${reporterHost}/report`;
683
+ const xua = Wn("__JOLIBOX_LOCAL_SDK_VERSION__");
684
+ const joliSource = JOLI_SOURCE;
685
+ const headers = {
686
+ "Content-Type": "application/json"
687
+ };
688
+ if (xua) headers["x-user-agent"] = xua;
689
+ if (joliSource) headers["x-joli-source"] = joliSource;
690
+ const response = await fetch(url, {
691
+ method: "POST",
692
+ headers,
693
+ body: JSON.stringify(data),
694
+ signal: timeoutFn(5e3)
695
+ });
696
+ return response;
697
+ } catch (error) {
698
+ console.error("Error posting to reporter:", error);
699
+ return null;
700
+ }
701
+ };
702
+ async function trackError(errorData) {
703
+ try {
704
+ const errEvent = {
705
+ name: "globalJsError",
706
+ type: Ae.ErrorTrace,
707
+ location: getLocation(),
708
+ target: null,
709
+ extra: errorData,
710
+ timestamp: Date.now(),
711
+ userId: null
712
+ };
713
+ const device = getDevice();
714
+ const events = [errEvent];
715
+ const eventPackage = {
716
+ protocolVersion: "1.0.0",
717
+ events,
718
+ device,
719
+ project: Ce.WebSDK
720
+ };
721
+ const serializedEventPackage = Hn(eventPackage);
722
+ await postToReporter(serializedEventPackage);
723
+ } catch (error) {
724
+ console.error("Failed to track error:", error);
725
+ }
726
+ }
727
+
728
+ // src/events.ts
729
+ document.addEventListener("DOMContentLoaded", () => vt.emit("onDocumentReady", timeline.startTime));
730
+ var timelineFactory = () => {
731
+ let _beginLoad = 0;
732
+ return {
733
+ set startTime(time) {
734
+ _beginLoad = time;
735
+ },
736
+ get startTime() {
737
+ return _beginLoad;
738
+ }
739
+ };
740
+ };
741
+ var timeline = timelineFactory();
742
+ var commands = qt();
743
+ var rejectHandler = event => {
744
+ commands.executeCommand("ReportSDK.traceSystem", {
745
+ event: "globalJsError",
746
+ info: {
747
+ err: JSON.stringify(event)
748
+ }
749
+ }).catch(e => {
750
+ console.error(`Fallback report: ${e} ${JSON.stringify(event)}`);
751
+ trackError({
752
+ err: JSON.stringify({
753
+ message: e.message,
754
+ source: e.source,
755
+ lineno: e.lineno,
756
+ colno: e.colno,
757
+ error: e.error
758
+ })
759
+ });
760
+ });
761
+ };
762
+ var reportError = rejectHandler;
763
+ window.addEventListener("unhandledrejection", rejectHandler.bind(void 0));
764
+ window.addEventListener("error", rejectHandler.bind(void 0));
765
+ window.onerror = (message, source, lineno, colno, error) => {
766
+ commands.executeCommand("ReportSDK.traceSystem", {
767
+ event: "globalJsError",
768
+ info: {
769
+ err: JSON.stringify({
770
+ message,
771
+ source,
772
+ lineno,
773
+ colno,
774
+ error
775
+ })
776
+ }
777
+ }).catch(e => {
778
+ trackError({
779
+ err: JSON.stringify({
780
+ message,
781
+ source,
782
+ lineno,
783
+ colno,
784
+ error
785
+ })
786
+ });
787
+ });
788
+ };
789
+
790
+ // src/loader/version.ts
791
+ var splitSemver = version => {
792
+ const prerelease = version.split("-")[1];
793
+ if (prerelease) {
794
+ version = version.replace(`-${prerelease}`, "");
795
+ }
796
+ const build = version.split("+")[1];
797
+ if (build) {
798
+ version = version.replace(`+${build}`, "");
799
+ }
800
+ const splitted = version.split(".").slice(0, 3);
801
+ const [major2, minor, patch] = [splitted[0] ?? "0", splitted[1] ?? "0", splitted[2] ?? "0"];
802
+ return {
803
+ major: major2,
804
+ minor,
805
+ patch,
806
+ prerelease,
807
+ build
808
+ };
809
+ };
810
+ var major = version => parseInt(splitSemver(version).major, 10);
811
+ var compare = (v1, v2) => {
812
+ const {
813
+ major: major1,
814
+ minor: minor1,
815
+ patch: patch1,
816
+ prerelease: pre1
817
+ } = splitSemver(v1);
818
+ const {
819
+ major: major2,
820
+ minor: minor2,
821
+ patch: patch2,
822
+ prerelease: pre2
823
+ } = splitSemver(v2);
824
+ if (major1 !== major2) {
825
+ return major1 > major2 ? 1 : -1;
826
+ }
827
+ if (minor1 !== minor2) {
828
+ return minor1 > minor2 ? 1 : -1;
829
+ }
830
+ if (patch1 !== patch2) {
831
+ return patch1 > patch2 ? 1 : -1;
832
+ }
833
+ if (pre1 && !pre2) return -1;
834
+ if (!pre1 && pre2) return 1;
835
+ if (pre1 && pre2) {
836
+ return pre1 > pre2 ? 1 : pre1 < pre2 ? -1 : 0;
837
+ }
838
+ return 0;
839
+ };
840
+
841
+ // src/utils/report.ts
842
+ var commands2 = qt();
843
+ var track = (event, info) => {
844
+ commands2.executeCommand("ReportSDK.traceSystem", {
845
+ event,
846
+ info
847
+ });
848
+ };
849
+ var trackPerformance = (event, duration, extra) => {
850
+ commands2.executeCommand("ReportSDK.traceSystemTimeline", {
851
+ event,
852
+ duration,
853
+ extra
854
+ });
855
+ };
856
+
857
+ // src/loader/local-storage.ts
858
+ function getOriginalLocalStorage() {
859
+ try {
860
+ if (window.__joliboxLocalStorage__) {
861
+ return window.__joliboxLocalStorage__;
862
+ }
863
+ let originalDescriptor = Object.getOwnPropertyDescriptor(window, "localStorage");
864
+ if (originalDescriptor && originalDescriptor.get) {
865
+ const originalLocalStorage = originalDescriptor.get.call(window);
866
+ window.__joliboxLocalStorage__ = originalLocalStorage;
867
+ return originalLocalStorage;
868
+ }
869
+ originalDescriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(window), "localStorage");
870
+ if (originalDescriptor && originalDescriptor.get) {
871
+ const originalLocalStorage = originalDescriptor.get.call(window);
872
+ return originalLocalStorage;
873
+ }
874
+ const windowProto = Window.prototype;
875
+ const protoDescriptor = Object.getOwnPropertyDescriptor(windowProto, "localStorage");
876
+ if (protoDescriptor && protoDescriptor.get) {
877
+ const protoLocalStorage = protoDescriptor.get.call(window);
878
+ window.__joliboxLocalStorage__ = protoLocalStorage;
879
+ return protoLocalStorage;
880
+ }
881
+ return localStorage;
882
+ } catch (e) {
883
+ console.warn("Failed to get original localStorage, fallback to default implementation", e);
884
+ return localStorage;
885
+ }
886
+ }
887
+
888
+ // src/loader/h5.ts
889
+ var LOCAL_STORE_KEY = "jolibox-sdk-loadermeta";
890
+ getOriginalLocalStorage();
891
+ var CURRENT_VERSION_STORE = JSON.parse(window.__joliboxLocalStorage__.getItem(LOCAL_STORE_KEY) ?? "{}");
892
+ var now = Date.now();
893
+ var expired = (now2, prev) => now2 > prev && Math.abs(now2 - prev) / (1e3 * 60 * 60 * 24) >= 7;
894
+ var isLegalScript = str => !/^(Failed to fetch version|Couldn't find the requested file)/.test(str);
895
+ async function fetchCurrentRemoteScript() {
896
+ const host = testMode ? "https://stg-api.jolibox.com" : "https://api.jolibox.com";
897
+ const path = `${host}/api/fe-configs/js-sdk/version-metadata`;
898
+ try {
899
+ const response = await fetch(path, {
900
+ method: "GET",
901
+ headers: {
902
+ "Content-Type": "application/json"
903
+ }
904
+ });
905
+ const {
906
+ implement_version,
907
+ bootstrap_version
908
+ } = await response.json();
909
+ let currentStore = {
910
+ ...CURRENT_VERSION_STORE,
911
+ timestamp: now
912
+ };
913
+ if (bootstrap_version) {
914
+ const {
915
+ bootstrap_version: currentLocalBootstrapVersion
916
+ } = CURRENT_VERSION_STORE;
917
+ if (currentLocalBootstrapVersion && compare(currentLocalBootstrapVersion, bootstrap_version) >= 0) {} else {
918
+ const currentBootstrapModuleStr = await (await fetch(getBoostrapModuleUrl(bootstrap_version))).text();
919
+ isLegalScript(currentBootstrapModuleStr) && (currentStore = {
920
+ ...currentStore,
921
+ bootstrap_version,
922
+ bootstrap_script: currentBootstrapModuleStr
923
+ });
924
+ }
925
+ }
926
+ if (implement_version) {
927
+ const {
928
+ implement_version: currentLocalImpelementVersion
929
+ } = CURRENT_VERSION_STORE;
930
+ if (currentLocalImpelementVersion && compare(currentLocalImpelementVersion, implement_version) >= 0) {} else {
931
+ const currentImplementModuleStr = await (await fetch(getImplementModuleUrl(implement_version))).text();
932
+ isLegalScript(currentImplementModuleStr) && (currentStore = {
933
+ ...currentStore,
934
+ implement_version,
935
+ implement_script: currentImplementModuleStr
936
+ });
937
+ }
938
+ }
939
+ window.__joliboxLocalStorage__.setItem(LOCAL_STORE_KEY, JSON.stringify(currentStore));
940
+ } catch (error) {
941
+ console.warn("Failed to fetch loader metadata: ", error);
942
+ }
943
+ }
944
+ var createLoadImplement = params => {
945
+ const {
946
+ currentMajorVersion: currentMajorVersion2,
947
+ currentVersion: currentVersion2,
948
+ bootstrapUrl,
949
+ implementUrl
950
+ } = params;
951
+ function fetchCurrentBootstrapModule() {
952
+ const {
953
+ bootstrap_version,
954
+ bootstrap_script,
955
+ timestamp
956
+ } = CURRENT_VERSION_STORE;
957
+ if (bootstrap_version && bootstrap_script && timestamp) {
958
+ if (!expired(now, timestamp) && major(bootstrap_version) == currentMajorVersion2 && compare(bootstrap_version, currentVersion2) >= 0) {
959
+ return {
960
+ script: bootstrap_script,
961
+ type: "localscript"
962
+ };
963
+ }
964
+ }
965
+ try {
966
+ const xhr = new XMLHttpRequest();
967
+ xhr.open("GET", bootstrapUrl, false);
968
+ xhr.send();
969
+ return {
970
+ script: xhr.responseText,
971
+ type: "fetch_from_cdn"
972
+ };
973
+ } catch (e) {
974
+ const internalError = new Q(`Bootstrap module faile to fetch ${e}`);
975
+ trackError({
976
+ err: `${internalError}`
977
+ });
978
+ }
979
+ }
980
+ function loadBootstrapModule() {
981
+ const startToLoad = Date.now();
982
+ track("jsSdkBegin", {
983
+ t: startToLoad
984
+ });
985
+ timeline.startTime = startToLoad;
986
+ const {
987
+ script: currentBootstrapModule,
988
+ type
989
+ } = fetchCurrentBootstrapModule() ?? {};
990
+ if (currentBootstrapModule) {
991
+ const script = document.createElement("script");
992
+ script.type = "text/javascript";
993
+ script.innerHTML = currentBootstrapModule;
994
+ document.head.appendChild(script);
995
+ trackPerformance("bootstrapModuleLoaded", Date.now() - startToLoad, {
996
+ type
997
+ });
998
+ }
999
+ }
1000
+ function evalLocalJSModule(code) {
1001
+ const evalJS = async code2 => {
1002
+ try {
1003
+ const blob = new Blob([code2], {
1004
+ type: "application/javascript"
1005
+ });
1006
+ const blobUrl = URL.createObjectURL(blob);
1007
+ const module = await (specifier => new Promise(r => r(`${specifier}`)).then(s => _interopRequireWildcard(require(s))))(blobUrl);
1008
+ URL.revokeObjectURL(blobUrl);
1009
+ return module;
1010
+ } catch (error) {
1011
+ const internalError = new X(`implement module evaluate error in h5:${error} `);
1012
+ trackError({
1013
+ err: `${internalError}`
1014
+ });
1015
+ }
1016
+ };
1017
+ evalJS(code);
1018
+ }
1019
+ function loadRemoteImplement() {
1020
+ const implStartLoad = Date.now();
1021
+ const {
1022
+ implement_script,
1023
+ implement_version,
1024
+ timestamp
1025
+ } = CURRENT_VERSION_STORE;
1026
+ if (implement_script && implement_version && timestamp) {
1027
+ if (!expired(now, timestamp) && major(implement_version) == currentMajorVersion2 && compare(implement_version, currentVersion2) >= 0) {
1028
+ evalLocalJSModule(implement_script);
1029
+ trackPerformance("implementModuleLoaded", Date.now() - implStartLoad, {
1030
+ type: "loadscript"
1031
+ });
1032
+ return;
1033
+ }
1034
+ }
1035
+ const asyncScript = document.createElement("script");
1036
+ asyncScript.type = "module";
1037
+ asyncScript.crossOrigin = "anonymous";
1038
+ asyncScript.src = implementUrl;
1039
+ asyncScript.onload = () => {
1040
+ trackPerformance("implementModuleLoaded", Date.now() - implStartLoad, {
1041
+ type: "fetch_from_cdn"
1042
+ });
1043
+ };
1044
+ document.head.appendChild(asyncScript);
1045
+ }
1046
+ return () => {
1047
+ try {
1048
+ loadBootstrapModule();
1049
+ loadRemoteImplement();
1050
+ fetchCurrentRemoteScript();
1051
+ } catch (e) {
1052
+ const internalError = new X(`module evaluate error: ${e}`);
1053
+ trackError({
1054
+ err: `${internalError}`
1055
+ });
1056
+ }
1057
+ };
1058
+ };
1059
+
1060
+ // src/loader/native.ts
1061
+ var createLoadImplement2 = (loadScript2, params) => {
1062
+ const tryLoadScript = url => {
1063
+ const funStr = loadScript2({
1064
+ path: url
1065
+ });
1066
+ if (!funStr) {
1067
+ throw `module ${url} load failed ${funStr}`;
1068
+ }
1069
+ return funStr;
1070
+ };
1071
+ function evalLocalJSModule(code) {
1072
+ const evalJS = async code2 => {
1073
+ try {
1074
+ const blob = new Blob([code2], {
1075
+ type: "application/javascript"
1076
+ });
1077
+ const blobUrl = URL.createObjectURL(blob);
1078
+ const module = await (specifier => new Promise(r => r(`${specifier}`)).then(s => _interopRequireWildcard(require(s))))(blobUrl);
1079
+ URL.revokeObjectURL(blobUrl);
1080
+ return module;
1081
+ } catch (error) {
1082
+ reportError(new X(`implement module evaluate error in native:${error} `));
1083
+ }
1084
+ };
1085
+ evalJS(code);
1086
+ }
1087
+ return () => {
1088
+ try {
1089
+ const startToLoad = Date.now();
1090
+ track("jsSdkBegin", {
1091
+ t: startToLoad
1092
+ });
1093
+ timeline.startTime = startToLoad;
1094
+ const bootstrapModuleStr = tryLoadScript(params.bootstrapUrl);
1095
+ const script = document.createElement("script");
1096
+ script.type = "text/javascript";
1097
+ script.innerHTML = bootstrapModuleStr;
1098
+ document.head.appendChild(script);
1099
+ trackPerformance("bootstrapModuleLoaded", Date.now() - startToLoad, {
1100
+ type: "native"
1101
+ });
1102
+ const implStartLoad = Date.now();
1103
+ const implModuleStr = tryLoadScript(params.implementUrl);
1104
+ evalLocalJSModule(implModuleStr);
1105
+ trackPerformance("implementModuleLoaded", Date.now() - implStartLoad, {
1106
+ type: "native"
1107
+ });
1108
+ } catch (e) {
1109
+ console.error(`native load script error: ${e}`);
1110
+ reportError(new X(`module load failed ${e}`));
1111
+ }
1112
+ };
1113
+ };
1114
+
1115
+ // src/loader/index.ts
1116
+ var BUILD_VERSION = "__JOLIBOX_LOCAL_SDK_VERSION__";
1117
+ var currentVersion = BUILD_VERSION;
1118
+ var currentMajorVersion = major(currentVersion);
1119
+ var isNative = !!(navigator.userAgent || "").includes("JoliboxPlatformSDK");
1120
+ var loadScript = isNative ? params => {
1121
+ const res = window.prompt("invoke", JSON.stringify({
1122
+ event: "loadScriptSync",
1123
+ paramsString: JSON.stringify(params)
1124
+ }));
1125
+ if (res) {
1126
+ const {
1127
+ data
1128
+ } = JSON.parse(res);
1129
+ return data;
1130
+ }
1131
+ return void 0;
1132
+ } : void 0;
1133
+ var getBoostrapModuleUrl = version => `https://cdn.jsdelivr.net/npm/@jolibox/bootstrap@${version}/dist/index.js`;
1134
+ var getImplementModuleUrl = version => `https://cdn.jsdelivr.net/npm/@jolibox/implement@${version}/dist/index.js`;
1135
+ var checkReleaseVersion = version => {
1136
+ const semverRegex = /^\d+\.\d+\.\d+$/;
1137
+ return semverRegex.test(version);
1138
+ };
1139
+ var fetchVersion = !checkReleaseVersion(currentVersion) ? currentVersion : currentMajorVersion;
1140
+ var IMMEDIATE_SCRIPT_URL = getBoostrapModuleUrl(fetchVersion);
1141
+ var REMOTE_IMPLEMENT_URL = getImplementModuleUrl(fetchVersion);
1142
+ function loadImplement() {
1143
+ if (isNative) {
1144
+ createLoadImplement2(loadScript, {
1145
+ bootstrapUrl: IMMEDIATE_SCRIPT_URL,
1146
+ implementUrl: REMOTE_IMPLEMENT_URL
1147
+ })();
1148
+ } else {
1149
+ createLoadImplement({
1150
+ bootstrapUrl: IMMEDIATE_SCRIPT_URL,
1151
+ implementUrl: REMOTE_IMPLEMENT_URL,
1152
+ currentMajorVersion,
1153
+ currentVersion
1154
+ })();
1155
+ }
1156
+ }
1157
+ loadImplement();
1158
+
1159
+ // src/api/get-system-info.ts
1160
+ var commands3 = qt();
1161
+ function getSystemInfoSync() {
1162
+ return commands3.excuteCommandSync("API.getSystemInfoSync");
1163
+ }
1164
+ function env() {
1165
+ return commands3.excuteCommandSync("API.env");
1166
+ }
1167
+
1168
+ // src/utils/can-i-use.ts
1169
+ function getCanIUseConfig(platform, key) {
1170
+ return Ln.config[platform]?.[key];
1171
+ }
1172
+ function get(obj, path, defaultValue) {
1173
+ const pathArray = Array.isArray(path) ? path : path.replace(/\[(\d+)\]/g, ".$1").split(".");
1174
+ let result = obj;
1175
+ for (const key of pathArray) {
1176
+ if (result && (typeof result === "object" || Array.isArray(result))) {
1177
+ result = result[key];
1178
+ } else {
1179
+ return defaultValue;
1180
+ }
1181
+ }
1182
+ return result === void 0 ? defaultValue : result;
1183
+ }
1184
+
1185
+ // src/api/can-i-use.ts
1186
+ var __VERSION__ = "__JOLIBOX_LOCAL_SDK_VERSION__";
1187
+ function canIUse(schema) {
1188
+ const env2 = env();
1189
+ const platform = env2.data?.deviceInfo?.platform;
1190
+ if (!platform) {
1191
+ return false;
1192
+ }
1193
+ const [name, ...rest] = schema.split(":");
1194
+ const api = getCanIUseConfig(platform == "h5" ? platform : "native", name);
1195
+ if (!api) return false;
1196
+ const apiVersion = api["version"];
1197
+ if (typeof apiVersion !== "string") return false;
1198
+ if (Dn(__VERSION__, apiVersion, "<")) return false;
1199
+ if (rest.length === 0) return true;
1200
+ return checkRest(api, rest) || checkRest(api["properties"], rest);
1201
+ }
1202
+ function checkRest(info, paths) {
1203
+ if (!info) return false;
1204
+ const v2 = get(info, paths);
1205
+ if (!v2) return false;
1206
+ if (he(v2)) return true;
1207
+ if (L(v2)) return Dn(__VERSION__, v2, ">=");
1208
+ return false;
1209
+ }
1210
+
1211
+ // src/api/login.ts
1212
+ var commands4 = qt();
1213
+ async function login() {
1214
+ if (!canIUse("login")) {
1215
+ return {
1216
+ code: "FAILURE",
1217
+ message: "[Jolibox SDK]login is not supported in this platform"
1218
+ };
1219
+ }
1220
+ return await commands4.executeCommand("API.login");
1221
+ }
1222
+ async function checkSession() {
1223
+ if (!canIUse("checkSession")) {
1224
+ return {
1225
+ code: "FAILURE",
1226
+ message: "[Jolibox SDK]checkSession is not supported in this platform"
1227
+ };
1228
+ }
1229
+ return await commands4.executeCommand("API.checkSession");
1230
+ }
1231
+
1232
+ // src/api/request.ts
1233
+ var commands5 = qt();
1234
+ async function request(params) {
1235
+ if (!canIUse("request")) {
1236
+ return {
1237
+ code: "FAILURE",
1238
+ message: "[Jolibox SDK]request is not supported in this platform"
1239
+ };
1240
+ }
1241
+ return await commands5.executeCommand("HttpSDK.request", params);
1242
+ }
1243
+
1244
+ // src/sdks/runtime.ts
1245
+ var FallbackJoliboxRuntime = class {
1246
+ constructor() {
1247
+ /**
1248
+ * Notify the end of the loading, will close the loading splash screen
1249
+ */
1250
+ this.loadFinished = () => {
1251
+ const loadFinishedEvent = new Event("JOLIBOX_RUNTIME_LOAD_FINISHED" /* LOAD_FINISHED */);
1252
+ window.dispatchEvent(loadFinishedEvent);
1253
+ };
1254
+ /**
1255
+ * Notify the progress of the loading, will update the loading splash screen
1256
+ * @param progress - The progress of the loading, should be an integer between 0 and 100
1257
+ */
1258
+ this.notifyLoadProgress = progress => {
1259
+ const detail = Math.ceil(progress);
1260
+ const event = new CustomEvent("JOLIBOX_RUNTIME_LOAD_PROGRESS" /* LOAD_PROGRESS */, {
1261
+ detail
1262
+ });
1263
+ window.dispatchEvent(event);
1264
+ };
1265
+ }
1266
+ };
1267
+ var RuntimeSDK = window.JoliboxRuntime || FallbackJoliboxRuntime;
1268
+
1269
+ // src/sdks/sdk.ts
1270
+ var BaseSDK = class {
1271
+ constructor() {
1272
+ this.commands = qt();
1273
+ this._emitter = new v();
1274
+ }
1275
+ addEventListener(event, callback) {
1276
+ this._emitter.on(event, function () {
1277
+ return callback(arguments.length <= 0 ? undefined : arguments[0]);
1278
+ });
1279
+ }
1280
+ triggerEvent(event, params) {
1281
+ this._emitter.emit(event, params);
1282
+ }
1283
+ canUse(command) {
1284
+ return canIUse(command);
1285
+ }
1286
+ canIUseIfThrow(command) {
1287
+ if (!this.canUse(command)) {
1288
+ return {
1289
+ code: "FAILURE",
1290
+ message: `[Jolibox SDK] ${command} is not supported in this platform`
1291
+ };
1292
+ }
1293
+ }
1294
+ };
1295
+
1296
+ // src/sdks/lifecycle.ts
1297
+ var LIFECYCLE_ON_READY = "LifecycleSDK.onReady";
1298
+ var LifecycleSDK = class extends BaseSDK {
1299
+ constructor() {
1300
+ super();
1301
+ }
1302
+ onReady(callback) {
1303
+ const wrappedOnReady = info => {
1304
+ callback.call(this, info);
1305
+ this.triggerEvent(LIFECYCLE_ON_READY, info);
1306
+ };
1307
+ this.commands.executeCommand("LifecycleSDK.onReady", wrappedOnReady.bind(this));
1308
+ }
1309
+ exit(params) {
1310
+ const errMsg = this.canIUseIfThrow("lifeCycle.exit");
1311
+ if (errMsg) {
1312
+ return errMsg;
1313
+ }
1314
+ this.commands.executeCommand("LifecycleSDK.exit", params.onBeforeExit, params.shouldStay);
1315
+ }
1316
+ onJoliboxHide(params) {
1317
+ this.commands.executeCommand("LifecycleSDK.onJoliboxHide", params.bind(this));
1318
+ }
1319
+ onJoliboxShow(params) {
1320
+ this.commands.executeCommand("LifecycleSDK.onJoliboxShow", params.bind(this));
1321
+ }
1322
+ };
1323
+
1324
+ // src/sdks/storage.ts
1325
+ var StorageSDK = class extends BaseSDK {
1326
+ async getItem(key) {
1327
+ const result = await this.commands.executeCommand("StorageSDK.getItem", key);
1328
+ return result;
1329
+ }
1330
+ async setItem(key, value) {
1331
+ if (key.length > 128) {
1332
+ return {
1333
+ code: "PARAMETER_ERROR",
1334
+ message: "[SDK] cloud storage setItem error: length of key should be less than 128"
1335
+ };
1336
+ }
1337
+ const valueToStore = typeof value == "string" ? value : String(value);
1338
+ if (key.length + valueToStore.length > 1024) {
1339
+ return {
1340
+ code: "PARAMETER_ERROR",
1341
+ message: "[SDK] cloud storage setItem error: length of key and value should be less than 1024"
1342
+ };
1343
+ }
1344
+ return await this.commands.executeCommand("StorageSDK.setItem", key, value);
1345
+ }
1346
+ async removeItem(key) {
1347
+ return this.commands.executeCommand("StorageSDK.removeItem", key);
1348
+ }
1349
+ async clear() {
1350
+ return this.commands.executeCommand("StorageSDK.clear");
1351
+ }
1352
+ };
1353
+
1354
+ // src/sdks/ads.ts
1355
+ var JoliboxAds = class extends BaseSDK {
1356
+ constructor() {
1357
+ super();
1358
+ this.init = config => {
1359
+ this.commands.executeCommand("AdsSDK.init", config);
1360
+ };
1361
+ this.adConfig = params => {
1362
+ this.commands.executeCommand("AdsSDK.adConfig", params);
1363
+ };
1364
+ this.adBreak = params => {
1365
+ this.commands.executeCommand("AdsSDK.adBreak", params);
1366
+ };
1367
+ this.adUnit = params => {
1368
+ this.commands.executeCommand("AdsSDK.adUnit", params);
1369
+ };
1370
+ }
1371
+ };
1372
+
1373
+ // src/sdks/keyboard.ts
1374
+ var KeyboardSDK = class extends BaseSDK {
1375
+ /**
1376
+ * 显示键盘
1377
+ * @param params
1378
+ * @returns
1379
+ */
1380
+ showKeyboard(params) {
1381
+ const errMsg = this.canIUseIfThrow("keyboard.showKeyboard");
1382
+ if (errMsg) {
1383
+ return errMsg;
1384
+ }
1385
+ this.commands.executeCommand("KeyboardSDK.showKeyboard", params);
1386
+ }
1387
+ /**
1388
+ * 更新键盘
1389
+ * @param value
1390
+ * @returns
1391
+ */
1392
+ updateKeyboard(value) {
1393
+ const errMsg = this.canIUseIfThrow("keyboard.updateKeyboard");
1394
+ if (errMsg) {
1395
+ return errMsg;
1396
+ }
1397
+ this.commands.executeCommand("KeyboardSDK.updateKeyboard", {
1398
+ value
1399
+ });
1400
+ }
1401
+ /**
1402
+ * 隐藏键盘
1403
+ * @returns
1404
+ */
1405
+ hideKeyboard() {
1406
+ const errMsg = this.canIUseIfThrow("keyboard.hideKeyboard");
1407
+ if (errMsg) {
1408
+ return errMsg;
1409
+ }
1410
+ this.commands.executeCommand("KeyboardSDK.hideKeyboard");
1411
+ }
1412
+ };
1413
+
1414
+ // src/sdks/task.ts
1415
+ var TaskTrackerSDK = class extends BaseSDK {
1416
+ async onLevelFinished(levelId, result, duration) {
1417
+ const errMsg = this.canIUseIfThrow("TaskTrackerSDK.onLevelFinished");
1418
+ if (errMsg) {
1419
+ return Promise.resolve(errMsg);
1420
+ }
1421
+ return await this.commands.executeCommand("TaskTrackerSDK.levelFinished", levelId, {
1422
+ result,
1423
+ duration
1424
+ });
1425
+ }
1426
+ async onTaskFinished(taskId, duration) {
1427
+ const errMsg = this.canIUseIfThrow("TaskTrackerSDK.onTaskFinished");
1428
+ if (errMsg) {
1429
+ return errMsg;
1430
+ }
1431
+ return await this.commands.executeCommand("TaskTrackerSDK.taskFinished", taskId, {
1432
+ duration
1433
+ });
1434
+ }
1435
+ async onTaskEvent(taskId, params) {
1436
+ const errMsg = this.canIUseIfThrow("TaskTrackerSDK.onTaskEvent");
1437
+ if (errMsg) {
1438
+ return errMsg;
1439
+ }
1440
+ return await this.commands.executeCommand("TaskTrackerSDK.taskEvent", taskId, params);
1441
+ }
1442
+ async onLevelUpgrade(levelId, name) {
1443
+ const errMsg = this.canIUseIfThrow("TaskTrackerSDK.onLevelUpgrade");
1444
+ if (errMsg) {
1445
+ return errMsg;
1446
+ }
1447
+ return await this.commands.executeCommand("TaskTrackerSDK.levelUpgrade", levelId, name);
1448
+ }
1449
+ async onHistoryUserLevel(level) {
1450
+ const errMsg = this.canIUseIfThrow("TaskTrackerSDK.onHistoryUserLevel");
1451
+ if (errMsg) {
1452
+ return errMsg;
1453
+ }
1454
+ return await this.commands.executeCommand("TaskTrackerSDK.historyUserLevel", level);
1455
+ }
1456
+ async onHistoryUserScore(score) {
1457
+ const errMsg = this.canIUseIfThrow("TaskTrackerSDK.onHistoryUserScore");
1458
+ if (errMsg) {
1459
+ return errMsg;
1460
+ }
1461
+ return await this.commands.executeCommand("TaskTrackerSDK.historyUserScore", score);
1462
+ }
1463
+ };
1464
+
1465
+ // src/sdks/router.ts
1466
+ var RouterSDK = class extends BaseSDK {
1467
+ async openSchema(schema) {
1468
+ const errMsg = this.canIUseIfThrow("router.openSchema");
1469
+ if (errMsg) {
1470
+ return errMsg;
1471
+ }
1472
+ return await this.commands.executeCommand("RouterSDK.openSchema", schema);
1473
+ }
1474
+ async openPage(url) {
1475
+ const errMsg = this.canIUseIfThrow("router.openPage");
1476
+ if (errMsg) {
1477
+ return errMsg;
1478
+ }
1479
+ return await this.commands.executeCommand("RouterSDK.openPage", url);
1480
+ }
1481
+ async closePage(webviewId) {
1482
+ const errMsg = this.canIUseIfThrow("router.closePage");
1483
+ if (errMsg) {
1484
+ return errMsg;
1485
+ }
1486
+ return await this.commands.executeCommand("RouterSDK.closePage", webviewId);
1487
+ }
1488
+ };
1489
+
1490
+ // src/index.ts
1491
+ var JoliboxSDK = class {
1492
+ constructor() {
1493
+ this.jssdkVersion = "__JOLIBOX_LOCAL_SDK_VERSION__";
1494
+ this.runtime = new RuntimeSDK();
1495
+ this.ads = new JoliboxAds();
1496
+ this.lifecycle = new LifecycleSDK();
1497
+ this.storage = new StorageSDK();
1498
+ this.keyboard = new KeyboardSDK();
1499
+ this.task = new TaskTrackerSDK();
1500
+ this.router = new RouterSDK();
1501
+ //global API
1502
+ this.getSystemInfoSync = getSystemInfoSync.bind(this);
1503
+ this.canIUse = canIUse.bind(this);
1504
+ this.login = login.bind(this);
1505
+ this.checkSession = checkSession.bind(this);
1506
+ this.request = request.bind(this);
1507
+ window.joliboxsdk = {
1508
+ runtime: this.runtime,
1509
+ ads: this.ads,
1510
+ lifecycle: this.lifecycle,
1511
+ storage: this.storage,
1512
+ keyboard: this.keyboard,
1513
+ task: this.task,
1514
+ router: this.router
1515
+ };
1516
+ }
1517
+ };
1518
+ window.JoliboxSDK = JoliboxSDK;
1519
+ })();