[READ-ONLY] Mirror of https://github.com/flo-bit/bluesky-website-generator. bluesky-website-generator.vercel.app
0

Configure Feed

Select the types of activity you want to include in your feed.

bluesky-website-generator / src / hooks.server.ts
1.3 kB 43 lines
1import { atclient } from '$lib/server/client'; 2import { Agent, AtpBaseClient } from '@atproto/api'; 3 4import { decryptToString } from '$lib/server/crypts'; 5import { decodeBase64, decodeBase64urlIgnorePadding } from '@oslojs/encoding'; 6 7import type { Handle } from '@sveltejs/kit'; 8import { env } from '$env/dynamic/private'; 9 10export const handle: Handle = async ({ event, resolve }) => { 11 const sid = event.cookies.get('sid'); 12 if (sid) { 13 try { 14 if (event.locals.user) { 15 return resolve(event); 16 } 17 const decoded = decodeBase64urlIgnorePadding(sid); 18 const key = decodeBase64(env.KEY ?? ''); 19 const decrypted = await decryptToString(key, decoded); 20 const oauthSession = await atclient.restore(decrypted); 21 22 const agent = new Agent(oauthSession); 23 event.locals.agent = agent; 24 25 const user = await agent.getProfile({ actor: decrypted }); 26 event.locals.user = user.data; 27 } catch (error) { 28 console.error(error); 29 event.cookies.delete('sid', { path: '/' }); 30 31 const agent = new AtpBaseClient({ service: 'https://api.bsky.app' }); 32 event.locals.agent = agent; 33 } 34 } else { 35 if (event.locals.agent) { 36 return resolve(event); 37 } 38 const agent = new AtpBaseClient({ service: 'https://api.bsky.app' }); 39 event.locals.agent = agent; 40 } 41 42 return resolve(event); 43};