/* * Copyright (c) 2022-2024 Niko Bonnieure, Par le Peuple, NextGraph.org developers * All rights reserved. * Licensed under the Apache License, Version 2.0 * * or the MIT license , * at your option. All files in the project carrying such * notice may not be copied, modified, or distributed except * according to those terms. */ //! Trait for ServerBroker use std::path::PathBuf; use std::sync::Arc; use async_std::sync::Mutex; use ng_repo::block_storage::BlockStorage; use ng_repo::errors::*; use ng_repo::types::*; use crate::app_protocol::{AppRequest, AppSessionStart, AppSessionStartResponse, AppSessionStop}; use crate::broker::ClientPeerId; use crate::connection::NoiseFSM; use crate::types::*; #[async_trait::async_trait] pub trait IServerBroker: Send + Sync { fn get_path_users(&self) -> PathBuf; fn get_block_storage(&self) -> Arc>; fn put_block(&self, overlay_id: &OverlayId, block: Block) -> Result<(), ServerError>; fn has_block(&self, overlay_id: &OverlayId, block_id: &BlockId) -> Result<(), ServerError>; fn get_block(&self, overlay_id: &OverlayId, block_id: &BlockId) -> Result; async fn create_user(&self, broker_id: &DirectPeerId) -> Result; fn get_user(&self, user_id: PubKey) -> Result; fn get_user_credentials(&self, user_id: &PubKey) -> Result; fn add_user_credentials( &self, user_id: &PubKey, credentials: &Credentials, ) -> Result<(), ProtocolError>; fn add_user(&self, user_id: PubKey, is_admin: bool) -> Result<(), ProtocolError>; fn del_user(&self, user_id: PubKey) -> Result<(), ProtocolError>; fn list_users(&self, admins: bool) -> Result, ProtocolError>; fn list_invitations( &self, admin: bool, unique: bool, multi: bool, ) -> Result)>, ProtocolError>; fn add_invitation( &self, invite_code: &InvitationCode, expiry: u32, memo: &Option, ) -> Result<(), ProtocolError>; fn get_invitation_type(&self, invite: [u8; 32]) -> Result; fn remove_invitation(&self, invite: [u8; 32]) -> Result<(), ProtocolError>; async fn app_process_request( &self, req: AppRequest, request_id: i64, fsm: &Mutex, ) -> Result<(), ServerError>; async fn app_session_start( &self, req: AppSessionStart, remote_peer_id: DirectPeerId, local_peer_id: DirectPeerId, ) -> Result; async fn app_session_stop( &self, req: AppSessionStop, remote_peer_id: &DirectPeerId, ) -> Result; fn next_seq_for_peer(&self, peer: &PeerId, seq: u64) -> Result<(), ServerError>; fn get_repo_pin_status( &self, overlay: &OverlayId, repo: &RepoHash, user_id: &UserId, ) -> Result; async fn pin_repo_write( &self, overlay: &OverlayAccess, repo: &RepoHash, user_id: &UserId, ro_topics: &Vec, rw_topics: &Vec, overlay_root_topic: &Option, expose_outer: bool, peer: &ClientPeerId, ) -> Result; async fn pin_repo_read( &self, overlay: &OverlayId, repo: &RepoHash, user_id: &UserId, ro_topics: &Vec, peer: &ClientPeerId, ) -> Result; async fn topic_sub( &self, overlay: &OverlayId, repo: &RepoHash, topic: &TopicId, user_id: &UserId, publisher: Option<&PublisherAdvert>, peer: &ClientPeerId, ) -> Result; fn get_commit(&self, overlay: &OverlayId, id: &ObjectId) -> Result, ServerError>; async fn dispatch_event( &self, overlay: &OverlayId, event: Event, user_id: &UserId, remote_peer: &PubKey, ) -> Result, ServerError>; async fn remove_all_subscriptions_of_client(&self, client: &ClientPeerId); fn topic_sync_req( &self, overlay: &OverlayId, topic: &TopicId, known_heads: &Vec, target_heads: &Vec, known_commits: &Option, ) -> Result, ServerError>; }