@httpc/kit
Version:
httpc toolbox for building function-based API with minimal code and end-to-end type safety
89 lines (88 loc) • 3.69 kB
TypeScript
import Parser from "./Parser";
import * as Token from "./Token";
import Serializer from "./Serializer";
import { PermissionsModel } from "./model";
import { ICache } from "../caching";
export { Token as PermissionToken };
export { Parser as PermissionParser };
export * from "./Parser";
export { Serializer as PermissionSerializer };
export * from "./Serializer";
export * from "./model";
export type TokenClaim = string | readonly string[];
export type AuthClaim = Readonly<{
token: TokenClaim;
scope?: TokenClaim;
}>;
export type AssertionClaim = AuthClaim & Readonly<{
negative?: boolean;
}>;
export type GrantClaim = AuthClaim & Readonly<{
subject: TokenClaim;
}>;
export declare class InvalidClaim extends Error {
readonly claim: string;
constructor(claim: string, message?: string);
}
export declare class AuthorizationBuilder {
protected _claims: AuthClaim[];
constructor(extend: Authorization | AuthorizationBuilder | AuthClaim[] | AuthClaim | string);
constructor();
add(claim: AuthClaim | AuthClaim[] | AuthorizationBuilder | Authorization | string): this;
build(): Authorization;
}
export declare class Authorization {
readonly claims: AuthClaim[];
constructor(claims: AuthClaim[]);
protected [Symbol.iterator](): Generator<Readonly<{
token: TokenClaim;
scope?: TokenClaim | undefined;
}>, void, undefined>;
merge(auth: string | Authorization): Authorization;
toString(): string;
static parse(claims: string): Authorization;
}
export declare class AssertionBuilder {
protected _claims: AssertionClaim[];
constructor(extend: Assertion | AssertionBuilder | AssertionClaim[] | AssertionClaim | string);
constructor();
add(claim: AssertionClaim | AssertionClaim[] | AssertionBuilder | Assertion | string): this;
build(): Assertion;
}
export declare class Assertion {
readonly claims: AssertionClaim[];
constructor(claims: AssertionClaim[]);
protected [Symbol.iterator](): Generator<AssertionClaim, void, undefined>;
toString(): string;
test(auth: Authorization): AssertResult;
static parse(claims: string): Assertion;
}
type AssertResult = Readonly<{
success: true;
}> | Readonly<{
success: false;
failed: AuthClaim;
}>;
export declare class PermissionsChecker {
protected _cache?: ICache<[item: any, validated: boolean]>;
protected _model?: PermissionsModel;
constructor(options?: {
model?: PermissionsModel;
cache?: false | true | ICache;
});
can(authorization: string | Authorization, assertion: string | Assertion): boolean;
test(authorization: string | Authorization, assertion: string | Assertion): AssertResult;
supports(authorization: string | Authorization): boolean;
parse(what: "authorization", value: string): Authorization;
parse(what: "assertion", value: string): Assertion;
validate(authorization: Authorization): Authorization;
validate(assertion: Assertion): Assertion;
validate<T extends Authorization | Assertion>(what: T): T;
consolidate(authorization: Authorization): Authorization;
consolidate(assertion: Assertion): Assertion;
consolidate<T extends Authorization | Assertion>(what: T): T;
protected _getAuthorization(authorization: string | Authorization): [Authorization, boolean];
protected _getAssertion(assertion: string | Assertion): [Assertion, boolean];
protected _getCachedOrCreate<T>(value: string | T, prefix: string, factory: (value: string) => T): [T, boolean];
protected _getCacheKey(prefix: string, value: string): string;
}