@atproto/oauth-scopes
Version:
A library for manipulating and validating ATproto OAuth scopes in TypeScript.
59 lines • 2.01 kB
JavaScript
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