createAgentRecordResolver

@atiproto/record-resolver

Returns a RecordResolver that routes com.atproto.repo.getRecord through any XRPC-shaped client, typically the same agent you already use for application calls. Auth, retries, and proxying live on the agent. This factory just routes the call.

Signature

typescript
function createAgentRecordResolver(
agent: RecordResolverAgent,
): RecordResolver
interface RecordResolverAgent {
call(
nsid: string,
params?: unknown,
data?: unknown,
): Promise<{ data: unknown }>;
}

The interface matches @atiproto/agent.Agent, @atproto/api.Agent, and bare @atproto/xrpc.XrpcClient. Any of them can be passed directly.

Behavior

Parses the URI, calls com.atproto.repo.getRecord on the configured agent, and returns the value field. Throws on missing value or any error propagated by the agent.

Example: same-agent verification

The user's agent already has the right credentials and proxying. Reuse it for proof resolution rather than spinning up a separate fetch path:

typescript
import { Agent } from "@atiproto/agent";
import { verify } from "@atiproto/atproto-attestation";
import { createAgentRecordResolver } from "@atiproto/record-resolver";
const agent = new Agent(/* SessionManager / FetchHandler */);
const recordResolver = createAgentRecordResolver(agent);
const result = await verify({
record: cart,
repository: cart.recipientDid,
fields,
recordResolver,
});

Example: bare XrpcClient

typescript
import { XrpcClient } from "@atproto/xrpc";
import { createAgentRecordResolver } from "@atiproto/record-resolver";
const client = new XrpcClient("https://bsky.network", []);
const recordResolver = createAgentRecordResolver(client);