bundle shedding: drop atcute/identity-resolver hard dep

we still dynamically import the web did doc resolver if we need to
resolve a did:web: but since it's an async import it should get
codesplit on the client side
This commit is contained in:
Charlotte Som 2025-06-07 11:41:17 +01:00
parent dbf653e7cd
commit deb0e7302c
3 changed files with 28 additions and 22 deletions

View file

@ -21,7 +21,7 @@ const fetchVideoRecord = async (
const xrpc = new XRPC<ATProtoUniverse>(pds);
const record = await xrpc.get("com.atproto.repo.getRecord", {
parameters: {
params: {
collection: "blue.cerulea.video.video",
repo: did,
rkey,

View file

@ -1,26 +1,32 @@
import type { DidDocument } from "@atcute/identity";
import {
CompositeDidDocumentResolver,
PlcDidDocumentResolver,
WebDidDocumentResolver,
XrpcHandleResolver,
} from "@atcute/identity-resolver";
import type { WebDidDocumentResolver } from "@atcute/identity-resolver";
import type { ATProtoUniverse } from "@char/lexicon.ts/atproto";
import { XRPC } from "@char/lexicon.ts/rpc";
const handleResolver = new XrpcHandleResolver({
serviceUrl: "https://public.api.bsky.app",
const bskyPublic = new XRPC<ATProtoUniverse>("https://public.api.bsky.app");
export async function resolveHandle(handle: string): Promise<`did:${string}`> {
const { did } = await bskyPublic.get("com.atproto.identity.resolveHandle", {
params: { handle },
});
const didResolver = new CompositeDidDocumentResolver({
methods: {
plc: new PlcDidDocumentResolver(),
web: new WebDidDocumentResolver(),
},
});
export function resolveHandle(handle: string): Promise<`did:${string}`> {
return handleResolver.resolve(handle as `${string}.${string}`);
return did;
}
export function resolveDid(did: string): Promise<DidDocument> {
return didResolver.resolve(did as `did:${"plc" | "web"}:${string}`);
export async function resolveDid(did: string): Promise<DidDocument> {
if (did.startsWith("did:plc:")) {
const doc = await fetch("https://plc.directory/" + did).then((r) =>
r.json()
);
return doc;
} else if (did.startsWith("did:web:")) {
// TODO: write our own did:web resolver (maybe use a CORS proxy on clientside)
const resolver: WebDidDocumentResolver = await import(
"@atcute/identity-resolver"
)
.then((m) => m.WebDidDocumentResolver)
.then((r) => new r());
return resolver.resolve(did as `did:web:${string}`);
}
throw new Error("unsupported did type: " + did);
}

2
vendor/lexicon.ts vendored

@ -1 +1 @@
Subproject commit 1edb68e5eac3ddfabdd77674ed8193ef9af05649
Subproject commit 4b3c48591c21d976ab94d0ae6cf2160a2115471c