UNPKG

better-auth

Version:

The most comprehensive authentication framework for TypeScript.

1 lines • 13.7 kB
{"version":3,"file":"schema.mjs","names":[],"sources":["../../../src/plugins/organization/schema.ts"],"sourcesContent":["import type { BetterAuthPluginDBSchema } from \"@better-auth/core/db\";\nimport type { Prettify } from \"better-call\";\nimport * as z from \"zod\";\nimport type { InferAdditionalFieldsFromPluginOptions } from \"../../db\";\nimport { generateId } from \"../../utils\";\nimport type { OrganizationOptions } from \"./types\";\n\ntype InferSchema<\n\tSchema extends BetterAuthPluginDBSchema,\n\tTableName extends string,\n\tDefaultFields,\n> = {\n\tmodelName: Schema[TableName] extends { modelName: infer M }\n\t\t? M extends string\n\t\t\t? M\n\t\t\t: string\n\t\t: string;\n\tfields: {\n\t\t[K in keyof DefaultFields]: DefaultFields[K];\n\t} & (Schema[TableName] extends { additionalFields: infer F } ? F : {});\n};\n\ninterface OrganizationRoleDefaultFields {\n\torganizationId: {\n\t\ttype: \"string\";\n\t\trequired: true;\n\t\treferences: {\n\t\t\tmodel: \"organization\";\n\t\t\tfield: \"id\";\n\t\t};\n\t};\n\trole: {\n\t\ttype: \"string\";\n\t\trequired: true;\n\t};\n\tpermission: {\n\t\ttype: \"string\";\n\t\trequired: true;\n\t};\n\tcreatedAt: {\n\t\ttype: \"date\";\n\t\trequired: true;\n\t\tdefaultValue: Date;\n\t};\n\tupdatedAt: {\n\t\ttype: \"date\";\n\t\trequired: false;\n\t};\n}\n\ninterface TeamDefaultFields {\n\tname: {\n\t\ttype: \"string\";\n\t\trequired: true;\n\t};\n\torganizationId: {\n\t\ttype: \"string\";\n\t\trequired: true;\n\t\treferences: {\n\t\t\tmodel: \"organization\";\n\t\t\tfield: \"id\";\n\t\t};\n\t};\n\tcreatedAt: {\n\t\ttype: \"date\";\n\t\trequired: true;\n\t};\n\tupdatedAt: {\n\t\ttype: \"date\";\n\t\trequired: false;\n\t};\n}\n\ninterface TeamMemberDefaultFields {\n\tteamId: {\n\t\ttype: \"string\";\n\t\trequired: true;\n\t\treferences: {\n\t\t\tmodel: \"team\";\n\t\t\tfield: \"id\";\n\t\t};\n\t};\n\tuserId: {\n\t\ttype: \"string\";\n\t\trequired: true;\n\t\treferences: {\n\t\t\tmodel: \"user\";\n\t\t\tfield: \"id\";\n\t\t};\n\t};\n\tcreatedAt: {\n\t\ttype: \"date\";\n\t\trequired: false;\n\t};\n}\n\ninterface OrganizationDefaultFields {\n\tname: {\n\t\ttype: \"string\";\n\t\trequired: true;\n\t\tsortable: true;\n\t};\n\tslug: {\n\t\ttype: \"string\";\n\t\trequired: true;\n\t\tunique: true;\n\t\tsortable: true;\n\t};\n\tlogo: {\n\t\ttype: \"string\";\n\t\trequired: false;\n\t};\n\tcreatedAt: {\n\t\ttype: \"date\";\n\t\trequired: true;\n\t};\n\tupdatedAt: {\n\t\ttype: \"date\";\n\t\trequired: false;\n\t};\n}\n\ninterface MemberDefaultFields {\n\torganizationId: {\n\t\ttype: \"string\";\n\t\trequired: true;\n\t\treferences: {\n\t\t\tmodel: \"organization\";\n\t\t\tfield: \"id\";\n\t\t};\n\t};\n\tuserId: {\n\t\ttype: \"string\";\n\t\trequired: true;\n\t\treferences: {\n\t\t\tmodel: \"user\";\n\t\t\tfield: \"id\";\n\t\t};\n\t};\n\trole: {\n\t\ttype: \"string\";\n\t\trequired: true;\n\t\tdefaultValue: \"member\";\n\t};\n\tcreatedAt: {\n\t\ttype: \"date\";\n\t\trequired: true;\n\t};\n}\n\ninterface InvitationDefaultFields {\n\torganizationId: {\n\t\ttype: \"string\";\n\t\trequired: true;\n\t\treferences: {\n\t\t\tmodel: \"organization\";\n\t\t\tfield: \"id\";\n\t\t};\n\t};\n\temail: {\n\t\ttype: \"string\";\n\t\trequired: true;\n\t\tsortable: true;\n\t};\n\trole: {\n\t\ttype: \"string\";\n\t\trequired: true;\n\t\tsortable: true;\n\t};\n\tstatus: {\n\t\ttype: \"string\";\n\t\trequired: true;\n\t\tsortable: true;\n\t\tdefaultValue: \"pending\";\n\t};\n\texpiresAt: {\n\t\ttype: \"date\";\n\t\trequired: false;\n\t};\n\tcreatedAt: {\n\t\ttype: \"date\";\n\t\trequired: true;\n\t\tdefaultValue: Date;\n\t};\n\tinviterId: {\n\t\ttype: \"string\";\n\t\trequired: true;\n\t\treferences: {\n\t\t\tmodel: \"user\";\n\t\t\tfield: \"id\";\n\t\t};\n\t};\n}\n\ninterface SessionDefaultFields {\n\tactiveOrganizationId: {\n\t\ttype: \"string\";\n\t\trequired: false;\n\t};\n}\n\nexport type OrganizationSchema<O extends OrganizationOptions> =\n\tO[\"dynamicAccessControl\"] extends { enabled: true }\n\t\t? {\n\t\t\t\torganizationRole: InferSchema<\n\t\t\t\t\tO[\"schema\"] extends BetterAuthPluginDBSchema ? O[\"schema\"] : {},\n\t\t\t\t\t\"organizationRole\",\n\t\t\t\t\tOrganizationRoleDefaultFields\n\t\t\t\t>;\n\t\t\t} & {\n\t\t\t\tsession: {\n\t\t\t\t\tfields: InferSchema<\n\t\t\t\t\t\tO[\"schema\"] extends BetterAuthPluginDBSchema ? O[\"schema\"] : {},\n\t\t\t\t\t\t\"session\",\n\t\t\t\t\t\tSessionDefaultFields\n\t\t\t\t\t>[\"fields\"];\n\t\t\t\t};\n\t\t\t}\n\t\t: {} & (O[\"teams\"] extends { enabled: true }\n\t\t\t\t? {\n\t\t\t\t\t\tteam: InferSchema<\n\t\t\t\t\t\t\tO[\"schema\"] extends BetterAuthPluginDBSchema ? O[\"schema\"] : {},\n\t\t\t\t\t\t\t\"team\",\n\t\t\t\t\t\t\tTeamDefaultFields\n\t\t\t\t\t\t>;\n\t\t\t\t\t\tteamMember: InferSchema<\n\t\t\t\t\t\t\tO[\"schema\"] extends BetterAuthPluginDBSchema ? O[\"schema\"] : {},\n\t\t\t\t\t\t\t\"teamMember\",\n\t\t\t\t\t\t\tTeamMemberDefaultFields\n\t\t\t\t\t\t>;\n\t\t\t\t\t}\n\t\t\t\t: {}) & {\n\t\t\t\t\torganization: InferSchema<\n\t\t\t\t\t\tO[\"schema\"] extends BetterAuthPluginDBSchema ? O[\"schema\"] : {},\n\t\t\t\t\t\t\"organization\",\n\t\t\t\t\t\tOrganizationDefaultFields\n\t\t\t\t\t>;\n\t\t\t\t\tmember: InferSchema<\n\t\t\t\t\t\tO[\"schema\"] extends BetterAuthPluginDBSchema ? O[\"schema\"] : {},\n\t\t\t\t\t\t\"member\",\n\t\t\t\t\t\tMemberDefaultFields\n\t\t\t\t\t>;\n\t\t\t\t\tinvitation: {\n\t\t\t\t\t\tmodelName: O[\"schema\"] extends BetterAuthPluginDBSchema\n\t\t\t\t\t\t\t? InferSchema<\n\t\t\t\t\t\t\t\t\tO[\"schema\"],\n\t\t\t\t\t\t\t\t\t\"invitation\",\n\t\t\t\t\t\t\t\t\tInvitationDefaultFields\n\t\t\t\t\t\t\t\t>[\"modelName\"]\n\t\t\t\t\t\t\t: string;\n\t\t\t\t\t\tfields: InferSchema<\n\t\t\t\t\t\t\tO[\"schema\"] extends BetterAuthPluginDBSchema ? O[\"schema\"] : {},\n\t\t\t\t\t\t\t\"invitation\",\n\t\t\t\t\t\t\tInvitationDefaultFields\n\t\t\t\t\t\t>[\"fields\"] &\n\t\t\t\t\t\t\t(O extends { teams: { enabled: true } }\n\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\tteamId: {\n\t\t\t\t\t\t\t\t\t\t\ttype: \"string\";\n\t\t\t\t\t\t\t\t\t\t\trequired: false;\n\t\t\t\t\t\t\t\t\t\t\tsortable: true;\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t: {});\n\t\t\t\t\t};\n\t\t\t\t\tsession: {\n\t\t\t\t\t\tfields: InferSchema<\n\t\t\t\t\t\t\tO[\"schema\"] extends BetterAuthPluginDBSchema ? O[\"schema\"] : {},\n\t\t\t\t\t\t\t\"session\",\n\t\t\t\t\t\t\tSessionDefaultFields\n\t\t\t\t\t\t>[\"fields\"] &\n\t\t\t\t\t\t\t(O[\"teams\"] extends { enabled: true }\n\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\tactiveTeamId: {\n\t\t\t\t\t\t\t\t\t\t\ttype: \"string\";\n\t\t\t\t\t\t\t\t\t\t\trequired: false;\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t: {});\n\t\t\t\t\t};\n\t\t\t\t};\n\nexport const roleSchema = z.string();\nexport const invitationStatus = z\n\t.enum([\"pending\", \"accepted\", \"rejected\", \"canceled\"])\n\t.default(\"pending\");\n\nexport const organizationSchema = z.object({\n\tid: z.string().default(generateId),\n\tname: z.string(),\n\tslug: z.string(),\n\tlogo: z.string().nullish().optional(),\n\tmetadata: z\n\t\t.record(z.string(), z.unknown())\n\t\t.or(z.string().transform((v) => JSON.parse(v)))\n\t\t.optional(),\n\tcreatedAt: z.date(),\n});\n\nexport const memberSchema = z.object({\n\tid: z.string().default(generateId),\n\torganizationId: z.string(),\n\tuserId: z.coerce.string(),\n\trole: roleSchema,\n\tcreatedAt: z.date().default(() => new Date()),\n});\n\nexport const invitationSchema = z.object({\n\tid: z.string().default(generateId),\n\torganizationId: z.string(),\n\temail: z.string(),\n\trole: roleSchema,\n\tstatus: invitationStatus,\n\tteamId: z.string().nullish(),\n\tinviterId: z.string(),\n\texpiresAt: z.date(),\n\tcreatedAt: z.date().default(() => new Date()),\n});\n\nexport const teamSchema = z.object({\n\tid: z.string().default(generateId),\n\tname: z.string().min(1),\n\torganizationId: z.string(),\n\tcreatedAt: z.date(),\n\tupdatedAt: z.date().optional(),\n});\n\nexport const teamMemberSchema = z.object({\n\tid: z.string().default(generateId),\n\tteamId: z.string(),\n\tuserId: z.string(),\n\tcreatedAt: z.date().default(() => new Date()),\n});\n\nexport const organizationRoleSchema = z.object({\n\tid: z.string().default(generateId),\n\torganizationId: z.string(),\n\trole: z.string(),\n\tpermission: z.record(z.string(), z.array(z.string())),\n\tcreatedAt: z.date().default(() => new Date()),\n\tupdatedAt: z.date().optional(),\n});\n\nexport type Organization = z.infer<typeof organizationSchema>;\nexport type Member = z.infer<typeof memberSchema>;\nexport type TeamMember = z.infer<typeof teamMemberSchema>;\nexport type Team = z.infer<typeof teamSchema>;\nexport type Invitation = z.infer<typeof invitationSchema>;\nexport type InvitationInput = z.input<typeof invitationSchema>;\nexport type MemberInput = z.input<typeof memberSchema>;\nexport type TeamMemberInput = z.input<typeof teamMemberSchema>;\nexport type OrganizationInput = z.input<typeof organizationSchema>;\nexport type TeamInput = z.infer<typeof teamSchema>;\nexport type OrganizationRole = z.infer<typeof organizationRoleSchema>;\n\nconst defaultRoles = [\"admin\", \"member\", \"owner\"] as const;\nexport const defaultRolesSchema = z.union([\n\tz.enum(defaultRoles),\n\tz.array(z.enum(defaultRoles)),\n]);\n\ntype CustomRolesSchema<O> = O extends { roles: { [key: string]: any } }\n\t? z.ZodType<keyof O[\"roles\"] | Array<keyof O[\"roles\"]>>\n\t: typeof defaultRolesSchema;\n\nexport type InferOrganizationZodRolesFromOption<\n\tO extends OrganizationOptions | undefined,\n> = CustomRolesSchema<O>;\n\nexport type InferOrganizationRolesFromOption<\n\tO extends OrganizationOptions | undefined,\n> = O extends { roles: any }\n\t? keyof O[\"roles\"] extends infer K extends string\n\t\t? K\n\t\t: \"admin\" | \"member\" | \"owner\"\n\t: \"admin\" | \"member\" | \"owner\";\n\nexport type InvitationStatus = \"pending\" | \"accepted\" | \"rejected\" | \"canceled\";\n\nexport type InferMember<\n\tO extends OrganizationOptions,\n\tisClientSide extends boolean = true,\n> = Prettify<\n\t(O[\"teams\"] extends {\n\t\tenabled: true;\n\t}\n\t\t? {\n\t\t\t\tid: string;\n\t\t\t\torganizationId: string;\n\t\t\t\trole: InferOrganizationRolesFromOption<O>;\n\t\t\t\tcreatedAt: Date;\n\t\t\t\tuserId: string;\n\t\t\t\tteamId?: string | undefined;\n\t\t\t\tuser: {\n\t\t\t\t\tid: string;\n\t\t\t\t\temail: string;\n\t\t\t\t\tname: string;\n\t\t\t\t\timage?: string | undefined;\n\t\t\t\t};\n\t\t\t}\n\t\t: {\n\t\t\t\tid: string;\n\t\t\t\torganizationId: string;\n\t\t\t\trole: InferOrganizationRolesFromOption<O>;\n\t\t\t\tcreatedAt: Date;\n\t\t\t\tuserId: string;\n\t\t\t\tuser: {\n\t\t\t\t\tid: string;\n\t\t\t\t\temail: string;\n\t\t\t\t\tname: string;\n\t\t\t\t\timage?: string | undefined;\n\t\t\t\t};\n\t\t\t}) &\n\t\tInferAdditionalFieldsFromPluginOptions<\"member\", O, isClientSide>\n>;\n\nexport type InferOrganization<\n\tO extends OrganizationOptions,\n\tisClientSide extends boolean = true,\n> = Prettify<\n\tOrganization &\n\t\tInferAdditionalFieldsFromPluginOptions<\"organization\", O, isClientSide>\n>;\n\nexport type InferTeam<\n\tO extends OrganizationOptions,\n\tisClientSide extends boolean = true,\n> = Prettify<\n\tTeam & InferAdditionalFieldsFromPluginOptions<\"team\", O, isClientSide>\n>;\n\nexport type InferInvitation<\n\tO extends OrganizationOptions,\n\tisClientSide extends boolean = true,\n> = Prettify<\n\t(O[\"teams\"] extends {\n\t\tenabled: true;\n\t}\n\t\t? {\n\t\t\t\tid: string;\n\t\t\t\torganizationId: string;\n\t\t\t\temail: string;\n\t\t\t\trole: InferOrganizationRolesFromOption<O>;\n\t\t\t\tstatus: InvitationStatus;\n\t\t\t\tinviterId: string;\n\t\t\t\texpiresAt: Date;\n\t\t\t\tcreatedAt: Date;\n\t\t\t\tteamId?: string | undefined;\n\t\t\t}\n\t\t: {\n\t\t\t\tid: string;\n\t\t\t\torganizationId: string;\n\t\t\t\temail: string;\n\t\t\t\trole: InferOrganizationRolesFromOption<O>;\n\t\t\t\tstatus: InvitationStatus;\n\t\t\t\tinviterId: string;\n\t\t\t\texpiresAt: Date;\n\t\t\t\tcreatedAt: Date;\n\t\t\t}) &\n\t\tInferAdditionalFieldsFromPluginOptions<\"invitation\", O, isClientSide>\n>;\n"],"mappings":";;;;AA0RA,MAAa,aAAa,EAAE,QAAQ;AACpC,MAAa,mBAAmB,EAC9B,KAAK;CAAC;CAAW;CAAY;CAAY;CAAW,CAAC,CACrD,QAAQ,UAAU;AAEpB,MAAa,qBAAqB,EAAE,OAAO;CAC1C,IAAI,EAAE,QAAQ,CAAC,QAAQ,WAAW;CAClC,MAAM,EAAE,QAAQ;CAChB,MAAM,EAAE,QAAQ;CAChB,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,UAAU;CACrC,UAAU,EACR,OAAO,EAAE,QAAQ,EAAE,EAAE,SAAS,CAAC,CAC/B,GAAG,EAAE,QAAQ,CAAC,WAAW,MAAM,KAAK,MAAM,EAAE,CAAC,CAAC,CAC9C,UAAU;CACZ,WAAW,EAAE,MAAM;CACnB,CAAC;AAEF,MAAa,eAAe,EAAE,OAAO;CACpC,IAAI,EAAE,QAAQ,CAAC,QAAQ,WAAW;CAClC,gBAAgB,EAAE,QAAQ;CAC1B,QAAQ,EAAE,OAAO,QAAQ;CACzB,MAAM;CACN,WAAW,EAAE,MAAM,CAAC,8BAAc,IAAI,MAAM,CAAC;CAC7C,CAAC;AAEF,MAAa,mBAAmB,EAAE,OAAO;CACxC,IAAI,EAAE,QAAQ,CAAC,QAAQ,WAAW;CAClC,gBAAgB,EAAE,QAAQ;CAC1B,OAAO,EAAE,QAAQ;CACjB,MAAM;CACN,QAAQ;CACR,QAAQ,EAAE,QAAQ,CAAC,SAAS;CAC5B,WAAW,EAAE,QAAQ;CACrB,WAAW,EAAE,MAAM;CACnB,WAAW,EAAE,MAAM,CAAC,8BAAc,IAAI,MAAM,CAAC;CAC7C,CAAC;AAEF,MAAa,aAAa,EAAE,OAAO;CAClC,IAAI,EAAE,QAAQ,CAAC,QAAQ,WAAW;CAClC,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE;CACvB,gBAAgB,EAAE,QAAQ;CAC1B,WAAW,EAAE,MAAM;CACnB,WAAW,EAAE,MAAM,CAAC,UAAU;CAC9B,CAAC;AAEF,MAAa,mBAAmB,EAAE,OAAO;CACxC,IAAI,EAAE,QAAQ,CAAC,QAAQ,WAAW;CAClC,QAAQ,EAAE,QAAQ;CAClB,QAAQ,EAAE,QAAQ;CAClB,WAAW,EAAE,MAAM,CAAC,8BAAc,IAAI,MAAM,CAAC;CAC7C,CAAC;AAEF,MAAa,yBAAyB,EAAE,OAAO;CAC9C,IAAI,EAAE,QAAQ,CAAC,QAAQ,WAAW;CAClC,gBAAgB,EAAE,QAAQ;CAC1B,MAAM,EAAE,QAAQ;CAChB,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;CACrD,WAAW,EAAE,MAAM,CAAC,8BAAc,IAAI,MAAM,CAAC;CAC7C,WAAW,EAAE,MAAM,CAAC,UAAU;CAC9B,CAAC;AAcF,MAAM,eAAe;CAAC;CAAS;CAAU;CAAQ;AACjD,MAAa,qBAAqB,EAAE,MAAM,CACzC,EAAE,KAAK,aAAa,EACpB,EAAE,MAAM,EAAE,KAAK,aAAa,CAAC,CAC7B,CAAC"}