Skip to content

@vperms/next

interface NextVPermsConfig {
backend: Backend;
prefix?: string; // default "/vperms"
client?: ClientTransport; // default "proxy"
cache?: CacheWrapper;
browserFetchOptions?: RequestInit;
}
type ClientTransport = "direct" | "proxy";
interface NextVPerms {
backend: Backend;
prefix: string;
clientTransport: ClientTransport;
browserConfig: BrowserConfig;
client?: VPermsClient;
getResolvedSubject(subjectId?): Promise<ResolvedSubject>;
getAbility(subjectId?): Promise<PermissionAbility>;
Provider: (props: { children?: ReactNode }) => Promise<ReactNode>;
Ability: (props: AbilityProps) => Promise<ReactNode>;
handlers: NextVPermsHandlers;
}
function createNextVPerms(config: NextVPermsConfig): NextVPerms;
interface NextBackendOptions {
adapter: VeguiPermsAdapter;
workspace: string;
subjectResolver: SubjectResolver;
defaultParents?: DefaultParents;
}
interface NextBackend extends NextBackendOptions {
kind: "next";
}
function nextBackend(options: NextBackendOptions): NextBackend;
interface ExternalBackendOptions {
origin: string;
prefix?: string; // default "/vperms"
subjectResolver?: SubjectResolver;
fetch?: FetchLike;
fetchOptions?: RequestInit;
forwardHeaders?: string[]; // default ["cookie", "authorization"]
}
interface ExternalBackend extends ExternalBackendOptions {
kind: "external";
}
function externalBackend(options: ExternalBackendOptions): ExternalBackend;
type Backend = NextBackend | ExternalBackend;
type SubjectResolverResult = SubjectId | Principal | null;
type SubjectResolver =
(request?: Request) => SubjectResolverResult | Promise<SubjectResolverResult>;
interface BrowserConfig {
origin: string;
prefix: string;
fetchOptions?: RequestInit;
}
interface NextRouteContext {
params?:
| Promise<{ path?: string[] }>
| { path?: string[] };
}
interface NextVPermsHandlers {
GET(request: Request, context?: NextRouteContext): Promise<Response>;
}

Export them from a catch-all route:

export const { GET } = vperms.handlers;
interface NextClientConfig extends BrowserConfig {
fetch?: FetchLike;
}
function createNextVPerms(config: NextClientConfig): ClientVPerms;

@vperms/next/client also re-exports everything from @vperms/react/client.