chadtmiller.com/pds.js
An atproto PDS in JavaScript, for Cloudflare Workers and Node
0
0
import { createDpopClient, createOAuthClient } from '@pdsjs/oauth-client';
import { resolveIdentity } from '#/lib/identity.js';
import { SCOPE } from '#/lib/scope.js';
const dpop = createDpopClient({ databaseName: 'pdsjs-git-ui' });
const client = createOAuthClient({
dpop,
resolveIdentity,
scope: SCOPE,
storagePrefix: 'git-ui',
});
/** @typedef {import('@pdsjs/oauth-client/oauth').OAuthSession} Session */
export { SCOPE };
export const authedFetch = client.authedFetch;
export const beginSignIn = client.beginSignIn;
export const clearRenewal = client.clearRenewal;
export const clientId = client.clientId;
export const completeSignIn = client.completeSignIn;
export const currentSession = client.currentSession;
export const onSessionEnded = client.onSessionEnded;
export const renewGrant = client.renewGrant;
export const redirectUri = client.redirectUri;
export const signOut = client.signOut;
export const dpopKeyPair = dpop.dpopKeyPair;
export const dpopProof = dpop.dpopProof;
export const dpopThumbprint = dpop.dpopThumbprint;
export const forgetDpopKey = dpop.forgetDpopKey;
export const nonceFor = dpop.nonceFor;
export const rememberNonce = dpop.rememberNonce;
export const sha256Base64Url = dpop.sha256Base64Url;
export const thumbprint = dpop.thumbprint;
/**
* @param {Session|null} session
* @returns {boolean}
*/
export function canReview(session) {
return (session?.scope || '').includes('repo:dev.pdsjs.git.review');
}
/**
* @param {Session|null} session
* @returns {boolean}
*/
export function grantCurrent(session) {
if (!session) return true;
const granted = (session.scope || '').split(/\s+/);
return SCOPE.split(/\s+/).every((piece) => granted.includes(piece));
}