@skyware/labeler
Version:
A lightweight alternative to Ozone for operating an atproto labeler.
15 lines (14 loc) • 787 B
JavaScript
import { CredentialManager, XRPC } from "@atcute/client";
let xrpc;
let credentialManager;
export async function loginAgent({ pds, ...credentials }) {
credentialManager ??= new CredentialManager({ service: pds || "https://bsky.social" });
xrpc ??= new XRPC({ handler: credentialManager });
if (credentialManager.session && credentialsMatchSession(credentials, credentialManager.session)) {
return { agent: xrpc, session: credentialManager.session };
}
const session = await credentialManager.login(credentials);
return { agent: xrpc, session };
}
const credentialsMatchSession = (credentials, session) => (!!credentials.pds ? credentials.pds === session.pdsUri : true)
&& [session.did, session.handle, session.email].includes(credentials.identifier);