import {betterAuth} from 'better-auth' import { prismaAdapter } from 'better-auth/adapters/prisma' import prisma from './prisma' import { organization } from 'better-auth/plugins/organization' export const auth = betterAuth({ database: prismaAdapter(prisma, { provider: 'postgresql' }), emailAndPassword: { enabled: true, }, user: { modelName: 'User', fields: { id: 'id', name: 'nome', email: 'email', password: 'senha', image: 'imgPerfil', createdAt: 'createdAt', updatedAt: 'updatedAt' }, additionalFields: { nomesocial: { type: 'string', required: false, }, celular: { type: 'string', }, cpf: { type: 'string', }, nascimento: { type: 'date', }, nacionalidade: { type: 'string', required: false, }, rg: { type: 'string', required: false, }, orgaoEmissor: { type: 'string', required: false, }, passaporte: { type: 'string', required: false, }, sexo: { type: 'string', required: false, }, estadoCivil: { type: 'string', required: false, }, nomeMae: { type: 'string', required: false, }, nomePai: { type: 'string', required: false, }, obs: { type: 'string', required: false, }, telefone: { type: 'string', required: false, }, cep: { type: 'string', required: false, }, endereco: { type: 'string', required: false, }, numero: { type: 'string', required: false, }, complemento: { type: 'string', required: false, }, bairro: { type: 'string', required: false, }, cidade: { type: 'string', required: false, }, estado: { type: 'string', required: false, }, pais: { type: 'string', required: false, }, } }, account:{ modelName: 'cadastro', }, advanced: { cookies: { session: { name: 'alpha-session', sameSite: 'lax', secure: process.env.NODE_ENV === 'production', httpOnly: true, } } }, plugins: [ organization({ allowUserToCreateOrganization: true, creatorRole: 'admin', teams: { enabled: true, maximumTeams: 5, creatorRole: 'admin', }, schema:{ organization: { modelName: 'filial', fields: { id: 'id', name: 'nomefantasia', slug: 'slug', logo: 'logo', createdAt: 'createdAt', updatedAt: 'updatedAt' }, additionalFields: { cnpj: { type: 'string', required: true, }, razaoSocial: { type: 'string', required: true, }, telefone: { type: 'string', required: true, }, email: { type: 'string', required: true, }, cep: { type: 'string', required: false, }, endereco: { type: 'string', required: false, }, numero: { type: 'string', required: false, }, complemento: { type: 'string', required: false, }, bairro: { type: 'string', required: false, }, cidade: { type: 'string', required: false, }, estado: { type: 'string', required: false, }, pais: { type: 'string', required: false, }, matrizId: { type: 'string', required: false, } } }, member: { modelName: 'conta', fields: { id: 'id', userId: 'userId', organizationId: 'filialId', teamId: 'corpoDocenteId', role: 'perfil', createdAt: 'createdAt', updatedAt: 'updatedAt' } }, team: { modelName: 'corpodocente', fields: { id: 'id', name: 'nome', slug: 'slug', logo: 'logo', organizationId: 'filialId', createdAt: 'createdAt', updatedAt: 'updatedAt' }, additionalFields: { descricao: { type: 'string', required: false, }, etiqueta: { type: 'string', required: false, }, } }, session: { modelName: 'session', fields: { id: 'token', userId: 'userId', activeOrganizationId: 'filialId', createdAt: 'createdAt', teamId: 'corpoDocenteId', }, additionalFields: { perfil:{ type: 'string', required: false, } } }, invitation: { modelName: 'convite', fields: { id: 'id', email: 'email', inviterId: 'inviterId', organizationId: 'filialId', teamId: 'corpoDocenteId', role: 'perfil', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt' } }, } }) ], })