A minimal starter for ATProto logins in Astro
1import type { AstroCookies } from 'astro'
2import {
3 atprotoLoopbackClientMetadata,
4 NodeOAuthClient,
5} from "@atproto/oauth-client-node";
6import { env } from "./env";
7import { CookieSessionStore, CookieStateStore } from "./storage";
8
9export function createOAuthClient(cookies: AstroCookies) {
10 const clientMetadata = atprotoLoopbackClientMetadata(
11 `http://localhost?${new URLSearchParams([
12 ["redirect_uri", `http://127.0.0.1:${env.PORT}/api/oauth/callback`],
13 ["scope", `atproto transition:generic`],
14 ])}`,
15 );
16
17 return new NodeOAuthClient({
18 clientMetadata,
19 stateStore: new CookieStateStore(cookies),
20 sessionStore: new CookieSessionStore(cookies),
21 });
22}