ceramic_config/
convert.rs1use 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 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}