everything-dev
Version:
A consolidated product package for building Module Federation apps with oRPC APIs.
69 lines • 2.75 kB
text/typescript
import { z } from "zod";
import { DecoratedMiddleware } from "@orpc/server";
//#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.mts.map