···
import { SESSIONS_SECRET } from "@/lib/utils/crypto";
import type { Result } from "@/lib/utils/result";
-
import type { AtUri } from "@/lib/types/atproto";
-
import { atUriSchema } from "@/lib/types/atproto";
export const sessionInfoSchema = z.object({
allowedChannels: z.array(atUriSchema),
export type SessionInfo = z.infer<typeof sessionInfoSchema>;
···
export const generateSessionInfo = (
allowedChannels: Array<AtUri>,
const token = crypto.randomBytes(32).toString("base64url");
···
hmac.update(`${token}:${sessionId}`);
const fingerprint = hmac.digest("hex");
-
return { id: sessionId, token, fingerprint, allowedChannels };
export const verifyHandshakeToken = ({
···
export const issuedHandshakes = new Map<string, SessionInfo>();
-
export const issueNewHandshakeToken = (
-
allowedChannels: Array<AtUri | undefined>,
const filteredChannels = allowedChannels.filter(
(channels) => channels !== undefined,
const sessionId = generateSessionId();
-
const sessionInfo = generateSessionInfo(sessionId, filteredChannels);
issuedHandshakes.set(sessionInfo.token, sessionInfo);
···
import { SESSIONS_SECRET } from "@/lib/utils/crypto";
import type { Result } from "@/lib/utils/result";
+
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({
allowedChannels: z.array(atUriSchema),
export type SessionInfo = z.infer<typeof sessionInfoSchema>;
···
export const generateSessionInfo = (
allowedChannels: Array<AtUri>,
const token = crypto.randomBytes(32).toString("base64url");
···
hmac.update(`${token}:${sessionId}`);
const fingerprint = hmac.digest("hex");
+
const shardDid = SERVICE_DID;
export const verifyHandshakeToken = ({
···
export const issuedHandshakes = new Map<string, SessionInfo>();
+
export const issueNewHandshakeToken = ({
+
allowedChannels: Array<AtUri | undefined>;
const filteredChannels = allowedChannels.filter(
(channels) => channels !== undefined,
const sessionId = generateSessionId();
+
const sessionInfo = generateSessionInfo(
issuedHandshakes.set(sessionInfo.token, sessionInfo);