@takosjp/yurucommu-api 3.3.0 → 3.4.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.
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +310 -0
- package/dist/lib/api/notifications.d.ts.map +1 -1
- package/dist/lib/api/posts.d.ts.map +1 -1
- package/dist/lib/realtime-client.d.ts +37 -0
- package/dist/lib/realtime-client.d.ts.map +1 -0
- package/dist/lib/rtc-client.d.ts.map +1 -1
- package/dist/types/call.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/realtime.d.ts +86 -0
- package/dist/types/realtime.d.ts.map +1 -0
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -460,6 +460,7 @@ async function fetchBookmarks(options) {
|
|
|
460
460
|
params.set("before", options.before);
|
|
461
461
|
const query = params.toString() ? `?${params}` : "";
|
|
462
462
|
const res = await apiFetch(`/api/bookmarks${query}`);
|
|
463
|
+
await assertOk(res, "Failed to load bookmarks");
|
|
463
464
|
const data = await res.json();
|
|
464
465
|
return {
|
|
465
466
|
posts: (data.posts ?? []).map(normalizePost),
|
|
@@ -728,6 +729,7 @@ async function fetchNotifications(options) {
|
|
|
728
729
|
}
|
|
729
730
|
async function fetchUnreadCount() {
|
|
730
731
|
const res = await apiFetch("/api/notifications/unread/count");
|
|
732
|
+
await assertOk(res, "Failed to load unread notification count");
|
|
731
733
|
const data = await res.json();
|
|
732
734
|
return data.count || 0;
|
|
733
735
|
}
|
|
@@ -1751,6 +1753,311 @@ class CallClient {
|
|
|
1751
1753
|
}
|
|
1752
1754
|
}
|
|
1753
1755
|
}
|
|
1756
|
+
// src/types/realtime.ts
|
|
1757
|
+
function parseRealtimeClientFrame(raw) {
|
|
1758
|
+
if (!raw || typeof raw !== "object")
|
|
1759
|
+
return null;
|
|
1760
|
+
const frame = raw;
|
|
1761
|
+
if (frame.t === "ping" || frame.t === "pong")
|
|
1762
|
+
return { t: frame.t };
|
|
1763
|
+
if (frame.t === "hello") {
|
|
1764
|
+
const lastEventId = typeof frame.lastEventId === "number" && Number.isFinite(frame.lastEventId) && frame.lastEventId >= 0 ? Math.floor(frame.lastEventId) : undefined;
|
|
1765
|
+
return { t: "hello", lastEventId };
|
|
1766
|
+
}
|
|
1767
|
+
return null;
|
|
1768
|
+
}
|
|
1769
|
+
function parseRealtimeServerFrame(raw) {
|
|
1770
|
+
if (!raw || typeof raw !== "object")
|
|
1771
|
+
return null;
|
|
1772
|
+
const frame = raw;
|
|
1773
|
+
if (frame.t === "ping" || frame.t === "pong" || frame.t === "resync") {
|
|
1774
|
+
return { t: frame.t };
|
|
1775
|
+
}
|
|
1776
|
+
if (frame.t === "hello_ok" && typeof frame.lastEventId === "number") {
|
|
1777
|
+
return { t: "hello_ok", lastEventId: frame.lastEventId };
|
|
1778
|
+
}
|
|
1779
|
+
if (frame.t === "event" && frame.event && typeof frame.event === "object") {
|
|
1780
|
+
const event = frame.event;
|
|
1781
|
+
if (typeof event.id === "number" && typeof event.type === "string") {
|
|
1782
|
+
return {
|
|
1783
|
+
t: "event",
|
|
1784
|
+
event: {
|
|
1785
|
+
id: event.id,
|
|
1786
|
+
type: event.type,
|
|
1787
|
+
data: event.data && typeof event.data === "object" ? event.data : {}
|
|
1788
|
+
}
|
|
1789
|
+
};
|
|
1790
|
+
}
|
|
1791
|
+
}
|
|
1792
|
+
return null;
|
|
1793
|
+
}
|
|
1794
|
+
|
|
1795
|
+
// src/lib/realtime-client.ts
|
|
1796
|
+
var BACKOFF_BASE_MS = 1000;
|
|
1797
|
+
var BACKOFF_CAP_MS = 30000;
|
|
1798
|
+
var PING_INTERVAL_MS = 25000;
|
|
1799
|
+
var IDLE_TIMEOUT_MS = 60000;
|
|
1800
|
+
function resolveSocketUrl(actorApId, ticket) {
|
|
1801
|
+
if (typeof location === "undefined")
|
|
1802
|
+
return null;
|
|
1803
|
+
const transport = getYurucommuApiTransport();
|
|
1804
|
+
const resolved = transport.resolveUrl("/api/realtime/socket");
|
|
1805
|
+
let url;
|
|
1806
|
+
try {
|
|
1807
|
+
url = new URL(resolved, location.origin);
|
|
1808
|
+
} catch {
|
|
1809
|
+
return null;
|
|
1810
|
+
}
|
|
1811
|
+
url.protocol = url.protocol === "http:" ? "ws:" : "wss:";
|
|
1812
|
+
url.searchParams.set("actor", actorApId);
|
|
1813
|
+
url.searchParams.set("ticket", ticket);
|
|
1814
|
+
return url.toString();
|
|
1815
|
+
}
|
|
1816
|
+
function createRealtimeClient() {
|
|
1817
|
+
const handlers = new Map;
|
|
1818
|
+
const resyncHandlers = new Set;
|
|
1819
|
+
const statusHandlers = new Set;
|
|
1820
|
+
let currentStatus = "idle";
|
|
1821
|
+
let socket = null;
|
|
1822
|
+
let started = false;
|
|
1823
|
+
let attempts = 0;
|
|
1824
|
+
let lastEventId;
|
|
1825
|
+
let lastFrameAt = 0;
|
|
1826
|
+
let pingTimer = null;
|
|
1827
|
+
let reconnectTimer = null;
|
|
1828
|
+
let generation = 0;
|
|
1829
|
+
function setStatus(next) {
|
|
1830
|
+
if (currentStatus === next)
|
|
1831
|
+
return;
|
|
1832
|
+
currentStatus = next;
|
|
1833
|
+
for (const handler of statusHandlers) {
|
|
1834
|
+
try {
|
|
1835
|
+
handler(next);
|
|
1836
|
+
} catch {}
|
|
1837
|
+
}
|
|
1838
|
+
}
|
|
1839
|
+
function dispatch(event) {
|
|
1840
|
+
for (const key of [event.type, "*"]) {
|
|
1841
|
+
const set = handlers.get(key);
|
|
1842
|
+
if (!set)
|
|
1843
|
+
continue;
|
|
1844
|
+
for (const handler of set) {
|
|
1845
|
+
try {
|
|
1846
|
+
handler(event);
|
|
1847
|
+
} catch {}
|
|
1848
|
+
}
|
|
1849
|
+
}
|
|
1850
|
+
}
|
|
1851
|
+
function dispatchResync() {
|
|
1852
|
+
for (const handler of resyncHandlers) {
|
|
1853
|
+
try {
|
|
1854
|
+
handler();
|
|
1855
|
+
} catch {}
|
|
1856
|
+
}
|
|
1857
|
+
}
|
|
1858
|
+
function clearTimers() {
|
|
1859
|
+
if (pingTimer !== null) {
|
|
1860
|
+
clearInterval(pingTimer);
|
|
1861
|
+
pingTimer = null;
|
|
1862
|
+
}
|
|
1863
|
+
if (reconnectTimer !== null) {
|
|
1864
|
+
clearTimeout(reconnectTimer);
|
|
1865
|
+
reconnectTimer = null;
|
|
1866
|
+
}
|
|
1867
|
+
}
|
|
1868
|
+
function closeSocket() {
|
|
1869
|
+
if (!socket)
|
|
1870
|
+
return;
|
|
1871
|
+
const s = socket;
|
|
1872
|
+
socket = null;
|
|
1873
|
+
try {
|
|
1874
|
+
s.close();
|
|
1875
|
+
} catch {}
|
|
1876
|
+
}
|
|
1877
|
+
function scheduleReconnect() {
|
|
1878
|
+
if (!started)
|
|
1879
|
+
return;
|
|
1880
|
+
setStatus("reconnecting");
|
|
1881
|
+
attempts += 1;
|
|
1882
|
+
const backoff = Math.min(BACKOFF_CAP_MS, BACKOFF_BASE_MS * 2 ** Math.min(attempts - 1, 5));
|
|
1883
|
+
const jitter = backoff * (0.5 + Math.random() * 0.5);
|
|
1884
|
+
reconnectTimer = setTimeout(() => {
|
|
1885
|
+
reconnectTimer = null;
|
|
1886
|
+
connect();
|
|
1887
|
+
}, jitter);
|
|
1888
|
+
}
|
|
1889
|
+
async function connect() {
|
|
1890
|
+
if (!started || typeof WebSocket === "undefined")
|
|
1891
|
+
return;
|
|
1892
|
+
const myGeneration = ++generation;
|
|
1893
|
+
setStatus(attempts === 0 ? "connecting" : "reconnecting");
|
|
1894
|
+
let available;
|
|
1895
|
+
try {
|
|
1896
|
+
const res = await apiFetch("/api/realtime/config");
|
|
1897
|
+
if (!res.ok)
|
|
1898
|
+
throw new Error(`config ${res.status}`);
|
|
1899
|
+
const body = await res.json();
|
|
1900
|
+
available = body.available === true;
|
|
1901
|
+
} catch {
|
|
1902
|
+
if (!started || myGeneration !== generation)
|
|
1903
|
+
return;
|
|
1904
|
+
scheduleReconnect();
|
|
1905
|
+
return;
|
|
1906
|
+
}
|
|
1907
|
+
if (!started || myGeneration !== generation)
|
|
1908
|
+
return;
|
|
1909
|
+
if (!available) {
|
|
1910
|
+
setStatus("unavailable");
|
|
1911
|
+
return;
|
|
1912
|
+
}
|
|
1913
|
+
let ticket;
|
|
1914
|
+
let actorApId;
|
|
1915
|
+
try {
|
|
1916
|
+
const res = await apiPost("/api/realtime/ticket");
|
|
1917
|
+
if (res.status === 401) {
|
|
1918
|
+
setStatus("unavailable");
|
|
1919
|
+
return;
|
|
1920
|
+
}
|
|
1921
|
+
if (!res.ok)
|
|
1922
|
+
throw new Error(`ticket ${res.status}`);
|
|
1923
|
+
const body = await res.json();
|
|
1924
|
+
if (!body.ticket || !body.actor_ap_id)
|
|
1925
|
+
throw new Error("bad ticket");
|
|
1926
|
+
ticket = body.ticket;
|
|
1927
|
+
actorApId = body.actor_ap_id;
|
|
1928
|
+
} catch {
|
|
1929
|
+
if (!started || myGeneration !== generation)
|
|
1930
|
+
return;
|
|
1931
|
+
scheduleReconnect();
|
|
1932
|
+
return;
|
|
1933
|
+
}
|
|
1934
|
+
if (!started || myGeneration !== generation)
|
|
1935
|
+
return;
|
|
1936
|
+
const url = resolveSocketUrl(actorApId, ticket);
|
|
1937
|
+
if (!url) {
|
|
1938
|
+
setStatus("unavailable");
|
|
1939
|
+
return;
|
|
1940
|
+
}
|
|
1941
|
+
let ws;
|
|
1942
|
+
try {
|
|
1943
|
+
ws = new WebSocket(url);
|
|
1944
|
+
} catch {
|
|
1945
|
+
scheduleReconnect();
|
|
1946
|
+
return;
|
|
1947
|
+
}
|
|
1948
|
+
socket = ws;
|
|
1949
|
+
lastFrameAt = Date.now();
|
|
1950
|
+
ws.onopen = () => {
|
|
1951
|
+
if (socket !== ws)
|
|
1952
|
+
return;
|
|
1953
|
+
ws.send(JSON.stringify({ t: "hello", lastEventId }));
|
|
1954
|
+
};
|
|
1955
|
+
ws.onmessage = (message) => {
|
|
1956
|
+
if (socket !== ws)
|
|
1957
|
+
return;
|
|
1958
|
+
lastFrameAt = Date.now();
|
|
1959
|
+
let parsed;
|
|
1960
|
+
try {
|
|
1961
|
+
parsed = JSON.parse(String(message.data));
|
|
1962
|
+
} catch {
|
|
1963
|
+
return;
|
|
1964
|
+
}
|
|
1965
|
+
const frame = parseRealtimeServerFrame(parsed);
|
|
1966
|
+
if (!frame)
|
|
1967
|
+
return;
|
|
1968
|
+
switch (frame.t) {
|
|
1969
|
+
case "hello_ok":
|
|
1970
|
+
attempts = 0;
|
|
1971
|
+
if (lastEventId === undefined)
|
|
1972
|
+
lastEventId = frame.lastEventId;
|
|
1973
|
+
else
|
|
1974
|
+
lastEventId = Math.max(lastEventId, frame.lastEventId);
|
|
1975
|
+
setStatus("connected");
|
|
1976
|
+
return;
|
|
1977
|
+
case "event":
|
|
1978
|
+
lastEventId = Math.max(lastEventId ?? 0, frame.event.id);
|
|
1979
|
+
dispatch(frame.event);
|
|
1980
|
+
return;
|
|
1981
|
+
case "resync":
|
|
1982
|
+
dispatchResync();
|
|
1983
|
+
return;
|
|
1984
|
+
case "ping":
|
|
1985
|
+
ws.send(JSON.stringify({ t: "pong" }));
|
|
1986
|
+
return;
|
|
1987
|
+
case "pong":
|
|
1988
|
+
return;
|
|
1989
|
+
}
|
|
1990
|
+
};
|
|
1991
|
+
const onGone = () => {
|
|
1992
|
+
if (socket !== ws)
|
|
1993
|
+
return;
|
|
1994
|
+
socket = null;
|
|
1995
|
+
scheduleReconnect();
|
|
1996
|
+
};
|
|
1997
|
+
ws.onclose = onGone;
|
|
1998
|
+
ws.onerror = onGone;
|
|
1999
|
+
if (pingTimer === null) {
|
|
2000
|
+
pingTimer = setInterval(() => {
|
|
2001
|
+
if (!socket || socket.readyState !== WebSocket.OPEN)
|
|
2002
|
+
return;
|
|
2003
|
+
if (Date.now() - lastFrameAt > IDLE_TIMEOUT_MS) {
|
|
2004
|
+
closeSocket();
|
|
2005
|
+
scheduleReconnect();
|
|
2006
|
+
return;
|
|
2007
|
+
}
|
|
2008
|
+
try {
|
|
2009
|
+
socket.send(JSON.stringify({ t: "ping" }));
|
|
2010
|
+
} catch {}
|
|
2011
|
+
}, PING_INTERVAL_MS);
|
|
2012
|
+
}
|
|
2013
|
+
}
|
|
2014
|
+
return {
|
|
2015
|
+
start() {
|
|
2016
|
+
if (started)
|
|
2017
|
+
return;
|
|
2018
|
+
started = true;
|
|
2019
|
+
attempts = 0;
|
|
2020
|
+
connect();
|
|
2021
|
+
},
|
|
2022
|
+
stop() {
|
|
2023
|
+
started = false;
|
|
2024
|
+
generation += 1;
|
|
2025
|
+
clearTimers();
|
|
2026
|
+
closeSocket();
|
|
2027
|
+
lastEventId = undefined;
|
|
2028
|
+
setStatus("idle");
|
|
2029
|
+
},
|
|
2030
|
+
status() {
|
|
2031
|
+
return currentStatus;
|
|
2032
|
+
},
|
|
2033
|
+
isConnected() {
|
|
2034
|
+
return currentStatus === "connected";
|
|
2035
|
+
},
|
|
2036
|
+
on(type, handler) {
|
|
2037
|
+
let set = handlers.get(type);
|
|
2038
|
+
if (!set) {
|
|
2039
|
+
set = new Set;
|
|
2040
|
+
handlers.set(type, set);
|
|
2041
|
+
}
|
|
2042
|
+
set.add(handler);
|
|
2043
|
+
return () => {
|
|
2044
|
+
set.delete(handler);
|
|
2045
|
+
};
|
|
2046
|
+
},
|
|
2047
|
+
onResync(handler) {
|
|
2048
|
+
resyncHandlers.add(handler);
|
|
2049
|
+
return () => {
|
|
2050
|
+
resyncHandlers.delete(handler);
|
|
2051
|
+
};
|
|
2052
|
+
},
|
|
2053
|
+
onStatus(handler) {
|
|
2054
|
+
statusHandlers.add(handler);
|
|
2055
|
+
return () => {
|
|
2056
|
+
statusHandlers.delete(handler);
|
|
2057
|
+
};
|
|
2058
|
+
}
|
|
2059
|
+
};
|
|
2060
|
+
}
|
|
1754
2061
|
// src/social-server.ts
|
|
1755
2062
|
async function fetchCurrentActor() {
|
|
1756
2063
|
const res = await apiFetch("/api/auth/me");
|
|
@@ -1904,6 +2211,8 @@ export {
|
|
|
1904
2211
|
registerNotificationPusher,
|
|
1905
2212
|
refreshBrowserNotificationPush,
|
|
1906
2213
|
parseRtcSignalEnvelope,
|
|
2214
|
+
parseRealtimeServerFrame,
|
|
2215
|
+
parseRealtimeClientFrame,
|
|
1907
2216
|
normalizeStory,
|
|
1908
2217
|
normalizePost,
|
|
1909
2218
|
normalizeNotification,
|
|
@@ -1978,6 +2287,7 @@ export {
|
|
|
1978
2287
|
deleteCommunityMessage,
|
|
1979
2288
|
deleteAccount,
|
|
1980
2289
|
createStory,
|
|
2290
|
+
createRealtimeClient,
|
|
1981
2291
|
createPost,
|
|
1982
2292
|
createNote,
|
|
1983
2293
|
createCommunityInvite,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../../../src/lib/api/notifications.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,uBAAuB,EACvB,yBAAyB,EACzB,8BAA8B,EAC/B,MAAM,sBAAsB,CAAC;AAI9B,wBAAsB,kBAAkB,CAAC,OAAO,CAAC,EAAE;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,GAAG,OAAO,CAAC;IACV,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,CAAC,CAmBD;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../../../src/lib/api/notifications.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,uBAAuB,EACvB,yBAAyB,EACzB,8BAA8B,EAC/B,MAAM,sBAAsB,CAAC;AAI9B,wBAAsB,kBAAkB,CAAC,OAAO,CAAC,EAAE;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,GAAG,OAAO,CAAC;IACV,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,CAAC,CAmBD;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAKxD;AAED,wBAAsB,qBAAqB,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAGzE;AAED,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAGvE;AAED,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAGzE;AAED,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,MAAM,CAAC,CAK/D;AAED,wBAAsB,0BAA0B,CAAC,KAAK,EAAE;IACtD,OAAO,EAAE,yBAAyB,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,uBAAuB,CAAC;CACjC,GAAG,OAAO,CAAC,8BAA8B,CAAC,CAO1C;AAED,wBAAsB,4BAA4B,CAAC,KAAK,EAAE;IACxD,OAAO,EAAE,yBAAyB,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhB;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7C;AAED,oEAAoE;AACpE,wBAAsB,mCAAmC,IAAI,OAAO,CAAC,8BAA8B,CAAC,CAenG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"posts.d.ts","sourceRoot":"","sources":["../../../src/lib/api/posts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAYjD,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,IAAI,EAAE,CAAC;IAMd,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,wBAAsB,aAAa,CAAC,OAAO,CAAC,EAAE;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,YAAY,CAAC,CAqBxB;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAK3D;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,IAAI,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5B,OAAO,CAAC,WAAW,CAAC,CAiBtB;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE;QACZ,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,EAAE,CAAC;CACL,GAAG,OAAO,CAAC,IAAI,CAAC,CAKhB;AAKD,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAClD,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAOtD;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG5D;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG1D;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG5D;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG5D;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG9D;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG9D;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKhE;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,cAAc,CAAC,OAAO,CAAC,EAAE;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"posts.d.ts","sourceRoot":"","sources":["../../../src/lib/api/posts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAYjD,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,IAAI,EAAE,CAAC;IAMd,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,wBAAsB,aAAa,CAAC,OAAO,CAAC,EAAE;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,YAAY,CAAC,CAqBxB;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAK3D;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,IAAI,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5B,OAAO,CAAC,WAAW,CAAC,CAiBtB;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE;QACZ,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,EAAE,CAAC;CACL,GAAG,OAAO,CAAC,IAAI,CAAC,CAKhB;AAKD,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAClD,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAOtD;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG5D;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG1D;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG5D;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG5D;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG9D;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG9D;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKhE;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,cAAc,CAAC,OAAO,CAAC,EAAE;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,aAAa,CAAC,CAgBzB"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Realtime stream client — the ONE WebSocket a product keeps open per signed-in
|
|
3
|
+
* user. Replaces the short-interval polling loops (talk messages 4s, typing 4s,
|
|
4
|
+
* contacts 20s, unread badges 20-30s): the server pushes `RealtimeEvent`s and
|
|
5
|
+
* the client fans them out to `on(type, handler)` subscribers.
|
|
6
|
+
*
|
|
7
|
+
* Transport: mints a one-time ticket over the normal authenticated fetch path
|
|
8
|
+
* (`POST /api/realtime/ticket` — works with both cookie and bearer transports;
|
|
9
|
+
* the browser WebSocket API cannot send an Authorization header), then connects
|
|
10
|
+
* to `wss://…/api/realtime/socket?actor=…&ticket=…`.
|
|
11
|
+
*
|
|
12
|
+
* Lifecycle: `start()` probes `GET /api/realtime/config`. When the server has
|
|
13
|
+
* no realtime runtime (`available:false` — e.g. a Bun self-host without
|
|
14
|
+
* Durable Objects) the client settles in status "unavailable" and the product
|
|
15
|
+
* enables its LOW-FREQUENCY fallback polling instead. Transient failures
|
|
16
|
+
* (network, worker restart) reconnect with exponential backoff and replay the
|
|
17
|
+
* missed gap via `hello{lastEventId}`; a `resync` answer means the gap
|
|
18
|
+
* outlived the server buffer and subscribers should re-fetch via REST.
|
|
19
|
+
*/
|
|
20
|
+
import type { RealtimeEvent, RealtimeEventType } from "../types/realtime.js";
|
|
21
|
+
export type RealtimeStatus = "idle" | "connecting" | "connected" | "reconnecting" | "unavailable";
|
|
22
|
+
export type RealtimeEventHandler = (event: RealtimeEvent) => void;
|
|
23
|
+
export type RealtimeResyncHandler = () => void;
|
|
24
|
+
export type RealtimeStatusHandler = (status: RealtimeStatus) => void;
|
|
25
|
+
export interface RealtimeClient {
|
|
26
|
+
start(): void;
|
|
27
|
+
stop(): void;
|
|
28
|
+
status(): RealtimeStatus;
|
|
29
|
+
/** True while the live socket is up — products gate fallback polling on it. */
|
|
30
|
+
isConnected(): boolean;
|
|
31
|
+
on(type: RealtimeEventType | "*", handler: RealtimeEventHandler): () => void;
|
|
32
|
+
/** Fired on reconnect gaps the server could not replay: re-fetch via REST. */
|
|
33
|
+
onResync(handler: RealtimeResyncHandler): () => void;
|
|
34
|
+
onStatus(handler: RealtimeStatusHandler): () => void;
|
|
35
|
+
}
|
|
36
|
+
export declare function createRealtimeClient(): RealtimeClient;
|
|
37
|
+
//# sourceMappingURL=realtime-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"realtime-client.d.ts","sourceRoot":"","sources":["../../src/lib/realtime-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG7E,MAAM,MAAM,cAAc,GACxB,MAAM,GAAG,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,aAAa,CAAC;AAEvE,MAAM,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;AAClE,MAAM,MAAM,qBAAqB,GAAG,MAAM,IAAI,CAAC;AAC/C,MAAM,MAAM,qBAAqB,GAAG,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;AAErE,MAAM,WAAW,cAAc;IAC7B,KAAK,IAAI,IAAI,CAAC;IACd,IAAI,IAAI,IAAI,CAAC;IACb,MAAM,IAAI,cAAc,CAAC;IACzB,+EAA+E;IAC/E,WAAW,IAAI,OAAO,CAAC;IACvB,EAAE,CAAC,IAAI,EAAE,iBAAiB,GAAG,GAAG,EAAE,OAAO,EAAE,oBAAoB,GAAG,MAAM,IAAI,CAAC;IAC7E,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,IAAI,CAAC;IACrD,QAAQ,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,IAAI,CAAC;CACtD;AA6BD,wBAAgB,oBAAoB,IAAI,cAAc,CAoQrD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rtc-client.d.ts","sourceRoot":"","sources":["../../src/lib/rtc-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EACV,aAAa,EAId,MAAM,kBAAkB,CAAC;AAE1B,MAAM,MAAM,WAAW,GACnB,MAAM,GACN,SAAS,GACT,UAAU,GACV,YAAY,GACZ,WAAW,GACX,OAAO,CAAC;AAEZ,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,aAAa,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACpC,QAAQ,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC3C,WAAW,EAAE,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IAClD,YAAY,EAAE,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IACnD,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAChC,SAAS,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAClC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACjD;AAED,MAAM,WAAW,iBAAiB;IAChC,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAmBD,qBAAa,UAAU;IAUT,OAAO,CAAC,QAAQ,CAAC,OAAO;IATpC,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,OAAO,CAAO;IACtB,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoD;IAC9E,OAAO,CAAC,IAAI,CAA2B;IACvC,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,KAAK,CAAuB;gBAEP,OAAO,GAAE,iBAAsB;IAG5D,EAAE,CAAC,CAAC,SAAS,MAAM,gBAAgB,EACjC,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAC5B,MAAM,IAAI;IAUb,OAAO,CAAC,IAAI;IASZ,OAAO,CAAC,QAAQ;IAMhB,QAAQ,IAAI,WAAW;IAKvB,OAAO,CAAC,MAAM;IAOd,OAAO,CAAC,SAAS;IAKjB,OAAO,IAAI,IAAI;IAKf,UAAU,IAAI,IAAI;IAQlB,OAAO,CAAC,UAAU;IA4BlB,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,IAAI;IAQZ,2EAA2E;IACrE,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BlE,wCAAwC;IAClC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAc7B,yCAAyC;IACzC,MAAM,CAAC,MAAM,SAAa,GAAG,IAAI;IAOjC,wCAAwC;IACxC,MAAM,CAAC,MAAM,SAAW,GAAG,IAAI;IAO/B,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAO9B,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;YAQ1B,OAAO;IAiDrB,OAAO,CAAC,SAAS;
|
|
1
|
+
{"version":3,"file":"rtc-client.d.ts","sourceRoot":"","sources":["../../src/lib/rtc-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EACV,aAAa,EAId,MAAM,kBAAkB,CAAC;AAE1B,MAAM,MAAM,WAAW,GACnB,MAAM,GACN,SAAS,GACT,UAAU,GACV,YAAY,GACZ,WAAW,GACX,OAAO,CAAC;AAEZ,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,aAAa,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACpC,QAAQ,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC3C,WAAW,EAAE,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IAClD,YAAY,EAAE,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IACnD,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAChC,SAAS,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAClC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACjD;AAED,MAAM,WAAW,iBAAiB;IAChC,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAmBD,qBAAa,UAAU;IAUT,OAAO,CAAC,QAAQ,CAAC,OAAO;IATpC,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,OAAO,CAAO;IACtB,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoD;IAC9E,OAAO,CAAC,IAAI,CAA2B;IACvC,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,KAAK,CAAuB;gBAEP,OAAO,GAAE,iBAAsB;IAG5D,EAAE,CAAC,CAAC,SAAS,MAAM,gBAAgB,EACjC,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAC5B,MAAM,IAAI;IAUb,OAAO,CAAC,IAAI;IASZ,OAAO,CAAC,QAAQ;IAMhB,QAAQ,IAAI,WAAW;IAKvB,OAAO,CAAC,MAAM;IAOd,OAAO,CAAC,SAAS;IAKjB,OAAO,IAAI,IAAI;IAKf,UAAU,IAAI,IAAI;IAQlB,OAAO,CAAC,UAAU;IA4BlB,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,IAAI;IAQZ,2EAA2E;IACrE,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BlE,wCAAwC;IAClC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAc7B,yCAAyC;IACzC,MAAM,CAAC,MAAM,SAAa,GAAG,IAAI;IAOjC,wCAAwC;IACxC,MAAM,CAAC,MAAM,SAAW,GAAG,IAAI;IAO/B,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAO9B,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;YAQ1B,OAAO;IAiDrB,OAAO,CAAC,SAAS;IAqBjB,OAAO,CAAC,WAAW;YAeL,aAAa;YAsBb,cAAc;YAUd,kBAAkB;YAkBlB,qBAAqB;YAarB,UAAU;IAoBxB,OAAO,CAAC,mBAAmB;YA2Bb,SAAS;IAOvB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,OAAO;IAqBf,OAAO,CAAC,QAAQ;CA0BjB"}
|
package/dist/types/call.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"call.d.ts","sourceRoot":"","sources":["../../src/types/call.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,eAAO,MAAM,2BAA2B,EAAG,CAAU,CAAC;AAEtD,2EAA2E;AAC3E,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,qEAAqE;AACrE,MAAM,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"call.d.ts","sourceRoot":"","sources":["../../src/types/call.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AACA,cAAc,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AACA,cAAc,WAAW,CAAC;AAG1B,cAAc,eAAe,CAAC;AAK9B,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,QAAQ,CAAC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IAGzB,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAI3C,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAGD,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB,EAAE,MAAM,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAGD,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IAErB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAGD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAGD,MAAM,WAAW,IAAI;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,QAAQ,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC3D,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAElB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAGD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAGD,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAGD,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,QAAQ,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,WAAW,CAAC,EAAE,eAAe,EAAE,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;CACpB;AAGD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAGD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,GAAG,gBAAgB,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,SAAS,CAAC;IAC9E,KAAK,EAAE,iBAAiB,CAAC;IACzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,sBAAsB,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,sBAAsB,GAChC,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,eAAe,CAAC;AAEjD,MAAM,MAAM,yBAAyB,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE/D,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE;QACJ,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,CAAC,EAAE,eAAe,GAAG,MAAM,CAAC;QAClC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;CACH;AAED,MAAM,WAAW,8BAA8B;IAC7C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,yBAAyB,CAAC;IACnC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB;AAGD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAGD,MAAM,WAAW,eAAe;IAC9B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAGD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,eAAe,CAAC;IAE1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAE9C,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAGD,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,eAAe,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,KAAK,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAGD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,KAAK,EAAE,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;CACvB;AAGD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAGD,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAID,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Realtime stream wire contract (browser <-> per-user RealtimeStreamDO).
|
|
3
|
+
*
|
|
4
|
+
* One authenticated WebSocket per user carries every live update the client
|
|
5
|
+
* used to poll for: talk messages, typing, read receipts, contact-list
|
|
6
|
+
* changes, new notifications, and the authoritative unread counters. The
|
|
7
|
+
* server pushes `RealtimeEvent` envelopes; the client sends only the small
|
|
8
|
+
* control frames below (writes stay on the REST API).
|
|
9
|
+
*
|
|
10
|
+
* Event ids are a per-user monotonic sequence assigned by the Durable Object.
|
|
11
|
+
* A reconnecting client offers its last seen id in `hello`; the DO replays the
|
|
12
|
+
* gap from its ring buffer, or answers `resync` when the gap is older than the
|
|
13
|
+
* buffer so the client re-fetches via the normal REST reads.
|
|
14
|
+
*/
|
|
15
|
+
export type RealtimeEventType = "talk.message" | "talk.typing" | "talk.read" | "talk.contacts_changed" | "notification.new" | "unread";
|
|
16
|
+
export interface RealtimeEvent {
|
|
17
|
+
/** Per-user monotonic sequence number (assigned by the stream DO). */
|
|
18
|
+
id: number;
|
|
19
|
+
type: RealtimeEventType;
|
|
20
|
+
data: Record<string, unknown>;
|
|
21
|
+
}
|
|
22
|
+
/** `talk.message` payload. `other_ap_id` is from the RECEIVING user's view. */
|
|
23
|
+
export interface TalkMessageEventData {
|
|
24
|
+
kind: "dm" | "community";
|
|
25
|
+
/** DM: the counterpart actor (per-recipient). */
|
|
26
|
+
other_ap_id?: string;
|
|
27
|
+
/** Community chat: the community actor. */
|
|
28
|
+
community_ap_id?: string;
|
|
29
|
+
conversation_id?: string;
|
|
30
|
+
message: {
|
|
31
|
+
id: string;
|
|
32
|
+
sender: {
|
|
33
|
+
ap_id: string;
|
|
34
|
+
username: string;
|
|
35
|
+
preferred_username: string | null;
|
|
36
|
+
name: string | null;
|
|
37
|
+
icon_url: string | null;
|
|
38
|
+
};
|
|
39
|
+
content: string | null;
|
|
40
|
+
attachments?: unknown[];
|
|
41
|
+
created_at: string | null;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export interface TalkTypingEventData {
|
|
45
|
+
other_ap_id: string;
|
|
46
|
+
is_typing: boolean;
|
|
47
|
+
typed_at: string;
|
|
48
|
+
}
|
|
49
|
+
export interface TalkReadEventData {
|
|
50
|
+
other_ap_id: string;
|
|
51
|
+
conversation_id: string;
|
|
52
|
+
last_read_at: string;
|
|
53
|
+
}
|
|
54
|
+
/** Authoritative unread counters (server-computed; never client-derived). */
|
|
55
|
+
export interface UnreadEventData {
|
|
56
|
+
dm: number;
|
|
57
|
+
community: number;
|
|
58
|
+
talk_total: number;
|
|
59
|
+
notifications: number;
|
|
60
|
+
}
|
|
61
|
+
export type RealtimeClientFrame = {
|
|
62
|
+
t: "hello";
|
|
63
|
+
lastEventId?: number;
|
|
64
|
+
} | {
|
|
65
|
+
t: "ping";
|
|
66
|
+
} | {
|
|
67
|
+
t: "pong";
|
|
68
|
+
};
|
|
69
|
+
export type RealtimeServerFrame = {
|
|
70
|
+
t: "hello_ok";
|
|
71
|
+
lastEventId: number;
|
|
72
|
+
} | {
|
|
73
|
+
t: "event";
|
|
74
|
+
event: RealtimeEvent;
|
|
75
|
+
}
|
|
76
|
+
/** The requested replay gap is older than the buffer: re-fetch via REST. */
|
|
77
|
+
| {
|
|
78
|
+
t: "resync";
|
|
79
|
+
} | {
|
|
80
|
+
t: "ping";
|
|
81
|
+
} | {
|
|
82
|
+
t: "pong";
|
|
83
|
+
};
|
|
84
|
+
export declare function parseRealtimeClientFrame(raw: unknown): RealtimeClientFrame | null;
|
|
85
|
+
export declare function parseRealtimeServerFrame(raw: unknown): RealtimeServerFrame | null;
|
|
86
|
+
//# sourceMappingURL=realtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"realtime.d.ts","sourceRoot":"","sources":["../../src/types/realtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,MAAM,iBAAiB,GACzB,cAAc,GACd,aAAa,GACb,WAAW,GACX,uBAAuB,GACvB,kBAAkB,GAClB,QAAQ,CAAC;AAEb,MAAM,WAAW,aAAa;IAC5B,sEAAsE;IACtE,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,+EAA+E;AAC/E,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,IAAI,GAAG,WAAW,CAAC;IACzB,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE;QACP,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE;YACN,KAAK,EAAE,MAAM,CAAC;YACd,QAAQ,EAAE,MAAM,CAAC;YACjB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;YAClC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;YACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;SACzB,CAAC;QACF,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC;QACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;KAC3B,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,6EAA6E;AAC7E,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB;AAID,MAAM,MAAM,mBAAmB,GAC7B;IAAE,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAIvE,MAAM,MAAM,mBAAmB,GAC3B;IAAE,CAAC,EAAE,UAAU,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,aAAa,CAAA;CAAE;AACtC,4EAA4E;GAC1E;IAAE,CAAC,EAAE,QAAQ,CAAA;CAAE,GACf;IAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GACb;IAAE,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAElB,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,OAAO,GACX,mBAAmB,GAAG,IAAI,CAc5B;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,OAAO,GACX,mBAAmB,GAAG,IAAI,CA8B5B"}
|