@cccsaurora/clue-ui 1.0.1 → 1.0.2-patch.38

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.
Files changed (56) hide show
  1. package/{ActionForm-WIj7BfD5.js → ActionForm-Sw7D-KOE.js} +13 -13
  2. package/AnnotationDetails-BoX61_IF.js +160 -0
  3. package/{AnnotationPreview-DWRDhxUB.js → AnnotationPreview-dYinoSA9.js} +2 -2
  4. package/ClueEnrichContext-CvCIPOMC.js +412 -0
  5. package/api/lookup/enrich.d.ts +3 -3
  6. package/components/AnnotationDetailPopover.js +7 -7
  7. package/components/AnnotationDetails.js +21 -155
  8. package/components/AnnotationEntry.js +26 -31
  9. package/components/AnnotationPreview.js +2 -2
  10. package/components/EnrichedCard.js +8 -8
  11. package/components/EnrichedChip.js +1 -1
  12. package/components/EnrichedTypography.js +1 -1
  13. package/components/actions/ActionForm.js +3 -3
  14. package/components/actions/ResultModal.js +1 -1
  15. package/components/display/graph/elements/NodeCard.js +2 -2
  16. package/components/display/graph/index.js +1 -1
  17. package/components/display/json/index.js +2 -2
  18. package/components/enrichment/EnrichPopover.js +5 -5
  19. package/components/fetchers/Fetcher.js +1 -1
  20. package/components/group/Entry.js +7 -7
  21. package/components/group/GroupControl.js +9 -9
  22. package/database/index.js +1 -1
  23. package/hooks/ClueActionContext.d.ts +1 -1
  24. package/hooks/ClueActionContext.js +3 -3
  25. package/hooks/ClueDatabaseContext.js +1 -1
  26. package/hooks/ClueEnrichContext.js +4 -4
  27. package/hooks/ClueEnrichContextType.d.ts +7 -0
  28. package/hooks/ClueFetcherContext.js +1 -1
  29. package/hooks/CluePopupContext.js +2 -2
  30. package/hooks/ClueProvider.js +3 -3
  31. package/hooks/selectors.js +2 -2
  32. package/hooks/useAnnotations.js +23 -27
  33. package/hooks/useClue.js +1 -1
  34. package/hooks/useClueActions.js +1 -1
  35. package/hooks/useClueTypeConfig.d.ts +2 -1
  36. package/hooks/useClueTypeConfig.js +2 -2
  37. package/hooks/useMyLocalStorage.js +28 -28
  38. package/icons/Action.js +7 -7
  39. package/icons/Assessment.js +13 -13
  40. package/icons/Context.js +7 -7
  41. package/icons/Opinion.js +12 -12
  42. package/{index-4YFAh_sa.js → index-CnaCBNrd.js} +1 -1
  43. package/{index-HuYhutsd.js → index-V7wwd05F.js} +1 -1
  44. package/{index-WvFmjbxF.js → index-pQg5VUAZ.js} +2 -2
  45. package/main.d.ts +3 -3
  46. package/main.js +56 -62
  47. package/package.json +1 -1
  48. package/text/Frequency.js +19 -19
  49. package/types/config.d.ts +4 -1
  50. package/{useClueTypeConfig-BQ33EiyB.js → useClueTypeConfig-CneP98N_.js} +10 -23
  51. package/utils/classificationParser.d.ts +8 -8
  52. package/utils/classificationParser.js +63 -76
  53. package/utils/utils.js +2 -2
  54. package/{utils-C_RX5uMP.js → utils-CD0rFIFU.js} +11 -11
  55. package/ClueEnrichContext-CbJVBm4w.js +0 -397
  56. package/isUndefined-DiNCDKoz.js +0 -10
@@ -3,24 +3,24 @@ import { materialRenderers as be, materialCells as Re } from "@jsonforms/materia
3
3
  import { JsonForms as Ee } from "@jsonforms/react";
4
4
  import { Stack as x, Typography as q, IconButton as Me, Modal as Se, Paper as je, Box as F, Button as G, Divider as oe, CircularProgress as Fe, Collapse as $e } from "@mui/material";
5
5
  import le from "./components/display/icons/Iconified.js";
6
- import { J as Je } from "./index-4YFAh_sa.js";
6
+ import { J as Je } from "./index-CnaCBNrd.js";
7
7
  import { ClueComponentContext as ie } from "./hooks/ClueComponentContext.js";
8
8
  import { c as Oe, u as ce, a as Pe } from "./index-E7g8cRyW.js";
