szdl-utils-kit 0.3.14 → 0.3.16

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