aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-node/src/meshbay_node/config.py
diff options
context:
space:
mode:
Diffstat (limited to 'packages/meshbay-node/src/meshbay_node/config.py')
-rw-r--r--packages/meshbay-node/src/meshbay_node/config.py29
1 files changed, 29 insertions, 0 deletions
diff --git a/packages/meshbay-node/src/meshbay_node/config.py b/packages/meshbay-node/src/meshbay_node/config.py
index bf62639..2ae3c7c 100644
--- a/packages/meshbay-node/src/meshbay_node/config.py
+++ b/packages/meshbay-node/src/meshbay_node/config.py
@@ -366,6 +366,35 @@ def _read_roots(group: dict) -> list[RootSpec]:
return specs
+def node_settings_defaults(nd: NodeConfig | None = None) -> dict:
+ """
+ The `node.toml` side of every setting the roster resolves.
+
+ One function because there were three copies of this dict written by hand
+ and they disagreed. The daemon's left out both transfer pools, so on a node
+ whose operator had never touched the panel they resolved to None, were
+ written back onto the config, and the transport fell through to its own
+ defaults — `node.toml` parsed, validated, and then ignored.
+
+ `test_node_settings_defaults.py` holds this against
+ `Roster.node_setting_keys()`, because a key missing here raises nothing
+ anywhere: it is a setting that stops working quietly.
+ """
+ nd = nd or NodeConfig()
+ return {
+ "invite_ttl_hours": nd.invite_ttl_hours,
+ "pair_ttl_hours": nd.pair_ttl_hours,
+ "device_request_ttl_minutes": nd.device_request_ttl_minutes,
+ "max_concurrent_streams": nd.max_concurrent_streams,
+ "max_concurrent_downloads": nd.max_concurrent_downloads,
+ "max_concurrent_uploads": nd.max_concurrent_uploads,
+ "max_upload_gb": nd.max_upload_gb,
+ "transcode_incompatible_video": nd.transcode_incompatible_video,
+ "stun_servers": nd.stun_servers or list(DEFAULT_STUN_SERVERS),
+ "ice_interfaces": nd.ice_interfaces,
+ }
+
+
def load_config(path: Path = DEFAULT_CONFIG_PATH) -> Config:
"""
Load config from TOML file. Supports both single [group] and