harn-serve 0.10.124

Shared outbound workflow server core for Harn adapters
use std::sync::Arc;

use harn_vm::event_log::AnyEventLog;
use harn_vm::{ConnectorRegistry, MetricsRegistry, RateLimitConfig, RateLimiterFactory};

use crate::DispatchError;

pub(super) async fn install_worker_connector_clients(
    registry: ConnectorRegistry,
    event_log: Arc<AnyEventLog>,
    secrets: Arc<dyn harn_vm::secrets::SecretProvider>,
) -> Result<harn_vm::ActiveConnectorClientsGuard, DispatchError> {
    let metrics = Arc::new(MetricsRegistry::default());
    let inbox = Arc::new(
        harn_vm::InboxIndex::new(event_log.clone(), metrics.clone())
            .await
            .map_err(|error| {
                DispatchError::Execution(format!(
                    "failed to initialize worker connector inbox: {error}"
                ))
            })?,
    );
    registry
        .init_all(harn_vm::ConnectorCtx {
            event_log,
            secrets,
            inbox,
            metrics,
            rate_limiter: Arc::new(RateLimiterFactory::new(RateLimitConfig::default())),
        })
        .await
        .map_err(|error| {
            DispatchError::Execution(format!("failed to initialize worker connector: {error}"))
        })?;
    Ok(harn_vm::scope_active_connector_clients(
        registry.client_map().await,
    ))
}