configureBrowser

tcmts.atproto.configureBrowser · #6yo3bzfk · function · runs in the browser

uses tcmts.atproto.browserClient, which uses location

Set up the browser's OAuth client for these options, once per page (again only if they differ).

import { askedScope, browserClient, browserConfigured, signInServices } from "#codebase/tcmts/atproto";
import type { SignInOptions } from "#codebase/tcmts/atproto";
import {
  CompositeDidDocumentResolver, LocalActorResolver, PlcDidDocumentResolver, WebDidDocumentResolver,
  XrpcHandleResolver,
} from "@atcute/identity-resolver";
import { configureOAuth } from "@atcute/oauth-browser-client";

export function configureBrowser(o: SignInOptions): Promise<void> {
  const key = JSON.stringify([askedScope(o), o.client ?? ""]);
  if (browserConfigured.key !== key || !browserConfigured.done) {
    browserConfigured.key = key;
    browserConfigured.done = signInServices().then((s) =>
      configureOAuth({
        metadata: browserClient(o),
        identityResolver: new LocalActorResolver({
          handleResolver: new XrpcHandleResolver({ serviceUrl: s.appview as `https://${string}` }),
          didDocumentResolver: new CompositeDidDocumentResolver({
            methods: {
              plc: new PlcDidDocumentResolver({ apiUrl: s.plc }),
              web: new WebDidDocumentResolver(),
            },
          }),
        }),
      }),
    );
  }
  return browserConfigured.done!;
}

uses

used by