@dappnode/schemas
Version:
A shared TypeScript JSON schemas and its validation functions for the manifest and setup wizard dappnode files
192 lines (191 loc) • 7.12 kB
JSON
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"title": "DAppNode Setup Wizard",
"required": ["version", "fields"],
"properties": {
"version": {
"type": "string",
"title": "Setup wizard version",
"enum": ["2"]
},
"fields": {
"type": "array",
"title": "Setup wizard fields",
"description": "Fields to show in the setup wizard form UI",
"items": {
"type": "object",
"required": ["id", "title", "description"],
"properties": {
"id": {
"type": "string",
"title": "Property ID",
"description": "Required ID for internal form parsing when using the `if` block",
"examples": ["payoutAddress"]
},
"target": {
"title": "The Target Schema",
"oneOf": [
{
"type": "object",
"title": "Environment",
"description": "Target environment variable",
"properties": {
"type": {
"type": "string",
"enum": ["environment"]
},
"name": {
"type": "string",
"title": "Environment variable name",
"description": "Name of the environment variable in the docker-compose",
"example": ["PAYOUT_ADDRESS"]
},
"service": {
"type": ["string", "array"],
"items": {
"type": "string"
},
"minItems": 1,
"title": "Service to target",
"description": "In multi-service package, which service should be targeted",
"example": ["service1", "service2"]
}
},
"required": ["type", "name"]
},
{
"type": "object",
"title": "Port mapping",
"description": "Target a port mapping",
"properties": {
"type": {
"type": "string",
"enum": ["portMapping"]
},
"containerPort": {
"type": "string",
"title": "Container port",
"description": "Exposed container port to map to",
"example": ["9554", "9554/TCP"]
},
"service": {
"type": "string",
"title": "Service to target",
"description": "In multi-service package, which service should be targeted",
"example": ["service1", "service2"]
}
},
"required": ["type", "containerPort"]
},
{
"type": "object",
"title": "Named volume mountpoint",
"description": "Target named volume mountpoint",
"properties": {
"type": {
"type": "string",
"enum": ["namedVolumeMountpoint"]
},
"volumeName": {
"type": "string",
"title": "Volume name",
"description": "Name of the docker volume to allow the user to change its mountpoint",
"example": ["data", "blockchain_data"]
}
},
"required": ["type", "volumeName"]
},
{
"type": "object",
"title": "All named volume mountpoints",
"description": "Target all named volume mountpoints at once. Use this option if your package has multiple heavy volumes which mountpoint should be changed at once.",
"properties": {
"type": {
"type": "string",
"enum": ["allNamedVolumesMountpoint"]
}
},
"required": ["type"]
},
{
"type": "object",
"title": "File upload",
"description": "Upload a file to a given path during the installation",
"properties": {
"type": {
"type": "string",
"enum": ["fileUpload"]
},
"path": {
"type": "string",
"title": "Destination file path",
"description": "Path to upload the file to. Must be a valid absolute path in the container.",
"example": ["/usr/src/config.json", "/app/keystore"]
},
"service": {
"type": "string",
"title": "Service to target",
"description": "In multi-service package, which service should be targeted",
"example": ["service1", "service2"]
}
},
"required": ["type", "path"]
}
]
},
"title": {
"type": "string",
"title": "The Title Schema",
"default": "",
"examples": ["RTL password"]
},
"description": {
"type": "string",
"title": "The Description Schema",
"default": "",
"examples": ["Password to protect RTL"]
},
"secret": {
"type": "boolean",
"title": "The Secret Schema",
"default": false,
"examples": [true]
},
"pattern": {
"type": "string",
"title": "Pattern",
"description": "Enforce this property to satisfy a regex before continuing",
"examples": ["^0x[a-fA-F0-9]{40}$"]
},
"patternErrorMessage": {
"type": "string",
"title": "Error to show if the regex pattern validation fails",
"examples": [
"Must be a valid address (0x1fd16a...)",
"Must be at least 8 characters long"
]
},
"enum": {
"type": "array",
"title": "Enum",
"description": "List valid options. Will automatically display the input as a select menu",
"items": {
"type": "string"
}
},
"required": {
"type": "boolean",
"title": "Required",
"description": "Enforce this property to be provided before continuing"
},
"if": {
"type": "object",
"title": "If schema",
"description": "Only display this property if the `if` schema is valid against the current form data provided by the user. The form data is an object with the structure `{ [field.id]: value }`."
}
}
}
}
}
}