a proof of concept realtime collaborative text editor using atproto as a sync server
jake.tngl.io/y-pds/
1.2 kB
39 lines
1import metadata from "./client-metadata.json" with { type: "json" };
2
3export const scope = metadata.scope;
4
5import { Client } from "@atcute/client";
6import { configureOAuth, OAuthUserAgent } from "@atcute/oauth-browser-client";
7import {
8 CompositeDidDocumentResolver,
9 LocalActorResolver,
10 PlcDidDocumentResolver,
11 WebDidDocumentResolver,
12 XrpcHandleResolver,
13} from "@atcute/identity-resolver";
14
15const resolver = new LocalActorResolver({
16 handleResolver: new XrpcHandleResolver({ serviceUrl: "https://public.api.bsky.app" }),
17 didDocumentResolver: new CompositeDidDocumentResolver({
18 methods: { plc: new PlcDidDocumentResolver(), web: new WebDidDocumentResolver() },
19 }),
20});
21
22export function configure() {
23 configureOAuth({
24 metadata: { client_id: metadata.client_id, redirect_uri: metadata.redirect_uris[0] },
25 identityResolver: resolver,
26 });
27}
28
29/** @param {string} handleOrDid */
30export async function resolve(handleOrDid) {
31 const { did } = await resolver.resolve(handleOrDid);
32 return did;
33}
34
35/** @param {import("@atcute/oauth-browser-client").Session} */
36export function client(session) {
37 const handler = new OAuthUserAgent(session);
38 return new Client({ handler });
39}