{
"$schema": "http://json-schema.org/draft-06/schema#",
"$id": "https://developer.actyx.com/schemas/node-settings.schema.json",
"type": "object",
"additionalProperties": false,
"properties": {
"swarm": {
"$ref": "#/definitions/Swarm"
},
"licensing": {
"$ref": "#/definitions/Licensing"
},
"admin": {
"$ref": "#/definitions/Admin"
},
"api": {
"type": "object",
"additionalProperties": false,
"properties": {
"events": {
"$ref": "#/definitions/API/Events"
}
}
},
"eventRouting": {
"$ref": "#/definitions/EventRouting"
}
},
"definitions": {
"Basic": {
"Key": {
"type": "string",
"minLength": 44,
"maxLength": 44
},
"NonEmptyString": {
"type": "string",
"minLength": 1
},
"Topic": {
"type": "string",
"minLength": 1,
"maxLength": 60
},
"MultiAddr": {
"type": "string",
"format": "multiaddr-without-peer-id"
},
"MultiAddrWithPeerId": {
"type": "string",
"format": "multiaddr-with-peer-id"
},
"NodeLicenseKey": {
"type": "string",
"minLength": 64
},
"AppLicenseKey": {
"type": "string",
"minLength": 100
},
"UserKey": {
"type": "string",
"minLength": 45,
"maxLength": 45
}
},
"Composite": {
"LogLevel": {
"type": "string",
"pattern": "^(ERROR|WARN|INFO|DEBUG|[a-z0-9_:,=]+)$",
"default": "INFO"
},
"NodeLicense": {
"oneOf": [
{
"$ref": "#/definitions/Basic/NodeLicenseKey"
},
{
"type": "string",
"const": "development"
}
]
},
"AppLicense": {
"oneOf": [
{
"$ref": "#/definitions/Basic/AppLicenseKey"
},
{
"type": "string",
"const": "testing"
}
]
},
"StreamSize": {
"type": "string",
"pattern": "^([1-9][0-9]*)(B|kB|MB|GB|KiB|MiB|GiB)$"
},
"StreamAge": {
"type": "string",
"pattern": "^[1-9][0-9]+(s|m|h|d|w)$"
}
},
"Swarm": {
"type": "object",
"additionalProperties": false,
"properties": {
"swarmKey": {
"$ref": "#/definitions/Basic/Key",
"default": "MDAwMDAwMDAxMTExMTExMTIyMjIyMjIyMzMzMzMzMzM="
},
"topic": {
"$ref": "#/definitions/Basic/Topic",
"default": "default-topic"
},
"initialPeers": {
"type": "array",
"items": {
"$ref": "#/definitions/Basic/MultiAddrWithPeerId"
},
"default": [],
"uniqueItems": true,
"description": "Addresses of peers to initially connect to. These must be multiaddresses containing a peer id. E.g. /dns4/demo-bootstrap.actyx.net/tcp/4001/p2p/QmUD1mA3Y8qSQB34HmgSNcxDss72UHW2kzQy7RdVstN2hH"
},
"announceAddresses": {
"type": "array",
"items": {
"$ref": "#/definitions/Basic/MultiAddr"
},
"minItems": 0,
"uniqueItems": true,
"default": [],
"description": "Manually configured addresses to announce. These must be multiaddresses without peer id, e.g. /ip4/1.2.3.4/tcp/4001"
},
"blockCacheCount": {
"type": "integer",
"minimum": 0,
"default": 131072,
"description": "Maximum number of non-pinned blocks to cache"
},
"blockCacheSize": {
"type": "integer",
"minimum": 0,
"default": 1073741824,
"description": "Maximum number of bytes of non-pinned blocks to cache"
},
"blockGcInterval": {
"type": "integer",
"minimum": 30,
"default": 300,
"description": "GC interval for the block store, in seconds"
},
"metricsInterval": {
"type": "integer",
"minimum": 0,
"default": 1800,
"description": "Metrics event emission interval, in seconds"
},
"pingTimeout": {
"type": "integer",
"minimum": 0,
"default": 5,
"description": "Timeout for one swarm-internal ping response"
},
"bitswapTimeout": {
"type": "integer",
"minimum": 0,
"default": 15,
"description": "Timeout for one swarm-internal data block response"
},
"mdns": {
"type": "boolean",
"default": true,
"description": "Enable mDNS discovery of peers within the same IP broadcast domain"
},
"branchCacheSize": {
"type": "integer",
"default": 67108864,
"description": "Maximum number of index bytes cached in memory"
},
"gossipInterval": {
"type": "integer",
"default": 10,
"description": "Interval at which the node sends its known stream links and offsets to all peers"
},
"detectionCyclesLowLatency": {
"type": "number",
"default": 2,
"description": "multiple of the gossipInterval used for determining low-latency stream replication"
},
"detectionCyclesHighLatency": {
"type": "number",
"default": 5,
"description": "multiple of the gossipInterval used for determining high-latency but still working stream replication"
}
}
},
"Admin": {
"type": "object",
"additionalProperties": false,
"properties": {
"displayName": {
"$ref": "#/definitions/Basic/NonEmptyString",
"default": "Default Node"
},
"logLevels": {
"type": "object",
"additionalProperties": false,
"properties": {
"node": {
"$ref": "#/definitions/Composite/LogLevel"
}
}
},
"authorizedUsers": {
"type": "array",
"items": {
"$ref": "#/definitions/Basic/UserKey"
},
"default": [],
"uniqueItems": true,
"description": "Public keys of the users allowed to connect to the node."
}
}
},
"Licensing": {
"type": "object",
"additionalProperties": false,
"properties": {
"node": {
"$ref": "#/definitions/Composite/NodeLicense",
"default": "development"
},
"apps": {
"type": "object",
"propertyNames": {
"pattern": "^(\\d|\\w|-|_)+(\\.(\\d|\\w|-|_)+)*$"
},
"additionalProperties": {
"$ref": "#/definitions/Composite/AppLicense"
},
"description": "Key-value pairs where the key is an app's ID.",
"default": {}
}
}
},
"API": {
"Events": {
"type": "object",
"additionalProperties": false,
"properties": {
"readOnly": {
"type": "boolean",
"default": false
},
"_internal": {
"type": "object",
"additionalProperties": true
}
}
}
},
"EventRouting": {
"type": "object",
"additionalProperties": false,
"properties": {
"streams": {
"type": "object",
"propertyNames": {
"pattern": "^[a-zA-Z0-9_-]+$"
},
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"maxEvents": {
"type": "integer",
"description": "The number of most recent events to keep.",
"minimum": 0,
"default": 0
},
"maxSize": {
"$ref": "#/definitions/Composite/StreamSize",
"description": "Streams will be pruned when occupying storage beyond the provided limit. Can be B (bytes), kB (Kilobytes), KiB (Kibibytes), MB (Megabytes), (MiB) MebiBytes, GB (Gigabytes) or GiB (Gibibytes). If no unit is provided, the unit is considered to be bytes.",
"default": "0"
},
"maxAge": {
"$ref": "#/definitions/Composite/StreamAge",
"description": "The maximum age for stream events. Can be s (seconds), m (minutes), h (hours), d (days) or w (weeks).",
"default": null
}
}
},
"default": {}
},
"routes": {
"type": "array",
"items": {
"additionalProperties": false,
"properties": {
"from": {
"type": "string",
"pattern": "^('([^']|'')+')|(\"([^\"]|\"\")+\") *([|&] *('([^']|'')+')|(\"([^\"]|\"\")+\"))*$"
},
"into": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+$"
}
},
"required": [
"from",
"into"
]
},
"default": []
}
}
}
}
}