@burdenoff/microfe-comradecircle 2026.720.3 → 2026.730.1
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/comradecircle/hooks/useComSubscription.d.ts +18 -0
- package/dist/comradecircle/hooks/useComSubscription.d.ts.map +1 -0
- package/dist/comradecircle/hooks/useComSubscription.js +110 -0
- package/dist/comradecircle/hooks/useComSubscription.js.map +1 -0
- package/dist/comradecircle/hooks/useComradeCircleApi.d.ts +23 -0
- package/dist/comradecircle/hooks/useComradeCircleApi.d.ts.map +1 -1
- package/dist/comradecircle/hooks/useComradeCircleApi.js +148 -99
- package/dist/comradecircle/hooks/useComradeCircleApi.js.map +1 -1
- package/dist/comradecircle/pages/circles/CircleDetailPage.d.ts.map +1 -1
- package/dist/comradecircle/pages/circles/CircleDetailPage.js +268 -266
- package/dist/comradecircle/pages/circles/CircleDetailPage.js.map +1 -1
- package/dist/comradecircle/pages/events/EventDetailPage.d.ts.map +1 -1
- package/dist/comradecircle/pages/events/EventDetailPage.js +84 -82
- package/dist/comradecircle/pages/events/EventDetailPage.js.map +1 -1
- package/dist/comradecircle/pages/posts/PostThreadPage.d.ts.map +1 -1
- package/dist/comradecircle/pages/posts/PostThreadPage.js +26 -24
- package/dist/comradecircle/pages/posts/PostThreadPage.js.map +1 -1
- package/dist/comradecircle/utils/shellBridge.d.ts +45 -0
- package/dist/comradecircle/utils/shellBridge.d.ts.map +1 -0
- package/dist/comradecircle/utils/shellBridge.js +19 -0
- package/dist/comradecircle/utils/shellBridge.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface UseComSubscriptionArgs<TData> {
|
|
2
|
+
/** GraphQL subscription document (string SDL). */
|
|
3
|
+
query: string;
|
|
4
|
+
/** Variables for the subscription. */
|
|
5
|
+
variables?: Record<string, unknown>;
|
|
6
|
+
/** Stable identifier for this subscription, used in error context. */
|
|
7
|
+
operationName: string;
|
|
8
|
+
/** Called for each payload received from the subscription. */
|
|
9
|
+
onData: (data: TData) => void;
|
|
10
|
+
/** Polling fallback invoked when subscription is unavailable / failed. */
|
|
11
|
+
pollFn: () => Promise<void> | void;
|
|
12
|
+
/** Polling interval in ms (default 15s). */
|
|
13
|
+
pollIntervalMs?: number;
|
|
14
|
+
/** Whether to enable the hook at all. */
|
|
15
|
+
enabled?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare function useComSubscription<TData = unknown>({ query, variables, operationName, onData, pollFn, pollIntervalMs, enabled, }: UseComSubscriptionArgs<TData>): void;
|
|
18
|
+
//# sourceMappingURL=useComSubscription.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useComSubscription.d.ts","sourceRoot":"","sources":["../../../src/comradecircle/hooks/useComSubscription.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,sBAAsB,CAAC,KAAK;IAC3C,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,sEAAsE;IACtE,aAAa,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,MAAM,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC;IAC9B,0EAA0E;IAC1E,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACnC,4CAA4C;IAC5C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yCAAyC;IACzC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAmBD,wBAAgB,kBAAkB,CAAC,KAAK,GAAG,OAAO,EAAE,EAClD,KAAK,EACL,SAAS,EACT,aAAa,EACb,MAAM,EACN,MAAM,EACN,cAAuB,EACvB,OAAc,GACf,EAAE,sBAAsB,CAAC,KAAK,CAAC,GAAG,IAAI,CAiHtC"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { getGraphqlWsClient as e, reportShellError as t } from "../utils/shellBridge.js";
|
|
2
|
+
import { useEffect as n, useMemo as r, useRef as i } from "react";
|
|
3
|
+
//#region src/comradecircle/hooks/useComSubscription.ts
|
|
4
|
+
function a(e) {
|
|
5
|
+
let t = (e instanceof Error ? e.message : typeof e == "string" ? e : e?.message ?? "").toLowerCase();
|
|
6
|
+
return t.includes("cannot query field") || t.includes("unknown field") || t.includes("subscription not supported") || t.includes("not implemented");
|
|
7
|
+
}
|
|
8
|
+
function o({ query: o, variables: s, operationName: c, onData: l, pollFn: u, pollIntervalMs: d = 15e3, enabled: f = !0 }) {
|
|
9
|
+
let p = i(l), m = i(u), h = i(s);
|
|
10
|
+
n(() => {
|
|
11
|
+
p.current = l, m.current = u, h.current = s;
|
|
12
|
+
}, [
|
|
13
|
+
l,
|
|
14
|
+
u,
|
|
15
|
+
s
|
|
16
|
+
]), n(() => {
|
|
17
|
+
if (!f) return;
|
|
18
|
+
let n = e(), r = null, i = null, s = !1, l = () => {
|
|
19
|
+
r ||= (Promise.resolve(m.current()).catch(() => {}), setInterval(() => {
|
|
20
|
+
s || Promise.resolve(m.current()).catch(() => {});
|
|
21
|
+
}, d));
|
|
22
|
+
};
|
|
23
|
+
if (!n) return l(), () => {
|
|
24
|
+
s = !0, r && clearInterval(r);
|
|
25
|
+
};
|
|
26
|
+
try {
|
|
27
|
+
i = n.subscribe({
|
|
28
|
+
query: o,
|
|
29
|
+
variables: h.current,
|
|
30
|
+
operationName: c
|
|
31
|
+
}, {
|
|
32
|
+
next: (e) => {
|
|
33
|
+
if (!s) {
|
|
34
|
+
if (e?.errors && e.errors.length > 0) {
|
|
35
|
+
if (e.errors.some(a)) {
|
|
36
|
+
if (i) {
|
|
37
|
+
try {
|
|
38
|
+
i();
|
|
39
|
+
} catch {}
|
|
40
|
+
i = null;
|
|
41
|
+
}
|
|
42
|
+
l();
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
t(/* @__PURE__ */ Error(`Subscription ${c} returned errors`), {
|
|
46
|
+
module: "comradecircle",
|
|
47
|
+
context: {
|
|
48
|
+
operationName: c,
|
|
49
|
+
errors: e.errors
|
|
50
|
+
}
|
|
51
|
+
}, `[comradecircle] subscription ${c} errors`);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (e?.data) try {
|
|
55
|
+
p.current(e.data);
|
|
56
|
+
} catch (e) {
|
|
57
|
+
t(e, {
|
|
58
|
+
module: "comradecircle",
|
|
59
|
+
context: {
|
|
60
|
+
operationName: c,
|
|
61
|
+
phase: "handler"
|
|
62
|
+
}
|
|
63
|
+
}, `[comradecircle] subscription ${c} handler threw`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
error: (e) => {
|
|
68
|
+
if (a(e)) {
|
|
69
|
+
l();
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
t(e, {
|
|
73
|
+
module: "comradecircle",
|
|
74
|
+
context: {
|
|
75
|
+
operationName: c,
|
|
76
|
+
phase: "transport"
|
|
77
|
+
}
|
|
78
|
+
}, `[comradecircle] subscription ${c} transport error`), l();
|
|
79
|
+
},
|
|
80
|
+
complete: () => {
|
|
81
|
+
s || l();
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
} catch (e) {
|
|
85
|
+
t(e, {
|
|
86
|
+
module: "comradecircle",
|
|
87
|
+
context: {
|
|
88
|
+
operationName: c,
|
|
89
|
+
phase: "subscribe"
|
|
90
|
+
}
|
|
91
|
+
}, `[comradecircle] subscription ${c} subscribe threw`), l();
|
|
92
|
+
}
|
|
93
|
+
return () => {
|
|
94
|
+
if (s = !0, i) try {
|
|
95
|
+
i();
|
|
96
|
+
} catch {}
|
|
97
|
+
r && clearInterval(r);
|
|
98
|
+
};
|
|
99
|
+
}, [
|
|
100
|
+
f,
|
|
101
|
+
o,
|
|
102
|
+
c,
|
|
103
|
+
r(() => JSON.stringify(s ?? {}), [s]),
|
|
104
|
+
d
|
|
105
|
+
]);
|
|
106
|
+
}
|
|
107
|
+
//#endregion
|
|
108
|
+
export { o as useComSubscription };
|
|
109
|
+
|
|
110
|
+
//# sourceMappingURL=useComSubscription.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useComSubscription.js","names":[],"sources":["../../../src/comradecircle/hooks/useComSubscription.ts"],"sourcesContent":["/**\n * useComSubscription (BOFF-4455)\n *\n * Defensive subscription wrapper for the ComradeCircle live surfaces\n * (`comPostAdded`, `comCommentAdded`, `comEventUpdated`, `comEventRsvpAdded`).\n * Probes the shell-provided graphql-ws client\n * (`globalThis.__burdenoffShell.graphqlWsClient`); if present, opens a\n * subscription over the real WS transport and dispatches each payload to\n * `onData`. If absent — or if the subscription errors with a clear\n * \"unknown field\"/\"not implemented\" signal (the operation isn't on the\n * federated gateway yet, e.g. before this ticket's backend deploy has\n * reconciled) — falls back to a polling loop driven by the caller's\n * `pollFn` at `pollIntervalMs`, so the page never breaks, only degrades.\n *\n * Ported from `microfe-channel/src/channel/hooks/useChannelSubscription.ts`\n * (the fleet's reference defensive-subscription pattern), generic type\n * unchanged.\n */\nimport { useEffect, useMemo, useRef } from 'react';\n\nimport { getGraphqlWsClient, reportShellError } from '../utils/shellBridge';\n\nexport interface UseComSubscriptionArgs<TData> {\n /** GraphQL subscription document (string SDL). */\n query: string;\n /** Variables for the subscription. */\n variables?: Record<string, unknown>;\n /** Stable identifier for this subscription, used in error context. */\n operationName: string;\n /** Called for each payload received from the subscription. */\n onData: (data: TData) => void;\n /** Polling fallback invoked when subscription is unavailable / failed. */\n pollFn: () => Promise<void> | void;\n /** Polling interval in ms (default 15s). */\n pollIntervalMs?: number;\n /** Whether to enable the hook at all. */\n enabled?: boolean;\n}\n\n/** Best-effort detector for \"subscription field not found\" errors. */\nfunction isUnknownFieldError(err: unknown): boolean {\n const msg =\n err instanceof Error\n ? err.message\n : typeof err === 'string'\n ? err\n : ((err as { message?: string } | null)?.message ?? '');\n const lower = msg.toLowerCase();\n return (\n lower.includes('cannot query field') ||\n lower.includes('unknown field') ||\n lower.includes('subscription not supported') ||\n lower.includes('not implemented')\n );\n}\n\nexport function useComSubscription<TData = unknown>({\n query,\n variables,\n operationName,\n onData,\n pollFn,\n pollIntervalMs = 15_000,\n enabled = true,\n}: UseComSubscriptionArgs<TData>): void {\n const onDataRef = useRef(onData);\n const pollFnRef = useRef(pollFn);\n const variablesRef = useRef(variables);\n useEffect(() => {\n onDataRef.current = onData;\n pollFnRef.current = pollFn;\n variablesRef.current = variables;\n }, [onData, pollFn, variables]);\n\n const variablesKey = useMemo(() => JSON.stringify(variables ?? {}), [variables]);\n\n useEffect(() => {\n if (!enabled) return;\n\n const wsClient = getGraphqlWsClient();\n let pollTimer: ReturnType<typeof setInterval> | null = null;\n let unsubSub: (() => void) | null = null;\n let cancelled = false;\n\n const startPolling = () => {\n if (pollTimer) return;\n void Promise.resolve(pollFnRef.current()).catch(() => {});\n pollTimer = setInterval(() => {\n if (cancelled) return;\n void Promise.resolve(pollFnRef.current()).catch(() => {});\n }, pollIntervalMs);\n };\n\n if (!wsClient) {\n startPolling();\n return () => {\n cancelled = true;\n if (pollTimer) clearInterval(pollTimer);\n };\n }\n\n try {\n unsubSub = wsClient.subscribe(\n { query, variables: variablesRef.current, operationName },\n {\n next: (msg) => {\n if (cancelled) return;\n if (msg?.errors && msg.errors.length > 0) {\n if (msg.errors.some(isUnknownFieldError)) {\n if (unsubSub) {\n try {\n unsubSub();\n } catch {\n /* noop */\n }\n unsubSub = null;\n }\n startPolling();\n return;\n }\n reportShellError(\n new Error(`Subscription ${operationName} returned errors`),\n { module: 'comradecircle', context: { operationName, errors: msg.errors } },\n `[comradecircle] subscription ${operationName} errors`\n );\n return;\n }\n if (msg?.data) {\n try {\n onDataRef.current(msg.data as TData);\n } catch (handlerErr) {\n reportShellError(\n handlerErr,\n { module: 'comradecircle', context: { operationName, phase: 'handler' } },\n `[comradecircle] subscription ${operationName} handler threw`\n );\n }\n }\n },\n error: (err) => {\n if (isUnknownFieldError(err)) {\n startPolling();\n return;\n }\n reportShellError(\n err,\n { module: 'comradecircle', context: { operationName, phase: 'transport' } },\n `[comradecircle] subscription ${operationName} transport error`\n );\n startPolling();\n },\n complete: () => {\n if (!cancelled) startPolling();\n },\n }\n );\n } catch (err) {\n reportShellError(\n err,\n { module: 'comradecircle', context: { operationName, phase: 'subscribe' } },\n `[comradecircle] subscription ${operationName} subscribe threw`\n );\n startPolling();\n }\n\n return () => {\n cancelled = true;\n if (unsubSub) {\n try {\n unsubSub();\n } catch {\n /* noop */\n }\n }\n if (pollTimer) clearInterval(pollTimer);\n };\n }, [enabled, query, operationName, variablesKey, pollIntervalMs]);\n}\n"],"mappings":";;;AAwCA,SAAS,EAAoB,GAAuB;CAOlD,IAAM,KALJ,aAAe,QACX,EAAI,UACJ,OAAO,KAAQ,WACb,IACE,GAAqC,WAAW,IACxC,YAAY;CAC9B,OACE,EAAM,SAAS,oBAAoB,KACnC,EAAM,SAAS,eAAe,KAC9B,EAAM,SAAS,4BAA4B,KAC3C,EAAM,SAAS,iBAAiB;AAEpC;AAEA,SAAgB,EAAoC,EAClD,UACA,cACA,kBACA,WACA,WACA,oBAAiB,MACjB,aAAU,MAC4B;CACtC,IAAM,IAAY,EAAO,CAAM,GACzB,IAAY,EAAO,CAAM,GACzB,IAAe,EAAO,CAAS;CASrC,AARA,QAAgB;EAGd,AAFA,EAAU,UAAU,GACpB,EAAU,UAAU,GACpB,EAAa,UAAU;CACzB,GAAG;EAAC;EAAQ;EAAQ;CAAS,CAAC,GAI9B,QAAgB;EACd,IAAI,CAAC,GAAS;EAEd,IAAM,IAAW,EAAmB,GAChC,IAAmD,MACnD,IAAgC,MAChC,IAAY,IAEV,UAAqB;GACrB,AAEJ,OADA,QAAa,QAAQ,EAAU,QAAQ,CAAC,EAAE,YAAY,CAAC,CAAC,GAC5C,kBAAkB;IACxB,KACJ,QAAa,QAAQ,EAAU,QAAQ,CAAC,EAAE,YAAY,CAAC,CAAC;GAC1D,GAAG,CAAc;EACnB;EAEA,IAAI,CAAC,GAEH,OADA,EAAa,SACA;GAEX,AADA,IAAY,IACR,KAAW,cAAc,CAAS;EACxC;EAGF,IAAI;GACF,IAAW,EAAS,UAClB;IAAE;IAAO,WAAW,EAAa;IAAS;GAAc,GACxD;IACE,OAAO,MAAQ;KACT,QACJ;UAAI,GAAK,UAAU,EAAI,OAAO,SAAS,GAAG;OACxC,IAAI,EAAI,OAAO,KAAK,CAAmB,GAAG;QACxC,IAAI,GAAU;SACZ,IAAI;UACF,EAAS;SACX,QAAQ,CAER;SACA,IAAW;QACb;QACA,EAAa;QACb;OACF;OACA,EACE,gBAAI,MAAM,gBAAgB,EAAc,iBAAiB,GACzD;QAAE,QAAQ;QAAiB,SAAS;SAAE;SAAe,QAAQ,EAAI;QAAO;OAAE,GAC1E,gCAAgC,EAAc,QAChD;OACA;MACF;MACA,IAAI,GAAK,MACP,IAAI;OACF,EAAU,QAAQ,EAAI,IAAa;MACrC,SAAS,GAAY;OACnB,EACE,GACA;QAAE,QAAQ;QAAiB,SAAS;SAAE;SAAe,OAAO;QAAU;OAAE,GACxE,gCAAgC,EAAc,eAChD;MACF;KAVF;IAYF;IACA,QAAQ,MAAQ;KACd,IAAI,EAAoB,CAAG,GAAG;MAC5B,EAAa;MACb;KACF;KAMA,AALA,EACE,GACA;MAAE,QAAQ;MAAiB,SAAS;OAAE;OAAe,OAAO;MAAY;KAAE,GAC1E,gCAAgC,EAAc,iBAChD,GACA,EAAa;IACf;IACA,gBAAgB;KACd,AAAK,KAAW,EAAa;IAC/B;GACF,CACF;EACF,SAAS,GAAK;GAMZ,AALA,EACE,GACA;IAAE,QAAQ;IAAiB,SAAS;KAAE;KAAe,OAAO;IAAY;GAAE,GAC1E,gCAAgC,EAAc,iBAChD,GACA,EAAa;EACf;EAEA,aAAa;GAEX,IADA,IAAY,IACR,GACF,IAAI;IACF,EAAS;GACX,QAAQ,CAER;GAEF,AAAI,KAAW,cAAc,CAAS;EACxC;CACF,GAAG;EAAC;EAAS;EAAO;EAtGC,QAAc,KAAK,UAAU,KAAa,CAAC,CAAC,GAAG,CAAC,CAAS,CAsG3C;EAAc;CAAc,CAAC;AAClE"}
|
|
@@ -54,6 +54,21 @@ export declare const useComReactToPost: () => import('@tanstack/react-query').Us
|
|
|
54
54
|
postId: string;
|
|
55
55
|
type: ComReactionType;
|
|
56
56
|
}, unknown>;
|
|
57
|
+
/**
|
|
58
|
+
* Live-updating channel feed (BOFF-4455). Subscribes to `comPostAdded` over
|
|
59
|
+
* the shell's graphql-ws transport (falling back to polling — see
|
|
60
|
+
* `useComSubscription`) and invalidates the `useComPosts` cache for this
|
|
61
|
+
* channel whenever a new post arrives or the fallback poll fires, so an open
|
|
62
|
+
* `ChannelFeed` picks up the new post on its next render without the member
|
|
63
|
+
* needing to manually refresh.
|
|
64
|
+
*/
|
|
65
|
+
export declare const useComPostAddedLive: (channelId: string | undefined) => void;
|
|
66
|
+
/**
|
|
67
|
+
* Live-updating post thread (BOFF-4455). Subscribes to `comCommentAdded` for
|
|
68
|
+
* a single post and invalidates the `useComPost` cache (which embeds
|
|
69
|
+
* `comments`) so a thread view live-updates on new comments.
|
|
70
|
+
*/
|
|
71
|
+
export declare const useComCommentAddedLive: (postId: string | undefined) => void;
|
|
57
72
|
export declare const useComComments: (postId: string | undefined) => import('@tanstack/react-query').UseQueryResult<ComComment[], Error>;
|
|
58
73
|
export declare const useComAddComment: () => import('@tanstack/react-query').UseMutationResult<ComComment, Error, ComCreateCommentInput, unknown>;
|
|
59
74
|
export declare const useComMyFollows: (targetType?: ComFollowTargetType) => import('@tanstack/react-query').UseQueryResult<ComFeedFollow[], Error>;
|
|
@@ -70,6 +85,14 @@ export interface EventFilters {
|
|
|
70
85
|
}
|
|
71
86
|
export declare const useComEvents: (filters?: EventFilters) => import('@tanstack/react-query').UseQueryResult<ComConnection<ComEvent>, Error>;
|
|
72
87
|
export declare const useComEvent: (id: string | undefined) => import('@tanstack/react-query').UseQueryResult<ComEvent | null, Error>;
|
|
88
|
+
/**
|
|
89
|
+
* Live-updating event detail (BOFF-4455). Subscribes to both
|
|
90
|
+
* `comEventUpdated` (lifecycle transitions / edits) and `comEventRsvpAdded`
|
|
91
|
+
* (new/changed RSVPs) for a single event and invalidates the `useComEvent`
|
|
92
|
+
* cache on either, so an open event detail page's status badge and live
|
|
93
|
+
* attendee count update without a manual refresh.
|
|
94
|
+
*/
|
|
95
|
+
export declare const useComEventLive: (eventId: string | undefined) => void;
|
|
73
96
|
export declare const useComCreateEvent: () => import('@tanstack/react-query').UseMutationResult<ComEvent, Error, ComCreateEventInput, unknown>;
|
|
74
97
|
export declare const useComUpdateEvent: () => import('@tanstack/react-query').UseMutationResult<ComEvent, Error, {
|
|
75
98
|
id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useComradeCircleApi.d.ts","sourceRoot":"","sources":["../../../src/comradecircle/hooks/useComradeCircleApi.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"useComradeCircleApi.d.ts","sourceRoot":"","sources":["../../../src/comradecircle/hooks/useComradeCircleApi.ts"],"names":[],"mappings":"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"}
|