UNPKG

better-auth

Version:

The most comprehensive authentication library for TypeScript.

1,332 lines (1,329 loc) • 303 kB
import { Role, AccessControl, Statements } from '../access/index.cjs'; import { z, ZodLiteral } from 'zod'; import * as better_call from 'better-call'; import { G as GenericEndpointContext, S as Session, U as User, p as AuthContext } from '../../shared/better-auth.BYzIQdrU.cjs'; import { defaultRoles } from './access/index.cjs'; export { adminAc, defaultAc, defaultStatements, memberAc, ownerAc } from './access/index.cjs'; import '../../shared/better-auth.Bi8FQwDD.cjs'; import '../../shared/better-auth.Dz9w_OUB.cjs'; import 'jose'; import 'kysely'; import 'better-sqlite3'; import 'bun:sqlite'; declare const role: z.ZodString; declare const invitationStatus: z.ZodDefault<z.ZodEnum<["pending", "accepted", "rejected", "canceled"]>>; declare const organizationSchema: z.ZodObject<{ id: z.ZodDefault<z.ZodString>; name: z.ZodString; slug: z.ZodString; logo: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>; metadata: z.ZodOptional<z.ZodUnion<[z.ZodRecord<z.ZodString, z.ZodString>, z.ZodEffects<z.ZodString, any, string>]>>; createdAt: z.ZodDate; }, "strip", z.ZodTypeAny, { id: string; name: string; createdAt: Date; slug: string; metadata?: any; logo?: string | null | undefined; }, { name: string; createdAt: Date; slug: string; id?: string | undefined; metadata?: string | Record<string, string> | undefined; logo?: string | null | undefined; }>; declare const memberSchema: z.ZodObject<{ id: z.ZodDefault<z.ZodString>; organizationId: z.ZodString; userId: z.ZodString; role: z.ZodString; createdAt: z.ZodDefault<z.ZodDate>; teamId: z.ZodOptional<z.ZodString>; }, "strip", z.ZodTypeAny, { id: string; userId: string; createdAt: Date; organizationId: string; role: string; teamId?: string | undefined; }, { userId: string; organizationId: string; role: string; id?: string | undefined; createdAt?: Date | undefined; teamId?: string | undefined; }>; declare const invitationSchema: z.ZodObject<{ id: z.ZodDefault<z.ZodString>; organizationId: z.ZodString; email: z.ZodString; role: z.ZodString; status: z.ZodDefault<z.ZodEnum<["pending", "accepted", "rejected", "canceled"]>>; teamId: z.ZodOptional<z.ZodString>; inviterId: z.ZodString; expiresAt: z.ZodDate; }, "strip", z.ZodTypeAny, { id: string; email: string; status: "accepted" | "canceled" | "rejected" | "pending"; expiresAt: Date; organizationId: string; role: string; inviterId: string; teamId?: string | undefined; }, { email: string; expiresAt: Date; organizationId: string; role: string; inviterId: string; id?: string | undefined; status?: "accepted" | "canceled" | "rejected" | "pending" | undefined; teamId?: string | undefined; }>; declare const teamSchema: z.ZodObject<{ id: z.ZodDefault<z.ZodString>; name: z.ZodString; organizationId: z.ZodString; createdAt: z.ZodDate; updatedAt: z.ZodOptional<z.ZodDate>; }, "strip", z.ZodTypeAny, { id: string; name: string; createdAt: Date; organizationId: string; updatedAt?: Date | undefined; }, { name: string; createdAt: Date; organizationId: string; id?: string | undefined; updatedAt?: Date | undefined; }>; type Organization = z.infer<typeof organizationSchema>; type Member = z.infer<typeof memberSchema>; type Team = z.infer<typeof teamSchema>; type Invitation = z.infer<typeof invitationSchema>; type InvitationInput = z.input<typeof invitationSchema>; type MemberInput = z.input<typeof memberSchema>; type OrganizationInput = z.input<typeof organizationSchema>; type TeamInput = z.infer<typeof teamSchema>; type InferOrganizationZodRolesFromOption<O extends OrganizationOptions | undefined> = ZodLiteral<O extends { roles: { [key: string]: any; }; } ? keyof O["roles"] | (keyof O["roles"])[] : "admin" | "member" | "owner" | ("admin" | "member" | "owner")[]>; type InferOrganizationRolesFromOption<O extends OrganizationOptions | undefined> = O extends { roles: any; } ? keyof O["roles"] : "admin" | "member" | "owner"; type InvitationStatus = "pending" | "accepted" | "rejected" | "canceled"; type InferMember<O extends OrganizationOptions> = O["teams"] extends { enabled: true; } ? { id: string; organizationId: string; role: InferOrganizationRolesFromOption<O>; createdAt: Date; userId: string; teamId?: string; user: { email: string; name: string; image?: string; }; } : { id: string; organizationId: string; role: InferOrganizationRolesFromOption<O>; createdAt: Date; userId: string; user: { email: string; name: string; image?: string; }; }; type InferInvitation<O extends OrganizationOptions> = O["teams"] extends { enabled: true; } ? { id: string; organizationId: string; email: string; role: InferOrganizationRolesFromOption<O>; status: InvitationStatus; inviterId: string; expiresAt: Date; teamId?: string; } : { id: string; organizationId: string; email: string; role: InferOrganizationRolesFromOption<O>; status: InvitationStatus; inviterId: string; expiresAt: Date; }; declare const getFullOrganization: <O extends OrganizationOptions>() => { <AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0: { body?: undefined; } & { method?: "GET" | undefined; } & { query?: { organizationId?: string | undefined; organizationSlug?: string | undefined; } | undefined; } & { params?: Record<string, any>; } & { request?: Request; } & { headers: HeadersInit; } & { asResponse?: boolean; returnHeaders?: boolean; use?: better_call.Middleware[]; path?: string; } & { asResponse?: AsResponse | undefined; returnHeaders?: ReturnHeaders | undefined; }): Promise<[AsResponse] extends [true] ? Response : [ReturnHeaders] extends [true] ? { headers: Headers; response: (O["teams"] extends { enabled: true; } ? { members: InferMember<O>[]; invitations: InferInvitation<O>[]; teams: Team[]; } & { id: string; name: string; createdAt: Date; slug: string; metadata?: any; logo?: string | null | undefined; } : { members: InferMember<O>[]; invitations: InferInvitation<O>[]; } & { id: string; name: string; createdAt: Date; slug: string; metadata?: any; logo?: string | null | undefined; }) | null; } : (O["teams"] extends { enabled: true; } ? { members: InferMember<O>[]; invitations: InferInvitation<O>[]; teams: Team[]; } & { id: string; name: string; createdAt: Date; slug: string; metadata?: any; logo?: string | null | undefined; } : { members: InferMember<O>[]; invitations: InferInvitation<O>[]; } & { id: string; name: string; createdAt: Date; slug: string; metadata?: any; logo?: string | null | undefined; }) | null>; options: { method: "GET"; query: z.ZodOptional<z.ZodObject<{ organizationId: z.ZodOptional<z.ZodString>; organizationSlug: z.ZodOptional<z.ZodString>; }, "strip", z.ZodTypeAny, { organizationId?: string | undefined; organizationSlug?: string | undefined; }, { organizationId?: string | undefined; organizationSlug?: string | undefined; }>>; requireHeaders: true; use: (((inputContext: better_call.MiddlewareInputContext<better_call.MiddlewareOptions>) => Promise<{ orgOptions: OrganizationOptions; roles: typeof defaultRoles & { [key: string]: Role<{}>; }; getSession: (context: GenericEndpointContext) => Promise<{ session: Session & { activeOrganizationId?: string; }; user: User; }>; }>) | ((inputContext: better_call.MiddlewareInputContext<{ use: ((inputContext: better_call.MiddlewareInputContext<better_call.MiddlewareOptions>) => Promise<{ session: { session: Record<string, any> & { id: string; token: string; userId: string; expiresAt: Date; createdAt: Date; updatedAt: Date; ipAddress?: string | null | undefined; userAgent?: string | null | undefined; }; user: Record<string, any> & { id: string; name: string; emailVerified: boolean; email: string; createdAt: Date; updatedAt: Date; image?: string | null | undefined; }; }; }>)[]; }>) => Promise<{ session: { session: Session & { activeOrganizationId?: string; }; user: User; }; }>))[]; metadata: { openapi: { description: string; responses: { "200": { description: string; content: { "application/json": { schema: { type: "object"; description: string; $ref: string; }; }; }; }; }; }; }; } & { use: any[]; }; path: "/organization/get-full-organization"; }; declare function parseRoles(roles: string | string[]): string; interface OrganizationOptions { /** * Configure whether new users are able to create new organizations. * You can also pass a function that returns a boolean. * * @example * ```ts * allowUserToCreateOrganization: async (user) => { * const plan = await getUserPlan(user); * return plan.name === "pro"; * } * ``` * @default true */ allowUserToCreateOrganization?: boolean | ((user: User) => Promise<boolean> | boolean); /** * The maximum number of organizations a user can create. * * You can also pass a function that returns a boolean */ organizationLimit?: number | ((user: User) => Promise<boolean> | boolean); /** * The role that is assigned to the creator of the * organization. * * @default "owner" */ creatorRole?: string; /** * The number of memberships a user can have in an organization. * * @default 100 */ membershipLimit?: number; /** * Configure the roles and permissions for the * organization plugin. */ ac?: AccessControl; /** * Custom permissions for roles. */ roles?: { [key in string]?: Role<any>; }; /** * Support for team. */ teams?: { /** * Enable team features. */ enabled: boolean; /** * Default team configuration */ defaultTeam?: { /** * Enable creating a default team when an organization is created * * @default true */ enabled: boolean; /** * Pass a custom default team creator function */ customCreateDefaultTeam?: (organization: Organization & Record<string, any>, request?: Request) => Promise<Team & Record<string, any>>; }; /** * Maximum number of teams an organization can have. * * You can pass a number or a function that returns a number * * @default "unlimited" * * @param organization * @param request * @returns */ maximumTeams?: ((data: { organizationId: string; session: { user: User; session: Session; } | null; }, request?: Request) => number | Promise<number>) | number; /** * By default, if an organization does only have one team, they'll not be able to remove it. * * You can disable this behavior by setting this to `false. * * @default false */ allowRemovingAllTeams?: boolean; }; /** * The expiration time for the invitation link. * * @default 48 hours */ invitationExpiresIn?: number; /** * The maximum invitation a user can send. * * @default 100 */ invitationLimit?: number | ((data: { user: User; organization: Organization; member: Member; }, ctx: AuthContext) => Promise<number> | number); /** * Cancel pending invitations on re-invite. * * @default true */ cancelPendingInvitationsOnReInvite?: boolean; /** * Send an email with the * invitation link to the user. * * Note: Better Auth doesn't * generate invitation URLs. * You'll need to construct the * URL using the invitation ID * and pass it to the * acceptInvitation endpoint for * the user to accept the * invitation. * * @example * ```ts * sendInvitationEmail: async (data) => { * const url = `https://yourapp.com/organization/ * accept-invitation?id=${data.id}`; * await sendEmail(data.email, "Invitation to join * organization", `Click the link to join the * organization: ${url}`); * } * ``` */ sendInvitationEmail?: (data: { /** * the invitation id */ id: string; /** * the role of the user */ role: string; /** * the email of the user */ email: string; /** * the organization the user is invited to join */ organization: Organization; /** * the invitation object */ invitation: Invitation; /** * the member who is inviting the user */ inviter: Member & { user: User; }; }, /** * The request object */ request?: Request) => Promise<void>; /** * The schema for the organization plugin. */ schema?: { session?: { fields?: { activeOrganizationId?: string; }; }; organization?: { modelName?: string; fields?: { [key in keyof Omit<Organization, "id">]?: string; }; }; member?: { modelName?: string; fields?: { [key in keyof Omit<Member, "id">]?: string; }; }; invitation?: { modelName?: string; fields?: { [key in keyof Omit<Invitation, "id">]?: string; }; }; team?: { modelName?: string; fields?: { [key in keyof Omit<Team, "id">]?: string; }; }; }; /** * Configure how organization deletion is handled */ organizationDeletion?: { /** * disable deleting organization */ disabled?: boolean; /** * A callback that runs before the organization is * deleted * * @param data - organization and user object * @param request - the request object * @returns */ beforeDelete?: (data: { organization: Organization; user: User; }, request?: Request) => Promise<void>; /** * A callback that runs after the organization is * deleted * * @param data - organization and user object * @param request - the request object * @returns */ afterDelete?: (data: { organization: Organization; user: User; }, request?: Request) => Promise<void>; }; organizationCreation?: { disabled?: boolean; beforeCreate?: (data: { organization: Omit<Organization, "id">; user: User; }, request?: Request) => Promise<void | { data: Omit<Organization, "id">; }>; afterCreate?: (data: { organization: Organization; member: Member; user: User; }, request?: Request) => Promise<void>; }; } /** * 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 const organization: <O extends OrganizationOptions>(options?: O) => { id: "organization"; endpoints: (O["teams"] extends { enabled: true; } ? { createTeam: { <AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0: { body: { name: string; organizationId?: string | undefined; }; } & { method?: "POST" | undefined; } & { query?: Record<string, any> | undefined; } & { params?: Record<string, any>; } & { request?: Request; } & { headers?: HeadersInit; } & { asResponse?: boolean; returnHeaders?: boolean; use?: better_call.Middleware[]; path?: string; } & { asResponse?: AsResponse | undefined; returnHeaders?: ReturnHeaders | undefined; }): Promise<[AsResponse] extends [true] ? Response : [ReturnHeaders] extends [true] ? { headers: Headers; response: { id: string; name: string; createdAt: Date; organizationId: string; updatedAt?: Date | undefined; }; } : { id: string; name: string; createdAt: Date; organizationId: string; updatedAt?: Date | undefined; }>; options: { method: "POST"; body: z.ZodObject<{ organizationId: z.ZodOptional<z.ZodString>; name: z.ZodString; }, "strip", z.ZodTypeAny, { name: string; organizationId?: string | undefined; }, { name: string; organizationId?: string | undefined; }>; use: ((inputContext: better_call.MiddlewareInputContext<better_call.MiddlewareOptions>) => Promise<{ orgOptions: OrganizationOptions; roles: typeof defaultRoles & { [key: string]: Role<{}>; }; getSession: (context: GenericEndpointContext) => Promise<{ session: Session & { activeOrganizationId?: string; }; user: User; }>; }>)[]; metadata: { openapi: { description: string; responses: { "200": { description: string; content: { "application/json": { schema: { type: "object"; properties: { id: { type: string; description: string; }; name: { type: string; description: string; }; organizationId: { type: string; description: string; }; createdAt: { type: string; format: string; description: string; }; updatedAt: { type: string; format: string; description: string; }; }; required: string[]; }; }; }; }; }; }; }; } & { use: any[]; }; path: "/organization/create-team"; }; listOrganizationTeams: { <AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0?: ({ body?: undefined; } & { method?: "GET" | undefined; } & { query?: { organizationId?: string | undefined; } | undefined; } & { params?: Record<string, any>; } & { request?: Request; } & { headers?: HeadersInit; } & { asResponse?: boolean; returnHeaders?: boolean; use?: better_call.Middleware[]; path?: string; } & { asResponse?: AsResponse | undefined; returnHeaders?: ReturnHeaders | undefined; }) | undefined): Promise<[AsResponse] extends [true] ? Response : [ReturnHeaders] extends [true] ? { headers: Headers; response: unknown[] | null; } : unknown[] | null>; options: { method: "GET"; query: z.ZodOptional<z.ZodObject<{ organizationId: z.ZodOptional<z.ZodString>; }, "strip", z.ZodTypeAny, { organizationId?: string | undefined; }, { organizationId?: string | undefined; }>>; metadata: { openapi: { description: string; responses: { "200": { description: string; content: { "application/json": { schema: { type: "array"; items: { type: string; properties: { id: { type: string; description: string; }; name: { type: string; description: string; }; organizationId: { type: string; description: string; }; createdAt: { type: string; format: string; description: string; }; updatedAt: { type: string; format: string; description: string; }; }; required: string[]; }; description: string; }; }; }; }; }; }; }; use: (((inputContext: better_call.MiddlewareInputContext<better_call.MiddlewareOptions>) => Promise<{ orgOptions: OrganizationOptions; roles: typeof defaultRoles & { [key: string]: Role<{}>; }; getSession: (context: GenericEndpointContext) => Promise<{ session: Session & { activeOrganizationId?: string; }; user: User; }>; }>) | ((inputContext: better_call.MiddlewareInputContext<{ use: ((inputContext: better_call.MiddlewareInputContext<better_call.MiddlewareOptions>) => Promise<{ session: { session: Record<string, any> & { id: string; token: string; userId: string; expiresAt: Date; createdAt: Date; updatedAt: Date; ipAddress?: string | null | undefined; userAgent?: string | null | undefined; }; user: Record<string, any> & { id: string; name: string; emailVerified: boolean; email: string; createdAt: Date; updatedAt: Date; image?: string | null | undefined; }; }; }>)[]; }>) => Promise<{ session: { session: Session & { activeOrganizationId?: string; }; user: User; }; }>))[]; } & { use: any[]; }; path: "/organization/list-teams"; }; removeTeam: { <AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0: { body: { teamId: string; organizationId?: string | undefined; }; } & { method?: "POST" | undefined; } & { query?: Record<string, any> | undefined; } & { params?: Record<string, any>; } & { request?: Request; } & { headers?: HeadersInit; } & { asResponse?: boolean; returnHeaders?: boolean; use?: better_call.Middleware[]; path?: string; } & { asResponse?: AsResponse | undefined; returnHeaders?: ReturnHeaders | undefined; }): Promise<[AsResponse] extends [true] ? Response : [ReturnHeaders] extends [true] ? { headers: Headers; response: { message: string; } | null; } : { message: string; } | null>; options: { method: "POST"; body: z.ZodObject<{ teamId: z.ZodString; organizationId: z.ZodOptional<z.ZodString>; }, "strip", z.ZodTypeAny, { teamId: string; organizationId?: string | undefined; }, { teamId: string; organizationId?: string | undefined; }>; use: ((inputContext: better_call.MiddlewareInputContext<better_call.MiddlewareOptions>) => Promise<{ orgOptions: OrganizationOptions; roles: typeof defaultRoles & { [key: string]: Role<{}>; }; getSession: (context: GenericEndpointContext) => Promise<{ session: Session & { activeOrganizationId?: string; }; user: User; }>; }>)[]; metadata: { openapi: { description: string; responses: { "200": { description: string; content: { "application/json": { schema: { type: "object"; properties: { message: { type: string; description: string; enum: string[]; }; }; required: string[]; }; }; }; }; }; }; }; } & { use: any[]; }; path: "/organization/remove-team"; }; updateTeam: { <AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0: { body: { data: { id?: string | undefined; name?: string | undefined; createdAt?: Date | undefined; updatedAt?: Date | undefined; organizationId?: string | undefined; }; teamId: string; }; } & { method?: "POST" | undefined; } & { query?: Record<string, any> | undefined; } & { params?: Record<string, any>; } & { request?: Request; } & { headers?: HeadersInit; } & { asResponse?: boolean; returnHeaders?: boolean; use?: better_call.Middleware[]; path?: string; } & { asResponse?: AsResponse | undefined; returnHeaders?: ReturnHeaders | undefined; }): Promise<[AsResponse] extends [true] ? Response : [ReturnHeaders] extends [true] ? { headers: Headers; response: { id: string; name: string; createdAt: Date; organizationId: string; updatedAt?: Date | undefined; } | null; } : { id: string; name: string; createdAt: Date; organizationId: string; updatedAt?: Date | undefined; } | null>; options: { method: "POST"; body: z.ZodObject<{ teamId: z.ZodString; data: z.ZodObject<{ id: z.ZodOptional<z.ZodDefault<z.ZodString>>; name: z.ZodOptional<z.ZodString>; organizationId: z.ZodOptional<z.ZodString>; createdAt: z.ZodOptional<z.ZodDate>; updatedAt: z.ZodOptional<z.ZodOptional<z.ZodDate>>; }, "strip", z.ZodTypeAny, { id?: string | undefined; name?: string | undefined; createdAt?: Date | undefined; updatedAt?: Date | undefined; organizationId?: string | undefined; }, { id?: string | undefined; name?: string | undefined; createdAt?: Date | undefined; updatedAt?: Date | undefined; organizationId?: string | undefined; }>; }, "strip", z.ZodTypeAny, { data: { id?: string | undefined; name?: string | undefined; createdAt?: Date | undefined; updatedAt?: Date | undefined; organizationId?: string | undefined; }; teamId: string; }, { data: { id?: string | undefined; name?: string | undefined; createdAt?: Date | undefined; updatedAt?: Date | undefined; organizationId?: string | undefined; }; teamId: string; }>; use: (((inputContext: better_call.MiddlewareInputContext<better_call.MiddlewareOptions>) => Promise<{ orgOptions: OrganizationOptions; roles: typeof defaultRoles & { [key: string]: Role<{}>; }; getSession: (context: GenericEndpointContext) => Promise<{ session: Session & { activeOrganizationId?: string; }; user: User; }>; }>) | ((inputContext: better_call.MiddlewareInputContext<{ use: ((inputContext: better_call.MiddlewareInputContext<better_call.MiddlewareOptions>) => Promise<{ session: { session: Record<string, any> & { id: string; token: string; userId: string; expiresAt: Date; createdAt: Date; updatedAt: Date; ipAddress?: string | null | undefined; userAgent?: string | null | undefined; }; user: Record<string, any> & { id: string; name: string; emailVerified: boolean; email: string; createdAt: Date; updatedAt: Date; image?: string | null | undefined; }; }; }>)[]; }>) => Promise<{ session: { session: Session & { activeOrganizationId?: string; }; user: User; }; }>))[]; metadata: { openapi: { description: string; responses: { "200": { description: string; content: { "application/json": { schema: { type: "object"; properties: { id: { type: string; description: string; }; name: { type: string; description: string; }; organizationId: { type: string; description: string; }; createdAt: { type: string; format: string; description: string; }; updatedAt: { type: string; format: string; description: string; }; }; required: string[]; }; }; }; }; }; }; }; } & { use: any[]; }; path: "/organization/update-team"; }; } & { createOrganization: { <AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0: { body: { name: string; slug: string; userId?: string | undefined; metadata?: Record<string, any> | undefined; logo?: string | undefined; keepCurrentActiveOrganization?: boolean | undefined; }; } & { method?: "POST" | undefined; } & { query?: Record<string, any> | undefined; } & { params?: Record<string, any>; } & { request?: Request; } & { headers?: HeadersInit; } & { asResponse?: boolean; returnHeaders?: boolean; use?: better_call.Middleware[]; path?: string; } & { asResponse?: AsResponse | undefined; returnHeaders?: ReturnHeaders | undefined; }): Promise<[AsResponse] extends [true] ? Response : [ReturnHeaders] extends [true] ? { headers: Headers; response: { metadata: Record<string, any> | undefined; members: { id: string; userId: string; createdAt: Date; organizationId: string; role: string; teamId?: string | undefined; }[]; id: string; name: string; createdAt: Date; slug: string; logo?: string | null | undefined; } | null; } : { metadata: Record<string, any> | undefined; members: { id: string; userId: string; createdAt: Date; organizationId: string; role: string; teamId?: string | undefined; }[]; id: string; name: string; createdAt: Date; slug: string; logo?: string | null | undefined; } | null>; options: { method: "POST"; body: z.ZodObject<{ name: z.ZodString; slug: z.ZodString; userId: z.ZodOptional<z.ZodString>; logo: z.ZodOptional<z.ZodString>; metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>; keepCurrentActiveOrganization: z.ZodOptional<z.ZodBoolean>; }, "strip", z.ZodTypeAny, { name: string; slug: string; userId?: string | undefined; metadata?: Record<string, any> | undefined; logo?: string | undefined; keepCurrentActiveOrganization?: boolean | undefined; }, { name: string; slug: string; userId?: string | undefined; metadata?: Record<string, any> | undefined; logo?: string | undefined; keepCurrentActiveOrganization?: boolean | undefined; }>; use: ((inputContext: better_call.MiddlewareInputContext<better_call.MiddlewareOptions>) => Promise<{ orgOptions: OrganizationOptions; roles: typeof defaultRoles & { [key: string]: Role<{}>; }; getSession: (context: GenericEndpointContext) => Promise<{ session: Session & { activeOrganizationId?: string; }; user: User; }>; }>)[]; metadata: { openapi: { description: string; responses: { "200": { description: string; content: { "application/json": { schema: { type: "object"; description: string; $ref: string; }; }; }; }; }; }; }; } & { use: any[]; }; path: "/organization/create"; }; updateOrganization: { <AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0: { body: { data: { name?: string | undefined; metadata?: Record<string, any> | undefined; slug?: string | undefined; logo?: string | undefined; }; organizationId?: string | undefined; }; } & { method?: "POST" | undefined; } & { query?: Record<string, any> | undefined; } & { params?: Record<string, any>; } & { request?: Request; } & { headers: HeadersInit; } & { asResponse?: boolean; returnHeaders?: boolean; use?: better_call.Middleware[]; path?: string; } & { asResponse?: AsResponse | undefined; returnHeaders?: ReturnHeaders | undefined; }): Promise<[AsResponse] extends [true] ? Response : [ReturnHeaders] extends [true] ? { headers: Headers; response: { metadata: Record<string, any> | undefined; id: string; name: string; createdAt: Date; slug: string; logo?: string | null | undefined; } | null; } : { metadata: Record<string, any> | undefined; id: string; name: string; createdAt: Date; slug: string; logo?: string | null | undefined; } | null>; options: { method: "POST"; body: z.ZodObject<{ data: z.ZodObject<{ name: z.ZodOptional<z.ZodOptional<z.ZodString>>; slug: z.ZodOptional<z.ZodOptional<z.ZodString>>; logo: z.ZodOptional<z.ZodOptional<z.ZodString>>; metadata: z.ZodOptional<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>>; }, "strip", z.ZodTypeAny, { name?: string | undefined; metadata?: Record<string, any> | undefined; slug?: string | undefined; logo?: string | undefined; }, { name?: string | undefined; metadata?: Record<string, any> | undefined; slug?: string | undefined; logo?: string | undefined; }>; organizationId: z.ZodOptional<z.ZodString>; }, "strip", z.ZodTypeAny, { data: { name?: string | undefined; metadata?: Record<string, any> | undefined; slug?: string | undefined; logo?: string | undefined; }; organizationId?: string | undefined; }, { data: { name?: string | undefined; metadata?: Record<string, any> | undefined; slug?: string | undefined; logo?: string | undefined; }; organizationId?: string | undefined; }>; requireHeaders: true; use: ((inputContext: better_call.MiddlewareInputContext<better_call.MiddlewareOptions>) => Promise<{ orgOptions: OrganizationOptions; roles: typeof defaultRoles & { [key: string]: Role<{}>; }; getSession: (context: GenericEndpointContext) => Promise<{ session: Session & { activeOrganizationId?: string; }; user: User; }>; }>)[]; metadata: { openapi: { description: string; responses: { "200": { descri