@burdenoff/fe-libs 2026.1023.7 → 2026.1023.9

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 (39) hide show
  1. package/dist/shared/events/sinks/RybbitSink.d.ts +21 -0
  2. package/dist/shared/events/sinks/RybbitSink.js +36 -11
  3. package/dist/shared/events/sinks/index.d.ts +1 -1
  4. package/dist/shared/graphql/client.d.ts +9 -0
  5. package/dist/shared/graphql/client.js +241 -201
  6. package/dist/shared/graphql/fetch.js +135 -123
  7. package/dist/shared/graphql/index.d.ts +1 -0
  8. package/dist/shared/graphql/workspaceOperationGuard.d.ts +70 -0
  9. package/dist/shared/graphql/workspaceOperationGuard.js +62 -0
  10. package/dist/shared/providers/AppShellProvider.d.ts +16 -0
  11. package/dist/shared/providers/AppShellProvider.js +232 -226
  12. package/dist/shared/providers/shell/AuthProvider.d.ts +14 -1
  13. package/dist/shared/providers/shell/AuthProvider.js +105 -94
  14. package/dist/shared/providers/shell/MultiGatewayProvider.d.ts +8 -1
  15. package/dist/shared/providers/shell/MultiGatewayProvider.js +115 -119
  16. package/dist/shared/providers/shell/ProfileStorageManager.js +1 -1
  17. package/dist/shared/providers/shell/WorkspaceWriteRefusedToastListener.d.ts +4 -0
  18. package/dist/shared/providers/shell/WorkspaceWriteRefusedToastListener.js +23 -0
  19. package/dist/shared/providers/shell/authProvider/identityChange.d.ts +26 -0
  20. package/dist/shared/providers/shell/authProvider/identityChange.js +11 -0
  21. package/dist/shared/providers/shell/authProvider/useAuthActions.d.ts +4 -1
  22. package/dist/shared/providers/shell/authProvider/useAuthActions.js +105 -92
  23. package/dist/shared/providers/shell/authProvider/useBridgeInitialization.d.ts +27 -1
  24. package/dist/shared/providers/shell/authProvider/useBridgeInitialization.js +82 -62
  25. package/dist/shared/providers/shell/authProvider/useRemoteSLO.d.ts +4 -1
  26. package/dist/shared/providers/shell/authProvider/useRemoteSLO.js +16 -14
  27. package/dist/shared/providers/shell/authProvider/useStorageSync.d.ts +4 -1
  28. package/dist/shared/providers/shell/authProvider/useStorageSync.js +19 -14
  29. package/dist/shared/providers/shell/contextSwitchCache.d.ts +4 -0
  30. package/dist/shared/providers/shell/contextSwitchCache.js +17 -0
  31. package/dist/shared/providers/shell/identityQueryReset.d.ts +17 -0
  32. package/dist/shared/providers/shell/identityQueryReset.js +21 -0
  33. package/dist/shared/providers/shell/identityScopedQueryReset.d.ts +16 -0
  34. package/dist/shared/providers/shell/identityScopedQueryReset.js +30 -0
  35. package/dist/shared/providers/shell/index.d.ts +1 -1
  36. package/dist/shared-events.js +29 -29
  37. package/dist/shared-graphql.js +11 -10
  38. package/dist/shared.js +129 -128
  39. package/package.json +2 -2
@@ -1,35 +1,40 @@
1
1
  import { PROFILE_STORAGE_CHANGE_EVENT as e, getProfileTokens as t, getProfileUser as n, getProfileWorkspaceToken as r, resolveActiveProfileId as i } from "../ProfileStorageManager.js";
2
- import { useCallback as a, useEffect as o } from "react";
2
+ import { SIGNED_OUT as a } from "./identityChange.js";
3
+ import { useCallback as o, useEffect as s } from "react";
3
4
  //#region src/shared/providers/shell/authProvider/useStorageSync.ts
