···
import type { AtUri } from "@/lib/types/atproto";
2
-
import { shardMessageSchema, type ShardMessage } from "@/lib/types/messages";
2
+
import type { RequestHistoryMessage, ShardMessage } from "@/lib/types/messages";
3
+
import { historyMessageSchema, shardMessageSchema } from "@/lib/types/messages";
import { atUriEquals, atUriToString, stringToAtUri } from "@/lib/utils/atproto";
import { sendShardMessage } from "@/lib/utils/messages";
···
33
-
socket.addEventListener("open", () => {
34
+
const handleOpen = () => {
console.log("Connected to WebSocket");
37
+
const requestHistoryMessage: RequestHistoryMessage = {
38
+
type: "shard/requestHistory",
39
+
channel: atUriToString(channel),
40
+
requestedBy: sessionInfo.clientDid,
43
+
"requested history from lattice",
44
+
requestHistoryMessage,
46
+
socket.send(JSON.stringify(requestHistoryMessage));
49
+
if (socket.readyState === WebSocket.OPEN) {
53
+
socket.addEventListener("open", handleOpen);
socket.addEventListener("message", (event) => {
console.log("received message", event);
···
setMessages((prev) => [...prev, shardMessage]);
83
+
case "shard/history": {
85
+
"received history from lattice",
86
+
validateTypeResult.data,
88
+
const { success, data: historyMessage } =
89
+
historyMessageSchema.safeParse(validateTypeResult.data);
90
+
if (!success) return;
91
+
if (!historyMessage.messages) return;
93
+
const parseChannelResult = stringToAtUri(
94
+
historyMessage.channel,
97
+
if (!parseChannelResult.ok) return;
98
+
const { data: channelAtUri } = parseChannelResult;
100
+
if (atUriEquals(channelAtUri, channel))
101
+
setMessages([...historyMessage.messages]);
···
console.log("Disconnected from WebSocket");
114
+
socket.addEventListener("open", handleOpen);
116
+
socket.removeEventListener("open", handleOpen);
}, [socket, sessionInfo, channel]);
if (!oAuthSession) throw new Error("No OAuth session");