#[cfg(feature = "webhooks")]
use fraiseql_webhooks::{CredentialLocation, SchemeConfig, SignatureEncoding};
pub mod error_sanitization;
pub mod pool_tuning;
#[cfg(test)]
mod tests;
pub use error_sanitization::{ErrorSanitizationConfig, ErrorSanitizer};
#[allow(deprecated)] pub use pool_tuning::{PoolPressureMonitorConfig, PoolTuningConfig};
#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)]
#[serde(deny_unknown_fields)]
pub struct UsagePersistenceConfig {
#[serde(default = "default_flush_interval_secs")]
pub flush_interval_secs: u64,
}
const fn default_flush_interval_secs() -> u64 {
60
}
#[cfg(feature = "webhooks")]
#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
#[serde(deny_unknown_fields)]
pub struct WebhookRouteConfig {
#[serde(default)]
pub secret_env: Option<String>,
pub provider: String,
#[serde(default)]
pub path: Option<String>,
#[serde(default)]
pub public_url: Option<String>,
#[serde(default)]
pub credential: Option<CredentialLocation>,
#[serde(default)]
pub encoding: Option<SignatureEncoding>,
#[serde(default)]
pub prefix: Option<String>,
#[serde(default)]
pub header_prefix: Option<String>,
#[serde(default)]
pub jwks_uri: Option<String>,
#[serde(default)]
pub algorithms: Option<Vec<String>>,
#[serde(default)]
pub audience: Option<String>,
#[serde(default)]
pub event_type_claim: Option<String>,
#[serde(default)]
pub payload_claim: Option<String>,
#[serde(default)]
pub id_claim: Option<String>,
#[serde(default)]
pub body_hash_claim: Option<String>,
#[serde(default)]
pub max_age_secs: Option<u64>,
}
#[cfg(feature = "webhooks")]
impl WebhookRouteConfig {
#[must_use]
pub fn scheme_config(&self) -> SchemeConfig {
SchemeConfig {
credential: self.credential.clone(),
encoding: self.encoding,
prefix: self.prefix.clone(),
header_prefix: self.header_prefix.clone(),
jwks_uri: self.jwks_uri.clone(),
algorithms: self.algorithms.clone(),
audience: self.audience.clone(),
event_type_claim: self.event_type_claim.clone(),
payload_claim: self.payload_claim.clone(),
id_claim: self.id_claim.clone(),
body_hash_claim: self.body_hash_claim.clone(),
max_age_secs: self.max_age_secs,
}
}
}