import { type CanActivate, type Type } from "@nestjs/common"; import type { AccessCapability, AccessSubject } from "../../types/index.js"; /** * Builds a Nest guard that requires an access capability, mirroring the * Express `useRequireCapability()` behavior on Nest's exception pipeline. * * The project ships no auth provider, so the subject is resolved by the caller * (JWT, session, API key…). Return `null` for anonymous requests — they get a * 401; authenticated but not allowed gets a 403. Both exceptions carry the * same `{ ok, data, error }` body shape used across the toolkit. * * @typeParam TRequest - The platform request type (Express by default). * @param capability - The capability required to activate the route. * @param resolveSubject - Resolves the access subject from the request. * @returns A guard class ready for `@UseGuards(...)`. * * @example * ```ts * import { Controller, Get, UseGuards } from "@nestjs/common"; * import { useRequireCapability } from "katanakit-js/adapters/nestjs"; * * const CanPublish = useRequireCapability( * "content:publish", * (request: { account?: { id: number; roles: string[] } }) => request.account ?? null, * ); * * @Controller("articles") * export class ArticlesController { * @Get("drafts") * @UseGuards(CanPublish) * drafts() { * return []; * } * } * ``` */ export declare function useRequireCapability(capability: AccessCapability, resolveSubject: (request: TRequest) => AccessSubject | null): Type; //# sourceMappingURL=access.guard.d.ts.map