UNPKG

@atproto/oauth-scopes

Version:

A library for manipulating and validating ATproto OAuth scopes in TypeScript.

59 lines • 2.01 kB
import { isAtprotoDidRefAbsolute, } from '@atproto/did'; import { isNsid } from '../lib/nsid.js'; import { Parser } from '../lib/parser.js'; import { ScopeStringSyntax } from '../lib/syntax-string.js'; import { isScopeStringFor, } from '../lib/syntax.js'; export { isAtprotoDidRefAbsolute, isNsid, }; export const isLxmParam = (value) => value === '*' || isNsid(value); export const isAudParam = (value) => value === '*' || isAtprotoDidRefAbsolute(value); export class RpcPermission { constructor(aud, lxm) { this.aud = aud; this.lxm = lxm; } matches(options) { const { aud, lxm } = this; return ((aud === '*' || aud === options.aud) && (lxm.includes('*') || lxm.includes(options.lxm))); } toString() { return RpcPermission.parser.format(this); } static { this.parser = new Parser('rpc', { lxm: { multiple: true, required: true, validate: isLxmParam, normalize: (value) => value.length > 1 && value.includes('*') ? ['*'] : [...new Set(value)].sort(), }, aud: { multiple: false, required: true, validate: isAudParam, }, }, 'lxm'); } static fromString(scope) { if (!isScopeStringFor(scope, 'rpc')) return null; const syntax = ScopeStringSyntax.fromString(scope); return RpcPermission.fromSyntax(syntax); } static fromSyntax(syntax) { const result = RpcPermission.parser.parse(syntax); if (!result) return null; // rpc:*?aud=* is forbidden if (result.aud === '*' && result.lxm.includes('*')) return null; return new RpcPermission(result.aud, result.lxm); } static scopeNeededFor(options) { return RpcPermission.parser.format({ aud: options.aud, lxm: [options.lxm], }); } } //# sourceMappingURL=rpc-permission.js.map