@jolibox/sdk 1.1.12 → 1.1.13-beta.10

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 P = Object.defineProperty;
8
+ var ye = Object.defineProperties;
9
+ var Te = Object.getOwnPropertyDescriptor;
10
+ var xe = Object.getOwnPropertyDescriptors;
11
+ var V = Object.getOwnPropertySymbols;
12
+ var Ee = Object.prototype.hasOwnProperty;
13
+ var _e = Object.prototype.propertyIsEnumerable;
14
+ var F = (n, e, t) => e in n ? P(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 = {})) Ee.call(e, t) && F(n, t, e[t]);
22
+ if (V) for (var t of V(e)) _e.call(e, t) && F(n, t, e[t]);
23
+ return n;
24
+ };
25
+ var b = (n, e) => ye(n, xe(e));
26
+ var he = (n, e) => {
27
+ for (var t in e) P(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 ? Te(e, t) : e, i = n.length - 1, s; i >= 0; i--) (s = n[i]) && (o = (r ? s(e, t, o) : s(o)) || o);
34
+ return r && o && P(e, t, o), o;
35
+ };
36
+ var C = (n, e, t) => new Promise((r, o) => {
37
+ var i = a => {
38
+ try {
39
+ c(t.next(a));
40
+ } catch (m) {
41
+ o(m);
42
+ }
43
+ },
44
+ s = a => {
45
+ try {
46
+ c(t.throw(a));
47
+ } catch (m) {
48
+ o(m);
49
+ }
50
+ },
51
+ c = a => a.done ? r(a.value) : Promise.resolve(a.value).then(i, s);
52
+ c((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 H(n) {
81
+ return new Promise(e => {
82
+ setTimeout(() => {
83
+ e();
84
+ }, n);
85
+ });
86
+ }
87
+ function S(n) {
88
+ return typeof n == "string";
89
+ }
90
+ function Re(n) {
91
+ return typeof n == "object" && n !== null && !Array.isArray(n) && !(n instanceof RegExp) && !(n instanceof Date);
92
+ }
93
+ function ve(n) {
94
+ return typeof n == "undefined";
95
+ }
96
+ function k(n) {
97
+ return ve(n) || n === null;
98
+ }
99
+ function M(n) {
100
+ return typeof n == "function";
101
+ }
102
+ function A(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 be = (a => (a[a.DEVELOPER_FILE_NOT_FOUND = 0] = "DEVELOPER_FILE_NOT_FOUND", a[a.INTERNAL_IOS_CAN_NOT_FOUND_PKG = 1] = "INTERNAL_IOS_CAN_NOT_FOUND_PKG", a[a.USER_IOS_LOAD_TIMEOUT = 2] = "USER_IOS_LOAD_TIMEOUT", a[a.INTERNAL_IOS_PKG_LOAD_ERROR = 3] = "INTERNAL_IOS_PKG_LOAD_ERROR", a[a.INTERNAL_IOS_PKG_PARSE_FAIL = 4] = "INTERNAL_IOS_PKG_PARSE_FAIL", a[a.USER_IOS_GET_EMPTY_DATA = 5] = "USER_IOS_GET_EMPTY_DATA", a[a.USER_ANDROID_GET_PKG_FAIL = 6] = "USER_ANDROID_GET_PKG_FAIL", a[a.DEVELOPER_ANDROID_PACKAGE_FILE_UNEXPECTED_REQUIRE = 7] = "DEVELOPER_ANDROID_PACKAGE_FILE_UNEXPECTED_REQUIRE", a))(be || {});
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 W = class extends u {
130
+ constructor() {
131
+ super(...arguments);
132
+ this.name = "INTERNAL_JS_MODULE_FETCH_ERROR";
133
+ this.priority = "P0";
134
+ }
135
+ };
136
+ var Q = class extends u {
137
+ constructor() {
138
+ super(...arguments);
139
+ this.name = "INTERNAL_JS_MODULE_EVAL_ERROR";
140
+ this.priority = "P0";
141
+ }
142
+ };
143
+ function R(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 se = {
150
+ log: R("log"),
151
+ warn: R("warn"),
152
+ info: R("info"),
153
+ error: R("error"),
154
+ debug: R("debug")
155
+ };
156
+ Object.assign(globalThis, {
157
+ logger: se
158
+ });
159
+ var ae = Symbol.for("Jolibox.canIUseMap");
160
+ var Ce = {};
161
+ globalThis[ae] = Ce;
162
+ var Un = {
163
+ get config() {
164
+ return globalThis[ae];
165
+ }
166
+ };
167
+ function jn(n, e, t) {
168
+ let r = 0;
169
+ if (n !== e) {
170
+ let o = n.split("."),
171
+ i = e.split("."),
172
+ s = Math.max(o.length, i.length);
173
+ for (let c = 0; c < s; c++) {
174
+ let a = parseInt(o[c], 10) || 0,
175
+ m = parseInt(i[c], 10) || 0;
176
+ if (a > m) {
177
+ r = 1;
178
+ break;
179
+ } else if (a < m) {
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 we = (i => (i.MiniGame = "mini-game", i.MiniDrama = "mini-drama", i.App = "app", i.WebSDK = "web-sdk", i.AppSDK = "app-sdk", i))(we || {});
203
+ var Oe = (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))(Oe || {});
204
+ var de = ["name", "params"];
205
+ var Ne = ["name", "type", "location", "target", "extra", "timestamp", "userId"];
206
+ var Le = ["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, de) : null,
218
+ t = n.target ? O(n.target, de) : null;
219
+ return O(b(f({}, n), {
220
+ location: e,
221
+ target: t
222
+ }), Ne);
223
+ }
224
+ function Gn(n) {
225
+ let e = n.events.map(r => Pe(r)),
226
+ t = O(n.device, Le);
227
+ return [n.protocolVersion, e, t, n.project];
228
+ }
229
+ var le = () => "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
+ function ce() {
234
+ try {
235
+ if (window.__joliboxLocalStorage__) return window.__joliboxLocalStorage__;
236
+ let n = Object.getOwnPropertyDescriptor(window, "localStorage");
237
+ if (n && n.get) {
238
+ let r = n.get.call(window);
239
+ return window.__joliboxLocalStorage__ = r, r;
240
+ }
241
+ if (n = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(window), "localStorage"), n && n.get) return n.get.call(window);
242
+ let e = Window.prototype,
243
+ t = Object.getOwnPropertyDescriptor(e, "localStorage");
244
+ if (t && t.get) {
245
+ let r = t.get.call(window);
246
+ return window.__joliboxLocalStorage__ = r, r;
247
+ }
248
+ return localStorage;
249
+ } catch (n) {
250
+ return console.warn("Failed to get original localStorage, fallback to default implementation", n), localStorage;
251
+ }
252
+ }
253
+ ce();
254
+ var N = {
255
+ isiOS: navigator.userAgent.includes("iPhone") || navigator.userAgent.includes("iPod") || navigator.userAgent.includes("iPad") || navigator.userAgent.includes("iPhone OS"),
256
+ iosVersion: () => {
257
+ let n = navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/);
258
+ return [parseInt(n[1], 10), parseInt(n[2], 10), parseInt(n[3] || "0", 10)];
259
+ },
260
+ isAndroid: navigator.userAgent.includes("Android"),
261
+ isMac: navigator.userAgent.includes("Mac"),
262
+ isFacebook: navigator.userAgent.includes("FB_IAB"),
263
+ isPC: !navigator.userAgent.includes("iPhone") && !navigator.userAgent.includes("Android")
264
+ };
265
+ var Se = () => N.isiOS ? "iOS" : N.isAndroid ? "Android" : N.isMac ? "Mac" : N.isFacebook ? "Facebook" : "PC";
266
+ var ke = "device_id";
267
+ var Me = "advertising_id";
268
+ var me = n => (window.__joliboxLocalStorage__.getItem(n) || window.__joliboxLocalStorage__.setItem(n, le()), window.__joliboxLocalStorage__.getItem(n));
269
+ var Ue = () => {
270
+ let e = new URLSearchParams(window.location.search).get("deviceId");
271
+ return e || me(ke);
272
+ };
273
+ var De = () => me(Me);
274
+ var Ve = n => n.charAt(0).toUpperCase() + n.slice(1);
275
+ var Fe = () => {
276
+ var e;
277
+ let n = new URLSearchParams(window.location.search);
278
+ return Ve((e = n.get("utm_source")) != null ? e : "") || "JoliboxSDK";
279
+ };
280
+ var et = n => {
281
+ let e = "JoliboxWebSDK",
282
+ t = Se(),
283
+ r = navigator.language,
284
+ o = Ue(),
285
+ i = De();
286
+ return `${e} (${Fe()}${t}; UnknownModel; UnknownSystemVersion; ${r}) uuid/${o} adid/${i} version/${n || ""}`;
287
+ };
288
+ var T = class T2 {
289
+ constructor(e) {
290
+ this.element = e, this.next = T2.Undefined, this.prev = T2.Undefined;
291
+ }
292
+ };
293
+ T.Undefined = new T(void 0);
294
+ var l = T;
295
+ var L = class {
296
+ constructor() {
297
+ this._first = l.Undefined;
298
+ this._last = l.Undefined;
299
+ this._size = 0;
300
+ }
301
+ get size() {
302
+ return this._size;
303
+ }
304
+ isEmpty() {
305
+ return this._first === l.Undefined;
306
+ }
307
+ clear() {
308
+ let e = this._first;
309
+ for (; e !== l.Undefined;) {
310
+ let t = e.next;
311
+ e.prev = l.Undefined, e.next = l.Undefined, e = t;
312
+ }
313
+ this._first = l.Undefined, this._last = l.Undefined, this._size = 0;
314
+ }
315
+ unshift(e) {
316
+ return this._insert(e, false);
317
+ }
318
+ push(e) {
319
+ return this._insert(e, true);
320
+ }
321
+ _insert(e, t) {
322
+ let r = new l(e);
323
+ if (this._first === l.Undefined) this._first = r, this._last = r;else if (t) {
324
+ let i = this._last;
325
+ this._last = r, r.prev = i, i.next = r;
326
+ } else {
327
+ let i = this._first;
328
+ this._first = r, r.next = i, i.prev = r;
329
+ }
330
+ this._size += 1;
331
+ let o = false;
332
+ return () => {
333
+ o || (o = true, this._remove(r));
334
+ };
335
+ }
336
+ shift() {
337
+ if (this._first !== l.Undefined) {
338
+ let e = this._first.element;
339
+ return this._remove(this._first), e;
340
+ }
341
+ }
342
+ pop() {
343
+ if (this._last !== l.Undefined) {
344
+ let e = this._last.element;
345
+ return this._remove(this._last), e;
346
+ }
347
+ }
348
+ _remove(e) {
349
+ if (e.prev !== l.Undefined && e.next !== l.Undefined) {
350
+ let t = e.prev;
351
+ t.next = e.next, e.next.prev = t;
352
+ } 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);
353
+ this._size -= 1;
354
+ }
355
+ *[Symbol.iterator]() {
356
+ let e = this._first;
357
+ for (; e !== l.Undefined;) yield e.element, e = e.next;
358
+ }
359
+ };
360
+ var je = 0;
361
+ var x = class {
362
+ constructor(e) {
363
+ this.value = e;
364
+ this.id = je++;
365
+ }
366
+ };
367
+ var p = class {
368
+ constructor(e) {
369
+ this.options = e;
370
+ this._size = 0;
371
+ }
372
+ dispose(e) {
373
+ var t, r;
374
+ this._disposed || (this._disposed = true, this._listeners && (e ? (this._listeners instanceof x && (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));
375
+ }
376
+ get event() {
377
+ var e;
378
+ return (e = this._event) != null || (this._event = (t, r) => {
379
+ var i, s, c, a, m, d;
380
+ if (this._disposed) return () => {
381
+ console.info("[Jolibox SDK] Emitter is _disposed");
382
+ };
383
+ r && (t = t.bind(r));
384
+ let o = new x(t);
385
+ this._listeners ? this._listeners instanceof x ? this._listeners = [this._listeners, o] : this._listeners.push(o) : ((s = (i = this.options) == null ? void 0 : i.onWillAddFirstListener) == null || s.call(i, this), this._listeners = o, (a = (c = this.options) == null ? void 0 : c.onDidFirstListener) == null || a.call(c, this)), (d = (m = this.options) == null ? void 0 : m.onDidAddListener) == null || d.call(m, this), this._size++;
386
+ }), this._event;
387
+ }
388
+ _deliver(e, t) {
389
+ var o;
390
+ if (!e) return;
391
+ let r = ((o = this.options) == null ? void 0 : o.onListenerError) || Error.constructor;
392
+ if (!r) {
393
+ e.value(t);
394
+ return;
395
+ }
396
+ try {
397
+ e.value(t);
398
+ } catch (i) {
399
+ r(i);
400
+ }
401
+ }
402
+ fire(e) {
403
+ this._listeners && (this._listeners instanceof x ? this._deliver(this._listeners, e) : this._listeners.forEach(t => this._deliver(t, e)));
404
+ }
405
+ hasListeners() {
406
+ return this._size > 0;
407
+ }
408
+ };
409
+ var v = class {
410
+ constructor() {
411
+ this.listeners = /* @__PURE__ */new Map();
412
+ this.listerHandlerMap = /* @__PURE__ */new WeakMap();
413
+ this.cachedEventQueue = /* @__PURE__ */new Map();
414
+ }
415
+ on(e, t) {
416
+ var s;
417
+ let r = (s = this.listeners.get(e)) != null ? s : new p(),
418
+ o = c => t(...c.args);
419
+ this.listerHandlerMap.set(t, o), r.event(o), this.listeners.set(e, r);
420
+ let i = this.cachedEventQueue.get(e);
421
+ if (i) for (; i.size > 0;) r.fire(f({
422
+ event: e
423
+ }, i.shift()));
424
+ }
425
+ off(e, t) {
426
+ let r = this.listeners.get(e);
427
+ if (r) {
428
+ let o = this.listerHandlerMap.get(t);
429
+ r.dispose(o);
430
+ }
431
+ }
432
+ emit(e) {
433
+ let r = this.listeners.get(e);
434
+ for (var _len2 = arguments.length, t = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
435
+ t[_key2 - 1] = arguments[_key2];
436
+ }
437
+ if (r) r.fire({
438
+ event: e,
439
+ args: t
440
+ });else {
441
+ let o = this.cachedEventQueue.get(e);
442
+ o || (o = new L(), this.cachedEventQueue.set(e, o)), o.push({
443
+ args: t
444
+ });
445
+ }
446
+ }
447
+ };
448
+ var E = {};
449
+ he(E, {
450
+ None: () => He,
451
+ filter: () => Ge,
452
+ once: () => ue,
453
+ toPromise: () => Ke
454
+ });
455
+ var He = () => {
456
+ console.log("[Jolibox SDK] None Event");
457
+ };
458
+ function Ke(n) {
459
+ return new Promise(e => ue(n)(e));
460
+ }
461
+ function ue(n) {
462
+ return function (e) {
463
+ let t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
464
+ let r = false;
465
+ return n(i => {
466
+ if (!r) return r = true, e.call(t, i);
467
+ }, null);
468
+ };
469
+ }
470
+ function Ge(n, e) {
471
+ return (r => {
472
+ let o,
473
+ i = {
474
+ onWillAddFirstListener() {
475
+ o = r(s.fire, s);
476
+ }
477
+ },
478
+ s = new p(i);
479
+ return s.event;
480
+ })(function (r) {
481
+ let o = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
482
+ return n(i => e(i) && r.call(o, i), null);
483
+ });
484
+ }
485
+ var U = Symbol.for("Jolibox.hostEmitter");
486
+ var Je = () => {
487
+ let n = new v();
488
+ return globalThis[U] || (globalThis[U] = {
489
+ on: n.on.bind(n),
490
+ off: n.off.bind(n),
491
+ emit: n.emit.bind(n)
492
+ }), globalThis[U];
493
+ };
494
+ var Nt = Je();
495
+ function pe(n, e) {
496
+ let t = Math.min(n.length, e.length);
497
+ for (let r = 0; r < t; r++) $e(n[r], e[r]);
498
+ }
499
+ function $e(n, e) {
500
+ if (S(e)) {
501
+ if (typeof n !== e) throw new Error(`argument does not match constraint: typeof ${e}`);
502
+ } else if (M(e)) {
503
+ try {
504
+ if (n instanceof e) return;
505
+ } catch (t) {}
506
+ if (!k(n) && n.constructor === e || e.length === 1 && e.call(void 0, n) === true) return;
507
+ throw new Error("[Jolibox SDK]argument does not match one of these constraints: arg instanceof constraint, arg.constructor === constraint, nor constraint(arg) === true");
508
+ }
509
+ }
510
+ var g = class {
511
+ constructor() {
512
+ this._commands = /* @__PURE__ */new Map();
513
+ this._onDidRegisterCommand = new p();
514
+ this.onDidRegisterCommand = this._onDidRegisterCommand.event;
515
+ console.log("[Jolibox SDK] command registry");
516
+ }
517
+ registerCommand(e) {
518
+ if (!e) throw new Error("invalid command");
519
+ if (e.metadata && Array.isArray(e.metadata.args)) {
520
+ let o = [];
521
+ for (let s of e.metadata.args) o.push(s.constraint);
522
+ let i = e.handler;
523
+ e.handler = function () {
524
+ for (var _len3 = arguments.length, s = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
525
+ s[_key3] = arguments[_key3];
526
+ }
527
+ return pe(s, o), i(...s);
528
+ };
529
+ }
530
+ let {
531
+ id: t
532
+ } = e;
533
+ this._commands.get(t) && console.info(`[Jolibox SDK] duplicated command is registered ${t}`), this._commands.set(t, e), this._onDidRegisterCommand.fire(t);
534
+ }
535
+ getCommand(e) {
536
+ return this._commands.get(e);
537
+ }
538
+ getCommands() {
539
+ let e = /* @__PURE__ */new Map();
540
+ for (let t of this._commands.keys()) {
541
+ let r = this.getCommand(t);
542
+ r && e.set(t, r);
543
+ }
544
+ return e;
545
+ }
546
+ };
547
+ g = I([A], g);
548
+ var _ = class {
549
+ constructor() {
550
+ this._onWillExecuteCommand = new p();
551
+ this.onWillExecuteCommand = this._onWillExecuteCommand.event;
552
+ this._onDidExecuteCommand = new p();
553
+ this.onDidExecuteCommand = this._onDidExecuteCommand.event;
554
+ this.registry = new g();
555
+ this._starActivation = null;
556
+ }
557
+ _activateStar() {
558
+ return this._starActivation || (this._starActivation = H(3e4)), this._starActivation;
559
+ }
560
+ executeCommand(e) {
561
+ for (var _len4 = arguments.length, t = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {
562
+ t[_key4 - 1] = arguments[_key4];
563
+ }
564
+ return C(this, null, function* () {
565
+ return this.registry.getCommand(e) ? this._tryExecuteCommand(e, t) : (yield Promise.all([Promise.race([this._activateStar(), E.toPromise(E.filter(this.registry.onDidRegisterCommand, o => o === e))])]), this._tryExecuteCommand(e, t));
566
+ });
567
+ }
568
+ executeCommandThowErr(e) {
569
+ if (!!!this.registry.getCommand(e)) throw new Error(`command '${e}' not found`);
570
+ let o = this.registry.getCommand(e);
571
+ for (var _len5 = arguments.length, t = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {
572
+ t[_key5 - 1] = arguments[_key5];
573
+ }
574
+ this._onWillExecuteCommand.fire({
575
+ commandId: e,
576
+ args: t
577
+ });
578
+ let i = this.invokeFunction(o.handler, ...t);
579
+ return this._onDidExecuteCommand.fire({
580
+ commandId: e,
581
+ args: t
582
+ }), i;
583
+ }
584
+ _tryExecuteCommand(e, t) {
585
+ let r = this.registry.getCommand(e);
586
+ if (!r) return Promise.reject(new Error(`command '${e}' not found`));
587
+ try {
588
+ this._onWillExecuteCommand.fire({
589
+ commandId: e,
590
+ args: t
591
+ });
592
+ let o = this.invokeFunction(r.handler, ...t);
593
+ return this._onDidExecuteCommand.fire({
594
+ commandId: e,
595
+ args: t
596
+ }), Promise.resolve(o);
597
+ } catch (o) {
598
+ return Promise.reject(o);
599
+ }
600
+ }
601
+ invokeFunction(e) {
602
+ let r = false;
603
+ try {
604
+ for (var _len6 = arguments.length, t = new Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) {
605
+ t[_key6 - 1] = arguments[_key6];
606
+ }
607
+ return e(...t);
608
+ } finally {
609
+ r = true;
610
+ }
611
+ }
612
+ };
613
+ _ = I([A], _);
614
+ var fe = Symbol.for("Jolibox.commands");
615
+ function ze() {
616
+ return typeof globalThis != "undefined" ? globalThis[fe] : void 0;
617
+ }
618
+ function Be(n) {
619
+ typeof globalThis != "undefined" && (globalThis[fe] = n);
620
+ }
621
+ function ir() {
622
+ let n = ze();
623
+ if (n) return n;
624
+ let e = new g(),
625
+ t = new _(),
626
+ r = {
627
+ registerCommand(o, i, s) {
628
+ e.registerCommand({
629
+ id: o,
630
+ handler: i,
631
+ metadata: s
632
+ });
633
+ },
634
+ executeCommand(o) {
635
+ for (var _len7 = arguments.length, i = new Array(_len7 > 1 ? _len7 - 1 : 0), _key7 = 1; _key7 < _len7; _key7++) {
636
+ i[_key7 - 1] = arguments[_key7];
637
+ }
638
+ return t.executeCommand(o, ...i);
639
+ },
640
+ excuteCommandSync(o) {
641
+ for (var _len8 = arguments.length, i = new Array(_len8 > 1 ? _len8 - 1 : 0), _key8 = 1; _key8 < _len8; _key8++) {
642
+ i[_key8 - 1] = arguments[_key8];
643
+ }
644
+ return t.executeCommandThowErr(o, ...i);
645
+ }
646
+ };
647
+ return Be(r), r;
648
+ }
649
+
650
+ // src/utils/env.ts
651
+ var testMode = new URLSearchParams(window.location.search).get("joliboxEnv") === "staging";
652
+
653
+ // src/utils/event-tracker.ts
654
+ function getLocation() {
655
+ const urlParams = new URLSearchParams(window.location.search);
656
+ const params = {};
657
+ urlParams.forEach((value, key) => {
658
+ params[key] = value;
659
+ });
660
+ return {
661
+ name: "GamePage",
662
+ params
663
+ };
664
+ }
665
+ function getDevice() {
666
+ return {
667
+ platform: 1e3,
668
+ os: "h5",
669
+ appVersion: "__JOLIBOX_LOCAL_SDK_VERSION__",
670
+ // mock
671
+ appId: "1",
672
+ model: "UnknownModel",
673
+ brand: "UnknownBrand",
674
+ uuid: "1",
675
+ jsSdkVersion: "__JOLIBOX_LOCAL_SDK_VERSION__",
676
+ // mock
677
+ extra: {}
678
+ };
679
+ }
680
+ var hostToApiMap = {
681
+ default: {
682
+ test: "https://stg-collect.jolibox.com",
683
+ prod: "https://collect.jolibox.com"
684
+ },
685
+ "oss.jolibox.com": {
686
+ test: "https://stg-collect.jolibox.com",
687
+ prod: "https://collect.jolibox.com"
688
+ },
689
+ "oss.pico-game.com": {
690
+ test: "https://stg-collect.pico-game.com",
691
+ prod: "https://collect.pico-game.com"
692
+ }
693
+ };
694
+ var apiBaseURL = () => {
695
+ const api = hostToApiMap[window.location.host] ?? hostToApiMap.default;
696
+ return testMode ? api.test : api.prod;
697
+ };
698
+ var API_BASE_URL = apiBaseURL();
699
+ var timeoutFn = ms => {
700
+ const ctrl = new AbortController();
701
+ setTimeout(() => ctrl.abort(), ms);
702
+ return ctrl.signal;
703
+ };
704
+ AbortSignal.timeout ??= timeoutFn;
705
+ var getJoliSource = () => {
706
+ const urlParams = new URLSearchParams(window.location.search);
707
+ return urlParams.get("joliSource") ?? null;
708
+ };
709
+ var JOLI_SOURCE = getJoliSource();
710
+ var postToReporter = async data => {
711
+ try {
712
+ const reporterHost = API_BASE_URL;
713
+ const url = `${reporterHost}/report`;
714
+ const xua = et("__JOLIBOX_LOCAL_SDK_VERSION__");
715
+ const joliSource = JOLI_SOURCE;
716
+ const headers = {
717
+ "Content-Type": "application/json"
718
+ };
719
+ if (xua) headers["x-user-agent"] = xua;
720
+ if (joliSource) headers["x-joli-source"] = joliSource;
721
+ const response = await fetch(url, {
722
+ method: "POST",
723
+ headers,
724
+ body: JSON.stringify(data),
725
+ signal: timeoutFn(5e3)
726
+ });
727
+ return response;
728
+ } catch (error) {
729
+ console.error("Error posting to reporter:", error);
730
+ return null;
731
+ }
732
+ };
733
+ async function trackError(errorData) {
734
+ try {
735
+ const errEvent = {
736
+ name: "globalJsError",
737
+ type: Ae.ErrorTrace,
738
+ location: getLocation(),
739
+ target: null,
740
+ extra: errorData,
741
+ timestamp: Date.now(),
742
+ userId: null
743
+ };
744
+ const device = getDevice();
745
+ const events = [errEvent];
746
+ const eventPackage = {
747
+ protocolVersion: "1.0.0",
748
+ events,
749
+ device,
750
+ project: we.WebSDK
751
+ };
752
+ const serializedEventPackage = Gn(eventPackage);
753
+ await postToReporter(serializedEventPackage);
754
+ } catch (error) {
755
+ console.error("Failed to track error:", error);
756
+ }
757
+ }
758
+
759
+ // src/events.ts
760
+ document.addEventListener("DOMContentLoaded", () => Nt.emit("onDocumentReady", timeline.startTime));
761
+ var timelineFactory = () => {
762
+ let _beginLoad = 0;
763
+ return {
764
+ set startTime(time) {
765
+ _beginLoad = time;
766
+ },
767
+ get startTime() {
768
+ return _beginLoad;
769
+ }
770
+ };
771
+ };
772
+ var timeline = timelineFactory();
773
+ var commands = ir();
774
+ var rejectHandler = event => {
775
+ commands.executeCommand("ReportSDK.traceSystem", {
776
+ event: "globalJsError",
777
+ info: {
778
+ err: JSON.stringify(event)
779
+ }
780
+ }).catch(e => {
781
+ console.error(`Fallback report: ${e} ${JSON.stringify(event)}`);
782
+ trackError({
783
+ err: JSON.stringify({
784
+ message: e.message,
785
+ source: e.source,
786
+ lineno: e.lineno,
787
+ colno: e.colno,
788
+ error: e.error
789
+ })
790
+ });
791
+ });
792
+ };
793
+ var reportError = rejectHandler;
794
+ window.addEventListener("unhandledrejection", rejectHandler.bind(void 0));
795
+ window.addEventListener("error", rejectHandler.bind(void 0));
796
+ window.onerror = (message, source, lineno, colno, error) => {
797
+ commands.executeCommand("ReportSDK.traceSystem", {
798
+ event: "globalJsError",
799
+ info: {
800
+ err: JSON.stringify({
801
+ message,
802
+ source,
803
+ lineno,
804
+ colno,
805
+ error
806
+ })
807
+ }
808
+ }).catch(e => {
809
+ trackError({
810
+ err: JSON.stringify({
811
+ message,
812
+ source,
813
+ lineno,
814
+ colno,
815
+ error
816
+ })
817
+ });
818
+ });
819
+ };
820
+
821
+ // src/loader/version.ts
822
+ var splitSemver = version => {
823
+ const prerelease = version.split("-")[1];
824
+ if (prerelease) {
825
+ version = version.replace(`-${prerelease}`, "");
826
+ }
827
+ const build = version.split("+")[1];
828
+ if (build) {
829
+ version = version.replace(`+${build}`, "");
830
+ }
831
+ const splitted = version.split(".").slice(0, 3);
832
+ const [major2, minor, patch] = [splitted[0] ?? "0", splitted[1] ?? "0", splitted[2] ?? "0"];
833
+ return {
834
+ major: major2,
835
+ minor,
836
+ patch,
837
+ prerelease,
838
+ build
839
+ };
840
+ };
841
+ var major = version => parseInt(splitSemver(version).major, 10);
842
+ var compare = (v1, v2) => {
843
+ const {
844
+ major: major1,
845
+ minor: minor1,
846
+ patch: patch1,
847
+ prerelease: pre1
848
+ } = splitSemver(v1);
849
+ const {
850
+ major: major2,
851
+ minor: minor2,
852
+ patch: patch2,
853
+ prerelease: pre2
854
+ } = splitSemver(v2);
855
+ if (major1 !== major2) {
856
+ return major1 > major2 ? 1 : -1;
857
+ }
858
+ if (minor1 !== minor2) {
859
+ return minor1 > minor2 ? 1 : -1;
860
+ }
861
+ if (patch1 !== patch2) {
862
+ return patch1 > patch2 ? 1 : -1;
863
+ }
864
+ if (pre1 && !pre2) return -1;
865
+ if (!pre1 && pre2) return 1;
866
+ if (pre1 && pre2) {
867
+ return pre1 > pre2 ? 1 : pre1 < pre2 ? -1 : 0;
868
+ }
869
+ return 0;
870
+ };
871
+
872
+ // src/utils/report.ts
873
+ var commands2 = ir();
874
+ var track = (event, info) => {
875
+ commands2.executeCommand("ReportSDK.traceSystem", {
876
+ event,
877
+ info
878
+ });
879
+ };
880
+ var trackPerformance = (event, duration, extra) => {
881
+ commands2.executeCommand("ReportSDK.traceSystemTimeline", {
882
+ event,
883
+ duration,
884
+ extra
885
+ });
886
+ };
887
+
888
+ // src/loader/h5.ts
889
+ ce();
890
+ var LOCAL_STORE_KEY = "jolibox-sdk-loadermeta";
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 W(`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 Q(`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 Q(`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 Q(`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 Q(`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://jsdelivr.jolibox.com/npm/@jolibox/bootstrap@${version}/dist/index.js`;
1134
+ var getImplementModuleUrl = version => `https://jsdelivr.jolibox.com/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 = ir();
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 Un.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 (jn(__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 (Re(v2)) return true;
1207
+ if (S(v2)) return jn(__VERSION__, v2, ">=");
1208
+ return false;
1209
+ }
1210
+
1211
+ // src/api/login.ts
1212
+ var commands4 = ir();
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 = ir();
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 = ir();
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
+ })();