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