decentralised sync engine

fix: actually persist the connection

serenity 77f2d868 e5699e35

Changed files
+15 -10
src
lib
+6 -6
src/lib/setup.ts
···
};
export const connectToShards = async () => {
-
const shardSessions = handshakeTokens.entries();
-
const shardConnectionPromises = shardSessions
-
.map(async (session) => {
-
const atUri = session[0];
-
const { token } = session[1];
+
const handshakes = handshakeTokens.entries();
+
const shardConnectionPromises = handshakes
+
.map(async (handshake) => {
+
const atUri = handshake[0];
+
const sessionInfo = handshake[1];
const rkey = atUri.rKey ?? "";
const shardDid = isDomain(rkey)
? `did:web:${encodeURIComponent(rkey)}`
···
return {
// TODO: xrpc and lexicon this endpoint
shardUrl: `${shardUrlResult.data.origin}/connect`,
-
sessionToken: token,
+
sessionInfo,
};
})
.toArray();
+9 -4
src/lib/utils/gmstn.ts
···
+
import { shardSessions } from "@/lib/state";
import type { Did } from "@/lib/types/atproto";
+
import type { ShardSessionInfo } from "@/lib/types/handshake";
import { getEndpointFromDid } from "@/lib/utils/atproto";
import WebSocket from "ws";
···
export const connectToShard = ({
shardUrl,
-
sessionToken,
+
sessionInfo,
}: {
shardUrl: string;
-
sessionToken: string;
+
sessionInfo: ShardSessionInfo;
}) => {
const endpoint = new URL(shardUrl);
-
endpoint.searchParams.append("token", sessionToken);
-
return new WebSocket(endpoint);
+
const { token } = sessionInfo;
+
endpoint.searchParams.append("token", token);
+
const ws = new WebSocket(endpoint);
+
shardSessions.set(sessionInfo, ws);
+
return ws;
};