import { AccessControl, ArrayElement, Statements } from "../access/types.mjs"; import { OrganizationOptions } from "./types.mjs"; import { InferInvitation, InferMember, InferOrganization, InferTeam, OrganizationSchema, TeamMember } from "./schema.mjs"; import { ORGANIZATION_ERROR_CODES } from "./error-codes.mjs"; import { createOrgRole, deleteOrgRole, getOrgRole, listOrgRoles, updateOrgRole } from "./routes/crud-access-control.mjs"; import { acceptInvitation, cancelInvitation, createInvitation, getInvitation, listInvitations, listUserInvitations, rejectInvitation } from "./routes/crud-invites.mjs"; import { addMember, getActiveMember, getActiveMemberRole, leaveOrganization, listMembers, removeMember, updateMemberRole } from "./routes/crud-members.mjs"; import { checkOrganizationSlug, createOrganization, deleteOrganization, getFullOrganization, listOrganizations, setActiveOrganization, updateOrganization } from "./routes/crud-org.mjs"; import { addTeamMember, createTeam, listOrganizationTeams, listTeamMembers, listUserTeams, removeTeam, removeTeamMember, setActiveTeam, updateTeam } from "./routes/crud-team.mjs"; import { hasPermission } from "./has-permission.mjs"; import * as better_call0 from "better-call"; import * as z from "zod"; //#region src/plugins/organization/organization.d.ts declare module "@better-auth/core" { interface BetterAuthPluginRegistry { organization: { creator: OrganizationCreator; }; } } type DefaultOrganizationPlugin = { id: "organization"; version: string; endpoints: OrganizationEndpoints; schema: OrganizationSchema; $Infer: { Organization: InferOrganization; Invitation: InferInvitation; Member: InferMember; Team: Options["teams"] extends { enabled: true; } ? InferTeam : never; TeamMember: Options["teams"] extends { enabled: true; } ? TeamMember : never; ActiveOrganization: Options["teams"] extends { enabled: true; } ? { members: InferMember[]; invitations: InferInvitation[]; teams: InferTeam[]; } & InferOrganization : { members: InferMember[]; invitations: InferInvitation[]; } & InferOrganization; }; $ERROR_CODES: typeof ORGANIZATION_ERROR_CODES; options: NoInfer; }; interface OrganizationCreator { (options?: Options | undefined): DefaultOrganizationPlugin; } declare function parseRoles(roles: string | string[]): string; type DynamicAccessControlEndpoints = { createOrgRole: ReturnType>; deleteOrgRole: ReturnType>; listOrgRoles: ReturnType>; getOrgRole: ReturnType>; updateOrgRole: ReturnType>; }; type TeamEndpoints = { createTeam: ReturnType>; listOrganizationTeams: ReturnType>; removeTeam: ReturnType>; updateTeam: ReturnType>; setActiveTeam: ReturnType>; listUserTeams: ReturnType>; listTeamMembers: ReturnType>; addTeamMember: ReturnType>; removeTeamMember: ReturnType>; }; type OrganizationEndpoints = { createOrganization: ReturnType>; updateOrganization: ReturnType>; deleteOrganization: ReturnType>; setActiveOrganization: ReturnType>; getFullOrganization: ReturnType>; listOrganizations: ReturnType>; createInvitation: ReturnType>; cancelInvitation: ReturnType>; acceptInvitation: ReturnType>; getInvitation: ReturnType>; rejectInvitation: ReturnType>; listInvitations: ReturnType>; getActiveMember: ReturnType>; checkOrganizationSlug: ReturnType>; addMember: ReturnType>; removeMember: ReturnType>; updateMemberRole: ReturnType>; leaveOrganization: ReturnType>; listUserInvitations: ReturnType>; listMembers: ReturnType>; getActiveMemberRole: ReturnType>; hasPermission: ReturnType>; }; declare const createHasPermission: (options: O) => better_call0.StrictEndpoint<"/organization/has-permission", { method: "POST"; requireHeaders: true; body: z.ZodIntersection; }, z.core.$strip>, z.ZodXor>; }, z.core.$strip>, z.ZodObject<{ permissions: z.ZodRecord>; }, z.core.$strip>]>>; use: ((inputContext: better_call0.MiddlewareInputContext<{ use: ((inputContext: better_call0.MiddlewareInputContext) => Promise<{ session: { session: Record & { id: string; createdAt: Date; updatedAt: Date; userId: string; expiresAt: Date; token: string; ipAddress?: string | null | undefined; userAgent?: string | null | undefined; }; user: Record & { id: string; createdAt: Date; updatedAt: Date; email: string; emailVerified: boolean; name: string; image?: string | null | undefined; }; }; }>)[]; }>) => Promise<{ session: { session: { id: string; createdAt: Date; updatedAt: Date; userId: string; expiresAt: Date; token: string; ipAddress?: string | null | undefined; userAgent?: string | null | undefined; } & { activeTeamId?: string | undefined; activeOrganizationId?: string | undefined; }; user: { id: string; createdAt: Date; updatedAt: Date; email: string; emailVerified: boolean; name: string; image?: string | null | undefined; }; }; }>)[]; metadata: { $Infer: { body: { permissions: { [key in keyof (O["ac"] extends AccessControl ? S : { readonly organization: readonly ["update", "delete"]; readonly member: readonly ["create", "update", "delete"]; readonly invitation: readonly ["create", "cancel"]; readonly team: readonly ["create", "update", "delete"]; readonly ac: readonly ["create", "read", "update", "delete"]; })]?: ((O["ac"] extends AccessControl ? S : { readonly organization: readonly ["update", "delete"]; readonly member: readonly ["create", "update", "delete"]; readonly invitation: readonly ["create", "cancel"]; readonly team: readonly ["create", "update", "delete"]; readonly ac: readonly ["create", "read", "update", "delete"]; })[key] extends readonly unknown[] ? ArrayElement<(O["ac"] extends AccessControl ? S : { readonly organization: readonly ["update", "delete"]; readonly member: readonly ["create", "update", "delete"]; readonly invitation: readonly ["create", "cancel"]; readonly team: readonly ["create", "update", "delete"]; readonly ac: readonly ["create", "read", "update", "delete"]; })[key]> : never)[] | undefined }; } & { organizationId?: string | undefined; }; }; openapi: { description: string; requestBody: { content: { "application/json": { schema: { type: "object"; properties: { permission: { type: string; description: string; deprecated: boolean; }; permissions: { type: string; description: string; }; }; required: string[]; }; }; }; }; responses: { "200": { description: string; content: { "application/json": { schema: { type: "object"; properties: { error: { type: string; }; success: { type: string; }; }; required: string[]; }; }; }; }; }; }; }; }, { error: null; success: boolean; }>; type OrganizationPlugin = { id: "organization"; version: string; endpoints: OrganizationEndpoints & (O extends { teams: { enabled: true; }; } ? TeamEndpoints : {}) & (O extends { dynamicAccessControl: { enabled: true; }; } ? DynamicAccessControlEndpoints : {}); schema: OrganizationSchema; $Infer: { Organization: InferOrganization; Invitation: InferInvitation; Member: InferMember; Team: O["teams"] extends { enabled: true; } ? InferTeam : never; TeamMember: O["teams"] extends { enabled: true; } ? TeamMember : never; ActiveOrganization: O["teams"] extends { enabled: true; } ? { members: InferMember[]; invitations: InferInvitation[]; teams: InferTeam[]; } & InferOrganization : { members: InferMember[]; invitations: InferInvitation[]; } & InferOrganization; }; $ERROR_CODES: typeof ORGANIZATION_ERROR_CODES; options: NoInfer; }; /** * Organization plugin for Better Auth. Organization allows you to create teams, members, * and manage access control for your users. * * @example * ```ts * const auth = betterAuth({ * plugins: [ * organization({ * allowUserToCreateOrganization: true, * }), * ], * }); * ``` */ declare function organization(options?: O | undefined): { id: "organization"; version: string; endpoints: OrganizationEndpoints & TeamEndpoints; schema: OrganizationSchema; $Infer: { Organization: InferOrganization; Invitation: InferInvitation; Member: InferMember; Team: O["teams"] extends { enabled: true; } ? InferTeam : never; TeamMember: O["teams"] extends { enabled: true; } ? TeamMember : never; ActiveOrganization: O["teams"] extends { enabled: true; } ? { members: InferMember[]; invitations: InferInvitation[]; teams: InferTeam[]; } & InferOrganization : { members: InferMember[]; invitations: InferInvitation[]; } & InferOrganization; }; $ERROR_CODES: typeof ORGANIZATION_ERROR_CODES; options: NoInfer; }; declare function organization(options?: O | undefined): { id: "organization"; version: string; endpoints: OrganizationEndpoints & TeamEndpoints & DynamicAccessControlEndpoints; schema: OrganizationSchema; $Infer: { Organization: InferOrganization; Invitation: InferInvitation; Member: InferMember; Team: O["teams"] extends { enabled: true; } ? InferTeam : never; TeamMember: O["teams"] extends { enabled: true; } ? TeamMember : never; ActiveOrganization: O["teams"] extends { enabled: true; } ? { members: InferMember[]; invitations: InferInvitation[]; teams: InferTeam[]; } & InferOrganization : { members: InferMember[]; invitations: InferInvitation[]; } & InferOrganization; }; $ERROR_CODES: typeof ORGANIZATION_ERROR_CODES; options: NoInfer; }; declare function organization(options?: O | undefined): { id: "organization"; version: string; endpoints: OrganizationEndpoints & DynamicAccessControlEndpoints; schema: OrganizationSchema; $Infer: { Organization: InferOrganization; Invitation: InferInvitation; Member: InferMember; Team: O["teams"] extends { enabled: true; } ? InferTeam : never; TeamMember: O["teams"] extends { enabled: true; } ? TeamMember : never; ActiveOrganization: O["teams"] extends { enabled: true; } ? { members: InferMember[]; invitations: InferInvitation[]; teams: InferTeam[]; } & InferOrganization : { members: InferMember[]; invitations: InferInvitation[]; } & InferOrganization; }; $ERROR_CODES: typeof ORGANIZATION_ERROR_CODES; options: NoInfer; }; declare function organization(options?: O | undefined): DefaultOrganizationPlugin; //#endregion export { DefaultOrganizationPlugin, DynamicAccessControlEndpoints, OrganizationCreator, OrganizationEndpoints, OrganizationPlugin, TeamEndpoints, organization, parseRoles };