@burdenoff/fe-libs 2026.1029.1 → 2026.1029.3

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.
@@ -107,7 +107,7 @@ function _() {
107
107
  return [...i.values()].map(u);
108
108
  }
109
109
  function v() {
110
- i.clear();
110
+ i.clear(), a = 0;
111
111
  }
112
112
  var y = [
113
113
  {
@@ -131,6 +131,17 @@ export interface TurnTimingReportingOptions {
131
131
  /** How this panel sends a batch — reading workspace and credentials when it does. */
132
132
  send: TurnTimingSender;
133
133
  }
134
+ /**
135
+ * Register timing-only cleanup for a turn stopped on pagehide. The callback
136
+ * finishes its timeline and returns its id; the reporter reads that snapshot
137
+ * synchronously before flushing, regardless of Window listener order. Also
138
+ * call the returned `settle` before clearing the owner's id in its own exit
139
+ * handler. Normal notifications remain asynchronous. Unregister on unmount.
140
+ */
141
+ export declare function registerTurnTimingPageExit(finish: () => string | undefined): {
142
+ settle: () => void;
143
+ unregister: () => void;
144
+ };
134
145
  /**
135
146
  * Report this page's finished turns. The first call starts the page-wide
136
147
  * reporter, which runs for the page load (see the header); each panel lends it
@@ -2,10 +2,10 @@ import { graphqlFetch as e } from "../graphql/fetch.js";
2
2
  import "../../shared-graphql.js";
3
3
  import { REPORT_MY_ASSISTANT_TURN_TIMINGS as t } from "./operations.js";
4
4
  import { getCapability as n, isUnknownFieldError as r, markSupported as i, markUnsupported as a } from "./capabilities.js";
5
- import { subscribeTurnTimelines as o, turnClockMs as s } from "./turnTimeline.js";
6
- import { buildAbandonedTurnReport as c, buildTurnTimingReport as l, isFinishedTurn as u } from "./turnTimingReport.js";
5
+ import { subscribeTurnTimelines as o, turnClockMs as s, turnTimeline as c } from "./turnTimeline.js";
6
+ import { buildAbandonedTurnReport as l, buildTurnTimingReport as u, isFinishedTurn as d } from "./turnTimingReport.js";
7
7
  //#region src/shared/assistant/turnTimingReporter.ts
8
- var d = {
8
+ var f = {
9
9
  flushAt: 5,
10
10
  flushAfterMs: 15e3,
11
11
  maxQueued: 50,
@@ -15,7 +15,7 @@ var d = {
15
15
  rememberedTurns: 200,
16
16
  maxRunningTurns: 20
17
17
  };
18
- function f() {
18
+ function p() {
19
19
  try {
20
20
  let e = globalThis.crypto === void 0 ? null : globalThis.crypto;
21
21
  if (!e) return null;
@@ -29,22 +29,22 @@ function f() {
29
29
  return null;
30
30
  }
31
31
  }
32
- var p = (e, t) => {
32
+ var m = (e, t) => {
33
33
  let n = setTimeout(e, t);
34
34
  return () => clearTimeout(n);
35
35
  };
36
- function m(e) {
37
- let t = d, n = e.schedule ?? p, r = e.now ?? Date.now, i = e.turnClock ?? s, a = e.nonce ?? f, o = () => {
36
+ function h(e) {
37
+ let t = f, n = e.schedule ?? m, r = e.now ?? Date.now, i = e.turnClock ?? s, a = e.nonce ?? p, o = () => {
38
38
  try {
39
39
  return e.isPageHidden?.() === !0;
40
40
  } catch {
41
41
  return !1;
42
42
  }
43
- }, m = /* @__PURE__ */ new Set(), h = /* @__PURE__ */ new Map(), g = /* @__PURE__ */ new Map(), _ = [], v = null, y = !1, b = !1, x = 0, S = !1, C = !1, w = !1, T = (e) => {
44
- for (m.add(e); m.size > t.rememberedTurns;) {
45
- let e = m.values().next().value;
43
+ }, c = /* @__PURE__ */ new Set(), h = /* @__PURE__ */ new Map(), g = /* @__PURE__ */ new Map(), _ = [], v = null, y = !1, b = !1, x = 0, S = !1, C = !1, w = !1, T = (e) => {
44
+ for (c.add(e); c.size > t.rememberedTurns;) {
45
+ let e = c.values().next().value;
46
46
  if (e === void 0) break;
47
- m.delete(e);
47
+ c.delete(e);
48
48
  }
49
49
  }, E = () => {
50
50
  let e = v;
@@ -102,7 +102,7 @@ function m(e) {
102
102
  let e = i();
103
103
  for (let [t, n] of [...g]) {
104
104
  g.delete(t), T(t);
105
- let r = c(n, e);
105
+ let r = l(n, e);
106
106
  r && _.push(r);
107
107
  }
108
108
  _.length > t.maxQueued && _.splice(0, _.length - t.maxQueued);
@@ -134,7 +134,7 @@ function m(e) {
134
134
  }
135
135
  function F(e, n, r) {
136
136
  T(e);
137
- let i = l(n);
137
+ let i = u(n);
138
138
  i && (_.push(i), _.length > t.maxQueued && _.splice(0, _.length - t.maxQueued), r && (o() ? P({
139
139
  final: !0,
140
140
  keepalive: !0,
@@ -155,8 +155,8 @@ function m(e) {
155
155
  return {
156
156
  observe: (e) => {
157
157
  try {
158
- if (S || m.has(e.turnId)) return;
159
- if (!u(e)) {
158
+ if (S || c.has(e.turnId)) return;
159
+ if (!d(e)) {
160
160
  L(e);
161
161
  return;
162
162
  }
@@ -194,23 +194,23 @@ function m(e) {
194
194
  })
195
195
  };
196
196
  }
197
- var h = new Set([
197
+ var g = new Set([
198
198
  "GRAPHQL_VALIDATION_FAILED",
199
199
  "BAD_USER_INPUT",
200
200
  "FORBIDDEN"
201
201
  ]);
202
- function g(e) {
202
+ function _(e) {
203
203
  if (typeof e.message == "string" && r(e.message)) return !0;
204
204
  let t = e.extensions?.code;
205
- return typeof t == "string" && h.has(t);
205
+ return typeof t == "string" && g.has(t);
206
206
  }
207
- function _(e) {
207
+ function v(e) {
208
208
  return typeof e == "object" && !!e && !Array.isArray(e);
209
209
  }
210
- function v(e) {
211
- if (!_(e)) return null;
210
+ function y(e) {
211
+ if (!v(e)) return null;
212
212
  let t = e.reportMyAssistantTurnTimings;
213
- if (!_(t)) return null;
213
+ if (!v(t)) return null;
214
214
  let { enabled: n, accepted: r, rejected: i, duplicate: a, rateLimited: o } = t;
215
215
  return typeof n != "boolean" || typeof r != "number" || typeof i != "number" || typeof a != "boolean" || typeof o != "boolean" ? null : {
216
216
  enabled: n,
@@ -220,12 +220,12 @@ function v(e) {
220
220
  rateLimited: o
221
221
  };
222
222
  }
223
- function y(e) {
224
- return !_(e) || !Array.isArray(e.errors) ? [] : e.errors.filter(_);
223
+ function b(e) {
224
+ return !v(e) || !Array.isArray(e.errors) ? [] : e.errors.filter(v);
225
225
  }
226
- var b = { kind: "dropped" }, x = { kind: "unsupported" };
227
- async function S(n, i, a = e) {
228
- if (!i.workspaceId) return b;
226
+ var x = { kind: "dropped" }, S = { kind: "unsupported" };
227
+ async function C(n, i, a = e) {
228
+ if (!i.workspaceId) return x;
229
229
  try {
230
230
  let e = await a({
231
231
  gateway: "workspace",
@@ -244,78 +244,95 @@ async function S(n, i, a = e) {
244
244
  extraHeaders: { "x-request-id": `bf-assistant-${n.nonce}` },
245
245
  ...n.keepalive ? { keepalive: !0 } : {}
246
246
  });
247
- if (y(e).some(g)) return x;
248
- let r = v(e.data);
247
+ if (b(e).some(_)) return S;
248
+ let r = y(e.data);
249
249
  return r ? {
250
250
  kind: "receipt",
251
251
  receipt: r
252
- } : b;
252
+ } : x;
253
253
  } catch (e) {
254
- return r(e) || y(e).some(g) ? x : b;
254
+ return r(e) || b(e).some(_) ? S : x;
255
255
  }
256
256
  }
257
- var C = [], w = null, T = null;
258
- function E() {
257
+ var w = [], T = null, E = null, D = /* @__PURE__ */ new Set();
258
+ function O(e) {
259
+ let t = () => {
260
+ try {
261
+ let t = e(), n = t ? c(t) : void 0;
262
+ n && d(n) && E?.reporter.observe(n);
263
+ } catch {}
264
+ };
265
+ return D.add(t), {
266
+ settle: t,
267
+ unregister: () => {
268
+ D.delete(t);
269
+ }
270
+ };
271
+ }
272
+ function k() {
259
273
  return typeof document < "u" && document?.visibilityState === "hidden";
260
274
  }
261
- function D(e) {
275
+ function A(e) {
262
276
  let t = typeof window > "u" ? null : window, n = typeof document > "u" ? null : document, r = () => e.flush({
263
277
  final: !0,
264
278
  keepalive: !0,
265
279
  abandonRunning: !0
266
280
  }), i = () => {
281
+ for (let e of [...D]) e();
282
+ r();
283
+ }, a = () => {
267
284
  n?.visibilityState === "hidden" && e.flush({
268
285
  final: !0,
269
286
  keepalive: !0,
270
287
  keepAwaitingAudio: !0
271
288
  });
272
289
  };
273
- return t?.addEventListener?.("pagehide", r), n?.addEventListener?.("freeze", r), n?.addEventListener?.("visibilitychange", i), () => {
274
- t?.removeEventListener?.("pagehide", r), n?.removeEventListener?.("freeze", r), n?.removeEventListener?.("visibilitychange", i);
290
+ return t?.addEventListener?.("pagehide", i), n?.addEventListener?.("freeze", r), n?.addEventListener?.("visibilitychange", a), () => {
291
+ t?.removeEventListener?.("pagehide", i), n?.removeEventListener?.("freeze", r), n?.removeEventListener?.("visibilitychange", a);
275
292
  };
276
293
  }
277
- function O() {
278
- return C[C.length - 1]?.send ?? w;
294
+ function j() {
295
+ return w[w.length - 1]?.send ?? T;
279
296
  }
280
- function k() {
297
+ function M() {
281
298
  let e = () => void 0, t = () => void 0, n = !1, r = {
282
- reporter: m({
299
+ reporter: h({
283
300
  send: (e) => {
284
- let t = O();
285
- return t ? t(e) : Promise.resolve(b);
301
+ let t = j();
302
+ return t ? t(e) : Promise.resolve(x);
286
303
  },
287
304
  onSupported: () => i("turnTimings"),
288
- isPageHidden: E,
305
+ isPageHidden: k,
289
306
  onUnsupported: () => {
290
- a("turnTimings"), T === r && (T = null), r.release();
307
+ a("turnTimings"), E === r && (E = null), r.release();
291
308
  }
292
309
  }),
293
310
  release: () => {
294
311
  n || (n = !0, e(), t());
295
312
  }
296
313
  };
297
- return e = o((e) => r.reporter.observe(e)), t = D(r.reporter), r;
314
+ return e = o((e) => r.reporter.observe(e)), t = A(r.reporter), r;
298
315
  }
299
- var A = () => void 0;
300
- function j(e) {
316
+ var N = () => void 0;
317
+ function P(e) {
301
318
  try {
302
- if (n("turnTimings") === "unsupported") return A;
319
+ if (n("turnTimings") === "unsupported") return N;
303
320
  let t = { send: e.send };
304
- C.push(t), T ||= k();
321
+ w.push(t), E ||= M();
305
322
  let r = !1;
306
323
  return () => {
307
324
  if (r) return;
308
325
  r = !0;
309
- let e = C.indexOf(t);
310
- e >= 0 && C.splice(e, 1), w = t.send;
326
+ let e = w.indexOf(t);
327
+ e >= 0 && w.splice(e, 1), T = t.send;
311
328
  };
312
329
  } catch {
313
- return A;
330
+ return N;
314
331
  }
315
332
  }
316
- function M() {
317
- let e = T;
318
- T = null, C.length = 0, w = null, e && (e.release(), e.reporter.dispose());
333
+ function F() {
334
+ let e = E;
335
+ E = null, w.length = 0, T = null, e && (e.release(), e.reporter.dispose());
319
336
  }
320
337
  //#endregion
321
- export { d as TURN_TIMING_REPORTING, f as createTurnTimingNonce, m as createTurnTimingReporter, M as resetTurnTimingReporting, S as sendAssistantTurnTimings, j as startTurnTimingReporting };
338
+ export { f as TURN_TIMING_REPORTING, p as createTurnTimingNonce, h as createTurnTimingReporter, O as registerTurnTimingPageExit, F as resetTurnTimingReporting, C as sendAssistantTurnTimings, P as startTurnTimingReporting };