import { DecoratedMiddleware } from "@orpc/server";
import { z } from "zod";
//#region src/api/auth-middleware.d.ts
/** Structural minimum the middlewares read — the generated `AuthPluginContext` satisfies it. */
interface AuthContextShape {
  user?: {
    role?: string | null;
  } | null;
  userId?: string | null;
  apiKey?: {
    permissions?: Record<string, string[]> | null;
  } | null;
  organization?: {
    activeOrganizationId?: string | null;
    member?: {
      id?: string | null;
      role?: string | null;
    } | null;
    organization?: {
      metadata?: Record<string, unknown> | null;
      status?: string;
    } | null;
  } | null;
}
type OrgMetaType<TSchema extends z.ZodType | undefined> = TSchema extends z.ZodType ? z.infer<TSchema> : Record<string, unknown>;
declare function createAuthMiddleware<TContext extends AuthContextShape = AuthContextShape, TOrgMetaSchema extends z.ZodType | undefined = undefined>(builder: any, options?: {
  orgMetaSchema?: TOrgMetaSchema;
}): {
  requireAuth: DecoratedMiddleware<TContext, {
    userId: string;
    user: NonNullable<TContext["user"]>;
  }, any, any, any>;
  requireAuthOrApiKey: DecoratedMiddleware<TContext, Record<string, never>, any, any, any>;
  requireRole: <TRoles extends readonly string[]>(...roles: TRoles) => DecoratedMiddleware<TContext, {
    userId: string;
    user: NonNullable<TContext["user"]>;
  }, any, any, any>;
  requireAdmin: DecoratedMiddleware<TContext, {
    userId: string;
    user: NonNullable<TContext["user"]>;
  }, any, any, any>;
  requireOrganization: DecoratedMiddleware<TContext, {
    userId: string;
    user: NonNullable<TContext["user"]>;
    organization: NonNullable<TContext["organization"]> & {
      activeOrganizationId: string;
      organization: (NonNullable<NonNullable<TContext["organization"]>["organization"]> & {
        metadata: OrgMetaType<TOrgMetaSchema> | null;
      }) | null;
    };
  }, any, any, any>;
  requireOrgRole: <TRoles extends readonly string[]>(...roles: TRoles) => DecoratedMiddleware<TContext, {
    userId: string;
    user: NonNullable<TContext["user"]>;
    organization: NonNullable<TContext["organization"]> & {
      activeOrganizationId: string;
      member: NonNullable<NonNullable<TContext["organization"]>["member"]>;
      organization: (NonNullable<NonNullable<TContext["organization"]>["organization"]> & {
        metadata: OrgMetaType<TOrgMetaSchema> | null;
      }) | null;
    };
  }, any, any, any>;
  requireApiKey: (requiredPermissions?: Record<string, string[]>) => DecoratedMiddleware<TContext, {
    apiKey: NonNullable<TContext["apiKey"]>;
  }, any, any, any>;
};
//#endregion
export { AuthContextShape, createAuthMiddleware };
//# sourceMappingURL=auth-middleware.d.cts.map