szdl-utils-kit 0.3.10 → 0.3.13
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 +3 -3
- package/dist/index.js +1262 -1040
- package/dist/index.umd.cjs +2 -2
- package/package.json +41 -41
package/dist/index.js
CHANGED
|
@@ -1,54 +1,54 @@
|
|
|
1
|
-
var
|
|
2
|
-
var Et = (_,
|
|
3
|
-
var
|
|
4
|
-
if (!
|
|
5
|
-
throw TypeError("Cannot " +
|
|
1
|
+
var _t = Object.defineProperty;
|
|
2
|
+
var Et = (_, r, e) => r in _ ? _t(_, r, { enumerable: !0, configurable: !0, writable: !0, value: e }) : _[r] = e;
|
|
3
|
+
var I = (_, r, e) => (Et(_, typeof r != "symbol" ? r + "" : r, e), e), ct = (_, r, e) => {
|
|
4
|
+
if (!r.has(_))
|
|
5
|
+
throw TypeError("Cannot " + e);
|
|
6
6
|
};
|
|
7
|
-
var
|
|
8
|
-
if (
|
|
7
|
+
var T = (_, r, e) => (ct(_, r, "read from private field"), e ? e.call(_) : r.get(_)), U = (_, r, e) => {
|
|
8
|
+
if (r.has(_))
|
|
9
9
|
throw TypeError("Cannot add the same private member more than once");
|
|
10
|
-
|
|
11
|
-
},
|
|
12
|
-
var
|
|
10
|
+
r instanceof WeakSet ? r.add(_) : r.set(_, e);
|
|
11
|
+
}, X = (_, r, e, i) => (ct(_, r, "write to private field"), i ? i.call(_, e) : r.set(_, e), e);
|
|
12
|
+
var J = (_, r, e) => (ct(_, r, "access private method"), e);
|
|
13
13
|
var Tt = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {};
|
|
14
14
|
function Rt(_) {
|
|
15
15
|
return _ && _.__esModule && Object.prototype.hasOwnProperty.call(_, "default") ? _.default : _;
|
|
16
16
|
}
|
|
17
|
-
var
|
|
18
|
-
(function(_,
|
|
19
|
-
(function(
|
|
20
|
-
Array.prototype.indexOf || (Array.prototype.indexOf = function(t,
|
|
21
|
-
var
|
|
22
|
-
for (
|
|
23
|
-
if (this[
|
|
24
|
-
return
|
|
17
|
+
var lt = { exports: {} };
|
|
18
|
+
(function(_, r) {
|
|
19
|
+
(function(e) {
|
|
20
|
+
Array.prototype.indexOf || (Array.prototype.indexOf = function(t, a) {
|
|
21
|
+
var d, g;
|
|
22
|
+
for (d = a || 0, g = this.length; d < g; d += 1)
|
|
23
|
+
if (this[d] === t)
|
|
24
|
+
return d;
|
|
25
25
|
return -1;
|
|
26
26
|
});
|
|
27
|
-
var i = this,
|
|
28
|
-
for (var
|
|
29
|
-
|
|
30
|
-
return
|
|
31
|
-
},
|
|
32
|
-
return
|
|
33
|
-
},
|
|
34
|
-
var
|
|
35
|
-
return
|
|
36
|
-
},
|
|
37
|
-
var
|
|
38
|
-
t.slice(
|
|
39
|
-
t.charAt(
|
|
40
|
-
t.slice(
|
|
41
|
-
t.charAt(
|
|
42
|
-
t.slice(
|
|
43
|
-
],
|
|
44
|
-
return !isNaN(Number(
|
|
45
|
-
t.slice(
|
|
46
|
-
t.charAt(
|
|
47
|
-
t.slice(
|
|
48
|
-
t.charAt(
|
|
49
|
-
t.slice(
|
|
50
|
-
], !isNaN(Number(
|
|
51
|
-
},
|
|
27
|
+
var i = this, n = function(t, a) {
|
|
28
|
+
for (var d = t.toString(); d.length < a; )
|
|
29
|
+
d = "0" + d;
|
|
30
|
+
return d;
|
|
31
|
+
}, o = function(t, a) {
|
|
32
|
+
return a !== e ? (t.year(a.year() || a.year), t.month(a.month() || a.month), t.day(a.day() || a.day), t.hours(a.hours() || a.hours), t.minutes(a.minutes() || a.minutes), t.seconds(a.seconds() || a.seconds), t.milliseconds(a.milliseconds() || a.milliseconds), t) : e;
|
|
33
|
+
}, l = function(t, a) {
|
|
34
|
+
var d, g = "";
|
|
35
|
+
return d = t.slice(a, a + 1), d !== "" && !isNaN(Number(d)) && (g += "%H"), d = t.charAt(a + 2), d !== "" && d === ":" && (g += d), d = t.slice(a + 3, a + 4), d !== "" && !isNaN(Number(d)) && (g += "%M"), d = t.charAt(a + 5), d !== "" && d === ":" && (g += d), d = t.slice(a + 6, a + 7), d !== "" && !isNaN(Number(d)) && (g += "%S"), g;
|
|
36
|
+
}, c = function(t, a) {
|
|
37
|
+
var d, g = [
|
|
38
|
+
t.slice(a, a + 1),
|
|
39
|
+
t.charAt(a + 2),
|
|
40
|
+
t.slice(a + 3, a + 4),
|
|
41
|
+
t.charAt(a + 5),
|
|
42
|
+
t.slice(a + 6, a + 9)
|
|
43
|
+
], k;
|
|
44
|
+
return !isNaN(Number(g[0])) && !isNaN(Number(g[2])) && !isNaN(Number(g[4])) ? (g[1] === "." && g[3] === "." ? d = "%d.%m.%Y" : g[1] === "-" && g[3] === "-" ? d = "%m-%d-%Y" : g[1] === "/" && g[3] === "/" && (d = "%m/%d/%Y"), d) : (k = [
|
|
45
|
+
t.slice(a, a + 3),
|
|
46
|
+
t.charAt(a + 4),
|
|
47
|
+
t.slice(a + 5, a + 6),
|
|
48
|
+
t.charAt(a + 7),
|
|
49
|
+
t.slice(a + 8, a + 9)
|
|
50
|
+
], !isNaN(Number(k[0])) && !isNaN(Number(k[2])) && !isNaN(Number(k[4])) ? (k[1] === "-" && k[3] === "-" && (d = "%Y-%m-%d"), d) : "");
|
|
51
|
+
}, h = i.tempus, s, f, m = i.navigator || {}, A = "en", u = {
|
|
52
52
|
en: {
|
|
53
53
|
JANUARY_SHORT: "Jan",
|
|
54
54
|
FEBRUARY_SHORT: "Feb",
|
|
@@ -211,68 +211,68 @@ var ht = { exports: {} };
|
|
|
211
211
|
}
|
|
212
212
|
}, N = function() {
|
|
213
213
|
return [
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
214
|
+
u[A].JANUARY_LONG,
|
|
215
|
+
u[A].FEBRUARY_LONG,
|
|
216
|
+
u[A].MARCH_LONG,
|
|
217
|
+
u[A].APRIL_LONG,
|
|
218
|
+
u[A].MAY_LONG,
|
|
219
|
+
u[A].JUNE_LONG,
|
|
220
|
+
u[A].JULY_LONG,
|
|
221
|
+
u[A].AUGUST_LONG,
|
|
222
|
+
u[A].SEPTEMBER_LONG,
|
|
223
|
+
u[A].OCTOBER_LONG,
|
|
224
|
+
u[A].NOVEMBER_LONG,
|
|
225
|
+
u[A].DECEMBER_LONG
|
|
226
226
|
];
|
|
227
|
-
},
|
|
227
|
+
}, y = function() {
|
|
228
228
|
return [
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
229
|
+
u[A].JANUARY_SHORT,
|
|
230
|
+
u[A].FEBRUARY_SHORT,
|
|
231
|
+
u[A].MARCH_SHORT,
|
|
232
|
+
u[A].APRIL_SHORT,
|
|
233
|
+
u[A].MAY_SHORT,
|
|
234
|
+
u[A].JUNE_SHORT,
|
|
235
|
+
u[A].JULY_SHORT,
|
|
236
|
+
u[A].AUGUST_SHORT,
|
|
237
|
+
u[A].SEPTEMBER_SHORT,
|
|
238
|
+
u[A].OCTOBER_SHORT,
|
|
239
|
+
u[A].NOVEMBER_SHORT,
|
|
240
|
+
u[A].DECEMBER_SHORT
|
|
241
241
|
];
|
|
242
242
|
}, p = function() {
|
|
243
243
|
return [
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
244
|
+
u[A].SUNDAY_LONG,
|
|
245
|
+
u[A].MONDAY_LONG,
|
|
246
|
+
u[A].TUESDAY_LONG,
|
|
247
|
+
u[A].WEDNESDAY_LONG,
|
|
248
|
+
u[A].THURSDAY_LONG,
|
|
249
|
+
u[A].FRIDAY_LONG,
|
|
250
|
+
u[A].SATURDAY_LONG
|
|
251
251
|
];
|
|
252
|
-
},
|
|
252
|
+
}, R = function() {
|
|
253
253
|
return [
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
254
|
+
u[A].SUNDAY_SHORT,
|
|
255
|
+
u[A].MONDAY_SHORT,
|
|
256
|
+
u[A].TUESDAY_SHORT,
|
|
257
|
+
u[A].WEDNESDAY_SHORT,
|
|
258
|
+
u[A].THURSDAY_SHORT,
|
|
259
|
+
u[A].FRIDAY_SHORT,
|
|
260
|
+
u[A].SATURDAY_SHORT
|
|
261
261
|
];
|
|
262
|
-
},
|
|
263
|
-
var
|
|
264
|
-
i.XMLHttpRequest ?
|
|
265
|
-
|
|
266
|
-
https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) :
|
|
267
|
-
},
|
|
268
|
-
},
|
|
262
|
+
}, L, M, D, B, F = function(t, a, d) {
|
|
263
|
+
var g;
|
|
264
|
+
i.XMLHttpRequest ? g = new XMLHttpRequest() : g = new ActiveXObject("Microsoft.XMLHTTP"), g.onreadystatechange = function() {
|
|
265
|
+
g.readyState === 4 && (g.status === 200 ? a && (i.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`) : a(JSON.parse(g.responseText))) : d && d(g));
|
|
267
|
+
}, g.open("GET", t, !1), g.send();
|
|
268
|
+
}, S = {
|
|
269
269
|
"%d": {
|
|
270
270
|
format: function(t) {
|
|
271
|
-
return
|
|
271
|
+
return n(t.day() || s.MIN_DAY, 2);
|
|
272
272
|
},
|
|
273
273
|
parse: function(t) {
|
|
274
|
-
var
|
|
275
|
-
return { day: isNaN(
|
|
274
|
+
var a = Number(t);
|
|
275
|
+
return { day: isNaN(a) ? e : a };
|
|
276
276
|
},
|
|
277
277
|
minLength: 2,
|
|
278
278
|
maxLength: 2,
|
|
@@ -280,11 +280,11 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : n(JSON.pars
|
|
|
280
280
|
},
|
|
281
281
|
"%m": {
|
|
282
282
|
format: function(t) {
|
|
283
|
-
return
|
|
283
|
+
return n(t.month() || s.MIN_MONTH, 2);
|
|
284
284
|
},
|
|
285
285
|
parse: function(t) {
|
|
286
|
-
var
|
|
287
|
-
return { month: isNaN(
|
|
286
|
+
var a = Number(t);
|
|
287
|
+
return { month: isNaN(a) ? e : a };
|
|
288
288
|
},
|
|
289
289
|
minLength: 2,
|
|
290
290
|
maxLength: 2,
|
|
@@ -292,11 +292,11 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : n(JSON.pars
|
|
|
292
292
|
},
|
|
293
293
|
"%Y": {
|
|
294
294
|
format: function(t) {
|
|
295
|
-
return
|
|
295
|
+
return n(t.year() || s.MIN_YEAR, 4);
|
|
296
296
|
},
|
|
297
297
|
parse: function(t) {
|
|
298
|
-
var
|
|
299
|
-
return { year: isNaN(
|
|
298
|
+
var a = Number(t);
|
|
299
|
+
return { year: isNaN(a) ? e : a };
|
|
300
300
|
},
|
|
301
301
|
minLength: 4,
|
|
302
302
|
maxLength: 4,
|
|
@@ -315,8 +315,8 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : n(JSON.pars
|
|
|
315
315
|
},
|
|
316
316
|
"%a": {
|
|
317
317
|
format: function(t) {
|
|
318
|
-
var
|
|
319
|
-
return
|
|
318
|
+
var a = t.dayOfWeek();
|
|
319
|
+
return B[a !== e ? a : s.MIN_DAY_OF_WEEK];
|
|
320
320
|
},
|
|
321
321
|
parse: function() {
|
|
322
322
|
return {};
|
|
@@ -327,8 +327,8 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : n(JSON.pars
|
|
|
327
327
|
},
|
|
328
328
|
"%A": {
|
|
329
329
|
format: function(t) {
|
|
330
|
-
var
|
|
331
|
-
return
|
|
330
|
+
var a = t.dayOfWeek();
|
|
331
|
+
return D[a !== e ? a : s.MIN_DAY_OF_WEEK];
|
|
332
332
|
},
|
|
333
333
|
parse: function() {
|
|
334
334
|
return {};
|
|
@@ -339,12 +339,12 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : n(JSON.pars
|
|
|
339
339
|
},
|
|
340
340
|
"%b": {
|
|
341
341
|
format: function(t) {
|
|
342
|
-
var
|
|
343
|
-
return
|
|
342
|
+
var a = s.options("monthFromZero") ? t.month() : t.month() - 1;
|
|
343
|
+
return M[a !== e ? a : s.MIN_MONTH];
|
|
344
344
|
},
|
|
345
345
|
parse: function(t) {
|
|
346
|
-
var
|
|
347
|
-
return { month:
|
|
346
|
+
var a = s.monthNames().indexOf(t) + (s.options("monthFromZero") ? 0 : 1);
|
|
347
|
+
return { month: a !== -1 ? a : e };
|
|
348
348
|
},
|
|
349
349
|
minLength: 1,
|
|
350
350
|
maxLength: 999,
|
|
@@ -352,12 +352,12 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : n(JSON.pars
|
|
|
352
352
|
},
|
|
353
353
|
"%B": {
|
|
354
354
|
format: function(t) {
|
|
355
|
-
var
|
|
356
|
-
return
|
|
355
|
+
var a = s.options("monthFromZero") ? t.month() : t.month() - 1;
|
|
356
|
+
return L[a !== e ? a : s.MIN_MONTH];
|
|
357
357
|
},
|
|
358
358
|
parse: function(t) {
|
|
359
|
-
var
|
|
360
|
-
return { month:
|
|
359
|
+
var a = s.monthNames(!0).indexOf(t) + (s.options("monthFromZero") ? 0 : 1);
|
|
360
|
+
return { month: a !== -1 ? a : e };
|
|
361
361
|
},
|
|
362
362
|
minLength: 1,
|
|
363
363
|
maxLength: 999,
|
|
@@ -365,11 +365,11 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : n(JSON.pars
|
|
|
365
365
|
},
|
|
366
366
|
"%H": {
|
|
367
367
|
format: function(t) {
|
|
368
|
-
return
|
|
368
|
+
return n(t.hours() || s.MIN_HOURS, 2);
|
|
369
369
|
},
|
|
370
370
|
parse: function(t) {
|
|
371
|
-
var
|
|
372
|
-
return { hours: isNaN(
|
|
371
|
+
var a = Number(t);
|
|
372
|
+
return { hours: isNaN(a) ? e : a };
|
|
373
373
|
},
|
|
374
374
|
minLength: 2,
|
|
375
375
|
maxLength: 2,
|
|
@@ -377,11 +377,11 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : n(JSON.pars
|
|
|
377
377
|
},
|
|
378
378
|
"%M": {
|
|
379
379
|
format: function(t) {
|
|
380
|
-
return
|
|
380
|
+
return n(t.minutes() || s.MIN_MINUTES, 2);
|
|
381
381
|
},
|
|
382
382
|
parse: function(t) {
|
|
383
|
-
var
|
|
384
|
-
return { minutes: isNaN(
|
|
383
|
+
var a = Number(t);
|
|
384
|
+
return { minutes: isNaN(a) ? e : a };
|
|
385
385
|
},
|
|
386
386
|
minLength: 2,
|
|
387
387
|
maxLength: 2,
|
|
@@ -389,11 +389,11 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : n(JSON.pars
|
|
|
389
389
|
},
|
|
390
390
|
"%S": {
|
|
391
391
|
format: function(t) {
|
|
392
|
-
return
|
|
392
|
+
return n(t.seconds() || s.MIN_SECONDS, 2);
|
|
393
393
|
},
|
|
394
394
|
parse: function(t) {
|
|
395
|
-
var
|
|
396
|
-
return { seconds: isNaN(
|
|
395
|
+
var a = Number(t);
|
|
396
|
+
return { seconds: isNaN(a) ? e : a };
|
|
397
397
|
},
|
|
398
398
|
minLength: 2,
|
|
399
399
|
maxLength: 2,
|
|
@@ -412,14 +412,14 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : n(JSON.pars
|
|
|
412
412
|
},
|
|
413
413
|
"%F": {
|
|
414
414
|
format: function(t) {
|
|
415
|
-
return
|
|
415
|
+
return n(t.year() || s.MIN_YEAR, 4) + "-" + n(t.month() || s.MIN_MONTH, 2) + "-" + n(t.day() || s.MIN_DAY, 2);
|
|
416
416
|
},
|
|
417
417
|
parse: function(t) {
|
|
418
|
-
var
|
|
418
|
+
var a = Number(t.slice(0, 4)), d = Number(t.slice(5, 7)), g = Number(t.slice(8, 10));
|
|
419
419
|
return {
|
|
420
|
-
year:
|
|
421
|
-
month:
|
|
422
|
-
day:
|
|
420
|
+
year: a,
|
|
421
|
+
month: d,
|
|
422
|
+
day: g
|
|
423
423
|
};
|
|
424
424
|
},
|
|
425
425
|
minLength: 10,
|
|
@@ -428,25 +428,25 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : n(JSON.pars
|
|
|
428
428
|
},
|
|
429
429
|
"%D": {
|
|
430
430
|
format: function(t) {
|
|
431
|
-
return
|
|
431
|
+
return n(t.month() || s.MIN_MONTH, 2) + "/" + n(t.day() || s.MIN_DAY, 2) + "/" + n(t.year() || s.MIN_YEAR, 4);
|
|
432
432
|
},
|
|
433
433
|
parse: function(t) {
|
|
434
|
-
var
|
|
434
|
+
var a = Number(t.slice(0, 2)), d = Number(t.slice(3, 5)), g = Number(t.slice(6, 10));
|
|
435
435
|
return {
|
|
436
|
-
year:
|
|
437
|
-
month:
|
|
438
|
-
day:
|
|
436
|
+
year: g,
|
|
437
|
+
month: a,
|
|
438
|
+
day: d
|
|
439
439
|
};
|
|
440
440
|
},
|
|
441
441
|
minLength: 10,
|
|
442
442
|
maxLength: 10,
|
|
443
443
|
type: "string"
|
|
444
444
|
}
|
|
445
|
-
},
|
|
445
|
+
}, W = {
|
|
446
446
|
useMilliseconds: !1,
|
|
447
447
|
monthFromZero: !1
|
|
448
|
-
},
|
|
449
|
-
|
|
448
|
+
}, O;
|
|
449
|
+
O = function(t, a, d) {
|
|
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`) : n(JSON.pars
|
|
|
455
455
|
minutes: !1,
|
|
456
456
|
seconds: !1,
|
|
457
457
|
milliseconds: !1
|
|
458
|
-
}, t !==
|
|
459
|
-
},
|
|
460
|
-
var t = this.month(),
|
|
461
|
-
return this.leapYear() && t === (s.options("monthFromZero") ? 1 : 2) && (
|
|
462
|
-
},
|
|
458
|
+
}, t !== e && this.set(t, a, d), this;
|
|
459
|
+
}, O.fn = O.prototype, O.fn.dayCount = function() {
|
|
460
|
+
var t = this.month(), a = s.MAX_DAY_IN_MONTHS[t - (s.options("monthFromZero") ? 0 : 1)];
|
|
461
|
+
return this.leapYear() && t === (s.options("monthFromZero") ? 1 : 2) && (a += 1), a;
|
|
462
|
+
}, O.fn.year = function(t) {
|
|
463
463
|
if (arguments.length !== 0)
|
|
464
464
|
(typeof t == "number" || typeof t == "string") && !isNaN(Number(t)) ? Number(t) >= s.MIN_YEAR && Number(t) <= s.MAX_YEAR ? (this._d.setFullYear(Number(t)), this._i.year = !1) : this._i.year = Number(t) : (this._d.setFullYear(s.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
|
+
}, O.fn.month = function(t) {
|
|
469
469
|
if (arguments.length !== 0)
|
|
470
470
|
(typeof t == "number" || typeof t == "string") && !isNaN(Number(t)) ? Number(t) >= s.MIN_MONTH && Number(t) <= s.MAX_MONTH ? (this._d.setMonth(s.options("monthFromZero") ? Number(t) : Number(t) - 1), this._i.month = !1) : this._i.month = Number(t) : (this._d.setMonth(s.options("monthFromZero") ? s.MIN_MONTH : s.MIN_MONTH - 1), this._i.month = !1);
|
|
471
471
|
else
|
|
472
472
|
return this._i.month === !1 ? s.options("monthFromZero") ? this._d.getMonth() : this._d.getMonth() + 1 : this._i.month;
|
|
473
473
|
return this;
|
|
474
|
-
},
|
|
474
|
+
}, O.fn.day = function(t) {
|
|
475
475
|
if (arguments.length !== 0)
|
|
476
476
|
(typeof t == "number" || typeof t == "string") && !isNaN(Number(t)) ? Number(t) >= s.MIN_DAY && Number(t) <= this.dayCount() ? (this._d.setDate(Number(t)), this._i.day = !1) : this._i.day = Number(t) : (this._d.setDate(s.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
|
+
}, O.fn.hours = function(t) {
|
|
481
481
|
if (arguments.length !== 0)
|
|
482
482
|
(typeof t == "number" || typeof t == "string") && !isNaN(Number(t)) ? Number(t) >= s.MIN_HOURS && Number(t) <= s.MAX_HOURS ? (this._d.setHours(Number(t)), this._i.hours = !1) : this._i.hours = Number(t) : (this._d.setHours(s.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
|
+
}, O.fn.minutes = function(t) {
|
|
487
487
|
if (arguments.length !== 0)
|
|
488
488
|
(typeof t == "number" || typeof t == "string") && !isNaN(Number(t)) ? Number(t) >= s.MIN_MINUTES && Number(t) <= s.MAX_MINUTES ? (this._d.setMinutes(Number(t)), this._i.minutes = !1) : this._i.minutes = Number(t) : (this._d.setMinutes(s.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
|
+
}, O.fn.seconds = function(t) {
|
|
493
493
|
if (arguments.length !== 0)
|
|
494
494
|
(typeof t == "number" || typeof t == "string") && !isNaN(Number(t)) ? Number(t) >= s.MIN_SECONDS && Number(t) <= s.MAX_SECONDS ? (this._d.setSeconds(Number(t)), this._i.seconds = !1) : this._i.seconds = Number(t) : (this._d.setSeconds(s.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
|
+
}, O.fn.milliseconds = function(t) {
|
|
499
499
|
if (arguments.length !== 0)
|
|
500
500
|
(typeof t == "number" || typeof t == "string") && !isNaN(Number(t)) ? Number(t) >= s.MIN_MILLISECONDS && Number(t) <= s.MAX_MILLISECONDS ? (this._d.setMilliseconds(Number(t)), this._i.milliseconds = !1) : this._i.milliseconds = Number(t) : (this._d.setMilliseconds(s.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
|
-
},
|
|
505
|
-
var t = new Date(this.year(), 0, 1),
|
|
506
|
-
return Math.ceil(((
|
|
507
|
-
},
|
|
504
|
+
}, O.fn.week = function() {
|
|
505
|
+
var t = new Date(this.year(), 0, 1), a = s(this.utc()).hours(0).minutes(0).seconds(0).milliseconds(0).utc() * 1e3;
|
|
506
|
+
return Math.ceil(((a - t.getTime()) / 864e5 + t.getDay() + 1) / 7);
|
|
507
|
+
}, O.fn.set = function(t, a, d) {
|
|
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`) : n(JSON.pars
|
|
|
513
513
|
minutes: !1,
|
|
514
514
|
seconds: !1,
|
|
515
515
|
milliseconds: !1
|
|
516
|
-
}, t ===
|
|
516
|
+
}, t === e)
|
|
517
517
|
return this._d = /* @__PURE__ */ new Date(), this;
|
|
518
518
|
if (t instanceof Date)
|
|
519
519
|
return this._d = t, this;
|
|
520
520
|
if (typeof t == "number")
|
|
521
521
|
return this._d = new Date(t * (s.options("useMilliseconds") ? 1 : 1e3)), this;
|
|
522
522
|
if (typeof t == "object" && (t instanceof Array ? (this.day(s.MIN_DAY), this.year(t[0]), this.month(t[1]), this.day(t[2]), this.hours(t[3]), this.minutes(t[4]), this.seconds(t[5]), this.milliseconds(t[6])) : (this.day(s.MIN_DAY), this.year(t.year), this.month(t.month), this.day(t.day), this.hours(t.hours), this.minutes(t.minutes), this.seconds(t.seconds), this.milliseconds(t.milliseconds))), typeof t == "string") {
|
|
523
|
-
var
|
|
524
|
-
if (t ===
|
|
525
|
-
return
|
|
523
|
+
var g, k = [], E, b, v = [], Y = 0, G = 0, C, x, w = {}, H;
|
|
524
|
+
if (t === e)
|
|
525
|
+
return E = o(this, d), E === e && (this._i = {
|
|
526
526
|
year: -1,
|
|
527
527
|
month: -1,
|
|
528
528
|
day: -1,
|
|
@@ -530,26 +530,26 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : n(JSON.pars
|
|
|
530
530
|
minutes: -1,
|
|
531
531
|
seconds: -1,
|
|
532
532
|
milliseconds: -1
|
|
533
|
-
}),
|
|
534
|
-
for (
|
|
535
|
-
if (
|
|
536
|
-
if (
|
|
537
|
-
switch (
|
|
533
|
+
}), E;
|
|
534
|
+
for (a === e && (a = s.detectFormat(t)); Y < a.length; ) {
|
|
535
|
+
if (a.charAt(Y) === "%") {
|
|
536
|
+
if (b = a.charAt(Y) + a.charAt(Y + 1), S[b] !== e) {
|
|
537
|
+
switch (C = 0, x = "", S[b].type) {
|
|
538
538
|
case "number":
|
|
539
|
-
for (;
|
|
540
|
-
x += t.charAt(
|
|
539
|
+
for (; C < S[b].maxLength && G + C < t.length && !isNaN(Number(t.charAt(G + C))); )
|
|
540
|
+
x += t.charAt(G + C), C += 1;
|
|
541
541
|
break;
|
|
542
542
|
case "word":
|
|
543
|
-
for (;
|
|
544
|
-
x += t.charAt(
|
|
543
|
+
for (; C < S[b].maxLength && G + C < t.length && /^[\u00BF-\u1FFF\u2C00-\uD7FF\w]+$/.test(t.charAt(G + C)); )
|
|
544
|
+
x += t.charAt(G + C), C += 1;
|
|
545
545
|
break;
|
|
546
546
|
case "string":
|
|
547
|
-
for (;
|
|
548
|
-
x += t.charAt(
|
|
547
|
+
for (; C < S[b].maxLength && G + C < t.length; )
|
|
548
|
+
x += t.charAt(G + C), C += 1;
|
|
549
549
|
break;
|
|
550
550
|
}
|
|
551
|
-
if (
|
|
552
|
-
return
|
|
551
|
+
if (C < S[b].minLength)
|
|
552
|
+
return E = o(this, d), E === e && (this._i = {
|
|
553
553
|
year: -1,
|
|
554
554
|
month: -1,
|
|
555
555
|
day: -1,
|
|
@@ -557,11 +557,11 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : n(JSON.pars
|
|
|
557
557
|
minutes: -1,
|
|
558
558
|
seconds: -1,
|
|
559
559
|
milliseconds: -1
|
|
560
|
-
}),
|
|
561
|
-
|
|
560
|
+
}), E;
|
|
561
|
+
k.push(b), v.push(x), C -= 1, G += C, Y += 1;
|
|
562
562
|
}
|
|
563
|
-
} else if (t.charAt(
|
|
564
|
-
return
|
|
563
|
+
} else if (t.charAt(G) !== a.charAt(Y))
|
|
564
|
+
return E = o(this, d), E === e && (this._i = {
|
|
565
565
|
year: -1,
|
|
566
566
|
month: -1,
|
|
567
567
|
day: -1,
|
|
@@ -569,34 +569,34 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : n(JSON.pars
|
|
|
569
569
|
minutes: -1,
|
|
570
570
|
seconds: -1,
|
|
571
571
|
milliseconds: -1
|
|
572
|
-
}),
|
|
573
|
-
|
|
572
|
+
}), E;
|
|
573
|
+
Y += 1, G += 1;
|
|
574
574
|
}
|
|
575
|
-
for (
|
|
576
|
-
|
|
577
|
-
year: H.year !==
|
|
578
|
-
month: H.month !==
|
|
579
|
-
day: H.day !==
|
|
580
|
-
hours: H.hours !==
|
|
581
|
-
minutes: H.minutes !==
|
|
582
|
-
seconds: H.seconds !==
|
|
575
|
+
for (g in k)
|
|
576
|
+
k.hasOwnProperty(g) && S.hasOwnProperty(k[g]) && (H = S[k[g]].parse(v[g]), w = {
|
|
577
|
+
year: H.year !== e ? H.year : w.year,
|
|
578
|
+
month: H.month !== e ? H.month : w.month,
|
|
579
|
+
day: H.day !== e ? H.day : w.day,
|
|
580
|
+
hours: H.hours !== e ? H.hours : w.hours,
|
|
581
|
+
minutes: H.minutes !== e ? H.minutes : w.minutes,
|
|
582
|
+
seconds: H.seconds !== e ? H.seconds : w.seconds
|
|
583
583
|
});
|
|
584
|
-
this.day(s.MIN_DAY), this.year(
|
|
584
|
+
this.day(s.MIN_DAY), this.year(w.year), this.month(w.month), this.day(w.day), this.hours(w.hours), this.minutes(w.minutes), this.seconds(w.seconds), this.milliseconds(w.milliseconds);
|
|
585
585
|
}
|
|
586
586
|
return this;
|
|
587
|
-
},
|
|
587
|
+
}, O.fn.leapYear = function() {
|
|
588
588
|
var t = this.year();
|
|
589
589
|
return t % 4 === 0 ? t % 100 === 0 ? t % 400 === 0 : !0 : !1;
|
|
590
|
-
},
|
|
590
|
+
}, O.fn.timestamp = function(t) {
|
|
591
591
|
return arguments.length !== 0 ? (this._d = new Date(Number(t) * (s.options("useMilliseconds") ? 1 : 1e3) + this._d.getTimezoneOffset() * 6e4), this) : s.options("useMilliseconds") ? this._d.getTime() - this._d.getTimezoneOffset() * 6e4 : Math.floor(this._d.getTime() / 1e3) - this._d.getTimezoneOffset() * 60;
|
|
592
|
-
},
|
|
592
|
+
}, O.fn.utc = function(t) {
|
|
593
593
|
return arguments.length !== 0 ? (this._d = new Date(Number(t) * (s.options("useMilliseconds") ? 1 : 1e3)), this) : s.options("useMilliseconds") ? this._d.getTime() : Math.floor(this._d.getTime() / 1e3);
|
|
594
|
-
},
|
|
594
|
+
}, O.fn.dayOfWeek = function(t) {
|
|
595
595
|
if (t === "long")
|
|
596
|
-
return
|
|
596
|
+
return D[this._d.getDay()];
|
|
597
597
|
if (t === "short")
|
|
598
|
-
return
|
|
599
|
-
if (t ===
|
|
598
|
+
return B[this._d.getDay()];
|
|
599
|
+
if (t === e)
|
|
600
600
|
return this._d.getDay();
|
|
601
601
|
if (t === 0 || t === "Sunday")
|
|
602
602
|
return this.calc({ day: -this.dayOfWeek() });
|
|
@@ -612,7 +612,7 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : n(JSON.pars
|
|
|
612
612
|
return this.calc({ day: (this.dayOfWeek() === 0 ? -2 : 5) - this.dayOfWeek() });
|
|
613
613
|
if (t === 6 || t === "Saturday")
|
|
614
614
|
return this.calc({ day: (this.dayOfWeek() === 0 ? -1 : 6) - this.dayOfWeek() });
|
|
615
|
-
},
|
|
615
|
+
}, O.fn.timezone = function(t) {
|
|
616
616
|
switch (t) {
|
|
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`) : n(JSON.pars
|
|
|
621
621
|
default:
|
|
622
622
|
return this._d.getTimezoneOffset() * 60;
|
|
623
623
|
}
|
|
624
|
-
},
|
|
624
|
+
}, O.fn.get = function(t) {
|
|
625
625
|
switch (t) {
|
|
626
626
|
case "Date":
|
|
627
627
|
return new Date(
|
|
@@ -670,172 +670,220 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : n(JSON.pars
|
|
|
670
670
|
timestamp: this.timestamp()
|
|
671
671
|
};
|
|
672
672
|
}
|
|
673
|
-
},
|
|
674
|
-
for (var
|
|
675
|
-
t.charAt(
|
|
676
|
-
return
|
|
677
|
-
},
|
|
673
|
+
}, O.fn.format = function(t) {
|
|
674
|
+
for (var a = 0, d = "", g; a < t.length; )
|
|
675
|
+
t.charAt(a) === "%" ? (g = t.charAt(a) + t.charAt(a + 1), S[g] !== e ? (d += S[g].format(this), a += 1) : d += "%") : d += t.charAt(a), a += 1;
|
|
676
|
+
return d;
|
|
677
|
+
}, O.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
|
+
}, O.fn.errors = function() {
|
|
680
680
|
return this._i;
|
|
681
|
-
},
|
|
682
|
-
var
|
|
683
|
-
switch (
|
|
681
|
+
}, O.fn.between = function(t, a) {
|
|
682
|
+
var d = this.timestamp(), g = t.timestamp();
|
|
683
|
+
switch (a) {
|
|
684
684
|
case "year":
|
|
685
|
-
return Math.floor((
|
|
685
|
+
return Math.floor((g - d) / 31556952);
|
|
686
686
|
case "month":
|
|
687
|
-
return Math.floor((
|
|
687
|
+
return Math.floor((g - d) / 2629746);
|
|
688
688
|
case "day":
|
|
689
|
-
return Math.floor((
|
|
689
|
+
return Math.floor((g - d) / 86400);
|
|
690
690
|
case "hours":
|
|
691
|
-
return Math.floor((
|
|
691
|
+
return Math.floor((g - d) / 3600);
|
|
692
692
|
case "minutes":
|
|
693
|
-
return Math.floor((
|
|
693
|
+
return Math.floor((g - d) / 60);
|
|
694
694
|
case "seconds":
|
|
695
|
-
return
|
|
695
|
+
return g - d;
|
|
696
696
|
default:
|
|
697
|
-
return
|
|
697
|
+
return e;
|
|
698
698
|
}
|
|
699
|
-
},
|
|
700
|
-
return t.year !==
|
|
701
|
-
}, s = function(t,
|
|
702
|
-
return new
|
|
703
|
-
}, s.MIN_YEAR = 1e3, s.MAX_YEAR = 3e3, s.MIN_MONTH = 1, s.MAX_MONTH = 12, s.MIN_DAY = 1, s.MAX_DAY_IN_MONTHS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], s.MIN_DAY_OF_WEEK = 0, s.MAX_DAY_OF_WEEK = 6, s.MIN_HOURS = 0, s.MAX_HOURS = 23, s.MIN_MINUTES = 0, s.MAX_MINUTES = 59, s.MIN_SECONDS = 0, s.MAX_SECONDS = 59, s.MIN_MILLISECONDS = 0, s.MAX_MILLISECONDS = 999, s.VERSION = "0.2.18", s.options = function(t,
|
|
704
|
-
if (t ===
|
|
705
|
-
return
|
|
706
|
-
if (
|
|
707
|
-
if (
|
|
708
|
-
return
|
|
709
|
-
|
|
699
|
+
}, O.fn.calc = function(t) {
|
|
700
|
+
return t.year !== e && this._d.setFullYear(this._d.getFullYear() + t.year), t.month !== e && this._d.setMonth(this._d.getMonth() + t.month), t.day !== e && this._d.setDate(this._d.getDate() + t.day), t.hours !== e && this._d.setHours(this._d.getHours() + t.hours), t.minutes !== e && this._d.setMinutes(this._d.getMinutes() + t.minutes), t.seconds !== e && this._d.setSeconds(this._d.getSeconds() + t.seconds), t.milliseconds !== e && this._d.setMilliseconds(this._d.getMilliseconds() + t.milliseconds), this;
|
|
701
|
+
}, s = function(t, a, d) {
|
|
702
|
+
return new O(t, a, d);
|
|
703
|
+
}, s.MIN_YEAR = 1e3, s.MAX_YEAR = 3e3, s.MIN_MONTH = 1, s.MAX_MONTH = 12, s.MIN_DAY = 1, s.MAX_DAY_IN_MONTHS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], s.MIN_DAY_OF_WEEK = 0, s.MAX_DAY_OF_WEEK = 6, s.MIN_HOURS = 0, s.MAX_HOURS = 23, s.MIN_MINUTES = 0, s.MAX_MINUTES = 59, s.MIN_SECONDS = 0, s.MAX_SECONDS = 59, s.MIN_MILLISECONDS = 0, s.MAX_MILLISECONDS = 999, s.VERSION = "0.2.18", s.options = function(t, a) {
|
|
704
|
+
if (t === e)
|
|
705
|
+
return W;
|
|
706
|
+
if (W.hasOwnProperty(t)) {
|
|
707
|
+
if (a === e)
|
|
708
|
+
return W[t];
|
|
709
|
+
W[t] = a, t === "monthFromZero" && (s.MIN_MONTH = a ? 0 : 1, s.MAX_MONTH = a ? 11 : 12);
|
|
710
710
|
}
|
|
711
|
-
return
|
|
711
|
+
return e;
|
|
712
712
|
}, s.noConflict = function() {
|
|
713
|
-
return i.tempus =
|
|
713
|
+
return i.tempus = h, s;
|
|
714
714
|
}, s.generate = function(t) {
|
|
715
|
-
var
|
|
716
|
-
if (typeof t.dateFrom != "number" && (t.dateFrom instanceof
|
|
715
|
+
var a, d, g, k, E, b, v, Y;
|
|
716
|
+
if (typeof t.dateFrom != "number" && (t.dateFrom instanceof O ? a = t.dateFrom.utc() : a = s(t.dateFrom, t.formatFrom).utc()), typeof t.dateTo != "number" && (t.dateTo instanceof O ? d = t.dateTo.utc() : d = s(t.dateTo, t.formatTo !== e ? t.formatTo : t.formatFrom).utc()), typeof t.period == "number" ? E = {
|
|
717
717
|
year: 0,
|
|
718
718
|
month: 0,
|
|
719
719
|
day: 0,
|
|
720
720
|
hours: 0,
|
|
721
721
|
minutes: 0,
|
|
722
722
|
seconds: t.period
|
|
723
|
-
} : typeof t.period == "string" ?
|
|
723
|
+
} : typeof t.period == "string" ? E = {
|
|
724
724
|
year: t.period === "year" ? 1 : 0,
|
|
725
725
|
month: t.period === "month" ? 1 : 0,
|
|
726
726
|
day: t.period === "day" ? 1 : 0,
|
|
727
727
|
hours: t.period === "hours" ? 1 : 0,
|
|
728
728
|
minutes: t.period === "minutes" ? 1 : 0,
|
|
729
729
|
seconds: t.period === "seconds" ? 1 : 0
|
|
730
|
-
} : typeof t.period == "object" && (
|
|
731
|
-
year: t.period.year !==
|
|
732
|
-
month: t.period.month !==
|
|
733
|
-
day: t.period.day !==
|
|
734
|
-
hours: t.period.hours !==
|
|
735
|
-
minutes: t.period.minutes !==
|
|
736
|
-
seconds: t.period.seconds !==
|
|
737
|
-
}), t.groupBy ===
|
|
738
|
-
return t.asObject === !0 ? t.format !==
|
|
739
|
-
}, t.groupBy !==
|
|
740
|
-
var
|
|
741
|
-
year:
|
|
742
|
-
month:
|
|
743
|
-
day:
|
|
744
|
-
hours:
|
|
745
|
-
minutes:
|
|
746
|
-
seconds:
|
|
747
|
-
milliseconds:
|
|
730
|
+
} : typeof t.period == "object" && (E = {
|
|
731
|
+
year: t.period.year !== e ? t.period.year : 0,
|
|
732
|
+
month: t.period.month !== e ? t.period.month : 0,
|
|
733
|
+
day: t.period.day !== e ? t.period.day : 0,
|
|
734
|
+
hours: t.period.hours !== e ? t.period.hours : 0,
|
|
735
|
+
minutes: t.period.minutes !== e ? t.period.minutes : 0,
|
|
736
|
+
seconds: t.period.seconds !== e ? t.period.seconds : 0
|
|
737
|
+
}), t.groupBy === e ? b = t.asObject === !0 ? {} : [] : (b = [], b.push([]), v = s(a).get()[t.groupBy]), Y = function(x, w, H) {
|
|
738
|
+
return t.asObject === !0 ? t.format !== e ? x[s(w).format(t.format)] = {} : x[s(w).format("%F %H:%M:%S")] = {} : t.format !== e ? x.push(H ? null : s(w).format(t.format)) : x.push(H ? null : s(w)), x;
|
|
739
|
+
}, t.groupBy !== e && t.fillNulls) {
|
|
740
|
+
var G = {
|
|
741
|
+
year: E.year ? -E.year : e,
|
|
742
|
+
month: E.month ? -E.month : e,
|
|
743
|
+
day: E.day ? -E.day : e,
|
|
744
|
+
hours: E.hours ? -E.hours : e,
|
|
745
|
+
minutes: E.minutes ? -E.minutes : e,
|
|
746
|
+
seconds: E.seconds ? -E.seconds : e,
|
|
747
|
+
milliseconds: E.milliseconds ? -E.milliseconds : e
|
|
748
748
|
};
|
|
749
|
-
for (
|
|
750
|
-
|
|
749
|
+
for (g = s(a).calc(G).utc(); s(g).get()[t.groupBy] === v; )
|
|
750
|
+
Y(b[b.length - 1], g, !0), g = s(g).calc(G).utc();
|
|
751
751
|
if (t.groupBy === "week") {
|
|
752
|
-
var
|
|
753
|
-
for (
|
|
754
|
-
|
|
752
|
+
var C = s(a).dayOfWeek();
|
|
753
|
+
for (g = s(a).dayOfWeek(0).utc(); b[0].length < C && g < a; )
|
|
754
|
+
Y(b[b.length - 1], g, !0), g = s(g).calc(E).utc();
|
|
755
755
|
}
|
|
756
756
|
}
|
|
757
|
-
for (;
|
|
758
|
-
t.groupBy ===
|
|
759
|
-
if (t.groupBy !==
|
|
760
|
-
for (
|
|
761
|
-
|
|
762
|
-
return
|
|
757
|
+
for (; a <= d; )
|
|
758
|
+
t.groupBy === e ? Y(b, a) : s(a).get()[t.groupBy] === v ? Y(b[b.length - 1], a) : (b.push([]), Y(b[b.length - 1], a), v = s(a).get()[t.groupBy]), a = s(a).calc(E).utc();
|
|
759
|
+
if (t.groupBy !== e && t.fillNulls)
|
|
760
|
+
for (k = s(d).calc(E).utc(); s(k).get()[t.groupBy] === v; )
|
|
761
|
+
Y(b[b.length - 1], k, !0), k = s(k).calc(E).utc();
|
|
762
|
+
return b;
|
|
763
763
|
}, s.monthNames = function(t) {
|
|
764
764
|
switch (t) {
|
|
765
765
|
case "long":
|
|
766
|
-
return
|
|
766
|
+
return L;
|
|
767
767
|
default:
|
|
768
|
-
return
|
|
768
|
+
return M;
|
|
769
769
|
}
|
|
770
770
|
}, s.dayNames = function(t) {
|
|
771
771
|
switch (t) {
|
|
772
772
|
case "long":
|
|
773
|
-
return
|
|
773
|
+
return D;
|
|
774
774
|
default:
|
|
775
|
-
return
|
|
775
|
+
return B;
|
|
776
776
|
}
|
|
777
777
|
}, s.lang = function(t) {
|
|
778
|
-
if (t !==
|
|
779
|
-
A = t,
|
|
778
|
+
if (t !== e)
|
|
779
|
+
A = t, u[A] === e && (A = "en"), L = N(), M = y(), D = p(), B = R();
|
|
780
780
|
else
|
|
781
781
|
return A;
|
|
782
|
-
return
|
|
782
|
+
return e;
|
|
783
783
|
}, s.availableLangs = function() {
|
|
784
|
-
return Object.keys(
|
|
785
|
-
}, s.registerFormat = function(t,
|
|
786
|
-
|
|
787
|
-
format:
|
|
788
|
-
parse:
|
|
789
|
-
minLength:
|
|
790
|
-
maxLength:
|
|
791
|
-
type:
|
|
784
|
+
return Object.keys(u);
|
|
785
|
+
}, s.registerFormat = function(t, a, d, g, k, E) {
|
|
786
|
+
S[t] = {
|
|
787
|
+
format: a,
|
|
788
|
+
parse: d,
|
|
789
|
+
minLength: g,
|
|
790
|
+
maxLength: k,
|
|
791
|
+
type: E
|
|
792
792
|
};
|
|
793
793
|
}, s.unregisterFormat = function(t) {
|
|
794
|
-
delete
|
|
794
|
+
delete S[t];
|
|
795
795
|
}, s.detectFormat = function(t) {
|
|
796
|
-
var
|
|
797
|
-
return
|
|
798
|
-
},
|
|
799
|
-
TempusDate:
|
|
800
|
-
}, s.classes = function(t,
|
|
801
|
-
if (
|
|
802
|
-
return
|
|
803
|
-
|
|
796
|
+
var a, d, g;
|
|
797
|
+
return a = c(t, 0), a !== "" && (g = 10), d = t.charAt(g), (d === "T" || d === " ") && (a += d, g += 1), a += l(t, g), a;
|
|
798
|
+
}, f = {
|
|
799
|
+
TempusDate: O
|
|
800
|
+
}, s.classes = function(t, a) {
|
|
801
|
+
if (a === e)
|
|
802
|
+
return f[t];
|
|
803
|
+
f[t] = a;
|
|
804
804
|
}, s.loadTranslations = function(t) {
|
|
805
|
-
typeof t == "object" ?
|
|
806
|
-
|
|
807
|
-
}, function(
|
|
805
|
+
typeof t == "object" ? u = t : typeof t == "string" && F(t, function(a) {
|
|
806
|
+
u = a;
|
|
807
|
+
}, function(a) {
|
|
808
808
|
});
|
|
809
|
-
}, A = (
|
|
809
|
+
}, A = (m.language || m.systemLanguage || m.userLanguage || "en").substr(0, 2).toLowerCase(), u[A] === e && (A = "en"), L = N(), M = y(), D = p(), B = R(), _.exports && (r = _.exports = s), r.tempus = s;
|
|
810
810
|
}).call(Tt);
|
|
811
|
-
})(
|
|
812
|
-
var Lt =
|
|
811
|
+
})(lt, lt.exports);
|
|
812
|
+
var Lt = lt.exports;
|
|
813
813
|
const rt = /* @__PURE__ */ Rt(Lt);
|
|
814
|
-
class
|
|
815
|
-
constructor(
|
|
816
|
-
this.callBatch =
|
|
814
|
+
class K {
|
|
815
|
+
constructor(r) {
|
|
816
|
+
this.callBatch = r, this.result = {}, this.errors = {}, this.limit = 50, this.canContinue = !0, this.progressCall = "", this.limitCall = "", this.progressData = "", this.progressTimer = "", this.progressDelay = 100, this.oldPercent = "no", this.chunkRate = 1, this.totalProgress = 0, this.skipList = /* @__PURE__ */ new Set(), this.filterChunkSize = 50;
|
|
817
817
|
}
|
|
818
818
|
/**
|
|
819
819
|
* Извлечение данных из ответа API с учетом различных форматов
|
|
820
820
|
* @param {Object} data - Ответ от API
|
|
821
821
|
* @returns {any} Данные из ответа
|
|
822
822
|
*/
|
|
823
|
-
getData(
|
|
824
|
-
return (
|
|
823
|
+
getData(r) {
|
|
824
|
+
return (r == null ? void 0 : r.items) ?? (r == null ? void 0 : r.tasks) ?? (r == null ? void 0 : r.types) ?? (r == null ? void 0 : r.type) ?? (r == null ? void 0 : r.fields) ?? (r == null ? void 0 : r.workgroups) ?? r;
|
|
825
|
+
}
|
|
826
|
+
/**
|
|
827
|
+
* Проверяет, содержит ли запрос большие массивы в фильтрах, которые могут вызвать 500 ошибку
|
|
828
|
+
* Разбивает такие запросы на несколько запросов с меньшими фильтрами
|
|
829
|
+
* @param {string} key - Ключ запроса
|
|
830
|
+
* @param {Object} request - Объект запроса {method, params}
|
|
831
|
+
* @returns {Array} Массив запросов (может быть один или несколько)
|
|
832
|
+
*/
|
|
833
|
+
splitLargeFilters(r, e) {
|
|
834
|
+
const { method: i, params: n } = e;
|
|
835
|
+
if (!n)
|
|
836
|
+
return [{ key: r, request: e }];
|
|
837
|
+
const o = n.filter || n.FILTER;
|
|
838
|
+
if (!o || typeof o != "object" || Array.isArray(o))
|
|
839
|
+
return [{ key: r, request: e }];
|
|
840
|
+
for (const [l, c] of Object.entries(o))
|
|
841
|
+
if (Array.isArray(c) && c.length > this.filterChunkSize) {
|
|
842
|
+
const h = [];
|
|
843
|
+
for (let s = 0; s < c.length; s += this.filterChunkSize) {
|
|
844
|
+
const f = c.slice(s, s + this.filterChunkSize), m = s === 0 ? r : `${r}__chunk_${Math.floor(s / this.filterChunkSize)}`, A = { ...n };
|
|
845
|
+
n.filter ? (A.filter = { ...o }, A.filter[l] = f) : n.FILTER && (A.FILTER = { ...o }, A.FILTER[l] = f), h.push({
|
|
846
|
+
key: m,
|
|
847
|
+
request: { method: i, params: A },
|
|
848
|
+
originalKey: r,
|
|
849
|
+
filterKey: l,
|
|
850
|
+
chunkIndex: Math.floor(s / this.filterChunkSize)
|
|
851
|
+
});
|
|
852
|
+
}
|
|
853
|
+
return h;
|
|
854
|
+
}
|
|
855
|
+
return [{ key: r, request: e }];
|
|
856
|
+
}
|
|
857
|
+
/**
|
|
858
|
+
* Объединяет результаты разбитых запросов обратно в один результат
|
|
859
|
+
* @param {Object} results - Результаты выполнения разбитых запросов
|
|
860
|
+
* @param {string} originalKey - Оригинальный ключ запроса
|
|
861
|
+
* @returns {Array} Объединенный массив результатов
|
|
862
|
+
*/
|
|
863
|
+
mergeSplitResults(r, e) {
|
|
864
|
+
const i = [], n = Object.keys(r).filter((o) => o.startsWith(e)).sort((o, l) => {
|
|
865
|
+
const c = o.match(/__chunk_(\d+)$/), h = l.match(/__chunk_(\d+)$/);
|
|
866
|
+
return c ? h ? parseInt(c[1]) - parseInt(h[1]) : 1 : -1;
|
|
867
|
+
});
|
|
868
|
+
for (const o of n) {
|
|
869
|
+
const l = r[o];
|
|
870
|
+
Array.isArray(l) ? i.push(...l) : l && i.push(l);
|
|
871
|
+
}
|
|
872
|
+
return i;
|
|
825
873
|
}
|
|
826
874
|
/**
|
|
827
875
|
* Вычисление текущего прогресса выполнения batch запросов
|
|
828
876
|
* @returns {{percent: number, allCount: number, allTotal: number}}
|
|
829
877
|
*/
|
|
830
878
|
get progressPercent() {
|
|
831
|
-
let
|
|
879
|
+
let r = 0;
|
|
832
880
|
if (!this.progressData)
|
|
833
|
-
return { percent: Math.round(
|
|
834
|
-
let
|
|
835
|
-
return Object.values(this.progressData).forEach((
|
|
836
|
-
const { total:
|
|
837
|
-
|
|
838
|
-
}),
|
|
881
|
+
return { percent: Math.round(r), allCount: 0, allTotal: 0 };
|
|
882
|
+
let e = 0, i = 0;
|
|
883
|
+
return Object.values(this.progressData).forEach((n) => {
|
|
884
|
+
const { total: o, count: l } = n;
|
|
885
|
+
e += o ?? 0, i += l ?? 0;
|
|
886
|
+
}), e ? r = i / e * 100 * this.chunkRate + this.totalProgress : i === 0 && e === 0 ? r = 100 * this.chunkRate + this.totalProgress : r = 100, { percent: Math.round(r), allCount: i, allTotal: e };
|
|
839
887
|
}
|
|
840
888
|
/**
|
|
841
889
|
* Обновление данных прогресса выполнения
|
|
@@ -844,19 +892,19 @@ class v {
|
|
|
844
892
|
* @param {Object} params.value - Значение ответа от API
|
|
845
893
|
* @param {string} params.type - Тип обработки ('count' или undefined)
|
|
846
894
|
*/
|
|
847
|
-
setProgressData({ key:
|
|
848
|
-
const
|
|
849
|
-
let
|
|
850
|
-
i === "count" && (
|
|
851
|
-
let
|
|
852
|
-
|
|
853
|
-
const { percent:
|
|
895
|
+
setProgressData({ key: r, value: e, type: i }) {
|
|
896
|
+
const n = this.getData(e.data()), o = Array.isArray(n) ? n.length : 0;
|
|
897
|
+
let l = e.total() || o;
|
|
898
|
+
i === "count" && (l = o);
|
|
899
|
+
let c = 1;
|
|
900
|
+
n && (c = o), this.progressCall && (this.progressData || (this.progressData = {}), this.progressData[r] && this.progressData[r].count && (c += this.progressData[r].count), this.progressData[r] ? this.progressData[r].count = c : this.progressData[r] = { total: l, count: c }, this.progressTimer || (this.progressTimer = setInterval(() => {
|
|
901
|
+
const { percent: h, allCount: s, allTotal: f } = this.progressPercent;
|
|
854
902
|
(this.oldPercent === "no" || this.oldPercent < this.progressPercent.percent) && (this.progressCall({
|
|
855
903
|
data: this.progressData,
|
|
856
|
-
percent:
|
|
904
|
+
percent: h,
|
|
857
905
|
allCount: s,
|
|
858
|
-
allTotal:
|
|
859
|
-
}), this.oldPercent = this.progressPercent.percent),
|
|
906
|
+
allTotal: f
|
|
907
|
+
}), this.oldPercent = this.progressPercent.percent), h >= 100 && this.clearProgressData();
|
|
860
908
|
}, this.progressDelay)));
|
|
861
909
|
}
|
|
862
910
|
/**
|
|
@@ -864,7 +912,7 @@ class v {
|
|
|
864
912
|
* @returns {Promise<void>}
|
|
865
913
|
*/
|
|
866
914
|
delay() {
|
|
867
|
-
return new Promise((
|
|
915
|
+
return new Promise((r) => setTimeout(r, 500));
|
|
868
916
|
}
|
|
869
917
|
/**
|
|
870
918
|
* Обертка над callBatch с таймаутом для предотвращения зависаний
|
|
@@ -874,28 +922,28 @@ class v {
|
|
|
874
922
|
* @param {Function} callback - Callback функция для обработки результата
|
|
875
923
|
* @returns {Promise<void>}
|
|
876
924
|
*/
|
|
877
|
-
callBatchWithTimeout(
|
|
878
|
-
return new Promise((i,
|
|
879
|
-
let
|
|
880
|
-
const
|
|
881
|
-
let
|
|
882
|
-
const A = async (
|
|
883
|
-
if (!
|
|
884
|
-
|
|
925
|
+
callBatchWithTimeout(r, e) {
|
|
926
|
+
return new Promise((i, n) => {
|
|
927
|
+
let o = !1;
|
|
928
|
+
const l = 6e4;
|
|
929
|
+
let c = !1, h = !1, s = !1, f = null, m = null;
|
|
930
|
+
const A = async (y, p) => {
|
|
931
|
+
if (!o) {
|
|
932
|
+
o = !0, f && clearTimeout(f), m && clearTimeout(m);
|
|
885
933
|
try {
|
|
886
|
-
await Promise.resolve(
|
|
887
|
-
} catch (
|
|
888
|
-
console.error(`Error in callBatch callback (attempt ${p}):`,
|
|
934
|
+
await Promise.resolve(e(y)), i();
|
|
935
|
+
} catch (R) {
|
|
936
|
+
console.error(`Error in callBatch callback (attempt ${p}):`, R), n(R);
|
|
889
937
|
}
|
|
890
938
|
}
|
|
891
|
-
},
|
|
892
|
-
if (!
|
|
893
|
-
|
|
894
|
-
`Batch request timeout after ${
|
|
939
|
+
}, u = async () => {
|
|
940
|
+
if (!o) {
|
|
941
|
+
o = !0, f && clearTimeout(f), m && clearTimeout(m), console.warn(
|
|
942
|
+
`Batch request timeout after ${l}ms on both attempts. This may indicate a CORS or network error.`
|
|
895
943
|
);
|
|
896
|
-
const
|
|
897
|
-
Object.keys(
|
|
898
|
-
|
|
944
|
+
const y = {};
|
|
945
|
+
Object.keys(r).forEach((p) => {
|
|
946
|
+
y[p] = {
|
|
899
947
|
error: () => ({
|
|
900
948
|
ex: {
|
|
901
949
|
error: "TIMEOUT",
|
|
@@ -907,27 +955,27 @@ class v {
|
|
|
907
955
|
};
|
|
908
956
|
});
|
|
909
957
|
try {
|
|
910
|
-
await Promise.resolve(
|
|
958
|
+
await Promise.resolve(e(y)), i();
|
|
911
959
|
} catch (p) {
|
|
912
960
|
console.error("Error in timeout callback:", p), i();
|
|
913
961
|
}
|
|
914
962
|
}
|
|
915
|
-
}, N = (
|
|
963
|
+
}, N = (y) => {
|
|
916
964
|
try {
|
|
917
|
-
this.callBatch(
|
|
918
|
-
|
|
965
|
+
this.callBatch(r, async (p) => {
|
|
966
|
+
y === 1 && !c && !o ? (c = !0, await A(p, 1)) : y === 2 && !s && !o && (s = !0, await A(p, 2));
|
|
919
967
|
});
|
|
920
968
|
} catch (p) {
|
|
921
|
-
|
|
969
|
+
o || console.error(`Error calling callBatch (attempt ${y}):`, p);
|
|
922
970
|
}
|
|
923
971
|
};
|
|
924
|
-
N(1),
|
|
925
|
-
!
|
|
926
|
-
`First batch request attempt timeout after ${
|
|
927
|
-
),
|
|
928
|
-
!
|
|
929
|
-
},
|
|
930
|
-
},
|
|
972
|
+
N(1), f = setTimeout(async () => {
|
|
973
|
+
!c && !o && !h && (console.warn(
|
|
974
|
+
`First batch request attempt timeout after ${l}ms. Starting second attempt...`
|
|
975
|
+
), h = !0, N(2), m = setTimeout(async () => {
|
|
976
|
+
!c && !s && !o && await u();
|
|
977
|
+
}, l));
|
|
978
|
+
}, l);
|
|
931
979
|
});
|
|
932
980
|
}
|
|
933
981
|
/**
|
|
@@ -947,90 +995,153 @@ class v {
|
|
|
947
995
|
* @param {Function} progressCall - Функция получающая данные выполнения батча
|
|
948
996
|
* @returns {Promise}
|
|
949
997
|
*/
|
|
950
|
-
async batch(
|
|
951
|
-
this.progressTimer && this.clearProgressData(),
|
|
952
|
-
const o = {};
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
if (!this.canContinue)
|
|
957
|
-
break;
|
|
958
|
-
const s = this.arrayChunk(c);
|
|
959
|
-
if (!s) {
|
|
960
|
-
h++;
|
|
998
|
+
async batch(r, e, i) {
|
|
999
|
+
this.progressTimer && this.clearProgressData(), e && (this.progressCall = e), i && (this.limitCall = i), this.canContinue = !0, this.result = {}, this.errors = {};
|
|
1000
|
+
const n = {}, o = {}, l = {};
|
|
1001
|
+
for (const [f, m] of Object.entries(r)) {
|
|
1002
|
+
const A = this.arrayChunk(m);
|
|
1003
|
+
if (!A)
|
|
961
1004
|
continue;
|
|
1005
|
+
const u = this.splitLargeFilters(f, A);
|
|
1006
|
+
if (u.length === 1)
|
|
1007
|
+
o[f] = A;
|
|
1008
|
+
else {
|
|
1009
|
+
l[f] = [];
|
|
1010
|
+
for (const N of u)
|
|
1011
|
+
o[N.key] = N.request, l[f].push(N.key);
|
|
962
1012
|
}
|
|
963
|
-
|
|
964
|
-
|
|
1013
|
+
}
|
|
1014
|
+
this.chunkRate = (1 / Math.ceil(Object.keys(o).length / this.limit)).toFixed(5);
|
|
1015
|
+
let c = {}, h = 0;
|
|
1016
|
+
const s = Object.keys(o).length;
|
|
1017
|
+
for (const [f, m] of Object.entries(o)) {
|
|
1018
|
+
if (!this.canContinue)
|
|
1019
|
+
break;
|
|
1020
|
+
c[f] = m, (Object.keys(c).length >= 50 || h + 1 === s) && (await this.batchChunk(c), Object.entries(this.result).forEach(([A, u]) => {
|
|
1021
|
+
n[A] = u;
|
|
965
1022
|
}), this.totalProgress = Math.round(
|
|
966
|
-
h /
|
|
967
|
-
),
|
|
1023
|
+
h / s * 100
|
|
1024
|
+
), c = {}), h++;
|
|
968
1025
|
}
|
|
969
|
-
|
|
1026
|
+
for (const [f, m] of Object.entries(l))
|
|
1027
|
+
if (m && m.length > 0) {
|
|
1028
|
+
const A = this.mergeSplitResults(n, f);
|
|
1029
|
+
for (const u of m)
|
|
1030
|
+
delete n[u];
|
|
1031
|
+
n[f] = A;
|
|
1032
|
+
}
|
|
1033
|
+
return Object.entries(this.errors).length && (n.errorsList = this.errors), e && e({ percent: 100 }), Promise.resolve(n);
|
|
970
1034
|
}
|
|
971
1035
|
/**
|
|
972
|
-
*
|
|
973
|
-
*
|
|
974
|
-
*
|
|
1036
|
+
* Выполняет батч-запрос и возвращает только количество элементов для каждой команды.
|
|
1037
|
+
* Метод использует `total()` из ответа Bitrix и не догружает постранично,
|
|
1038
|
+
* что уменьшает число REST-запросов при подсчёте больших выборок.
|
|
975
1039
|
*
|
|
976
1040
|
* @param {Object} requestList - Объект с методами для выполнения
|
|
977
1041
|
* @param {Function} progressCall - Callback для отслеживания прогресса
|
|
978
1042
|
* @param {Function} limitCall - Callback при превышении лимитов
|
|
979
1043
|
* @returns {Promise<Object>} Объект с количеством элементов для каждого ключа
|
|
980
1044
|
*/
|
|
981
|
-
async batchTotalCount(
|
|
982
|
-
this.progressTimer && this.clearProgressData(),
|
|
983
|
-
const o = {};
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
if (!this.canContinue)
|
|
988
|
-
break;
|
|
989
|
-
const s = this.arrayChunk(c);
|
|
990
|
-
if (!s) {
|
|
991
|
-
h++;
|
|
1045
|
+
async batchTotalCount(r, e, i) {
|
|
1046
|
+
this.progressTimer && this.clearProgressData(), e && (this.progressCall = e), i && (this.limitCall = i), this.canContinue = !0, this.result = {}, this.errors = {};
|
|
1047
|
+
const n = {}, o = {}, l = {};
|
|
1048
|
+
for (const [s, f] of Object.entries(r)) {
|
|
1049
|
+
const m = this.arrayChunk(f);
|
|
1050
|
+
if (!m)
|
|
992
1051
|
continue;
|
|
1052
|
+
const A = this.splitLargeFilters(s, m);
|
|
1053
|
+
if (A.length === 1)
|
|
1054
|
+
o[s] = m;
|
|
1055
|
+
else {
|
|
1056
|
+
l[s] = [];
|
|
1057
|
+
for (const u of A)
|
|
1058
|
+
o[u.key] = u.request, l[s].push(u.key);
|
|
993
1059
|
}
|
|
994
|
-
a[u] = s, (Object.keys(a).length >= 50 || h + 1 === Object.keys(e).length) && (await this.batchChunk(a, "count"), Object.entries(this.result).forEach(([d, g]) => {
|
|
995
|
-
o[d] = g;
|
|
996
|
-
}), this.totalProgress = Math.round(
|
|
997
|
-
h / Object.keys(e).length * 100
|
|
998
|
-
), a = {}), h++;
|
|
999
1060
|
}
|
|
1000
|
-
|
|
1061
|
+
const c = [], h = Object.entries(o);
|
|
1062
|
+
for (let s = 0; s < h.length; s += this.limit) {
|
|
1063
|
+
const f = h.slice(s, s + this.limit), m = {};
|
|
1064
|
+
for (const [A, u] of f) {
|
|
1065
|
+
if (!this.canContinue)
|
|
1066
|
+
break;
|
|
1067
|
+
m[A] = u;
|
|
1068
|
+
}
|
|
1069
|
+
Object.keys(m).length > 0 && c.push(m);
|
|
1070
|
+
}
|
|
1071
|
+
this.chunkRate = (1 / c.length).toFixed(5);
|
|
1072
|
+
for (const [s, f] of Object.entries(c)) {
|
|
1073
|
+
if (!this.canContinue)
|
|
1074
|
+
break;
|
|
1075
|
+
this.totalProgress = Math.round(Number(s) / c.length * 100), await this.callBatchWithTimeout(f, async (m) => {
|
|
1076
|
+
var A, u, N, y, p, R, L;
|
|
1077
|
+
for (const [M, D] of Object.entries(m)) {
|
|
1078
|
+
if (!this.canContinue)
|
|
1079
|
+
return;
|
|
1080
|
+
if (D.error()) {
|
|
1081
|
+
const O = (u = (A = D.error()) == null ? void 0 : A.ex) == null ? void 0 : u.error, t = (y = (N = D.error()) == null ? void 0 : N.ex) == null ? void 0 : y.error_description;
|
|
1082
|
+
this.errors[M] = O && O.trim() || t && t.trim() || ((p = D.error()) == null ? void 0 : p.toString()) || "Неизвестная ошибка", n[M] = 0;
|
|
1083
|
+
const a = ((L = (R = D.error()) == null ? void 0 : R.ex) == null ? void 0 : L.error) ?? "";
|
|
1084
|
+
let d = "";
|
|
1085
|
+
const g = f[M];
|
|
1086
|
+
switch (Array.isArray(g) ? [d] = g : g != null && g.method && (d = g.method), a) {
|
|
1087
|
+
case "OPERATION_TIME_LIMIT":
|
|
1088
|
+
d && this.skipList.add(d), this.limitCall && this.limitCall(M);
|
|
1089
|
+
break;
|
|
1090
|
+
case "ACCESS_DENIED":
|
|
1091
|
+
d && this.skipList.add(d);
|
|
1092
|
+
break;
|
|
1093
|
+
case "TIMEOUT":
|
|
1094
|
+
d && this.skipList.add(d), this.limitCall && this.limitCall(M);
|
|
1095
|
+
break;
|
|
1096
|
+
}
|
|
1097
|
+
continue;
|
|
1098
|
+
}
|
|
1099
|
+
const B = this.getData(D.data()), F = Array.isArray(B) ? B.length : 0, W = typeof D.total == "function" && D.total() !== void 0 ? D.total() : F;
|
|
1100
|
+
n[M] = W, this.setProgressData({ key: M, value: D, type: "count" });
|
|
1101
|
+
}
|
|
1102
|
+
});
|
|
1103
|
+
}
|
|
1104
|
+
for (const [s, f] of Object.entries(l))
|
|
1105
|
+
if (f && f.length > 0) {
|
|
1106
|
+
let m = 0;
|
|
1107
|
+
for (const A of f)
|
|
1108
|
+
n[A] !== void 0 && (m += n[A] || 0), delete n[A];
|
|
1109
|
+
n[s] = m;
|
|
1110
|
+
}
|
|
1111
|
+
return Object.entries(this.errors).length && (n.errorsList = this.errors, this.errorLogger()), e && e({ percent: 100 }), Promise.resolve(n);
|
|
1001
1112
|
}
|
|
1002
1113
|
/** Валидация запросов
|
|
1003
1114
|
* Чтобы не перегружать Битрикс сервера запросами с start - добавляем нужные поля в параметры
|
|
1004
1115
|
* Так же переделываем некоторые запросы в нужный вид (Для task-методов)
|
|
1005
1116
|
* @param {Array/Object} request - Массив/объект методов
|
|
1006
1117
|
*/
|
|
1007
|
-
arrayChunk(
|
|
1008
|
-
let
|
|
1009
|
-
if (Array.isArray(
|
|
1118
|
+
arrayChunk(r) {
|
|
1119
|
+
let e = "", i = {};
|
|
1120
|
+
if (Array.isArray(r) ? [e] = r : (e = r.method, i = r.params), this.skipList.has(e))
|
|
1010
1121
|
return !1;
|
|
1011
|
-
if ((
|
|
1122
|
+
if ((e.includes("list") || e === "user.get") && e !== "task.item.list") {
|
|
1012
1123
|
if (!i)
|
|
1013
1124
|
i = {
|
|
1014
1125
|
order: { ID: "ASC", id: "ASC" }
|
|
1015
1126
|
};
|
|
1016
1127
|
else {
|
|
1017
|
-
|
|
1018
|
-
const
|
|
1019
|
-
typeof
|
|
1020
|
-
(i.start === void 0 || i.start !== -1) && ["id", "ID"].includes(
|
|
1128
|
+
e === "tasks.task.list" ? (i.order || (i.order = {}), i.order.ID = "asc") : e === "user.get" ? (i.sort || (i.sort = "ID"), i.order || (i.order = "ASC")) : i.order = { ID: "ASC", id: "ASC" }, Array.isArray(i.select) && !i.select.includes("ID") && i.select.push("ID");
|
|
1129
|
+
const n = e === "user.get" ? i.FILTER : i.filter;
|
|
1130
|
+
typeof n == "object" && n !== null && !Array.isArray(n) && Object.entries(n).forEach(([o, l]) => {
|
|
1131
|
+
(i.start === void 0 || i.start !== -1) && ["id", "ID"].includes(o) && (typeof l == "string" || Array.isArray(l) && l.length <= 50) && (i.start = -1);
|
|
1021
1132
|
});
|
|
1022
1133
|
}
|
|
1023
|
-
|
|
1134
|
+
e === "crm.type.list" && i.order && delete i.order.ID;
|
|
1024
1135
|
}
|
|
1025
|
-
if (
|
|
1136
|
+
if (e === "task.item.list")
|
|
1026
1137
|
if (!i)
|
|
1027
1138
|
i = [{ ID: "ASC" }, [""], [""], ["ID"]];
|
|
1028
1139
|
else {
|
|
1029
1140
|
Array.isArray(i[0]) && (i[0] = {});
|
|
1030
|
-
const [
|
|
1031
|
-
|
|
1141
|
+
const [n, o, l, c] = i;
|
|
1142
|
+
n.ID = "ASC", c[0] !== "" && c.includes("ID") || c.push("ID");
|
|
1032
1143
|
}
|
|
1033
|
-
return { method:
|
|
1144
|
+
return { method: e, params: i };
|
|
1034
1145
|
}
|
|
1035
1146
|
/** Выполняет первичный запрос с массивом методов
|
|
1036
1147
|
* При наличии более 50 элементов в нем, подготоваливаем данные и передаем в this.batchPayload
|
|
@@ -1038,44 +1149,46 @@ class v {
|
|
|
1038
1149
|
* @param {Array} query - Тот же массив с методами
|
|
1039
1150
|
* @returns {Object} Объект с результатами запросов
|
|
1040
1151
|
*/
|
|
1041
|
-
async batchChunk(
|
|
1152
|
+
async batchChunk(r, e) {
|
|
1042
1153
|
return new Promise((i) => {
|
|
1043
|
-
const
|
|
1044
|
-
let
|
|
1045
|
-
this.callBatchWithTimeout(
|
|
1046
|
-
var
|
|
1047
|
-
for (const [N,
|
|
1154
|
+
const n = [];
|
|
1155
|
+
let o;
|
|
1156
|
+
this.callBatchWithTimeout(r, async (l) => {
|
|
1157
|
+
var c, h, s, f, m, A, u;
|
|
1158
|
+
for (const [N, y] of Object.entries(l)) {
|
|
1048
1159
|
if (!this.canContinue)
|
|
1049
1160
|
return;
|
|
1050
|
-
if (
|
|
1051
|
-
|
|
1161
|
+
if (y.error()) {
|
|
1162
|
+
const B = (h = (c = y.error()) == null ? void 0 : c.ex) == null ? void 0 : h.error, F = (f = (s = y.error()) == null ? void 0 : s.ex) == null ? void 0 : f.error_description;
|
|
1163
|
+
switch (this.errors[N] = B && B.trim() || F && F.trim() || ((m = y.error()) == null ? void 0 : m.toString()) || "Неизвестная ошибка", o = !0, ((u = (A = y.error()) == null ? void 0 : A.ex) == null ? void 0 : u.error) ?? "") {
|
|
1052
1164
|
case "OPERATION_TIME_LIMIT":
|
|
1053
|
-
this.skipList.add(
|
|
1165
|
+
this.skipList.add(r[N].method), this.limitCall && this.limitCall(N);
|
|
1054
1166
|
break;
|
|
1055
1167
|
case "ACCESS_DENIED":
|
|
1056
|
-
this.skipList.add(
|
|
1168
|
+
this.skipList.add(r[N].method);
|
|
1057
1169
|
break;
|
|
1058
1170
|
case "TIMEOUT":
|
|
1059
|
-
let
|
|
1060
|
-
Array.isArray(
|
|
1171
|
+
let W = r[N], O = "";
|
|
1172
|
+
Array.isArray(W) ? [O] = W : W != null && W.method && (O = W.method), O && this.skipList.add(O), this.limitCall && this.limitCall(N);
|
|
1061
1173
|
break;
|
|
1062
1174
|
}
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1175
|
+
}
|
|
1176
|
+
const p = this.getData(y.data()), R = Array.isArray(p) ? p.length : 0, L = typeof y.total == "function" && y.total() !== void 0, M = L ? y.total() : R;
|
|
1177
|
+
e === "count" ? this.result[N] ? this.result[N] += R : this.result[N] = M : this.result[N] = p, this.setProgressData({ key: N, value: y, type: e });
|
|
1178
|
+
const D = e === "count" ? !L && R === this.limit : M > this.limit && M > R;
|
|
1179
|
+
if (!this.canContinue || D) {
|
|
1180
|
+
let B = r[N];
|
|
1181
|
+
if (Array.isArray(B)) {
|
|
1182
|
+
const [F, S = {}] = B;
|
|
1183
|
+
B = [F, S];
|
|
1071
1184
|
} else {
|
|
1072
|
-
const { method:
|
|
1073
|
-
|
|
1185
|
+
const { method: F, params: S = {} } = B;
|
|
1186
|
+
B = [F, S];
|
|
1074
1187
|
}
|
|
1075
|
-
|
|
1188
|
+
n.push([N, B, M]);
|
|
1076
1189
|
}
|
|
1077
1190
|
}
|
|
1078
|
-
|
|
1191
|
+
o > 0 && this.errorLogger(), n.length ? await this.batchPayload(n, e).then(
|
|
1079
1192
|
() => i(this.result)
|
|
1080
1193
|
) : i(this.result);
|
|
1081
1194
|
});
|
|
@@ -1085,81 +1198,82 @@ class v {
|
|
|
1085
1198
|
* @param {Array} payloadList - Массив с подмассивами списочных методов
|
|
1086
1199
|
* @param {String} type - Тип обработки результатов ('count' или undefined)
|
|
1087
1200
|
*/
|
|
1088
|
-
async batchPayload(
|
|
1089
|
-
const i = /* @__PURE__ */ new Map(),
|
|
1201
|
+
async batchPayload(r, e) {
|
|
1202
|
+
const i = /* @__PURE__ */ new Map(), n = (h, s, f, m) => {
|
|
1090
1203
|
let A = "ID";
|
|
1091
|
-
this.result[
|
|
1092
|
-
let
|
|
1093
|
-
if (JSON.stringify(
|
|
1204
|
+
this.result[h][this.result[h].length - 1].ID || (A = "id");
|
|
1205
|
+
let u = `${A}`;
|
|
1206
|
+
if (JSON.stringify(m[1]).toLocaleLowerCase().includes('"id":"desc"') ? u = "<" + u : u = ">" + u, s === 1 || f.length === 0)
|
|
1094
1207
|
return {
|
|
1095
|
-
field:
|
|
1096
|
-
id: this.result[
|
|
1208
|
+
field: u,
|
|
1209
|
+
id: this.result[h][this.result[h].length - 1][A]
|
|
1097
1210
|
};
|
|
1098
|
-
let
|
|
1099
|
-
const [p,
|
|
1100
|
-
return (p === "tasks.task.list" || p === "task.item.list") && (
|
|
1101
|
-
field:
|
|
1102
|
-
id: `$result[${[
|
|
1211
|
+
let y = "";
|
|
1212
|
+
const [p, R] = m;
|
|
1213
|
+
return (p === "tasks.task.list" || p === "task.item.list") && (y = "[tasks]"), ["crm.item.list", "crm.stagehistory.list"].includes(p) && (y = "[items]"), p === "crm.type.list" && (y = "[types]"), p === "socialnetwork.api.workgroup.list" && (y = "[workgroups]"), {
|
|
1214
|
+
field: u,
|
|
1215
|
+
id: `$result[${[h, s - 1].join("__")}]${y}[49][${A}]`
|
|
1103
1216
|
};
|
|
1104
|
-
},
|
|
1105
|
-
const [
|
|
1106
|
-
let A = JSON.parse(JSON.stringify(
|
|
1107
|
-
if (
|
|
1217
|
+
}, o = (h, s) => {
|
|
1218
|
+
const [f, m] = h;
|
|
1219
|
+
let A = JSON.parse(JSON.stringify(m)), u;
|
|
1220
|
+
if (f === "task.item.list") {
|
|
1108
1221
|
A = [...A];
|
|
1109
|
-
const [N,
|
|
1110
|
-
return
|
|
1222
|
+
const [N, y, p, R] = A;
|
|
1223
|
+
return y[s.field] = s.id, [f, A];
|
|
1111
1224
|
}
|
|
1112
|
-
return ["user.get"].includes(
|
|
1225
|
+
return ["user.get"].includes(f) || A.FILTER ? (A.FILTER || (A.FILTER = {}), u = A.FILTER) : (A.filter || (A.filter = {}), u = A.filter), [
|
|
1113
1226
|
"socialnetwork.api.workgroup.list",
|
|
1114
1227
|
"tasks.task.list"
|
|
1115
|
-
].includes(
|
|
1116
|
-
},
|
|
1117
|
-
Object.entries(
|
|
1118
|
-
var
|
|
1119
|
-
const [
|
|
1120
|
-
if (Array.isArray(A) && (
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1228
|
+
].includes(f) ? u[">ID"] = s.id : u[s.field] = s.id, [f, { ...A, start: -1 }];
|
|
1229
|
+
}, l = (h) => {
|
|
1230
|
+
Object.entries(h).forEach(([s, f]) => {
|
|
1231
|
+
var u, N, y, p, R, L, M;
|
|
1232
|
+
const [m] = s.split("__"), A = this.getData(f.data());
|
|
1233
|
+
if (Array.isArray(A) && (e === "count" ? this.result[m] += A.length : this.result[m].push(...A)), f.error()) {
|
|
1234
|
+
const D = (N = (u = f.error()) == null ? void 0 : u.ex) == null ? void 0 : N.error, B = (p = (y = f.error()) == null ? void 0 : y.ex) == null ? void 0 : p.error_description;
|
|
1235
|
+
this.errors[m] = D && D.trim() || B && B.trim() || ((R = f.error()) == null ? void 0 : R.toString()) || "Неизвестная ошибка";
|
|
1236
|
+
const F = ((M = (L = f.error()) == null ? void 0 : L.ex) == null ? void 0 : M.error) ?? "", S = i.get(m);
|
|
1237
|
+
switch (F) {
|
|
1124
1238
|
case "OPERATION_TIME_LIMIT":
|
|
1125
|
-
|
|
1239
|
+
S && (this.skipList.add(S), this.limitCall && this.limitCall(m));
|
|
1126
1240
|
break;
|
|
1127
1241
|
case "QUERY_LIMIT_EXCEEDED":
|
|
1128
1242
|
this.canContinue = !1;
|
|
1129
1243
|
break;
|
|
1130
1244
|
case "ACCESS_DENIED":
|
|
1131
|
-
|
|
1245
|
+
S && this.skipList.add(S);
|
|
1132
1246
|
break;
|
|
1133
1247
|
case "TIMEOUT":
|
|
1134
|
-
|
|
1248
|
+
S && (this.skipList.add(S), this.limitCall && this.limitCall(m));
|
|
1135
1249
|
break;
|
|
1136
1250
|
}
|
|
1137
1251
|
}
|
|
1138
|
-
this.setProgressData({ key:
|
|
1252
|
+
this.setProgressData({ key: m, value: f, type: e });
|
|
1139
1253
|
});
|
|
1140
1254
|
};
|
|
1141
|
-
let
|
|
1142
|
-
for await (const [
|
|
1255
|
+
let c = [];
|
|
1256
|
+
for await (const [h, s, f] of r) {
|
|
1143
1257
|
if (!this.canContinue)
|
|
1144
1258
|
return;
|
|
1145
|
-
const [
|
|
1146
|
-
if (i.set(
|
|
1259
|
+
const [m] = s;
|
|
1260
|
+
if (i.set(h, m), this.skipList.has(m))
|
|
1147
1261
|
continue;
|
|
1148
1262
|
let A = 1;
|
|
1149
|
-
for (;
|
|
1150
|
-
const
|
|
1151
|
-
|
|
1152
|
-
Object.fromEntries(
|
|
1153
|
-
(
|
|
1154
|
-
|
|
1263
|
+
for (; f > A * 50 && !this.skipList.has(m); ) {
|
|
1264
|
+
const u = [h, A].join("__"), N = n(h, A, c, s);
|
|
1265
|
+
c.push([u, o(s, N)]), c.length % 50 === 0 && (await this.callBatchWithTimeout(
|
|
1266
|
+
Object.fromEntries(c),
|
|
1267
|
+
(y) => {
|
|
1268
|
+
l(y);
|
|
1155
1269
|
}
|
|
1156
|
-
),
|
|
1270
|
+
), c = [], await this.delay()), A++;
|
|
1157
1271
|
}
|
|
1158
1272
|
}
|
|
1159
|
-
|
|
1160
|
-
Object.fromEntries(
|
|
1161
|
-
(
|
|
1162
|
-
h
|
|
1273
|
+
c.length && (await this.callBatchWithTimeout(
|
|
1274
|
+
Object.fromEntries(c),
|
|
1275
|
+
(h) => {
|
|
1276
|
+
l(h);
|
|
1163
1277
|
}
|
|
1164
1278
|
), await this.delay());
|
|
1165
1279
|
}
|
|
@@ -1167,15 +1281,15 @@ class v {
|
|
|
1167
1281
|
* Вывод ошибок в консоль в группированном виде
|
|
1168
1282
|
*/
|
|
1169
1283
|
errorLogger() {
|
|
1170
|
-
console.group(`${this.constructor.name}: Ошибки в методах!`), Object.entries(this.errors).forEach(([
|
|
1171
|
-
|
|
1284
|
+
console.group(`${this.constructor.name}: Ошибки в методах!`), Object.entries(this.errors).forEach(([r, e]) => {
|
|
1285
|
+
e && console.log(`[${r}]`, e.toString());
|
|
1172
1286
|
}), console.groupEnd();
|
|
1173
1287
|
}
|
|
1174
1288
|
}
|
|
1175
|
-
var
|
|
1289
|
+
var z;
|
|
1176
1290
|
class mt {
|
|
1177
1291
|
constructor() {
|
|
1178
|
-
|
|
1292
|
+
U(this, z, {});
|
|
1179
1293
|
}
|
|
1180
1294
|
/**
|
|
1181
1295
|
* Получить случайный хеш-код длиной 8 символов
|
|
@@ -1189,11 +1303,11 @@ class mt {
|
|
|
1189
1303
|
* @param {number} length - Длина генерируемого хеша
|
|
1190
1304
|
* @returns {string}
|
|
1191
1305
|
*/
|
|
1192
|
-
createHash(
|
|
1193
|
-
let
|
|
1194
|
-
|
|
1195
|
-
for (let
|
|
1196
|
-
i +=
|
|
1306
|
+
createHash(r) {
|
|
1307
|
+
let e = "abcdefghijklmnopqrstuvwxyz0123456789", i = "";
|
|
1308
|
+
r = r || 6;
|
|
1309
|
+
for (let n = 0; n < r; n++)
|
|
1310
|
+
i += e.charAt(Math.floor(Math.random() * e.length));
|
|
1197
1311
|
return i;
|
|
1198
1312
|
}
|
|
1199
1313
|
/**
|
|
@@ -1203,98 +1317,98 @@ class mt {
|
|
|
1203
1317
|
* @param {number} params.duration - Задержка в миллисекундах (по умолчанию 10)
|
|
1204
1318
|
* @param {Function} params.action - Функция для выполнения
|
|
1205
1319
|
*/
|
|
1206
|
-
actionFilter({ keyTimer:
|
|
1207
|
-
|
|
1320
|
+
actionFilter({ keyTimer: r, duration: e = 10, action: i }) {
|
|
1321
|
+
T(this, z)[r] && (clearTimeout(T(this, z)[r]), T(this, z)[r] = null), i && (T(this, z)[r] = setTimeout(() => {
|
|
1208
1322
|
i();
|
|
1209
|
-
},
|
|
1323
|
+
}, e));
|
|
1210
1324
|
}
|
|
1211
1325
|
/**
|
|
1212
1326
|
* Включение режима NO-SLEEP для предотвращения засыпания устройства
|
|
1213
1327
|
* Создает невидимое видео, которое циклически воспроизводится
|
|
1214
1328
|
*/
|
|
1215
1329
|
async noSleep() {
|
|
1216
|
-
let
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
console.warn("noSleep: autoplay prevented",
|
|
1330
|
+
let r = document.createElement("video");
|
|
1331
|
+
r.classList.add("no-sleep"), r.muted = !0, r.autoplay = !0, r.setAttribute("playsinline", ""), r.addEventListener("loadeddata", () => {
|
|
1332
|
+
r.style.position = "fixed", r.style.left = "-9999px", document.querySelector("body").append(r), r.play().catch((e) => {
|
|
1333
|
+
console.warn("noSleep: autoplay prevented", e);
|
|
1220
1334
|
});
|
|
1221
|
-
}),
|
|
1335
|
+
}), r.addEventListener("ended", () => {
|
|
1222
1336
|
this.actionFilter({
|
|
1223
1337
|
keyTimer: "no-sleep",
|
|
1224
1338
|
duration: 5e3,
|
|
1225
1339
|
action: () => {
|
|
1226
|
-
|
|
1227
|
-
console.warn("noSleep: replay prevented",
|
|
1340
|
+
r.play().catch((e) => {
|
|
1341
|
+
console.warn("noSleep: replay prevented", e);
|
|
1228
1342
|
});
|
|
1229
1343
|
}
|
|
1230
1344
|
});
|
|
1231
|
-
}),
|
|
1345
|
+
}), r.src = "data:video/mp4;base64,AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAAAP5tZGF0AAAAAQYAAADlZYiEE28FmH9jNWDBjI+Z/1tIBZsjfhbmcNNUpBFej0U3p+zhaJ3eemJRL2LUMa5tkidy6bp+eatLE3jBIY864TvaAmqEFCgLMTCwVbem1n3myAw9yDXQdR5HfU/8iYf+eneVnRf7Qx9M70XDUuPx1MJX671XJwAE0VAMpnhbcUDx0pTldvUX9KQPhkZNH3eyZHmObkAeyEJ2tl+BEBJIGc90BiqKL60+5EA6fXB6iG5UU/M5KsW8BNAAUw5CbRJIqohNk10fwKbUXwya03rqGkE8+wuYGtEbrVYXb+iOl1mHHVPLYQbIAAcGyAAHAAAFNG1vb3YAAABsbXZoZAAAAAAAAAAAAAAAAAAAA+gAAAAvAAEAAAEAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAIldHJhawAAAFx0a2hkAAAAAwAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAFAAAAA8AAAAAAAJGVkdHMAAAAcZWxzdAAAAAAAAAABAAAAAAAAAAAAAQAAAAABnW1kaWEAAAAgbWRoZAAAAAAAAAAAAAAAAAAAQAAAAAAAVcQAAAAAAC1oZGxyAAAAAAAAAAB2aWRlAAAAAAAAAAAAAAAAVmlkZW9IYW5kbGVyAAAAAUhtaW5mAAAAFHZtaGQAAAABAAAAAAAAAAAAAAAkZGluZgAAABxkcmVmAAAAAAAAAAEAAAAMdXJsIAAAAAEAAAEIc3RibAAAAKRzdHNkAAAAAAAAAAEAAACUYXZjMQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAFAAPAASAAAAEgAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABj//wAAAC5hdmNDAU1AC//hABZnTUAL2wUH7ARAAAADAEAAAAQDxQq4AQAFaOrAZXIAAAAQcGFzcAAAAAEAAAABAAAAGHN0dHMAAAAAAAAAAQAAAAEAAAAAAAAAHHN0c2MAAAAAAAAAAQAAAAEAAAABAAAAAQAAABRzdHN6AAAAAAAAAO4AAAABAAAAFHN0Y28AAAAAAAAAAQAAADAAAAIadHJhawAAAFx0a2hkAAAAAwAAAAAAAAAAAAAAAgAAAAAAAAAvAAAAAAAAAAAAAAABAQAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAJGVkdHMAAAAcZWxzdAAAAAAAAAABAAAALwAAAAAAAQAAAAABkm1kaWEAAAAgbWRoZAAAAAAAAAAAAAAAAAAArEQAAAgAVcQAAAAAAC1oZGxyAAAAAAAAAABzb3VuAAAAAAAAAAAAAAAAU291bmRIYW5kbGVyAAAAAT1taW5mAAAAEHNtaGQAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAQFzdGJsAAAAZ3N0c2QAAAAAAAAAAQAAAFdtcDRhAAAAAAAAAAEAAAAAAAAAAAACABAAAAAArEQAAAAAADNlc2RzAAAAAAOAgIAiAAIABICAgBRAFQAAAAAC7gAAAAViBYCAgAISCAaAgIABAgAAABhzdHRzAAAAAAAAAAEAAAACAAAEAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAgAAAAEAAAAUc3RzegAAAAAAAAAEAAAAAgAAABRzdGNvAAAAAAAAAAEAAAEeAAAAGnNncGQBAAAAcm9sbAAAAAIAAAAB//8AAAAcc2JncAAAAAByb2xsAAAAAQAAAAIAAAABAAAAgXVkdGEAAAB5bWV0YQAAAAAAAAAhaGRscgAAAAAAAAAAbWR0YQAAAAAAAAAAAAAAAAAAAAAfa2V5cwAAAAAAAAABAAAAD21kdGFlbmNvZGVyAAAALWlsc3QAAAAlAAAAAQAAAB1kYXRhAAAAAQAAAABMYXZmNTguMTIuMTAw";
|
|
1232
1346
|
}
|
|
1233
1347
|
/**
|
|
1234
1348
|
* Скачать данные в JSON-файл
|
|
1235
1349
|
* @param {any} data - Данные для сохранения
|
|
1236
1350
|
* @param {string} filename - Имя файла без расширения
|
|
1237
1351
|
*/
|
|
1238
|
-
downloadFileJson(
|
|
1239
|
-
let i = new Blob([JSON.stringify(
|
|
1240
|
-
|
|
1241
|
-
document.body.removeChild(
|
|
1352
|
+
downloadFileJson(r, e) {
|
|
1353
|
+
let i = new Blob([JSON.stringify(r)], { type: "application/json" }), n = URL.createObjectURL(i), o = document.createElement("a");
|
|
1354
|
+
o.style.display = "none", o.href = n, o.download = `${e}.json`, document.body.appendChild(o), o.click(), setTimeout(() => {
|
|
1355
|
+
document.body.removeChild(o), URL.revokeObjectURL(n);
|
|
1242
1356
|
}, 200);
|
|
1243
1357
|
}
|
|
1244
1358
|
}
|
|
1245
|
-
|
|
1246
|
-
const
|
|
1247
|
-
var
|
|
1359
|
+
z = new WeakMap();
|
|
1360
|
+
const ht = new mt();
|
|
1361
|
+
var j, Q, Z, q, P, V, $, st, dt, tt, ut, it, gt, nt, pt, at, yt;
|
|
1248
1362
|
class bt {
|
|
1249
1363
|
constructor() {
|
|
1250
|
-
|
|
1364
|
+
U(this, st);
|
|
1251
1365
|
/** Вывод ошибок логера
|
|
1252
1366
|
* @param {'entity'} type - тип ошибки
|
|
1253
1367
|
*/
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1368
|
+
U(this, tt);
|
|
1369
|
+
U(this, it);
|
|
1370
|
+
U(this, nt);
|
|
1371
|
+
U(this, at);
|
|
1372
|
+
U(this, j, "logger");
|
|
1373
|
+
U(this, Q, !1);
|
|
1374
|
+
U(this, Z, /* @__PURE__ */ new Map());
|
|
1375
|
+
U(this, q, {});
|
|
1376
|
+
U(this, P, null);
|
|
1377
|
+
U(this, V, !1);
|
|
1378
|
+
U(this, $, !1);
|
|
1265
1379
|
/** Очистка хранилища элементов старше 'N' месяцев */
|
|
1266
|
-
|
|
1267
|
-
|
|
1380
|
+
I(this, "periodClear", 3);
|
|
1381
|
+
J(this, st, dt).call(this);
|
|
1268
1382
|
}
|
|
1269
1383
|
/** Инициализация логера */
|
|
1270
1384
|
async init() {
|
|
1271
1385
|
try {
|
|
1272
|
-
let
|
|
1386
|
+
let r = new K(BX24.callBatch), { entityList: e } = await r.batch({
|
|
1273
1387
|
entityList: { method: "entity.get" }
|
|
1274
1388
|
});
|
|
1275
|
-
if (
|
|
1276
|
-
if (
|
|
1277
|
-
(
|
|
1389
|
+
if (e && Array.isArray(e))
|
|
1390
|
+
if (e.find(
|
|
1391
|
+
(n) => n.ENTITY == T(this, j)
|
|
1278
1392
|
))
|
|
1279
|
-
|
|
1393
|
+
X(this, Q, !0);
|
|
1280
1394
|
else {
|
|
1281
|
-
let { entityAdd:
|
|
1395
|
+
let { entityAdd: n } = await r.batch({
|
|
1282
1396
|
entityAdd: {
|
|
1283
1397
|
method: "entity.add",
|
|
1284
1398
|
params: {
|
|
1285
|
-
ENTITY:
|
|
1286
|
-
NAME:
|
|
1399
|
+
ENTITY: T(this, j),
|
|
1400
|
+
NAME: T(this, j),
|
|
1287
1401
|
ACCESS: { AU: "X" }
|
|
1288
1402
|
}
|
|
1289
1403
|
}
|
|
1290
1404
|
});
|
|
1291
|
-
|
|
1405
|
+
n && X(this, Q, !0);
|
|
1292
1406
|
}
|
|
1293
|
-
return
|
|
1407
|
+
return J(this, nt, pt).call(this).catch((i) => {
|
|
1294
1408
|
console.error("Ошибка при проверке периода очистки:", i);
|
|
1295
|
-
}),
|
|
1296
|
-
} catch (
|
|
1297
|
-
return console.error("Ошибка при инициализации логера:",
|
|
1409
|
+
}), T(this, Q);
|
|
1410
|
+
} catch (r) {
|
|
1411
|
+
return console.error("Ошибка при инициализации логера:", r), !1;
|
|
1298
1412
|
}
|
|
1299
1413
|
}
|
|
1300
1414
|
/**
|
|
@@ -1306,21 +1420,21 @@ class bt {
|
|
|
1306
1420
|
* }; }}
|
|
1307
1421
|
* @returns {string|null}
|
|
1308
1422
|
*/
|
|
1309
|
-
start({ type:
|
|
1310
|
-
if (!
|
|
1311
|
-
return
|
|
1312
|
-
if (!
|
|
1313
|
-
return console.error("Невалидные данные для логирования:", { type:
|
|
1314
|
-
const i =
|
|
1315
|
-
type:
|
|
1316
|
-
data:
|
|
1317
|
-
userInfo:
|
|
1423
|
+
start({ type: r, data: e }) {
|
|
1424
|
+
if (!T(this, Q))
|
|
1425
|
+
return J(this, tt, ut).call(this, "entity"), null;
|
|
1426
|
+
if (!r || !e)
|
|
1427
|
+
return console.error("Невалидные данные для логирования:", { type: r, data: e }), null;
|
|
1428
|
+
const i = ht.hash, n = {
|
|
1429
|
+
type: r,
|
|
1430
|
+
data: e,
|
|
1431
|
+
userInfo: T(this, q),
|
|
1318
1432
|
errorList: {},
|
|
1319
1433
|
status: "",
|
|
1320
1434
|
answer: null,
|
|
1321
1435
|
date: (/* @__PURE__ */ new Date()).getTime()
|
|
1322
1436
|
};
|
|
1323
|
-
return
|
|
1437
|
+
return T(this, Z).set(i, n), X(this, $, !0), i;
|
|
1324
1438
|
}
|
|
1325
1439
|
/**
|
|
1326
1440
|
* @param {{
|
|
@@ -1329,56 +1443,56 @@ class bt {
|
|
|
1329
1443
|
* status: 'success'|'fail'|'fail-runtime',
|
|
1330
1444
|
* answer: { [key]: unknown } }}
|
|
1331
1445
|
*/
|
|
1332
|
-
async stop({ key:
|
|
1333
|
-
var
|
|
1334
|
-
if (!
|
|
1446
|
+
async stop({ key: r, errorList: e, status: i, answer: n }) {
|
|
1447
|
+
var l;
|
|
1448
|
+
if (!T(this, $))
|
|
1335
1449
|
return;
|
|
1336
|
-
if (!
|
|
1337
|
-
|
|
1450
|
+
if (!T(this, Q)) {
|
|
1451
|
+
J(this, tt, ut).call(this, "entity");
|
|
1338
1452
|
return;
|
|
1339
1453
|
}
|
|
1340
|
-
let
|
|
1341
|
-
if (!
|
|
1342
|
-
console.error(`Не найдены данные логирования для ключа: ${
|
|
1454
|
+
let o = T(this, Z).get(r);
|
|
1455
|
+
if (!o) {
|
|
1456
|
+
console.error(`Не найдены данные логирования для ключа: ${r}`);
|
|
1343
1457
|
return;
|
|
1344
1458
|
}
|
|
1345
|
-
|
|
1459
|
+
e && (o.errorList = e), i && (o.status = i), n && (o.answer = n), await J(this, it, gt).call(this), (l = o == null ? void 0 : o.data) != null && l.updateList && X(this, V, !0), X(this, $, !1);
|
|
1346
1460
|
}
|
|
1347
1461
|
/**
|
|
1348
1462
|
* @param { ({percent}:{percent:number})=>{} } progressCall - коллбэк
|
|
1349
1463
|
*/
|
|
1350
|
-
async getEntityList(
|
|
1351
|
-
var
|
|
1464
|
+
async getEntityList(r) {
|
|
1465
|
+
var e;
|
|
1352
1466
|
try {
|
|
1353
|
-
if ((
|
|
1354
|
-
return
|
|
1355
|
-
let i = new
|
|
1467
|
+
if ((e = T(this, P)) != null && e.length && !T(this, V))
|
|
1468
|
+
return T(this, P);
|
|
1469
|
+
let i = new K(BX24.callBatch), { entityList: n } = await i.batch(
|
|
1356
1470
|
{
|
|
1357
1471
|
entityList: {
|
|
1358
1472
|
method: "entity.item.get",
|
|
1359
1473
|
params: {
|
|
1360
|
-
ENTITY:
|
|
1474
|
+
ENTITY: T(this, j),
|
|
1361
1475
|
SORT: { ID: "DESC" }
|
|
1362
1476
|
}
|
|
1363
1477
|
}
|
|
1364
1478
|
},
|
|
1365
|
-
|
|
1479
|
+
r
|
|
1366
1480
|
);
|
|
1367
|
-
return !
|
|
1481
|
+
return !n || !Array.isArray(n) ? (console.warn("Получен невалидный список записей"), []) : (n = n.map((o) => {
|
|
1368
1482
|
try {
|
|
1369
|
-
const { ID:
|
|
1483
|
+
const { ID: l, DATE_CREATE: c, DETAIL_TEXT: h } = o;
|
|
1370
1484
|
return {
|
|
1371
|
-
...JSON.parse(
|
|
1372
|
-
id:
|
|
1373
|
-
dateCreate:
|
|
1485
|
+
...JSON.parse(h),
|
|
1486
|
+
id: l,
|
|
1487
|
+
dateCreate: c
|
|
1374
1488
|
};
|
|
1375
|
-
} catch (
|
|
1489
|
+
} catch (l) {
|
|
1376
1490
|
return console.error(
|
|
1377
|
-
`Ошибка парсинга записи ${
|
|
1378
|
-
|
|
1491
|
+
`Ошибка парсинга записи ${o.ID}:`,
|
|
1492
|
+
l
|
|
1379
1493
|
), null;
|
|
1380
1494
|
}
|
|
1381
|
-
}).filter((
|
|
1495
|
+
}).filter((o) => o !== null), X(this, V, !1), X(this, P, n), n);
|
|
1382
1496
|
} catch (i) {
|
|
1383
1497
|
return console.error("Ошибка при получении списка записей:", i), [];
|
|
1384
1498
|
}
|
|
@@ -1386,32 +1500,32 @@ class bt {
|
|
|
1386
1500
|
/** Выгрузка всех данных из хранилища в JSON-файл */
|
|
1387
1501
|
async downAllEntityJson() {
|
|
1388
1502
|
try {
|
|
1389
|
-
if (
|
|
1503
|
+
if (T(this, P) || await this.getEntityList(), !T(this, P) || T(this, P).length === 0)
|
|
1390
1504
|
return console.warn("Нет данных для выгрузки"), !1;
|
|
1391
|
-
let
|
|
1392
|
-
return
|
|
1393
|
-
|
|
1394
|
-
`sdklogger-entity-data__${
|
|
1505
|
+
let r = rt().format("%Y-%m-%d");
|
|
1506
|
+
return ht.downloadFileJson(
|
|
1507
|
+
T(this, P),
|
|
1508
|
+
`sdklogger-entity-data__${r}`
|
|
1395
1509
|
), !0;
|
|
1396
|
-
} catch (
|
|
1397
|
-
return console.error("Ошибка при выгрузке данных в JSON:",
|
|
1510
|
+
} catch (r) {
|
|
1511
|
+
return console.error("Ошибка при выгрузке данных в JSON:", r), !1;
|
|
1398
1512
|
}
|
|
1399
1513
|
}
|
|
1400
1514
|
}
|
|
1401
|
-
|
|
1515
|
+
j = new WeakMap(), Q = new WeakMap(), Z = new WeakMap(), q = new WeakMap(), P = new WeakMap(), V = new WeakMap(), $ = new WeakMap(), st = new WeakSet(), dt = async function() {
|
|
1402
1516
|
try {
|
|
1403
|
-
const
|
|
1517
|
+
const r = new K(BX24.callBatch), e = BX24.isAdmin(), { curUser: i } = await r.batch({
|
|
1404
1518
|
curUser: { method: "user.current" }
|
|
1405
1519
|
});
|
|
1406
|
-
|
|
1407
|
-
} catch (
|
|
1520
|
+
X(this, q, { isAdmin: e, curUser: i });
|
|
1521
|
+
} catch (r) {
|
|
1408
1522
|
console.error(
|
|
1409
1523
|
"Ошибка при получении информации о пользователе:",
|
|
1410
|
-
|
|
1411
|
-
),
|
|
1524
|
+
r
|
|
1525
|
+
), X(this, q, { isAdmin: !1, curUser: null });
|
|
1412
1526
|
}
|
|
1413
|
-
},
|
|
1414
|
-
|
|
1527
|
+
}, tt = new WeakSet(), ut = function(r) {
|
|
1528
|
+
r == "entity" && ht.actionFilter({
|
|
1415
1529
|
keyTimer: "error.logger.entity",
|
|
1416
1530
|
duration: 500,
|
|
1417
1531
|
action: () => {
|
|
@@ -1420,91 +1534,91 @@ J = new WeakMap(), Q = new WeakMap(), Z = new WeakMap(), z = new WeakMap(), G =
|
|
|
1420
1534
|
});
|
|
1421
1535
|
}, it = new WeakSet(), gt = async function() {
|
|
1422
1536
|
try {
|
|
1423
|
-
let
|
|
1424
|
-
for (let [i,
|
|
1425
|
-
if (
|
|
1426
|
-
const
|
|
1427
|
-
|
|
1537
|
+
let r = {}, e = new K(BX24.callBatch);
|
|
1538
|
+
for (let [i, n] of T(this, Z).entries())
|
|
1539
|
+
if (n.status) {
|
|
1540
|
+
const o = JSON.stringify(n);
|
|
1541
|
+
r[i] = {
|
|
1428
1542
|
method: "entity.item.add",
|
|
1429
1543
|
params: {
|
|
1430
|
-
ENTITY:
|
|
1431
|
-
NAME:
|
|
1432
|
-
DETAIL_TEXT:
|
|
1544
|
+
ENTITY: T(this, j),
|
|
1545
|
+
NAME: T(this, j),
|
|
1546
|
+
DETAIL_TEXT: o
|
|
1433
1547
|
}
|
|
1434
1548
|
};
|
|
1435
1549
|
}
|
|
1436
|
-
if (Object.keys(
|
|
1437
|
-
let i = await
|
|
1438
|
-
for (let [
|
|
1439
|
-
|
|
1550
|
+
if (Object.keys(r).length) {
|
|
1551
|
+
let i = await e.batch(r), { errors: n } = e;
|
|
1552
|
+
for (let [o, l] of Object.entries({ ...i, ...n }))
|
|
1553
|
+
T(this, Z).delete(o);
|
|
1440
1554
|
return !0;
|
|
1441
1555
|
}
|
|
1442
1556
|
return !1;
|
|
1443
|
-
} catch (
|
|
1444
|
-
return console.error("Ошибка при добавлении записей в хранилище:",
|
|
1557
|
+
} catch (r) {
|
|
1558
|
+
return console.error("Ошибка при добавлении записей в хранилище:", r), !1;
|
|
1445
1559
|
}
|
|
1446
|
-
}, nt = new WeakSet(),
|
|
1560
|
+
}, nt = new WeakSet(), pt = async function() {
|
|
1447
1561
|
try {
|
|
1448
|
-
let
|
|
1562
|
+
let r = new K(BX24.callBatch), { serverTime: e } = await r.batch({
|
|
1449
1563
|
serverTime: { method: "server.time" }
|
|
1450
1564
|
});
|
|
1451
|
-
if (!
|
|
1565
|
+
if (!e) {
|
|
1452
1566
|
console.error("Не удалось получить время сервера");
|
|
1453
1567
|
return;
|
|
1454
1568
|
}
|
|
1455
|
-
if (
|
|
1569
|
+
if (T(this, P) || await this.getEntityList(), !T(this, P) || T(this, P).length === 0)
|
|
1456
1570
|
return;
|
|
1457
|
-
let i =
|
|
1571
|
+
let i = T(this, P).filter((n) => {
|
|
1458
1572
|
try {
|
|
1459
|
-
let { dateCreate:
|
|
1460
|
-
return
|
|
1461
|
-
rt(new Date(
|
|
1573
|
+
let { dateCreate: o } = n;
|
|
1574
|
+
return o ? rt(new Date(o)).between(
|
|
1575
|
+
rt(new Date(e)),
|
|
1462
1576
|
"month"
|
|
1463
1577
|
) >= this.periodClear : !1;
|
|
1464
|
-
} catch (
|
|
1465
|
-
return console.error("Ошибка при проверке даты записи:",
|
|
1578
|
+
} catch (o) {
|
|
1579
|
+
return console.error("Ошибка при проверке даты записи:", o), !1;
|
|
1466
1580
|
}
|
|
1467
1581
|
});
|
|
1468
1582
|
i.length > 0 && (console.log(
|
|
1469
1583
|
`Найдено ${i.length} записей для очистки (старше ${this.periodClear} месяцев)`
|
|
1470
|
-
), await
|
|
1471
|
-
} catch (
|
|
1472
|
-
console.error("Ошибка при проверке периода очистки:",
|
|
1584
|
+
), await J(this, at, yt).call(this, i));
|
|
1585
|
+
} catch (r) {
|
|
1586
|
+
console.error("Ошибка при проверке периода очистки:", r);
|
|
1473
1587
|
}
|
|
1474
|
-
},
|
|
1588
|
+
}, at = new WeakSet(), yt = async function(r) {
|
|
1475
1589
|
try {
|
|
1476
|
-
if (!
|
|
1590
|
+
if (!r || r.length === 0)
|
|
1477
1591
|
return !1;
|
|
1478
|
-
let
|
|
1479
|
-
let { id:
|
|
1592
|
+
let e = new K(BX24.callBatch), i = r.filter((o) => o && o.id).map((o) => {
|
|
1593
|
+
let { id: l } = o;
|
|
1480
1594
|
return {
|
|
1481
1595
|
method: "entity.item.delete",
|
|
1482
1596
|
params: {
|
|
1483
|
-
ENTITY:
|
|
1484
|
-
ID:
|
|
1597
|
+
ENTITY: T(this, j),
|
|
1598
|
+
ID: l
|
|
1485
1599
|
}
|
|
1486
1600
|
};
|
|
1487
1601
|
});
|
|
1488
1602
|
if (i.length === 0)
|
|
1489
1603
|
return !1;
|
|
1490
|
-
const
|
|
1491
|
-
return console.log(`Успешно удалено ${i.length} записей`),
|
|
1492
|
-
} catch (
|
|
1493
|
-
return console.error("Ошибка при очистке устаревших записей:",
|
|
1604
|
+
const n = await e.batch(i);
|
|
1605
|
+
return console.log(`Успешно удалено ${i.length} записей`), X(this, V, !0), n;
|
|
1606
|
+
} catch (e) {
|
|
1607
|
+
return console.error("Ошибка при очистке устаревших записей:", e), !1;
|
|
1494
1608
|
}
|
|
1495
1609
|
};
|
|
1496
|
-
var
|
|
1497
|
-
class
|
|
1610
|
+
var ot, Nt, At, Ot, et, ft;
|
|
1611
|
+
class It {
|
|
1498
1612
|
/**
|
|
1499
1613
|
* @param {Object} appConst - Константы приложения
|
|
1500
1614
|
* @param {string} appConst.appName - Название приложения
|
|
1501
1615
|
* @param {string} appConst.pathApp - Путь к приложению
|
|
1502
1616
|
*/
|
|
1503
|
-
constructor(
|
|
1617
|
+
constructor(r) {
|
|
1504
1618
|
/** Запрос данных о приложении */
|
|
1505
|
-
|
|
1619
|
+
U(this, ot);
|
|
1506
1620
|
/** Запрос данных о текущем пользователе */
|
|
1507
|
-
|
|
1621
|
+
U(this, At);
|
|
1508
1622
|
/**
|
|
1509
1623
|
* Расширяет errorList для случаев TIMEOUT и LIMIT
|
|
1510
1624
|
* Если есть ошибки TIMEOUT или LIMIT, добавляет все необработанные сущности из commandList
|
|
@@ -1514,16 +1628,16 @@ class St {
|
|
|
1514
1628
|
* @param {Array} updateList - Список обновлений для логирования (опционально)
|
|
1515
1629
|
* @returns {Object} Расширенный список ошибок
|
|
1516
1630
|
*/
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
this.appConst =
|
|
1631
|
+
U(this, et);
|
|
1632
|
+
I(this, "domain", "");
|
|
1633
|
+
I(this, "isAdmin", !1);
|
|
1634
|
+
I(this, "appInfo", null);
|
|
1635
|
+
I(this, "appConst", null);
|
|
1636
|
+
I(this, "userInfo", null);
|
|
1637
|
+
I(this, "placeData", null);
|
|
1638
|
+
I(this, "placeInfo", null);
|
|
1639
|
+
I(this, "logger", !1);
|
|
1640
|
+
this.appConst = r;
|
|
1527
1641
|
}
|
|
1528
1642
|
/**
|
|
1529
1643
|
* Инициализация Bitrix24 SDK
|
|
@@ -1531,10 +1645,10 @@ class St {
|
|
|
1531
1645
|
* @throws {Error} Если BX24 не загружен в течение 30 секунд
|
|
1532
1646
|
*/
|
|
1533
1647
|
init() {
|
|
1534
|
-
return new Promise((
|
|
1535
|
-
let
|
|
1648
|
+
return new Promise((r, e) => {
|
|
1649
|
+
let n = setInterval(() => {
|
|
1536
1650
|
window.BX24 && BX24.init(async () => {
|
|
1537
|
-
console.info("init BX24"), clearInterval(
|
|
1651
|
+
console.info("init BX24"), clearInterval(n), clearTimeout(o), this.domain = BX24.getDomain(), this.isAdmin = BX24.isAdmin(), this.placeInfo = BX24.placement.info(), this.logger ? (this.logger = new bt(), await this.logger.init()) : this.logger = {
|
|
1538
1652
|
start: () => {
|
|
1539
1653
|
},
|
|
1540
1654
|
stop: () => {
|
|
@@ -1542,29 +1656,29 @@ class St {
|
|
|
1542
1656
|
getEntityList: () => {
|
|
1543
1657
|
}
|
|
1544
1658
|
};
|
|
1545
|
-
const [
|
|
1546
|
-
|
|
1547
|
-
|
|
1659
|
+
const [l, c] = await Promise.all([
|
|
1660
|
+
J(this, ot, Nt).call(this),
|
|
1661
|
+
J(this, At, Ot).call(this)
|
|
1548
1662
|
]);
|
|
1549
|
-
this.appInfo =
|
|
1550
|
-
let
|
|
1663
|
+
this.appInfo = l, this.userInfo = c;
|
|
1664
|
+
let h = new mt();
|
|
1551
1665
|
try {
|
|
1552
|
-
|
|
1666
|
+
h.noSleep();
|
|
1553
1667
|
} catch (s) {
|
|
1554
1668
|
console.warn(
|
|
1555
1669
|
"Failed to initialize noSleep:",
|
|
1556
1670
|
s
|
|
1557
1671
|
);
|
|
1558
1672
|
}
|
|
1559
|
-
|
|
1673
|
+
r(!0);
|
|
1560
1674
|
});
|
|
1561
1675
|
}, 100);
|
|
1562
|
-
const
|
|
1563
|
-
clearInterval(
|
|
1564
|
-
const
|
|
1676
|
+
const o = setTimeout(() => {
|
|
1677
|
+
clearInterval(n);
|
|
1678
|
+
const l = new Error(
|
|
1565
1679
|
"BX24 initialization timeout: BX24 object not found within 30 seconds"
|
|
1566
1680
|
);
|
|
1567
|
-
console.error(
|
|
1681
|
+
console.error(l), e(l);
|
|
1568
1682
|
}, 3e4);
|
|
1569
1683
|
});
|
|
1570
1684
|
}
|
|
@@ -1574,23 +1688,23 @@ class St {
|
|
|
1574
1688
|
* @param {any} value - Значение для установки (если не указано, метод вернет текущее значение)
|
|
1575
1689
|
* @returns {any}
|
|
1576
1690
|
*/
|
|
1577
|
-
userOption(
|
|
1691
|
+
userOption(r, e) {
|
|
1578
1692
|
if (typeof BX24 > "u" || !BX24.userOption) {
|
|
1579
1693
|
console.warn(
|
|
1580
1694
|
"BX24.userOption is not available. Make sure BX24 is initialized."
|
|
1581
1695
|
);
|
|
1582
1696
|
return;
|
|
1583
1697
|
}
|
|
1584
|
-
return
|
|
1698
|
+
return e !== void 0 ? BX24.userOption.set(r, e) : BX24.userOption.get(r);
|
|
1585
1699
|
}
|
|
1586
|
-
appOption(
|
|
1700
|
+
appOption(r, e) {
|
|
1587
1701
|
if (typeof BX24 > "u" || !BX24.appOption) {
|
|
1588
1702
|
console.warn(
|
|
1589
1703
|
"BX24.appOption is not available. Make sure BX24 is initialized."
|
|
1590
1704
|
);
|
|
1591
1705
|
return;
|
|
1592
1706
|
}
|
|
1593
|
-
return
|
|
1707
|
+
return e !== void 0 ? BX24.appOption.set(r, e) : BX24.appOption.get(r);
|
|
1594
1708
|
}
|
|
1595
1709
|
/**
|
|
1596
1710
|
* @param {{
|
|
@@ -1610,48 +1724,48 @@ class St {
|
|
|
1610
1724
|
* }[]
|
|
1611
1725
|
* }[]
|
|
1612
1726
|
*/
|
|
1613
|
-
async call({ method:
|
|
1614
|
-
let
|
|
1615
|
-
if (i && (
|
|
1727
|
+
async call({ method: r, params: e, updateList: i }) {
|
|
1728
|
+
let n;
|
|
1729
|
+
if (i && (n = this.logger.start({
|
|
1616
1730
|
type: "call",
|
|
1617
|
-
data: { method:
|
|
1618
|
-
})),
|
|
1619
|
-
const
|
|
1620
|
-
throw console.error(
|
|
1731
|
+
data: { method: r, params: e, updateList: i }
|
|
1732
|
+
})), e || (e = {}), typeof BX24 > "u" || !BX24.callMethod) {
|
|
1733
|
+
const o = new Error("BX24 is not initialized");
|
|
1734
|
+
throw console.error(o), o;
|
|
1621
1735
|
}
|
|
1622
|
-
return new Promise((
|
|
1623
|
-
BX24.callMethod(
|
|
1624
|
-
let
|
|
1625
|
-
if (
|
|
1626
|
-
for (let [s,
|
|
1627
|
-
s !== "result" &&
|
|
1628
|
-
if (
|
|
1629
|
-
let s =
|
|
1630
|
-
if (console.error(s),
|
|
1736
|
+
return new Promise((o, l) => {
|
|
1737
|
+
BX24.callMethod(r, e, async (c) => {
|
|
1738
|
+
let h = {};
|
|
1739
|
+
if (c != null && c.answer)
|
|
1740
|
+
for (let [s, f] of Object.entries(c.answer))
|
|
1741
|
+
s !== "result" && f && (h[s] = f);
|
|
1742
|
+
if (c.error()) {
|
|
1743
|
+
let s = c.error();
|
|
1744
|
+
if (console.error(s), n)
|
|
1631
1745
|
try {
|
|
1632
1746
|
await this.logger.stop({
|
|
1633
|
-
answer:
|
|
1634
|
-
key:
|
|
1747
|
+
answer: h,
|
|
1748
|
+
key: n,
|
|
1635
1749
|
status: "fail",
|
|
1636
1750
|
errorList: { 0: s.toString() }
|
|
1637
1751
|
});
|
|
1638
|
-
} catch (
|
|
1639
|
-
console.error("Logger error:",
|
|
1752
|
+
} catch (f) {
|
|
1753
|
+
console.error("Logger error:", f);
|
|
1640
1754
|
}
|
|
1641
|
-
|
|
1755
|
+
o(!1);
|
|
1642
1756
|
} else {
|
|
1643
|
-
let s =
|
|
1644
|
-
if (s != null && s.items && (s = s.items),
|
|
1757
|
+
let s = c.data();
|
|
1758
|
+
if (s != null && s.items && (s = s.items), n)
|
|
1645
1759
|
try {
|
|
1646
1760
|
await this.logger.stop({
|
|
1647
|
-
answer:
|
|
1648
|
-
key:
|
|
1761
|
+
answer: h,
|
|
1762
|
+
key: n,
|
|
1649
1763
|
status: "success"
|
|
1650
1764
|
});
|
|
1651
|
-
} catch (
|
|
1652
|
-
console.error("Logger error:",
|
|
1765
|
+
} catch (f) {
|
|
1766
|
+
console.error("Logger error:", f);
|
|
1653
1767
|
}
|
|
1654
|
-
|
|
1768
|
+
o(s);
|
|
1655
1769
|
}
|
|
1656
1770
|
});
|
|
1657
1771
|
});
|
|
@@ -1675,56 +1789,56 @@ class St {
|
|
|
1675
1789
|
* }[]
|
|
1676
1790
|
* }}
|
|
1677
1791
|
*/
|
|
1678
|
-
async batch(
|
|
1792
|
+
async batch(r, e, { errorCall: i, limitCommandSerial: n, updateList: o, limitCall: l } = {}) {
|
|
1679
1793
|
if (typeof BX24 > "u" || !BX24.callBatch) {
|
|
1680
1794
|
const s = new Error("BX24 is not initialized");
|
|
1681
1795
|
return console.error(s), !1;
|
|
1682
1796
|
}
|
|
1683
|
-
let
|
|
1684
|
-
|
|
1797
|
+
let c = new K(BX24.callBatch), h;
|
|
1798
|
+
o && (h = this.logger.start({
|
|
1685
1799
|
type: "batch",
|
|
1686
|
-
data: { commandList:
|
|
1687
|
-
})),
|
|
1800
|
+
data: { commandList: r, updateList: o }
|
|
1801
|
+
})), n && console.warn(
|
|
1688
1802
|
"limitCommandSerial is deprecated and not used in current Batch implementation"
|
|
1689
1803
|
);
|
|
1690
1804
|
try {
|
|
1691
|
-
let s = await
|
|
1692
|
-
e,
|
|
1805
|
+
let s = await c.batch(
|
|
1693
1806
|
r,
|
|
1694
|
-
|
|
1807
|
+
e,
|
|
1808
|
+
l
|
|
1695
1809
|
);
|
|
1696
|
-
const
|
|
1697
|
-
if (Object.keys(
|
|
1698
|
-
if (i && i(
|
|
1810
|
+
const f = J(this, et, ft).call(this, c, s, r, o);
|
|
1811
|
+
if (Object.keys(f).length) {
|
|
1812
|
+
if (i && i(f), h)
|
|
1699
1813
|
try {
|
|
1700
1814
|
await this.logger.stop({
|
|
1701
|
-
key:
|
|
1815
|
+
key: h,
|
|
1702
1816
|
status: "fail",
|
|
1703
|
-
errorList:
|
|
1817
|
+
errorList: f
|
|
1704
1818
|
});
|
|
1705
|
-
} catch (
|
|
1706
|
-
console.error("Logger error:",
|
|
1819
|
+
} catch (m) {
|
|
1820
|
+
console.error("Logger error:", m);
|
|
1707
1821
|
}
|
|
1708
|
-
} else if (
|
|
1822
|
+
} else if (h)
|
|
1709
1823
|
try {
|
|
1710
1824
|
await this.logger.stop({
|
|
1711
|
-
key:
|
|
1825
|
+
key: h,
|
|
1712
1826
|
status: "success"
|
|
1713
1827
|
});
|
|
1714
|
-
} catch (
|
|
1715
|
-
console.error("Logger error:",
|
|
1828
|
+
} catch (m) {
|
|
1829
|
+
console.error("Logger error:", m);
|
|
1716
1830
|
}
|
|
1717
1831
|
return s;
|
|
1718
1832
|
} catch (s) {
|
|
1719
|
-
if (
|
|
1833
|
+
if (h)
|
|
1720
1834
|
try {
|
|
1721
1835
|
await this.logger.stop({
|
|
1722
|
-
key:
|
|
1836
|
+
key: h,
|
|
1723
1837
|
status: "fail-runtime",
|
|
1724
1838
|
errorList: { 0: s == null ? void 0 : s.toString() }
|
|
1725
1839
|
});
|
|
1726
|
-
} catch (
|
|
1727
|
-
console.error("Logger error:",
|
|
1840
|
+
} catch (f) {
|
|
1841
|
+
console.error("Logger error:", f);
|
|
1728
1842
|
}
|
|
1729
1843
|
return console.error(s), !1;
|
|
1730
1844
|
}
|
|
@@ -1752,171 +1866,146 @@ class St {
|
|
|
1752
1866
|
* }}
|
|
1753
1867
|
* @returns {Promise<Object|false>}
|
|
1754
1868
|
*/
|
|
1755
|
-
async batchTotalCount(
|
|
1869
|
+
async batchTotalCount(r, e, { errorCall: i, updateList: n, limitCall: o } = {}) {
|
|
1756
1870
|
if (typeof BX24 > "u" || !BX24.callBatch) {
|
|
1757
|
-
const
|
|
1758
|
-
return console.error(
|
|
1871
|
+
const h = new Error("BX24 is not initialized");
|
|
1872
|
+
return console.error(h), !1;
|
|
1759
1873
|
}
|
|
1760
|
-
let
|
|
1761
|
-
|
|
1874
|
+
let l = new K(BX24.callBatch), c;
|
|
1875
|
+
n && (c = this.logger.start({
|
|
1762
1876
|
type: "batch-total-count",
|
|
1763
|
-
data: { commandList:
|
|
1877
|
+
data: { commandList: r }
|
|
1764
1878
|
}));
|
|
1765
1879
|
try {
|
|
1766
|
-
let
|
|
1767
|
-
e,
|
|
1880
|
+
let h = await l.batchTotalCount(
|
|
1768
1881
|
r,
|
|
1769
|
-
|
|
1882
|
+
e,
|
|
1883
|
+
o
|
|
1770
1884
|
);
|
|
1771
|
-
const s =
|
|
1885
|
+
const s = J(this, et, ft).call(this, l, h, r, n);
|
|
1772
1886
|
if (Object.keys(s).length) {
|
|
1773
|
-
if (i && i(s),
|
|
1887
|
+
if (i && i(s), c)
|
|
1774
1888
|
try {
|
|
1775
1889
|
await this.logger.stop({
|
|
1776
|
-
key:
|
|
1890
|
+
key: c,
|
|
1777
1891
|
status: "fail",
|
|
1778
1892
|
errorList: s
|
|
1779
1893
|
});
|
|
1780
|
-
} catch (
|
|
1781
|
-
console.error("Logger error:",
|
|
1894
|
+
} catch (f) {
|
|
1895
|
+
console.error("Logger error:", f);
|
|
1782
1896
|
}
|
|
1783
|
-
} else if (
|
|
1897
|
+
} else if (c)
|
|
1784
1898
|
try {
|
|
1785
1899
|
await this.logger.stop({
|
|
1786
|
-
key:
|
|
1900
|
+
key: c,
|
|
1787
1901
|
status: "success"
|
|
1788
1902
|
});
|
|
1789
|
-
} catch (
|
|
1790
|
-
console.error("Logger error:",
|
|
1903
|
+
} catch (f) {
|
|
1904
|
+
console.error("Logger error:", f);
|
|
1791
1905
|
}
|
|
1792
|
-
return
|
|
1793
|
-
} catch (
|
|
1794
|
-
if (
|
|
1906
|
+
return h;
|
|
1907
|
+
} catch (h) {
|
|
1908
|
+
if (c)
|
|
1795
1909
|
try {
|
|
1796
1910
|
await this.logger.stop({
|
|
1797
|
-
key:
|
|
1911
|
+
key: c,
|
|
1798
1912
|
status: "fail-runtime",
|
|
1799
|
-
errorList: { 0:
|
|
1913
|
+
errorList: { 0: h == null ? void 0 : h.toString() }
|
|
1800
1914
|
});
|
|
1801
1915
|
} catch (s) {
|
|
1802
1916
|
console.error("Logger error:", s);
|
|
1803
1917
|
}
|
|
1804
|
-
return console.error(
|
|
1918
|
+
return console.error(h), !1;
|
|
1805
1919
|
}
|
|
1806
1920
|
}
|
|
1807
1921
|
/** Запрос данных о местах встройки приложения */
|
|
1808
1922
|
async getPlacement() {
|
|
1809
|
-
return await this.call({ method: "placement.get" }).then((
|
|
1923
|
+
return await this.call({ method: "placement.get" }).then((r) => (this.placeData || (this.placeData = r), r));
|
|
1810
1924
|
}
|
|
1811
1925
|
/** Встройка приложения в place */
|
|
1812
|
-
async placementBind(
|
|
1813
|
-
var
|
|
1926
|
+
async placementBind(r, e = !0) {
|
|
1927
|
+
var f;
|
|
1814
1928
|
if (!this.isAdmin)
|
|
1815
1929
|
return;
|
|
1816
|
-
|
|
1930
|
+
e && await this.placementCheck();
|
|
1817
1931
|
let i = [];
|
|
1818
|
-
if (Array.isArray(
|
|
1932
|
+
if (Array.isArray(r) ? i = r.map((m) => typeof m == "string" ? { placement: m } : m) : typeof r == "string" ? i = [{ placement: r }] : i = [r], i = i.filter(
|
|
1933
|
+
(m) => m.placement !== "PAGE_BACKGROUND_WORKER" && m.placement !== "PAGE_BACKGROUND_WORKER_ALL"
|
|
1934
|
+
), this.placeData = await this.getPlacement(), !this.placeData)
|
|
1819
1935
|
return;
|
|
1820
|
-
const { appName:
|
|
1821
|
-
let
|
|
1822
|
-
this.domain === "szdl.bitrix24.ru" && ((
|
|
1823
|
-
const
|
|
1824
|
-
let
|
|
1825
|
-
|
|
1826
|
-
|
|
1827
|
-
|
|
1828
|
-
const l = this.userInfo.ID, N = `${a}?USER_ID=${l}/`;
|
|
1829
|
-
if (!this.placeData.find(
|
|
1830
|
-
(p) => p.placement === "PAGE_BACKGROUND_WORKER" && p.handler === N
|
|
1831
|
-
)) {
|
|
1832
|
-
const p = {
|
|
1833
|
-
PLACEMENT: "PAGE_BACKGROUND_WORKER",
|
|
1834
|
-
HANDLER: N,
|
|
1835
|
-
LANG_ALL: {
|
|
1836
|
-
ru: {
|
|
1837
|
-
TITLE: h
|
|
1838
|
-
}
|
|
1839
|
-
},
|
|
1840
|
-
OPTIONS: {
|
|
1841
|
-
errorHandlerUrl: N
|
|
1842
|
-
},
|
|
1843
|
-
USER_ID: l
|
|
1844
|
-
};
|
|
1845
|
-
c[`bind_user_${l}`] = {
|
|
1846
|
-
method: "placement.bind",
|
|
1847
|
-
params: p
|
|
1848
|
-
}, console.log(`placementBind: Добавлено индивидуальное размещение для пользователя ${l} перед общим`);
|
|
1849
|
-
}
|
|
1850
|
-
}
|
|
1851
|
-
for (let l = 0; l < i.length; l++) {
|
|
1852
|
-
const N = i[l], O = N.placement, p = N.userId;
|
|
1853
|
-
let b = a, U = O;
|
|
1854
|
-
if (O === "PAGE_BACKGROUND_WORKER") {
|
|
1855
|
-
if (!p) {
|
|
1856
|
-
console.warn(`placementBind: userId is required for PAGE_BACKGROUND_WORKER, skipping ${O}`);
|
|
1857
|
-
continue;
|
|
1858
|
-
}
|
|
1859
|
-
b = `${a}?USER_ID=${p}/`;
|
|
1860
|
-
}
|
|
1861
|
-
if (O === "PAGE_BACKGROUND_WORKER_ALL" && (U = "PAGE_BACKGROUND_WORKER"), this.placeData.find(
|
|
1862
|
-
(k) => k.placement === U && k.handler === b
|
|
1936
|
+
const { appName: n, pathApp: o } = this.appConst;
|
|
1937
|
+
let l = n;
|
|
1938
|
+
this.domain === "szdl.bitrix24.ru" && ((f = this.appInfo) != null && f.ID) && (l = `${n}: #${this.appInfo.ID}`);
|
|
1939
|
+
const c = l.replace(" CRM", ""), h = {}, s = [];
|
|
1940
|
+
for (let m = 0; m < i.length; m++) {
|
|
1941
|
+
const u = i[m].placement, N = o;
|
|
1942
|
+
if (this.placeData.find(
|
|
1943
|
+
(L) => L.placement === u && L.handler === N
|
|
1863
1944
|
))
|
|
1864
1945
|
continue;
|
|
1865
|
-
|
|
1866
|
-
(
|
|
1946
|
+
const p = this.placeData.find(
|
|
1947
|
+
(L) => L.placement === u && L.handler !== N
|
|
1867
1948
|
);
|
|
1868
|
-
|
|
1869
|
-
|
|
1870
|
-
|
|
1871
|
-
|
|
1949
|
+
p && s.push({
|
|
1950
|
+
placement: u,
|
|
1951
|
+
handler: p.handler
|
|
1952
|
+
});
|
|
1953
|
+
const R = {
|
|
1954
|
+
PLACEMENT: u,
|
|
1955
|
+
HANDLER: N,
|
|
1872
1956
|
LANG_ALL: {
|
|
1873
1957
|
ru: {
|
|
1874
|
-
TITLE:
|
|
1958
|
+
TITLE: u === "USER_PROFILE_TOOLBAR" ? c : l
|
|
1875
1959
|
}
|
|
1876
1960
|
},
|
|
1877
1961
|
OPTIONS: {
|
|
1878
|
-
errorHandlerUrl:
|
|
1962
|
+
errorHandlerUrl: N
|
|
1879
1963
|
}
|
|
1880
1964
|
};
|
|
1881
|
-
|
|
1965
|
+
h[`bind_${m}`] = {
|
|
1882
1966
|
method: "placement.bind",
|
|
1883
|
-
params:
|
|
1967
|
+
params: R
|
|
1884
1968
|
};
|
|
1885
1969
|
}
|
|
1886
|
-
s.length > 0 && await this.placementUnBind(s), Object.keys(
|
|
1887
|
-
console.log(
|
|
1970
|
+
s.length > 0 && await this.placementUnBind(s), Object.keys(h).length > 0 && await this.batch(h), Object.keys(h).length > 0 && (this.placeData = await this.getPlacement(), Object.values(h).forEach((m) => {
|
|
1971
|
+
console.log(
|
|
1972
|
+
"Приложение успешно встроено в",
|
|
1973
|
+
m.params.PLACEMENT
|
|
1974
|
+
);
|
|
1888
1975
|
}));
|
|
1889
1976
|
}
|
|
1890
1977
|
/* Отвязка встройки из place */
|
|
1891
|
-
async placementUnBind(
|
|
1892
|
-
let
|
|
1893
|
-
Array.isArray(
|
|
1978
|
+
async placementUnBind(r) {
|
|
1979
|
+
let e = [];
|
|
1980
|
+
Array.isArray(r) ? e = r.map((n) => typeof n == "string" ? { placement: n } : n) : typeof r == "string" ? e = [{ placement: r }] : e = [r], e = e.filter(
|
|
1981
|
+
(n) => n.placement !== "PAGE_BACKGROUND_WORKER" && n.placement !== "PAGE_BACKGROUND_WORKER_ALL"
|
|
1982
|
+
);
|
|
1894
1983
|
const i = {};
|
|
1895
|
-
for (let
|
|
1896
|
-
const
|
|
1897
|
-
PLACEMENT:
|
|
1984
|
+
for (let n = 0; n < e.length; n++) {
|
|
1985
|
+
const o = e[n], l = o.placement, c = o.handler, h = {
|
|
1986
|
+
PLACEMENT: l
|
|
1898
1987
|
};
|
|
1899
|
-
|
|
1988
|
+
c && (h.HANDLER = c), i[`unbind_${n}`] = {
|
|
1900
1989
|
method: "placement.unbind",
|
|
1901
|
-
params:
|
|
1990
|
+
params: h
|
|
1902
1991
|
};
|
|
1903
1992
|
}
|
|
1904
|
-
Object.keys(i).length > 0 && (await this.batch(i),
|
|
1905
|
-
console.log("Встройка отвязана",
|
|
1993
|
+
Object.keys(i).length > 0 && (await this.batch(i), e.forEach((n) => {
|
|
1994
|
+
console.log("Встройка отвязана", n.placement);
|
|
1906
1995
|
}));
|
|
1907
1996
|
}
|
|
1908
1997
|
/** Удаляем фоновые обработчики прошлых версий и создаем новые */
|
|
1909
1998
|
async placementCheck() {
|
|
1910
1999
|
if (this.placeData = await this.getPlacement(), !this.placeData)
|
|
1911
2000
|
return;
|
|
1912
|
-
const { pathApp:
|
|
1913
|
-
for (const
|
|
1914
|
-
if (!
|
|
2001
|
+
const { pathApp: r } = this.appConst, e = [], i = [];
|
|
2002
|
+
for (const n of this.placeData) {
|
|
2003
|
+
if (n.placement === "PAGE_BACKGROUND_WORKER" || !n.handler || n.handler.includes(r))
|
|
1915
2004
|
continue;
|
|
1916
|
-
const { placement:
|
|
1917
|
-
|
|
2005
|
+
const { placement: o, handler: l, userId: c } = n;
|
|
2006
|
+
e.push({ placement: o, handler: l }), i.push({ placement: o, userId: c });
|
|
1918
2007
|
}
|
|
1919
|
-
|
|
2008
|
+
e.length > 0 && await this.placementUnBind(e), i.length > 0 && await this.placementBind(i, !1);
|
|
1920
2009
|
}
|
|
1921
2010
|
/** Чат-бот */
|
|
1922
2011
|
/* получение списка ботов */
|
|
@@ -1924,22 +2013,22 @@ class St {
|
|
|
1924
2013
|
return this.call({
|
|
1925
2014
|
method: "imbot.bot.list",
|
|
1926
2015
|
params: {}
|
|
1927
|
-
}).then((
|
|
1928
|
-
let
|
|
1929
|
-
return console.log("chat-bot list:",
|
|
2016
|
+
}).then((r) => {
|
|
2017
|
+
let e = Object.values(r);
|
|
2018
|
+
return console.log("chat-bot list:", e), e;
|
|
1930
2019
|
});
|
|
1931
2020
|
}
|
|
1932
2021
|
/* регистрация бота */
|
|
1933
|
-
regBot({ code:
|
|
1934
|
-
const { appName:
|
|
2022
|
+
regBot({ code: r, type: e, name: i }) {
|
|
2023
|
+
const { appName: n, pathApp: o, chatBotLogo: l } = this.appConst, c = this.appInfo.ID;
|
|
1935
2024
|
return this.call({
|
|
1936
2025
|
method: "imbot.register",
|
|
1937
2026
|
params: {
|
|
1938
|
-
CODE:
|
|
2027
|
+
CODE: r ?? this.appInfo.CODE,
|
|
1939
2028
|
// Строковой идентификатор бота, уникальный в рамках вашего приложения (обяз.)
|
|
1940
|
-
TYPE:
|
|
2029
|
+
TYPE: e ?? "O",
|
|
1941
2030
|
// Тип бота, B - чат-бот, ответы поступают сразу, H - человек, ответы поступают с задержкой от 2-х до 10 секунд, O - чат-бот для Открытых линий, S - чат-бот с повышенными привилегиями (supervisor)
|
|
1942
|
-
EVENT_HANDLER:
|
|
2031
|
+
EVENT_HANDLER: o,
|
|
1943
2032
|
// Ссылка на обработчик событий, поступивших от сервера - см. Обработчики событий ниже (обяз).
|
|
1944
2033
|
OPENLINE: "Y",
|
|
1945
2034
|
// Включение режима поддержки Открытых линий, можно не указывать, если TYPE = 'O'
|
|
@@ -1947,7 +2036,7 @@ class St {
|
|
|
1947
2036
|
// строковый идентификатор чат-бота, используется только в режиме Вебхуков
|
|
1948
2037
|
PROPERTIES: {
|
|
1949
2038
|
// Личные данные чат-бота (обяз.)
|
|
1950
|
-
NAME: `${i ??
|
|
2039
|
+
NAME: `${i ?? n} - бот #${c}`,
|
|
1951
2040
|
// Имя чат-бота (обязательное одно из полей NAME или LAST_NAME)
|
|
1952
2041
|
LAST_NAME: "",
|
|
1953
2042
|
// Фамилия чат-бота (обязательное одно из полей NAME или LAST_NAME)
|
|
@@ -1963,382 +2052,515 @@ class St {
|
|
|
1963
2052
|
// Ссылка на сайт
|
|
1964
2053
|
PERSONAL_GENDER: "M",
|
|
1965
2054
|
// Пол чат-бота, допустимые значения M - мужской, F - женский, пусто, если не требуется указывать
|
|
1966
|
-
PERSONAL_PHOTO:
|
|
2055
|
+
PERSONAL_PHOTO: l ?? ""
|
|
1967
2056
|
// Аватар чат-бота - base64
|
|
1968
2057
|
}
|
|
1969
2058
|
}
|
|
1970
|
-
}).then((
|
|
2059
|
+
}).then((h) => (console.log("Чат-бот добавлен", h), h));
|
|
1971
2060
|
}
|
|
1972
2061
|
/* Убрать регистрацию бота */
|
|
1973
|
-
unRegBot(
|
|
2062
|
+
unRegBot(r) {
|
|
1974
2063
|
return this.call({
|
|
1975
2064
|
method: "imbot.unregister",
|
|
1976
2065
|
params: {
|
|
1977
|
-
BOT_ID:
|
|
2066
|
+
BOT_ID: r
|
|
1978
2067
|
}
|
|
1979
|
-
}).then((
|
|
2068
|
+
}).then((e) => (console.log("чат-бот удален", e), e));
|
|
1980
2069
|
}
|
|
1981
2070
|
/* Получение данных логера */
|
|
1982
|
-
getLoggerList(
|
|
1983
|
-
return this.logger.getEntityList(
|
|
2071
|
+
getLoggerList(r) {
|
|
2072
|
+
return this.logger.getEntityList(r);
|
|
1984
2073
|
}
|
|
1985
2074
|
}
|
|
1986
|
-
|
|
2075
|
+
ot = new WeakSet(), Nt = function() {
|
|
1987
2076
|
return this.call({ method: "app.info" });
|
|
1988
|
-
}, At = new WeakSet(),
|
|
2077
|
+
}, At = new WeakSet(), Ot = function() {
|
|
1989
2078
|
return this.call({ method: "user.current" });
|
|
1990
|
-
},
|
|
1991
|
-
let
|
|
1992
|
-
if (Object.values(
|
|
1993
|
-
(
|
|
1994
|
-
if (typeof
|
|
2079
|
+
}, et = new WeakSet(), ft = function(r, e, i, n) {
|
|
2080
|
+
let o = { ...r.errors };
|
|
2081
|
+
if (Object.values(r.errors).some(
|
|
2082
|
+
(c) => {
|
|
2083
|
+
if (typeof c != "string")
|
|
1995
2084
|
return !1;
|
|
1996
|
-
const
|
|
1997
|
-
return
|
|
2085
|
+
const h = c.toUpperCase();
|
|
2086
|
+
return h === "TIMEOUT" || h === "OPERATION_TIME_LIMIT" || h.includes("TIMEOUT") || h.includes("OPERATION_TIME_LIMIT");
|
|
1998
2087
|
}
|
|
1999
|
-
) &&
|
|
2000
|
-
const
|
|
2001
|
-
if (
|
|
2002
|
-
for (const
|
|
2003
|
-
if (!
|
|
2004
|
-
const A =
|
|
2005
|
-
A != null && s.add(
|
|
2088
|
+
) && n) {
|
|
2089
|
+
const c = e ? Object.keys(e).filter((m) => m !== "errorsList") : [], h = new Set(Object.keys(r.errors || {})), s = /* @__PURE__ */ new Set();
|
|
2090
|
+
if (e) {
|
|
2091
|
+
for (const m of c)
|
|
2092
|
+
if (!h.has(m)) {
|
|
2093
|
+
const A = e[m];
|
|
2094
|
+
A != null && s.add(m);
|
|
2006
2095
|
}
|
|
2007
2096
|
}
|
|
2008
|
-
const
|
|
2009
|
-
(
|
|
2010
|
-
if (typeof
|
|
2097
|
+
const f = Object.values(r.errors).find(
|
|
2098
|
+
(m) => {
|
|
2099
|
+
if (typeof m != "string")
|
|
2011
2100
|
return !1;
|
|
2012
|
-
const A =
|
|
2101
|
+
const A = m.toUpperCase();
|
|
2013
2102
|
return A === "TIMEOUT" || A === "OPERATION_TIME_LIMIT" || A.includes("TIMEOUT") || A.includes("OPERATION_TIME_LIMIT");
|
|
2014
2103
|
}
|
|
2015
2104
|
);
|
|
2016
|
-
for (const
|
|
2017
|
-
!s.has(
|
|
2105
|
+
for (const m of Object.keys(i))
|
|
2106
|
+
!s.has(m) && !r.errors[m] && (o[m] = f || "TIMEOUT или OPERATION_TIME_LIMIT: запрос не был обработан");
|
|
2018
2107
|
}
|
|
2019
|
-
return
|
|
2108
|
+
return o;
|
|
2020
2109
|
};
|
|
2021
|
-
class
|
|
2022
|
-
constructor(
|
|
2023
|
-
|
|
2024
|
-
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
|
|
2110
|
+
class Mt {
|
|
2111
|
+
constructor(r) {
|
|
2112
|
+
I(this, "entityName", "tabs");
|
|
2113
|
+
I(this, "maxTabs", 20);
|
|
2114
|
+
I(this, "tabList", []);
|
|
2115
|
+
I(this, "id", 0);
|
|
2116
|
+
I(this, "hasStarted", !1);
|
|
2117
|
+
I(this, "heartbeat");
|
|
2118
|
+
I(this, "runHeartbeat");
|
|
2119
|
+
I(this, "random", this.getRandomNum());
|
|
2120
|
+
I(this, "activeMaxPause", 5 * 60 * 1e3 + this.random);
|
|
2121
|
+
I(this, "quickCleanupThreshold", 2 * 60 * 1e3);
|
|
2122
|
+
// агрессивная очистка при переполнении
|
|
2123
|
+
I(this, "pollInterval", (60 + this.random) * 1e3);
|
|
2124
|
+
// 30-90 cек для выбора лидера
|
|
2125
|
+
I(this, "sessionId", `${Date.now()}-${Math.random().toString(16).slice(2)}`);
|
|
2126
|
+
I(this, "continueCondition");
|
|
2127
|
+
I(this, "defaultContinueBackground", () => !0);
|
|
2128
|
+
var l, c, h;
|
|
2129
|
+
if (!r) {
|
|
2130
|
+
console.error("BackgroundWorker: Нет опций конструктора");
|
|
2035
2131
|
return;
|
|
2036
2132
|
}
|
|
2037
|
-
const { appFunc:
|
|
2038
|
-
this.bx = i, this.appPath = i.appConst.pathApp ?? "", this.appName = i.appConst.appName ?? "", this.
|
|
2133
|
+
const { appFunc: e, bx: i, users: n, continueBackground: o } = r;
|
|
2134
|
+
this.bx = i, this.appInit = e, this.users = n, this.appPath = ((l = i == null ? void 0 : i.appConst) == null ? void 0 : l.pathApp) ?? "", this.appName = ((c = i == null ? void 0 : i.appConst) == null ? void 0 : c.appName) ?? "", this.appCodeName = ((h = i == null ? void 0 : i.appConst) == null ? void 0 : h.appCodeName) ?? "", this.start = /* @__PURE__ */ new Date(), this.continueCondition = typeof o == "function" ? o : this.defaultContinueBackground;
|
|
2039
2135
|
}
|
|
2040
2136
|
async init() {
|
|
2041
2137
|
if (!this.appInit) {
|
|
2042
|
-
console.error("
|
|
2138
|
+
console.error("BackgroundWorker: appInit не передан");
|
|
2043
2139
|
return;
|
|
2044
2140
|
}
|
|
2045
2141
|
if (!this.bx) {
|
|
2046
|
-
console.error("
|
|
2142
|
+
console.error("BackgroundWorker: bx не передан");
|
|
2047
2143
|
return;
|
|
2048
2144
|
}
|
|
2049
|
-
if (
|
|
2050
|
-
console.log(
|
|
2145
|
+
if (this.isAppPage()) {
|
|
2146
|
+
console.log(
|
|
2147
|
+
"BackgroundWorker: Страница приложения, фоновый воркер не запускается"
|
|
2148
|
+
);
|
|
2051
2149
|
return;
|
|
2052
2150
|
}
|
|
2053
|
-
|
|
2054
|
-
|
|
2151
|
+
await this.checkPlacementType() && await this.continueBackground() && (await this.checkEntity(), await this.refreshTabs(!0), await this.ensureTabRegistered(), this.heartbeat = setInterval(() => {
|
|
2152
|
+
this.backgroundTick().catch((e) => {
|
|
2153
|
+
console.error("BackgroundWorker: backgroundTick failed", e);
|
|
2154
|
+
});
|
|
2155
|
+
}, this.pollInterval), await this.backgroundTick());
|
|
2156
|
+
}
|
|
2157
|
+
async backgroundTick() {
|
|
2158
|
+
if (!await this.continueBackground()) {
|
|
2159
|
+
this.stopTimers(), console.log(
|
|
2160
|
+
"BackgroundWorker: Остановка backgroundTick - условие не выполнено"
|
|
2161
|
+
);
|
|
2055
2162
|
return;
|
|
2056
2163
|
}
|
|
2057
|
-
await this.
|
|
2058
|
-
|
|
2059
|
-
|
|
2060
|
-
|
|
2061
|
-
|
|
2164
|
+
await this.refreshTabs(!0), await this.ensureTabRegistered();
|
|
2165
|
+
const e = this.selectLeaderId(), i = e && this.id === e;
|
|
2166
|
+
await this.updateTabState(i), i && !this.hasStarted && (this.hasStarted = !0, await this.runAsLeader());
|
|
2167
|
+
}
|
|
2168
|
+
stopTimers() {
|
|
2169
|
+
this.heartbeat && (clearInterval(this.heartbeat), this.heartbeat = void 0), this.runHeartbeat && (clearInterval(this.runHeartbeat), this.runHeartbeat = void 0);
|
|
2170
|
+
}
|
|
2171
|
+
isAppPage() {
|
|
2172
|
+
var r;
|
|
2173
|
+
if (typeof BX24 > "u" || !((r = BX24.placement) != null && r.info))
|
|
2174
|
+
return !1;
|
|
2175
|
+
try {
|
|
2176
|
+
const e = BX24.placement.info(), i = e == null ? void 0 : e.placement, n = (e == null ? void 0 : e.options) || {}, o = (n == null ? void 0 : n.URI) || "", l = i === "PAGE_BACKGROUND_WORKER" || (n == null ? void 0 : n.ID) === "PAGE_BACKGROUND_WORKER", c = typeof o == "string" && (o.includes("marketplace/app") || o.includes("marketplace/apps") || o.includes("placement") || o.includes("sozdavatel" + this.appCodeName));
|
|
2177
|
+
return !l || c;
|
|
2178
|
+
} catch {
|
|
2179
|
+
return !1;
|
|
2180
|
+
}
|
|
2062
2181
|
}
|
|
2063
2182
|
async checkEntity() {
|
|
2064
2183
|
var i;
|
|
2065
|
-
const
|
|
2066
|
-
|
|
2067
|
-
|
|
2068
|
-
|
|
2069
|
-
|
|
2070
|
-
|
|
2071
|
-
|
|
2072
|
-
|
|
2073
|
-
|
|
2184
|
+
const r = await this.safeCall(
|
|
2185
|
+
() => this.bx.call({ method: "entity.get" })
|
|
2186
|
+
);
|
|
2187
|
+
((i = r == null ? void 0 : r.find) == null ? void 0 : i.call(
|
|
2188
|
+
r,
|
|
2189
|
+
(n) => n.ENTITY === this.entityName
|
|
2190
|
+
)) || await this.safeCall(
|
|
2191
|
+
() => this.bx.call({
|
|
2192
|
+
method: "entity.add",
|
|
2193
|
+
params: {
|
|
2194
|
+
ENTITY: this.entityName,
|
|
2195
|
+
NAME: this.entityName,
|
|
2196
|
+
ACCESS: { AU: "X" }
|
|
2197
|
+
}
|
|
2198
|
+
})
|
|
2199
|
+
);
|
|
2074
2200
|
}
|
|
2075
2201
|
async getTabs() {
|
|
2076
|
-
|
|
2077
|
-
|
|
2078
|
-
|
|
2079
|
-
|
|
2080
|
-
|
|
2081
|
-
|
|
2082
|
-
|
|
2083
|
-
|
|
2084
|
-
|
|
2085
|
-
|
|
2086
|
-
}
|
|
2202
|
+
const r = await this.safeCall(
|
|
2203
|
+
() => {
|
|
2204
|
+
var e;
|
|
2205
|
+
return this.bx.call({
|
|
2206
|
+
method: "entity.item.get",
|
|
2207
|
+
params: {
|
|
2208
|
+
ENTITY: this.entityName,
|
|
2209
|
+
FILTER: { NAME: (e = this.bx.userInfo) == null ? void 0 : e.ID },
|
|
2210
|
+
SORT: { DATE_CREATE: "DESC" }
|
|
2211
|
+
}
|
|
2212
|
+
});
|
|
2087
2213
|
}
|
|
2088
|
-
|
|
2089
|
-
return
|
|
2090
|
-
if (!
|
|
2214
|
+
);
|
|
2215
|
+
return !Array.isArray(r) || !r.length ? [] : r.map((e) => {
|
|
2216
|
+
if (!e)
|
|
2091
2217
|
return { id: void 0, data: void 0 };
|
|
2092
2218
|
try {
|
|
2093
|
-
|
|
2094
|
-
|
|
2095
|
-
|
|
2219
|
+
const i = JSON.parse(e.DETAIL_TEXT);
|
|
2220
|
+
return { id: e.ID, data: i };
|
|
2221
|
+
} catch (i) {
|
|
2222
|
+
return console.log("BackgroundWorker: parse tab error", i), { id: e.ID, data: void 0 };
|
|
2096
2223
|
}
|
|
2097
|
-
})
|
|
2224
|
+
});
|
|
2098
2225
|
}
|
|
2099
|
-
async
|
|
2100
|
-
|
|
2101
|
-
|
|
2226
|
+
async ensureTabRegistered() {
|
|
2227
|
+
if (this.id)
|
|
2228
|
+
return this.id;
|
|
2229
|
+
if (this.tabList.length >= this.maxTabs && await this.refreshTabs(!0, this.quickCleanupThreshold), this.tabList.length >= this.maxTabs)
|
|
2230
|
+
return console.log(
|
|
2231
|
+
"BackgroundWorker: Достигнут лимит вкладок даже после быстрой очистки, не регистрируемся"
|
|
2232
|
+
), 0;
|
|
2233
|
+
const r = {
|
|
2102
2234
|
lastActive: (/* @__PURE__ */ new Date()).toISOString(),
|
|
2103
|
-
|
|
2104
|
-
start: !1
|
|
2105
|
-
|
|
2106
|
-
|
|
2107
|
-
|
|
2108
|
-
|
|
2109
|
-
|
|
2110
|
-
|
|
2111
|
-
|
|
2235
|
+
createdAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
2236
|
+
start: !1,
|
|
2237
|
+
sessionId: this.sessionId
|
|
2238
|
+
}, e = await this.safeCall(
|
|
2239
|
+
() => {
|
|
2240
|
+
var i;
|
|
2241
|
+
return this.bx.call({
|
|
2242
|
+
method: "entity.item.add",
|
|
2243
|
+
params: {
|
|
2244
|
+
ENTITY: this.entityName,
|
|
2245
|
+
NAME: (i = this.bx.userInfo) == null ? void 0 : i.ID,
|
|
2246
|
+
DETAIL_TEXT: JSON.stringify(r)
|
|
2247
|
+
}
|
|
2248
|
+
});
|
|
2112
2249
|
}
|
|
2113
|
-
|
|
2250
|
+
) || 0;
|
|
2251
|
+
return this.id = e, e;
|
|
2114
2252
|
}
|
|
2115
|
-
async
|
|
2116
|
-
|
|
2117
|
-
|
|
2253
|
+
async updateTabState(r) {
|
|
2254
|
+
if (!this.id)
|
|
2255
|
+
return;
|
|
2256
|
+
const e = {
|
|
2118
2257
|
lastActive: (/* @__PURE__ */ new Date()).toISOString(),
|
|
2119
|
-
|
|
2120
|
-
start:
|
|
2258
|
+
createdAt: this.start.toISOString(),
|
|
2259
|
+
start: r,
|
|
2260
|
+
sessionId: this.sessionId
|
|
2121
2261
|
};
|
|
2122
|
-
await this.
|
|
2123
|
-
|
|
2124
|
-
|
|
2125
|
-
|
|
2126
|
-
|
|
2127
|
-
|
|
2128
|
-
|
|
2262
|
+
await this.safeCall(
|
|
2263
|
+
() => {
|
|
2264
|
+
var i;
|
|
2265
|
+
return this.bx.call({
|
|
2266
|
+
method: "entity.item.update",
|
|
2267
|
+
params: {
|
|
2268
|
+
ENTITY: this.entityName,
|
|
2269
|
+
ID: this.id,
|
|
2270
|
+
NAME: (i = this.bx.userInfo) == null ? void 0 : i.ID,
|
|
2271
|
+
DETAIL_TEXT: JSON.stringify(e)
|
|
2272
|
+
}
|
|
2273
|
+
});
|
|
2129
2274
|
}
|
|
2130
|
-
|
|
2275
|
+
);
|
|
2131
2276
|
}
|
|
2132
|
-
async deleteTabs(
|
|
2133
|
-
if (!
|
|
2277
|
+
async deleteTabs(r = []) {
|
|
2278
|
+
if (!r.length)
|
|
2134
2279
|
return;
|
|
2135
|
-
const
|
|
2280
|
+
const e = r.map((i) => ({
|
|
2136
2281
|
method: "entity.item.delete",
|
|
2137
2282
|
params: { ENTITY: this.entityName, ID: i.id }
|
|
2138
2283
|
}));
|
|
2139
|
-
|
|
2284
|
+
await this.safeCall(() => this.bx.batch(e));
|
|
2140
2285
|
}
|
|
2141
2286
|
getRandomNum() {
|
|
2142
|
-
const
|
|
2143
|
-
return Math.round(Math.random()) ?
|
|
2287
|
+
const r = Math.round(Number(Math.random().toFixed(2)) * 30);
|
|
2288
|
+
return Math.round(Math.random()) ? r : -r;
|
|
2144
2289
|
}
|
|
2145
2290
|
async checkPlacementType() {
|
|
2146
|
-
var
|
|
2291
|
+
var r;
|
|
2147
2292
|
try {
|
|
2148
|
-
const
|
|
2149
|
-
|
|
2150
|
-
|
|
2151
|
-
|
|
2293
|
+
const e = await this.safeCall(
|
|
2294
|
+
() => this.bx.getPlacement()
|
|
2295
|
+
);
|
|
2296
|
+
if (!e || !Array.isArray(e))
|
|
2297
|
+
return console.log(
|
|
2298
|
+
"BackgroundWorker: Не получили список размещений, продолжаем"
|
|
2299
|
+
), !0;
|
|
2300
|
+
const i = +(((r = this.bx.userInfo) == null ? void 0 : r.ID) ?? 0), n = this.isIndividualPlacement(
|
|
2301
|
+
typeof window < "u" ? window.location.href : ""
|
|
2302
|
+
), o = !n;
|
|
2152
2303
|
if (!i)
|
|
2153
|
-
return
|
|
2154
|
-
|
|
2155
|
-
|
|
2156
|
-
|
|
2157
|
-
|
|
2158
|
-
|
|
2159
|
-
|
|
2160
|
-
|
|
2161
|
-
|
|
2162
|
-
}
|
|
2304
|
+
return !0;
|
|
2305
|
+
let l = !1;
|
|
2306
|
+
for (const c of e) {
|
|
2307
|
+
if (c.placement !== "PAGE_BACKGROUND_WORKER" || !(c.userId || c.handler && c.handler.includes("USER_ID=")))
|
|
2308
|
+
continue;
|
|
2309
|
+
const s = c.userId || (c.handler ? this.extractUserIdFromHandler(c.handler) : null);
|
|
2310
|
+
if (s && +s === i) {
|
|
2311
|
+
l = !0;
|
|
2312
|
+
break;
|
|
2163
2313
|
}
|
|
2164
|
-
|
|
2165
|
-
|
|
2166
|
-
|
|
2314
|
+
}
|
|
2315
|
+
return n ? (console.log(
|
|
2316
|
+
"BackgroundWorker: Индивидуальная встройка - разрешено"
|
|
2317
|
+
), !0) : o && l ? (console.log(
|
|
2318
|
+
"BackgroundWorker: Есть личная встройка, общую не запускаем"
|
|
2319
|
+
), !1) : (console.log(
|
|
2320
|
+
"BackgroundWorker: Проверка типа встройки пройдена, продолжаем"
|
|
2321
|
+
), !0);
|
|
2322
|
+
} catch (e) {
|
|
2323
|
+
return console.error(
|
|
2324
|
+
"BackgroundWorker: Ошибка при проверке типа встройки",
|
|
2325
|
+
e
|
|
2326
|
+
), !0;
|
|
2167
2327
|
}
|
|
2168
2328
|
}
|
|
2169
|
-
|
|
2170
|
-
|
|
2329
|
+
isIndividualPlacement(r) {
|
|
2330
|
+
return !r || typeof r != "string" ? !1 : r.includes("USER_ID=");
|
|
2331
|
+
}
|
|
2332
|
+
extractUserIdFromHandler(r) {
|
|
2333
|
+
if (!r || typeof r != "string")
|
|
2171
2334
|
return null;
|
|
2172
|
-
const
|
|
2173
|
-
return
|
|
2335
|
+
const e = r.match(/USER_ID=(\d+)/);
|
|
2336
|
+
return e ? e[1] : null;
|
|
2174
2337
|
}
|
|
2175
2338
|
async continueBackground() {
|
|
2176
2339
|
try {
|
|
2177
|
-
const
|
|
2178
|
-
|
|
2179
|
-
|
|
2180
|
-
return console.
|
|
2340
|
+
const e = !!await Promise.resolve(
|
|
2341
|
+
this.continueCondition(this)
|
|
2342
|
+
);
|
|
2343
|
+
return console.log(e ? "BackgroundWorker: Условие продолжения выполнено" : "BackgroundWorker: continueBackground вернул false"), e;
|
|
2344
|
+
} catch (r) {
|
|
2345
|
+
return console.error(
|
|
2346
|
+
"BackgroundWorker: Ошибка в continueCondition",
|
|
2347
|
+
r
|
|
2348
|
+
), !1;
|
|
2181
2349
|
}
|
|
2182
2350
|
}
|
|
2183
|
-
async
|
|
2184
|
-
const
|
|
2185
|
-
for (const
|
|
2186
|
-
if (!(
|
|
2187
|
-
|
|
2351
|
+
async refreshTabs(r = !1, e = this.activeMaxPause) {
|
|
2352
|
+
const i = [], n = [], o = Date.now(), l = await this.getTabs();
|
|
2353
|
+
for (const c of l) {
|
|
2354
|
+
if (!(c != null && c.data)) {
|
|
2355
|
+
i.push(c);
|
|
2356
|
+
continue;
|
|
2357
|
+
}
|
|
2358
|
+
if (o - new Date(c.data.lastActive || 0).getTime() > e) {
|
|
2359
|
+
i.push(c);
|
|
2188
2360
|
continue;
|
|
2189
2361
|
}
|
|
2190
|
-
|
|
2362
|
+
n.push(c);
|
|
2191
2363
|
}
|
|
2192
|
-
return await this.deleteTabs(
|
|
2364
|
+
return r && i.length && await this.deleteTabs(i), this.tabList = n, n;
|
|
2193
2365
|
}
|
|
2194
|
-
|
|
2195
|
-
|
|
2196
|
-
|
|
2197
|
-
|
|
2198
|
-
|
|
2199
|
-
|
|
2200
|
-
|
|
2201
|
-
|
|
2366
|
+
selectLeaderId() {
|
|
2367
|
+
var e;
|
|
2368
|
+
return this.tabList.length && ((e = [...this.tabList].sort((i, n) => {
|
|
2369
|
+
var c, h, s, f;
|
|
2370
|
+
const o = new Date(
|
|
2371
|
+
((c = i.data) == null ? void 0 : c.createdAt) || ((h = i.data) == null ? void 0 : h.lastActive) || 0
|
|
2372
|
+
).getTime(), l = new Date(
|
|
2373
|
+
((s = n.data) == null ? void 0 : s.createdAt) || ((f = n.data) == null ? void 0 : f.lastActive) || 0
|
|
2374
|
+
).getTime();
|
|
2375
|
+
return o === l ? i.id - n.id : o - l;
|
|
2376
|
+
})[0]) == null ? void 0 : e.id) || 0;
|
|
2377
|
+
}
|
|
2378
|
+
async runAsLeader() {
|
|
2379
|
+
this.runHeartbeat = setInterval(
|
|
2380
|
+
() => {
|
|
2381
|
+
this.updateTabState(!0).catch(
|
|
2382
|
+
(r) => console.error(
|
|
2383
|
+
"BackgroundWorker: heartbeat update failed",
|
|
2384
|
+
r
|
|
2385
|
+
)
|
|
2386
|
+
);
|
|
2387
|
+
},
|
|
2388
|
+
Math.max(20 * 1e3, Math.floor(this.pollInterval / 2))
|
|
2389
|
+
);
|
|
2390
|
+
try {
|
|
2391
|
+
await this.appInit();
|
|
2392
|
+
} catch (r) {
|
|
2393
|
+
console.error("BackgroundWorker: appInit failed", r);
|
|
2202
2394
|
}
|
|
2203
|
-
|
|
2204
|
-
e && (await this.pause(Math.round(Number(Math.random().toFixed(2)) * 1e4)), this.tabList = await this.getFilteredTabList(), e = this.checkOtherTabs(), e && await this.startBackground());
|
|
2205
|
-
}
|
|
2206
|
-
checkOtherTabs() {
|
|
2207
|
-
var o, a;
|
|
2208
|
-
let e = !1, r = (/* @__PURE__ */ new Date()).getTime() - new Date(this.start).getTime();
|
|
2209
|
-
for (const h of this.tabList)
|
|
2210
|
-
if (+h.id !== this.id && ((o = h.data) != null && o.start && (e = !0), ((a = h.data) == null ? void 0 : a.duration) > r)) {
|
|
2211
|
-
r = !1;
|
|
2212
|
-
break;
|
|
2213
|
-
}
|
|
2214
|
-
const i = !e && !!r;
|
|
2215
|
-
return this.updateTab(i).catch((h) => {
|
|
2216
|
-
console.error("BackgroundWorker: updateTab failed", h);
|
|
2217
|
-
}), console.log(`BackgroundWorker: Проверка вкладок - можно запускать приложение? ${i}`), i;
|
|
2218
|
-
}
|
|
2219
|
-
async startBackground() {
|
|
2220
|
-
this.interval && (clearInterval(this.interval), this.interval = void 0), this.interval = setInterval(() => {
|
|
2221
|
-
this.updateTab(!0).catch((e) => {
|
|
2222
|
-
console.error("BackgroundWorker: periodic updateTab failed", e);
|
|
2223
|
-
});
|
|
2224
|
-
}, this.activeMinPause), await this.appInit(), this.interval && (clearInterval(this.interval), this.interval = void 0), this.id && (await this.deleteTabs([{ id: this.id }]), this.id = 0);
|
|
2395
|
+
this.stopTimers(), this.id && (await this.deleteTabs([{ id: this.id }]), this.id = 0);
|
|
2225
2396
|
}
|
|
2226
2397
|
async setBackgroundWorkerAll() {
|
|
2227
|
-
var
|
|
2228
|
-
if (!((
|
|
2229
|
-
console.log(
|
|
2398
|
+
var N, y;
|
|
2399
|
+
if (!((N = this.bx) != null && N.isAdmin)) {
|
|
2400
|
+
console.log(
|
|
2401
|
+
"BackgroundWorker: setBackgroundWorkerAll доступен только админам"
|
|
2402
|
+
);
|
|
2230
2403
|
return;
|
|
2231
2404
|
}
|
|
2232
|
-
(
|
|
2233
|
-
const
|
|
2405
|
+
(y = this.users) != null && y.length || await this.getEntityData();
|
|
2406
|
+
const r = await this.safeCall(
|
|
2407
|
+
() => this.bx.getPlacement()
|
|
2408
|
+
), e = /* @__PURE__ */ new Map();
|
|
2234
2409
|
let i = null;
|
|
2235
|
-
|
|
2236
|
-
|
|
2237
|
-
|
|
2238
|
-
|
|
2239
|
-
|
|
2240
|
-
|
|
2241
|
-
|
|
2242
|
-
|
|
2243
|
-
|
|
2244
|
-
|
|
2245
|
-
|
|
2246
|
-
|
|
2247
|
-
|
|
2248
|
-
|
|
2249
|
-
|
|
2410
|
+
(r || []).forEach((p) => {
|
|
2411
|
+
if (p.placement !== "PAGE_BACKGROUND_WORKER")
|
|
2412
|
+
return;
|
|
2413
|
+
if (p.userId || p.handler && p.handler.includes("USER_ID=")) {
|
|
2414
|
+
const L = p.userId || (p.handler ? this.extractUserIdFromHandler(p.handler) : null);
|
|
2415
|
+
L && e.set(+L, p);
|
|
2416
|
+
} else
|
|
2417
|
+
i = p;
|
|
2418
|
+
});
|
|
2419
|
+
const n = await this.resolveAdmins(), o = await this.getEligibleUsersForBackgroundWorker(n);
|
|
2420
|
+
o.sort((p, R) => {
|
|
2421
|
+
const L = p.LAST_LOGIN ? new Date(p.LAST_LOGIN) : /* @__PURE__ */ new Date(0);
|
|
2422
|
+
return (R.LAST_LOGIN ? new Date(R.LAST_LOGIN) : /* @__PURE__ */ new Date(0)) - L;
|
|
2423
|
+
});
|
|
2424
|
+
const l = 10, h = o.slice(0, l).filter(
|
|
2425
|
+
(p) => !e.has(+p.ID)
|
|
2426
|
+
), s = [];
|
|
2427
|
+
for (const [p] of e)
|
|
2428
|
+
o.find((L) => +L.ID === p) || s.push(p);
|
|
2429
|
+
const f = [];
|
|
2430
|
+
for (const p of s)
|
|
2431
|
+
this.appPath && f.push({
|
|
2250
2432
|
method: "placement.unbind",
|
|
2251
2433
|
params: {
|
|
2252
2434
|
PLACEMENT: "PAGE_BACKGROUND_WORKER",
|
|
2253
|
-
HANDLER: `${this.appPath}?USER_ID=${
|
|
2435
|
+
HANDLER: `${this.appPath}?USER_ID=${p}/`
|
|
2254
2436
|
}
|
|
2255
|
-
})
|
|
2256
|
-
|
|
2437
|
+
});
|
|
2438
|
+
const m = i && h.length > 0;
|
|
2439
|
+
m && this.appPath && f.push({
|
|
2257
2440
|
method: "placement.unbind",
|
|
2258
2441
|
params: {
|
|
2259
2442
|
PLACEMENT: "PAGE_BACKGROUND_WORKER",
|
|
2260
|
-
HANDLER: i.handler || `${this.appPath}
|
|
2443
|
+
HANDLER: i.handler || `${this.appPath}`
|
|
2261
2444
|
}
|
|
2262
|
-
})
|
|
2263
|
-
for (const
|
|
2264
|
-
this.appPath &&
|
|
2445
|
+
});
|
|
2446
|
+
for (const p of h)
|
|
2447
|
+
this.appPath && f.push({
|
|
2265
2448
|
method: "placement.bind",
|
|
2266
2449
|
params: {
|
|
2267
2450
|
PLACEMENT: "PAGE_BACKGROUND_WORKER",
|
|
2268
|
-
HANDLER: `${this.appPath}?USER_ID=${
|
|
2269
|
-
LANG_ALL: {
|
|
2270
|
-
ru: {
|
|
2271
|
-
TITLE: this.appName
|
|
2272
|
-
}
|
|
2273
|
-
},
|
|
2451
|
+
HANDLER: `${this.appPath}?USER_ID=${p.ID}/`,
|
|
2452
|
+
LANG_ALL: { ru: { TITLE: this.appName } },
|
|
2274
2453
|
OPTIONS: {
|
|
2275
|
-
errorHandlerUrl: `${this.appPath}?USER_ID=${
|
|
2454
|
+
errorHandlerUrl: `${this.appPath}?USER_ID=${p.ID}/`
|
|
2276
2455
|
},
|
|
2277
|
-
USER_ID:
|
|
2456
|
+
USER_ID: p.ID
|
|
2278
2457
|
}
|
|
2279
2458
|
});
|
|
2280
|
-
(!i ||
|
|
2459
|
+
(!i || m) && this.appPath && f.push({
|
|
2281
2460
|
method: "placement.bind",
|
|
2282
2461
|
params: {
|
|
2283
2462
|
PLACEMENT: "PAGE_BACKGROUND_WORKER",
|
|
2284
|
-
HANDLER: `${this.appPath}
|
|
2285
|
-
LANG_ALL: {
|
|
2286
|
-
|
|
2287
|
-
|
|
2288
|
-
|
|
2289
|
-
|
|
2290
|
-
|
|
2291
|
-
|
|
2463
|
+
HANDLER: `${this.appPath}`,
|
|
2464
|
+
LANG_ALL: { ru: { TITLE: this.appName } },
|
|
2465
|
+
OPTIONS: { errorHandlerUrl: `${this.appPath}` }
|
|
2466
|
+
}
|
|
2467
|
+
});
|
|
2468
|
+
const A = f.filter(
|
|
2469
|
+
(p) => p.method === "placement.unbind"
|
|
2470
|
+
), u = f.filter(
|
|
2471
|
+
(p) => p.method === "placement.bind"
|
|
2472
|
+
);
|
|
2473
|
+
A.length && await this.safeCall(
|
|
2474
|
+
() => this.bx.batch(
|
|
2475
|
+
Object.fromEntries(
|
|
2476
|
+
A.map((p, R) => [`unbind_${R}`, p])
|
|
2477
|
+
)
|
|
2478
|
+
)
|
|
2479
|
+
), u.length && await this.safeCall(
|
|
2480
|
+
() => this.bx.batch(
|
|
2481
|
+
Object.fromEntries(
|
|
2482
|
+
u.map((p, R) => [`bind_${R}`, p])
|
|
2483
|
+
)
|
|
2484
|
+
)
|
|
2485
|
+
), f.length || console.log("setBackgroundWorkerAll: Нет операций");
|
|
2486
|
+
}
|
|
2487
|
+
async resolveAdmins() {
|
|
2488
|
+
var r, e;
|
|
2489
|
+
try {
|
|
2490
|
+
const i = +(((r = this.bx.userInfo) == null ? void 0 : r.ID) ?? 0), n = !!((e = this.bx) != null && e.isAdmin), o = await this.getAdminsList() || [];
|
|
2491
|
+
if (!n) {
|
|
2492
|
+
if (i && o.includes(i)) {
|
|
2493
|
+
const h = o.filter(
|
|
2494
|
+
(s) => s !== i
|
|
2495
|
+
);
|
|
2496
|
+
return await this.saveAdminsList(h), h;
|
|
2292
2497
|
}
|
|
2498
|
+
return o;
|
|
2293
2499
|
}
|
|
2294
|
-
|
|
2500
|
+
const l = /* @__PURE__ */ new Set([...o || []]);
|
|
2501
|
+
i && l.add(i);
|
|
2502
|
+
const c = [...l].filter(Boolean);
|
|
2503
|
+
return await this.saveAdminsList(c), c;
|
|
2504
|
+
} catch (i) {
|
|
2505
|
+
return console.error("BackgroundWorker: resolveAdmins error", i), [];
|
|
2506
|
+
}
|
|
2295
2507
|
}
|
|
2296
|
-
async getEligibleUsersForBackgroundWorker(
|
|
2297
|
-
return (this.users ?? []).filter(
|
|
2298
|
-
|
|
2299
|
-
|
|
2300
|
-
});
|
|
2508
|
+
async getEligibleUsersForBackgroundWorker(r = []) {
|
|
2509
|
+
return (this.users ?? []).filter(
|
|
2510
|
+
(i) => i.ACTIVE === "Y" || i.ACTIVE === !0
|
|
2511
|
+
).filter((i) => r.includes(+i.ID));
|
|
2301
2512
|
}
|
|
2302
|
-
async
|
|
2303
|
-
var e, r, i;
|
|
2513
|
+
async saveAdminsList(r = []) {
|
|
2304
2514
|
try {
|
|
2305
|
-
|
|
2306
|
-
|
|
2307
|
-
|
|
2308
|
-
const h = new Set(
|
|
2309
|
-
(this.users ?? []).filter((c) => c.ACTIVE === "Y" || c.ACTIVE === !0).map((c) => +c.ID)
|
|
2310
|
-
), u = o.filter((c) => h.has(c));
|
|
2311
|
-
return u.length !== o.length && (console.log(`updateAdminsList: Удалено ${o.length - u.length} неактивных админов`), o = u), BX24.appOption.set("adminsList", JSON.stringify(o)), console.log(`BackgroundWorker: Список админов обновлен: ${o.length} админов`), o;
|
|
2312
|
-
} catch (o) {
|
|
2313
|
-
return console.error("BackgroundWorker: Ошибка при обновлении списка админов:", o), [];
|
|
2515
|
+
BX24.appOption.set("adminsList", JSON.stringify(r));
|
|
2516
|
+
} catch (e) {
|
|
2517
|
+
console.error("BackgroundWorker: saveAdminsList error", e);
|
|
2314
2518
|
}
|
|
2315
2519
|
}
|
|
2316
2520
|
async getAdminsList() {
|
|
2317
2521
|
try {
|
|
2318
|
-
const
|
|
2319
|
-
return
|
|
2320
|
-
} catch (
|
|
2321
|
-
return console.error("
|
|
2522
|
+
const r = BX24.appOption.get("adminsList");
|
|
2523
|
+
return r ? JSON.parse(r) : [];
|
|
2524
|
+
} catch (r) {
|
|
2525
|
+
return console.error("BackgroundWorker: getAdminsList error", r), [];
|
|
2322
2526
|
}
|
|
2323
2527
|
}
|
|
2324
2528
|
async getEntityData() {
|
|
2325
|
-
const
|
|
2529
|
+
const r = {
|
|
2326
2530
|
users: { method: "user.get", params: { filter: { ACTIVE: "Y" } } }
|
|
2327
|
-
}, { users:
|
|
2328
|
-
|
|
2531
|
+
}, { users: e } = await this.safeCall(
|
|
2532
|
+
() => this.bx.batch(r).then((i) => i ? (Array.isArray(i.users) || (i.users = []), i) : { users: [] })
|
|
2533
|
+
);
|
|
2534
|
+
this.users = e;
|
|
2535
|
+
}
|
|
2536
|
+
/**
|
|
2537
|
+
* Без запуска фонового цикла: только убедиться, что у админа привязаны встройки
|
|
2538
|
+
* (общая и индивидуальные) и что список пользователей подгружен.
|
|
2539
|
+
*/
|
|
2540
|
+
async ensureAdminPlacements() {
|
|
2541
|
+
var r, e;
|
|
2542
|
+
(r = this.bx) != null && r.isAdmin && ((e = this.users) != null && e.length || await this.getEntityData(), await this.setBackgroundWorkerAll());
|
|
2329
2543
|
}
|
|
2330
|
-
pause(
|
|
2544
|
+
pause(r = 500, e) {
|
|
2331
2545
|
return new Promise((i) => {
|
|
2332
2546
|
setTimeout(() => {
|
|
2333
|
-
|
|
2334
|
-
},
|
|
2547
|
+
e && e(), i(!0);
|
|
2548
|
+
}, r);
|
|
2335
2549
|
});
|
|
2336
2550
|
}
|
|
2551
|
+
async safeCall(r) {
|
|
2552
|
+
try {
|
|
2553
|
+
return await r();
|
|
2554
|
+
} catch (e) {
|
|
2555
|
+
console.error("BackgroundWorker: safeCall error", e);
|
|
2556
|
+
return;
|
|
2557
|
+
}
|
|
2558
|
+
}
|
|
2337
2559
|
}
|
|
2338
2560
|
export {
|
|
2339
|
-
|
|
2340
|
-
|
|
2341
|
-
|
|
2561
|
+
Mt as BackgroundWorker,
|
|
2562
|
+
K as Batch,
|
|
2563
|
+
It as BxBoot,
|
|
2342
2564
|
mt as BxHelper,
|
|
2343
2565
|
bt as BxLogger,
|
|
2344
2566
|
rt as tempus
|