@vperms/next
Factory
Section titled “Factory”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;Backends
Section titled “Backends”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;Shared types
Section titled “Shared types”type SubjectResolverResult = SubjectId | Principal | null;type SubjectResolver = (request?: Request) => SubjectResolverResult | Promise<SubjectResolverResult>;
interface BrowserConfig { origin: string; prefix: string; fetchOptions?: RequestInit;}Handlers
Section titled “Handlers”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;Client
Section titled “Client”interface NextClientConfig extends BrowserConfig { fetch?: FetchLike;}
function createNextVPerms(config: NextClientConfig): ClientVPerms;@vperms/next/client also re-exports everything from @vperms/react/client.