this repo has no description
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}