9
- import { A as ze } from "./index-WvFmjbxF.js";
10
- import { a as te } from "./useClueTypeConfig-BQ33EiyB.js";
11
- import { useState as v, useCallback as R, useEffect as We, useMemo as L, memo as qe } from "react";
12
- import U from "./components/ErrorBoundary.js";
13
- import { adaptSchema as Be } from "./components/actions/form/schemaAdapter.js";
9
+ import { A as ze } from "./index-pQg5VUAZ.js";
10
+ import { a as te } from "./useClueTypeConfig-CneP98N_.js";
14
11
  import { d as de } from "./_baseGet-Dgf6_xCm.js";
15
- import { b as Ve } from "./_baseSlice-M5RKzt1A.js";
16
- import { i as ke } from "./utils-C_RX5uMP.js";
12
+ import { b as We } from "./_baseSlice-M5RKzt1A.js";
13
+ import { i as qe } from "./utils-CD0rFIFU.js";
14
+ import { useState as v, useCallback as R, useEffect as Be, useMemo as L, memo as Ve } from "react";
15
+ import U from "./components/ErrorBoundary.js";
16
+ import { adaptSchema as ke } from "./components/actions/form/schemaAdapter.js";
17
17
  import He from "./components/actions/ResultModal.js";
18
18
  import { SNACKBAR_EVENT_ID as I } from "./data/event.js";
19
19
  import { safeDispatchEvent as K } from "./utils/window.js";
20
20
  import _e from "./hooks/useClue.js";
21
21
  function Ge(e, l, i) {
22
22
  var o = e.length;
23
- return i = i === void 0 ? o : i, !l && i >= o ? e : Ve(e, l, i);
23
+ return i = i === void 0 ? o : i, !l && i >= o ? e : We(e, l, i);
24
24
  }
25
25
  var Ie = "\\ud800-\\udfff", Ke = "\\u0300-\\u036f", Le = "\\ufe20-\\ufe2f", Ne = "\\u20d0-\\u20ff", Ze = Ke + Le + Ne, Ue = "\\ufe0e\\ufe0f", Qe = "\\u200d", Xe = RegExp("[" + Qe + Ie + Ze + Ue + "]");
26
26
  function fe(e) {
@@ -64,7 +64,7 @@ const as = new ze({ removeAdditional: !0, coerceTypes: !0, strict: !1 }), Ce = O
64
64
  const S = await te.actions.get(y);
65
65
  return S && O(S), S;
66
66
  }, [e, o, m, w]);
