// Copyright 2024 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 #![warn(clippy::expect_used)] #![warn(clippy::unwrap_used)] use async_trait::async_trait; use nym_crypto::asymmetric::ed25519; use nym_gateway_requests::SharedSymmetricKey; use std::error::Error; pub mod backend; pub mod error; pub mod types; // todo: export port types pub use crate::types::*; pub use backend::mem_backend::{InMemGatewaysDetails, InMemStorageError}; pub use error::BadGateway; #[cfg(all(not(target_arch = "wasm32"), feature = "fs-gateways-storage"))] pub use backend::fs_backend::{error::StorageError, OnDiskGatewaysDetails}; #[cfg_attr(target_arch = "wasm32", async_trait(?Send))] #[cfg_attr(not(target_arch = "wasm32"), async_trait)] pub trait GatewaysDetailsStore { type StorageError: Error + From; /// Returns details of the currently active gateway, if available. async fn active_gateway(&self) -> Result; /// Set the provided gateway as the currently active gateway. async fn set_active_gateway(&self, gateway_id: &str) -> Result<(), Self::StorageError>; /// Returns details of all registered gateways. async fn all_gateways(&self) -> Result, Self::StorageError>; /// Return identity keys of all registered gateways. async fn all_gateways_identities(&self) -> Result, Self::StorageError> { Ok(self .all_gateways() .await? .into_iter() .map(|gateway| gateway.details.gateway_id()) .collect()) } /// Check if the gateway with the provided id already exists in the store. async fn has_gateway_details(&self, gateway_id: &str) -> Result; /// Returns details of the particular gateway. async fn load_gateway_details( &self, gateway_id: &str, ) -> Result; /// Store the provided gateway details. async fn store_gateway_details( &self, details: &GatewayRegistration, ) -> Result<(), Self::StorageError>; async fn upgrade_stored_remote_gateway_key( &self, gateway_id: ed25519::PublicKey, updated_key: &SharedSymmetricKey, ) -> Result<(), Self::StorageError>; /// Remove given gateway details from the underlying store. async fn remove_gateway_details(&self, gateway_id: &str) -> Result<(), Self::StorageError>; }