ceramic_config/
daemon.rs

1use serde::Serialize;
2use serde_json::Value;
3use std::collections::HashMap;
4
5#[derive(Serialize)]
6#[serde(rename_all = "kebab-case")]
7pub enum DaemonIpfsConfigMode {
8    Bundled,
9    Remote,
10}
11
12#[derive(Serialize)]
13#[serde(rename_all = "kebab-case")]
14pub struct DaemonIpfsConfig {
15    #[serde(default, skip_serializing_if = "Option::is_none")]
16    pub mode: Option<DaemonIpfsConfigMode>,
17    #[serde(default, skip_serializing_if = "Option::is_none")]
18    pub host: Option<String>,
19    #[serde(default, skip_serializing_if = "Option::is_none")]
20    pub pinning_endpoints: Option<Vec<String>>,
21}
22
23#[derive(Serialize)]
24#[serde(rename_all = "kebab-case")]
25pub enum DaemonStateStoreMode {
26    S3,
27    File,
28}
29
30#[derive(Serialize)]
31#[serde(rename_all = "kebab-case")]
32pub struct DaemonStateStoreConfig {
33    #[serde(default, skip_serializing_if = "Option::is_none")]
34    pub mode: Option<DaemonStateStoreMode>,
35    #[serde(default, skip_serializing_if = "Option::is_none")]
36    pub local_directory: Option<String>,
37    #[serde(default, skip_serializing_if = "Option::is_none")]
38    pub s3_bucket: Option<String>,
39    #[serde(default, skip_serializing_if = "Option::is_none")]
40    pub s3_endpoint: Option<String>,
41}
42
43#[derive(Serialize)]
44#[serde(rename_all = "kebab-case")]
45pub struct DaemonHttpApiConfig {
46    #[serde(default, skip_serializing_if = "Option::is_none")]
47    pub hostname: Option<String>,
48    #[serde(default, skip_serializing_if = "Option::is_none")]
49    pub port: Option<u16>,
50    #[serde(default, skip_serializing_if = "Option::is_none")]
51    pub cors_allowed_origins: Option<Vec<String>>,
52    #[serde(default, skip_serializing_if = "Option::is_none")]
53    pub admin_dids: Option<Vec<String>>,
54}
55
56#[derive(Serialize)]
57#[serde(rename_all = "kebab-case")]
58pub struct DaemonNetworkConfig {
59    #[serde(default, skip_serializing_if = "Option::is_none")]
60    pub name: Option<String>,
61    #[serde(default, skip_serializing_if = "Option::is_none")]
62    pub pubsub_topic: Option<String>,
63}
64
65#[derive(Serialize)]
66#[serde(rename_all = "kebab-case")]
67pub struct DaemonAnchorConfig {
68    #[serde(default, skip_serializing_if = "Option::is_none")]
69    pub anchor_service_url: Option<String>,
70    #[serde(default, skip_serializing_if = "Option::is_none")]
71    pub auth_method: Option<String>,
72    #[serde(default, skip_serializing_if = "Option::is_none")]
73    pub ethereum_rpc_url: Option<String>,
74}
75
76#[derive(Serialize)]
77#[serde(rename_all = "kebab-case")]
78pub struct DaemonIndexingConfig {
79    #[serde(default, skip_serializing_if = "Option::is_none")]
80    pub db: Option<String>,
81    #[serde(default, skip_serializing_if = "Option::is_none")]
82    pub allow_queries_before_historical_sync: Option<bool>,
83    #[serde(default, skip_serializing_if = "Option::is_none")]
84    pub enable_historical_sync: Option<bool>,
85}
86
87#[derive(Serialize)]
88#[serde(rename_all = "kebab-case")]
89pub struct DaemonResolversConfig {
90    #[serde(default, skip_serializing_if = "Option::is_none")]
91    pub ethr_did_resolver: Option<HashMap<String, Value>>,
92}
93
94#[derive(Serialize)]
95#[serde(rename_all = "kebab-case")]
96pub struct DaemonNodeConfig {
97    #[serde(default, skip_serializing_if = "Option::is_none")]
98    pub gateway: Option<bool>,
99    #[serde(default, skip_serializing_if = "Option::is_none")]
100    pub sync_override: Option<String>,
101    #[serde(default, skip_serializing_if = "Option::is_none")]
102    pub stream_cache_limit: Option<usize>,
103    #[serde(default, skip_serializing_if = "Option::is_none")]
104    pub private_seed_url: Option<String>,
105}
106
107#[derive(Serialize)]
108#[serde(rename_all = "kebab-case")]
109pub struct DaemonLoggerConfig {
110    #[serde(default, skip_serializing_if = "Option::is_none")]
111    pub log_directory: Option<String>,
112    #[serde(default, skip_serializing_if = "Option::is_none")]
113    pub log_level: Option<u16>,
114    #[serde(default, skip_serializing_if = "Option::is_none")]
115    pub log_to_files: Option<bool>,
116}
117
118#[derive(Serialize)]
119#[serde(rename_all = "kebab-case")]
120pub struct DaemonMetricsConfig {
121    pub metrics_exporter_enabled: bool,
122    #[serde(default, skip_serializing_if = "Option::is_none")]
123    pub collector_host: Option<String>,
124}
125
126/// Config format compatible with existing ceramic daemon format
127#[derive(Serialize)]
128#[serde(rename_all = "kebab-case")]
129pub struct DaemonConfig {
130    #[serde(default, skip_serializing_if = "Option::is_none")]
131    pub anchor: Option<DaemonAnchorConfig>,
132    #[serde(default, skip_serializing_if = "Option::is_none")]
133    pub http_api: Option<DaemonHttpApiConfig>,
134    #[serde(default, skip_serializing_if = "Option::is_none")]
135    pub ipfs: Option<DaemonIpfsConfig>,
136    #[serde(default, skip_serializing_if = "Option::is_none")]
137    pub logger: Option<DaemonLoggerConfig>,
138    #[serde(default, skip_serializing_if = "Option::is_none")]
139    pub metrics: Option<DaemonMetricsConfig>,
140    #[serde(default, skip_serializing_if = "Option::is_none")]
141    pub network: Option<DaemonNetworkConfig>,
142    #[serde(default, skip_serializing_if = "Option::is_none")]
143    pub node: Option<DaemonNodeConfig>,
144    #[serde(default, skip_serializing_if = "Option::is_none")]
145    pub state_store: Option<DaemonStateStoreConfig>,
146    #[serde(default, skip_serializing_if = "Option::is_none")]
147    pub did_resolvers: Option<DaemonResolversConfig>,
148    #[serde(default, skip_serializing_if = "Option::is_none")]
149    pub indexing: Option<DaemonIndexingConfig>,
150}