67
- We(() => {
67
+ Be(() => {
68
68
  k();
69
69
  }, [e, w]);
70
70
  const P = R(
@@ -197,7 +197,7 @@ const as = new ze({ removeAdditional: !0, coerceTypes: !0, strict: !1 }), Ce = O
197
197
  renderer: ({ ...l }) => /* @__PURE__ */ s(U, { children: /* @__PURE__ */ s(e.renderer, { ...l }) })
198
198
  })), vs = ({ runningActionData: e }) => {
199
199
  const { executeAction: l, cancelAction: i } = us(), { t: o } = ce(ie, (r) => r.i18next), [m, E] = v(!1), [w, a] = v(null), [C, $] = v(e == null ? void 0 : e.params), [M, B] = v(!1), t = L(
200
- () => e != null && e.action ? { ...Be(e.action.params), ...e.action.extra_schema ?? {} } : null,
200
+ () => e != null && e.action ? { ...ke(e.action.params), ...e.action.extra_schema ?? {} } : null,
201
201
  [e == null ? void 0 : e.action]
202
202
  ), J = L(
203
203
  () => ({
@@ -293,7 +293,7 @@ const as = new ze({ removeAdditional: !0, coerceTypes: !0, strict: !1 }), Ce = O
293
293
  cells: Re,
294
294
  data: C,
295
295
  onChange: ({ data: r, errors: d }) => {
296
- ke(r, C) || $(r), a(d);
296
+ qe(r, C) || $(r), a(d);
297
297
  },
298
298
  config: {}
299
299
  }
@@ -330,7 +330,7 @@ const as = new ze({ removeAdditional: !0, coerceTypes: !0, strict: !1 }), Ce = O
330
330
  } catch (r) {
331
331
  return console.warn(r), null;
332
332
  }
333
- }, Cs = qe(vs);
333
+ }, Cs = Ve(vs);
334
334
  export {
335
335
  Cs as A,
336
336
  Hs as C,
@@ -0,0 +1,160 @@
1
+ import { jsxs as a, jsx as o } from "react/jsx-runtime";
2
+ import { I as u } from "./iconify-BBckr5AQ.js";
3
+ import { useTheme as M, Stack as l, Typography as s, Tooltip as x, Box as A, IconButton as E, CircularProgress as N, Chip as z, Accordion as $, AccordionSummary as j, AccordionDetails as _, Divider as S } from "@mui/material";
4
+ import g from "./components/display/icons/Iconified.js";
5
+ import { SNACKBAR_EVENT_ID as O } from "./data/event.js";
6
+ import { ClueComponentContext as F } from "./hooks/ClueComponentContext.js";
7
+ import { useClueEnrichSelector as H } from "./hooks/selectors.js";
8
+ import K from "./hooks/useAnnotations.js";
9
+ import L from "./hooks/useErrors.js";
10
+ import { ICON_MAP as T } from "./icons/iconMap.js";
11
+ import { safeDispatchEvent as U } from "./utils/window.js";
12
+ import { g as V } from "./groupBy-BheQYl6f.js";
13
+ import { u as W } from "./ClueEnrichContext-CvCIPOMC.js";
14
+ import { memo as G, useState as J, useMemo as k, useCallback as P, useEffect as Q } from "react";
15
+ import { u as X } from "./index-E7g8cRyW.js";
16
+ import Y from "./components/actions/ExecutePopover.js";
17
+ import Z from "./components/AnnotationEntry.js";
18
+ import q from "./components/ClassificationChip.js";
19
+ import R from "./components/enrichment/EnrichPopover.js";
20
+ function w(i) {
21
+ return i === null;
22
+ }
23
+ const ii = ({ enrichRequest: i, setReady: d, updatePosition: p }) => {
24
+ const v = M(), { t: c } = X(F, (n) => n.i18next), [r, I] = J("all"), y = H((n) => n.enrich), [t, C] = K(
25
+ i == null ? void 0 : i.type,
26
+ i == null ? void 0 : i.value,
27
+ i == null ? void 0 : i.classification,
28
+ { skipEnrichment: !0 }
29
+ ), m = L(i == null ? void 0 : i.value), B = k(
30
+ () => ["all", ...W((t ?? []).map((n) => n.type))],
31
+ [t]
32
+ ), b = k(() => V(t ?? [], "type"), [t]), h = P(async () => {
33
+ await y(i.type, i.value, {
34
+ classification: i.classification,
35
+ timeout: 15,
36
+ force: !0
37
+ });
38
+ }, [i, y]);
39
+ return Q(() => {
40
+ d && (d(i && !w(t)), p == null || p());
41
+ }, [t, i, d, p]), i && !w(t) && /* @__PURE__ */ a(l, { direction: "column", sx: { p: 1, width: "100%" }, spacing: 1, children: [
42
+ /* @__PURE__ */ a(l, { spacing: 1, children: [
43
+ /* @__PURE__ */ a(l, { direction: "row", spacing: 1, children: [
44
+ /* @__PURE__ */ a(l, { children: [
45
+ /* @__PURE__ */ a(l, { direction: "row", spacing: 1, children: [
46
+ /* @__PURE__ */ o(s, { variant: "body1", fontWeight: "bold", children: "Clue" }),
47
+ i.classification && /* @__PURE__ */ o(q, { size: "small", classification: i.classification })
48
+ ] }),
49
+ /* @__PURE__ */ a(s, { variant: "caption", color: "text.secondary", children: [
50
+ i.type.toLocaleUpperCase(),
51
+ " ",
52
+ c("enrichment")
53
+ ] })
54
+ ] }),
55
+ /* @__PURE__ */ o("div", { style: { flex: 1 } }),
56
+ /* @__PURE__ */ o(x, { title: c("refresh"), children: /* @__PURE__ */ o(A, { sx: { alignSelf: "center", m: -1 }, children: /* @__PURE__ */ o(E, { onClick: () => h(), disabled: C, children: C ? /* @__PURE__ */ o(N, { variant: "indeterminate", size: 20 }) : /* @__PURE__ */ o(g, { icon: "ic:baseline-replay", fontSize: "small" }) }) }) }),
57
+ /* @__PURE__ */ o(x, { title: c("clipboard"), children: /* @__PURE__ */ o(
58
+ E,
59
+ {
60
+ sx: { alignSelf: "center", m: -1 },
61
+ onClick: () => {
62
+ navigator.clipboard.writeText(i.value), U(
63
+ new CustomEvent(O, {
64
+ detail: {
65
+ message: `${i.value} ${c("clipboard.success")}`,
66
+ level: "success"
67
+ }
68
+ })
69
+ );
70
+ },
71
+ children: /* @__PURE__ */ o(g, { icon: "ic:outline-assignment", fontSize: "small" })
72
+ }
73
+ ) }),
74
+ /* @__PURE__ */ o(R, { selector: i }),
75
+ /* @__PURE__ */ o(Y, { selectors: [i] })
76
+ ] }),
77
+ /* @__PURE__ */ a(l, { direction: "row", spacing: 0.5, children: [
78
+ B.map((n, e) => /* @__PURE__ */ o(
79
+ z,
80
+ {
81
+ size: "small",
82
+ variant: n === r ? "filled" : "outlined",
83
+ icon: T[n] && /* @__PURE__ */ o(u, { icon: T[n] }),
84
+ label: /* @__PURE__ */ a(s, { variant: "caption", textTransform: "capitalize", children: [
85
+ n,
86
+ ":",
87
+ " ",
88
+ n === "all" ? t.length : t.filter((f) => f.type === n).length
89
+ ] }),
90
+ onClick: () => I(n)
91
+ },
92
+ e
93
+ )),
94
+ (m == null ? void 0 : m.length) > 0 && /* @__PURE__ */ o(
95
+ x,
96
+ {
97
+ title: /* @__PURE__ */ o("div", { onClick: (n) => n.stopPropagation(), children: m.map((n, e) => /* @__PURE__ */ a("div", { children: [
98
+ /* @__PURE__ */ o("span", { style: { textTransform: "capitalize" }, children: n.source.replace(/-/g, " ") }),
99
+ ":",
100
+ " ",
101
+ n.message
102
+ ] }, e)) }),
103
+ children: /* @__PURE__ */ o(
104
+ z,
105
+ {
106
+ size: "small",
107
+ variant: "outlined",
108
+ icon: /* @__PURE__ */ o(u, { icon: "material-symbols:timer-outline", color: v.palette.error.main }),
109
+ label: /* @__PURE__ */ a(s, { variant: "caption", textTransform: "capitalize", children: [
110
+ c("annotation.failed"),
111
+ ": ",
112
+ m.length
113
+ ] }),
114
+ onClick: h
115
+ }
116
+ )
117
+ }
118
+ )
119
+ ] })
120
+ ] }),
121
+ /* @__PURE__ */ o(A, {}),
122
+ Object.keys(b).filter((n) => !r || r === "all" || n === r).map((n, e) => /* @__PURE__ */ a(
123
+ $,
124
+ {
125
+ defaultExpanded: !0,
126
+ sx: {
127
+ marginTop: `${v.spacing(1)} !important`,
128
+ marginBottom: "0 !important",
129
+ "&:before": { height: 0 }
130
+ },
131
+ children: [
132
+ r === "all" && /* @__PURE__ */ o(
133
+ j,
134
+ {
135
+ expandIcon: /* @__PURE__ */ o(g, { icon: "ic:baseline-arrow-drop-down" }),
136
+ sx: {
137
+ minHeight: "initial !important",
138
+ mt: 0.5,
139
+ mb: 0,
140
+ px: 1,
141
+ "& .MuiAccordionSummary-content": { my: 0.5, mx: 0 },
142
+ "& .MuiAccordionSummary-content.Mui-expanded": { my: 0.5, mx: 0 }
143
+ },
144
+ children: /* @__PURE__ */ o(s, { variant: "body1", textTransform: "capitalize", children: n }, n)
145
+ }
146
+ ),
147
+ /* @__PURE__ */ a(_, { sx: { px: 1 }, children: [
148
+ r === "all" && /* @__PURE__ */ o(S, { orientation: "horizontal", sx: { mb: 1 } }),
149
+ /* @__PURE__ */ o(l, { spacing: 1, divider: /* @__PURE__ */ o(S, { orientation: "horizontal", flexItem: !0 }), children: b[n].map((f, D) => /* @__PURE__ */ o(Z, { annotation: f }, D)) })
150
+ ] })
151
+ ]
152
+ },
153
+ e
154
+ ))
155
+ ] });
156
+ }, hi = G(ii);
157
+ export {
158
+ hi as A,
159
+ w as i
160
+ };
@@ -3,12 +3,12 @@ import { I as H } from "./iconify-BBckr5AQ.js";
3
3
  import { useTheme as k, Popper as V, Fade as j, Paper as O, Stack as w, Typography as y, Divider as W } from "@mui/material";
4
4
  import F from "./components/AnnotationDetailPopover.js";
5
5
  import L from "./hooks/useAnnotations.js";
6
- import { t as M } from "./utils-C_RX5uMP.js";
6
+ import { t as M } from "./utils-CD0rFIFU.js";
7
7
  import { useState as v, useRef as Y, useCallback as x, useEffect as Z, useMemo as _ } from "react";
8
8
  import { c as B, u as G } from "./index-E7g8cRyW.js";
9
9
  import { SHOW_EVENT_ID as g, HIDE_EVENT_ID as D } from "./data/event.js";
10
10
  import { safeDispatchEvent as A, safeAddEventListener as S } from "./utils/window.js";
11
- import { i as J } from "./isUndefined-DiNCDKoz.js";
11
+ import { i as J } from "./AnnotationDetails-BoX61_IF.js";
12
12
  const b = B(null), rt = ({ children: c }) => {
13
13
  const [l, e] = v(null), [p, i] = v(null), [r, d] = v(null), [u, m] = v(null), [f, t] = v({}), a = Y(null), P = x((s, o, z, N) => {
14
14
  A(
@@ -0,0 +1,412 @@
1
+ import { jsx as vt } from "react/jsx-runtime";
2
+ import { a as xt } from "./iconify-BBckr5AQ.js";
3
+ import { u as Dt, a as Et, p as ot } from "./useClueTypeConfig-CneP98N_.js";
4
+ import { clueDebugLogger as G } from "./utils/loggerUtil.js";
5
+ import { b as It } from "./_baseSlice-M5RKzt1A.js";
6
+ import { t as Ct } from "./toFinite-BMy6GObD.js";
7
+ import { d as gt } from "./debounce-DryYcbJ4.js";
8
+ import { g as ct } from "./groupBy-BheQYl6f.js";
9
+ import { b as lt } from "./_baseUniq-tMFmk80M.js";
10
+ import { b as $t } from "./_baseIteratee-CP1bocOX.js";
11
+ import { useContext as Ot, useState as H, useMemo as K, useCallback as g, useRef as bt, useEffect as q } from "react";
12
+ import { c as jt } from "./index-E7g8cRyW.js";
13
+ import { ClueDatabaseContext as Pt } from "./hooks/ClueDatabaseContext.js";
14
+ import Mt from "./hooks/useClueConfig.js";
15
+ function qt(e) {
16
+ var s = Ct(e), p = s % 1;
17
+ return s === s ? p ? s - p : s : 0;
18
+ }
19
+ var At = Math.ceil, Bt = Math.max;
20
+ function Rt(e, s, p) {
21
+ s === void 0 ? s = 1 : s = Bt(qt(s), 0);
22
+ var l = e == null ? 0 : e.length;
23
+ if (!l || s < 1)
24
+ return [];
25
+ for (var h = 0, v = 0, O = Array(At(l / s)); h < l; )
26
+ O[v++] = It(e, h, h += s);
27
+ return O;
28
+ }
29
+ function at(e) {
30
+ return e && e.length ? lt(e) : [];
31
+ }
32
+ function Vt(e, s) {
33
+ return e && e.length ? lt(e, $t(s)) : [];
34
+ }
35
+ let J;
36
+ const Ut = new Uint8Array(16);
37
+ function Wt() {
38
+ if (!J && (J = typeof crypto < "u" && crypto.getRandomValues && crypto.getRandomValues.bind(crypto), !J))
39
+ throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");
40
+ return J(Ut);
41
+ }
42
+ const d = [];
43
+ for (let e = 0; e < 256; ++e)
44
+ d.push((e + 256).toString(16).slice(1));
45
+ function Ft(e, s = 0) {
46
+ return d[e[s + 0]] + d[e[s + 1]] + d[e[s + 2]] + d[e[s + 3]] + "-" + d[e[s + 4]] + d[e[s + 5]] + "-" + d[e[s + 6]] + d[e[s + 7]] + "-" + d[e[s + 8]] + d[e[s + 9]] + "-" + d[e[s + 10]] + d[e[s + 11]] + d[e[s + 12]] + d[e[s + 13]] + d[e[s + 14]] + d[e[s + 15]];
47
+ }
48
+ const Ht = typeof crypto < "u" && crypto.randomUUID && crypto.randomUUID.bind(crypto), ut = {
49
+ randomUUID: Ht
50
+ };
51
+ function $(e, s, p) {
52
+ if (ut.randomUUID && !e)
53
+ return ut.randomUUID();
54
+ e = e || {};
55
+ const l = e.random || (e.rng || Wt)();
56
+ return l[6] = l[6] & 15 | 64, l[8] = l[8] & 63 | 128, Ft(l);
57
+ }
58
+ const Jt = jt(null), ee = ({
59
+ children: e,
60
+ classification: s,
61
+ baseURL: p,
62
+ getToken: l,
63
+ onNetworkCall: h,
64
+ pickSources: v,
65
+ chunkSize: O = 15,
66
+ maxRequestCount: Q = 4,
67
+ defaultTimeout: A = 5,
68
+ enabled: B = !0,
69
+ ready: ft = !1,
70
+ publicIconify: S = !0,
71
+ skipConfigCall: X = !1,
72
+ customIconify: R,
73
+ debugLogging: x = !0
74
+ }) => {
75
+ var st, nt, it, rt;
76
+ const I = Mt(), i = Ot(Pt), [Y, dt] = H(null), w = K(
77
+ () => {
78
+ var t, n;
79
+ return Y ?? s ?? ((n = (t = I.config) == null ? void 0 : t.c12nDef) == null ? void 0 : n.RESTRICTED);
80
+ },
81
+ [s, (nt = (st = I.config) == null ? void 0 : st.c12nDef) == null ? void 0 : nt.RESTRICTED, Y]
82
+ ), Z = g(
83
+ (t) => {
84
+ var n;
85
+ return dt(t((n = I.config) == null ? void 0 : n.c12nDef));
86
+ },
87
+ [(it = I.config) == null ? void 0 : it.c12nDef]
88
+ ), [C, pt] = H(ft), b = bt(0), [D, mt] = H([]), { availableSources: j, typesDetection: V } = Dt(
89
+ B && C,
90
+ p,
91
+ x,
92
+ l,
93
+ h
94
+ );
95
+ q(() => {
96
+ if (X || !B || !C)
97
+ return;
98
+ const t = {}, n = l == null ? void 0 : l();
99
+ n && (t.Authorization = `Bearer ${n}`);
100
+ let u = { baseURL: p, headers: t };
101
+ h && (u = h(u)), Et.configs.get(u).then(I.setConfig);
102
+ }, [p, h, X, C]);
103
+ const [z, N] = H(R);
104
+ q(() => {
105
+ R && N(R);
106
+ }, [R]), q(() => {
107
+ if (S)
108
+ return;
109
+ let t = z ?? void 0 ?? (p == null ? void 0 : p.replace(/^[^.]+/, "icons"));
110
+ !t && typeof window < "u" && window && !window.location.origin.includes("localhost") && (t = window.location.protocol + "//" + window.location.origin.replace(/^[^.]+/, "icons")), t && (G(`Using ${t} for iconify`, x), xt("", {
111
+ resources: [t]
112
+ }));
113
+ }, [p, z, x, S]);
114
+ const U = g(
115
+ async (t) => {
116
+ const n = [];
117
+ for (const c of t) {
118
+ const { latency: o, source: f, type: r, value: y, items: a, error: m } = c;
119
+ m && n.push({
120
+ id: $(),
121
+ source: f,
122
+ type: r,
123
+ value: y,
124
+ annotations: [],
125
+ classification: w,
126
+ latency: o,
127
+ count: 0,
128
+ error: m
129
+ });
130
+ for (const E of a) {
131
+ const { classification: P, count: M, link: F, annotations: yt } = E;
132
+ await i.selectors.find({ selector: { type: r, value: y, source: f, classification: P } }).incrementalRemove();
133
+ const _ = {
134
+ id: $(),
135
+ source: f,
136
+ type: r,
137
+ value: y,
138
+ annotations: yt,
139
+ classification: P,
140
+ latency: o,
141
+ count: M,
142
+ link: F,
143
+ error: m
144
+ };
145
+ n.some((wt) => wt.id === _.id) && (_.id = $()), n.push(_);
146
+ }
147
+ }
148
+ const u = await i.selectors.bulkInsert(n);
149
+ u.error.length > 0 && (console.warn("Errors on upsert:"), u.error.forEach((c) => console.warn(c.documentId, c.validationErrors ?? c.status)));
150
+ },
151
+ [i, w]
152
+ ), T = g(
153
+ async (t, n, u = {}) => {
154
+ var E, P;
155
+ if (!t || !n)
156
+ return console.error(`Type (${t}) or value (${n}) is empty, returning empty response`), {};
157
+ const c = (v == null ? void 0 : v(D, j, [{ type: t, value: n, classification: u.classification }])) ?? D, o = {
158
+ timeout: A,
159
+ force: !1,
160
+ includeRaw: !1,
161
+ noCache: !1,
162
+ classification: w,
163
+ sources: c,
164
+ ...u
165
+ }, f = {}, r = l == null ? void 0 : l();
166
+ r && (f.Authorization = `Bearer ${r}`);
167
+ let y = { baseURL: p, headers: f };
168
+ h && (y = h(y));
169
+ const a = {
170
+ type: t,
171
+ value: n,
172
+ classification: o.classification
173
+ };
174
+ let m = await ((E = i.status) == null ? void 0 : E.findOne({ selector: { ...a } }).exec());
175
+ m ? await m.incrementalPatch({ status: "in-progress" }) : m = await ((P = i.status) == null ? void 0 : P.insert({
176
+ id: $(),
177
+ type: a.type,
178
+ value: a.value,
179
+ classification: a.classification ?? w,
180
+ status: "in-progress"
181
+ }));
182
+ try {
183
+ const M = await ot([a], o.sources, o, y), F = Object.values(Object.values(M)[0])[0];
184
+ return await (m == null ? void 0 : m.incrementalPatch({ status: "complete" })), await U(Object.values(F)), F;
185
+ } catch (M) {
186
+ return console.error(M), {};
187
+ }
188
+ },
189
+ [
190
+ U,
191
+ j,
192
+ p,
193
+ i,
194
+ w,
195
+ A,
196
+ l,
197
+ h,
198
+ v,
199
+ D
200
+ ]
201
+ ), W = g(
202
+ async (t, n) => {
203
+ const u = (v == null ? void 0 : v(D, j, t)) ?? D, c = {
204
+ timeout: A,
205
+ includeRaw: !1,
206
+ noCache: !1,
207
+ classification: w,
208
+ sources: u,
209
+ ...n
210
+ }, o = {}, f = l == null ? void 0 : l();
211
+ f && (o.Authorization = `Bearer ${f}`);
212
+ let r = { baseURL: p, headers: o };
213
+ h && (r = h(r));
214
+ const y = [];
215
+ for (const a of t) {
216
+ const m = { type: a.type, value: a.value, classification: c.classification };
217
+ let E = await i.status.findOne({
218
+ selector: m
219
+ }).incrementalPatch({
220
+ status: "in-progress"
221
+ });
222
+ E || (E = await i.status.insert({
223
+ id: $(),
224
+ ...m,
225
+ status: "in-progress",
226
+ sources: c.sources
227
+ })), y.push(E.toMutableJSON());
228
+ }
229
+ try {
230
+ const a = await ot(t, c.sources, c, r), m = Object.values(a).flatMap(Object.values).flatMap(Object.values);
231
+ return await U(m), a;
232
+ } catch (a) {
233
+ return console.error(a), {};
234
+ } finally {
235
+ i.status.bulkUpsert(
236
+ Vt(y, (a) => a.id).map((a) => (a.status = "complete", a))
237
+ );
238
+ }
239
+ },
240
+ [
241
+ v,
242
+ D,
243
+ j,
244
+ A,
245
+ w,
246
+ l,
247
+ p,
248
+ h,
249
+ i,
250
+ U
251
+ ]
252
+ ), L = g(async () => {
253
+ const t = await i.selectors.find({ selector: { error: { $exists: !0 } } }).exec(), n = ct(t, "classification"), u = [];
254
+ for (const [c, o] of Object.entries(n)) {
255
+ const f = ct(o, (r) => `${r.type}:${r.value}`);
256
+ Object.values(f).forEach((r) => {
257
+ u.push({
258
+ id: $(),
259
+ type: r[0].type,
260
+ value: r[0].value,
261
+ classification: c,
262
+ sources: at(r.map((y) => y.source)).sort(),
263
+ status: "pending"
264
+ });
265
+ });
266
+ }
267
+ await i.status.bulkInsert(u), await i.selectors.bulkRemove(t);
268
+ }, [i]), k = K(
269
+ () => gt(
270
+ async () => {
271
+ if (i != null && i.status) {
272
+ if (i.status.closed) {
273
+ console.warn("Status database is closed, will not enrich");
274
+ return;
275
+ }
276
+ } else return;
277
+ const t = await i.status.find({ selector: { status: "pending" } }).update({ $set: { status: "in-progress" } });
278
+ if (t.length < 1)
279
+ return;
280
+ const n = Rt(t, O);
281
+ G(
282
+ `Enriching ${t.length} selectors in ${n.length} chunks of ${O}.`,
283
+ x
284
+ ), await Promise.all(
285
+ // For performance reasons, we chunk the requests. This will allow us to take advantage of parellelization in the
286
+ // backend, both on the pod level and kubernetes level
287
+ n.map(async (u) => {
288
+ let c = null;
289
+ if (b.current <= Q)
290
+ b.current += 1;
291
+ else {
292
+ let o = Date.now();
293
+ await new Promise((f) => {
294
+ c = setInterval(() => {
295
+ G(
296
+ `Waiting on ${b.current} existing requests to complete (total delay: ${Date.now() - o}ms)`,
297
+ x
298
+ ), b.current < Q && f();
299
+ }, 400);
300
+ }).finally(() => {
301
+ b.current += 1, clearInterval(c);
302
+ });
303
+ }
304
+ try {
305
+ const o = {}, f = at(u.flatMap((r) => r.sources ?? []));
306
+ f.length > 0 && (o.sources = f), await W(
307
+ u.map((r) => r.toSelector()),
308
+ o
309
+ ), await i.status.findByIds(u.map((r) => r.id)).update({ $set: { status: "complete" } });
310
+ } catch (o) {
311
+ console.error(o);
312
+ } finally {
313
+ b.current -= 1, c && clearInterval(c);
314
+ }
315
+ })
316
+ );
317
+ },
318
+ 200,
319
+ { maxWait: 500, leading: !1 }
320
+ ),
321
+ [W, O, i, x, Q]
322
+ );
323
+ q(() => {
324
+ }, [i, x]), q(() => {
325
+ if (!B || !C || !(i != null && i.status))
326
+ return;
327
+ const t = i.status.find({
328
+ selector: {
329
+ status: "pending"
330
+ }
331
+ }).$.subscribe(() => k());
332
+ return () => {
333
+ try {
334
+ t == null || t.unsubscribe();
335
+ } catch (n) {
336
+ console.warn(n);
337
+ }
338
+ };
339
+ }, [B, C, i, x, k]);
340
+ const tt = g(
341
+ async (t, n, u) => {
342
+ if (!t)
343
+ throw new Error("Type cannot be null");
344
+ if (!n)
345
+ throw new Error("Value cannot be null");
346
+ const c = { type: t, value: n, classification: u ?? w };
347
+ let o = await i.status.findOne({
348
+ selector: c
349
+ }).exec();
350
+ return o || (o = await i.status.queueInsert({
351
+ id: $(),
352
+ ...c,
353
+ status: "pending"
354
+ })), o;
355
+ },
356
+ [w, i]
357
+ ), et = g(
358
+ (t) => {
359
+ var f, r;
360
+ if (!t)
361
+ return null;
362
+ const n = Object.entries(V), u = (f = n.find(([y, a]) => a.exec(t))) == null ? void 0 : f[0];
363
+ if (u)
364
+ return u;
365
+ const c = t.toLowerCase(), o = (r = n.find(([y, a]) => a.exec(c))) == null ? void 0 : r[0];
366
+ return o || null;
367
+ },
368
+ [V]
369
+ ), ht = K(
370
+ () => {
371
+ var t;
372
+ return {
373
+ bulkEnrich: W,
374
+ enrich: T,
375
+ enrichFailedEnrichments: L,
376
+ sources: D,
377
+ setSources: mt,
378
+ typesDetection: V,
379
+ availableSources: j,
380
+ guessType: et,
381
+ queueEnrich: tt,
382
+ setCustomIconify: N,
383
+ setDefaultClassification: Z,
384
+ setReady: pt,
385
+ defaultClassification: w,
386
+ ready: C && !!i && !!((t = I.config) != null && t.c12nDef)
387
+ };
388
+ },
389
+ [
390
+ W,
391
+ T,
392
+ L,
393
+ D,
394
+ V,
395
+ j,
396
+ et,
397
+ tt,
398
+ Z,
399
+ w,
400
+ C,
401
+ i,
402
+ (rt = I.config) == null ? void 0 : rt.c12nDef
403
+ ]
404
+ );
405
+ return /* @__PURE__ */ vt(Jt.Provider, { value: ht, children: e });
406
+ };
407
+ export {
408
+ Jt as C,
409
+ ee as a,
410
+ Vt as b,
411
+ at as u
412
+ };
@@ -1,10 +1,10 @@
1
1
  import { AxiosRequestConfig } from 'axios';
2
2
  import { BulkEnrichResponses, Selector } from "../../types/lookup";
3
3
 
4
- export declare function uri(): string;
5
- export declare function post(bulkData: Selector[], sources?: string[], options?: {
4
+ export declare const uri: () => string;
5
+ export declare const post: (bulkData: Selector[], sources?: string[], options?: {
6
6
  classification?: string;
7
7
  timeout?: number;
8
8
  includeRaw?: boolean;
9
9
  noCache?: boolean;
10
- }, config?: AxiosRequestConfig): Promise<BulkEnrichResponses>;
10
+ }, config?: AxiosRequestConfig) => Promise<BulkEnrichResponses>;