decentralised message store

refactor: additional session info fields

serenity 00baf9ce d202e90d

Changed files
+32 -8
src
lib
+4 -1
src/lib/handlers/handshake.ts
···
// yipee, it's a valid request :3
-
const sessionInfo = issueNewHandshakeToken(allowedChannels);
+
const sessionInfo = issueNewHandshakeToken({
+
allowedChannels,
+
latticeDid: verifyJwtResult.value.issuer,
+
});
return newSuccessResponse({ sessionInfo });
};
+28 -7
src/lib/sessions.ts
···
import { SESSIONS_SECRET } from "@/lib/utils/crypto";
import { z } from "zod";
import type { Result } from "@/lib/utils/result";
-
import type { AtUri } from "@/lib/types/atproto";
-
import { atUriSchema } from "@/lib/types/atproto";
+
import type { AtUri, Did } from "@/lib/types/atproto";
+
import { atUriSchema, didSchema } from "@/lib/types/atproto";
+
import { SERVICE_DID } from "@/lib/env";
export const sessionInfoSchema = z.object({
id: z.string(),
token: z.string(),
fingerprint: z.string(),
allowedChannels: z.array(atUriSchema),
+
shardDid: didSchema,
+
latticeDid: didSchema,
});
export type SessionInfo = z.infer<typeof sessionInfoSchema>;
···
export const generateSessionInfo = (
sessionId: string,
allowedChannels: Array<AtUri>,
+
latticeDid: Did,
): SessionInfo => {
const token = crypto.randomBytes(32).toString("base64url");
···
hmac.update(`${token}:${sessionId}`);
const fingerprint = hmac.digest("hex");
-
return { id: sessionId, token, fingerprint, allowedChannels };
+
const shardDid = SERVICE_DID;
+
+
return {
+
id: sessionId,
+
token,
+
fingerprint,
+
allowedChannels,
+
latticeDid,
+
shardDid,
+
};
};
export const verifyHandshakeToken = ({
···
export const issuedHandshakes = new Map<string, SessionInfo>();
-
export const issueNewHandshakeToken = (
-
allowedChannels: Array<AtUri | undefined>,
-
) => {
+
export const issueNewHandshakeToken = ({
+
allowedChannels,
+
latticeDid,
+
}: {
+
allowedChannels: Array<AtUri | undefined>;
+
latticeDid: Did;
+
}) => {
const filteredChannels = allowedChannels.filter(
(channels) => channels !== undefined,
);
const sessionId = generateSessionId();
-
const sessionInfo = generateSessionInfo(sessionId, filteredChannels);
+
const sessionInfo = generateSessionInfo(
+
sessionId,
+
filteredChannels,
+
latticeDid,
+
);
issuedHandshakes.set(sessionInfo.token, sessionInfo);
return sessionInfo;
};