4
- function s({ user: s, tokens: c, workspaceToken: l, activeId: u, setUser: d, setTokens: f, setWorkspaceTokenLocal: p, setActiveId: m, clearAccounts: h, refreshAccounts: g }) {
5
- let _ = a(() => {
5
+ function c({ user: c, tokens: l, workspaceToken: u, activeId: d, setUser: f, setTokens: p, setWorkspaceTokenLocal: m, setActiveId: h, clearAccounts: g, refreshAccounts: _, announceIdentityChange: v }) {
6
+ let y = o(() => {
6
7
  let e = i();
7
8
  if (!e) {
8
- (s || c) && (d(null), f(null), p(null), m(null), h());
9
+ (c || l) && (v("storage-sync", a), f(null), p(null), m(null), h(null), g());
9
10
  return;
10
11
  }
11
- let a = t(e), o = r(e), _ = n(e);
12
- e !== u && m(e), a?.accessToken !== c?.accessToken && f(a), o !== l && p(o), _ && _.id !== s?.id && d(_), g();
12
+ let o = t(e), s = r(e), y = n(e);
13
+ v("storage-sync", {
14
+ profileId: e,
15
+ userId: y ? y.id : c?.id ?? null
16
+ }), e !== d && h(e), o?.accessToken !== l?.accessToken && p(o), s !== u && m(s), y && y.id !== c?.id && f(y), _();
13
17
  }, [
14
- c,
15
- s,
16
18
  l,
19
+ c,
17
20
  u,
18
- g,
19
21
  d,
22
+ _,
20
23
  f,
21
24
  p,
22
25
  m,
23
- h
26
+ h,
27
+ g,
28
+ v
24
29
  ]);
25
- o(() => {
26
- let t = () => _();
30
+ s(() => {
31
+ let t = () => y();
27
32
  window.addEventListener(e, t), window.addEventListener("storage", t);
28
33
  let n = setInterval(t, 1e4);
29
34
  return () => {
30
35
  window.removeEventListener(e, t), window.removeEventListener("storage", t), clearInterval(n);
31
36
  };
32
- }, [_]);
37
+ }, [y]);
33
38
  }
34
39
  //#endregion
35
- export { s as useStorageSync };
40
+ export { c as useStorageSync };
@@ -0,0 +1,4 @@
1
+ import { ApolloClient } from '@apollo/client/core';
2
+ import { WorkspaceOperationGuardMode } from '../../graphql/workspaceOperationGuard';
3
+ export declare function evictForContextChange(client: Pick<ApolloClient, 'cache'>, guard: WorkspaceOperationGuardMode): void;
4
+ export declare function refetchForContextChange(client: Pick<ApolloClient, 'refetchQueries'>, guard: WorkspaceOperationGuardMode, activeWorkspaceId: () => string | null): Promise<void>;
@@ -0,0 +1,17 @@
1
+ import { refetchActiveQueries as e } from "../../graphql/workspaceOperationGuard.js";
2
+ //#region src/shared/providers/shell/contextSwitchCache.ts
3
+ function t(e, t) {
4
+ try {
5
+ e.cache.evict(t === "enforce" ? {
6
+ id: "ROOT_QUERY",
7
+ broadcast: !1
8
+ } : { id: "ROOT_QUERY" }), e.cache.gc();
9
+ } catch {}
10
+ }
11
+ async function n(t, n, r) {
12
+ try {
13
+ await e(t, n, r);
14
+ } catch {}
15
+ }
16
+ //#endregion
17
+ export { t as evictForContextChange, n as refetchForContextChange };
@@ -0,0 +1,17 @@
1
+ import { RefObject } from 'react';
2
+ import { QueryClient } from '@tanstack/react-query';
3
+ /**
4
+ * Drop every cached result before the account changes. A query no screen
5
+ * observes is removed. A query a mounted screen observes is reset to its
6
+ * initial state instead, which tells that screen its data is gone (a removed
7
+ * query would leave the screen holding the previous account's rows). Nothing is
8
+ * refetched here; in-flight fetches are cancelled silently (no error toast).
9
+ */
10
+ export declare function emptyQueryClientForIdentityChange(queryClient: QueryClient): void;
11
+ export interface IdentityQueryReset {
12
+ /** Pass to `AuthProvider` as `onBeforeIdentityChange`. */
13
+ onBeforeIdentityChange: () => void;
14
+ /** Counts announcements; pass to `IdentityScopedQueryReset`. */
15
+ announcementsRef: RefObject<number>;
16
+ }
17
+ export declare function useIdentityQueryReset(queryClient: QueryClient): IdentityQueryReset;
@@ -0,0 +1,21 @@
1
+ import { useCallback as e, useMemo as t, useRef as n } from "react";
2
+ import { notifyManager as r } from "@tanstack/react-query";
3
+ //#region src/shared/providers/shell/identityQueryReset.ts
4
+ function i(e) {
5
+ e.cancelQueries();
6
+ let t = e.getQueryCache();
7
+ r.batch(() => {
8
+ for (let e of t.getAll()) e.getObserversCount() > 0 ? e.reset() : t.remove(e);
9
+ }), e.getMutationCache().clear();
10
+ }
11
+ function a(r) {
12
+ let a = n(0), o = e(() => {
13
+ a.current += 1, i(r);
14
+ }, [r]);
15
+ return t(() => ({
16
+ onBeforeIdentityChange: o,
17
+ announcementsRef: a
18
+ }), [o]);
19
+ }
20
+ //#endregion
21
+ export { i as emptyQueryClientForIdentityChange, a as useIdentityQueryReset };
@@ -0,0 +1,16 @@
1
+ import { RefObject } from 'react';
2
+ /**
3
+ * Mount inside `AuthProvider`, under the same `QueryClientProvider`, before the
4
+ * app's screens. After each commit:
5
+ * - an announcement came since the last commit: the cache was emptied for the
6
+ * account now committed, so the screens still mounted are refetched;
7
+ * - the account changed with no announcement (a missed path): every query is
8
+ * reset, which drops its data, tells mounted screens, and refetches the
9
+ * active ones under the account now signed in.
10
+ * Signed out, nothing is refetched: there is no account to fetch for, and a
11
+ * screen still mounted in that commit would only send a request with no
12
+ * credentials. Emptying the cache is enough.
13
+ */
14
+ export declare function IdentityScopedQueryReset({ announcementsRef, }: {
15
+ announcementsRef: RefObject<number>;
16
+ }): null;
@@ -0,0 +1,30 @@
1
+ import { SIGNED_OUT_IDENTITY_KEY as e, identityKeyOf as t } from "./authProvider/identityChange.js";
2
+ import { useAuth as n } from "./AuthProvider.js";
3
+ import { emptyQueryClientForIdentityChange as r } from "./identityQueryReset.js";
4
+ import { useLayoutEffect as i, useRef as a } from "react";
5
+ import { useQueryClient as o } from "@tanstack/react-query";
6
+ //#region src/shared/providers/shell/identityScopedQueryReset.tsx
7
+ function s({ announcementsRef: s }) {
8
+ let { activeProfileId: c, user: l } = n(), u = o(), d = t(c, l?.id), f = a(null);
9
+ return i(() => {
10
+ let t = f.current, n = s.current;
11
+ if (f.current = {
12
+ identityKey: d,
13
+ announcements: n
14
+ }, !t) return;
15
+ let i = d === e;
16
+ if (t.announcements !== n) {
17
+ i || u.refetchQueries({ type: "active" });
18
+ return;
19
+ }
20
+ if (t.identityKey !== d) {
21
+ if (i) {
22
+ r(u);
23
+ return;
24
+ }
25
+ u.cancelQueries(), u.resetQueries();
26
+ }
27
+ }), null;
28
+ }
29
+ //#endregion
30
+ export { s as IdentityScopedQueryReset };
@@ -5,7 +5,7 @@ export type { Locale, TranslationDictionary, I18nContextValue, I18nProviderProps
5
5
  export { useShellLabel } from './useShellLabel';
6
6
  export type { ShellLabel } from './useShellLabel';
7
7
  export { AuthProvider, useAuth } from './AuthProvider';
8
- export type { User, AuthTokens, Account, AuthContextValue, AuthProviderProps, } from './AuthProvider';
8
+ export type { User, AuthTokens, Account, AuthContextValue, AuthProviderProps, IdentityChangeReason, } from './AuthProvider';
9
9
  export { AuthBridgeClient, initAuthBridge, getAuthBridge, destroyAuthBridge, isAuthBridgeInitialized, } from './AuthBridgeClient';
10
10
  export type { BridgeAuthState, BridgeMessage, AuthBridgeListener, AuthBridgeClientOptions, } from './AuthBridgeClient';
11
11
  export * as ProfileStorage from './ProfileStorageManager';
@@ -4,13 +4,13 @@ import { DevtoolsSink as n } from "./shared/events/sinks/DevtoolsSink.js";
4
4
  import { BroadcastChannelSink as r } from "./shared/events/sinks/BroadcastChannelSink.js";
5
5
  import { BackendAuditSink as i } from "./shared/events/sinks/BackendAuditSink.js";
6
6
  import { compileRybbitRoutePattern as a, isRybbitSkippedRoute as o } from "./shared/events/sinks/rybbitRoutes.js";
7
- import { AnalyticsConsentBanner as s, RybbitSink as c, readAnalyticsConsent as l, readAnalyticsConsentChoice as u, setAnalyticsConsent as d } from "./shared/events/sinks/RybbitSink.js";
8
- import { OtelBrowserSink as f } from "./shared/events/sinks/OtelBrowserSink.js";
7
+ import { AnalyticsConsentBanner as s, CONSENT_BANNER_OFFSET_VAR as c, RybbitSink as l, publishConsentBannerOffset as u, readAnalyticsConsent as d, readAnalyticsConsentChoice as f, setAnalyticsConsent as p } from "./shared/events/sinks/RybbitSink.js";
8
+ import { OtelBrowserSink as m } from "./shared/events/sinks/OtelBrowserSink.js";
9
9
  import "./shared/events/sinks/index.js";
10
- import { createContext as p, use as m, useCallback as h, useEffect as g, useMemo as _ } from "react";
11
- import { jsx as v } from "react/jsx-runtime";
10
+ import { createContext as h, use as g, useCallback as _, useEffect as v, useMemo as y } from "react";
11
+ import { jsx as b } from "react/jsx-runtime";
12
12
  //#region src/shared/events/index.tsx
13
- var y = p({
13
+ var x = h({
14
14
  emit: () => {},
15
15
  emitCustom: () => {},
16
16
  on: () => () => {},
@@ -18,22 +18,22 @@ var y = p({
18
18
  getBuffer: () => [],
19
19
  onAny: () => () => {}
20
20
  });
21
- function b(e, t) {
22
- if (!e) return x();
21
+ function S(e, t) {
22
+ if (!e) return C();
23
23
  let n = e.getItem(t);
24
24
  if (n) return n;
25
- let r = x();
25
+ let r = C();
26
26
  return e.setItem(t, r), r;
27
27
  }
28
- function x() {
28
+ function C() {
29
29
  return typeof crypto < "u" && "randomUUID" in crypto ? crypto.randomUUID() : `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;
30
30
  }
31
- function S() {
31
+ function w() {
32
32
  if (typeof document > "u") return "light";
33
33
  let e = document.documentElement;
34
34
  return e.classList.contains("hc") || e.dataset.theme === "hc" ? "hc" : e.classList.contains("dark") || e.dataset.theme === "dark" ? "dark" : "light";
35
35
  }
36
- function C(t, n, r) {
36
+ function T(t, n, r) {
37
37
  let i = typeof window < "u" ? window.location : void 0, a = e(), o = typeof navigator < "u" ? navigator : {
38
38
  userAgent: "",
39
39
  language: "en"
@@ -43,11 +43,11 @@ function C(t, n, r) {
43
43
  pathname: i?.pathname ?? "",
44
44
  search: i?.search ?? ""
45
45
  },
46
- sessionId: b(typeof sessionStorage < "u" ? sessionStorage : void 0, "bf-event-session-id"),
47
- deviceId: b(typeof localStorage < "u" ? localStorage : void 0, "bf-event-device-id"),
46
+ sessionId: S(typeof sessionStorage < "u" ? sessionStorage : void 0, "bf-event-session-id"),
47
+ deviceId: S(typeof localStorage < "u" ? localStorage : void 0, "bf-event-device-id"),
48
48
  userAgent: o.userAgent,
49
49
  locale: o.language || "en",
50
- theme: S(),
50
+ theme: w(),
51
51
  app: {
52
52
  name: t,
53
53
  version: n,
@@ -57,8 +57,8 @@ function C(t, n, r) {
57
57
  spanId: a.spanId
58
58
  };
59
59
  }
60
- function w({ appName: e, appVersion: t = "0.0.0", appEnv: n = "dev", sourceMfe: r = e, children: i }) {
61
- let a = _(() => T({
60
+ function E({ appName: e, appVersion: t = "0.0.0", appEnv: n = "dev", sourceMfe: r = e, children: i }) {
61
+ let a = y(() => D({
62
62
  appName: e,
63
63
  appVersion: t,
64
64
  appEnv: n,
@@ -69,16 +69,16 @@ function w({ appName: e, appVersion: t = "0.0.0", appEnv: n = "dev", sourceMfe:
69
69
  t,
70
70
  r
71
71
  ]);
72
- return /* @__PURE__ */ v(y.Provider, {
72
+ return /* @__PURE__ */ b(x.Provider, {
73
73
  value: a,
74
74
  children: i
75
75
  });
76
76
  }
77
- function T({ appName: e, appVersion: t = "0.0.0", appEnv: n = "dev", sourceMfe: r = e }) {
77
+ function D({ appName: e, appVersion: t = "0.0.0", appEnv: n = "dev", sourceMfe: r = e }) {
78
78
  let i = /* @__PURE__ */ new Map(), a = /* @__PURE__ */ new Set(), o = [];
79
79
  function s(i, a, o) {
80
80
  return {
81
- id: x(),
81
+ id: C(),
82
82
  name: i,
83
83
  version: 1,
84
84
  source: {
@@ -88,7 +88,7 @@ function T({ appName: e, appVersion: t = "0.0.0", appEnv: n = "dev", sourceMfe:
88
88
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
89
89
  monotonic: performance.now(),
90
90
  payload: a,
91
- metadata: C(e, t, n)
91
+ metadata: T(e, t, n)
92
92
  };
93
93
  }
94
94
  function c(e) {
@@ -123,24 +123,24 @@ function T({ appName: e, appVersion: t = "0.0.0", appEnv: n = "dev", sourceMfe:
123
123
  }
124
124
  };
125
125
  }
126
- function E() {
127
- return m(y);
126
+ function O() {
127
+ return g(x);
128
128
  }
129
- function D(e, t) {
130
- let n = E();
131
- g(() => n.on(e, t), [
129
+ function k(e, t) {
130
+ let n = O();
131
+ v(() => n.on(e, t), [
132
132
  n,
133
133
  t,
134
134
  e
135
135
  ]);
136
136
  }
137
- function O(e, t) {
138
- let n = E();
139
- return h((r) => n.emit(e, r, t), [
137
+ function A(e, t) {
138
+ let n = O();
139
+ return _((r) => n.emit(e, r, t), [
140
140
  n,
141
141
  e,
142
142
  t
143
143
  ]);
144
144
  }
145
145
  //#endregion
146
- export { s as AnalyticsConsentBanner, i as BackendAuditSink, r as BroadcastChannelSink, n as DevtoolsSink, w as EventBusProvider, t as FLUIDGRIDS_RYBBIT_EVENTS, f as OtelBrowserSink, c as RybbitSink, a as compileRybbitRoutePattern, T as createEventBus, o as isRybbitSkippedRoute, l as readAnalyticsConsent, u as readAnalyticsConsentChoice, d as setAnalyticsConsent, D as useEvent, E as useEventBus, O as useEventEmitter };
146
+ export { s as AnalyticsConsentBanner, i as BackendAuditSink, r as BroadcastChannelSink, c as CONSENT_BANNER_OFFSET_VAR, n as DevtoolsSink, E as EventBusProvider, t as FLUIDGRIDS_RYBBIT_EVENTS, m as OtelBrowserSink, l as RybbitSink, a as compileRybbitRoutePattern, D as createEventBus, o as isRybbitSkippedRoute, u as publishConsentBannerOffset, d as readAnalyticsConsent, f as readAnalyticsConsentChoice, p as setAnalyticsConsent, k as useEvent, O as useEventBus, A as useEventEmitter };
@@ -1,11 +1,12 @@
1
1
  import { getWorkspaceTokenPayload as e, isWorkspaceTokenValidForContext as t } from "./shared/graphql/workspaceToken.js";
2
- import { clearGraphqlFetchResponseCache as n, getStoredAuthToken as r, getStoredLocale as i, getStoredOrganizationId as a, getStoredProjectId as o, getStoredWorkspaceId as s, getStoredWorkspaceToken as c, graphqlFetch as l, resolveGatewayUrl as u } from "./shared/graphql/fetch.js";
3
- import { SSELink as d } from "./shared/graphql/links/sse-link.js";
4
- import { createGraphQLClient as f, getGlobalClient as p, getWorkspaceClient as m, initializeAppClients as h, resetAppClients as g } from "./shared/graphql/client.js";
5
- import { GatewayProvider as _, useGateway as v, useGatewayClient as y, useSafeGateway as b, useSafeGatewayClient as x } from "./shared/graphql/GatewayContext.js";
6
- import { useHasAuthToken as S } from "./shared/graphql/useHasAuthToken.js";
7
- import { WsLink as C } from "./shared/graphql/links/ws-link.js";
8
- import { prepareWorkspaceRequest as w } from "./shared/graphql/prepareWorkspaceRequest.js";
9
- import { ApolloClient as T, InMemoryCache as E, gql as D } from "@apollo/client/core";
10
- import { ApolloProvider as O, useApolloClient as k, useLazyQuery as A, useMutation as j, useQuery as M, useSubscription as N } from "@apollo/client/react";
11
- export { T as ApolloClient, O as ApolloProvider, _ as GatewayProvider, E as InMemoryCache, d as SSELink, C as WsLink, n as clearGraphqlFetchResponseCache, f as createGraphQLClient, p as getGlobalClient, r as getStoredAuthToken, i as getStoredLocale, a as getStoredOrganizationId, o as getStoredProjectId, s as getStoredWorkspaceId, c as getStoredWorkspaceToken, m as getWorkspaceClient, e as getWorkspaceTokenPayload, D as gql, l as graphqlFetch, h as initializeAppClients, t as isWorkspaceTokenValidForContext, w as prepareWorkspaceRequest, g as resetAppClients, u as resolveGatewayUrl, k as useApolloClient, v as useGateway, y as useGatewayClient, S as useHasAuthToken, A as useLazyQuery, j as useMutation, M as useQuery, b as useSafeGateway, x as useSafeGatewayClient, N as useSubscription };
2
+ import { WORKSPACE_CONTEXT_CHANGED as n, WORKSPACE_CONTEXT_MISMATCH_EVENT as r, WORKSPACE_WRITE_REFUSED_EVENT as i, WORKSPACE_WRITE_REFUSED_MESSAGE as a, WorkspaceContextChangedError as o, isWorkspaceContextChangedError as s, readContextInputWorkspaceId as c } from "./shared/graphql/workspaceOperationGuard.js";
3
+ import { clearGraphqlFetchResponseCache as l, getStoredAuthToken as u, getStoredLocale as d, getStoredOrganizationId as f, getStoredProjectId as p, getStoredWorkspaceId as m, getStoredWorkspaceToken as h, graphqlFetch as g, resolveGatewayUrl as _ } from "./shared/graphql/fetch.js";
4
+ import { SSELink as v } from "./shared/graphql/links/sse-link.js";
5
+ import { createGraphQLClient as y, getGlobalClient as b, getWorkspaceClient as x, initializeAppClients as S, resetAppClients as C } from "./shared/graphql/client.js";
6
+ import { GatewayProvider as w, useGateway as T, useGatewayClient as E, useSafeGateway as D, useSafeGatewayClient as O } from "./shared/graphql/GatewayContext.js";
7
+ import { useHasAuthToken as k } from "./shared/graphql/useHasAuthToken.js";
8
+ import { WsLink as A } from "./shared/graphql/links/ws-link.js";
9
+ import { prepareWorkspaceRequest as j } from "./shared/graphql/prepareWorkspaceRequest.js";
10
+ import { ApolloClient as M, InMemoryCache as N, gql as P } from "@apollo/client/core";
11
+ import { ApolloProvider as F, useApolloClient as I, useLazyQuery as L, useMutation as R, useQuery as z, useSubscription as B } from "@apollo/client/react";
12
+ export { M as ApolloClient, F as ApolloProvider, w as GatewayProvider, N as InMemoryCache, v as SSELink, n as WORKSPACE_CONTEXT_CHANGED, r as WORKSPACE_CONTEXT_MISMATCH_EVENT, i as WORKSPACE_WRITE_REFUSED_EVENT, a as WORKSPACE_WRITE_REFUSED_MESSAGE, o as WorkspaceContextChangedError, A as WsLink, l as clearGraphqlFetchResponseCache, y as createGraphQLClient, b as getGlobalClient, u as getStoredAuthToken, d as getStoredLocale, f as getStoredOrganizationId, p as getStoredProjectId, m as getStoredWorkspaceId, h as getStoredWorkspaceToken, x as getWorkspaceClient, e as getWorkspaceTokenPayload, P as gql, g as graphqlFetch, S as initializeAppClients, s as isWorkspaceContextChangedError, t as isWorkspaceTokenValidForContext, j as prepareWorkspaceRequest, c as readContextInputWorkspaceId, C as resetAppClients, _ as resolveGatewayUrl, I as useApolloClient, T as useGateway, E as useGatewayClient, k as useHasAuthToken, L as useLazyQuery, R as useMutation, z as useQuery, D as useSafeGateway, O as useSafeGatewayClient, B as useSubscription };