UNPKG

@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
{ "$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 }`." } } } } } }