import { Statements, Subset } from "./types.mjs";

//#region src/plugins/access/access.d.ts
type AuthorizeResponse = {
  success: false;
  error: string;
} | {
  success: true;
  error?: never | undefined;
};
declare function role<TStatements extends Statements>(statements: TStatements): {
  authorize<K extends keyof TStatements>(request: { [key in K]?: TStatements[key] | {
    actions: TStatements[key];
    connector: "OR" | "AND";
  } }, connector?: "OR" | "AND"): AuthorizeResponse;
  statements: TStatements;
};
declare function createAccessControl<const TStatements extends Statements>(s: TStatements): {
  newRole<K extends keyof TStatements>(statements: Subset<K, TStatements>): {
    authorize<K_1 extends K>(request: K_1 extends infer T extends keyof Subset<K, TStatements> ? { [key in T]?: Subset<K, TStatements>[key] | {
      actions: Subset<K, TStatements>[key];
      connector: "OR" | "AND";
    } | undefined } : never, connector?: "OR" | "AND"): AuthorizeResponse;
    statements: Subset<K, TStatements>;
  };
  statements: TStatements;
};
//#endregion
export { AuthorizeResponse, createAccessControl, role };