Rustelo/resources/nickel/external-services/contracts.ncl
Jesús Pérez f1010e9d07
chore: update
2026-07-18 20:16:16 +01:00

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,
..
},
}