69 lines
1.3 KiB
Text
69 lines
1.3 KiB
Text
|
|
let LogLevel = std.contract.custom (
|
||
|
|
fun label =>
|
||
|
|
fun value =>
|
||
|
|
let valid = ["trace", "debug", "info", "warn", "error"] in
|
||
|
|
if std.array.any (fun x => x == value) valid then
|
||
|
|
'Ok value
|
||
|
|
else
|
||
|
|
'Error {
|
||
|
|
message = "Invalid log_level '%{value}'.\nValid values: trace | debug | info | warn | error"
|
||
|
|
}
|
||
|
|
) in
|
||
|
|
|
||
|
|
let Port = std.contract.custom (
|
||
|
|
fun label =>
|
||
|
|
fun value =>
|
||
|
|
if value >= 1 && value <= 65535 then
|
||
|
|
'Ok value
|
||
|
|
else
|
||
|
|
'Error {
|
||
|
|
message = "Invalid port '%{std.to_string value}'.\nValid range: 1 - 65535"
|
||
|
|
}
|
||
|
|
) in
|
||
|
|
|
||
|
|
{
|
||
|
|
TlsConfig = {
|
||
|
|
enabled | Bool,
|
||
|
|
cert_path | String,
|
||
|
|
key_path | String,
|
||
|
|
},
|
||
|
|
|
||
|
|
ServerConfig = {
|
||
|
|
host | String,
|
||
|
|
port | Port,
|
||
|
|
tls | TlsConfig,
|
||
|
|
},
|
||
|
|
|
||
|
|
DatabaseConfig = {
|
||
|
|
url | String,
|
||
|
|
max_connections | Number,
|
||
|
|
},
|
||
|
|
|
||
|
|
NatsConfig = {
|
||
|
|
url | String,
|
||
|
|
stream_name | String,
|
||
|
|
},
|
||
|
|
|
||
|
|
AuthConfig = {
|
||
|
|
jwt_secret | String,
|
||
|
|
jwt_expiration_hours | Number,
|
||
|
|
},
|
||
|
|
|
||
|
|
LoggingConfig = {
|
||
|
|
level | LogLevel,
|
||
|
|
json | Bool,
|
||
|
|
},
|
||
|
|
|
||
|
|
MetricsConfig = {
|
||
|
|
enabled | Bool,
|
||
|
|
port | Port,
|
||
|
|
},
|
||
|
|
|
||
|
|
NotificationConfig = {
|
||
|
|
on_task_done | Array String | default = [],
|
||
|
|
on_proposal_approved | Array String | default = [],
|
||
|
|
on_proposal_rejected | Array String | default = [],
|
||
|
|
on_agent_inactive | Array String | default = [],
|
||
|
|
},
|
||
|
|
}
|