ceramic_config/
convert.rs

1use crate::{Anchor, LogLevel, Metrics, NetworkIdentifier};
2
3fn convert_log_level(level: LogLevel) -> u16 {
4    match level {
5        LogLevel::Error => 0,
6        LogLevel::Warn => 1,
7        LogLevel::Info => 2,
8        LogLevel::Debug => 3,
9        LogLevel::Trace => 4,
10    }
11}
12
13pub fn convert_network_identifier(id: &NetworkIdentifier) -> &'static str {
14    match id {
15        NetworkIdentifier::InMemory => "inmemory",
16        NetworkIdentifier::Local => "local",
17        NetworkIdentifier::Dev => "dev-unstable",
18        NetworkIdentifier::Clay => "testnet-clay",
19        NetworkIdentifier::Mainnet => "mainnet",
20    }
21}
22
23impl Into<crate::daemon::DaemonConfig> for crate::Config {
24    fn into(self) -> crate::daemon::DaemonConfig {
25        let mut node = crate::daemon::DaemonNodeConfig {
26            sync_override: None,
27            gateway: Some(self.node.gateway),
28            stream_cache_limit: None,
29            private_seed_url: None,
30        };
31        let anchor = match self.anchor {
32            Anchor::None => {
33                //TODO: This is a hack to get around the fact that the anchor service must be present
34                Some(crate::daemon::DaemonAnchorConfig {
35                    anchor_service_url: None,
36                    auth_method: None,
37                    ethereum_rpc_url: None,
38                })
39            }
40            Anchor::Ip { url } => {
41                log::warn!("Anchor using {} with IP Authentication. Please see https://composedb.js.org/docs/0.4.x/guides/composedb-server/access-mainnet#updating-to-did-based-authentication to use IP authentication", url);
42                Some(crate::daemon::DaemonAnchorConfig {
43                    anchor_service_url: Some(url),
44                    auth_method: None,
45                    ethereum_rpc_url: None,
46                })
47            }
48            Anchor::RemoteDid {
49                url,
50                private_seed_url,
51            } => {
52                log::info!("Anchor using {} with DID Authentication. Please see https://composedb.js.org/docs/0.4.x/guides/composedb-server/access-mainnet#updating-to-did-based-authentication for more information", url);
53                node.private_seed_url = Some(private_seed_url);
54                Some(crate::daemon::DaemonAnchorConfig {
55                    anchor_service_url: Some(url),
56                    auth_method: Some("did".to_string()),
57                    ethereum_rpc_url: None,
58                })
59            }
60        };
61        let cors = if self.http_api.cors_allowed_origins.is_empty() {
62            None
63        } else {
64            Some(self.http_api.cors_allowed_origins)
65        };
66        let http = Some(crate::daemon::DaemonHttpApiConfig {
67            hostname: Some(self.http_api.hostname),
68            port: Some(self.http_api.port),
69            admin_dids: Some(self.http_api.admin_dids),
70            cors_allowed_origins: cors,
71        });
72        let ipfs = Some(if let crate::Ipfs::Remote(r) = self.ipfs {
73            crate::daemon::DaemonIpfsConfig {
74                mode: Some(crate::daemon::DaemonIpfsConfigMode::Remote),
75                host: Some(r.host),
76                pinning_endpoints: None,
77            }
78        } else {
79            crate::daemon::DaemonIpfsConfig {
80                mode: Some(crate::daemon::DaemonIpfsConfigMode::Bundled),
81                host: None,
82                pinning_endpoints: None,
83            }
84        });
85        let logger = Some(if let Some(l) = self.logger.file {
86            crate::daemon::DaemonLoggerConfig {
87                log_to_files: Some(l.enabled),
88                log_directory: Some(l.directory.to_string_lossy().to_string()),
89                log_level: Some(convert_log_level(self.logger.level)),
90            }
91        } else {
92            crate::daemon::DaemonLoggerConfig {
93                log_to_files: Some(false),
94                log_directory: None,
95                log_level: Some(convert_log_level(self.logger.level)),
96            }
97        });
98        let metrics = if let Metrics::Enabled(url) = self.metrics {
99            crate::daemon::DaemonMetricsConfig {
100                metrics_exporter_enabled: true,
101                collector_host: Some(url),
102            }
103        } else {
104            crate::daemon::DaemonMetricsConfig {
105                metrics_exporter_enabled: false,
106                collector_host: None,
107            }
108        };
109        let network = Some(crate::daemon::DaemonNetworkConfig {
110            name: Some(convert_network_identifier(&self.network.id).to_string()),
111            pubsub_topic: self.network.pubsub_topic,
112        });
113        let state_store = Some(match self.state_store {
114            crate::StateStore::S3(s3) => crate::daemon::DaemonStateStoreConfig {
115                s3_bucket: Some(s3.bucket),
116                s3_endpoint: Some(s3.endpoint),
117                mode: Some(crate::daemon::DaemonStateStoreMode::S3),
118                local_directory: None,
119            },
120            crate::StateStore::LocalDirectory(l) => crate::daemon::DaemonStateStoreConfig {
121                local_directory: Some(l.to_string_lossy().to_string()),
122                mode: Some(crate::daemon::DaemonStateStoreMode::File),
123                s3_bucket: None,
124                s3_endpoint: None,
125            },
126        });
127        let indexing = Some(crate::daemon::DaemonIndexingConfig {
128            db: Some(self.indexing.db),
129            allow_queries_before_historical_sync: Some(
130                self.indexing.allow_queries_before_historical_sync,
131            ),
132            enable_historical_sync: Some(self.indexing.enable_historical_sync),
133        });
134        crate::daemon::DaemonConfig {
135            anchor: anchor,
136            http_api: http,
137            ipfs: ipfs,
138            logger: logger,
139            metrics: Some(metrics),
140            network: network,
141            node: Some(node),
142            state_store: state_store,
143            indexing: indexing,
144            did_resolvers: None,
145        }
146    }
147}