this repo has no description
at main 82 lines 2.5 kB view raw
1/** 2 * configures oauth and provides getAuth to retrive the auth for the user 3 */ 4import { Client } from "@atcute/client"; 5import { getSession, OAuthUserAgent } from "@atcute/oauth-browser-client"; 6import { configureOAuth } from "@atcute/oauth-browser-client"; 7import { 8 CompositeDidDocumentResolver, 9 LocalActorResolver, 10 PlcDidDocumentResolver, 11 WebDidDocumentResolver, 12 XrpcHandleResolver, 13} from "@atcute/identity-resolver"; 14 15import metadata from "../oauth-client-metadata.json" with { type: "json" }; 16 17configureOAuth({ 18 metadata: import.meta.env.PROD 19 ? { 20 client_id: metadata.client_id, 21 redirect_uri: metadata.redirect_uris[0], 22 } 23 : { 24 client_id: 25 "https://cimd.vielle.dev/oauth-client-metadata.json?" + 26 new URLSearchParams({ 27 scopes: metadata.scope, 28 callback: "/atproto/callback", 29 }), 30 redirect_uri: "https://cimd.vielle.dev/atproto/callback", 31 }, 32 identityResolver: new LocalActorResolver({ 33 handleResolver: new XrpcHandleResolver({ 34 serviceUrl: "https://public.api.bsky.app", 35 }), 36 didDocumentResolver: new CompositeDidDocumentResolver({ 37 methods: { 38 plc: new PlcDidDocumentResolver(), 39 web: new WebDidDocumentResolver(), 40 }, 41 }), 42 }), 43}); 44 45// overrides 46export async function getAuth( 47 forceAuth: true, 48): Promise<[Client, OAuthUserAgent, `did:${string}:${string}`]>; 49export async function getAuth( 50 forceAuth?: false, 51): Promise< 52 | [Client, OAuthUserAgent, `did:${string}:${string}`] 53 | [undefined, undefined, undefined] 54>; 55// main impl 56export async function getAuth( 57 forceAuth?: boolean, 58): Promise< 59 | [Client, OAuthUserAgent, `did:${string}:${string}`] 60 | [undefined, undefined, undefined] 61> { 62 const did = localStorage.getItem("did"); 63 try { 64 if (did && did.match(/^did:.+:.*$/)) { 65 const session = await getSession(did as `did:${string}:${string}`, {}); 66 const agent = new OAuthUserAgent(session); 67 const client = new Client({ handler: agent }); 68 return [client, agent, did as `did:${string}:${string}`]; 69 } else { 70 if (forceAuth) { 71 location.assign("/atproto/login"); 72 return undefined as never; 73 } else return [undefined, undefined, undefined]; 74 } 75 } catch (e) { 76 console.warn(e); 77 if (forceAuth) { 78 location.assign("/atproto/login"); 79 return undefined as never; 80 } else return [undefined, undefined, undefined]; 81 } 82}