import { AtProtoClient } from "../client.ts"; import { createOAuthClient } from "../config.ts"; import { buildAtUri } from "./at-uri.ts"; interface AuthContext { currentUser: { sessionId?: string; sub?: string; }; } // Helper function to get a slice-specific AT Protocol client export function getSliceClient( context: AuthContext, sliceId: string, sliceOwnerDid?: string, ): AtProtoClient { const API_URL = Deno.env.get("API_URL")!; // Use provided sliceOwnerDid or fall back to current user's DID const ownerDid = sliceOwnerDid || context.currentUser.sub; if (!ownerDid) { throw new Error("Owner DID is required to create slice client"); } const sliceUri = buildAtUri({ did: ownerDid, collection: "network.slices.slice", rkey: sliceId, }); // Use authenticated client if user is authenticated, otherwise public client if (context.currentUser.sessionId) { const sessionOAuthClient = createOAuthClient(context.currentUser.sessionId); return new AtProtoClient(API_URL, sliceUri, sessionOAuthClient); } else { return new AtProtoClient(API_URL, sliceUri); } }