organization({ allowUserToCreateOrganization: true, ac, roles, dynamicAccessControl: { enabled: true, maximumRolesPerOrganization: 50, }, teams: { enabled: true, defaultTeam: { enabled: false, }, }, schema: { organization: { modelName: 'organizations', fields: { name: 'name', slug: 'slug', logo: 'logo', metadata: 'metadata', createdAt: 'created_at', updatedAt: 'updated_at', }, additionalFields: { description: { type: 'string', nullable: true, }, }, }, member: { modelName: 'members', fields: { userId: 'user_id', organizationId: 'organization_id', role: 'role', createdAt: 'created_at', updatedAt: 'updated_at', }, }, invitation: { modelName: 'invitations', fields: { email: 'email', inviterId: 'inviter_id', organizationId: 'organization_id', teamId: 'team_id', role: 'role', status: 'status', expiresAt: 'expires_at', }, }, team: { modelName: 'teams', fields: { name: 'name', organizationId: 'organization_id', createdAt: 'created_at', updatedAt: 'updated_at', }, additionalFields: { slug: { type: 'string', required: true, input: true, unique: true, fieldName: 'slug', }, description: { type: 'string', required: false, input: true, fieldName: 'description', }, logo: { type: 'string', required: false, input: true, fieldName: 'logo', }, hasCustomDomain: { type: 'boolean', required: false, defaultValue: false, input: true, fieldName: 'has_custom_domain', }, priority: { fieldName: 'priority', type: 'number', nullable: true, }, }, }, teamMember: { modelName: 'team_members', fields: { teamId: 'team_id', userId: 'user_id', createdAt: 'created_at', updatedAt: 'updated_at', }, additionalFields: { role: { type: 'string', nullable: false, }, }, }, session: { modelName: 'sessions', fields: { activeOrganizationId: 'active_organization_id', activeTeamId: 'active_team_id', }, }, organizationRole: { modelName: 'organization_roles', fields: { organizationId: 'organization_id', role: 'role', permission: 'permission', createdAt: 'created_at', updatedAt: 'updated_at', }, }, }, async sendInvitationEmail(data) { const inviteLink = `${SITE_PATH}/${PATHS.INVITATION_ACCEPT_URL}/${data.id}` const result = await sendOrganizationInvitation({ email: data.email, invitedByUsername: data.inviter.user.name, invitedByEmail: data.inviter.user.email, teamName: data.organization.name, role: data.role, inviteLink, invitationId: data.id, }) if (!result.success) { console.error( `[Auth] Failed to send organization invitation:`, result.error, ) throw new Error(result.error || 'Failed to send invitation email') } }, }),