import * as oauth from "@atcute/oauth-browser-client"; import { CompositeDidDocumentResolver, CompositeHandleResolver, DohJsonHandleResolver, LocalActorResolver, PlcDidDocumentResolver, WebDidDocumentResolver, WellKnownHandleResolver, } from "@atcute/identity-resolver"; // import type { Infer as InferLexicon } from "@char/lexicon.ts"; // import type { ATProtoUniverse } from "@char/lexicon.ts/atproto"; // type UploadBlob = InferLexicon; type UploadBlob = any; const didDocumentResolver = new CompositeDidDocumentResolver({ methods: { plc: new PlcDidDocumentResolver(), web: new WebDidDocumentResolver(), }, }); oauth.configureOAuth({ metadata: { client_id: true ? "http://localhost" + "?redirect_uri=" + encodeURIComponent("http://127.0.0.1:4080/upload/") + "&scope=" + encodeURIComponent("atproto transition:generic") : "https://video.cerulea.blue/upload/client-metadata.json", redirect_uri: true ? "http://127.0.0.1:4080/upload/" : "https://video.cerulea.blue/upload/", }, identityResolver: new LocalActorResolver({ handleResolver: new CompositeHandleResolver({ methods: { dns: new DohJsonHandleResolver({ dohUrl: "https://mozilla.cloudflare-dns.com/dns-query", }), http: new WellKnownHandleResolver(), }, }), didDocumentResolver, }), }); type Did = `did:${"web" | "plc"}:${string}`; type ActorIdentifier = Did | `${string}.${string}`; const login = async (identifier: ActorIdentifier) => { const authUrl = await oauth.createAuthorizationUrl({ target: { type: "account", identifier: identifier }, scope: "atproto transition:generic", }); await new Promise(resolve => setTimeout(resolve, 200)); globalThis.location.assign(authUrl); }; const loginForm = (): HTMLFormElement => { const handleField = ( ) as HTMLInputElement; const form = (
{handleField}
) as HTMLFormElement; form.addEventListener("submit", e => { e.preventDefault(); if (handleField.value) { login(handleField.value as ActorIdentifier); } }); return form; }; const auth = async (): Promise => { for (const sessionId of oauth.listStoredSessions()) { try { const session = await oauth.getSession(sessionId); const agent = new oauth.OAuthUserAgent(session); return agent; } catch { continue; } } const params = new URLSearchParams(globalThis.location.hash.slice(1)); if (params.has("state") && params.has("code")) { history.replaceState(null, "", location.pathname + location.search); const { session } = await oauth.finalizeAuthorization(params); const agent = new oauth.OAuthUserAgent(session); return agent; } return undefined; }; const uploadForm = (agent: oauth.OAuthUserAgent): HTMLFormElement => { const uploadField = () as HTMLInputElement; const preview = (