better-auth-api 1.0.0-alpha.5

Plugin implementations for better-auth
use super::types::OrganizationResponse;
use better_auth_core::{
    AuthContext, AuthResult, AuthSchema, FieldValue, FromFieldMap, Team, entity::AuthOrganization,
};

pub(super) fn invitation_team_id_is_declared(config: &super::OrganizationConfig) -> bool {
    config.teams.enabled || config.schema.invitation.fields().contains_key("teamId")
}

pub(super) fn invitation_snapshot(
    mut invitation: better_auth_core::Invitation,
    config: &super::OrganizationConfig,
) -> better_auth_core::Invitation {
    if !invitation_team_id_is_declared(config) {
        invitation.team_id = better_auth_core::SchemaValue::Undefined;
    }
    invitation
}

pub(super) fn organization(
    organization: &impl AuthOrganization,
    ctx: &AuthContext<impl AuthSchema>,
) -> AuthResult<OrganizationResponse> {
    let fields =
        organization_value(organization.field_values()?.into(), ctx)?.enumerable_fields()?;
    OrganizationResponse::from_field_values(fields)
}

pub(super) fn organization_value(
    value: FieldValue,
    ctx: &AuthContext<impl AuthSchema>,
) -> AuthResult<FieldValue> {
    match ctx.extensions.get::<super::OrganizationPlugin>() {
        Some(plugin) => plugin.config.schema.organization.filter_output_value(value),
        None => Ok(value),
    }
}

pub(super) fn team(
    team: Team,
    config: &super::OrganizationConfig,
) -> better_auth_core::AuthResult<Team> {
    team.filter_output_fields(&config.schema.team)
}