/** * configures oauth and provides getAuth to retrive the auth for the user */ import { Client } from "@atcute/client"; import { getSession, OAuthUserAgent } from "@atcute/oauth-browser-client"; import { configureOAuth } from "@atcute/oauth-browser-client"; import { CompositeDidDocumentResolver, LocalActorResolver, PlcDidDocumentResolver, WebDidDocumentResolver, XrpcHandleResolver, } from "@atcute/identity-resolver"; import metadata from "../oauth-client-metadata.json" with { type: "json" }; configureOAuth({ metadata: import.meta.env.PROD ? { client_id: metadata.client_id, redirect_uri: metadata.redirect_uris[0], } : { client_id: "https://cimd.vielle.dev/oauth-client-metadata.json?" + new URLSearchParams({ scopes: metadata.scope, callback: "/atproto/callback", }), redirect_uri: "https://cimd.vielle.dev/atproto/callback", }, identityResolver: new LocalActorResolver({ handleResolver: new XrpcHandleResolver({ serviceUrl: "https://public.api.bsky.app", }), didDocumentResolver: new CompositeDidDocumentResolver({ methods: { plc: new PlcDidDocumentResolver(), web: new WebDidDocumentResolver(), }, }), }), }); // overrides export async function getAuth( forceAuth: true, ): Promise<[Client, OAuthUserAgent, `did:${string}:${string}`]>; export async function getAuth( forceAuth?: false, ): Promise< | [Client, OAuthUserAgent, `did:${string}:${string}`] | [undefined, undefined, undefined] >; // main impl export async function getAuth( forceAuth?: boolean, ): Promise< | [Client, OAuthUserAgent, `did:${string}:${string}`] | [undefined, undefined, undefined] > { const did = localStorage.getItem("did"); try { if (did && did.match(/^did:.+:.*$/)) { const session = await getSession(did as `did:${string}:${string}`, {}); const agent = new OAuthUserAgent(session); const client = new Client({ handler: agent }); return [client, agent, did as `did:${string}:${string}`]; } else { if (forceAuth) { location.assign("/atproto/login"); return undefined as never; } else return [undefined, undefined, undefined]; } } catch (e) { console.warn(e); if (forceAuth) { location.assign("/atproto/login"); return undefined as never; } else return [undefined, undefined, undefined]; } }