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)); }