szdl-utils-kit 0.3.31 → 0.3.32
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/Readme.md +30 -2
- package/dist/bx24-local-source-5d9164ce.js +1491 -0
- package/dist/index.js +1178 -1085
- package/dist/index.umd.cjs +1489 -2
- package/dist/legacy/bx24-loader.legacy.js +1488 -0
- package/dist/types/batch.d.ts +6 -1
- package/dist/types/bx24-loader.d.ts +16 -0
- package/dist/types/index.d.ts +10 -0
- package/package.json +47 -45
package/dist/index.js
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
if (!
|
|
5
|
-
throw TypeError("Cannot " +
|
|
1
|
+
var Ue = Object.defineProperty;
|
|
2
|
+
var Pe = (d, t, e) => t in d ? Ue(d, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : d[t] = e;
|
|
3
|
+
var I = (d, t, e) => (Pe(d, typeof t != "symbol" ? t + "" : t, e), e), Vt = (d, t, e) => {
|
|
4
|
+
if (!t.has(d))
|
|
5
|
+
throw TypeError("Cannot " + e);
|
|
6
6
|
};
|
|
7
|
-
var L = (d,
|
|
8
|
-
if (
|
|
7
|
+
var L = (d, t, e) => (Vt(d, t, "read from private field"), e ? e.call(d) : t.get(d)), R = (d, t, e) => {
|
|
8
|
+
if (t.has(d))
|
|
9
9
|
throw TypeError("Cannot add the same private member more than once");
|
|
10
|
-
|
|
11
|
-
}, x = (d,
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
function
|
|
10
|
+
t instanceof WeakSet ? t.add(d) : t.set(d, e);
|
|
11
|
+
}, x = (d, t, e, r) => (Vt(d, t, "write to private field"), r ? r.call(d, e) : t.set(d, e), e);
|
|
12
|
+
var O = (d, t, e) => (Vt(d, t, "access private method"), e);
|
|
13
|
+
var Ge = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {};
|
|
14
|
+
function Ye(d) {
|
|
15
15
|
return d && d.__esModule && Object.prototype.hasOwnProperty.call(d, "default") ? d.default : d;
|
|
16
16
|
}
|
|
17
|
-
var
|
|
18
|
-
(function(d,
|
|
19
|
-
(function(
|
|
17
|
+
var ee = { exports: {} };
|
|
18
|
+
(function(d, t) {
|
|
19
|
+
(function(e) {
|
|
20
20
|
Array.prototype.indexOf || (Array.prototype.indexOf = function(s, o) {
|
|
21
|
-
var g,
|
|
22
|
-
for (g = o || 0,
|
|
21
|
+
var g, N;
|
|
22
|
+
for (g = o || 0, N = this.length; g < N; g += 1)
|
|
23
23
|
if (this[g] === s)
|
|
24
24
|
return g;
|
|
25
25
|
return -1;
|
|
@@ -29,26 +29,26 @@ var $t = { exports: {} };
|
|
|
29
29
|
g = "0" + g;
|
|
30
30
|
return g;
|
|
31
31
|
}, a = function(s, o) {
|
|
32
|
-
return o !==
|
|
33
|
-
},
|
|
34
|
-
var g,
|
|
35
|
-
return g = s.slice(o, o + 1), g !== "" && !isNaN(Number(g)) && (
|
|
32
|
+
return o !== e ? (s.year(o.year() || o.year), s.month(o.month() || o.month), s.day(o.day() || o.day), s.hours(o.hours() || o.hours), s.minutes(o.minutes() || o.minutes), s.seconds(o.seconds() || o.seconds), s.milliseconds(o.milliseconds() || o.milliseconds), s) : e;
|
|
33
|
+
}, c = function(s, o) {
|
|
34
|
+
var g, N = "";
|
|
35
|
+
return g = s.slice(o, o + 1), g !== "" && !isNaN(Number(g)) && (N += "%H"), g = s.charAt(o + 2), g !== "" && g === ":" && (N += g), g = s.slice(o + 3, o + 4), g !== "" && !isNaN(Number(g)) && (N += "%M"), g = s.charAt(o + 5), g !== "" && g === ":" && (N += g), g = s.slice(o + 6, o + 7), g !== "" && !isNaN(Number(g)) && (N += "%S"), N;
|
|
36
36
|
}, h = function(s, o) {
|
|
37
|
-
var g,
|
|
37
|
+
var g, N = [
|
|
38
38
|
s.slice(o, o + 1),
|
|
39
39
|
s.charAt(o + 2),
|
|
40
40
|
s.slice(o + 3, o + 4),
|
|
41
41
|
s.charAt(o + 5),
|
|
42
42
|
s.slice(o + 6, o + 9)
|
|
43
|
-
],
|
|
44
|
-
return !isNaN(Number(
|
|
43
|
+
], H;
|
|
44
|
+
return !isNaN(Number(N[0])) && !isNaN(Number(N[2])) && !isNaN(Number(N[4])) ? (N[1] === "." && N[3] === "." ? g = "%d.%m.%Y" : N[1] === "-" && N[3] === "-" ? g = "%m-%d-%Y" : N[1] === "/" && N[3] === "/" && (g = "%m/%d/%Y"), g) : (H = [
|
|
45
45
|
s.slice(o, o + 3),
|
|
46
46
|
s.charAt(o + 4),
|
|
47
47
|
s.slice(o + 5, o + 6),
|
|
48
48
|
s.charAt(o + 7),
|
|
49
49
|
s.slice(o + 8, o + 9)
|
|
50
|
-
], !isNaN(Number(
|
|
51
|
-
},
|
|
50
|
+
], !isNaN(Number(H[0])) && !isNaN(Number(H[2])) && !isNaN(Number(H[4])) ? (H[1] === "-" && H[3] === "-" && (g = "%Y-%m-%d"), g) : "");
|
|
51
|
+
}, f = r.tempus, n, m, u = r.navigator || {}, l = "en", A = {
|
|
52
52
|
en: {
|
|
53
53
|
JANUARY_SHORT: "Jan",
|
|
54
54
|
FEBRUARY_SHORT: "Feb",
|
|
@@ -209,70 +209,70 @@ var $t = { exports: {} };
|
|
|
209
209
|
FRIDAY_LONG: "Freitag",
|
|
210
210
|
SATURDAY_LONG: "Samstag"
|
|
211
211
|
}
|
|
212
|
-
},
|
|
212
|
+
}, p = function() {
|
|
213
213
|
return [
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
214
|
+
A[l].JANUARY_LONG,
|
|
215
|
+
A[l].FEBRUARY_LONG,
|
|
216
|
+
A[l].MARCH_LONG,
|
|
217
|
+
A[l].APRIL_LONG,
|
|
218
|
+
A[l].MAY_LONG,
|
|
219
|
+
A[l].JUNE_LONG,
|
|
220
|
+
A[l].JULY_LONG,
|
|
221
|
+
A[l].AUGUST_LONG,
|
|
222
|
+
A[l].SEPTEMBER_LONG,
|
|
223
|
+
A[l].OCTOBER_LONG,
|
|
224
|
+
A[l].NOVEMBER_LONG,
|
|
225
|
+
A[l].DECEMBER_LONG
|
|
226
226
|
];
|
|
227
227
|
}, _ = function() {
|
|
228
228
|
return [
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
229
|
+
A[l].JANUARY_SHORT,
|
|
230
|
+
A[l].FEBRUARY_SHORT,
|
|
231
|
+
A[l].MARCH_SHORT,
|
|
232
|
+
A[l].APRIL_SHORT,
|
|
233
|
+
A[l].MAY_SHORT,
|
|
234
|
+
A[l].JUNE_SHORT,
|
|
235
|
+
A[l].JULY_SHORT,
|
|
236
|
+
A[l].AUGUST_SHORT,
|
|
237
|
+
A[l].SEPTEMBER_SHORT,
|
|
238
|
+
A[l].OCTOBER_SHORT,
|
|
239
|
+
A[l].NOVEMBER_SHORT,
|
|
240
|
+
A[l].DECEMBER_SHORT
|
|
241
241
|
];
|
|
242
|
-
},
|
|
242
|
+
}, E = function() {
|
|
243
243
|
return [
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
244
|
+
A[l].SUNDAY_LONG,
|
|
245
|
+
A[l].MONDAY_LONG,
|
|
246
|
+
A[l].TUESDAY_LONG,
|
|
247
|
+
A[l].WEDNESDAY_LONG,
|
|
248
|
+
A[l].THURSDAY_LONG,
|
|
249
|
+
A[l].FRIDAY_LONG,
|
|
250
|
+
A[l].SATURDAY_LONG
|
|
251
251
|
];
|
|
252
252
|
}, D = function() {
|
|
253
253
|
return [
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
254
|
+
A[l].SUNDAY_SHORT,
|
|
255
|
+
A[l].MONDAY_SHORT,
|
|
256
|
+
A[l].TUESDAY_SHORT,
|
|
257
|
+
A[l].WEDNESDAY_SHORT,
|
|
258
|
+
A[l].THURSDAY_SHORT,
|
|
259
|
+
A[l].FRIDAY_SHORT,
|
|
260
|
+
A[l].SATURDAY_SHORT
|
|
261
261
|
];
|
|
262
|
-
}, T,
|
|
263
|
-
var
|
|
264
|
-
r.XMLHttpRequest ?
|
|
265
|
-
|
|
266
|
-
https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : o(JSON.parse(
|
|
267
|
-
},
|
|
268
|
-
},
|
|
262
|
+
}, T, y, B, b, C = function(s, o, g) {
|
|
263
|
+
var N;
|
|
264
|
+
r.XMLHttpRequest ? N = new XMLHttpRequest() : N = new ActiveXObject("Microsoft.XMLHTTP"), N.onreadystatechange = function() {
|
|
265
|
+
N.readyState === 4 && (N.status === 200 ? o && (r.JSON === e ? alert(`Please, include json2 into your project if you want use old browsers!
|
|
266
|
+
https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : o(JSON.parse(N.responseText))) : g && g(N));
|
|
267
|
+
}, N.open("GET", s, !1), N.send();
|
|
268
|
+
}, k = {
|
|
269
269
|
"%d": {
|
|
270
270
|
format: function(s) {
|
|
271
271
|
return i(s.day() || n.MIN_DAY, 2);
|
|
272
272
|
},
|
|
273
273
|
parse: function(s) {
|
|
274
274
|
var o = Number(s);
|
|
275
|
-
return { day: isNaN(o) ?
|
|
275
|
+
return { day: isNaN(o) ? e : o };
|
|
276
276
|
},
|
|
277
277
|
minLength: 2,
|
|
278
278
|
maxLength: 2,
|
|
@@ -284,7 +284,7 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : o(JSON.pars
|
|
|
284
284
|
},
|
|
285
285
|
parse: function(s) {
|
|
286
286
|
var o = Number(s);
|
|
287
|
-
return { month: isNaN(o) ?
|
|
287
|
+
return { month: isNaN(o) ? e : o };
|
|
288
288
|
},
|
|
289
289
|
minLength: 2,
|
|
290
290
|
maxLength: 2,
|
|
@@ -296,7 +296,7 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : o(JSON.pars
|
|
|
296
296
|
},
|
|
297
297
|
parse: function(s) {
|
|
298
298
|
var o = Number(s);
|
|
299
|
-
return { year: isNaN(o) ?
|
|
299
|
+
return { year: isNaN(o) ? e : o };
|
|
300
300
|
},
|
|
301
301
|
minLength: 4,
|
|
302
302
|
maxLength: 4,
|
|
@@ -316,7 +316,7 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : o(JSON.pars
|
|
|
316
316
|
"%a": {
|
|
317
317
|
format: function(s) {
|
|
318
318
|
var o = s.dayOfWeek();
|
|
319
|
-
return b[o !==
|
|
319
|
+
return b[o !== e ? o : n.MIN_DAY_OF_WEEK];
|
|
320
320
|
},
|
|
321
321
|
parse: function() {
|
|
322
322
|
return {};
|
|
@@ -328,7 +328,7 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : o(JSON.pars
|
|
|
328
328
|
"%A": {
|
|
329
329
|
format: function(s) {
|
|
330
330
|
var o = s.dayOfWeek();
|
|
331
|
-
return
|
|
331
|
+
return B[o !== e ? o : n.MIN_DAY_OF_WEEK];
|
|
332
332
|
},
|
|
333
333
|
parse: function() {
|
|
334
334
|
return {};
|
|
@@ -340,11 +340,11 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : o(JSON.pars
|
|
|
340
340
|
"%b": {
|
|
341
341
|
format: function(s) {
|
|
342
342
|
var o = n.options("monthFromZero") ? s.month() : s.month() - 1;
|
|
343
|
-
return
|
|
343
|
+
return y[o !== e ? o : n.MIN_MONTH];
|
|
344
344
|
},
|
|
345
345
|
parse: function(s) {
|
|
346
346
|
var o = n.monthNames().indexOf(s) + (n.options("monthFromZero") ? 0 : 1);
|
|
347
|
-
return { month: o !== -1 ? o :
|
|
347
|
+
return { month: o !== -1 ? o : e };
|
|
348
348
|
},
|
|
349
349
|
minLength: 1,
|
|
350
350
|
maxLength: 999,
|
|
@@ -353,11 +353,11 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : o(JSON.pars
|
|
|
353
353
|
"%B": {
|
|
354
354
|
format: function(s) {
|
|
355
355
|
var o = n.options("monthFromZero") ? s.month() : s.month() - 1;
|
|
356
|
-
return T[o !==
|
|
356
|
+
return T[o !== e ? o : n.MIN_MONTH];
|
|
357
357
|
},
|
|
358
358
|
parse: function(s) {
|
|
359
359
|
var o = n.monthNames(!0).indexOf(s) + (n.options("monthFromZero") ? 0 : 1);
|
|
360
|
-
return { month: o !== -1 ? o :
|
|
360
|
+
return { month: o !== -1 ? o : e };
|
|
361
361
|
},
|
|
362
362
|
minLength: 1,
|
|
363
363
|
maxLength: 999,
|
|
@@ -369,7 +369,7 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : o(JSON.pars
|
|
|
369
369
|
},
|
|
370
370
|
parse: function(s) {
|
|
371
371
|
var o = Number(s);
|
|
372
|
-
return { hours: isNaN(o) ?
|
|
372
|
+
return { hours: isNaN(o) ? e : o };
|
|
373
373
|
},
|
|
374
374
|
minLength: 2,
|
|
375
375
|
maxLength: 2,
|
|
@@ -381,7 +381,7 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : o(JSON.pars
|
|
|
381
381
|
},
|
|
382
382
|
parse: function(s) {
|
|
383
383
|
var o = Number(s);
|
|
384
|
-
return { minutes: isNaN(o) ?
|
|
384
|
+
return { minutes: isNaN(o) ? e : o };
|
|
385
385
|
},
|
|
386
386
|
minLength: 2,
|
|
387
387
|
maxLength: 2,
|
|
@@ -393,7 +393,7 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : o(JSON.pars
|
|
|
393
393
|
},
|
|
394
394
|
parse: function(s) {
|
|
395
395
|
var o = Number(s);
|
|
396
|
-
return { seconds: isNaN(o) ?
|
|
396
|
+
return { seconds: isNaN(o) ? e : o };
|
|
397
397
|
},
|
|
398
398
|
minLength: 2,
|
|
399
399
|
maxLength: 2,
|
|
@@ -415,11 +415,11 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : o(JSON.pars
|
|
|
415
415
|
return i(s.year() || n.MIN_YEAR, 4) + "-" + i(s.month() || n.MIN_MONTH, 2) + "-" + i(s.day() || n.MIN_DAY, 2);
|
|
416
416
|
},
|
|
417
417
|
parse: function(s) {
|
|
418
|
-
var o = Number(s.slice(0, 4)), g = Number(s.slice(5, 7)),
|
|
418
|
+
var o = Number(s.slice(0, 4)), g = Number(s.slice(5, 7)), N = Number(s.slice(8, 10));
|
|
419
419
|
return {
|
|
420
420
|
year: o,
|
|
421
421
|
month: g,
|
|
422
|
-
day:
|
|
422
|
+
day: N
|
|
423
423
|
};
|
|
424
424
|
},
|
|
425
425
|
minLength: 10,
|
|
@@ -431,9 +431,9 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : o(JSON.pars
|
|
|
431
431
|
return i(s.month() || n.MIN_MONTH, 2) + "/" + i(s.day() || n.MIN_DAY, 2) + "/" + i(s.year() || n.MIN_YEAR, 4);
|
|
432
432
|
},
|
|
433
433
|
parse: function(s) {
|
|
434
|
-
var o = Number(s.slice(0, 2)), g = Number(s.slice(3, 5)),
|
|
434
|
+
var o = Number(s.slice(0, 2)), g = Number(s.slice(3, 5)), N = Number(s.slice(6, 10));
|
|
435
435
|
return {
|
|
436
|
-
year:
|
|
436
|
+
year: N,
|
|
437
437
|
month: o,
|
|
438
438
|
day: g
|
|
439
439
|
};
|
|
@@ -442,11 +442,11 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : o(JSON.pars
|
|
|
442
442
|
maxLength: 10,
|
|
443
443
|
type: "string"
|
|
444
444
|
}
|
|
445
|
-
},
|
|
445
|
+
}, G = {
|
|
446
446
|
useMilliseconds: !1,
|
|
447
447
|
monthFromZero: !1
|
|
448
|
-
},
|
|
449
|
-
|
|
448
|
+
}, S;
|
|
449
|
+
S = function(s, o, g) {
|
|
450
450
|
return this._d = /* @__PURE__ */ new Date(), this._i = {
|
|
451
451
|
year: !1,
|
|
452
452
|
month: !1,
|
|
@@ -455,56 +455,56 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : o(JSON.pars
|
|
|
455
455
|
minutes: !1,
|
|
456
456
|
seconds: !1,
|
|
457
457
|
milliseconds: !1
|
|
458
|
-
}, s !==
|
|
459
|
-
},
|
|
458
|
+
}, s !== e && this.set(s, o, g), this;
|
|
459
|
+
}, S.fn = S.prototype, S.fn.dayCount = function() {
|
|
460
460
|
var s = this.month(), o = n.MAX_DAY_IN_MONTHS[s - (n.options("monthFromZero") ? 0 : 1)];
|
|
461
461
|
return this.leapYear() && s === (n.options("monthFromZero") ? 1 : 2) && (o += 1), o;
|
|
462
|
-
},
|
|
462
|
+
}, S.fn.year = function(s) {
|
|
463
463
|
if (arguments.length !== 0)
|
|
464
464
|
(typeof s == "number" || typeof s == "string") && !isNaN(Number(s)) ? Number(s) >= n.MIN_YEAR && Number(s) <= n.MAX_YEAR ? (this._d.setFullYear(Number(s)), this._i.year = !1) : this._i.year = Number(s) : (this._d.setFullYear(n.MIN_YEAR), this._i.year = !1);
|
|
465
465
|
else
|
|
466
466
|
return this._i.year === !1 ? this._d.getFullYear() : this._i.year;
|
|
467
467
|
return this;
|
|
468
|
-
},
|
|
468
|
+
}, S.fn.month = function(s) {
|
|
469
469
|
if (arguments.length !== 0)
|
|
470
470
|
(typeof s == "number" || typeof s == "string") && !isNaN(Number(s)) ? Number(s) >= n.MIN_MONTH && Number(s) <= n.MAX_MONTH ? (this._d.setMonth(n.options("monthFromZero") ? Number(s) : Number(s) - 1), this._i.month = !1) : this._i.month = Number(s) : (this._d.setMonth(n.options("monthFromZero") ? n.MIN_MONTH : n.MIN_MONTH - 1), this._i.month = !1);
|
|
471
471
|
else
|
|
472
472
|
return this._i.month === !1 ? n.options("monthFromZero") ? this._d.getMonth() : this._d.getMonth() + 1 : this._i.month;
|
|
473
473
|
return this;
|
|
474
|
-
},
|
|
474
|
+
}, S.fn.day = function(s) {
|
|
475
475
|
if (arguments.length !== 0)
|
|
476
476
|
(typeof s == "number" || typeof s == "string") && !isNaN(Number(s)) ? Number(s) >= n.MIN_DAY && Number(s) <= this.dayCount() ? (this._d.setDate(Number(s)), this._i.day = !1) : this._i.day = Number(s) : (this._d.setDate(n.MIN_DAY), this._i.day = !1);
|
|
477
477
|
else
|
|
478
478
|
return this._i.day === !1 ? this._d.getDate() : this._i.day;
|
|
479
479
|
return this;
|
|
480
|
-
},
|
|
480
|
+
}, S.fn.hours = function(s) {
|
|
481
481
|
if (arguments.length !== 0)
|
|
482
482
|
(typeof s == "number" || typeof s == "string") && !isNaN(Number(s)) ? Number(s) >= n.MIN_HOURS && Number(s) <= n.MAX_HOURS ? (this._d.setHours(Number(s)), this._i.hours = !1) : this._i.hours = Number(s) : (this._d.setHours(n.MIN_HOURS), this._i.hours = !1);
|
|
483
483
|
else
|
|
484
484
|
return this._i.hours === !1 ? this._d.getHours() : this._i.hours;
|
|
485
485
|
return this;
|
|
486
|
-
},
|
|
486
|
+
}, S.fn.minutes = function(s) {
|
|
487
487
|
if (arguments.length !== 0)
|
|
488
488
|
(typeof s == "number" || typeof s == "string") && !isNaN(Number(s)) ? Number(s) >= n.MIN_MINUTES && Number(s) <= n.MAX_MINUTES ? (this._d.setMinutes(Number(s)), this._i.minutes = !1) : this._i.minutes = Number(s) : (this._d.setMinutes(n.MIN_MINUTES), this._i.minutes = !1);
|
|
489
489
|
else
|
|
490
490
|
return this._i.minutes === !1 ? this._d.getMinutes() : this._i.minutes;
|
|
491
491
|
return this;
|
|
492
|
-
},
|
|
492
|
+
}, S.fn.seconds = function(s) {
|
|
493
493
|
if (arguments.length !== 0)
|
|
494
494
|
(typeof s == "number" || typeof s == "string") && !isNaN(Number(s)) ? Number(s) >= n.MIN_SECONDS && Number(s) <= n.MAX_SECONDS ? (this._d.setSeconds(Number(s)), this._i.seconds = !1) : this._i.seconds = Number(s) : (this._d.setSeconds(n.MIN_SECONDS), this._i.seconds = !1);
|
|
495
495
|
else
|
|
496
496
|
return this._i.seconds === !1 ? this._d.getSeconds() : this._i.seconds;
|
|
497
497
|
return this;
|
|
498
|
-
},
|
|
498
|
+
}, S.fn.milliseconds = function(s) {
|
|
499
499
|
if (arguments.length !== 0)
|
|
500
500
|
(typeof s == "number" || typeof s == "string") && !isNaN(Number(s)) ? Number(s) >= n.MIN_MILLISECONDS && Number(s) <= n.MAX_MILLISECONDS ? (this._d.setMilliseconds(Number(s)), this._i.milliseconds = !1) : this._i.milliseconds = Number(s) : (this._d.setMilliseconds(n.MIN_MILLISECONDS), this._i.milliseconds = !1);
|
|
501
501
|
else
|
|
502
502
|
return this._i.milliseconds === !1 ? this._d.getMilliseconds() : this._i.milliseconds;
|
|
503
503
|
return this;
|
|
504
|
-
},
|
|
504
|
+
}, S.fn.week = function() {
|
|
505
505
|
var s = new Date(this.year(), 0, 1), o = n(this.utc()).hours(0).minutes(0).seconds(0).milliseconds(0).utc() * 1e3;
|
|
506
506
|
return Math.ceil(((o - s.getTime()) / 864e5 + s.getDay() + 1) / 7);
|
|
507
|
-
},
|
|
507
|
+
}, S.fn.set = function(s, o, g) {
|
|
508
508
|
if (this._i = {
|
|
509
509
|
year: !1,
|
|
510
510
|
month: !1,
|
|
@@ -513,16 +513,16 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : o(JSON.pars
|
|
|
513
513
|
minutes: !1,
|
|
514
514
|
seconds: !1,
|
|
515
515
|
milliseconds: !1
|
|
516
|
-
}, s ===
|
|
516
|
+
}, s === e)
|
|
517
517
|
return this._d = /* @__PURE__ */ new Date(), this;
|
|
518
518
|
if (s instanceof Date)
|
|
519
519
|
return this._d = s, this;
|
|
520
520
|
if (typeof s == "number")
|
|
521
521
|
return this._d = new Date(s * (n.options("useMilliseconds") ? 1 : 1e3)), this;
|
|
522
522
|
if (typeof s == "object" && (s instanceof Array ? (this.day(n.MIN_DAY), this.year(s[0]), this.month(s[1]), this.day(s[2]), this.hours(s[3]), this.minutes(s[4]), this.seconds(s[5]), this.milliseconds(s[6])) : (this.day(n.MIN_DAY), this.year(s.year), this.month(s.month), this.day(s.day), this.hours(s.hours), this.minutes(s.minutes), this.seconds(s.seconds), this.milliseconds(s.milliseconds))), typeof s == "string") {
|
|
523
|
-
var
|
|
524
|
-
if (s ===
|
|
525
|
-
return M = a(this, g), M ===
|
|
523
|
+
var N, H = [], M, w, Z = [], W = 0, F = 0, U, X, P = {}, Y;
|
|
524
|
+
if (s === e)
|
|
525
|
+
return M = a(this, g), M === e && (this._i = {
|
|
526
526
|
year: -1,
|
|
527
527
|
month: -1,
|
|
528
528
|
day: -1,
|
|
@@ -531,25 +531,25 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : o(JSON.pars
|
|
|
531
531
|
seconds: -1,
|
|
532
532
|
milliseconds: -1
|
|
533
533
|
}), M;
|
|
534
|
-
for (o ===
|
|
534
|
+
for (o === e && (o = n.detectFormat(s)); W < o.length; ) {
|
|
535
535
|
if (o.charAt(W) === "%") {
|
|
536
|
-
if (
|
|
537
|
-
switch (
|
|
536
|
+
if (w = o.charAt(W) + o.charAt(W + 1), k[w] !== e) {
|
|
537
|
+
switch (U = 0, X = "", k[w].type) {
|
|
538
538
|
case "number":
|
|
539
|
-
for (;
|
|
540
|
-
X += s.charAt(F +
|
|
539
|
+
for (; U < k[w].maxLength && F + U < s.length && !isNaN(Number(s.charAt(F + U))); )
|
|
540
|
+
X += s.charAt(F + U), U += 1;
|
|
541
541
|
break;
|
|
542
542
|
case "word":
|
|
543
|
-
for (;
|
|
544
|
-
X += s.charAt(F +
|
|
543
|
+
for (; U < k[w].maxLength && F + U < s.length && /^[\u00BF-\u1FFF\u2C00-\uD7FF\w]+$/.test(s.charAt(F + U)); )
|
|
544
|
+
X += s.charAt(F + U), U += 1;
|
|
545
545
|
break;
|
|
546
546
|
case "string":
|
|
547
|
-
for (;
|
|
548
|
-
X += s.charAt(F +
|
|
547
|
+
for (; U < k[w].maxLength && F + U < s.length; )
|
|
548
|
+
X += s.charAt(F + U), U += 1;
|
|
549
549
|
break;
|
|
550
550
|
}
|
|
551
|
-
if (
|
|
552
|
-
return M = a(this, g), M ===
|
|
551
|
+
if (U < k[w].minLength)
|
|
552
|
+
return M = a(this, g), M === e && (this._i = {
|
|
553
553
|
year: -1,
|
|
554
554
|
month: -1,
|
|
555
555
|
day: -1,
|
|
@@ -558,10 +558,10 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : o(JSON.pars
|
|
|
558
558
|
seconds: -1,
|
|
559
559
|
milliseconds: -1
|
|
560
560
|
}), M;
|
|
561
|
-
|
|
561
|
+
H.push(w), Z.push(X), U -= 1, F += U, W += 1;
|
|
562
562
|
}
|
|
563
563
|
} else if (s.charAt(F) !== o.charAt(W))
|
|
564
|
-
return M = a(this, g), M ===
|
|
564
|
+
return M = a(this, g), M === e && (this._i = {
|
|
565
565
|
year: -1,
|
|
566
566
|
month: -1,
|
|
567
567
|
day: -1,
|
|
@@ -572,31 +572,31 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : o(JSON.pars
|
|
|
572
572
|
}), M;
|
|
573
573
|
W += 1, F += 1;
|
|
574
574
|
}
|
|
575
|
-
for (
|
|
576
|
-
|
|
577
|
-
year: Y.year !==
|
|
578
|
-
month: Y.month !==
|
|
579
|
-
day: Y.day !==
|
|
580
|
-
hours: Y.hours !==
|
|
581
|
-
minutes: Y.minutes !==
|
|
582
|
-
seconds: Y.seconds !==
|
|
575
|
+
for (N in H)
|
|
576
|
+
H.hasOwnProperty(N) && k.hasOwnProperty(H[N]) && (Y = k[H[N]].parse(Z[N]), P = {
|
|
577
|
+
year: Y.year !== e ? Y.year : P.year,
|
|
578
|
+
month: Y.month !== e ? Y.month : P.month,
|
|
579
|
+
day: Y.day !== e ? Y.day : P.day,
|
|
580
|
+
hours: Y.hours !== e ? Y.hours : P.hours,
|
|
581
|
+
minutes: Y.minutes !== e ? Y.minutes : P.minutes,
|
|
582
|
+
seconds: Y.seconds !== e ? Y.seconds : P.seconds
|
|
583
583
|
});
|
|
584
|
-
this.day(n.MIN_DAY), this.year(
|
|
584
|
+
this.day(n.MIN_DAY), this.year(P.year), this.month(P.month), this.day(P.day), this.hours(P.hours), this.minutes(P.minutes), this.seconds(P.seconds), this.milliseconds(P.milliseconds);
|
|
585
585
|
}
|
|
586
586
|
return this;
|
|
587
|
-
},
|
|
587
|
+
}, S.fn.leapYear = function() {
|
|
588
588
|
var s = this.year();
|
|
589
589
|
return s % 4 === 0 ? s % 100 === 0 ? s % 400 === 0 : !0 : !1;
|
|
590
|
-
},
|
|
590
|
+
}, S.fn.timestamp = function(s) {
|
|
591
591
|
return arguments.length !== 0 ? (this._d = new Date(Number(s) * (n.options("useMilliseconds") ? 1 : 1e3) + this._d.getTimezoneOffset() * 6e4), this) : n.options("useMilliseconds") ? this._d.getTime() - this._d.getTimezoneOffset() * 6e4 : Math.floor(this._d.getTime() / 1e3) - this._d.getTimezoneOffset() * 60;
|
|
592
|
-
},
|
|
592
|
+
}, S.fn.utc = function(s) {
|
|
593
593
|
return arguments.length !== 0 ? (this._d = new Date(Number(s) * (n.options("useMilliseconds") ? 1 : 1e3)), this) : n.options("useMilliseconds") ? this._d.getTime() : Math.floor(this._d.getTime() / 1e3);
|
|
594
|
-
},
|
|
594
|
+
}, S.fn.dayOfWeek = function(s) {
|
|
595
595
|
if (s === "long")
|
|
596
|
-
return
|
|
596
|
+
return B[this._d.getDay()];
|
|
597
597
|
if (s === "short")
|
|
598
598
|
return b[this._d.getDay()];
|
|
599
|
-
if (s ===
|
|
599
|
+
if (s === e)
|
|
600
600
|
return this._d.getDay();
|
|
601
601
|
if (s === 0 || s === "Sunday")
|
|
602
602
|
return this.calc({ day: -this.dayOfWeek() });
|
|
@@ -612,7 +612,7 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : o(JSON.pars
|
|
|
612
612
|
return this.calc({ day: (this.dayOfWeek() === 0 ? -2 : 5) - this.dayOfWeek() });
|
|
613
613
|
if (s === 6 || s === "Saturday")
|
|
614
614
|
return this.calc({ day: (this.dayOfWeek() === 0 ? -1 : 6) - this.dayOfWeek() });
|
|
615
|
-
},
|
|
615
|
+
}, S.fn.timezone = function(s) {
|
|
616
616
|
switch (s) {
|
|
617
617
|
case "hours":
|
|
618
618
|
return Math.floor(this._d.getTimezoneOffset() / 60);
|
|
@@ -621,7 +621,7 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : o(JSON.pars
|
|
|
621
621
|
default:
|
|
622
622
|
return this._d.getTimezoneOffset() * 60;
|
|
623
623
|
}
|
|
624
|
-
},
|
|
624
|
+
}, S.fn.get = function(s) {
|
|
625
625
|
switch (s) {
|
|
626
626
|
case "Date":
|
|
627
627
|
return new Date(
|
|
@@ -670,50 +670,50 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : o(JSON.pars
|
|
|
670
670
|
timestamp: this.timestamp()
|
|
671
671
|
};
|
|
672
672
|
}
|
|
673
|
-
},
|
|
674
|
-
for (var o = 0, g = "",
|
|
675
|
-
s.charAt(o) === "%" ? (
|
|
673
|
+
}, S.fn.format = function(s) {
|
|
674
|
+
for (var o = 0, g = "", N; o < s.length; )
|
|
675
|
+
s.charAt(o) === "%" ? (N = s.charAt(o) + s.charAt(o + 1), k[N] !== e ? (g += k[N].format(this), o += 1) : g += "%") : g += s.charAt(o), o += 1;
|
|
676
676
|
return g;
|
|
677
|
-
},
|
|
677
|
+
}, S.fn.valid = function() {
|
|
678
678
|
return this._i.year === !1 && this._i.month === !1 && this._i.day === !1 && this._i.hours === !1 && this._i.minutes === !1 && this._i.seconds === !1 && this._i.milliseconds === !1;
|
|
679
|
-
},
|
|
679
|
+
}, S.fn.errors = function() {
|
|
680
680
|
return this._i;
|
|
681
|
-
},
|
|
682
|
-
var g = this.timestamp(),
|
|
681
|
+
}, S.fn.between = function(s, o) {
|
|
682
|
+
var g = this.timestamp(), N = s.timestamp();
|
|
683
683
|
switch (o) {
|
|
684
684
|
case "year":
|
|
685
|
-
return Math.floor((
|
|
685
|
+
return Math.floor((N - g) / 31556952);
|
|
686
686
|
case "month":
|
|
687
|
-
return Math.floor((
|
|
687
|
+
return Math.floor((N - g) / 2629746);
|
|
688
688
|
case "day":
|
|
689
|
-
return Math.floor((
|
|
689
|
+
return Math.floor((N - g) / 86400);
|
|
690
690
|
case "hours":
|
|
691
|
-
return Math.floor((
|
|
691
|
+
return Math.floor((N - g) / 3600);
|
|
692
692
|
case "minutes":
|
|
693
|
-
return Math.floor((
|
|
693
|
+
return Math.floor((N - g) / 60);
|
|
694
694
|
case "seconds":
|
|
695
|
-
return
|
|
695
|
+
return N - g;
|
|
696
696
|
default:
|
|
697
|
-
return
|
|
697
|
+
return e;
|
|
698
698
|
}
|
|
699
|
-
},
|
|
700
|
-
return s.year !==
|
|
699
|
+
}, S.fn.calc = function(s) {
|
|
700
|
+
return s.year !== e && this._d.setFullYear(this._d.getFullYear() + s.year), s.month !== e && this._d.setMonth(this._d.getMonth() + s.month), s.day !== e && this._d.setDate(this._d.getDate() + s.day), s.hours !== e && this._d.setHours(this._d.getHours() + s.hours), s.minutes !== e && this._d.setMinutes(this._d.getMinutes() + s.minutes), s.seconds !== e && this._d.setSeconds(this._d.getSeconds() + s.seconds), s.milliseconds !== e && this._d.setMilliseconds(this._d.getMilliseconds() + s.milliseconds), this;
|
|
701
701
|
}, n = function(s, o, g) {
|
|
702
|
-
return new
|
|
702
|
+
return new S(s, o, g);
|
|
703
703
|
}, n.MIN_YEAR = 1e3, n.MAX_YEAR = 3e3, n.MIN_MONTH = 1, n.MAX_MONTH = 12, n.MIN_DAY = 1, n.MAX_DAY_IN_MONTHS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], n.MIN_DAY_OF_WEEK = 0, n.MAX_DAY_OF_WEEK = 6, n.MIN_HOURS = 0, n.MAX_HOURS = 23, n.MIN_MINUTES = 0, n.MAX_MINUTES = 59, n.MIN_SECONDS = 0, n.MAX_SECONDS = 59, n.MIN_MILLISECONDS = 0, n.MAX_MILLISECONDS = 999, n.VERSION = "0.2.18", n.options = function(s, o) {
|
|
704
|
-
if (s ===
|
|
705
|
-
return
|
|
706
|
-
if (
|
|
707
|
-
if (o ===
|
|
708
|
-
return
|
|
709
|
-
|
|
704
|
+
if (s === e)
|
|
705
|
+
return G;
|
|
706
|
+
if (G.hasOwnProperty(s)) {
|
|
707
|
+
if (o === e)
|
|
708
|
+
return G[s];
|
|
709
|
+
G[s] = o, s === "monthFromZero" && (n.MIN_MONTH = o ? 0 : 1, n.MAX_MONTH = o ? 11 : 12);
|
|
710
710
|
}
|
|
711
|
-
return
|
|
711
|
+
return e;
|
|
712
712
|
}, n.noConflict = function() {
|
|
713
|
-
return r.tempus =
|
|
713
|
+
return r.tempus = f, n;
|
|
714
714
|
}, n.generate = function(s) {
|
|
715
|
-
var o, g,
|
|
716
|
-
if (typeof s.dateFrom != "number" && (s.dateFrom instanceof
|
|
715
|
+
var o, g, N, H, M, w, Z, W;
|
|
716
|
+
if (typeof s.dateFrom != "number" && (s.dateFrom instanceof S ? o = s.dateFrom.utc() : o = n(s.dateFrom, s.formatFrom).utc()), typeof s.dateTo != "number" && (s.dateTo instanceof S ? g = s.dateTo.utc() : g = n(s.dateTo, s.formatTo !== e ? s.formatTo : s.formatFrom).utc()), typeof s.period == "number" ? M = {
|
|
717
717
|
year: 0,
|
|
718
718
|
month: 0,
|
|
719
719
|
day: 0,
|
|
@@ -728,117 +728,117 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : o(JSON.pars
|
|
|
728
728
|
minutes: s.period === "minutes" ? 1 : 0,
|
|
729
729
|
seconds: s.period === "seconds" ? 1 : 0
|
|
730
730
|
} : typeof s.period == "object" && (M = {
|
|
731
|
-
year: s.period.year !==
|
|
732
|
-
month: s.period.month !==
|
|
733
|
-
day: s.period.day !==
|
|
734
|
-
hours: s.period.hours !==
|
|
735
|
-
minutes: s.period.minutes !==
|
|
736
|
-
seconds: s.period.seconds !==
|
|
737
|
-
}), s.groupBy ===
|
|
738
|
-
return s.asObject === !0 ? s.format !==
|
|
739
|
-
}, s.groupBy !==
|
|
731
|
+
year: s.period.year !== e ? s.period.year : 0,
|
|
732
|
+
month: s.period.month !== e ? s.period.month : 0,
|
|
733
|
+
day: s.period.day !== e ? s.period.day : 0,
|
|
734
|
+
hours: s.period.hours !== e ? s.period.hours : 0,
|
|
735
|
+
minutes: s.period.minutes !== e ? s.period.minutes : 0,
|
|
736
|
+
seconds: s.period.seconds !== e ? s.period.seconds : 0
|
|
737
|
+
}), s.groupBy === e ? w = s.asObject === !0 ? {} : [] : (w = [], w.push([]), Z = n(o).get()[s.groupBy]), W = function(X, P, Y) {
|
|
738
|
+
return s.asObject === !0 ? s.format !== e ? X[n(P).format(s.format)] = {} : X[n(P).format("%F %H:%M:%S")] = {} : s.format !== e ? X.push(Y ? null : n(P).format(s.format)) : X.push(Y ? null : n(P)), X;
|
|
739
|
+
}, s.groupBy !== e && s.fillNulls) {
|
|
740
740
|
var F = {
|
|
741
|
-
year: M.year ? -M.year :
|
|
742
|
-
month: M.month ? -M.month :
|
|
743
|
-
day: M.day ? -M.day :
|
|
744
|
-
hours: M.hours ? -M.hours :
|
|
745
|
-
minutes: M.minutes ? -M.minutes :
|
|
746
|
-
seconds: M.seconds ? -M.seconds :
|
|
747
|
-
milliseconds: M.milliseconds ? -M.milliseconds :
|
|
741
|
+
year: M.year ? -M.year : e,
|
|
742
|
+
month: M.month ? -M.month : e,
|
|
743
|
+
day: M.day ? -M.day : e,
|
|
744
|
+
hours: M.hours ? -M.hours : e,
|
|
745
|
+
minutes: M.minutes ? -M.minutes : e,
|
|
746
|
+
seconds: M.seconds ? -M.seconds : e,
|
|
747
|
+
milliseconds: M.milliseconds ? -M.milliseconds : e
|
|
748
748
|
};
|
|
749
|
-
for (
|
|
750
|
-
W(
|
|
749
|
+
for (N = n(o).calc(F).utc(); n(N).get()[s.groupBy] === Z; )
|
|
750
|
+
W(w[w.length - 1], N, !0), N = n(N).calc(F).utc();
|
|
751
751
|
if (s.groupBy === "week") {
|
|
752
|
-
var
|
|
753
|
-
for (
|
|
754
|
-
W(
|
|
752
|
+
var U = n(o).dayOfWeek();
|
|
753
|
+
for (N = n(o).dayOfWeek(0).utc(); w[0].length < U && N < o; )
|
|
754
|
+
W(w[w.length - 1], N, !0), N = n(N).calc(M).utc();
|
|
755
755
|
}
|
|
756
756
|
}
|
|
757
757
|
for (; o <= g; )
|
|
758
|
-
s.groupBy ===
|
|
759
|
-
if (s.groupBy !==
|
|
760
|
-
for (
|
|
761
|
-
W(
|
|
762
|
-
return
|
|
758
|
+
s.groupBy === e ? W(w, o) : n(o).get()[s.groupBy] === Z ? W(w[w.length - 1], o) : (w.push([]), W(w[w.length - 1], o), Z = n(o).get()[s.groupBy]), o = n(o).calc(M).utc();
|
|
759
|
+
if (s.groupBy !== e && s.fillNulls)
|
|
760
|
+
for (H = n(g).calc(M).utc(); n(H).get()[s.groupBy] === Z; )
|
|
761
|
+
W(w[w.length - 1], H, !0), H = n(H).calc(M).utc();
|
|
762
|
+
return w;
|
|
763
763
|
}, n.monthNames = function(s) {
|
|
764
764
|
switch (s) {
|
|
765
765
|
case "long":
|
|
766
766
|
return T;
|
|
767
767
|
default:
|
|
768
|
-
return
|
|
768
|
+
return y;
|
|
769
769
|
}
|
|
770
770
|
}, n.dayNames = function(s) {
|
|
771
771
|
switch (s) {
|
|
772
772
|
case "long":
|
|
773
|
-
return
|
|
773
|
+
return B;
|
|
774
774
|
default:
|
|
775
775
|
return b;
|
|
776
776
|
}
|
|
777
777
|
}, n.lang = function(s) {
|
|
778
|
-
if (s !==
|
|
779
|
-
|
|
778
|
+
if (s !== e)
|
|
779
|
+
l = s, A[l] === e && (l = "en"), T = p(), y = _(), B = E(), b = D();
|
|
780
780
|
else
|
|
781
|
-
return
|
|
782
|
-
return
|
|
781
|
+
return l;
|
|
782
|
+
return e;
|
|
783
783
|
}, n.availableLangs = function() {
|
|
784
|
-
return Object.keys(
|
|
785
|
-
}, n.registerFormat = function(s, o, g,
|
|
786
|
-
|
|
784
|
+
return Object.keys(A);
|
|
785
|
+
}, n.registerFormat = function(s, o, g, N, H, M) {
|
|
786
|
+
k[s] = {
|
|
787
787
|
format: o,
|
|
788
788
|
parse: g,
|
|
789
|
-
minLength:
|
|
790
|
-
maxLength:
|
|
789
|
+
minLength: N,
|
|
790
|
+
maxLength: H,
|
|
791
791
|
type: M
|
|
792
792
|
};
|
|
793
793
|
}, n.unregisterFormat = function(s) {
|
|
794
|
-
delete
|
|
794
|
+
delete k[s];
|
|
795
795
|
}, n.detectFormat = function(s) {
|
|
796
|
-
var o, g,
|
|
797
|
-
return o = h(s, 0), o !== "" && (
|
|
796
|
+
var o, g, N;
|
|
797
|
+
return o = h(s, 0), o !== "" && (N = 10), g = s.charAt(N), (g === "T" || g === " ") && (o += g, N += 1), o += c(s, N), o;
|
|
798
798
|
}, m = {
|
|
799
|
-
TempusDate:
|
|
799
|
+
TempusDate: S
|
|
800
800
|
}, n.classes = function(s, o) {
|
|
801
|
-
if (o ===
|
|
801
|
+
if (o === e)
|
|
802
802
|
return m[s];
|
|
803
803
|
m[s] = o;
|
|
804
804
|
}, n.loadTranslations = function(s) {
|
|
805
|
-
typeof s == "object" ?
|
|
806
|
-
|
|
805
|
+
typeof s == "object" ? A = s : typeof s == "string" && C(s, function(o) {
|
|
806
|
+
A = o;
|
|
807
807
|
}, function(o) {
|
|
808
808
|
});
|
|
809
|
-
},
|
|
810
|
-
}).call(
|
|
811
|
-
})(
|
|
812
|
-
var
|
|
813
|
-
const
|
|
814
|
-
var
|
|
809
|
+
}, l = (u.language || u.systemLanguage || u.userLanguage || "en").substr(0, 2).toLowerCase(), A[l] === e && (l = "en"), T = p(), y = _(), B = E(), b = D(), d.exports && (t = d.exports = n), t.tempus = n;
|
|
810
|
+
}).call(Ge);
|
|
811
|
+
})(ee, ee.exports);
|
|
812
|
+
var We = ee.exports;
|
|
813
|
+
const St = /* @__PURE__ */ Ye(We);
|
|
814
|
+
var Bt, de, kt, wt, Ct, Ht, lt, Mt, Ut, me, Pt, pe, et, ft, q, tt, pt, se, st, dt, Gt, ge, Yt, ye, ct, It, gt, re, yt, ie;
|
|
815
815
|
const J = class J {
|
|
816
|
-
constructor(
|
|
816
|
+
constructor(t) {
|
|
817
817
|
/**
|
|
818
818
|
* Режим «прогресс по доле завершённых подкоманд» — только когда пачка похожа на
|
|
819
819
|
* много параллельных list (crm.deal.list × N и т.п.). Иначе сохраняется старая
|
|
820
820
|
* формула sum(count)/sum(total)×chunkRate (один длинный list, batchTotalCount, смешанные batch).
|
|
821
821
|
* @returns {boolean}
|
|
822
822
|
*/
|
|
823
|
-
|
|
823
|
+
R(this, Bt);
|
|
824
824
|
/**
|
|
825
825
|
* Одно обновление колбэка прогресса, если снимок изменился.
|
|
826
826
|
* @returns {void}
|
|
827
827
|
*/
|
|
828
|
-
|
|
828
|
+
R(this, lt);
|
|
829
829
|
/**
|
|
830
830
|
* Проверяет, изменились ли метрики прогресса относительно предыдущей отправки.
|
|
831
831
|
*
|
|
832
832
|
* @param {{percent: number, allCount: number, allTotal: number}} snapshot - Текущий снимок прогресса.
|
|
833
833
|
* @returns {boolean} `true`, если нужно отправить callback прогресса.
|
|
834
834
|
*/
|
|
835
|
-
|
|
835
|
+
R(this, Ut);
|
|
836
836
|
/**
|
|
837
837
|
* Уведомляет подписчиков о текущем состоянии лимита.
|
|
838
838
|
*
|
|
839
839
|
* @returns {void}
|
|
840
840
|
*/
|
|
841
|
-
|
|
841
|
+
R(this, Pt);
|
|
842
842
|
/**
|
|
843
843
|
* Включает состояние лимита, выдерживает паузу и затем выключает лимит.
|
|
844
844
|
* Используется как единый "cooldown" перед повторной отправкой chunk.
|
|
@@ -846,7 +846,7 @@ const J = class J {
|
|
|
846
846
|
* @param {number} [pauseMs=this.defaultPauseMs] - Длительность паузы; для batch по умолчанию 120 с, для `call()` — `callLimitPauseMs` (30 с).
|
|
847
847
|
* @returns {Promise<void>}
|
|
848
848
|
*/
|
|
849
|
-
|
|
849
|
+
R(this, et);
|
|
850
850
|
/**
|
|
851
851
|
* Проверяет operating-time в результате batch и ставит паузу,
|
|
852
852
|
* если сервер приблизился к лимиту выполнения.
|
|
@@ -854,7 +854,7 @@ const J = class J {
|
|
|
854
854
|
* @param {Object} result - Результат текущего batch-запроса.
|
|
855
855
|
* @returns {Promise<number>} Максимальный operating-time среди команд.
|
|
856
856
|
*/
|
|
857
|
-
|
|
857
|
+
R(this, q);
|
|
858
858
|
/**
|
|
859
859
|
* Состояние приёма «опоздавших» ответов callBatch после клиентского таймаута.
|
|
860
860
|
* Живёт на весь цикл ретраев одного chunk — ответ от более ранней попытки
|
|
@@ -869,7 +869,7 @@ const J = class J {
|
|
|
869
869
|
* resetLateResult: () => void,
|
|
870
870
|
* }}
|
|
871
871
|
*/
|
|
872
|
-
|
|
872
|
+
R(this, pt);
|
|
873
873
|
/**
|
|
874
874
|
* Выполняет один chunk с автоматическим повтором после лимит-паузы.
|
|
875
875
|
* Повтор запускается при ошибках QUERY_LIMIT_EXCEEDED, OPERATION_TIME_LIMIT или TIMEOUT.
|
|
@@ -878,7 +878,7 @@ const J = class J {
|
|
|
878
878
|
* @param {(result: Object) => Promise<void>} processResult - Обработчик успешного результата chunk.
|
|
879
879
|
* @returns {Promise<void>}
|
|
880
880
|
*/
|
|
881
|
-
|
|
881
|
+
R(this, st);
|
|
882
882
|
/**
|
|
883
883
|
* Выполняет BX24.callMethod с таймаутом ожидания ответа.
|
|
884
884
|
*
|
|
@@ -887,27 +887,27 @@ const J = class J {
|
|
|
887
887
|
* @param {{ onLateResponse?: (result: Object) => void }} [options] - `onLateResponse` — ответ после клиентского таймаута
|
|
888
888
|
* @returns {Promise<Object|null>} Raw-result BX24 или null при таймауте/ошибке вызова.
|
|
889
889
|
*/
|
|
890
|
-
|
|
890
|
+
R(this, Gt);
|
|
891
891
|
/**
|
|
892
892
|
* Код и текст ошибки подкоманды batch.
|
|
893
893
|
* `errorsList` по-прежнему отдаёт коды; описания — в `errorsListMessages`.
|
|
894
894
|
* @param {{ error?: () => { ex?: { error?: string, error_description?: string }, toString?: () => string } | null }} value
|
|
895
895
|
* @returns {{ code: string, message: string }}
|
|
896
896
|
*/
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
897
|
+
R(this, Yt);
|
|
898
|
+
R(this, ct);
|
|
899
|
+
R(this, gt);
|
|
900
900
|
/**
|
|
901
901
|
* Resets mutable runtime state before each public batch run.
|
|
902
902
|
* @param {Function} progressCall - Progress callback for current run.
|
|
903
903
|
* @returns {void}
|
|
904
904
|
*/
|
|
905
|
-
|
|
906
|
-
typeof
|
|
905
|
+
R(this, yt);
|
|
906
|
+
typeof t == "function" ? (this.callBatch = t, this.callMethod = null) : (this.callBatch = (t == null ? void 0 : t.callBatch) || null, this.callMethod = (t == null ? void 0 : t.callMethod) || null), this.result = {}, this.errors = {}, this.errorMessages = {}, this.timeLimit = {
|
|
907
907
|
limit: !1,
|
|
908
908
|
date: void 0,
|
|
909
909
|
pauseMs: void 0
|
|
910
|
-
}, this.timeLimitListeners = /* @__PURE__ */ new Set(), this.canContinue = !0, this.progressCall = "", this.progressData = "", this.progressTimer = "", this.lastProgressSnapshot = null, this.chunkRate = 1, this.totalProgress = 0, this.batchCommandKeyOrder = [], this.totalBatchCommands = 0, this.batchCommandMethods = [], this.filterChunkSize = 50, this.limit = 50, this.progressDelay = 100, this.operatingThreshold = 475, this.defaultPauseMs = 12e4, this.callLimitPauseMs = 3e4, this.requestTimeoutMs = 6e4;
|
|
910
|
+
}, this.timeLimitListeners = /* @__PURE__ */ new Set(), this.canContinue = !0, this.progressCall = "", this.progressData = "", this.progressTimer = "", this.lastProgressSnapshot = null, this.chunkRate = 1, this.totalProgress = 0, this.batchCommandKeyOrder = [], this.totalBatchCommands = 0, this.batchCommandMethods = [], this.filterChunkSize = 50, this.limit = 50, this.pageSize = 50, this.progressDelay = 100, this.operatingThreshold = 475, this.defaultPauseMs = 12e4, this.callLimitPauseMs = 3e4, this.requestTimeoutMs = 6e4;
|
|
911
911
|
}
|
|
912
912
|
/**
|
|
913
913
|
* Вычисление текущего прогресса выполнения batch запросов
|
|
@@ -916,32 +916,32 @@ const J = class J {
|
|
|
916
916
|
get progressPercent() {
|
|
917
917
|
if (!this.progressData)
|
|
918
918
|
return { percent: 0, allCount: 0, allTotal: 0 };
|
|
919
|
-
const
|
|
920
|
-
if (
|
|
921
|
-
let
|
|
922
|
-
for (const
|
|
923
|
-
const
|
|
924
|
-
if (!
|
|
919
|
+
const t = this.totalBatchCommands || 0;
|
|
920
|
+
if (t > 0 && Array.isArray(this.batchCommandKeyOrder) && this.batchCommandKeyOrder.length && O(this, Bt, de).call(this)) {
|
|
921
|
+
let f = 0;
|
|
922
|
+
for (const A of this.batchCommandKeyOrder) {
|
|
923
|
+
const p = this.progressData[A];
|
|
924
|
+
if (!p)
|
|
925
925
|
continue;
|
|
926
|
-
const _ = Number(
|
|
927
|
-
_ === 0 &&
|
|
926
|
+
const _ = Number(p.total) || 0, E = Number(p.count) || 0;
|
|
927
|
+
_ === 0 && E === 0 ? f += 1 : _ > 0 && (f += Math.min(1, E / _));
|
|
928
928
|
}
|
|
929
|
-
const n =
|
|
929
|
+
const n = f / t * 100;
|
|
930
930
|
let m = Math.max(0, Math.min(100, Math.floor(n)));
|
|
931
|
-
const
|
|
932
|
-
return { percent: m, allCount:
|
|
931
|
+
const u = t, l = Math.min(t, Math.floor(f));
|
|
932
|
+
return { percent: m, allCount: l, allTotal: u };
|
|
933
933
|
}
|
|
934
|
-
let
|
|
935
|
-
for (const
|
|
936
|
-
const { total: n, count: m } =
|
|
937
|
-
|
|
934
|
+
let e = 0, r = 0;
|
|
935
|
+
for (const f of Object.values(this.progressData)) {
|
|
936
|
+
const { total: n, count: m } = f;
|
|
937
|
+
e += n ?? 0, r += m ?? 0;
|
|
938
938
|
}
|
|
939
939
|
const i = Number(this.chunkRate) || 0;
|
|
940
940
|
let a = 0;
|
|
941
|
-
|
|
942
|
-
let
|
|
941
|
+
e ? a = r / e * 100 * i + this.totalProgress : r === 0 && e === 0 ? a = i < 1 ? this.totalProgress : 100 * i + this.totalProgress : a = 100, a = Math.max(0, Math.min(a, 100));
|
|
942
|
+
let c = Math.floor(a);
|
|
943
943
|
const h = Number(this.chunkRate) || 0;
|
|
944
|
-
return
|
|
944
|
+
return e > 0 && r >= e && h >= 1 && (c = 100), { percent: c, allCount: r, allTotal: e };
|
|
945
945
|
}
|
|
946
946
|
/**
|
|
947
947
|
* Обновление данных прогресса выполнения
|
|
@@ -950,35 +950,35 @@ const J = class J {
|
|
|
950
950
|
* @param {Object} params.value - Значение ответа от API
|
|
951
951
|
* @param {string} params.type - Тип обработки ('count' или undefined)
|
|
952
952
|
*/
|
|
953
|
-
setProgressData({ key:
|
|
954
|
-
var
|
|
953
|
+
setProgressData({ key: t, value: e, type: r }) {
|
|
954
|
+
var A, p;
|
|
955
955
|
if (!this.progressCall)
|
|
956
956
|
return;
|
|
957
|
-
const i = this.getData(
|
|
958
|
-
let
|
|
959
|
-
if (typeof
|
|
960
|
-
const _ =
|
|
957
|
+
const i = this.getData(e.data()), a = Array.isArray(i) ? i.length : 0;
|
|
958
|
+
let c = a;
|
|
959
|
+
if (typeof e.total == "function") {
|
|
960
|
+
const _ = e.total();
|
|
961
961
|
if (_ != null && _ !== "") {
|
|
962
|
-
const
|
|
963
|
-
Number.isFinite(
|
|
962
|
+
const E = Number(_);
|
|
963
|
+
Number.isFinite(E) && (c = E);
|
|
964
964
|
}
|
|
965
965
|
}
|
|
966
966
|
let h = 1;
|
|
967
|
-
r === "count" ? (
|
|
968
|
-
const
|
|
969
|
-
if (this.progressData[
|
|
970
|
-
total:
|
|
971
|
-
count: Math.min(m,
|
|
967
|
+
r === "count" ? (c || (c = a), h = c > 0 ? c : a > 0 ? a : 1) : i && (h = a), this.progressData || (this.progressData = {});
|
|
968
|
+
const f = ((A = this.progressData[t]) == null ? void 0 : A.total) ?? 0, n = ((p = this.progressData[t]) == null ? void 0 : p.count) ?? 0, m = h + n, u = Math.max(f, c ?? 0, m);
|
|
969
|
+
if (this.progressData[t] = {
|
|
970
|
+
total: u,
|
|
971
|
+
count: Math.min(m, u)
|
|
972
972
|
}, typeof document < "u" && (document == null ? void 0 : document.hidden) === !0) {
|
|
973
|
-
|
|
973
|
+
O(this, lt, Mt).call(this);
|
|
974
974
|
return;
|
|
975
975
|
}
|
|
976
|
-
|
|
976
|
+
O(this, lt, Mt).call(this), this.progressTimer || (this.progressTimer = setInterval(() => {
|
|
977
977
|
if (!this.progressCall) {
|
|
978
978
|
this.clearProgressData();
|
|
979
979
|
return;
|
|
980
980
|
}
|
|
981
|
-
|
|
981
|
+
O(this, lt, Mt).call(this);
|
|
982
982
|
const { percent: _ } = this.progressPercent;
|
|
983
983
|
_ >= 100 && (clearInterval(this.progressTimer), this.progressTimer = "");
|
|
984
984
|
}, this.progressDelay));
|
|
@@ -988,11 +988,11 @@ const J = class J {
|
|
|
988
988
|
* @param {Object} data - Ответ от API
|
|
989
989
|
* @returns {any} Данные из ответа
|
|
990
990
|
*/
|
|
991
|
-
getData(
|
|
992
|
-
if (
|
|
993
|
-
return
|
|
994
|
-
let
|
|
995
|
-
return
|
|
991
|
+
getData(t) {
|
|
992
|
+
if (t == null)
|
|
993
|
+
return t;
|
|
994
|
+
let e = (t == null ? void 0 : t.items) ?? (t == null ? void 0 : t.tasks) ?? (t == null ? void 0 : t.types) ?? (t == null ? void 0 : t.type) ?? (t == null ? void 0 : t.fields) ?? (t == null ? void 0 : t.workgroups) ?? t;
|
|
995
|
+
return e && typeof e == "object" && !Array.isArray(e) && Array.isArray(e.result) && (e = e.result), e;
|
|
996
996
|
}
|
|
997
997
|
/**
|
|
998
998
|
* Устанавливает состояние лимита и уведомляет подписчиков об изменении.
|
|
@@ -1002,8 +1002,8 @@ const J = class J {
|
|
|
1002
1002
|
* @param {number|undefined} pauseMs - Длительность текущей лимит-паузы (мс); при снятии лимита не передаётся.
|
|
1003
1003
|
* @returns {void}
|
|
1004
1004
|
*/
|
|
1005
|
-
setTimeLimitState(
|
|
1006
|
-
this.timeLimit.limit = !!
|
|
1005
|
+
setTimeLimitState(t, e, r) {
|
|
1006
|
+
this.timeLimit.limit = !!t, this.timeLimit.date = t ? e : void 0, t && typeof r == "number" && r > 0 ? this.timeLimit.pauseMs = r : this.timeLimit.pauseMs = void 0, O(this, Pt, pe).call(this);
|
|
1007
1007
|
}
|
|
1008
1008
|
/**
|
|
1009
1009
|
* Подписывает внешний код на изменения состояния лимита.
|
|
@@ -1012,14 +1012,14 @@ const J = class J {
|
|
|
1012
1012
|
* @param {(state: {limit: boolean, date?: string, pauseMs?: number}) => void} callback - Обработчик состояния лимита.
|
|
1013
1013
|
* @returns {() => void} Функция отписки.
|
|
1014
1014
|
*/
|
|
1015
|
-
subscribeTimeLimit(
|
|
1016
|
-
return typeof
|
|
1017
|
-
} : (this.timeLimitListeners.add(
|
|
1015
|
+
subscribeTimeLimit(t) {
|
|
1016
|
+
return typeof t != "function" ? () => {
|
|
1017
|
+
} : (this.timeLimitListeners.add(t), t({
|
|
1018
1018
|
limit: this.timeLimit.limit,
|
|
1019
1019
|
date: this.timeLimit.date,
|
|
1020
1020
|
pauseMs: this.timeLimit.pauseMs
|
|
1021
1021
|
}), () => {
|
|
1022
|
-
this.timeLimitListeners.delete(
|
|
1022
|
+
this.timeLimitListeners.delete(t);
|
|
1023
1023
|
});
|
|
1024
1024
|
}
|
|
1025
1025
|
/**
|
|
@@ -1029,29 +1029,29 @@ const J = class J {
|
|
|
1029
1029
|
* @param {Object} request - Объект запроса {method, params}
|
|
1030
1030
|
* @returns {Array} Массив запросов (может быть один или несколько)
|
|
1031
1031
|
*/
|
|
1032
|
-
splitLargeFilters(
|
|
1033
|
-
const { method: r, params: i } =
|
|
1032
|
+
splitLargeFilters(t, e) {
|
|
1033
|
+
const { method: r, params: i } = e;
|
|
1034
1034
|
if (!i)
|
|
1035
|
-
return [{ key:
|
|
1035
|
+
return [{ key: t, request: e }];
|
|
1036
1036
|
const a = i.filter || i.FILTER;
|
|
1037
1037
|
if (!a || typeof a != "object" || Array.isArray(a))
|
|
1038
|
-
return [{ key:
|
|
1039
|
-
for (const [
|
|
1040
|
-
if (!String(
|
|
1041
|
-
const
|
|
1038
|
+
return [{ key: t, request: e }];
|
|
1039
|
+
for (const [c, h] of Object.entries(a))
|
|
1040
|
+
if (!String(c).trim().startsWith("!") && Array.isArray(h) && h.length > this.filterChunkSize) {
|
|
1041
|
+
const f = [];
|
|
1042
1042
|
for (let n = 0; n < h.length; n += this.filterChunkSize) {
|
|
1043
|
-
const m = h.slice(n, n + this.filterChunkSize),
|
|
1044
|
-
i.filter ? (
|
|
1045
|
-
key:
|
|
1046
|
-
request: { method: r, params:
|
|
1047
|
-
originalKey:
|
|
1048
|
-
filterKey:
|
|
1043
|
+
const m = h.slice(n, n + this.filterChunkSize), u = n === 0 ? t : `${t}__chunk_${Math.floor(n / this.filterChunkSize)}`, l = { ...i };
|
|
1044
|
+
i.filter ? (l.filter = { ...a }, l.filter[c] = m) : i.FILTER && (l.FILTER = { ...a }, l.FILTER[c] = m), f.push({
|
|
1045
|
+
key: u,
|
|
1046
|
+
request: { method: r, params: l },
|
|
1047
|
+
originalKey: t,
|
|
1048
|
+
filterKey: c,
|
|
1049
1049
|
chunkIndex: Math.floor(n / this.filterChunkSize)
|
|
1050
1050
|
});
|
|
1051
1051
|
}
|
|
1052
|
-
return
|
|
1052
|
+
return f;
|
|
1053
1053
|
}
|
|
1054
|
-
return [{ key:
|
|
1054
|
+
return [{ key: t, request: e }];
|
|
1055
1055
|
}
|
|
1056
1056
|
/**
|
|
1057
1057
|
* Объединяет результаты разбитых запросов обратно в один результат
|
|
@@ -1059,14 +1059,14 @@ const J = class J {
|
|
|
1059
1059
|
* @param {string} originalKey - Оригинальный ключ запроса
|
|
1060
1060
|
* @returns {Array} Объединенный массив результатов
|
|
1061
1061
|
*/
|
|
1062
|
-
mergeSplitResults(
|
|
1063
|
-
const r = [], i = String(
|
|
1064
|
-
const n = h.match(/__chunk_(\d+)$/), m =
|
|
1062
|
+
mergeSplitResults(t, e) {
|
|
1063
|
+
const r = [], i = String(e).replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), a = new RegExp(`^${i}(?:__chunk_\\d+)?$`), c = Object.keys(t).filter((h) => a.test(h)).sort((h, f) => {
|
|
1064
|
+
const n = h.match(/__chunk_(\d+)$/), m = f.match(/__chunk_(\d+)$/);
|
|
1065
1065
|
return n ? m ? parseInt(n[1]) - parseInt(m[1]) : 1 : -1;
|
|
1066
1066
|
});
|
|
1067
|
-
for (const h of
|
|
1068
|
-
const
|
|
1069
|
-
Array.isArray(
|
|
1067
|
+
for (const h of c) {
|
|
1068
|
+
const f = t[h];
|
|
1069
|
+
Array.isArray(f) ? r.push(...f) : f && r.push(f);
|
|
1070
1070
|
}
|
|
1071
1071
|
return r;
|
|
1072
1072
|
}
|
|
@@ -1075,7 +1075,7 @@ const J = class J {
|
|
|
1075
1075
|
* @returns {Promise<void>}
|
|
1076
1076
|
*/
|
|
1077
1077
|
delay() {
|
|
1078
|
-
return typeof document < "u" && (document == null ? void 0 : document.hidden) === !0 ? Promise.resolve() : new Promise((
|
|
1078
|
+
return typeof document < "u" && (document == null ? void 0 : document.hidden) === !0 ? Promise.resolve() : new Promise((e) => setTimeout(e, 500));
|
|
1079
1079
|
}
|
|
1080
1080
|
/**
|
|
1081
1081
|
* Обертка над callBatch с таймаутом для предотвращения зависаний
|
|
@@ -1086,29 +1086,29 @@ const J = class J {
|
|
|
1086
1086
|
* @param {{ onLateResponse?: (result: Object) => void }} [options] - Опции; `onLateResponse` — ответ после клиентского таймаута
|
|
1087
1087
|
* @returns {Promise<void>}
|
|
1088
1088
|
*/
|
|
1089
|
-
callBatchWithTimeout(
|
|
1089
|
+
callBatchWithTimeout(t, e, r = {}) {
|
|
1090
1090
|
const { onLateResponse: i } = r;
|
|
1091
|
-
return new Promise((a,
|
|
1092
|
-
let h = !1,
|
|
1093
|
-
const n = async (
|
|
1091
|
+
return new Promise((a, c) => {
|
|
1092
|
+
let h = !1, f = null;
|
|
1093
|
+
const n = async (u) => {
|
|
1094
1094
|
if (h)
|
|
1095
|
-
typeof i == "function" && i(
|
|
1095
|
+
typeof i == "function" && i(u);
|
|
1096
1096
|
else {
|
|
1097
|
-
h = !0,
|
|
1097
|
+
h = !0, f && clearTimeout(f);
|
|
1098
1098
|
try {
|
|
1099
|
-
await Promise.resolve(
|
|
1100
|
-
} catch (
|
|
1101
|
-
console.error("Error in callBatch callback:",
|
|
1099
|
+
await Promise.resolve(e(u)), a();
|
|
1100
|
+
} catch (l) {
|
|
1101
|
+
console.error("Error in callBatch callback:", l), c(l);
|
|
1102
1102
|
}
|
|
1103
1103
|
}
|
|
1104
1104
|
}, m = async () => {
|
|
1105
1105
|
if (!h) {
|
|
1106
|
-
h = !0,
|
|
1106
|
+
h = !0, f && clearTimeout(f), console.warn(
|
|
1107
1107
|
`Batch request timeout after ${this.requestTimeoutMs}ms. This may indicate a CORS or network error.`
|
|
1108
1108
|
);
|
|
1109
|
-
const
|
|
1110
|
-
Object.keys(
|
|
1111
|
-
|
|
1109
|
+
const u = {};
|
|
1110
|
+
Object.keys(t).forEach((l) => {
|
|
1111
|
+
u[l] = {
|
|
1112
1112
|
error: () => ({
|
|
1113
1113
|
ex: {
|
|
1114
1114
|
error: "TIMEOUT",
|
|
@@ -1120,20 +1120,20 @@ const J = class J {
|
|
|
1120
1120
|
};
|
|
1121
1121
|
});
|
|
1122
1122
|
try {
|
|
1123
|
-
await Promise.resolve(
|
|
1124
|
-
} catch (
|
|
1125
|
-
console.error("Error in timeout callback:",
|
|
1123
|
+
await Promise.resolve(e(u)), a();
|
|
1124
|
+
} catch (l) {
|
|
1125
|
+
console.error("Error in timeout callback:", l), a();
|
|
1126
1126
|
}
|
|
1127
1127
|
}
|
|
1128
1128
|
};
|
|
1129
1129
|
try {
|
|
1130
|
-
this.callBatch(
|
|
1131
|
-
await n(
|
|
1130
|
+
this.callBatch(t, async (u) => {
|
|
1131
|
+
await n(u);
|
|
1132
1132
|
});
|
|
1133
|
-
} catch (
|
|
1134
|
-
h || console.error("Error calling callBatch:",
|
|
1133
|
+
} catch (u) {
|
|
1134
|
+
h || console.error("Error calling callBatch:", u);
|
|
1135
1135
|
}
|
|
1136
|
-
|
|
1136
|
+
f = setTimeout(async () => {
|
|
1137
1137
|
h || (console.warn(
|
|
1138
1138
|
`Batch request attempt timeout after ${this.requestTimeoutMs}ms. Switching to timeout fallback result.`
|
|
1139
1139
|
), await m());
|
|
@@ -1158,59 +1158,59 @@ const J = class J {
|
|
|
1158
1158
|
* @param {{oneBatch?: boolean}} [options] - Опции выполнения.
|
|
1159
1159
|
* @returns {Promise<Object>}
|
|
1160
1160
|
*/
|
|
1161
|
-
async batch(
|
|
1162
|
-
|
|
1163
|
-
const i = {}, a = {},
|
|
1164
|
-
for (const [m,
|
|
1165
|
-
const
|
|
1166
|
-
if (!
|
|
1161
|
+
async batch(t, e, r = {}) {
|
|
1162
|
+
O(this, yt, ie).call(this, e);
|
|
1163
|
+
const i = {}, a = {}, c = {};
|
|
1164
|
+
for (const [m, u] of Object.entries(t)) {
|
|
1165
|
+
const l = this.arrayChunk(u);
|
|
1166
|
+
if (!l)
|
|
1167
1167
|
continue;
|
|
1168
|
-
const
|
|
1169
|
-
if (
|
|
1170
|
-
a[m] =
|
|
1168
|
+
const A = this.splitLargeFilters(m, l);
|
|
1169
|
+
if (A.length === 1)
|
|
1170
|
+
a[m] = l;
|
|
1171
1171
|
else {
|
|
1172
|
-
|
|
1173
|
-
for (const
|
|
1174
|
-
a[
|
|
1172
|
+
c[m] = [];
|
|
1173
|
+
for (const p of A)
|
|
1174
|
+
a[p.key] = p.request, c[m].push(p.key);
|
|
1175
1175
|
}
|
|
1176
1176
|
}
|
|
1177
1177
|
this.batchCommandKeyOrder = Object.keys(a), this.totalBatchCommands = this.batchCommandKeyOrder.length, this.batchCommandMethods = this.batchCommandKeyOrder.map(
|
|
1178
1178
|
(m) => {
|
|
1179
|
-
var
|
|
1180
|
-
return String(((
|
|
1179
|
+
var u;
|
|
1180
|
+
return String(((u = a[m]) == null ? void 0 : u.method) || "");
|
|
1181
1181
|
}
|
|
1182
1182
|
), this.chunkRate = (1 / Math.ceil(Object.keys(a).length / this.limit)).toFixed(5);
|
|
1183
|
-
let h = {},
|
|
1183
|
+
let h = {}, f = 0;
|
|
1184
1184
|
const n = Object.keys(a).length;
|
|
1185
|
-
for (const [m,
|
|
1185
|
+
for (const [m, u] of Object.entries(a)) {
|
|
1186
1186
|
if (!this.canContinue)
|
|
1187
1187
|
break;
|
|
1188
|
-
if (h[m] =
|
|
1189
|
-
const
|
|
1188
|
+
if (h[m] = u, Object.keys(h).length >= this.limit || f + 1 === n) {
|
|
1189
|
+
const l = f + 1 === n;
|
|
1190
1190
|
await this.batchChunk(
|
|
1191
1191
|
h,
|
|
1192
1192
|
void 0,
|
|
1193
|
-
!
|
|
1193
|
+
!l,
|
|
1194
1194
|
{
|
|
1195
1195
|
disablePagination: !1,
|
|
1196
1196
|
oneBatch: !!(r != null && r.oneBatch)
|
|
1197
1197
|
}
|
|
1198
|
-
), Object.entries(this.result).forEach(([
|
|
1199
|
-
i[
|
|
1198
|
+
), Object.entries(this.result).forEach(([A, p]) => {
|
|
1199
|
+
i[A] = p;
|
|
1200
1200
|
}), this.totalProgress = Math.round(
|
|
1201
|
-
|
|
1201
|
+
f / n * 100
|
|
1202
1202
|
), h = {};
|
|
1203
1203
|
}
|
|
1204
|
-
|
|
1204
|
+
f++;
|
|
1205
1205
|
}
|
|
1206
|
-
for (const [m,
|
|
1207
|
-
if (
|
|
1208
|
-
const
|
|
1209
|
-
for (const
|
|
1210
|
-
delete i[
|
|
1211
|
-
i[m] =
|
|
1206
|
+
for (const [m, u] of Object.entries(c))
|
|
1207
|
+
if (u && u.length > 0) {
|
|
1208
|
+
const l = this.mergeSplitResults(i, m);
|
|
1209
|
+
for (const A of u)
|
|
1210
|
+
delete i[A];
|
|
1211
|
+
i[m] = l;
|
|
1212
1212
|
}
|
|
1213
|
-
return
|
|
1213
|
+
return O(this, gt, re).call(this, i), e && e({ percent: 100 }), Promise.resolve(i);
|
|
1214
1214
|
}
|
|
1215
1215
|
/**
|
|
1216
1216
|
* Выполняет батч-запрос и возвращает только количество элементов для каждой команды.
|
|
@@ -1221,60 +1221,60 @@ const J = class J {
|
|
|
1221
1221
|
* @param {Function} progressCall - Callback для отслеживания прогресса
|
|
1222
1222
|
* @returns {Promise<Object>} Объект с количеством элементов для каждого ключа
|
|
1223
1223
|
*/
|
|
1224
|
-
async batchTotalCount(
|
|
1225
|
-
|
|
1224
|
+
async batchTotalCount(t, e) {
|
|
1225
|
+
O(this, yt, ie).call(this, e);
|
|
1226
1226
|
const r = {}, i = {}, a = {};
|
|
1227
|
-
for (const [
|
|
1227
|
+
for (const [f, n] of Object.entries(t)) {
|
|
1228
1228
|
const m = this.arrayChunk(n);
|
|
1229
1229
|
if (!m)
|
|
1230
1230
|
continue;
|
|
1231
|
-
const
|
|
1232
|
-
if (
|
|
1233
|
-
i[
|
|
1231
|
+
const u = this.splitLargeFilters(f, m);
|
|
1232
|
+
if (u.length === 1)
|
|
1233
|
+
i[f] = m;
|
|
1234
1234
|
else {
|
|
1235
|
-
a[
|
|
1236
|
-
for (const
|
|
1237
|
-
i[
|
|
1235
|
+
a[f] = [];
|
|
1236
|
+
for (const l of u)
|
|
1237
|
+
i[l.key] = l.request, a[f].push(l.key);
|
|
1238
1238
|
}
|
|
1239
1239
|
}
|
|
1240
|
-
const
|
|
1241
|
-
for (let
|
|
1242
|
-
const n = h.slice(
|
|
1243
|
-
for (const [
|
|
1240
|
+
const c = [], h = Object.entries(i);
|
|
1241
|
+
for (let f = 0; f < h.length; f += this.limit) {
|
|
1242
|
+
const n = h.slice(f, f + this.limit), m = {};
|
|
1243
|
+
for (const [u, l] of n) {
|
|
1244
1244
|
if (!this.canContinue)
|
|
1245
1245
|
break;
|
|
1246
|
-
m[
|
|
1246
|
+
m[u] = l;
|
|
1247
1247
|
}
|
|
1248
|
-
Object.keys(m).length > 0 &&
|
|
1248
|
+
Object.keys(m).length > 0 && c.push(m);
|
|
1249
1249
|
}
|
|
1250
|
-
this.chunkRate = (1 /
|
|
1251
|
-
for (const [
|
|
1250
|
+
this.chunkRate = (1 / c.length).toFixed(5);
|
|
1251
|
+
for (const [f, n] of Object.entries(c)) {
|
|
1252
1252
|
if (!this.canContinue)
|
|
1253
1253
|
break;
|
|
1254
|
-
this.totalProgress = Math.round(Number(
|
|
1255
|
-
const m = Number(
|
|
1256
|
-
await
|
|
1257
|
-
for (const [
|
|
1254
|
+
this.totalProgress = Math.round(Number(f) / c.length * 100), this.progressData = {}, this.lastProgressSnapshot = null;
|
|
1255
|
+
const m = Number(f) === c.length - 1;
|
|
1256
|
+
await O(this, st, dt).call(this, n, async (u) => {
|
|
1257
|
+
for (const [l, A] of Object.entries(u)) {
|
|
1258
1258
|
if (!this.canContinue)
|
|
1259
1259
|
return;
|
|
1260
|
-
if (
|
|
1261
|
-
|
|
1260
|
+
if (A.error()) {
|
|
1261
|
+
O(this, ct, It).call(this, l, A), r[l] = 0;
|
|
1262
1262
|
continue;
|
|
1263
1263
|
}
|
|
1264
|
-
const
|
|
1265
|
-
r[
|
|
1264
|
+
const p = this.getData(A.data()), _ = Array.isArray(p) ? p.length : 0, D = typeof A.total == "function" && A.total() !== void 0 ? A.total() : _;
|
|
1265
|
+
r[l] = D, this.setProgressData({ key: l, value: A, type: "count" });
|
|
1266
1266
|
}
|
|
1267
|
-
await
|
|
1267
|
+
await O(this, q, tt).call(this, u, !m);
|
|
1268
1268
|
});
|
|
1269
1269
|
}
|
|
1270
|
-
for (const [
|
|
1270
|
+
for (const [f, n] of Object.entries(a))
|
|
1271
1271
|
if (n && n.length > 0) {
|
|
1272
1272
|
let m = 0;
|
|
1273
|
-
for (const
|
|
1274
|
-
r[
|
|
1275
|
-
r[
|
|
1273
|
+
for (const u of n)
|
|
1274
|
+
r[u] !== void 0 && (m += r[u] || 0), delete r[u];
|
|
1275
|
+
r[f] = m;
|
|
1276
1276
|
}
|
|
1277
|
-
return Object.entries(this.errors).length && (
|
|
1277
|
+
return Object.entries(this.errors).length && (O(this, gt, re).call(this, r), this.errorLogger()), e && e({ percent: 100 }), Promise.resolve(r);
|
|
1278
1278
|
}
|
|
1279
1279
|
/**
|
|
1280
1280
|
* Выполняет одиночный REST-вызов с таймаутом и авто-повтором после лимит-паузы.
|
|
@@ -1283,41 +1283,41 @@ const J = class J {
|
|
|
1283
1283
|
* @param {{method: string, params?: Object}} request - Описание REST-вызова.
|
|
1284
1284
|
* @returns {Promise<{success: boolean, data: any, answer: Object, error: string|null}>}
|
|
1285
1285
|
*/
|
|
1286
|
-
async call({ method:
|
|
1287
|
-
var i, a,
|
|
1288
|
-
const r =
|
|
1286
|
+
async call({ method: t, params: e = {} }) {
|
|
1287
|
+
var i, a, c, h, f, n, m;
|
|
1288
|
+
const r = O(this, pt, se).call(this, this.callLimitPauseMs);
|
|
1289
1289
|
for (; ; ) {
|
|
1290
|
-
let
|
|
1291
|
-
onLateResponse: (
|
|
1290
|
+
let u = await O(this, Gt, ge).call(this, t, e, {
|
|
1291
|
+
onLateResponse: (p) => r.notifyLateResponse(p)
|
|
1292
1292
|
});
|
|
1293
|
-
if (!
|
|
1293
|
+
if (!u)
|
|
1294
1294
|
if (r.inRetryCycle = !0, await r.waitForLateOrLimit(), r.lateResult)
|
|
1295
|
-
|
|
1295
|
+
u = r.lateResult, r.resetLateResult(), r.inRetryCycle = !1;
|
|
1296
1296
|
else
|
|
1297
1297
|
continue;
|
|
1298
|
-
const
|
|
1299
|
-
if (
|
|
1300
|
-
for (const [
|
|
1301
|
-
|
|
1302
|
-
if (
|
|
1303
|
-
const
|
|
1304
|
-
if (["QUERY_LIMIT_EXCEEDED", "OPERATION_TIME_LIMIT", "TIMEOUT"].includes(
|
|
1305
|
-
await
|
|
1298
|
+
const l = {};
|
|
1299
|
+
if (u != null && u.answer)
|
|
1300
|
+
for (const [p, _] of Object.entries(u.answer))
|
|
1301
|
+
p !== "result" && _ && (l[p] = _);
|
|
1302
|
+
if (u.error()) {
|
|
1303
|
+
const p = ((a = (i = u.error()) == null ? void 0 : i.ex) == null ? void 0 : a.error) ?? "";
|
|
1304
|
+
if (["QUERY_LIMIT_EXCEEDED", "OPERATION_TIME_LIMIT", "TIMEOUT"].includes(p)) {
|
|
1305
|
+
await O(this, et, ft).call(this, this.callLimitPauseMs);
|
|
1306
1306
|
continue;
|
|
1307
1307
|
}
|
|
1308
|
-
const _ = ((
|
|
1308
|
+
const _ = ((c = u.error()) == null ? void 0 : c.toString()) || ((f = (h = u.error()) == null ? void 0 : h.ex) == null ? void 0 : f.error_description) || ((m = (n = u.error()) == null ? void 0 : n.ex) == null ? void 0 : m.error) || "Неизвестная ошибка";
|
|
1309
1309
|
return {
|
|
1310
1310
|
success: !1,
|
|
1311
1311
|
data: !1,
|
|
1312
|
-
answer:
|
|
1312
|
+
answer: l,
|
|
1313
1313
|
error: _
|
|
1314
1314
|
};
|
|
1315
1315
|
}
|
|
1316
|
-
let
|
|
1317
|
-
return
|
|
1316
|
+
let A = u.data();
|
|
1317
|
+
return A != null && A.items && (A = A.items), r.inRetryCycle = !1, {
|
|
1318
1318
|
success: !0,
|
|
1319
|
-
data:
|
|
1320
|
-
answer:
|
|
1319
|
+
data: A,
|
|
1320
|
+
answer: l,
|
|
1321
1321
|
error: null
|
|
1322
1322
|
};
|
|
1323
1323
|
}
|
|
@@ -1327,29 +1327,29 @@ const J = class J {
|
|
|
1327
1327
|
* Так же переделываем некоторые запросы в нужный вид (Для task-методов)
|
|
1328
1328
|
* @param {Array/Object} request - Массив/объект методов
|
|
1329
1329
|
*/
|
|
1330
|
-
arrayChunk(
|
|
1331
|
-
let
|
|
1332
|
-
if (Array.isArray(
|
|
1330
|
+
arrayChunk(t) {
|
|
1331
|
+
let e = "", r = {};
|
|
1332
|
+
if (Array.isArray(t) ? [e] = t : (e = t.method, r = t.params), (e.includes("list") || e === "user.get" || e === "entity.item.get" || e === "sonet_group.get") && e !== "task.item.list") {
|
|
1333
1333
|
if (!r)
|
|
1334
|
-
r =
|
|
1334
|
+
r = e === "entity.item.get" ? { SORT: { ID: "ASC" } } : e === "sonet_group.get" ? { ORDER: { ID: "ASC" } } : e.startsWith("crm.") ? { order: { ID: "ASC", id: "ASC" } } : { order: { ID: "ASC" } };
|
|
1335
1335
|
else {
|
|
1336
|
-
|
|
1337
|
-
const i =
|
|
1338
|
-
typeof i == "object" && i !== null && !Array.isArray(i) && Object.entries(i).forEach(([a,
|
|
1339
|
-
(r.start === void 0 || r.start !== -1) && ["id", "ID"].includes(a) && (typeof
|
|
1336
|
+
e === "entity.item.get" ? (r.SORT || (r.SORT = { ID: "ASC" }), Array.isArray(r.select) ? r.select.includes("ID") || r.select.push("ID") : r.select = ["ID"]) : e === "sonet_group.get" ? r.ORDER ? !r.ORDER.ID && !r.ORDER.id && (r.ORDER.ID = "ASC") : r.ORDER = { ID: "ASC" } : e === "tasks.task.list" ? (r.order || (r.order = {}), r.order.ID = "asc") : e === "user.get" ? (r.sort || (r.sort = "ID"), r.order || (r.order = "ASC")) : e.startsWith("crm.") ? r.order = { ID: "ASC", id: "ASC" } : r.order ? !r.order.ID && !r.order.id && (r.order.ID = "ASC") : r.order = { ID: "ASC" }, Array.isArray(r.select) && !r.select.includes("ID") && r.select.push("ID");
|
|
1337
|
+
const i = e === "user.get" || e === "entity.item.get" || e === "sonet_group.get" ? r.FILTER : r.filter;
|
|
1338
|
+
typeof i == "object" && i !== null && !Array.isArray(i) && Object.entries(i).forEach(([a, c]) => {
|
|
1339
|
+
(r.start === void 0 || r.start !== -1) && ["id", "ID"].includes(a) && (typeof c == "string" || Array.isArray(c) && c.length <= 50) && (r.start = -1);
|
|
1340
1340
|
});
|
|
1341
1341
|
}
|
|
1342
|
-
|
|
1342
|
+
e === "crm.type.list" && r.order && delete r.order.ID;
|
|
1343
1343
|
}
|
|
1344
|
-
if (
|
|
1344
|
+
if (e === "task.item.list")
|
|
1345
1345
|
if (!r)
|
|
1346
1346
|
r = [{ ID: "ASC" }, [""], [""], ["ID"]];
|
|
1347
1347
|
else {
|
|
1348
1348
|
Array.isArray(r[0]) && (r[0] = {});
|
|
1349
|
-
const [i, a,
|
|
1349
|
+
const [i, a, c, h] = r;
|
|
1350
1350
|
i.ID = "ASC", h[0] !== "" && h.includes("ID") || h.push("ID");
|
|
1351
1351
|
}
|
|
1352
|
-
return { method:
|
|
1352
|
+
return { method: e, params: r };
|
|
1353
1353
|
}
|
|
1354
1354
|
/** Выполняет первичный запрос с массивом методов
|
|
1355
1355
|
* При наличии более 50 элементов в нем, подготоваливаем данные и передаем в this.batchPayload
|
|
@@ -1357,40 +1357,40 @@ const J = class J {
|
|
|
1357
1357
|
* @param {Array} query - Тот же массив с методами
|
|
1358
1358
|
* @returns {Object} Объект с результатами запросов
|
|
1359
1359
|
*/
|
|
1360
|
-
async batchChunk(
|
|
1360
|
+
async batchChunk(t, e, r = !0, i = {}) {
|
|
1361
1361
|
return new Promise((a) => {
|
|
1362
|
-
const
|
|
1362
|
+
const c = [];
|
|
1363
1363
|
let h;
|
|
1364
|
-
const
|
|
1364
|
+
const f = !!(i != null && i.disablePagination);
|
|
1365
1365
|
(async () => {
|
|
1366
|
-
await
|
|
1367
|
-
for (const [
|
|
1366
|
+
await O(this, st, dt).call(this, t, async (m) => {
|
|
1367
|
+
for (const [l, A] of Object.entries(m)) {
|
|
1368
1368
|
if (!this.canContinue)
|
|
1369
1369
|
return;
|
|
1370
|
-
|
|
1371
|
-
const
|
|
1372
|
-
|
|
1373
|
-
const T =
|
|
1374
|
-
if (!
|
|
1375
|
-
let
|
|
1376
|
-
if (Array.isArray(
|
|
1377
|
-
const [
|
|
1378
|
-
|
|
1370
|
+
A.error() && (O(this, ct, It).call(this, l, A), h = !0);
|
|
1371
|
+
const p = this.getData(A.data()), _ = Array.isArray(p) ? p.length : 0, E = typeof A.total == "function" && A.total() !== void 0, D = E ? A.total() : _;
|
|
1372
|
+
e === "count" ? this.result[l] ? this.result[l] += _ : this.result[l] = D : this.result[l] = p, this.setProgressData({ key: l, value: A, type: e });
|
|
1373
|
+
const T = t[l], y = Array.isArray(T) ? T[0] : T == null ? void 0 : T.method, B = typeof y == "string" && (y.includes(".list") || y.endsWith("getlist") || y === "user.get" || y === "entity.item.get" || y === "sonet_group.get"), b = this.pageSize || 50, C = e === "count" ? !E && _ === b : B ? _ === b : D > b && D > _, k = e !== "count" && y === "entity.item.get" && _ === b && !C, G = C || k;
|
|
1374
|
+
if (!f && (!this.canContinue || G)) {
|
|
1375
|
+
let S = t[l];
|
|
1376
|
+
if (Array.isArray(S)) {
|
|
1377
|
+
const [s, o = {}] = S;
|
|
1378
|
+
S = [s, o];
|
|
1379
1379
|
} else {
|
|
1380
|
-
const { method:
|
|
1381
|
-
|
|
1380
|
+
const { method: s, params: o = {} } = S;
|
|
1381
|
+
S = [s, o];
|
|
1382
1382
|
}
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1383
|
+
c.push([
|
|
1384
|
+
l,
|
|
1385
|
+
S,
|
|
1386
1386
|
D,
|
|
1387
|
-
{ entityItemGetScan:
|
|
1387
|
+
{ entityItemGetScan: k }
|
|
1388
1388
|
]);
|
|
1389
1389
|
}
|
|
1390
1390
|
}
|
|
1391
1391
|
h > 0 && this.errorLogger();
|
|
1392
|
-
const
|
|
1393
|
-
await
|
|
1392
|
+
const u = c.length > 0 || r;
|
|
1393
|
+
await O(this, q, tt).call(this, m, u), c.length ? await this.batchPayload(c, e, i).then(
|
|
1394
1394
|
() => a(this.result)
|
|
1395
1395
|
) : a(this.result);
|
|
1396
1396
|
});
|
|
@@ -1402,149 +1402,150 @@ const J = class J {
|
|
|
1402
1402
|
* @param {String} type - Тип обработки результатов ('count' или undefined)
|
|
1403
1403
|
* @param {{oneBatch?: boolean}} [options] - Опции выполнения payload.
|
|
1404
1404
|
*/
|
|
1405
|
-
async batchPayload(
|
|
1406
|
-
const i = !!(r != null && r.oneBatch), a = (
|
|
1405
|
+
async batchPayload(t, e, r = {}) {
|
|
1406
|
+
const i = !!(r != null && r.oneBatch), a = (p, _, E, D) => {
|
|
1407
1407
|
let T = "ID";
|
|
1408
|
-
this.result[
|
|
1409
|
-
let
|
|
1410
|
-
if (JSON.stringify(D[1]).toLocaleLowerCase().includes('"id":"desc"') ?
|
|
1408
|
+
this.result[p][this.result[p].length - 1].ID || (T = "id");
|
|
1409
|
+
let y = `${T}`;
|
|
1410
|
+
if (JSON.stringify(D[1]).toLocaleLowerCase().includes('"id":"desc"') ? y = "<" + y : y = ">" + y, _ === 1 || E.length === 0)
|
|
1411
1411
|
return {
|
|
1412
|
-
field:
|
|
1413
|
-
id: this.result[
|
|
1412
|
+
field: y,
|
|
1413
|
+
id: this.result[p][this.result[p].length - 1][T]
|
|
1414
1414
|
};
|
|
1415
1415
|
let b = "";
|
|
1416
|
-
const [
|
|
1417
|
-
return (
|
|
1418
|
-
field:
|
|
1419
|
-
id: `$result[${[
|
|
1416
|
+
const [C, k] = D;
|
|
1417
|
+
return (C === "tasks.task.list" || C === "task.item.list") && (b = "[tasks]"), ["crm.item.list", "crm.stagehistory.list"].includes(C) && (b = "[items]"), C === "crm.type.list" && (b = "[types]"), C === "socialnetwork.api.workgroup.list" && (b = "[workgroups]"), {
|
|
1418
|
+
field: y,
|
|
1419
|
+
id: `$result[${[p, _ - 1].join("__")}]${b}[49][${T}]`
|
|
1420
1420
|
};
|
|
1421
|
-
},
|
|
1422
|
-
const [
|
|
1423
|
-
let T = JSON.parse(JSON.stringify(D)),
|
|
1424
|
-
if (
|
|
1421
|
+
}, c = (p, _) => {
|
|
1422
|
+
const [E, D] = p;
|
|
1423
|
+
let T = JSON.parse(JSON.stringify(D)), y;
|
|
1424
|
+
if (E === "task.item.list") {
|
|
1425
1425
|
T = [...T];
|
|
1426
|
-
const [
|
|
1427
|
-
return b[_.field] = _.id, [
|
|
1426
|
+
const [B, b, C, k] = T;
|
|
1427
|
+
return b[_.field] = _.id, [E, T];
|
|
1428
1428
|
}
|
|
1429
|
-
return ["user.get", "sonet_group.get"].includes(
|
|
1429
|
+
return ["user.get", "sonet_group.get"].includes(E) || T.FILTER ? (T.FILTER || (T.FILTER = {}), y = T.FILTER) : (T.filter || (T.filter = {}), y = T.filter), [
|
|
1430
1430
|
"socialnetwork.api.workgroup.list",
|
|
1431
1431
|
"tasks.task.list"
|
|
1432
|
-
].includes(
|
|
1433
|
-
}, h = (
|
|
1434
|
-
Object.entries(
|
|
1435
|
-
const [D] = _.split("__"), T = this.getData(
|
|
1436
|
-
Array.isArray(T) && (
|
|
1432
|
+
].includes(E) ? y[">ID"] = _.id : y[_.field] = _.id, [E, { ...T, start: -1 }];
|
|
1433
|
+
}, h = (p) => {
|
|
1434
|
+
Object.entries(p).forEach(([_, E]) => {
|
|
1435
|
+
const [D] = _.split("__"), T = this.getData(E.data());
|
|
1436
|
+
Array.isArray(T) && (e === "count" ? this.result[D] += T.length : this.result[D].push(...T)), E.error() && O(this, ct, It).call(this, D, E), this.setProgressData({ key: D, value: E, type: e });
|
|
1437
1437
|
});
|
|
1438
|
-
},
|
|
1439
|
-
if (!Array.isArray(
|
|
1438
|
+
}, f = (p, _) => {
|
|
1439
|
+
if (!Array.isArray(p) || p.length === 0)
|
|
1440
1440
|
return null;
|
|
1441
|
-
const
|
|
1441
|
+
const E = p[p.length - 1];
|
|
1442
1442
|
let D = "ID";
|
|
1443
|
-
|
|
1443
|
+
E.ID || (D = "id");
|
|
1444
1444
|
let T = D;
|
|
1445
|
-
return JSON.stringify(_[1]).toLocaleLowerCase().includes('"id":"desc"') ? T = "<" + T : T = ">" + T, { field: T, id:
|
|
1446
|
-
}, n = 1e4, m = async (
|
|
1447
|
-
var
|
|
1445
|
+
return JSON.stringify(_[1]).toLocaleLowerCase().includes('"id":"desc"') ? T = "<" + T : T = ">" + T, { field: T, id: E[D] };
|
|
1446
|
+
}, n = 1e4, m = async (p, _) => {
|
|
1447
|
+
var E, D;
|
|
1448
1448
|
for (let T = 1; this.canContinue && T <= n; T++) {
|
|
1449
|
-
const
|
|
1450
|
-
if (!
|
|
1449
|
+
const y = this.result[p], B = f(y, _);
|
|
1450
|
+
if (!B)
|
|
1451
1451
|
break;
|
|
1452
|
-
const b = `${
|
|
1453
|
-
let
|
|
1454
|
-
await
|
|
1455
|
-
|
|
1452
|
+
const b = `${p}__page_${T}`, C = c(_, B);
|
|
1453
|
+
let k = null;
|
|
1454
|
+
await O(this, st, dt).call(this, { [b]: C }, async (o) => {
|
|
1455
|
+
k = o, h(o);
|
|
1456
1456
|
});
|
|
1457
|
-
const
|
|
1458
|
-
if ((
|
|
1459
|
-
await
|
|
1457
|
+
const G = k == null ? void 0 : k[b];
|
|
1458
|
+
if ((E = G == null ? void 0 : G.error) != null && E.call(G)) {
|
|
1459
|
+
await O(this, q, tt).call(this, k, !1);
|
|
1460
1460
|
break;
|
|
1461
1461
|
}
|
|
1462
|
-
const
|
|
1463
|
-
if ((Array.isArray(
|
|
1464
|
-
await
|
|
1462
|
+
const S = this.getData((D = G == null ? void 0 : G.data) == null ? void 0 : D.call(G));
|
|
1463
|
+
if ((Array.isArray(S) ? S.length : 0) === 0) {
|
|
1464
|
+
await O(this, q, tt).call(this, k, !1);
|
|
1465
1465
|
break;
|
|
1466
1466
|
}
|
|
1467
|
-
await
|
|
1467
|
+
await O(this, q, tt).call(this, k, T < n);
|
|
1468
1468
|
}
|
|
1469
1469
|
};
|
|
1470
|
-
let
|
|
1471
|
-
const
|
|
1472
|
-
h(_), await
|
|
1473
|
-
}),
|
|
1474
|
-
for await (const
|
|
1470
|
+
let u = [], l = 0;
|
|
1471
|
+
const A = async (p = !0) => u.length ? (await O(this, st, dt).call(this, Object.fromEntries(u), async (_) => {
|
|
1472
|
+
h(_), await O(this, q, tt).call(this, _, p);
|
|
1473
|
+
}), l++, u = [], i && l >= 1 ? !0 : (await this.delay(), !1)) : !1;
|
|
1474
|
+
for await (const p of t) {
|
|
1475
1475
|
if (!this.canContinue)
|
|
1476
1476
|
return;
|
|
1477
|
-
const [_,
|
|
1477
|
+
const [_, E, D, T = {}] = p;
|
|
1478
1478
|
if (T.entityItemGetScan || !i) {
|
|
1479
|
-
if (await
|
|
1479
|
+
if (await A(!0))
|
|
1480
1480
|
return;
|
|
1481
1481
|
if (i)
|
|
1482
1482
|
continue;
|
|
1483
|
-
await m(_,
|
|
1483
|
+
await m(_, E);
|
|
1484
1484
|
continue;
|
|
1485
1485
|
}
|
|
1486
|
-
let
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1486
|
+
let y = 1;
|
|
1487
|
+
const B = this.pageSize || 50, b = Math.max(1, Math.min(50, Number(this.limit) || 50));
|
|
1488
|
+
for (; D > y * B; ) {
|
|
1489
|
+
const C = [_, y].join("__"), k = a(_, y, u, E);
|
|
1490
|
+
if (u.push([C, c(E, k)]), i && u.length === b - 1 && await A(!0) || u.length % b === 0 && await A(!0))
|
|
1490
1491
|
return;
|
|
1491
|
-
|
|
1492
|
+
y++;
|
|
1492
1493
|
}
|
|
1493
1494
|
}
|
|
1494
|
-
await
|
|
1495
|
+
await A(!1);
|
|
1495
1496
|
}
|
|
1496
1497
|
/**
|
|
1497
1498
|
* Вывод ошибок в консоль в группированном виде
|
|
1498
1499
|
*/
|
|
1499
1500
|
errorLogger() {
|
|
1500
|
-
console.group(`${this.constructor.name}: Ошибки в методах!`), Object.entries(this.errors).forEach(([
|
|
1501
|
-
|
|
1501
|
+
console.group(`${this.constructor.name}: Ошибки в методах!`), Object.entries(this.errors).forEach(([t, e]) => {
|
|
1502
|
+
e && console.log(`[${t}]`, e.toString());
|
|
1502
1503
|
}), console.groupEnd();
|
|
1503
1504
|
}
|
|
1504
1505
|
};
|
|
1505
|
-
|
|
1506
|
-
const
|
|
1507
|
-
if (
|
|
1506
|
+
Bt = new WeakSet(), de = function() {
|
|
1507
|
+
const t = this.totalBatchCommands || 0, e = this.batchCommandMethods;
|
|
1508
|
+
if (t < L(J, kt) || !Array.isArray(e) || e.length !== t)
|
|
1508
1509
|
return !1;
|
|
1509
|
-
if (
|
|
1510
|
+
if (e.filter((a) => a === "crm.deal.list").length >= L(J, wt))
|
|
1510
1511
|
return !0;
|
|
1511
|
-
const i =
|
|
1512
|
+
const i = e.filter(
|
|
1512
1513
|
(a) => typeof a == "string" && a.includes(".list")
|
|
1513
1514
|
).length;
|
|
1514
|
-
return i >= L(J, Ct) && i /
|
|
1515
|
-
},
|
|
1515
|
+
return i >= L(J, Ct) && i / t >= L(J, Ht);
|
|
1516
|
+
}, kt = new WeakMap(), wt = new WeakMap(), Ct = new WeakMap(), Ht = new WeakMap(), lt = new WeakSet(), Mt = function() {
|
|
1516
1517
|
if (!this.progressCall || !this.progressData)
|
|
1517
1518
|
return;
|
|
1518
|
-
const { percent:
|
|
1519
|
-
|
|
1519
|
+
const { percent: t, allCount: e, allTotal: r } = this.progressPercent, i = { percent: t, allCount: e, allTotal: r };
|
|
1520
|
+
O(this, Ut, me).call(this, i) && (this.progressCall({
|
|
1520
1521
|
data: this.progressData,
|
|
1521
|
-
percent:
|
|
1522
|
-
allCount:
|
|
1522
|
+
percent: t,
|
|
1523
|
+
allCount: e,
|
|
1523
1524
|
allTotal: r
|
|
1524
1525
|
}), this.lastProgressSnapshot = i);
|
|
1525
|
-
},
|
|
1526
|
-
return this.lastProgressSnapshot ? this.lastProgressSnapshot.percent !==
|
|
1527
|
-
},
|
|
1528
|
-
const
|
|
1526
|
+
}, Ut = new WeakSet(), me = function(t) {
|
|
1527
|
+
return this.lastProgressSnapshot ? this.lastProgressSnapshot.percent !== t.percent || this.lastProgressSnapshot.allCount !== t.allCount || this.lastProgressSnapshot.allTotal !== t.allTotal : !0;
|
|
1528
|
+
}, Pt = new WeakSet(), pe = function() {
|
|
1529
|
+
const t = {
|
|
1529
1530
|
limit: this.timeLimit.limit,
|
|
1530
1531
|
date: this.timeLimit.date,
|
|
1531
1532
|
pauseMs: this.timeLimit.pauseMs
|
|
1532
1533
|
};
|
|
1533
|
-
for (const
|
|
1534
|
+
for (const e of this.timeLimitListeners)
|
|
1534
1535
|
try {
|
|
1535
|
-
t
|
|
1536
|
+
e(t);
|
|
1536
1537
|
} catch (r) {
|
|
1537
1538
|
console.warn("Batch timeLimit listener error:", r);
|
|
1538
1539
|
}
|
|
1539
|
-
}, et = new WeakSet(), ft = async function(
|
|
1540
|
-
this.setTimeLimitState(!0, (/* @__PURE__ */ new Date()).toISOString(),
|
|
1541
|
-
},
|
|
1542
|
-
if (!
|
|
1540
|
+
}, et = new WeakSet(), ft = async function(t = this.defaultPauseMs) {
|
|
1541
|
+
this.setTimeLimitState(!0, (/* @__PURE__ */ new Date()).toISOString(), t), await new Promise((e) => setTimeout(e, t)), this.setTimeLimitState(!1, void 0);
|
|
1542
|
+
}, q = new WeakSet(), tt = async function(t, e = !0) {
|
|
1543
|
+
if (!e)
|
|
1543
1544
|
return 0;
|
|
1544
1545
|
let r = 0;
|
|
1545
|
-
if (!
|
|
1546
|
+
if (!t || typeof t != "object")
|
|
1546
1547
|
return 0;
|
|
1547
|
-
for (const i of Object.values(
|
|
1548
|
+
for (const i of Object.values(t))
|
|
1548
1549
|
if (!(!i || typeof i != "object"))
|
|
1549
1550
|
try {
|
|
1550
1551
|
if (typeof i.time == "function") {
|
|
@@ -1553,9 +1554,9 @@ St = new WeakSet(), he = function() {
|
|
|
1553
1554
|
}
|
|
1554
1555
|
} catch {
|
|
1555
1556
|
}
|
|
1556
|
-
r >= this.operatingThreshold && await
|
|
1557
|
-
},
|
|
1558
|
-
const
|
|
1557
|
+
r >= this.operatingThreshold && await O(this, et, ft).call(this);
|
|
1558
|
+
}, pt = new WeakSet(), se = function(t = this.defaultPauseMs) {
|
|
1559
|
+
const e = this;
|
|
1559
1560
|
return {
|
|
1560
1561
|
inRetryCycle: !1,
|
|
1561
1562
|
inTimeoutWait: !1,
|
|
@@ -1572,15 +1573,15 @@ St = new WeakSet(), he = function() {
|
|
|
1572
1573
|
waitForLateOrLimit() {
|
|
1573
1574
|
var a;
|
|
1574
1575
|
this.inTimeoutWait = !0;
|
|
1575
|
-
const i = new Promise((
|
|
1576
|
+
const i = new Promise((c) => {
|
|
1576
1577
|
if (this.lateResult) {
|
|
1577
|
-
|
|
1578
|
+
c(this.lateResult);
|
|
1578
1579
|
return;
|
|
1579
1580
|
}
|
|
1580
|
-
this.lateWaiters.push(
|
|
1581
|
+
this.lateWaiters.push(c);
|
|
1581
1582
|
});
|
|
1582
1583
|
return Promise.race([
|
|
1583
|
-
|
|
1584
|
+
O(a = e, et, ft).call(a, t),
|
|
1584
1585
|
i
|
|
1585
1586
|
]).finally(() => {
|
|
1586
1587
|
this.inTimeoutWait = !1;
|
|
@@ -1590,94 +1591,94 @@ St = new WeakSet(), he = function() {
|
|
|
1590
1591
|
this.lateResult = null;
|
|
1591
1592
|
}
|
|
1592
1593
|
};
|
|
1593
|
-
}, st = new WeakSet(), dt = async function(
|
|
1594
|
-
let r = !1, i =
|
|
1595
|
-
const a =
|
|
1594
|
+
}, st = new WeakSet(), dt = async function(t, e) {
|
|
1595
|
+
let r = !1, i = t;
|
|
1596
|
+
const a = O(this, pt, se).call(this);
|
|
1596
1597
|
do
|
|
1597
1598
|
r = !1, await this.callBatchWithTimeout(
|
|
1598
1599
|
i,
|
|
1599
|
-
async (
|
|
1600
|
+
async (c) => {
|
|
1600
1601
|
var n, m;
|
|
1601
1602
|
let h = !1;
|
|
1602
|
-
const
|
|
1603
|
-
for (const [
|
|
1604
|
-
if (!(
|
|
1603
|
+
const f = /* @__PURE__ */ new Set();
|
|
1604
|
+
for (const [u, l] of Object.entries(c || {})) {
|
|
1605
|
+
if (!(l != null && l.error) || !l.error())
|
|
1605
1606
|
continue;
|
|
1606
|
-
const
|
|
1607
|
-
if (
|
|
1607
|
+
const A = ((m = (n = l.error()) == null ? void 0 : n.ex) == null ? void 0 : m.error) ?? "";
|
|
1608
|
+
if (A === "TIMEOUT") {
|
|
1608
1609
|
h = !0;
|
|
1609
1610
|
break;
|
|
1610
1611
|
}
|
|
1611
|
-
["QUERY_LIMIT_EXCEEDED", "OPERATION_TIME_LIMIT"].includes(
|
|
1612
|
+
["QUERY_LIMIT_EXCEEDED", "OPERATION_TIME_LIMIT"].includes(A) && f.add(u);
|
|
1612
1613
|
}
|
|
1613
1614
|
if (h) {
|
|
1614
1615
|
if (a.inRetryCycle = !0, r = !0, await a.waitForLateOrLimit(), a.lateResult) {
|
|
1615
1616
|
r = !1, a.inRetryCycle = !1;
|
|
1616
|
-
const
|
|
1617
|
-
a.resetLateResult(), await
|
|
1617
|
+
const u = a.lateResult;
|
|
1618
|
+
a.resetLateResult(), await e(u);
|
|
1618
1619
|
}
|
|
1619
1620
|
return;
|
|
1620
1621
|
}
|
|
1621
|
-
if (
|
|
1622
|
-
const
|
|
1623
|
-
for (const [
|
|
1624
|
-
|
|
1625
|
-
Object.keys(
|
|
1626
|
-
const
|
|
1627
|
-
for (const
|
|
1628
|
-
i[
|
|
1629
|
-
i =
|
|
1622
|
+
if (f.size > 0) {
|
|
1623
|
+
const u = {};
|
|
1624
|
+
for (const [A, p] of Object.entries(c || {}))
|
|
1625
|
+
f.has(A) || (u[A] = p);
|
|
1626
|
+
Object.keys(u).length && await e(u);
|
|
1627
|
+
const l = {};
|
|
1628
|
+
for (const A of f)
|
|
1629
|
+
i[A] && (l[A] = i[A]);
|
|
1630
|
+
i = l, Object.keys(i).length && (r = !0, await O(this, et, ft).call(this));
|
|
1630
1631
|
return;
|
|
1631
1632
|
}
|
|
1632
|
-
a.inRetryCycle = !1, await
|
|
1633
|
+
a.inRetryCycle = !1, await e(c);
|
|
1633
1634
|
},
|
|
1634
1635
|
{
|
|
1635
|
-
onLateResponse: (
|
|
1636
|
+
onLateResponse: (c) => a.notifyLateResponse(c)
|
|
1636
1637
|
}
|
|
1637
1638
|
);
|
|
1638
1639
|
while (r);
|
|
1639
|
-
},
|
|
1640
|
+
}, Gt = new WeakSet(), ge = function(t, e, r = {}) {
|
|
1640
1641
|
const { onLateResponse: i } = r;
|
|
1641
1642
|
return new Promise((a) => {
|
|
1642
1643
|
if (typeof this.callMethod != "function") {
|
|
1643
1644
|
a(null);
|
|
1644
1645
|
return;
|
|
1645
1646
|
}
|
|
1646
|
-
let
|
|
1647
|
+
let c = !1;
|
|
1647
1648
|
const h = setTimeout(() => {
|
|
1648
|
-
|
|
1649
|
+
c || (c = !0, a(null));
|
|
1649
1650
|
}, this.requestTimeoutMs);
|
|
1650
1651
|
try {
|
|
1651
|
-
this.callMethod(
|
|
1652
|
-
|
|
1652
|
+
this.callMethod(t, e, (f) => {
|
|
1653
|
+
c ? typeof i == "function" && i(f) : (c = !0, clearTimeout(h), a(f));
|
|
1653
1654
|
});
|
|
1654
1655
|
} catch {
|
|
1655
|
-
|
|
1656
|
+
c || (c = !0, clearTimeout(h), a(null));
|
|
1656
1657
|
}
|
|
1657
1658
|
});
|
|
1658
|
-
},
|
|
1659
|
-
const
|
|
1659
|
+
}, Yt = new WeakSet(), ye = function(t) {
|
|
1660
|
+
const e = typeof (t == null ? void 0 : t.error) == "function" ? t.error() : null, r = (e == null ? void 0 : e.ex) || {}, i = String(r.error || "").trim(), a = String(r.error_description || "").trim(), c = typeof (e == null ? void 0 : e.toString) == "function" ? String(e.toString()).trim() : "";
|
|
1660
1661
|
let h = a;
|
|
1661
|
-
return !h &&
|
|
1662
|
+
return !h && c && c !== i && (h = c), h || (h = i || "Неизвестная ошибка"), {
|
|
1662
1663
|
code: i || h,
|
|
1663
1664
|
message: h
|
|
1664
1665
|
};
|
|
1665
|
-
},
|
|
1666
|
-
const { code: r, message: i } =
|
|
1667
|
-
this.errors[
|
|
1668
|
-
},
|
|
1669
|
-
Object.entries(this.errors).length && (
|
|
1670
|
-
}, yt = new WeakSet(),
|
|
1671
|
-
this.clearProgressData(), this.progressCall = typeof
|
|
1666
|
+
}, ct = new WeakSet(), It = function(t, e) {
|
|
1667
|
+
const { code: r, message: i } = O(this, Yt, ye).call(this, e);
|
|
1668
|
+
this.errors[t] = r, this.errorMessages[t] = i;
|
|
1669
|
+
}, gt = new WeakSet(), re = function(t) {
|
|
1670
|
+
Object.entries(this.errors).length && (t.errorsList = { ...this.errors }, Object.entries(this.errorMessages).length && (t.errorsListMessages = { ...this.errorMessages }));
|
|
1671
|
+
}, yt = new WeakSet(), ie = function(t) {
|
|
1672
|
+
this.clearProgressData(), this.progressCall = typeof t == "function" ? t : "", this.canContinue = !0, this.result = {}, this.errors = {}, this.errorMessages = {}, this.chunkRate = 1, this.totalProgress = 0, this.batchCommandKeyOrder = [], this.totalBatchCommands = 0, this.batchCommandMethods = [], this.setTimeLimitState(!1, void 0);
|
|
1672
1673
|
}, /** Не включать вес по командам для совсем маленьких batch. */
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1674
|
+
R(J, kt, 5), /** Явный сигнал: много отдельных выборок сделок по фильтрам. */
|
|
1675
|
+
R(J, wt, 5), /** Достаточно «list»-методов в пачке и доля list от всех команд. */
|
|
1676
|
+
R(J, Ct, 8), R(J, Ht, 0.65);
|
|
1676
1677
|
let K = J;
|
|
1677
1678
|
var rt;
|
|
1678
|
-
class
|
|
1679
|
+
class Ne {
|
|
1679
1680
|
constructor() {
|
|
1680
|
-
|
|
1681
|
+
R(this, rt, {});
|
|
1681
1682
|
}
|
|
1682
1683
|
/**
|
|
1683
1684
|
* Получить случайный хеш-код длиной 8 символов
|
|
@@ -1691,11 +1692,11 @@ class ge {
|
|
|
1691
1692
|
* @param {number} length - Длина генерируемого хеша
|
|
1692
1693
|
* @returns {string}
|
|
1693
1694
|
*/
|
|
1694
|
-
createHash(
|
|
1695
|
-
let
|
|
1696
|
-
|
|
1697
|
-
for (let i = 0; i <
|
|
1698
|
-
r +=
|
|
1695
|
+
createHash(t) {
|
|
1696
|
+
let e = "abcdefghijklmnopqrstuvwxyz0123456789", r = "";
|
|
1697
|
+
t = t || 6;
|
|
1698
|
+
for (let i = 0; i < t; i++)
|
|
1699
|
+
r += e.charAt(Math.floor(Math.random() * e.length));
|
|
1699
1700
|
return r;
|
|
1700
1701
|
}
|
|
1701
1702
|
/**
|
|
@@ -1705,84 +1706,84 @@ class ge {
|
|
|
1705
1706
|
* @param {number} params.duration - Задержка в миллисекундах (по умолчанию 10)
|
|
1706
1707
|
* @param {Function} params.action - Функция для выполнения
|
|
1707
1708
|
*/
|
|
1708
|
-
actionFilter({ keyTimer:
|
|
1709
|
-
L(this, rt)[
|
|
1709
|
+
actionFilter({ keyTimer: t, duration: e = 10, action: r }) {
|
|
1710
|
+
L(this, rt)[t] && (clearTimeout(L(this, rt)[t]), L(this, rt)[t] = null), r && (L(this, rt)[t] = setTimeout(() => {
|
|
1710
1711
|
r();
|
|
1711
|
-
},
|
|
1712
|
+
}, e));
|
|
1712
1713
|
}
|
|
1713
1714
|
/**
|
|
1714
1715
|
* Включение режима NO-SLEEP для предотвращения засыпания устройства
|
|
1715
1716
|
* Создает невидимое видео, которое циклически воспроизводится
|
|
1716
1717
|
*/
|
|
1717
1718
|
async noSleep() {
|
|
1718
|
-
let
|
|
1719
|
-
|
|
1720
|
-
|
|
1721
|
-
console.warn("noSleep: autoplay prevented",
|
|
1719
|
+
let t = document.createElement("video");
|
|
1720
|
+
t.classList.add("no-sleep"), t.muted = !0, t.autoplay = !0, t.setAttribute("playsinline", ""), t.addEventListener("loadeddata", () => {
|
|
1721
|
+
t.style.position = "fixed", t.style.left = "-9999px", document.querySelector("body").append(t), t.play().catch((e) => {
|
|
1722
|
+
console.warn("noSleep: autoplay prevented", e);
|
|
1722
1723
|
});
|
|
1723
|
-
}),
|
|
1724
|
+
}), t.addEventListener("ended", () => {
|
|
1724
1725
|
this.actionFilter({
|
|
1725
1726
|
keyTimer: "no-sleep",
|
|
1726
1727
|
duration: 5e3,
|
|
1727
1728
|
action: () => {
|
|
1728
|
-
|
|
1729
|
-
console.warn("noSleep: replay prevented",
|
|
1729
|
+
t.play().catch((e) => {
|
|
1730
|
+
console.warn("noSleep: replay prevented", e);
|
|
1730
1731
|
});
|
|
1731
1732
|
}
|
|
1732
1733
|
});
|
|
1733
|
-
}),
|
|
1734
|
+
}), t.src = "data:video/mp4;base64,AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAAAP5tZGF0AAAAAQYAAADlZYiEE28FmH9jNWDBjI+Z/1tIBZsjfhbmcNNUpBFej0U3p+zhaJ3eemJRL2LUMa5tkidy6bp+eatLE3jBIY864TvaAmqEFCgLMTCwVbem1n3myAw9yDXQdR5HfU/8iYf+eneVnRf7Qx9M70XDUuPx1MJX671XJwAE0VAMpnhbcUDx0pTldvUX9KQPhkZNH3eyZHmObkAeyEJ2tl+BEBJIGc90BiqKL60+5EA6fXB6iG5UU/M5KsW8BNAAUw5CbRJIqohNk10fwKbUXwya03rqGkE8+wuYGtEbrVYXb+iOl1mHHVPLYQbIAAcGyAAHAAAFNG1vb3YAAABsbXZoZAAAAAAAAAAAAAAAAAAAA+gAAAAvAAEAAAEAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAIldHJhawAAAFx0a2hkAAAAAwAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAFAAAAA8AAAAAAAJGVkdHMAAAAcZWxzdAAAAAAAAAABAAAAAAAAAAAAAQAAAAABnW1kaWEAAAAgbWRoZAAAAAAAAAAAAAAAAAAAQAAAAAAAVcQAAAAAAC1oZGxyAAAAAAAAAAB2aWRlAAAAAAAAAAAAAAAAVmlkZW9IYW5kbGVyAAAAAUhtaW5mAAAAFHZtaGQAAAABAAAAAAAAAAAAAAAkZGluZgAAABxkcmVmAAAAAAAAAAEAAAAMdXJsIAAAAAEAAAEIc3RibAAAAKRzdHNkAAAAAAAAAAEAAACUYXZjMQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAFAAPAASAAAAEgAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABj//wAAAC5hdmNDAU1AC//hABZnTUAL2wUH7ARAAAADAEAAAAQDxQq4AQAFaOrAZXIAAAAQcGFzcAAAAAEAAAABAAAAGHN0dHMAAAAAAAAAAQAAAAEAAAAAAAAAHHN0c2MAAAAAAAAAAQAAAAEAAAABAAAAAQAAABRzdHN6AAAAAAAAAO4AAAABAAAAFHN0Y28AAAAAAAAAAQAAADAAAAIadHJhawAAAFx0a2hkAAAAAwAAAAAAAAAAAAAAAgAAAAAAAAAvAAAAAAAAAAAAAAABAQAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAJGVkdHMAAAAcZWxzdAAAAAAAAAABAAAALwAAAAAAAQAAAAABkm1kaWEAAAAgbWRoZAAAAAAAAAAAAAAAAAAArEQAAAgAVcQAAAAAAC1oZGxyAAAAAAAAAABzb3VuAAAAAAAAAAAAAAAAU291bmRIYW5kbGVyAAAAAT1taW5mAAAAEHNtaGQAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAQFzdGJsAAAAZ3N0c2QAAAAAAAAAAQAAAFdtcDRhAAAAAAAAAAEAAAAAAAAAAAACABAAAAAArEQAAAAAADNlc2RzAAAAAAOAgIAiAAIABICAgBRAFQAAAAAC7gAAAAViBYCAgAISCAaAgIABAgAAABhzdHRzAAAAAAAAAAEAAAACAAAEAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAgAAAAEAAAAUc3RzegAAAAAAAAAEAAAAAgAAABRzdGNvAAAAAAAAAAEAAAEeAAAAGnNncGQBAAAAcm9sbAAAAAIAAAAB//8AAAAcc2JncAAAAAByb2xsAAAAAQAAAAIAAAABAAAAgXVkdGEAAAB5bWV0YQAAAAAAAAAhaGRscgAAAAAAAAAAbWR0YQAAAAAAAAAAAAAAAAAAAAAfa2V5cwAAAAAAAAABAAAAD21kdGFlbmNvZGVyAAAALWlsc3QAAAAlAAAAAQAAAB1kYXRhAAAAAQAAAABMYXZmNTguMTIuMTAw";
|
|
1734
1735
|
}
|
|
1735
1736
|
/**
|
|
1736
1737
|
* Скачать данные в JSON-файл
|
|
1737
1738
|
* @param {any} data - Данные для сохранения
|
|
1738
1739
|
* @param {string} filename - Имя файла без расширения
|
|
1739
1740
|
*/
|
|
1740
|
-
downloadFileJson(
|
|
1741
|
-
let r = new Blob([JSON.stringify(
|
|
1742
|
-
a.style.display = "none", a.href = i, a.download = `${
|
|
1741
|
+
downloadFileJson(t, e) {
|
|
1742
|
+
let r = new Blob([JSON.stringify(t)], { type: "application/json" }), i = URL.createObjectURL(r), a = document.createElement("a");
|
|
1743
|
+
a.style.display = "none", a.href = i, a.download = `${e}.json`, document.body.appendChild(a), a.click(), setTimeout(() => {
|
|
1743
1744
|
document.body.removeChild(a), URL.revokeObjectURL(i);
|
|
1744
1745
|
}, 200);
|
|
1745
1746
|
}
|
|
1746
1747
|
}
|
|
1747
1748
|
rt = new WeakMap();
|
|
1748
|
-
const
|
|
1749
|
-
var j, Q, it,
|
|
1750
|
-
class
|
|
1749
|
+
const $t = new Ne();
|
|
1750
|
+
var j, Q, it, At, Nt, V, v, nt, ht, Wt, Oe, Ot, ne, xt, _e, Ft, Te, vt, Ee;
|
|
1751
|
+
class xe {
|
|
1751
1752
|
constructor() {
|
|
1752
1753
|
/** user.current — только при первом реальном использовании (сохранение лога, выгрузка). */
|
|
1753
|
-
|
|
1754
|
+
R(this, Wt);
|
|
1754
1755
|
/** Вывод ошибок логера
|
|
1755
1756
|
* @param {'entity'} type - тип ошибки
|
|
1756
1757
|
*/
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
|
|
1760
|
-
|
|
1761
|
-
|
|
1762
|
-
|
|
1763
|
-
|
|
1764
|
-
|
|
1765
|
-
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
|
|
1769
|
-
|
|
1758
|
+
R(this, Ot);
|
|
1759
|
+
R(this, xt);
|
|
1760
|
+
R(this, Ft);
|
|
1761
|
+
R(this, vt);
|
|
1762
|
+
R(this, j, "logger");
|
|
1763
|
+
R(this, Q, !1);
|
|
1764
|
+
R(this, it, /* @__PURE__ */ new Map());
|
|
1765
|
+
R(this, At, {});
|
|
1766
|
+
R(this, Nt, !1);
|
|
1767
|
+
R(this, V, null);
|
|
1768
|
+
R(this, v, null);
|
|
1769
|
+
R(this, nt, !1);
|
|
1770
|
+
R(this, ht, !1);
|
|
1770
1771
|
/** Очистка хранилища элементов старше 'N' месяцев */
|
|
1771
|
-
|
|
1772
|
+
I(this, "periodClear", 3);
|
|
1772
1773
|
}
|
|
1773
1774
|
/** Инициализация логера */
|
|
1774
1775
|
async init() {
|
|
1775
1776
|
try {
|
|
1776
|
-
let
|
|
1777
|
+
let t = new K(BX24.callBatch), { entityList: e } = await t.batch({
|
|
1777
1778
|
entityList: { method: "entity.get" }
|
|
1778
1779
|
});
|
|
1779
|
-
if (
|
|
1780
|
-
if (
|
|
1780
|
+
if (e && Array.isArray(e))
|
|
1781
|
+
if (e.find(
|
|
1781
1782
|
(i) => i.ENTITY == L(this, j)
|
|
1782
1783
|
))
|
|
1783
1784
|
x(this, Q, !0);
|
|
1784
1785
|
else {
|
|
1785
|
-
let { entityAdd: i } = await
|
|
1786
|
+
let { entityAdd: i } = await t.batch({
|
|
1786
1787
|
entityAdd: {
|
|
1787
1788
|
method: "entity.add",
|
|
1788
1789
|
params: {
|
|
@@ -1795,8 +1796,8 @@ class Ue {
|
|
|
1795
1796
|
i && x(this, Q, !0);
|
|
1796
1797
|
}
|
|
1797
1798
|
return L(this, Q);
|
|
1798
|
-
} catch (
|
|
1799
|
-
return console.error("Ошибка при инициализации логера:",
|
|
1799
|
+
} catch (t) {
|
|
1800
|
+
return console.error("Ошибка при инициализации логера:", t), !1;
|
|
1800
1801
|
}
|
|
1801
1802
|
}
|
|
1802
1803
|
/**
|
|
@@ -1815,14 +1816,14 @@ class Ue {
|
|
|
1815
1816
|
* }; }}
|
|
1816
1817
|
* @returns {string|null}
|
|
1817
1818
|
*/
|
|
1818
|
-
start({ type:
|
|
1819
|
+
start({ type: t, data: e }) {
|
|
1819
1820
|
if (!L(this, Q))
|
|
1820
|
-
return
|
|
1821
|
-
if (!
|
|
1822
|
-
return console.error("Невалидные данные для логирования:", { type:
|
|
1823
|
-
const r =
|
|
1824
|
-
type:
|
|
1825
|
-
data:
|
|
1821
|
+
return O(this, Ot, ne).call(this, "entity"), null;
|
|
1822
|
+
if (!t || !e)
|
|
1823
|
+
return console.error("Невалидные данные для логирования:", { type: t, data: e }), null;
|
|
1824
|
+
const r = $t.hash, i = {
|
|
1825
|
+
type: t,
|
|
1826
|
+
data: e,
|
|
1826
1827
|
userInfo: null,
|
|
1827
1828
|
errorList: {},
|
|
1828
1829
|
status: "",
|
|
@@ -1838,28 +1839,28 @@ class Ue {
|
|
|
1838
1839
|
* status: 'success'|'fail'|'fail-runtime',
|
|
1839
1840
|
* answer: { [key]: unknown } }}
|
|
1840
1841
|
*/
|
|
1841
|
-
async stop({ key:
|
|
1842
|
-
var
|
|
1842
|
+
async stop({ key: t, errorList: e, status: r, answer: i }) {
|
|
1843
|
+
var c;
|
|
1843
1844
|
if (!L(this, ht))
|
|
1844
1845
|
return;
|
|
1845
1846
|
if (!L(this, Q)) {
|
|
1846
|
-
|
|
1847
|
+
O(this, Ot, ne).call(this, "entity");
|
|
1847
1848
|
return;
|
|
1848
1849
|
}
|
|
1849
|
-
let a = L(this, it).get(
|
|
1850
|
+
let a = L(this, it).get(t);
|
|
1850
1851
|
if (!a) {
|
|
1851
|
-
console.error(`Не найдены данные логирования для ключа: ${
|
|
1852
|
+
console.error(`Не найдены данные логирования для ключа: ${t}`);
|
|
1852
1853
|
return;
|
|
1853
1854
|
}
|
|
1854
|
-
|
|
1855
|
+
e && (a.errorList = e), r && (a.status = r), i && (a.answer = i), await O(this, Wt, Oe).call(this), a.userInfo = L(this, At), await O(this, xt, _e).call(this), (c = a == null ? void 0 : a.data) != null && c.updateList && x(this, nt, !0), x(this, ht, !1);
|
|
1855
1856
|
}
|
|
1856
1857
|
/**
|
|
1857
1858
|
* @param { ({percent}:{percent:number})=>{} } progressCall - коллбэк
|
|
1858
1859
|
*/
|
|
1859
|
-
async getEntityList(
|
|
1860
|
-
var
|
|
1860
|
+
async getEntityList(t) {
|
|
1861
|
+
var e;
|
|
1861
1862
|
try {
|
|
1862
|
-
if ((
|
|
1863
|
+
if ((e = L(this, v)) != null && e.length && !L(this, nt))
|
|
1863
1864
|
return L(this, v);
|
|
1864
1865
|
let r = new K(BX24.callBatch), { entityList: i } = await r.batch(
|
|
1865
1866
|
{
|
|
@@ -1871,20 +1872,20 @@ class Ue {
|
|
|
1871
1872
|
}
|
|
1872
1873
|
}
|
|
1873
1874
|
},
|
|
1874
|
-
|
|
1875
|
+
t
|
|
1875
1876
|
);
|
|
1876
1877
|
return !i || !Array.isArray(i) ? (console.warn("Получен невалидный список записей"), []) : (i = i.map((a) => {
|
|
1877
1878
|
try {
|
|
1878
|
-
const { ID:
|
|
1879
|
+
const { ID: c, DATE_CREATE: h, DETAIL_TEXT: f } = a;
|
|
1879
1880
|
return {
|
|
1880
|
-
...JSON.parse(
|
|
1881
|
-
id:
|
|
1881
|
+
...JSON.parse(f),
|
|
1882
|
+
id: c,
|
|
1882
1883
|
dateCreate: h
|
|
1883
1884
|
};
|
|
1884
|
-
} catch (
|
|
1885
|
+
} catch (c) {
|
|
1885
1886
|
return console.error(
|
|
1886
1887
|
`Ошибка парсинга записи ${a.ID}:`,
|
|
1887
|
-
|
|
1888
|
+
c
|
|
1888
1889
|
), null;
|
|
1889
1890
|
}
|
|
1890
1891
|
}).filter((a) => a !== null), x(this, nt, !1), x(this, v, i), i);
|
|
@@ -1897,55 +1898,55 @@ class Ue {
|
|
|
1897
1898
|
* Не вызывается из `init` — вызывайте явно (например, из настроек или планировщика).
|
|
1898
1899
|
*/
|
|
1899
1900
|
runStorageMaintenance() {
|
|
1900
|
-
return
|
|
1901
|
+
return O(this, Ft, Te).call(this);
|
|
1901
1902
|
}
|
|
1902
1903
|
/** Выгрузка всех данных из хранилища в JSON-файл */
|
|
1903
1904
|
async downAllEntityJson() {
|
|
1904
1905
|
try {
|
|
1905
1906
|
if (L(this, v) || await this.getEntityList(), !L(this, v) || L(this, v).length === 0)
|
|
1906
1907
|
return console.warn("Нет данных для выгрузки"), !1;
|
|
1907
|
-
let
|
|
1908
|
-
return
|
|
1908
|
+
let t = St().format("%Y-%m-%d");
|
|
1909
|
+
return $t.downloadFileJson(
|
|
1909
1910
|
L(this, v),
|
|
1910
|
-
`sdklogger-entity-data__${
|
|
1911
|
+
`sdklogger-entity-data__${t}`
|
|
1911
1912
|
), !0;
|
|
1912
|
-
} catch (
|
|
1913
|
-
return console.error("Ошибка при выгрузке данных в JSON:",
|
|
1913
|
+
} catch (t) {
|
|
1914
|
+
return console.error("Ошибка при выгрузке данных в JSON:", t), !1;
|
|
1914
1915
|
}
|
|
1915
1916
|
}
|
|
1916
1917
|
}
|
|
1917
|
-
j = new WeakMap(), Q = new WeakMap(), it = new WeakMap(),
|
|
1918
|
+
j = new WeakMap(), Q = new WeakMap(), it = new WeakMap(), At = new WeakMap(), Nt = new WeakMap(), V = new WeakMap(), v = new WeakMap(), nt = new WeakMap(), ht = new WeakMap(), Wt = new WeakSet(), Oe = async function() {
|
|
1918
1919
|
if (!L(this, Nt))
|
|
1919
1920
|
return L(this, V) ? L(this, V) : (x(this, V, (async () => {
|
|
1920
1921
|
try {
|
|
1921
|
-
const
|
|
1922
|
+
const t = new K(BX24.callBatch), e = BX24.isAdmin(), { curUser: r } = await t.batch({
|
|
1922
1923
|
curUser: { method: "user.current" }
|
|
1923
1924
|
});
|
|
1924
|
-
x(this,
|
|
1925
|
-
} catch (
|
|
1925
|
+
x(this, At, { isAdmin: e, curUser: r });
|
|
1926
|
+
} catch (t) {
|
|
1926
1927
|
console.error(
|
|
1927
1928
|
"Ошибка при получении информации о пользователе:",
|
|
1928
|
-
|
|
1929
|
-
), x(this,
|
|
1929
|
+
t
|
|
1930
|
+
), x(this, At, { isAdmin: !1, curUser: null });
|
|
1930
1931
|
} finally {
|
|
1931
1932
|
x(this, Nt, !0), x(this, V, null);
|
|
1932
1933
|
}
|
|
1933
1934
|
})()), L(this, V));
|
|
1934
|
-
}, Ot = new WeakSet(),
|
|
1935
|
-
|
|
1935
|
+
}, Ot = new WeakSet(), ne = function(t) {
|
|
1936
|
+
t == "entity" && $t.actionFilter({
|
|
1936
1937
|
keyTimer: "error.logger.entity",
|
|
1937
1938
|
duration: 500,
|
|
1938
1939
|
action: () => {
|
|
1939
1940
|
console.error("Хранилище для логгера не инициализировано");
|
|
1940
1941
|
}
|
|
1941
1942
|
});
|
|
1942
|
-
},
|
|
1943
|
+
}, xt = new WeakSet(), _e = async function() {
|
|
1943
1944
|
try {
|
|
1944
|
-
let
|
|
1945
|
+
let t = {}, e = new K(BX24.callBatch);
|
|
1945
1946
|
for (let [r, i] of L(this, it).entries())
|
|
1946
1947
|
if (i.status) {
|
|
1947
1948
|
const a = JSON.stringify(i);
|
|
1948
|
-
|
|
1949
|
+
t[r] = {
|
|
1949
1950
|
method: "entity.item.add",
|
|
1950
1951
|
params: {
|
|
1951
1952
|
ENTITY: L(this, j),
|
|
@@ -1954,22 +1955,22 @@ j = new WeakMap(), Q = new WeakMap(), it = new WeakMap(), ct = new WeakMap(), Nt
|
|
|
1954
1955
|
}
|
|
1955
1956
|
};
|
|
1956
1957
|
}
|
|
1957
|
-
if (Object.keys(
|
|
1958
|
-
let r = await
|
|
1959
|
-
for (let [a,
|
|
1958
|
+
if (Object.keys(t).length) {
|
|
1959
|
+
let r = await e.batch(t), { errors: i } = e;
|
|
1960
|
+
for (let [a, c] of Object.entries({ ...r, ...i }))
|
|
1960
1961
|
L(this, it).delete(a);
|
|
1961
1962
|
return !0;
|
|
1962
1963
|
}
|
|
1963
1964
|
return !1;
|
|
1964
|
-
} catch (
|
|
1965
|
-
return console.error("Ошибка при добавлении записей в хранилище:",
|
|
1965
|
+
} catch (t) {
|
|
1966
|
+
return console.error("Ошибка при добавлении записей в хранилище:", t), !1;
|
|
1966
1967
|
}
|
|
1967
|
-
},
|
|
1968
|
+
}, Ft = new WeakSet(), Te = async function() {
|
|
1968
1969
|
try {
|
|
1969
|
-
let
|
|
1970
|
+
let t = new K(BX24.callBatch), { serverTime: e } = await t.batch({
|
|
1970
1971
|
serverTime: { method: "server.time" }
|
|
1971
1972
|
});
|
|
1972
|
-
if (!
|
|
1973
|
+
if (!e) {
|
|
1973
1974
|
console.error("Не удалось получить время сервера");
|
|
1974
1975
|
return;
|
|
1975
1976
|
}
|
|
@@ -1978,8 +1979,8 @@ j = new WeakMap(), Q = new WeakMap(), it = new WeakMap(), ct = new WeakMap(), Nt
|
|
|
1978
1979
|
let r = L(this, v).filter((i) => {
|
|
1979
1980
|
try {
|
|
1980
1981
|
let { dateCreate: a } = i;
|
|
1981
|
-
return a ?
|
|
1982
|
-
|
|
1982
|
+
return a ? St(new Date(a)).between(
|
|
1983
|
+
St(new Date(e)),
|
|
1983
1984
|
"month"
|
|
1984
1985
|
) >= this.periodClear : !1;
|
|
1985
1986
|
} catch (a) {
|
|
@@ -1988,92 +1989,176 @@ j = new WeakMap(), Q = new WeakMap(), it = new WeakMap(), ct = new WeakMap(), Nt
|
|
|
1988
1989
|
});
|
|
1989
1990
|
r.length > 0 && (console.log(
|
|
1990
1991
|
`Найдено ${r.length} записей для очистки (старше ${this.periodClear} месяцев)`
|
|
1991
|
-
), await
|
|
1992
|
-
} catch (
|
|
1993
|
-
console.error("Ошибка при проверке периода очистки:",
|
|
1992
|
+
), await O(this, vt, Ee).call(this, r));
|
|
1993
|
+
} catch (t) {
|
|
1994
|
+
console.error("Ошибка при проверке периода очистки:", t);
|
|
1994
1995
|
}
|
|
1995
|
-
},
|
|
1996
|
+
}, vt = new WeakSet(), Ee = async function(t) {
|
|
1996
1997
|
try {
|
|
1997
|
-
if (!
|
|
1998
|
+
if (!t || t.length === 0)
|
|
1998
1999
|
return !1;
|
|
1999
|
-
let
|
|
2000
|
-
let { id:
|
|
2000
|
+
let e = new K(BX24.callBatch), r = t.filter((a) => a && a.id).map((a) => {
|
|
2001
|
+
let { id: c } = a;
|
|
2001
2002
|
return {
|
|
2002
2003
|
method: "entity.item.delete",
|
|
2003
2004
|
params: {
|
|
2004
2005
|
ENTITY: L(this, j),
|
|
2005
|
-
ID:
|
|
2006
|
+
ID: c
|
|
2006
2007
|
}
|
|
2007
2008
|
};
|
|
2008
2009
|
});
|
|
2009
2010
|
if (r.length === 0)
|
|
2010
2011
|
return !1;
|
|
2011
|
-
const i = await
|
|
2012
|
+
const i = await e.batch(r);
|
|
2012
2013
|
return console.log(`Успешно удалено ${r.length} записей`), x(this, nt, !0), i;
|
|
2013
|
-
} catch (
|
|
2014
|
-
return console.error("Ошибка при очистке устаревших записей:",
|
|
2014
|
+
} catch (e) {
|
|
2015
|
+
return console.error("Ошибка при очистке устаревших записей:", e), !1;
|
|
2015
2016
|
}
|
|
2016
2017
|
};
|
|
2017
|
-
function
|
|
2018
|
+
function he(d) {
|
|
2018
2019
|
if (!d || typeof d != "string")
|
|
2019
2020
|
return "";
|
|
2020
2021
|
try {
|
|
2021
|
-
const
|
|
2022
|
-
|
|
2023
|
-
let
|
|
2024
|
-
return
|
|
2022
|
+
const t = new URL(d);
|
|
2023
|
+
t.search = "", t.hash = "";
|
|
2024
|
+
let e = t.toString();
|
|
2025
|
+
return e.endsWith("/") && t.pathname !== "/" && (e = e.slice(0, -1)), e;
|
|
2025
2026
|
} catch {
|
|
2026
2027
|
return d.split("?")[0].split("#")[0].replace(/\/$/, "");
|
|
2027
2028
|
}
|
|
2028
2029
|
}
|
|
2029
|
-
function
|
|
2030
|
+
function Re(d) {
|
|
2030
2031
|
return !d || typeof d != "string" ? !1 : d.toLowerCase().includes("/marketplace/app");
|
|
2031
2032
|
}
|
|
2032
|
-
function
|
|
2033
|
-
var
|
|
2034
|
-
if (typeof window > "u" || !((
|
|
2033
|
+
function Fe() {
|
|
2034
|
+
var t;
|
|
2035
|
+
if (typeof window > "u" || !((t = window.location) != null && t.href))
|
|
2035
2036
|
return "";
|
|
2036
|
-
const d =
|
|
2037
|
-
return
|
|
2037
|
+
const d = he(window.location.href);
|
|
2038
|
+
return Re(d) ? "" : d;
|
|
2038
2039
|
}
|
|
2039
|
-
function
|
|
2040
|
+
function ae(d) {
|
|
2040
2041
|
if (!(d != null && d.appConst) || typeof d.appConst != "object")
|
|
2041
2042
|
return "";
|
|
2042
|
-
const
|
|
2043
|
-
return
|
|
2043
|
+
const t = Fe();
|
|
2044
|
+
return t ? (d.appConst.pathApp = t, t) : he(d.appConst.pathApp ?? "");
|
|
2045
|
+
}
|
|
2046
|
+
const ve = Object.freeze([
|
|
2047
|
+
Object.freeze({ name: "com", url: "//api.bitrix24.com/api/v1/" }),
|
|
2048
|
+
Object.freeze({ name: "tech", url: "//api.bitrix24.tech/api/v1/" })
|
|
2049
|
+
]), Le = 3e3, be = "__szdlBx24Stub", Lt = "__szdlBx24LoadPromise";
|
|
2050
|
+
class ue extends Error {
|
|
2051
|
+
constructor(t) {
|
|
2052
|
+
super(
|
|
2053
|
+
`BX24 library loaded from "${t}" but failed to initialize (app is not opened inside Bitrix24 frame?)`
|
|
2054
|
+
), this.name = "Bx24EnvironmentError", this.source = t;
|
|
2055
|
+
}
|
|
2056
|
+
}
|
|
2057
|
+
function bt(d) {
|
|
2058
|
+
const t = d.BX24;
|
|
2059
|
+
return !!t && typeof t.init == "function" && !t[be];
|
|
2044
2060
|
}
|
|
2045
|
-
|
|
2046
|
-
|
|
2061
|
+
function Xe(d, t) {
|
|
2062
|
+
if (t) {
|
|
2063
|
+
for (const e of t.installQueue.splice(0))
|
|
2064
|
+
d.BX24.install(e);
|
|
2065
|
+
for (const e of t.initQueue.splice(0))
|
|
2066
|
+
d.BX24.init(e);
|
|
2067
|
+
}
|
|
2068
|
+
}
|
|
2069
|
+
function Je({
|
|
2070
|
+
win: d,
|
|
2071
|
+
doc: t,
|
|
2072
|
+
loadLocalCode: e,
|
|
2073
|
+
sources: r = ve,
|
|
2074
|
+
timeoutMs: i = Le,
|
|
2075
|
+
logger: a = console
|
|
2076
|
+
}) {
|
|
2077
|
+
const c = (m) => (t.head || t.documentElement).appendChild(m), h = (m) => {
|
|
2078
|
+
m.parentNode && m.parentNode.removeChild(m);
|
|
2079
|
+
}, f = (m) => new Promise((u) => {
|
|
2080
|
+
const l = t.createElement("script");
|
|
2081
|
+
let A = !1;
|
|
2082
|
+
const p = (E) => {
|
|
2083
|
+
A || (A = !0, clearTimeout(_), l.onload = null, l.onerror = null, E !== "ok" && h(l), u(E));
|
|
2084
|
+
}, _ = setTimeout(() => p("timeout"), i);
|
|
2085
|
+
l.onload = () => {
|
|
2086
|
+
bt(d) ? p("ok") : p(d.BX24 === null ? "env-error" : "error");
|
|
2087
|
+
}, l.onerror = () => p("error"), l.src = m, c(l);
|
|
2088
|
+
}), n = async () => {
|
|
2089
|
+
const m = await e(), u = t.createElement("script");
|
|
2090
|
+
u.text = m;
|
|
2091
|
+
try {
|
|
2092
|
+
c(u);
|
|
2093
|
+
} catch {
|
|
2094
|
+
}
|
|
2095
|
+
if (!bt(d))
|
|
2096
|
+
throw d.BX24 === null ? new ue("local") : new Error("BX24 local copy failed to initialize");
|
|
2097
|
+
};
|
|
2098
|
+
return async function() {
|
|
2099
|
+
var A;
|
|
2100
|
+
if (bt(d))
|
|
2101
|
+
return { source: "preloaded" };
|
|
2102
|
+
const u = ((A = d.BX24) == null ? void 0 : A[be]) ?? null, l = (p) => (Xe(d, u), a.info(`BX24 loaded from "${p}"`), { source: p });
|
|
2103
|
+
for (const { name: p, url: _ } of r) {
|
|
2104
|
+
const E = await f(_);
|
|
2105
|
+
if (E === "ok")
|
|
2106
|
+
return l(p);
|
|
2107
|
+
if (E === "env-error")
|
|
2108
|
+
throw new ue(p);
|
|
2109
|
+
if (bt(d))
|
|
2110
|
+
return l(p);
|
|
2111
|
+
a.warn(`BX24 source "${p}" (${_}) failed: ${E}`);
|
|
2112
|
+
}
|
|
2113
|
+
return await n(), l("local");
|
|
2114
|
+
};
|
|
2115
|
+
}
|
|
2116
|
+
function je(d) {
|
|
2117
|
+
const { win: t } = d;
|
|
2118
|
+
return t[Lt] || (t[Lt] = Je(d)().catch((e) => {
|
|
2119
|
+
throw delete t[Lt], e;
|
|
2120
|
+
})), t[Lt];
|
|
2121
|
+
}
|
|
2122
|
+
function Ke({ timeoutMs: d = Le } = {}) {
|
|
2123
|
+
return je({
|
|
2124
|
+
win: window,
|
|
2125
|
+
doc: document,
|
|
2126
|
+
timeoutMs: d,
|
|
2127
|
+
loadLocalCode: () => import("./bx24-local-source-5d9164ce.js").then((t) => t.default)
|
|
2128
|
+
});
|
|
2129
|
+
}
|
|
2130
|
+
var ut, Dt, Xt, Se, _t, oe, Jt, Me, jt, Ie, Kt, De, $, ot, Tt, le, zt, Be, Et, ce, qt, ke;
|
|
2131
|
+
class es {
|
|
2047
2132
|
/**
|
|
2048
2133
|
* @param {Object} appConst - Константы приложения
|
|
2049
2134
|
* @param {string} appConst.appName - Название приложения
|
|
2050
2135
|
* @param {string} appConst.pathApp - Путь к приложению
|
|
2051
2136
|
*/
|
|
2052
|
-
constructor(
|
|
2137
|
+
constructor(t) {
|
|
2053
2138
|
/**
|
|
2054
2139
|
* Returns shared Batch instance for all batch operations.
|
|
2055
2140
|
* Keeps a single stateful Batch (including timeLimit) within current BxBoot lifecycle.
|
|
2056
2141
|
*
|
|
2057
2142
|
* @returns {Batch} Shared Batch instance.
|
|
2058
2143
|
*/
|
|
2059
|
-
|
|
2060
|
-
|
|
2144
|
+
R(this, ut);
|
|
2145
|
+
R(this, Xt);
|
|
2061
2146
|
/**
|
|
2062
2147
|
* `this.logger === true` → `BxLogger` + лёгкий `init` (сущность хранилища, без полной выгрузки);
|
|
2063
2148
|
* иначе — заглушка.
|
|
2064
2149
|
* @param {boolean} runLoggerMaintenance
|
|
2065
2150
|
*/
|
|
2066
|
-
|
|
2151
|
+
R(this, _t);
|
|
2067
2152
|
/**
|
|
2068
2153
|
* @returns {boolean}
|
|
2069
2154
|
*/
|
|
2070
|
-
|
|
2155
|
+
R(this, Jt);
|
|
2071
2156
|
/** Запрос данных о приложении */
|
|
2072
|
-
|
|
2157
|
+
R(this, jt);
|
|
2073
2158
|
/** Запрос данных о текущем пользователе */
|
|
2074
|
-
|
|
2075
|
-
|
|
2076
|
-
|
|
2159
|
+
R(this, Kt);
|
|
2160
|
+
R(this, $);
|
|
2161
|
+
R(this, Tt);
|
|
2077
2162
|
/**
|
|
2078
2163
|
* Расширяет errorList для случаев TIMEOUT и LIMIT
|
|
2079
2164
|
* Если есть ошибки TIMEOUT или LIMIT, добавляет все необработанные сущности из commandList
|
|
@@ -2083,32 +2168,32 @@ class Je {
|
|
|
2083
2168
|
* @param {Array} updateList - Список обновлений для логирования (опционально)
|
|
2084
2169
|
* @returns {Object} Расширенный список ошибок
|
|
2085
2170
|
*/
|
|
2086
|
-
|
|
2171
|
+
R(this, zt);
|
|
2087
2172
|
/**
|
|
2088
2173
|
* Нормализует входные данные в массив объектов {placement, handler?}
|
|
2089
2174
|
* @private
|
|
2090
2175
|
*/
|
|
2091
|
-
|
|
2176
|
+
R(this, Et);
|
|
2092
2177
|
/**
|
|
2093
2178
|
* Находит встройки с устаревшим handler (не содержащим текущий pathApp)
|
|
2094
2179
|
* @private
|
|
2095
2180
|
*/
|
|
2096
|
-
|
|
2097
|
-
|
|
2098
|
-
|
|
2099
|
-
|
|
2100
|
-
|
|
2101
|
-
|
|
2102
|
-
|
|
2103
|
-
|
|
2104
|
-
|
|
2105
|
-
|
|
2181
|
+
R(this, qt);
|
|
2182
|
+
I(this, "domain", "");
|
|
2183
|
+
I(this, "isAdmin", !1);
|
|
2184
|
+
I(this, "appInfo", null);
|
|
2185
|
+
I(this, "appConst", null);
|
|
2186
|
+
I(this, "userInfo", null);
|
|
2187
|
+
I(this, "placeData", null);
|
|
2188
|
+
I(this, "placeInfo", null);
|
|
2189
|
+
I(this, "logger", !1);
|
|
2190
|
+
I(this, "timeLimit", {
|
|
2106
2191
|
limit: !1,
|
|
2107
2192
|
date: void 0,
|
|
2108
2193
|
pauseMs: void 0
|
|
2109
2194
|
});
|
|
2110
|
-
|
|
2111
|
-
this.appConst =
|
|
2195
|
+
I(this, "batchClient", null);
|
|
2196
|
+
this.appConst = t;
|
|
2112
2197
|
}
|
|
2113
2198
|
/**
|
|
2114
2199
|
* Подписывает внешний код на изменения состояния timeLimit в Batch.
|
|
@@ -2116,8 +2201,8 @@ class Je {
|
|
|
2116
2201
|
* @param {(state: {limit: boolean, date?: string, pauseMs?: number}) => void} callback - Обработчик состояния лимита.
|
|
2117
2202
|
* @returns {() => void} Функция отписки.
|
|
2118
2203
|
*/
|
|
2119
|
-
subscribeTimeLimit(
|
|
2120
|
-
return
|
|
2204
|
+
subscribeTimeLimit(t) {
|
|
2205
|
+
return O(this, ut, Dt).call(this).subscribeTimeLimit(t);
|
|
2121
2206
|
}
|
|
2122
2207
|
/**
|
|
2123
2208
|
* Единая инициализация: внутри автоматически выбирается ветка обычного приложения или
|
|
@@ -2126,43 +2211,47 @@ class Je {
|
|
|
2126
2211
|
* @param {{ runLoggerMaintenance?: boolean }} [options] — опциональная фоновая
|
|
2127
2212
|
* очистка старых записей логгера (раньше запускалась вместе с `logger.init`, теперь явно).
|
|
2128
2213
|
* `noSleep` запускается только вне `PAGE_BACKGROUND_WORKER`.
|
|
2214
|
+
* BX24 подключается через `loadBx24()` (`.com` → `.tech` → локальная копия), тег в HTML не нужен.
|
|
2129
2215
|
* @returns {Promise<{ isBackworker: boolean }>}
|
|
2130
|
-
* @throws {Error} Если BX24 не
|
|
2216
|
+
* @throws {Error} Если BX24 не удалось загрузить ни из одного источника или он не появился за 30 секунд
|
|
2131
2217
|
*/
|
|
2132
2218
|
init() {
|
|
2133
|
-
return new Promise((
|
|
2219
|
+
return new Promise((t, e) => {
|
|
2134
2220
|
const i = setTimeout(() => {
|
|
2135
2221
|
clearInterval(a);
|
|
2136
|
-
const
|
|
2222
|
+
const c = new Error(
|
|
2137
2223
|
"BX24 initialization timeout: BX24 object not found within 30 seconds"
|
|
2138
2224
|
);
|
|
2139
|
-
console.error(
|
|
2225
|
+
console.error(c), e(c);
|
|
2140
2226
|
}, 3e4);
|
|
2141
2227
|
let a = setInterval(() => {
|
|
2142
2228
|
window.BX24 && BX24.init(async () => {
|
|
2143
2229
|
clearInterval(a), clearTimeout(i), this.domain = BX24.getDomain(), this.isAdmin = BX24.isAdmin(), this.placeInfo = BX24.placement.info();
|
|
2144
|
-
const
|
|
2230
|
+
const c = O(this, Jt, Me).call(this);
|
|
2145
2231
|
if (console.info(
|
|
2146
|
-
|
|
2147
|
-
), this.appInfo = await
|
|
2148
|
-
await
|
|
2232
|
+
c ? "init BX24 (background worker)" : "init BX24"
|
|
2233
|
+
), this.appInfo = await O(this, jt, Ie).call(this), this.userInfo = await O(this, Kt, De).call(this), ae(this), c)
|
|
2234
|
+
await O(this, _t, oe).call(this, !1, {
|
|
2149
2235
|
skipInit: !0
|
|
2150
2236
|
});
|
|
2151
2237
|
else {
|
|
2152
|
-
await
|
|
2153
|
-
const h = new
|
|
2238
|
+
await O(this, _t, oe).call(this, !0);
|
|
2239
|
+
const h = new Ne();
|
|
2154
2240
|
try {
|
|
2155
2241
|
h.noSleep();
|
|
2156
|
-
} catch (
|
|
2242
|
+
} catch (f) {
|
|
2157
2243
|
console.warn(
|
|
2158
2244
|
"Failed to initialize noSleep:",
|
|
2159
|
-
|
|
2245
|
+
f
|
|
2160
2246
|
);
|
|
2161
2247
|
}
|
|
2162
2248
|
}
|
|
2163
|
-
|
|
2249
|
+
t({ isBackworker: c });
|
|
2164
2250
|
});
|
|
2165
2251
|
}, 100);
|
|
2252
|
+
Ke().catch((c) => {
|
|
2253
|
+
clearInterval(a), clearTimeout(i), console.error(c), e(c);
|
|
2254
|
+
});
|
|
2166
2255
|
});
|
|
2167
2256
|
}
|
|
2168
2257
|
/**
|
|
@@ -2171,23 +2260,23 @@ class Je {
|
|
|
2171
2260
|
* @param {any} value - Значение для установки (если не указано, метод вернет текущее значение)
|
|
2172
2261
|
* @returns {any}
|
|
2173
2262
|
*/
|
|
2174
|
-
userOption(
|
|
2263
|
+
userOption(t, e) {
|
|
2175
2264
|
if (typeof BX24 > "u" || !BX24.userOption) {
|
|
2176
2265
|
console.warn(
|
|
2177
2266
|
"BX24.userOption is not available. Make sure BX24 is initialized."
|
|
2178
2267
|
);
|
|
2179
2268
|
return;
|
|
2180
2269
|
}
|
|
2181
|
-
return
|
|
2270
|
+
return e !== void 0 ? BX24.userOption.set(t, e) : BX24.userOption.get(t);
|
|
2182
2271
|
}
|
|
2183
|
-
appOption(
|
|
2272
|
+
appOption(t, e) {
|
|
2184
2273
|
if (typeof BX24 > "u" || !BX24.appOption) {
|
|
2185
2274
|
console.warn(
|
|
2186
2275
|
"BX24.appOption is not available. Make sure BX24 is initialized."
|
|
2187
2276
|
);
|
|
2188
2277
|
return;
|
|
2189
2278
|
}
|
|
2190
|
-
return
|
|
2279
|
+
return e !== void 0 ? BX24.appOption.set(t, e) : BX24.appOption.get(t);
|
|
2191
2280
|
}
|
|
2192
2281
|
/**
|
|
2193
2282
|
* @param {{
|
|
@@ -2207,23 +2296,23 @@ class Je {
|
|
|
2207
2296
|
* }[]
|
|
2208
2297
|
* }[]
|
|
2209
2298
|
*/
|
|
2210
|
-
async call({ method:
|
|
2299
|
+
async call({ method: t, params: e, updateList: r }) {
|
|
2211
2300
|
let i;
|
|
2212
2301
|
if (r && (i = this.logger.start({
|
|
2213
2302
|
type: "call",
|
|
2214
|
-
data: { method:
|
|
2215
|
-
})),
|
|
2303
|
+
data: { method: t, params: e, updateList: r }
|
|
2304
|
+
})), e || (e = {}), typeof BX24 > "u" || !BX24.callMethod) {
|
|
2216
2305
|
const h = new Error("BX24 is not initialized");
|
|
2217
2306
|
throw console.error(h), h;
|
|
2218
2307
|
}
|
|
2219
|
-
const
|
|
2220
|
-
return
|
|
2221
|
-
answer:
|
|
2308
|
+
const c = await O(this, ut, Dt).call(this).call({ method: t, params: e });
|
|
2309
|
+
return c.success ? (await O(this, $, ot).call(this, i, {
|
|
2310
|
+
answer: c.answer,
|
|
2222
2311
|
status: "success"
|
|
2223
|
-
}),
|
|
2224
|
-
answer:
|
|
2312
|
+
}), c.data) : (console.error(c.error), await O(this, $, ot).call(this, i, {
|
|
2313
|
+
answer: c.answer,
|
|
2225
2314
|
status: "fail",
|
|
2226
|
-
errorList: { 0:
|
|
2315
|
+
errorList: { 0: c.error || "Unknown call error" }
|
|
2227
2316
|
}), !1);
|
|
2228
2317
|
}
|
|
2229
2318
|
/**
|
|
@@ -2245,15 +2334,15 @@ class Je {
|
|
|
2245
2334
|
* }[]
|
|
2246
2335
|
* }}
|
|
2247
2336
|
*/
|
|
2248
|
-
async batch(
|
|
2337
|
+
async batch(t, e, { errorCall: r, updateList: i, batchOptions: a } = {}) {
|
|
2249
2338
|
if (typeof BX24 > "u" || !BX24.callBatch) {
|
|
2250
|
-
const
|
|
2251
|
-
return console.error(
|
|
2339
|
+
const c = new Error("BX24 is not initialized");
|
|
2340
|
+
return console.error(c), !1;
|
|
2252
2341
|
}
|
|
2253
|
-
return
|
|
2342
|
+
return O(this, Tt, le).call(this, {
|
|
2254
2343
|
mode: "batch",
|
|
2255
|
-
commandList:
|
|
2256
|
-
progressCall:
|
|
2344
|
+
commandList: t,
|
|
2345
|
+
progressCall: e,
|
|
2257
2346
|
errorCall: r,
|
|
2258
2347
|
updateList: i,
|
|
2259
2348
|
batchOptions: a
|
|
@@ -2281,69 +2370,69 @@ class Je {
|
|
|
2281
2370
|
* }}
|
|
2282
2371
|
* @returns {Promise<Object|false>}
|
|
2283
2372
|
*/
|
|
2284
|
-
async batchTotalCount(
|
|
2373
|
+
async batchTotalCount(t, e, { errorCall: r, updateList: i } = {}) {
|
|
2285
2374
|
if (typeof BX24 > "u" || !BX24.callBatch) {
|
|
2286
2375
|
const a = new Error("BX24 is not initialized");
|
|
2287
2376
|
return console.error(a), !1;
|
|
2288
2377
|
}
|
|
2289
|
-
return
|
|
2378
|
+
return O(this, Tt, le).call(this, {
|
|
2290
2379
|
mode: "batch-total-count",
|
|
2291
|
-
commandList:
|
|
2292
|
-
progressCall:
|
|
2380
|
+
commandList: t,
|
|
2381
|
+
progressCall: e,
|
|
2293
2382
|
errorCall: r,
|
|
2294
2383
|
updateList: i
|
|
2295
2384
|
});
|
|
2296
2385
|
}
|
|
2297
2386
|
/** Запрос данных о местах встройки приложения */
|
|
2298
2387
|
async getPlacement() {
|
|
2299
|
-
const
|
|
2300
|
-
return this.placeData || (this.placeData =
|
|
2388
|
+
const t = await this.call({ method: "placement.get" });
|
|
2389
|
+
return this.placeData || (this.placeData = t), t;
|
|
2301
2390
|
}
|
|
2302
2391
|
/**
|
|
2303
2392
|
* Встройка приложения в указанные места
|
|
2304
2393
|
* @param {string|string[]|Object|Object[]} place - Место или массив мест для встройки
|
|
2305
2394
|
*/
|
|
2306
|
-
async placementBind(
|
|
2307
|
-
var
|
|
2395
|
+
async placementBind(t) {
|
|
2396
|
+
var l;
|
|
2308
2397
|
if (!this.isAdmin || (this.placeData = await this.getPlacement(), !this.placeData))
|
|
2309
2398
|
return;
|
|
2310
|
-
const { appName:
|
|
2311
|
-
let i =
|
|
2399
|
+
const { appName: e, pathApp: r } = this.appConst;
|
|
2400
|
+
let i = O(this, Et, ce).call(this, t);
|
|
2312
2401
|
i = i.filter(
|
|
2313
|
-
(
|
|
2402
|
+
(A) => A.placement !== "PAGE_BACKGROUND_WORKER" && A.placement !== "PAGE_BACKGROUND_WORKER_ALL"
|
|
2314
2403
|
);
|
|
2315
|
-
const a =
|
|
2316
|
-
for (const
|
|
2317
|
-
|
|
2404
|
+
const a = O(this, qt, ke).call(this, r), c = new Set(i.map((A) => A.placement));
|
|
2405
|
+
for (const A of a)
|
|
2406
|
+
c.has(A.placement) || i.push({ placement: A.placement });
|
|
2318
2407
|
if (i.length === 0)
|
|
2319
2408
|
return;
|
|
2320
|
-
let h =
|
|
2321
|
-
this.domain === "szdl.bitrix24.ru" && ((
|
|
2322
|
-
const
|
|
2323
|
-
for (const
|
|
2324
|
-
|
|
2325
|
-
for (let
|
|
2326
|
-
const { placement:
|
|
2327
|
-
if (
|
|
2328
|
-
(
|
|
2409
|
+
let h = e;
|
|
2410
|
+
this.domain === "szdl.bitrix24.ru" && ((l = this.appInfo) != null && l.ID) && (h = `${e}: #${this.appInfo.ID}`);
|
|
2411
|
+
const f = h.replace(" CRM", ""), n = {}, m = [], u = /* @__PURE__ */ new Map();
|
|
2412
|
+
for (const A of this.placeData)
|
|
2413
|
+
u.has(A.placement) || u.set(A.placement, []), u.get(A.placement).push(A);
|
|
2414
|
+
for (let A = 0; A < i.length; A++) {
|
|
2415
|
+
const { placement: p, options: _ } = i[A], E = u.get(p) || [];
|
|
2416
|
+
if (E.some(
|
|
2417
|
+
(y) => y.handler === r
|
|
2329
2418
|
))
|
|
2330
2419
|
continue;
|
|
2331
|
-
const T =
|
|
2332
|
-
(
|
|
2420
|
+
const T = E.filter(
|
|
2421
|
+
(y) => y.handler !== r
|
|
2333
2422
|
);
|
|
2334
|
-
for (const
|
|
2423
|
+
for (const y of T)
|
|
2335
2424
|
m.push({
|
|
2336
|
-
placement:
|
|
2337
|
-
handler:
|
|
2425
|
+
placement: p,
|
|
2426
|
+
handler: y.handler
|
|
2338
2427
|
});
|
|
2339
|
-
n[`bind_${
|
|
2428
|
+
n[`bind_${A}`] = {
|
|
2340
2429
|
method: "placement.bind",
|
|
2341
2430
|
params: {
|
|
2342
|
-
PLACEMENT:
|
|
2431
|
+
PLACEMENT: p,
|
|
2343
2432
|
HANDLER: r,
|
|
2344
2433
|
LANG_ALL: {
|
|
2345
2434
|
ru: {
|
|
2346
|
-
TITLE:
|
|
2435
|
+
TITLE: p === "USER_PROFILE_TOOLBAR" ? f : h
|
|
2347
2436
|
}
|
|
2348
2437
|
},
|
|
2349
2438
|
OPTIONS: {
|
|
@@ -2353,51 +2442,51 @@ class Je {
|
|
|
2353
2442
|
}
|
|
2354
2443
|
};
|
|
2355
2444
|
}
|
|
2356
|
-
m.length > 0 && await this.placementUnBind(m), Object.keys(n).length > 0 && (await this.batch(n), this.placeData = await this.getPlacement(), Object.values(n).forEach((
|
|
2357
|
-
console.log("Приложение успешно встроено в",
|
|
2445
|
+
m.length > 0 && await this.placementUnBind(m), Object.keys(n).length > 0 && (await this.batch(n), this.placeData = await this.getPlacement(), Object.values(n).forEach((A) => {
|
|
2446
|
+
console.log("Приложение успешно встроено в", A.params.PLACEMENT);
|
|
2358
2447
|
}));
|
|
2359
2448
|
}
|
|
2360
2449
|
/**
|
|
2361
2450
|
* Отвязка встройки из указанных мест
|
|
2362
2451
|
* @param {string|string[]|Object|Object[]} place - Место или массив мест для отвязки
|
|
2363
2452
|
*/
|
|
2364
|
-
async placementUnBind(
|
|
2365
|
-
let
|
|
2366
|
-
if (
|
|
2453
|
+
async placementUnBind(t) {
|
|
2454
|
+
let e = O(this, Et, ce).call(this, t);
|
|
2455
|
+
if (e = e.filter(
|
|
2367
2456
|
(i) => i.placement !== "PAGE_BACKGROUND_WORKER" && i.placement !== "PAGE_BACKGROUND_WORKER_ALL"
|
|
2368
|
-
),
|
|
2457
|
+
), e.length === 0)
|
|
2369
2458
|
return;
|
|
2370
2459
|
const r = {};
|
|
2371
|
-
for (let i = 0; i <
|
|
2460
|
+
for (let i = 0; i < e.length; i++) {
|
|
2372
2461
|
const a = {
|
|
2373
|
-
PLACEMENT:
|
|
2462
|
+
PLACEMENT: e[i].placement
|
|
2374
2463
|
};
|
|
2375
|
-
|
|
2464
|
+
e[i].handler && (a.HANDLER = e[i].handler), r[`unbind_${i}`] = {
|
|
2376
2465
|
method: "placement.unbind",
|
|
2377
2466
|
params: a
|
|
2378
2467
|
};
|
|
2379
2468
|
}
|
|
2380
|
-
await this.batch(r),
|
|
2469
|
+
await this.batch(r), e.forEach((i) => {
|
|
2381
2470
|
console.log("Встройка отвязана", i.placement);
|
|
2382
2471
|
});
|
|
2383
2472
|
}
|
|
2384
2473
|
/** Чат-бот */
|
|
2385
2474
|
/* получение списка ботов */
|
|
2386
2475
|
async getBotList() {
|
|
2387
|
-
const
|
|
2476
|
+
const t = await this.call({
|
|
2388
2477
|
method: "imbot.bot.list",
|
|
2389
2478
|
params: {}
|
|
2390
|
-
}),
|
|
2391
|
-
return console.log("chat-bot list:",
|
|
2479
|
+
}), e = Object.values(t);
|
|
2480
|
+
return console.log("chat-bot list:", e), e;
|
|
2392
2481
|
}
|
|
2393
2482
|
/* регистрация бота */
|
|
2394
|
-
async regBot({ code:
|
|
2395
|
-
const { appName: i, pathApp: a, chatBotLogo:
|
|
2483
|
+
async regBot({ code: t, type: e, name: r }) {
|
|
2484
|
+
const { appName: i, pathApp: a, chatBotLogo: c } = this.appConst, h = this.appInfo.ID, f = await this.call({
|
|
2396
2485
|
method: "imbot.register",
|
|
2397
2486
|
params: {
|
|
2398
|
-
CODE:
|
|
2487
|
+
CODE: t ?? this.appInfo.CODE,
|
|
2399
2488
|
// Строковой идентификатор бота, уникальный в рамках вашего приложения (обяз.)
|
|
2400
|
-
TYPE:
|
|
2489
|
+
TYPE: e ?? "O",
|
|
2401
2490
|
// Тип бота, B - чат-бот, ответы поступают сразу, H - человек, ответы поступают с задержкой от 2-х до 10 секунд, O - чат-бот для Открытых линий, S - чат-бот с повышенными привилегиями (supervisor)
|
|
2402
2491
|
EVENT_HANDLER: a,
|
|
2403
2492
|
// Ссылка на обработчик событий, поступивших от сервера - см. Обработчики событий ниже (обяз).
|
|
@@ -2415,7 +2504,7 @@ class Je {
|
|
|
2415
2504
|
// Цвет чат-бота для мобильного приложения RED, GREEN, MINT, LIGHT_BLUE, DARK_BLUE, PURPLE, AQUA, PINK, LIME, BROWN, AZURE, KHAKI, SAND, MARENGO, GRAY, GRAPHITE
|
|
2416
2505
|
EMAIL: "",
|
|
2417
2506
|
// E-mail для связи. НЕЛЬЗЯ использовать e-mail, дублирующий e-mail реальных пользователей
|
|
2418
|
-
PERSONAL_BIRTHDAY:
|
|
2507
|
+
PERSONAL_BIRTHDAY: St().format("%Y-%m-%d"),
|
|
2419
2508
|
// День рождения в формате YYYY-mm-dd
|
|
2420
2509
|
WORK_POSITION: "Почтальон",
|
|
2421
2510
|
// Занимаемая должность, используется как описание чат-бота
|
|
@@ -2423,34 +2512,34 @@ class Je {
|
|
|
2423
2512
|
// Ссылка на сайт
|
|
2424
2513
|
PERSONAL_GENDER: "M",
|
|
2425
2514
|
// Пол чат-бота, допустимые значения M - мужской, F - женский, пусто, если не требуется указывать
|
|
2426
|
-
PERSONAL_PHOTO:
|
|
2515
|
+
PERSONAL_PHOTO: c ?? ""
|
|
2427
2516
|
// Аватар чат-бота - base64
|
|
2428
2517
|
}
|
|
2429
2518
|
}
|
|
2430
2519
|
});
|
|
2431
|
-
return console.log("Чат-бот добавлен",
|
|
2520
|
+
return console.log("Чат-бот добавлен", f), f;
|
|
2432
2521
|
}
|
|
2433
2522
|
/* Убрать регистрацию бота */
|
|
2434
|
-
async unRegBot(
|
|
2435
|
-
const
|
|
2523
|
+
async unRegBot(t) {
|
|
2524
|
+
const e = await this.call({
|
|
2436
2525
|
method: "imbot.unregister",
|
|
2437
2526
|
params: {
|
|
2438
|
-
BOT_ID:
|
|
2527
|
+
BOT_ID: t
|
|
2439
2528
|
}
|
|
2440
2529
|
});
|
|
2441
|
-
return console.log("чат-бот удален",
|
|
2530
|
+
return console.log("чат-бот удален", e), e;
|
|
2442
2531
|
}
|
|
2443
2532
|
/* Получение данных логера */
|
|
2444
|
-
getLoggerList(
|
|
2445
|
-
return this.logger.getEntityList(
|
|
2533
|
+
getLoggerList(t) {
|
|
2534
|
+
return this.logger.getEntityList(t);
|
|
2446
2535
|
}
|
|
2447
2536
|
}
|
|
2448
|
-
ut = new WeakSet(),
|
|
2537
|
+
ut = new WeakSet(), Dt = function() {
|
|
2449
2538
|
return this.batchClient || (this.batchClient = new K({
|
|
2450
2539
|
callBatch: BX24.callBatch,
|
|
2451
2540
|
callMethod: BX24.callMethod
|
|
2452
2541
|
}), this.timeLimit = this.batchClient.timeLimit), this.batchClient;
|
|
2453
|
-
},
|
|
2542
|
+
}, Xt = new WeakSet(), Se = function() {
|
|
2454
2543
|
return {
|
|
2455
2544
|
start: () => {
|
|
2456
2545
|
},
|
|
@@ -2459,140 +2548,140 @@ ut = new WeakSet(), Mt = function() {
|
|
|
2459
2548
|
getEntityList: () => {
|
|
2460
2549
|
}
|
|
2461
2550
|
};
|
|
2462
|
-
}, _t = new WeakSet(),
|
|
2463
|
-
this.logger ? (this.logger = new
|
|
2464
|
-
},
|
|
2551
|
+
}, _t = new WeakSet(), oe = async function(t, { skipInit: e = !1 } = {}) {
|
|
2552
|
+
this.logger ? (this.logger = new xe(), e ? this.logger.enableBackworkerMode() : await this.logger.init(), t && typeof this.logger.runStorageMaintenance == "function" && this.logger.runStorageMaintenance()) : this.logger = O(this, Xt, Se).call(this);
|
|
2553
|
+
}, Jt = new WeakSet(), Me = function() {
|
|
2465
2554
|
var r, i, a;
|
|
2466
|
-
const
|
|
2467
|
-
return
|
|
2468
|
-
},
|
|
2555
|
+
const t = (r = this.placeInfo) == null ? void 0 : r.placement, e = (a = (i = this.placeInfo) == null ? void 0 : i.options) == null ? void 0 : a.ID;
|
|
2556
|
+
return t === "PAGE_BACKGROUND_WORKER" || e === "PAGE_BACKGROUND_WORKER";
|
|
2557
|
+
}, jt = new WeakSet(), Ie = function() {
|
|
2469
2558
|
return this.call({ method: "app.info" });
|
|
2470
|
-
},
|
|
2559
|
+
}, Kt = new WeakSet(), De = function() {
|
|
2471
2560
|
return this.call({ method: "user.current" });
|
|
2472
|
-
}, $ = new WeakSet(), ot = async function(
|
|
2473
|
-
if (
|
|
2561
|
+
}, $ = new WeakSet(), ot = async function(t, e) {
|
|
2562
|
+
if (t)
|
|
2474
2563
|
try {
|
|
2475
2564
|
await this.logger.stop({
|
|
2476
|
-
key:
|
|
2477
|
-
...
|
|
2565
|
+
key: t,
|
|
2566
|
+
...e
|
|
2478
2567
|
});
|
|
2479
2568
|
} catch (r) {
|
|
2480
2569
|
console.error("Logger error:", r);
|
|
2481
2570
|
}
|
|
2482
|
-
}, Tt = new WeakSet(),
|
|
2483
|
-
mode:
|
|
2484
|
-
commandList:
|
|
2571
|
+
}, Tt = new WeakSet(), le = async function({
|
|
2572
|
+
mode: t,
|
|
2573
|
+
commandList: e,
|
|
2485
2574
|
progressCall: r,
|
|
2486
2575
|
errorCall: i,
|
|
2487
2576
|
updateList: a,
|
|
2488
|
-
batchOptions:
|
|
2577
|
+
batchOptions: c
|
|
2489
2578
|
}) {
|
|
2490
|
-
const h =
|
|
2491
|
-
type:
|
|
2492
|
-
data:
|
|
2579
|
+
const h = O(this, ut, Dt).call(this), f = a ? this.logger.start({
|
|
2580
|
+
type: t,
|
|
2581
|
+
data: t === "batch" ? { commandList: e, updateList: a } : { commandList: e }
|
|
2493
2582
|
}) : void 0;
|
|
2494
2583
|
try {
|
|
2495
|
-
const n =
|
|
2496
|
-
return Object.keys(m).length ? (i && i(m), await
|
|
2584
|
+
const n = t === "batch" ? await h.batch(e, r, c) : await h.batchTotalCount(e, r), m = O(this, zt, Be).call(this, h, n, e, a);
|
|
2585
|
+
return Object.keys(m).length ? (i && i(m), await O(this, $, ot).call(this, f, {
|
|
2497
2586
|
status: "fail",
|
|
2498
2587
|
errorList: m
|
|
2499
|
-
})) : await
|
|
2588
|
+
})) : await O(this, $, ot).call(this, f, { status: "success" }), n;
|
|
2500
2589
|
} catch (n) {
|
|
2501
|
-
return await
|
|
2590
|
+
return await O(this, $, ot).call(this, f, {
|
|
2502
2591
|
status: "fail-runtime",
|
|
2503
2592
|
errorList: { 0: n == null ? void 0 : n.toString() }
|
|
2504
2593
|
}), console.error(n), !1;
|
|
2505
2594
|
}
|
|
2506
|
-
},
|
|
2507
|
-
let a = { ...
|
|
2508
|
-
if (Object.values(
|
|
2595
|
+
}, zt = new WeakSet(), Be = function(t, e, r, i) {
|
|
2596
|
+
let a = { ...t.errors };
|
|
2597
|
+
if (Object.values(t.errors).some(
|
|
2509
2598
|
(h) => {
|
|
2510
2599
|
if (typeof h != "string")
|
|
2511
2600
|
return !1;
|
|
2512
|
-
const
|
|
2513
|
-
return
|
|
2601
|
+
const f = h.toUpperCase();
|
|
2602
|
+
return f === "TIMEOUT" || f === "OPERATION_TIME_LIMIT" || f.includes("TIMEOUT") || f.includes("OPERATION_TIME_LIMIT");
|
|
2514
2603
|
}
|
|
2515
2604
|
) && i) {
|
|
2516
|
-
const h =
|
|
2517
|
-
(
|
|
2518
|
-
) : [],
|
|
2519
|
-
if (
|
|
2520
|
-
for (const
|
|
2521
|
-
if (!
|
|
2522
|
-
const
|
|
2523
|
-
|
|
2605
|
+
const h = e ? Object.keys(e).filter(
|
|
2606
|
+
(u) => u !== "errorsList" && u !== "errorsListMessages"
|
|
2607
|
+
) : [], f = new Set(Object.keys(t.errors || {})), n = /* @__PURE__ */ new Set();
|
|
2608
|
+
if (e) {
|
|
2609
|
+
for (const u of h)
|
|
2610
|
+
if (!f.has(u)) {
|
|
2611
|
+
const l = e[u];
|
|
2612
|
+
l != null && n.add(u);
|
|
2524
2613
|
}
|
|
2525
2614
|
}
|
|
2526
|
-
const m = Object.values(
|
|
2527
|
-
(
|
|
2528
|
-
if (typeof
|
|
2615
|
+
const m = Object.values(t.errors).find(
|
|
2616
|
+
(u) => {
|
|
2617
|
+
if (typeof u != "string")
|
|
2529
2618
|
return !1;
|
|
2530
|
-
const
|
|
2531
|
-
return
|
|
2619
|
+
const l = u.toUpperCase();
|
|
2620
|
+
return l === "TIMEOUT" || l === "OPERATION_TIME_LIMIT" || l.includes("TIMEOUT") || l.includes("OPERATION_TIME_LIMIT");
|
|
2532
2621
|
}
|
|
2533
2622
|
);
|
|
2534
|
-
for (const
|
|
2535
|
-
!n.has(
|
|
2623
|
+
for (const u of Object.keys(r))
|
|
2624
|
+
!n.has(u) && !t.errors[u] && (a[u] = m || "TIMEOUT или OPERATION_TIME_LIMIT: запрос не был обработан");
|
|
2536
2625
|
}
|
|
2537
2626
|
return a;
|
|
2538
|
-
}, Et = new WeakSet(),
|
|
2539
|
-
if (!
|
|
2627
|
+
}, Et = new WeakSet(), ce = function(t) {
|
|
2628
|
+
if (!t)
|
|
2540
2629
|
return [];
|
|
2541
|
-
let
|
|
2542
|
-
return Array.isArray(
|
|
2630
|
+
let e = [];
|
|
2631
|
+
return Array.isArray(t) ? e = t.map(
|
|
2543
2632
|
(r) => typeof r == "string" ? { placement: r } : r
|
|
2544
|
-
) : typeof
|
|
2545
|
-
},
|
|
2546
|
-
return this.placeData ? this.placeData.filter((
|
|
2633
|
+
) : typeof t == "string" ? e = [{ placement: t }] : e = [t], e;
|
|
2634
|
+
}, qt = new WeakSet(), ke = function(t) {
|
|
2635
|
+
return this.placeData ? this.placeData.filter((e) => !(e.placement === "PAGE_BACKGROUND_WORKER" || !e.handler || e.handler.includes(t))) : [];
|
|
2547
2636
|
};
|
|
2548
|
-
const
|
|
2549
|
-
function
|
|
2637
|
+
const we = "szdl-utils-kit|";
|
|
2638
|
+
function ze() {
|
|
2550
2639
|
if (typeof sessionStorage > "u")
|
|
2551
2640
|
return `ephemeral-${Date.now()}-${Math.random().toString(16).slice(2)}`;
|
|
2552
2641
|
let d = sessionStorage.getItem("szdl-cross-tab-instance-id");
|
|
2553
2642
|
return d || (d = `${Date.now()}-${Math.random().toString(16).slice(2)}`, sessionStorage.setItem("szdl-cross-tab-instance-id", d)), d;
|
|
2554
2643
|
}
|
|
2555
|
-
function
|
|
2644
|
+
function qe() {
|
|
2556
2645
|
return typeof navigator < "u" && typeof navigator.locks < "u" && typeof navigator.locks.request == "function";
|
|
2557
2646
|
}
|
|
2558
|
-
const
|
|
2559
|
-
function
|
|
2647
|
+
const te = /* @__PURE__ */ new Map();
|
|
2648
|
+
function Qe(d = "default") {
|
|
2560
2649
|
if (typeof BroadcastChannel > "u")
|
|
2561
2650
|
return null;
|
|
2562
|
-
const
|
|
2563
|
-
return
|
|
2651
|
+
const t = `${we}bc:${d}`;
|
|
2652
|
+
return te.has(t) || te.set(t, new BroadcastChannel(t)), te.get(t);
|
|
2564
2653
|
}
|
|
2565
|
-
function
|
|
2566
|
-
const
|
|
2567
|
-
if (
|
|
2654
|
+
function fe(d, t) {
|
|
2655
|
+
const e = Qe(d);
|
|
2656
|
+
if (e)
|
|
2568
2657
|
try {
|
|
2569
|
-
const r =
|
|
2570
|
-
|
|
2658
|
+
const r = t && typeof t == "object" && !Array.isArray(t) ? t : { data: t };
|
|
2659
|
+
e.postMessage({
|
|
2571
2660
|
...r,
|
|
2572
|
-
tabId:
|
|
2661
|
+
tabId: ze(),
|
|
2573
2662
|
ts: Date.now()
|
|
2574
2663
|
});
|
|
2575
2664
|
} catch {
|
|
2576
2665
|
}
|
|
2577
2666
|
}
|
|
2578
|
-
async function
|
|
2579
|
-
const { ifAvailable: r = !1 } =
|
|
2580
|
-
return
|
|
2667
|
+
async function Ze(d, t, e = {}) {
|
|
2668
|
+
const { ifAvailable: r = !1 } = e, i = typeof d == "string" && d.length > 0 ? d : "default", a = `${we}${i}`;
|
|
2669
|
+
return qe() ? navigator.locks.request(
|
|
2581
2670
|
a,
|
|
2582
2671
|
{ mode: "exclusive", ifAvailable: !!r },
|
|
2583
|
-
async (
|
|
2584
|
-
if (r &&
|
|
2672
|
+
async (c) => {
|
|
2673
|
+
if (r && c == null)
|
|
2585
2674
|
return { skipped: !0, coordination: "locks" };
|
|
2586
|
-
|
|
2675
|
+
fe(i, { type: "lock-acquired", resource: i });
|
|
2587
2676
|
try {
|
|
2588
|
-
return { skipped: !1, result: await
|
|
2677
|
+
return { skipped: !1, result: await t(), coordination: "locks" };
|
|
2589
2678
|
} finally {
|
|
2590
|
-
|
|
2679
|
+
fe(i, { type: "lock-released", resource: i });
|
|
2591
2680
|
}
|
|
2592
2681
|
}
|
|
2593
|
-
) : { skipped: !1, result: await
|
|
2682
|
+
) : { skipped: !1, result: await t(), coordination: "none" };
|
|
2594
2683
|
}
|
|
2595
|
-
const
|
|
2684
|
+
const z = {
|
|
2596
2685
|
/** Пауза перед первым тиком — разносит старт разных приложений (0 = сразу). */
|
|
2597
2686
|
startDelayMs: 0,
|
|
2598
2687
|
/** Базовый интервал poll-тиков. */
|
|
@@ -2608,82 +2697,82 @@ const q = {
|
|
|
2608
2697
|
/** Heartbeat лидера во время appInit; null — вычислить из poll/activeMaxPause. */
|
|
2609
2698
|
leaderHeartbeatMs: null
|
|
2610
2699
|
};
|
|
2611
|
-
function
|
|
2700
|
+
function Ve(d) {
|
|
2612
2701
|
return d == null ? "user" : d === "user" || d === "portal" ? d : (console.warn(
|
|
2613
2702
|
`BackgroundWorker: coordinationScope должен быть 'user' или 'portal', получено ${JSON.stringify(d)} — используется 'user'`
|
|
2614
2703
|
), "user");
|
|
2615
2704
|
}
|
|
2616
|
-
function
|
|
2617
|
-
const
|
|
2618
|
-
for (const
|
|
2619
|
-
if (
|
|
2705
|
+
function $e(d = {}) {
|
|
2706
|
+
const t = { ...z, ...d };
|
|
2707
|
+
for (const e of Object.keys(z)) {
|
|
2708
|
+
if (e === "leaderHeartbeatMs") {
|
|
2620
2709
|
const i = d == null ? void 0 : d.leaderHeartbeatMs;
|
|
2621
2710
|
if (i == null) {
|
|
2622
|
-
|
|
2711
|
+
t.leaderHeartbeatMs = null;
|
|
2623
2712
|
continue;
|
|
2624
2713
|
}
|
|
2625
2714
|
const a = Number(i);
|
|
2626
|
-
|
|
2715
|
+
t.leaderHeartbeatMs = Number.isFinite(a) && a >= 0 ? a : null;
|
|
2627
2716
|
continue;
|
|
2628
2717
|
}
|
|
2629
|
-
const r = Number(e
|
|
2630
|
-
e
|
|
2718
|
+
const r = Number(t[e]);
|
|
2719
|
+
t[e] = Number.isFinite(r) && r >= 0 ? r : z[e];
|
|
2631
2720
|
}
|
|
2632
|
-
return
|
|
2721
|
+
return t;
|
|
2633
2722
|
}
|
|
2634
|
-
var
|
|
2635
|
-
class
|
|
2636
|
-
constructor(
|
|
2637
|
-
|
|
2723
|
+
var Qt, Ce, Rt, Ae, at, mt, Zt, He;
|
|
2724
|
+
class ss {
|
|
2725
|
+
constructor(t) {
|
|
2726
|
+
R(this, Qt);
|
|
2638
2727
|
/**
|
|
2639
2728
|
* Канонический base URL для placement (без завершающего `/`).
|
|
2640
2729
|
* Пустая строка — не биндить (некорректный или marketplace URL).
|
|
2641
2730
|
*/
|
|
2642
|
-
|
|
2731
|
+
R(this, Rt);
|
|
2643
2732
|
/** Ключ NAME в entity: userId или общий ключ портала. */
|
|
2644
|
-
|
|
2733
|
+
R(this, at);
|
|
2645
2734
|
/** Имя Web Lock для подтверждения лидерства. */
|
|
2646
|
-
|
|
2647
|
-
|
|
2648
|
-
|
|
2649
|
-
|
|
2650
|
-
|
|
2651
|
-
|
|
2652
|
-
|
|
2653
|
-
|
|
2654
|
-
|
|
2655
|
-
|
|
2656
|
-
|
|
2657
|
-
|
|
2658
|
-
|
|
2659
|
-
|
|
2660
|
-
|
|
2661
|
-
|
|
2662
|
-
|
|
2663
|
-
|
|
2664
|
-
|
|
2735
|
+
R(this, Zt);
|
|
2736
|
+
I(this, "entityName", "tabs");
|
|
2737
|
+
I(this, "maxTabs", 20);
|
|
2738
|
+
I(this, "tabList", []);
|
|
2739
|
+
I(this, "id", 0);
|
|
2740
|
+
I(this, "hasStarted", !1);
|
|
2741
|
+
I(this, "heartbeat");
|
|
2742
|
+
I(this, "runHeartbeat");
|
|
2743
|
+
I(this, "startDelay", 0);
|
|
2744
|
+
I(this, "activeMaxPause", z.activeMaxPauseMs);
|
|
2745
|
+
I(this, "quickCleanupThreshold", z.quickCleanupThresholdMs);
|
|
2746
|
+
I(this, "pollInterval", z.pollIntervalMs);
|
|
2747
|
+
I(this, "pollIntervalBase", z.pollIntervalMs);
|
|
2748
|
+
I(this, "pollIntervalJitter", z.pollIntervalJitterMs);
|
|
2749
|
+
I(this, "leaderConfirmDelay", z.leaderConfirmDelayMs);
|
|
2750
|
+
I(this, "leaderHeartbeatMs", null);
|
|
2751
|
+
I(this, "sessionId", `${Date.now()}-${Math.random().toString(16).slice(2)}`);
|
|
2752
|
+
I(this, "continueCondition");
|
|
2753
|
+
I(this, "defaultContinueBackground", () => !0);
|
|
2665
2754
|
/** @type {'user' | 'portal'} */
|
|
2666
|
-
|
|
2755
|
+
I(this, "coordinationScope", "user");
|
|
2667
2756
|
/** Привязывать общую встройку PAGE_BACKGROUND_WORKER без USER_ID. @default true */
|
|
2668
|
-
|
|
2757
|
+
I(this, "bindGeneralPlacement", !0);
|
|
2669
2758
|
/** @type {boolean | ((worker: BackgroundWorker) => boolean | Promise<boolean>) | undefined} */
|
|
2670
|
-
|
|
2671
|
-
var m,
|
|
2672
|
-
if (!
|
|
2759
|
+
I(this, "ensureAdminPlacementsBeforeAppInit");
|
|
2760
|
+
var m, u, l;
|
|
2761
|
+
if (!t) {
|
|
2673
2762
|
console.error("BackgroundWorker: Нет опций конструктора");
|
|
2674
2763
|
return;
|
|
2675
2764
|
}
|
|
2676
2765
|
const {
|
|
2677
|
-
appFunc:
|
|
2766
|
+
appFunc: e,
|
|
2678
2767
|
bx: r,
|
|
2679
2768
|
users: i,
|
|
2680
2769
|
continueBackground: a,
|
|
2681
|
-
timing:
|
|
2770
|
+
timing: c,
|
|
2682
2771
|
coordinationScope: h,
|
|
2683
|
-
bindGeneralPlacement:
|
|
2772
|
+
bindGeneralPlacement: f,
|
|
2684
2773
|
ensureAdminPlacementsBeforeAppInit: n
|
|
2685
|
-
} =
|
|
2686
|
-
this.bx = r, this.appInit =
|
|
2774
|
+
} = t;
|
|
2775
|
+
this.bx = r, this.appInit = e, this.users = i, this.coordinationScope = Ve(h), this.bindGeneralPlacement = f !== !1, this.ensureAdminPlacementsBeforeAppInit = n, O(this, Qt, Ce).call(this, c), ae(r), this.appPath = O(this, Rt, Ae).call(this, ((m = r == null ? void 0 : r.appConst) == null ? void 0 : m.pathApp) ?? ""), this.appName = ((u = r == null ? void 0 : r.appConst) == null ? void 0 : u.appName) ?? "", this.appCodeName = ((l = r == null ? void 0 : r.appConst) == null ? void 0 : l.appCodeName) ?? "", this.start = /* @__PURE__ */ new Date(), this.continueCondition = typeof a == "function" ? a : this.defaultContinueBackground;
|
|
2687
2776
|
}
|
|
2688
2777
|
async init() {
|
|
2689
2778
|
if (!this.appInit) {
|
|
@@ -2703,8 +2792,8 @@ class je {
|
|
|
2703
2792
|
await this.checkPlacementType() && await this.continueBackground() && (await this.checkEntity(), await this.refreshTabs(!0), await this.ensureTabRegistered(), this.startDelay > 0 && (console.log(
|
|
2704
2793
|
`BackgroundWorker: старт отложен на ${this.startDelay} мс`
|
|
2705
2794
|
), await this.pause(this.startDelay)), this.heartbeat = setInterval(() => {
|
|
2706
|
-
this.backgroundTick().catch((
|
|
2707
|
-
console.error("BackgroundWorker: backgroundTick failed",
|
|
2795
|
+
this.backgroundTick().catch((e) => {
|
|
2796
|
+
console.error("BackgroundWorker: backgroundTick failed", e);
|
|
2708
2797
|
});
|
|
2709
2798
|
}, this.pollInterval), await this.backgroundTick());
|
|
2710
2799
|
}
|
|
@@ -2716,30 +2805,30 @@ class je {
|
|
|
2716
2805
|
return;
|
|
2717
2806
|
}
|
|
2718
2807
|
await this.refreshTabs(!0), await this.ensureTabRegistered();
|
|
2719
|
-
const
|
|
2808
|
+
const e = this.selectLeaderId(), r = e && +this.id == +e;
|
|
2720
2809
|
await this.updateTabState(r), r && !this.hasStarted && await this.runAsLeader();
|
|
2721
2810
|
}
|
|
2722
2811
|
stopTimers() {
|
|
2723
2812
|
this.heartbeat && (clearInterval(this.heartbeat), this.heartbeat = void 0), this.runHeartbeat && (clearInterval(this.runHeartbeat), this.runHeartbeat = void 0);
|
|
2724
2813
|
}
|
|
2725
2814
|
isAppPage() {
|
|
2726
|
-
var
|
|
2727
|
-
if (typeof BX24 > "u" || !((
|
|
2815
|
+
var t;
|
|
2816
|
+
if (typeof BX24 > "u" || !((t = BX24.placement) != null && t.info))
|
|
2728
2817
|
return !1;
|
|
2729
2818
|
try {
|
|
2730
|
-
const
|
|
2731
|
-
return !
|
|
2819
|
+
const e = BX24.placement.info(), r = e == null ? void 0 : e.placement, i = (e == null ? void 0 : e.options) || {}, a = (i == null ? void 0 : i.URI) || "", c = r === "PAGE_BACKGROUND_WORKER" || (i == null ? void 0 : i.ID) === "PAGE_BACKGROUND_WORKER", h = typeof a == "string" && (a.includes("marketplace/app") || a.includes("marketplace/apps") || a.includes("placement") || a.includes("sozdavatel" + this.appCodeName));
|
|
2820
|
+
return !c || h;
|
|
2732
2821
|
} catch {
|
|
2733
2822
|
return !1;
|
|
2734
2823
|
}
|
|
2735
2824
|
}
|
|
2736
2825
|
async checkEntity() {
|
|
2737
2826
|
var r;
|
|
2738
|
-
const
|
|
2827
|
+
const t = await this.safeCall(
|
|
2739
2828
|
() => this.bx.call({ method: "entity.get" })
|
|
2740
2829
|
);
|
|
2741
|
-
((r =
|
|
2742
|
-
|
|
2830
|
+
((r = t == null ? void 0 : t.find) == null ? void 0 : r.call(
|
|
2831
|
+
t,
|
|
2743
2832
|
(i) => i.ENTITY === this.entityName
|
|
2744
2833
|
)) || await this.safeCall(
|
|
2745
2834
|
() => this.bx.call({
|
|
@@ -2753,17 +2842,17 @@ class je {
|
|
|
2753
2842
|
);
|
|
2754
2843
|
}
|
|
2755
2844
|
async getTabs() {
|
|
2756
|
-
const
|
|
2845
|
+
const t = O(this, at, mt).call(this), e = await this.safeCall(
|
|
2757
2846
|
() => this.bx.call({
|
|
2758
2847
|
method: "entity.item.get",
|
|
2759
2848
|
params: {
|
|
2760
2849
|
ENTITY: this.entityName,
|
|
2761
|
-
FILTER: { NAME:
|
|
2850
|
+
FILTER: { NAME: t },
|
|
2762
2851
|
SORT: { DATE_CREATE: "DESC" }
|
|
2763
2852
|
}
|
|
2764
2853
|
})
|
|
2765
2854
|
);
|
|
2766
|
-
return !Array.isArray(
|
|
2855
|
+
return !Array.isArray(e) || !e.length ? [] : e.map((r) => {
|
|
2767
2856
|
if (!r)
|
|
2768
2857
|
return { id: void 0, data: void 0 };
|
|
2769
2858
|
try {
|
|
@@ -2782,32 +2871,32 @@ class je {
|
|
|
2782
2871
|
return console.log(
|
|
2783
2872
|
"BackgroundWorker: Достигнут лимит вкладок даже после быстрой очистки, не регистрируемся"
|
|
2784
2873
|
), 0;
|
|
2785
|
-
const
|
|
2874
|
+
const t = {
|
|
2786
2875
|
lastActive: (/* @__PURE__ */ new Date()).toISOString(),
|
|
2787
2876
|
createdAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
2788
2877
|
start: !1,
|
|
2789
2878
|
sessionId: this.sessionId,
|
|
2790
2879
|
userId: (i = (r = this.bx) == null ? void 0 : r.userInfo) == null ? void 0 : i.ID
|
|
2791
|
-
},
|
|
2880
|
+
}, e = await this.safeCall(
|
|
2792
2881
|
() => this.bx.call({
|
|
2793
2882
|
method: "entity.item.add",
|
|
2794
2883
|
params: {
|
|
2795
2884
|
ENTITY: this.entityName,
|
|
2796
|
-
NAME:
|
|
2797
|
-
DETAIL_TEXT: JSON.stringify(
|
|
2885
|
+
NAME: O(this, at, mt).call(this),
|
|
2886
|
+
DETAIL_TEXT: JSON.stringify(t)
|
|
2798
2887
|
}
|
|
2799
2888
|
})
|
|
2800
2889
|
) || 0;
|
|
2801
|
-
return this.id = +
|
|
2890
|
+
return this.id = +e || 0, this.id;
|
|
2802
2891
|
}
|
|
2803
|
-
async updateTabState(
|
|
2892
|
+
async updateTabState(t) {
|
|
2804
2893
|
var r, i;
|
|
2805
2894
|
if (!this.id)
|
|
2806
2895
|
return;
|
|
2807
|
-
const
|
|
2896
|
+
const e = {
|
|
2808
2897
|
lastActive: (/* @__PURE__ */ new Date()).toISOString(),
|
|
2809
2898
|
createdAt: this.start.toISOString(),
|
|
2810
|
-
start:
|
|
2899
|
+
start: t,
|
|
2811
2900
|
sessionId: this.sessionId,
|
|
2812
2901
|
userId: (i = (r = this.bx) == null ? void 0 : r.userInfo) == null ? void 0 : i.ID
|
|
2813
2902
|
};
|
|
@@ -2817,25 +2906,25 @@ class je {
|
|
|
2817
2906
|
params: {
|
|
2818
2907
|
ENTITY: this.entityName,
|
|
2819
2908
|
ID: this.id,
|
|
2820
|
-
NAME:
|
|
2821
|
-
DETAIL_TEXT: JSON.stringify(
|
|
2909
|
+
NAME: O(this, at, mt).call(this),
|
|
2910
|
+
DETAIL_TEXT: JSON.stringify(e)
|
|
2822
2911
|
}
|
|
2823
2912
|
})
|
|
2824
2913
|
);
|
|
2825
2914
|
}
|
|
2826
|
-
async deleteTabs(
|
|
2827
|
-
if (!
|
|
2915
|
+
async deleteTabs(t = []) {
|
|
2916
|
+
if (!t.length)
|
|
2828
2917
|
return;
|
|
2829
|
-
const
|
|
2918
|
+
const e = t.map((r) => ({
|
|
2830
2919
|
method: "entity.item.delete",
|
|
2831
2920
|
params: { ENTITY: this.entityName, ID: r.id }
|
|
2832
2921
|
}));
|
|
2833
|
-
await this.safeCall(() => this.bx.batch(
|
|
2922
|
+
await this.safeCall(() => this.bx.batch(e));
|
|
2834
2923
|
}
|
|
2835
2924
|
async checkPlacementType() {
|
|
2836
|
-
var
|
|
2925
|
+
var t, e;
|
|
2837
2926
|
try {
|
|
2838
|
-
if (!((
|
|
2927
|
+
if (!((t = this.bx) != null && t.isAdmin))
|
|
2839
2928
|
return !0;
|
|
2840
2929
|
const r = await this.safeCall(
|
|
2841
2930
|
() => this.bx.getPlacement()
|
|
@@ -2844,16 +2933,16 @@ class je {
|
|
|
2844
2933
|
return console.log(
|
|
2845
2934
|
"BackgroundWorker: Не получили список размещений, продолжаем"
|
|
2846
2935
|
), !0;
|
|
2847
|
-
const i = +(((
|
|
2936
|
+
const i = +(((e = this.bx.userInfo) == null ? void 0 : e.ID) ?? 0), a = this.isIndividualPlacement(
|
|
2848
2937
|
typeof window < "u" ? window.location.href : ""
|
|
2849
|
-
),
|
|
2938
|
+
), c = !a;
|
|
2850
2939
|
if (!i)
|
|
2851
2940
|
return !0;
|
|
2852
2941
|
let h = !1;
|
|
2853
|
-
for (const
|
|
2854
|
-
if (
|
|
2942
|
+
for (const f of r) {
|
|
2943
|
+
if (f.placement !== "PAGE_BACKGROUND_WORKER" || !(f.userId || f.handler && f.handler.includes("USER_ID=")))
|
|
2855
2944
|
continue;
|
|
2856
|
-
const m =
|
|
2945
|
+
const m = f.userId || (f.handler ? this.extractUserIdFromHandler(f.handler) : null);
|
|
2857
2946
|
if (m && +m === i) {
|
|
2858
2947
|
h = !0;
|
|
2859
2948
|
break;
|
|
@@ -2861,7 +2950,7 @@ class je {
|
|
|
2861
2950
|
}
|
|
2862
2951
|
return a ? (console.log(
|
|
2863
2952
|
"BackgroundWorker: Индивидуальная встройка - разрешено"
|
|
2864
|
-
), !0) :
|
|
2953
|
+
), !0) : c && h ? (console.log(
|
|
2865
2954
|
"BackgroundWorker: Есть личная встройка, общую не запускаем"
|
|
2866
2955
|
), !1) : (console.log(
|
|
2867
2956
|
"BackgroundWorker: Проверка типа встройки пройдена, продолжаем"
|
|
@@ -2873,64 +2962,64 @@ class je {
|
|
|
2873
2962
|
), !0;
|
|
2874
2963
|
}
|
|
2875
2964
|
}
|
|
2876
|
-
isIndividualPlacement(
|
|
2877
|
-
return !
|
|
2965
|
+
isIndividualPlacement(t) {
|
|
2966
|
+
return !t || typeof t != "string" ? !1 : t.includes("USER_ID=");
|
|
2878
2967
|
}
|
|
2879
|
-
extractUserIdFromHandler(
|
|
2880
|
-
if (!
|
|
2968
|
+
extractUserIdFromHandler(t) {
|
|
2969
|
+
if (!t || typeof t != "string")
|
|
2881
2970
|
return null;
|
|
2882
|
-
const
|
|
2883
|
-
return
|
|
2971
|
+
const e = t.match(/USER_ID=(\d+)/);
|
|
2972
|
+
return e ? +e[1] : null;
|
|
2884
2973
|
}
|
|
2885
2974
|
async continueBackground() {
|
|
2886
2975
|
try {
|
|
2887
|
-
const
|
|
2976
|
+
const e = !!await Promise.resolve(
|
|
2888
2977
|
this.continueCondition(this)
|
|
2889
2978
|
);
|
|
2890
|
-
return console.log(
|
|
2891
|
-
} catch (
|
|
2979
|
+
return console.log(e ? "BackgroundWorker: Условие продолжения выполнено" : "BackgroundWorker: continueBackground вернул false"), e;
|
|
2980
|
+
} catch (t) {
|
|
2892
2981
|
return console.error(
|
|
2893
2982
|
"BackgroundWorker: Ошибка в continueCondition",
|
|
2894
|
-
|
|
2983
|
+
t
|
|
2895
2984
|
), !1;
|
|
2896
2985
|
}
|
|
2897
2986
|
}
|
|
2898
|
-
async refreshTabs(
|
|
2899
|
-
const r = [], i = [], a = Date.now(),
|
|
2900
|
-
for (const h of
|
|
2987
|
+
async refreshTabs(t = !1, e = this.activeMaxPause) {
|
|
2988
|
+
const r = [], i = [], a = Date.now(), c = await this.getTabs();
|
|
2989
|
+
for (const h of c) {
|
|
2901
2990
|
if (!(h != null && h.data)) {
|
|
2902
2991
|
r.push(h);
|
|
2903
2992
|
continue;
|
|
2904
2993
|
}
|
|
2905
|
-
if (a - new Date(h.data.lastActive || 0).getTime() >
|
|
2994
|
+
if (a - new Date(h.data.lastActive || 0).getTime() > e) {
|
|
2906
2995
|
r.push(h);
|
|
2907
2996
|
continue;
|
|
2908
2997
|
}
|
|
2909
2998
|
i.push(h);
|
|
2910
2999
|
}
|
|
2911
|
-
return
|
|
3000
|
+
return t && r.length && await this.deleteTabs(r), this.tabList = i, i;
|
|
2912
3001
|
}
|
|
2913
3002
|
selectLeaderId() {
|
|
2914
|
-
var
|
|
2915
|
-
return this.tabList.length && +((
|
|
2916
|
-
var h,
|
|
3003
|
+
var e;
|
|
3004
|
+
return this.tabList.length && +((e = [...this.tabList].sort((r, i) => {
|
|
3005
|
+
var h, f, n, m;
|
|
2917
3006
|
const a = new Date(
|
|
2918
|
-
((h = r.data) == null ? void 0 : h.createdAt) || ((
|
|
2919
|
-
).getTime(),
|
|
3007
|
+
((h = r.data) == null ? void 0 : h.createdAt) || ((f = r.data) == null ? void 0 : f.lastActive) || 0
|
|
3008
|
+
).getTime(), c = new Date(
|
|
2920
3009
|
((n = i.data) == null ? void 0 : n.createdAt) || ((m = i.data) == null ? void 0 : m.lastActive) || 0
|
|
2921
3010
|
).getTime();
|
|
2922
|
-
return a ===
|
|
2923
|
-
})[0]) == null ? void 0 :
|
|
3011
|
+
return a === c ? (+r.id || 0) - (+i.id || 0) : a - c;
|
|
3012
|
+
})[0]) == null ? void 0 : e.id) || 0;
|
|
2924
3013
|
}
|
|
2925
3014
|
async confirmLeaderAfterLock() {
|
|
2926
3015
|
await this.refreshTabs(!0);
|
|
2927
|
-
const
|
|
2928
|
-
return !!(
|
|
3016
|
+
const t = this.selectLeaderId();
|
|
3017
|
+
return !!(t && +this.id == +t);
|
|
2929
3018
|
}
|
|
2930
3019
|
async runAsLeader() {
|
|
2931
|
-
const
|
|
2932
|
-
(await
|
|
2933
|
-
|
|
3020
|
+
const t = O(this, Zt, He).call(this);
|
|
3021
|
+
(await Ze(
|
|
3022
|
+
t,
|
|
2934
3023
|
async () => {
|
|
2935
3024
|
if (await this.updateTabState(!0), console.log(
|
|
2936
3025
|
`BackgroundWorker: захват лидерства, пауза ${this.leaderConfirmDelay} мс перед запуском`
|
|
@@ -2975,8 +3064,8 @@ class je {
|
|
|
2975
3064
|
*/
|
|
2976
3065
|
async _ensurePlacementsBeforeAppInitIfNeeded() {
|
|
2977
3066
|
var r;
|
|
2978
|
-
const
|
|
2979
|
-
if (!(!
|
|
3067
|
+
const t = this.ensureAdminPlacementsBeforeAppInit;
|
|
3068
|
+
if (!(!t || !((r = this.bx) != null && r.isAdmin) || !(typeof t == "function" ? await Promise.resolve(t(this)) : t)))
|
|
2980
3069
|
try {
|
|
2981
3070
|
await this.ensureAdminPlacements();
|
|
2982
3071
|
} catch (i) {
|
|
@@ -2987,65 +3076,65 @@ class je {
|
|
|
2987
3076
|
}
|
|
2988
3077
|
}
|
|
2989
3078
|
async setBackgroundWorkerAll() {
|
|
2990
|
-
var _,
|
|
3079
|
+
var _, E, D, T;
|
|
2991
3080
|
if (!((_ = this.bx) != null && _.isAdmin)) {
|
|
2992
3081
|
console.log(
|
|
2993
3082
|
"BackgroundWorker: setBackgroundWorkerAll доступен только админам"
|
|
2994
3083
|
);
|
|
2995
3084
|
return;
|
|
2996
3085
|
}
|
|
2997
|
-
(
|
|
2998
|
-
const
|
|
2999
|
-
if (!
|
|
3086
|
+
(E = this.users) != null && E.length || await this.getEntityData(), ae(this.bx);
|
|
3087
|
+
const t = O(this, Rt, Ae).call(this, ((T = (D = this.bx) == null ? void 0 : D.appConst) == null ? void 0 : T.pathApp) ?? "");
|
|
3088
|
+
if (!t) {
|
|
3000
3089
|
console.error(
|
|
3001
3090
|
"BackgroundWorker: setBackgroundWorkerAll — нет валидного pathApp, привязка PAGE_BACKGROUND_WORKER пропущена"
|
|
3002
3091
|
);
|
|
3003
3092
|
return;
|
|
3004
3093
|
}
|
|
3005
|
-
const
|
|
3094
|
+
const e = await this.safeCall(
|
|
3006
3095
|
() => this.bx.getPlacement()
|
|
3007
3096
|
), r = /* @__PURE__ */ new Map(), i = /* @__PURE__ */ new Map();
|
|
3008
3097
|
let a = null;
|
|
3009
|
-
(
|
|
3010
|
-
if (
|
|
3098
|
+
(e || []).forEach((y) => {
|
|
3099
|
+
if (y.placement !== "PAGE_BACKGROUND_WORKER")
|
|
3011
3100
|
return;
|
|
3012
|
-
if (
|
|
3013
|
-
const b =
|
|
3101
|
+
if (y.userId || y.handler && y.handler.includes("USER_ID=")) {
|
|
3102
|
+
const b = y.userId || (y.handler ? this.extractUserIdFromHandler(y.handler) : null);
|
|
3014
3103
|
if (b) {
|
|
3015
|
-
const
|
|
3016
|
-
r.set(
|
|
3104
|
+
const C = +b;
|
|
3105
|
+
r.set(C, y), i.has(C) || i.set(C, []), i.get(C).push(y);
|
|
3017
3106
|
}
|
|
3018
3107
|
} else
|
|
3019
|
-
a =
|
|
3108
|
+
a = y;
|
|
3020
3109
|
});
|
|
3021
|
-
const
|
|
3022
|
-
h.sort((
|
|
3023
|
-
const b =
|
|
3024
|
-
return (
|
|
3110
|
+
const c = await this.resolveAdmins(), h = await this.getEligibleUsersForBackgroundWorker(c);
|
|
3111
|
+
h.sort((y, B) => {
|
|
3112
|
+
const b = y.LAST_LOGIN ? new Date(y.LAST_LOGIN) : /* @__PURE__ */ new Date(0);
|
|
3113
|
+
return (B.LAST_LOGIN ? new Date(B.LAST_LOGIN) : /* @__PURE__ */ new Date(0)) - b;
|
|
3025
3114
|
});
|
|
3026
|
-
const
|
|
3027
|
-
const
|
|
3028
|
-
if (!
|
|
3115
|
+
const f = 10, n = h.slice(0, f), m = n.filter((y) => {
|
|
3116
|
+
const B = r.get(+y.ID);
|
|
3117
|
+
if (!B)
|
|
3029
3118
|
return !0;
|
|
3030
|
-
const b = `${
|
|
3031
|
-
return
|
|
3032
|
-
}),
|
|
3033
|
-
for (const [
|
|
3034
|
-
const
|
|
3035
|
-
h.find((
|
|
3119
|
+
const b = `${t}?USER_ID=${y.ID}/`;
|
|
3120
|
+
return B.handler !== b;
|
|
3121
|
+
}), u = [];
|
|
3122
|
+
for (const [y] of r) {
|
|
3123
|
+
const B = +y || 0;
|
|
3124
|
+
h.find((C) => +C.ID === B) || u.push(B);
|
|
3036
3125
|
}
|
|
3037
|
-
for (const
|
|
3038
|
-
const
|
|
3039
|
-
if (!
|
|
3126
|
+
for (const y of n) {
|
|
3127
|
+
const B = r.get(+y.ID);
|
|
3128
|
+
if (!B)
|
|
3040
3129
|
continue;
|
|
3041
|
-
const b = `${
|
|
3042
|
-
|
|
3130
|
+
const b = `${t}?USER_ID=${y.ID}/`;
|
|
3131
|
+
B.handler !== b && u.push(+y.ID);
|
|
3043
3132
|
}
|
|
3044
|
-
const
|
|
3045
|
-
for (const
|
|
3046
|
-
const
|
|
3047
|
-
for (const b of
|
|
3048
|
-
b != null && b.handler &&
|
|
3133
|
+
const l = [], A = [...new Set(u)];
|
|
3134
|
+
for (const y of A) {
|
|
3135
|
+
const B = i.get(+y) || [];
|
|
3136
|
+
for (const b of B)
|
|
3137
|
+
b != null && b.handler && l.push({
|
|
3049
3138
|
method: "placement.unbind",
|
|
3050
3139
|
params: {
|
|
3051
3140
|
PLACEMENT: "PAGE_BACKGROUND_WORKER",
|
|
@@ -3053,144 +3142,148 @@ class je {
|
|
|
3053
3142
|
}
|
|
3054
3143
|
});
|
|
3055
3144
|
}
|
|
3056
|
-
const
|
|
3057
|
-
|
|
3145
|
+
const p = a && (!this.bindGeneralPlacement || m.length > 0 || a.handler !== `${t}`);
|
|
3146
|
+
p && l.push({
|
|
3058
3147
|
method: "placement.unbind",
|
|
3059
3148
|
params: {
|
|
3060
3149
|
PLACEMENT: "PAGE_BACKGROUND_WORKER",
|
|
3061
|
-
HANDLER: a.handler || `${
|
|
3150
|
+
HANDLER: a.handler || `${t}`
|
|
3062
3151
|
}
|
|
3063
3152
|
});
|
|
3064
|
-
for (const
|
|
3065
|
-
|
|
3153
|
+
for (const y of m)
|
|
3154
|
+
l.push({
|
|
3066
3155
|
method: "placement.bind",
|
|
3067
3156
|
params: {
|
|
3068
3157
|
PLACEMENT: "PAGE_BACKGROUND_WORKER",
|
|
3069
|
-
HANDLER: `${
|
|
3158
|
+
HANDLER: `${t}?USER_ID=${y.ID}/`,
|
|
3070
3159
|
LANG_ALL: { ru: { TITLE: this.appName } },
|
|
3071
3160
|
OPTIONS: {
|
|
3072
|
-
errorHandlerUrl: `${
|
|
3161
|
+
errorHandlerUrl: `${t}?USER_ID=${y.ID}/`
|
|
3073
3162
|
},
|
|
3074
|
-
USER_ID:
|
|
3163
|
+
USER_ID: y.ID
|
|
3075
3164
|
}
|
|
3076
3165
|
});
|
|
3077
|
-
this.bindGeneralPlacement && (!a ||
|
|
3166
|
+
this.bindGeneralPlacement && (!a || p) && l.push({
|
|
3078
3167
|
method: "placement.bind",
|
|
3079
3168
|
params: {
|
|
3080
3169
|
PLACEMENT: "PAGE_BACKGROUND_WORKER",
|
|
3081
|
-
HANDLER: `${
|
|
3170
|
+
HANDLER: `${t}`,
|
|
3082
3171
|
LANG_ALL: { ru: { TITLE: this.appName } },
|
|
3083
|
-
OPTIONS: { errorHandlerUrl: `${
|
|
3172
|
+
OPTIONS: { errorHandlerUrl: `${t}` }
|
|
3084
3173
|
}
|
|
3085
|
-
}),
|
|
3174
|
+
}), l.length ? await this.safeCall(
|
|
3086
3175
|
() => this.bx.batch(
|
|
3087
3176
|
Object.fromEntries(
|
|
3088
|
-
|
|
3177
|
+
l.map((y, B) => [`placement_${B}`, y])
|
|
3089
3178
|
)
|
|
3090
3179
|
)
|
|
3091
3180
|
) : console.log("setBackgroundWorkerAll: Нет операций");
|
|
3092
3181
|
}
|
|
3093
3182
|
async resolveAdmins() {
|
|
3094
|
-
var
|
|
3183
|
+
var t, e;
|
|
3095
3184
|
try {
|
|
3096
|
-
const r = +(((
|
|
3185
|
+
const r = +(((t = this.bx.userInfo) == null ? void 0 : t.ID) ?? 0), i = !!((e = this.bx) != null && e.isAdmin), a = await this.getAdminsList() || [];
|
|
3097
3186
|
if (!i) {
|
|
3098
3187
|
if (r && a.includes(+r)) {
|
|
3099
|
-
const
|
|
3188
|
+
const f = a.filter(
|
|
3100
3189
|
(n) => +n != +r
|
|
3101
3190
|
);
|
|
3102
|
-
return await this.saveAdminsList(
|
|
3191
|
+
return await this.saveAdminsList(f), f;
|
|
3103
3192
|
}
|
|
3104
3193
|
return a;
|
|
3105
3194
|
}
|
|
3106
|
-
const
|
|
3107
|
-
r &&
|
|
3108
|
-
const h = [...
|
|
3195
|
+
const c = /* @__PURE__ */ new Set([...a || []]);
|
|
3196
|
+
r && c.add(+r);
|
|
3197
|
+
const h = [...c].filter(Boolean);
|
|
3109
3198
|
return await this.saveAdminsList(h), h;
|
|
3110
3199
|
} catch (r) {
|
|
3111
3200
|
return console.error("BackgroundWorker: resolveAdmins error", r), [];
|
|
3112
3201
|
}
|
|
3113
3202
|
}
|
|
3114
|
-
async getEligibleUsersForBackgroundWorker(
|
|
3115
|
-
const
|
|
3203
|
+
async getEligibleUsersForBackgroundWorker(t = []) {
|
|
3204
|
+
const e = (this.users ?? []).filter(
|
|
3116
3205
|
(i) => i.ACTIVE === "Y" || i.ACTIVE === !0
|
|
3117
|
-
), r =
|
|
3118
|
-
return
|
|
3206
|
+
), r = t.map((i) => +i || 0).filter(Boolean);
|
|
3207
|
+
return e.filter((i) => r.includes(+i.ID || 0));
|
|
3119
3208
|
}
|
|
3120
|
-
async saveAdminsList(
|
|
3209
|
+
async saveAdminsList(t = []) {
|
|
3121
3210
|
try {
|
|
3122
|
-
BX24.appOption.set("adminsList", JSON.stringify(
|
|
3123
|
-
} catch (
|
|
3124
|
-
console.error("BackgroundWorker: saveAdminsList error",
|
|
3211
|
+
BX24.appOption.set("adminsList", JSON.stringify(t));
|
|
3212
|
+
} catch (e) {
|
|
3213
|
+
console.error("BackgroundWorker: saveAdminsList error", e);
|
|
3125
3214
|
}
|
|
3126
3215
|
}
|
|
3127
3216
|
async getAdminsList() {
|
|
3128
3217
|
try {
|
|
3129
|
-
const
|
|
3130
|
-
return Array.isArray(
|
|
3131
|
-
} catch (
|
|
3132
|
-
return console.error("BackgroundWorker: getAdminsList error",
|
|
3218
|
+
const t = BX24.appOption.get("adminsList"), e = t ? JSON.parse(t) : [];
|
|
3219
|
+
return Array.isArray(e) ? e.map((r) => +r || 0).filter(Boolean) : [];
|
|
3220
|
+
} catch (t) {
|
|
3221
|
+
return console.error("BackgroundWorker: getAdminsList error", t), [];
|
|
3133
3222
|
}
|
|
3134
3223
|
}
|
|
3135
3224
|
async getEntityData() {
|
|
3136
|
-
const
|
|
3225
|
+
const t = {
|
|
3137
3226
|
users: { method: "user.get", params: { filter: { ACTIVE: "Y" } } }
|
|
3138
|
-
}, { users:
|
|
3139
|
-
() => this.bx.batch(
|
|
3227
|
+
}, { users: e } = await this.safeCall(
|
|
3228
|
+
() => this.bx.batch(t).then((r) => r ? (Array.isArray(r.users) || (r.users = []), r) : { users: [] })
|
|
3140
3229
|
);
|
|
3141
|
-
this.users =
|
|
3230
|
+
this.users = e;
|
|
3142
3231
|
}
|
|
3143
3232
|
/**
|
|
3144
3233
|
* Без запуска фонового цикла: только убедиться, что у админа привязаны встройки
|
|
3145
3234
|
* (общая и индивидуальные) и что список пользователей подгружен.
|
|
3146
3235
|
*/
|
|
3147
3236
|
async ensureAdminPlacements() {
|
|
3148
|
-
var
|
|
3149
|
-
(
|
|
3237
|
+
var t, e;
|
|
3238
|
+
(t = this.bx) != null && t.isAdmin && ((e = this.users) != null && e.length || await this.getEntityData(), await this.setBackgroundWorkerAll());
|
|
3150
3239
|
}
|
|
3151
|
-
pause(
|
|
3240
|
+
pause(t = 500, e) {
|
|
3152
3241
|
return new Promise((r) => {
|
|
3153
3242
|
setTimeout(() => {
|
|
3154
|
-
|
|
3155
|
-
},
|
|
3243
|
+
e && e(), r(!0);
|
|
3244
|
+
}, t);
|
|
3156
3245
|
});
|
|
3157
3246
|
}
|
|
3158
|
-
async safeCall(
|
|
3247
|
+
async safeCall(t) {
|
|
3159
3248
|
try {
|
|
3160
|
-
return await
|
|
3161
|
-
} catch (
|
|
3162
|
-
console.error("BackgroundWorker: safeCall error",
|
|
3249
|
+
return await t();
|
|
3250
|
+
} catch (e) {
|
|
3251
|
+
console.error("BackgroundWorker: safeCall error", e);
|
|
3163
3252
|
return;
|
|
3164
3253
|
}
|
|
3165
3254
|
}
|
|
3166
3255
|
}
|
|
3167
|
-
|
|
3168
|
-
const
|
|
3169
|
-
this.startDelay =
|
|
3170
|
-
const r =
|
|
3171
|
-
|
|
3172
|
-
`BackgroundWorker: activeMaxPauseMs (${
|
|
3256
|
+
Qt = new WeakSet(), Ce = function(t) {
|
|
3257
|
+
const e = $e(t);
|
|
3258
|
+
this.startDelay = e.startDelayMs, this.leaderConfirmDelay = e.leaderConfirmDelayMs, this.activeMaxPause = e.activeMaxPauseMs, this.quickCleanupThreshold = e.quickCleanupThresholdMs, this.pollIntervalBase = e.pollIntervalMs, this.pollIntervalJitter = e.pollIntervalJitterMs, this.pollInterval = e.pollIntervalMs + (e.pollIntervalJitterMs > 0 ? Math.floor(Math.random() * e.pollIntervalJitterMs) : 0), this.leaderHeartbeatMs = e.leaderHeartbeatMs;
|
|
3259
|
+
const r = e.pollIntervalMs + e.pollIntervalJitterMs + e.leaderConfirmDelayMs;
|
|
3260
|
+
e.activeMaxPauseMs < r && console.warn(
|
|
3261
|
+
`BackgroundWorker: activeMaxPauseMs (${e.activeMaxPauseMs}) меньше poll+jitter+leaderConfirm (${r}) — «живые» вкладки могут удаляться раньше следующего тика`
|
|
3173
3262
|
);
|
|
3174
|
-
}, Rt = new WeakSet(), Ae = function(
|
|
3175
|
-
if (!
|
|
3263
|
+
}, Rt = new WeakSet(), Ae = function(t) {
|
|
3264
|
+
if (!t || typeof t != "string")
|
|
3176
3265
|
return "";
|
|
3177
|
-
const
|
|
3178
|
-
return
|
|
3266
|
+
const e = he(t).replace(/\/+$/, "");
|
|
3267
|
+
return e ? Re(e) ? (console.error(
|
|
3179
3268
|
"BackgroundWorker: pathApp не должен указывать на /marketplace/app/… Откройте приложение во встроенном iframe (entry CDN), не в оболочке маркетплейса."
|
|
3180
|
-
), "") :
|
|
3269
|
+
), "") : e : "";
|
|
3181
3270
|
}, at = new WeakSet(), mt = function() {
|
|
3182
|
-
var
|
|
3183
|
-
return this.coordinationScope === "portal" ? `${this.appCodeName || "app"}:portal` : String(((
|
|
3184
|
-
},
|
|
3185
|
-
return `background-worker:${this.entityName}:${
|
|
3271
|
+
var t, e;
|
|
3272
|
+
return this.coordinationScope === "portal" ? `${this.appCodeName || "app"}:portal` : String(((e = (t = this.bx) == null ? void 0 : t.userInfo) == null ? void 0 : e.ID) ?? "");
|
|
3273
|
+
}, Zt = new WeakSet(), He = function() {
|
|
3274
|
+
return `background-worker:${this.entityName}:${O(this, at, mt).call(this)}`;
|
|
3186
3275
|
};
|
|
3187
3276
|
export {
|
|
3188
|
-
|
|
3277
|
+
ve as BX24_REMOTE_SOURCES,
|
|
3278
|
+
Le as BX24_SOURCE_TIMEOUT_MS,
|
|
3279
|
+
ss as BackgroundWorker,
|
|
3189
3280
|
K as Batch,
|
|
3190
|
-
|
|
3191
|
-
|
|
3192
|
-
|
|
3193
|
-
|
|
3194
|
-
|
|
3195
|
-
|
|
3281
|
+
ue as Bx24EnvironmentError,
|
|
3282
|
+
es as BxBoot,
|
|
3283
|
+
Ne as BxHelper,
|
|
3284
|
+
xe as BxLogger,
|
|
3285
|
+
z as DEFAULT_BACKGROUND_WORKER_TIMING,
|
|
3286
|
+
Ke as loadBx24,
|
|
3287
|
+
$e as resolveBackgroundWorkerTiming,
|
|
3288
|
+
St as tempus
|
|
3196
3289
|
};
|