162 lines
4 KiB
Text
162 lines
4 KiB
Text
# Contracts (type schemas) for external-services.ncl
|
|
#
|
|
# Each service contract validates its own fields.
|
|
# ExternalServicesConfig uses an open record (..) so new services can be
|
|
# added to external-services.ncl without modifying this file.
|
|
|
|
{
|
|
NatsConfig = {
|
|
enabled | Bool,
|
|
url | String,
|
|
token | String,
|
|
connection_timeout | Number,
|
|
max_reconnects | Number,
|
|
reconnect_delay | Number,
|
|
subjects | { _ : String },
|
|
},
|
|
|
|
OllamaConfig = {
|
|
enabled | Bool,
|
|
base_url | String,
|
|
default_model | String,
|
|
request_timeout | Number,
|
|
stream | Bool,
|
|
keep_alive | String,
|
|
max_tokens | Number,
|
|
temperature | Number,
|
|
},
|
|
|
|
S3Config = {
|
|
enabled | Bool,
|
|
endpoint | String,
|
|
region | String,
|
|
bucket | String,
|
|
access_key | String,
|
|
secret_key | String,
|
|
path_style | Bool,
|
|
upload_prefix | String,
|
|
max_object_size | Number,
|
|
presign_ttl | Number,
|
|
},
|
|
|
|
# Admin NATS connection — separate credentials and namespace from the
|
|
# general app NATS. Uses nkeys credentials file instead of token.
|
|
NatsAdminNamespace = {
|
|
prefix
|
|
| String
|
|
| doc "Implementation-specific prefix, e.g. 'evol.website'. Never hardcoded in framework code.",
|
|
|
|
env
|
|
| String
|
|
| doc "Deployment environment tag: 'prod' | 'staging' | 'dev'. Override via ENV var in k8s.",
|
|
},
|
|
|
|
NatsAdminConsumer = {
|
|
name | String,
|
|
ack_policy | String | default = "Explicit",
|
|
filter_subjects | Array String | default = [],
|
|
..
|
|
},
|
|
|
|
NatsAdminJetStream = {
|
|
enabled
|
|
| Bool
|
|
| default = true,
|
|
|
|
stream_name
|
|
| String
|
|
| doc "JetStream stream that captures all admin subject traffic for audit log.",
|
|
|
|
retention_days
|
|
| Number
|
|
| doc "Message retention period in days."
|
|
| default = 30,
|
|
|
|
retention
|
|
| String
|
|
| doc "Retention policy: Limits | Interest | WorkQueue."
|
|
| default = "Limits",
|
|
|
|
storage
|
|
| String
|
|
| doc "Storage backend: File | Memory."
|
|
| default = "File",
|
|
|
|
max_messages
|
|
| Number
|
|
| doc "Max messages in stream. 0 = unlimited."
|
|
| default = 0,
|
|
|
|
max_bytes
|
|
| Number
|
|
| doc "Max bytes in stream. 0 = unlimited."
|
|
| default = 0,
|
|
|
|
consumers
|
|
| Array NatsAdminConsumer
|
|
| default = [],
|
|
},
|
|
|
|
NatsAdminConfig = {
|
|
enabled
|
|
| Bool
|
|
| default = false,
|
|
|
|
url
|
|
| String
|
|
| doc "NATS server URL. Use '${NATS_ADMIN_URL}' to read from env.",
|
|
|
|
credentials_file
|
|
| String
|
|
| doc "Path to nkeys credentials file mounted as k8s Secret (e.g. /etc/nats/admin.creds). Never inline the key here.",
|
|
|
|
connection_timeout
|
|
| Number
|
|
| doc "Connection timeout in seconds."
|
|
| default = 5,
|
|
|
|
max_reconnects
|
|
| Number
|
|
| default = 10,
|
|
|
|
reconnect_delay
|
|
| Number
|
|
| doc "Delay between reconnect attempts in seconds."
|
|
| default = 2,
|
|
|
|
namespace
|
|
| NatsAdminNamespace
|
|
| doc "Subject namespace. Full subject = '{prefix}.{env}.{subject_leaf}'.",
|
|
|
|
subjects
|
|
| { _ : String }
|
|
| doc "Admin subject leaves. Full paths assembled at runtime using namespace. Open record — implementations may extend.",
|
|
|
|
jetstream
|
|
| NatsAdminJetStream
|
|
| doc "JetStream configuration for audit log persistence.",
|
|
|
|
nkey_seed
|
|
| String
|
|
| doc "NKEY seed for server-to-server authentication. Empty string disables nkey auth."
|
|
| default = "",
|
|
|
|
require_signed_messages
|
|
| Bool
|
|
| doc "Reject messages not signed with a trusted NKEY."
|
|
| default = false,
|
|
|
|
trusted_nkeys
|
|
| Array String
|
|
| doc "List of trusted NKEY public keys for message signature verification."
|
|
| default = [],
|
|
},
|
|
|
|
ExternalServicesConfig = {
|
|
nats | NatsConfig,
|
|
nats_admin | NatsAdminConfig,
|
|
ollama | OllamaConfig,
|
|
s3 | S3Config,
|
|
..
|
|
},
|
|
}
|