{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://catalog.lintel.tools/schemas/schemastore/dipdup/versions/3.0.json",
  "title": "DipDup",
  "description": "DipDup project configuration file",
  "x-lintel": {
    "source": "https://raw.githubusercontent.com/dipdup-io/dipdup/next/schemas/dipdup-3.0.json",
    "sourceSha256": "05300f8f86850eea6397f006f046432435b8854bc73206b4b65ce33128ff00b3",
    "fileMatch": [
      "**/dipdup.yaml",
      "**/dipdup.yml",
      "**/dipdup.*.yaml",
      "**/dipdup.*.yml"
    ],
    "parsers": [
      "yaml"
    ]
  },
  "type": "object",
  "properties": {
    "advanced": {
      "$ref": "#/$defs/AdvancedConfig",
      "description": "Advanced config",
      "title": "advanced"
    },
    "api": {
      "anyOf": [
        {
          "$ref": "#/$defs/ApiConfig"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Management API config",
      "title": "api"
    },
    "contracts": {
      "type": "object",
      "description": "Mapping of contract aliases and contract configs",
      "title": "contracts",
      "additionalProperties": {
        "anyOf": [
          {
            "$ref": "#/$defs/EvmContractConfig"
          },
          {
            "$ref": "#/$defs/TezosContractConfig"
          },
          {
            "$ref": "#/$defs/StarknetContractConfig"
          }
        ]
      }
    },
    "custom": {
      "description": "User-defined configuration to use in callbacks",
      "title": "custom",
      "type": "object"
    },
    "database": {
      "anyOf": [
        {
          "$ref": "#/$defs/SqliteDatabaseConfig"
        },
        {
          "$ref": "#/$defs/PostgresDatabaseConfig"
        }
      ],
      "description": "Database config",
      "title": "database"
    },
    "datasources": {
      "type": "object",
      "description": "Mapping of datasource aliases and datasource configs",
      "title": "datasources",
      "additionalProperties": {
        "anyOf": [
          {
            "$ref": "#/$defs/CoinbaseDatasourceConfig"
          },
          {
            "$ref": "#/$defs/EvmEtherscanDatasourceConfig"
          },
          {
            "$ref": "#/$defs/EvmSourcifyDatasourceConfig"
          },
          {
            "$ref": "#/$defs/EvmBlockvisionDatasourceConfig"
          },
          {
            "$ref": "#/$defs/HttpDatasourceConfig"
          },
          {
            "$ref": "#/$defs/IpfsDatasourceConfig"
          },
          {
            "$ref": "#/$defs/EvmSubsquidDatasourceConfig"
          },
          {
            "$ref": "#/$defs/EvmNodeDatasourceConfig"
          },
          {
            "$ref": "#/$defs/TzipMetadataDatasourceConfig"
          },
          {
            "$ref": "#/$defs/TezosTzktDatasourceConfig"
          },
          {
            "$ref": "#/$defs/StarknetSubsquidDatasourceConfig"
          },
          {
            "$ref": "#/$defs/StarknetNodeDatasourceConfig"
          },
          {
            "$ref": "#/$defs/SubstrateSubsquidDatasourceConfig"
          },
          {
            "$ref": "#/$defs/SubstrateSubscanDatasourceConfig"
          },
          {
            "$ref": "#/$defs/SubstrateNodeDatasourceConfig"
          }
        ]
      }
    },
    "hasura": {
      "anyOf": [
        {
          "$ref": "#/$defs/HasuraConfig"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Hasura integration config",
      "title": "hasura"
    },
    "hooks": {
      "type": "object",
      "description": "Mapping of hook aliases and hook configs",
      "title": "hooks",
      "additionalProperties": {
        "$ref": "#/$defs/HookConfig"
      }
    },
    "indexes": {
      "type": "object",
      "description": "Mapping of index aliases and index configs",
      "title": "indexes",
      "additionalProperties": {
        "anyOf": [
          {
            "$ref": "#/$defs/TezosBigMapsIndexConfig"
          },
          {
            "$ref": "#/$defs/TezosEventsIndexConfig"
          },
          {
            "$ref": "#/$defs/TezosHeadIndexConfig"
          },
          {
            "$ref": "#/$defs/TezosOperationsIndexConfig"
          },
          {
            "$ref": "#/$defs/TezosOperationsUnfilteredIndexConfig"
          },
          {
            "$ref": "#/$defs/TezosTokenTransfersIndexConfig"
          },
          {
            "$ref": "#/$defs/TezosTokenBalancesIndexConfig"
          },
          {
            "$ref": "#/$defs/EvmEventsIndexConfig"
          },
          {
            "$ref": "#/$defs/EvmTransactionsIndexConfig"
          },
          {
            "$ref": "#/$defs/StarknetEventsIndexConfig"
          },
          {
            "$ref": "#/$defs/SubstrateEventsIndexConfig"
          },
          {
            "$ref": "#/$defs/IndexTemplateConfig"
          }
        ]
      }
    },
    "jobs": {
      "type": "object",
      "description": "Mapping of job aliases and job configs",
      "title": "jobs",
      "additionalProperties": {
        "$ref": "#/$defs/JobConfig"
      }
    },
    "logging": {
      "anyOf": [
        {
          "type": "object",
          "additionalProperties": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "integer"
              }
            ]
          }
        },
        {
          "type": "string"
        },
        {
          "type": "integer"
        }
      ],
      "default": "INFO",
      "description": "Modify logging verbosity",
      "title": "logging"
    },
    "mcp": {
      "anyOf": [
        {
          "$ref": "#/$defs/McpConfig"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "MCP server config",
      "title": "mcp"
    },
    "package": {
      "description": "Name of indexer's Python package, existing or not",
      "title": "package",
      "type": "string"
    },
    "prometheus": {
      "anyOf": [
        {
          "$ref": "#/$defs/PrometheusConfig"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Prometheus integration config",
      "title": "prometheus"
    },
    "runtimes": {
      "type": "object",
      "description": "Mapping of runtime aliases and runtime configs",
      "title": "runtimes",
      "additionalProperties": {
        "$ref": "#/$defs/SubstrateRuntimeConfig"
      }
    },
    "sentry": {
      "anyOf": [
        {
          "$ref": "#/$defs/SentryConfig"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Sentry integration config",
      "title": "sentry"
    },
    "spec_version": {
      "$ref": "#/$defs/ToStr",
      "description": "Version of config specification, currently always `3.0`",
      "title": "spec_version"
    },
    "templates": {
      "type": "object",
      "description": "Mapping of template aliases and index templates",
      "title": "templates",
      "additionalProperties": {
        "anyOf": [
          {
            "$ref": "#/$defs/TezosBigMapsIndexConfig"
          },
          {
            "$ref": "#/$defs/TezosEventsIndexConfig"
          },
          {
            "$ref": "#/$defs/TezosHeadIndexConfig"
          },
          {
            "$ref": "#/$defs/TezosOperationsIndexConfig"
          },
          {
            "$ref": "#/$defs/TezosOperationsUnfilteredIndexConfig"
          },
          {
            "$ref": "#/$defs/TezosTokenTransfersIndexConfig"
          },
          {
            "$ref": "#/$defs/TezosTokenBalancesIndexConfig"
          },
          {
            "$ref": "#/$defs/EvmEventsIndexConfig"
          },
          {
            "$ref": "#/$defs/EvmTransactionsIndexConfig"
          },
          {
            "$ref": "#/$defs/StarknetEventsIndexConfig"
          },
          {
            "$ref": "#/$defs/SubstrateEventsIndexConfig"
          }
        ]
      }
    }
  },
  "$defs": {
    "AdvancedConfig": {
      "type": "object",
      "description": "This section allows users to tune some system-wide options, either experimental or unsuitable for generic configurations.",
      "properties": {
        "alt_operation_matcher": {
          "default": false,
          "description": "Use different algorithm to match Tezos operations (dev only)",
          "title": "alt_operation_matcher",
          "type": "boolean"
        },
        "decimal_precision": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Overwrite precision if it's not guessed correctly based on project models.",
          "title": "decimal_precision"
        },
        "early_realtime": {
          "default": false,
          "description": "Establish realtime connection and start collecting messages while sync is in progress (faster, but consumes more RAM).",
          "title": "early_realtime",
          "type": "boolean"
        },
        "postpone_jobs": {
          "default": false,
          "description": "Do not start job scheduler until all indexes reach the realtime state.",
          "title": "postpone_jobs",
          "type": "boolean"
        },
        "reindex": {
          "type": "object",
          "description": "Mapping of reindexing reasons and actions DipDup performs.",
          "propertyNames": {
            "$ref": "#/$defs/ReindexingReason"
          },
          "title": "reindex",
          "additionalProperties": {
            "$ref": "#/$defs/ReindexingAction"
          }
        },
        "rollback_depth": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A number of blocks to keep for rollback (affects all datasources)",
          "title": "rollback_depth"
        },
        "scheduler": {
          "anyOf": [
            {
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "`apscheduler` scheduler config.",
          "title": "scheduler"
        },
        "unsafe_sqlite": {
          "default": false,
          "description": "Disable journaling and data integrity checks. Use only for testing.",
          "title": "unsafe_sqlite",
          "type": "boolean"
        },
        "watchdog": {
          "type": "object",
          "description": "Mapping of watchdog triggers and actions DipDup performs.",
          "propertyNames": {
            "$ref": "#/$defs/WatchdogTrigger"
          },
          "title": "watchdog",
          "additionalProperties": {
            "$ref": "#/$defs/WatchdogConfig"
          }
        }
      },
      "title": "AdvancedConfig",
      "additionalProperties": true
    },
    "ApiConfig": {
      "type": "object",
      "description": "Management API config",
      "properties": {
        "host": {
          "default": "127.0.0.1",
          "description": "Host to bind to",
          "title": "host",
          "type": "string"
        },
        "port": {
          "default": 46339,
          "description": "Port to bind to",
          "title": "port",
          "type": "integer"
        }
      },
      "title": "ApiConfig",
      "additionalProperties": false
    },
    "CoinbaseDatasourceConfig": {
      "type": "object",
      "description": "Coinbase datasource config",
      "properties": {
        "api_key": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "API key",
          "title": "api_key"
        },
        "http": {
          "anyOf": [
            {
              "$ref": "#/$defs/HttpConfig"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "HTTP client configuration",
          "title": "http"
        },
        "kind": {
          "const": "coinbase",
          "default": "coinbase",
          "description": "always 'coinbase'",
          "title": "kind",
          "type": "string"
        },
        "passphrase": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "API passphrase",
          "title": "passphrase"
        },
        "secret_key": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "API secret key",
          "title": "secret_key"
        }
      },
      "title": "CoinbaseDatasourceConfig",
      "additionalProperties": false
    },
    "EvmAddress": {
      "$ref": "#/$defs/Hex"
    },
    "EvmBlockvisionDatasourceConfig": {
      "type": "object",
      "description": "Blockvision datasource config",
      "properties": {
        "api_key": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "API key",
          "title": "api_key"
        },
        "http": {
          "anyOf": [
            {
              "$ref": "#/$defs/HttpConfig"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "HTTP client configuration",
          "title": "http"
        },
        "kind": {
          "const": "evm.blockvision",
          "default": "evm.blockvision",
          "description": "always 'evm.blockvision'",
          "title": "kind",
          "type": "string"
        },
        "url": {
          "$ref": "#/$defs/Url",
          "description": "API URL",
          "title": "url"
        }
      },
      "required": [
        "url"
      ],
      "title": "EvmBlockvisionDatasourceConfig",
      "additionalProperties": false
    },
    "EvmContractConfig": {
      "type": "object",
      "description": "EVM contract config",
      "properties": {
        "abi": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Contract ABI",
          "title": "abi"
        },
        "address": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Contract address",
          "title": "address"
        },
        "kind": {
          "const": "evm",
          "default": "evm",
          "description": "Always `evm`",
          "title": "kind",
          "type": "string"
        },
        "typename": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Alias for the contract script",
          "title": "typename"
        }
      },
      "title": "EvmContractConfig",
      "additionalProperties": false
    },
    "EvmDatasourceConfigU": {
      "anyOf": [
        {
          "$ref": "#/$defs/EvmSubsquidDatasourceConfig"
        },
        {
          "$ref": "#/$defs/EvmNodeDatasourceConfig"
        },
        {
          "$ref": "#/$defs/EvmSourcifyDatasourceConfig"
        },
        {
          "$ref": "#/$defs/EvmBlockvisionDatasourceConfig"
        },
        {
          "$ref": "#/$defs/EvmEtherscanDatasourceConfig"
        }
      ]
    },
    "EvmEtherscanDatasourceConfig": {
      "type": "object",
      "description": "Etherscan datasource config",
      "properties": {
        "api_key": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "API key",
          "title": "api_key"
        },
        "http": {
          "anyOf": [
            {
              "$ref": "#/$defs/HttpConfig"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "HTTP client configuration",
          "title": "http"
        },
        "kind": {
          "anyOf": [
            {
              "const": "evm.etherscan",
              "type": "string"
            },
            {
              "const": "abi.etherscan",
              "type": "string"
            }
          ],
          "default": "evm.etherscan",
          "description": "always 'evm.etherscan'",
          "title": "kind"
        },
        "url": {
          "$ref": "#/$defs/Url",
          "description": "API URL",
          "title": "url"
        }
      },
      "required": [
        "url"
      ],
      "title": "EvmEtherscanDatasourceConfig",
      "additionalProperties": false
    },
    "EvmEventsHandlerConfig": {
      "type": "object",
      "description": "Subsquid event handler",
      "properties": {
        "callback": {
          "description": "Callback name",
          "title": "callback",
          "type": "string"
        },
        "contract": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/$defs/EvmContractConfig"
            }
          ],
          "description": "EVM contract",
          "title": "contract"
        },
        "name": {
          "description": "Event name",
          "title": "name",
          "type": "string"
        }
      },
      "required": [
        "callback",
        "contract",
        "name"
      ],
      "title": "EvmEventsHandlerConfig",
      "additionalProperties": false
    },
    "EvmEventsIndexConfig": {
      "type": "object",
      "description": "Subsquid datasource config",
      "properties": {
        "datasources": {
          "description": "`evm` datasources to use",
          "items": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "$ref": "#/$defs/EvmDatasourceConfigU"
              }
            ]
          },
          "title": "datasources",
          "type": "array"
        },
        "first_level": {
          "default": 0,
          "description": "Level to start indexing from",
          "title": "first_level",
          "type": "integer"
        },
        "handlers": {
          "description": "Event handlers",
          "items": {
            "$ref": "#/$defs/EvmEventsHandlerConfig"
          },
          "title": "handlers",
          "type": "array"
        },
        "kind": {
          "const": "evm.events",
          "default": "evm.events",
          "description": "Always 'evm.events'",
          "title": "kind",
          "type": "string"
        },
        "last_level": {
          "default": 0,
          "description": "Level to stop indexing and disable this index",
          "title": "last_level",
          "type": "integer"
        }
      },
      "required": [
        "datasources",
        "handlers"
      ],
      "title": "EvmEventsIndexConfig",
      "additionalProperties": false
    },
    "EvmNodeDatasourceConfig": {
      "type": "object",
      "description": "EVM node datasource config",
      "properties": {
        "http": {
          "anyOf": [
            {
              "$ref": "#/$defs/HttpConfig"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "HTTP client configuration",
          "title": "http"
        },
        "kind": {
          "const": "evm.node",
          "default": "evm.node",
          "description": "Always 'evm.node'",
          "title": "kind",
          "type": "string"
        },
        "rollback_depth": {
          "default": 32,
          "description": "A number of blocks to store in database for rollback",
          "title": "rollback_depth",
          "type": "integer"
        },
        "url": {
          "$ref": "#/$defs/Url",
          "description": "EVM node URL",
          "title": "url"
        },
        "ws_url": {
          "anyOf": [
            {
              "$ref": "#/$defs/WsUrl"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "EVM node WebSocket URL",
          "title": "ws_url"
        }
      },
      "required": [
        "url"
      ],
      "title": "EvmNodeDatasourceConfig",
      "additionalProperties": false
    },
    "EvmSourcifyDatasourceConfig": {
      "type": "object",
      "description": "Sourcify datasource config",
      "properties": {
        "api_key": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "API key",
          "title": "api_key"
        },
        "chain_id": {
          "description": "Chain ID",
          "title": "chain_id",
          "type": "integer"
        },
        "http": {
          "anyOf": [
            {
              "$ref": "#/$defs/HttpConfig"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "HTTP client configuration",
          "title": "http"
        },
        "kind": {
          "const": "evm.sourcify",
          "default": "evm.sourcify",
          "description": "always 'evm.sourcify'",
          "title": "kind",
          "type": "string"
        },
        "url": {
          "$ref": "#/$defs/Url",
          "default": "https://sourcify.dev/server",
          "description": "API URL",
          "title": "url"
        }
      },
      "required": [
        "chain_id"
      ],
      "title": "EvmSourcifyDatasourceConfig",
      "additionalProperties": false
    },
    "EvmSubsquidDatasourceConfig": {
      "type": "object",
      "description": "Subsquid datasource config",
      "properties": {
        "http": {
          "anyOf": [
            {
              "$ref": "#/$defs/HttpConfig"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "HTTP client configuration",
          "title": "http"
        },
        "kind": {
          "const": "evm.subsquid",
          "default": "evm.subsquid",
          "description": "always 'evm.subsquid'",
          "title": "kind",
          "type": "string"
        },
        "url": {
          "$ref": "#/$defs/Url",
          "description": "URL of Subsquid Network API",
          "title": "url"
        }
      },
      "required": [
        "url"
      ],
      "title": "EvmSubsquidDatasourceConfig",
      "additionalProperties": false
    },
    "EvmTransactionsHandlerConfig": {
      "type": "object",
      "description": "Subsquid transaction handler",
      "properties": {
        "callback": {
          "description": "Callback name",
          "title": "callback",
          "type": "string"
        },
        "from": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/$defs/EvmContractConfig"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Transaction sender",
          "title": "from"
        },
        "method": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Method name",
          "title": "method"
        },
        "signature": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Method signature",
          "title": "signature"
        },
        "to": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/$defs/EvmContractConfig"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Transaction receiver",
          "title": "to"
        }
      },
      "required": [
        "callback"
      ],
      "title": "EvmTransactionsHandlerConfig",
      "additionalProperties": false
    },
    "EvmTransactionsIndexConfig": {
      "type": "object",
      "description": "Index that uses Subsquid Network as a datasource for transactions",
      "properties": {
        "datasources": {
          "description": "`evm` datasources to use",
          "items": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "$ref": "#/$defs/EvmDatasourceConfigU"
              }
            ]
          },
          "title": "datasources",
          "type": "array"
        },
        "first_level": {
          "default": 0,
          "description": "Level to start indexing from",
          "title": "first_level",
          "type": "integer"
        },
        "handlers": {
          "description": "Transaction handlers",
          "items": {
            "$ref": "#/$defs/EvmTransactionsHandlerConfig"
          },
          "title": "handlers",
          "type": "array"
        },
        "kind": {
          "const": "evm.transactions",
          "default": "evm.transactions",
          "description": "always 'evm.transactions'",
          "title": "kind",
          "type": "string"
        },
        "last_level": {
          "default": 0,
          "description": "Level to stop indexing at",
          "title": "last_level",
          "type": "integer"
        }
      },
      "required": [
        "datasources",
        "handlers"
      ],
      "title": "EvmTransactionsIndexConfig",
      "additionalProperties": false
    },
    "HasuraConfig": {
      "type": "object",
      "description": "Config for the Hasura integration.",
      "properties": {
        "admin_secret": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Admin secret of the Hasura instance.",
          "title": "admin_secret"
        },
        "allow_aggregations": {
          "default": true,
          "description": "Whether to allow aggregations in unauthenticated queries.",
          "title": "allow_aggregations",
          "type": "boolean"
        },
        "allow_inconsistent_metadata": {
          "default": false,
          "description": "Whether to ignore errors when applying Hasura metadata.",
          "title": "allow_inconsistent_metadata",
          "type": "boolean"
        },
        "camel_case": {
          "default": true,
          "description": "Whether to use camelCase instead of default pascal_case for the field names.",
          "title": "camel_case",
          "type": "boolean"
        },
        "create_source": {
          "default": false,
          "description": "Whether source should be added to Hasura if missing.",
          "title": "create_source",
          "type": "boolean"
        },
        "hide": {
          "description": "List of table/view names to make private.",
          "items": {
            "type": "string"
          },
          "title": "hide",
          "type": "array"
        },
        "hide_internal": {
          "default": false,
          "description": "Whether to make internal tables (prefixed with \"dipdup\") private.",
          "title": "hide_internal",
          "type": "boolean"
        },
        "http": {
          "anyOf": [
            {
              "$ref": "#/$defs/HttpConfig"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "HTTP connection tunables",
          "title": "http"
        },
        "rest": {
          "default": true,
          "description": "Enable REST API both for autogenerated and custom queries.",
          "title": "rest",
          "type": "boolean"
        },
        "select_limit": {
          "default": 10000,
          "description": "Row limit for unauthenticated queries.",
          "title": "select_limit",
          "type": "integer"
        },
        "source": {
          "default": "default",
          "description": "Hasura source for DipDup to configure, others will be left untouched.",
          "title": "source",
          "type": "string"
        },
        "url": {
          "$ref": "#/$defs/Url",
          "description": "URL of the Hasura instance.",
          "title": "url"
        }
      },
      "required": [
        "url"
      ],
      "title": "HasuraConfig",
      "additionalProperties": false
    },
    "Hex": {
      "type": "string"
    },
    "HookConfig": {
      "type": "object",
      "description": "Hook config",
      "properties": {
        "args": {
          "type": "object",
          "description": "Mapping of argument names and annotations (checked lazily when possible)",
          "title": "args",
          "additionalProperties": {
            "type": "string"
          }
        },
        "atomic": {
          "default": false,
          "description": "Wrap hook in a single database transaction",
          "title": "atomic",
          "type": "boolean"
        },
        "callback": {
          "description": "Callback name",
          "title": "callback",
          "type": "string"
        }
      },
      "required": [
        "callback"
      ],
      "title": "HookConfig",
      "additionalProperties": false
    },
    "HttpConfig": {
      "type": "object",
      "description": "Advanced configuration of HTTP client",
      "properties": {
        "alias": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Alias for this HTTP client (dev only)",
          "title": "alias"
        },
        "batch_size": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Number of items fetched in a single paginated request (when applicable)",
          "title": "batch_size"
        },
        "connection_limit": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Number of simultaneous connections",
          "title": "connection_limit"
        },
        "connection_timeout": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Connection timeout in seconds",
          "title": "connection_timeout"
        },
        "polling_interval": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Interval between polling requests in seconds (when applicable)",
          "title": "polling_interval"
        },
        "ratelimit_period": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Time period for rate limiting in seconds",
          "title": "ratelimit_period"
        },
        "ratelimit_rate": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Number of requests per period (\"drops\" in leaky bucket)",
          "title": "ratelimit_rate"
        },
        "ratelimit_sleep": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Sleep time between requests when rate limit is reached",
          "title": "ratelimit_sleep"
        },
        "replay": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Use cached HTTP responses instead of making real requests (dev only)",
          "title": "replay"
        },
        "replay_path": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "format": "path",
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Use cached HTTP responses instead of making real requests (dev only)",
          "title": "replay_path"
        },
        "request_timeout": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Request timeout in seconds",
          "title": "request_timeout"
        },
        "retry_count": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Number of retries after request failed before giving up",
          "title": "retry_count"
        },
        "retry_multiplier": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Multiplier for sleep time between retries",
          "title": "retry_multiplier"
        },
        "retry_sleep": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Sleep time between retries",
          "title": "retry_sleep"
        }
      },
      "title": "HttpConfig",
      "additionalProperties": false
    },
    "HttpDatasourceConfig": {
      "type": "object",
      "description": "Generic HTTP datasource config",
      "properties": {
        "http": {
          "anyOf": [
            {
              "$ref": "#/$defs/HttpConfig"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "HTTP client configuration",
          "title": "http"
        },
        "kind": {
          "const": "http",
          "default": "http",
          "description": "always 'http'",
          "title": "kind",
          "type": "string"
        },
        "url": {
          "$ref": "#/$defs/Url",
          "description": "URL to fetch data from",
          "title": "url"
        }
      },
      "required": [
        "url"
      ],
      "title": "HttpDatasourceConfig",
      "additionalProperties": false
    },
    "IndexTemplateConfig": {
      "type": "object",
      "description": "Index template config",
      "properties": {
        "first_level": {
          "default": 0,
          "description": "Level to start indexing from",
          "title": "first_level",
          "type": "integer"
        },
        "kind": {
          "const": "template",
          "default": "template",
          "description": "always 'template'",
          "title": "kind",
          "type": "string"
        },
        "last_level": {
          "default": 0,
          "description": "Level to stop indexing at",
          "title": "last_level",
          "type": "integer"
        },
        "template": {
          "description": "Template alias in `templates` section",
          "title": "template",
          "type": "string"
        },
        "values": {
          "description": "Values to be substituted in template (`<key>` -> `value`)",
          "title": "values",
          "type": "object"
        }
      },
      "required": [
        "template",
        "values"
      ],
      "title": "IndexTemplateConfig",
      "additionalProperties": false
    },
    "IpfsDatasourceConfig": {
      "type": "object",
      "description": "IPFS datasource config",
      "properties": {
        "http": {
          "anyOf": [
            {
              "$ref": "#/$defs/HttpConfig"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "HTTP client configuration",
          "title": "http"
        },
        "kind": {
          "const": "ipfs",
          "default": "ipfs",
          "description": "always 'ipfs'",
          "title": "kind",
          "type": "string"
        },
        "url": {
          "$ref": "#/$defs/Url",
          "default": "https://ipfs.io/ipfs",
          "description": "IPFS node URL, e.g. <https://ipfs.io/ipfs/>",
          "title": "url"
        }
      },
      "title": "IpfsDatasourceConfig",
      "additionalProperties": false
    },
    "JobConfig": {
      "type": "object",
      "description": "Job schedule config",
      "properties": {
        "args": {
          "description": "Arguments to pass to the hook",
          "title": "args",
          "type": "object"
        },
        "crontab": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Schedule with crontab syntax (`* * * * *`)",
          "title": "crontab"
        },
        "daemon": {
          "default": false,
          "description": "Run hook as a daemon (never stops)",
          "title": "daemon",
          "type": "boolean"
        },
        "hook": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/$defs/HookConfig"
            }
          ],
          "description": "Name of hook to run",
          "title": "hook"
        },
        "interval": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Schedule with interval in seconds",
          "title": "interval"
        }
      },
      "required": [
        "hook"
      ],
      "title": "JobConfig",
      "additionalProperties": false
    },
    "McpConfig": {
      "type": "object",
      "description": "Config for MCP server",
      "properties": {
        "api_url": {
          "anyOf": [
            {
              "$ref": "#/$defs/Url"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "URL of the management API",
          "title": "api_url"
        },
        "compatibility": {
          "default": true,
          "description": "Whether to expose resources as tools for clients that don't support MCP resources",
          "title": "compatibility",
          "type": "boolean"
        },
        "host": {
          "default": "127.0.0.1",
          "description": "Host to bind to",
          "title": "host",
          "type": "string"
        },
        "port": {
          "default": 9999,
          "description": "Port to bind to",
          "title": "port",
          "type": "integer"
        }
      },
      "title": "McpConfig",
      "additionalProperties": false
    },
    "PostgresDatabaseConfig": {
      "type": "object",
      "description": "Postgres database connection config",
      "properties": {
        "connection_timeout": {
          "default": 60,
          "description": "Connection timeout",
          "title": "connection_timeout",
          "type": "integer"
        },
        "database": {
          "default": "postgres",
          "description": "Database name",
          "title": "database",
          "type": "string"
        },
        "host": {
          "description": "Host",
          "title": "host",
          "type": "string"
        },
        "immune_tables": {
          "description": "List of tables to preserve during reindexing",
          "items": {
            "type": "string"
          },
          "title": "immune_tables",
          "type": "array",
          "uniqueItems": true
        },
        "kind": {
          "const": "postgres",
          "default": "postgres",
          "description": "always 'postgres'",
          "title": "kind",
          "type": "string"
        },
        "password": {
          "default": "",
          "description": "Password",
          "title": "password",
          "type": "string"
        },
        "port": {
          "default": 5432,
          "description": "Port",
          "title": "port",
          "type": "integer"
        },
        "schema_name": {
          "default": "public",
          "description": "Schema name",
          "title": "schema_name",
          "type": "string"
        },
        "user": {
          "default": "postgres",
          "description": "User",
          "title": "user",
          "type": "string"
        }
      },
      "required": [
        "host"
      ],
      "title": "PostgresDatabaseConfig",
      "additionalProperties": false
    },
    "PrometheusConfig": {
      "type": "object",
      "description": "Config for Prometheus integration.",
      "properties": {
        "host": {
          "default": "127.0.0.1",
          "description": "Host to bind to",
          "title": "host",
          "type": "string"
        },
        "port": {
          "default": 8000,
          "description": "Port to bind to",
          "title": "port",
          "type": "integer"
        },
        "update_interval": {
          "default": 1.0,
          "description": "Interval to update some metrics in seconds",
          "title": "update_interval",
          "type": "number"
        }
      },
      "title": "PrometheusConfig",
      "additionalProperties": false
    },
    "ReindexingAction": {
      "description": "Action that should be performed on reindexing\n\n:param exception: Raise `ReindexingRequiredError` exception.\n:param wipe: Wipe the database and reindex from scratch. (WARNING: This action is irreversible! All indexed data will be lost!)\n:param ignore: Ignore the reindexing cause and continue.",
      "enum": [
        "exception",
        "wipe",
        "ignore"
      ],
      "title": "ReindexingAction",
      "type": "string"
    },
    "ReindexingReason": {
      "description": "Reason that caused reindexing\n\n:param manual: Manual reindexing.\n:param migration: Migration of the database schema.\n:param rollback: Rollback that couldn't be handled automatically.\n:param config_modified: Index config was modified.\n:param schema_modified: Project models or database schema were modified.",
      "enum": [
        "manual",
        "migration",
        "rollback",
        "config_modified",
        "schema_modified"
      ],
      "title": "ReindexingReason",
      "type": "string"
    },
    "SentryConfig": {
      "type": "object",
      "description": "Config for Sentry integration.",
      "properties": {
        "debug": {
          "default": false,
          "description": "Catch warning messages, increase verbosity.",
          "title": "debug",
          "type": "boolean"
        },
        "dsn": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "DSN of the Sentry instance",
          "title": "dsn"
        },
        "environment": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Environment; if not set, guessed from docker/ci/gha/local.",
          "title": "environment"
        },
        "release": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Release version; defaults to DipDup package version.",
          "title": "release"
        },
        "server_name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Server name; defaults to obfuscated hostname.",
          "title": "server_name"
        },
        "user_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "User ID; defaults to obfuscated package/environment.",
          "title": "user_id"
        }
      },
      "title": "SentryConfig",
      "additionalProperties": false
    },
    "SkipHistory": {
      "description": "Whether to skip indexing big map history and use only current state\n\n:param never: Always index big map historical updates.\n:param once: Skip history once after reindexing; process updates as usual on the next resync.\n:param always: Always skip big map history.",
      "enum": [
        "never",
        "once",
        "always"
      ],
      "title": "SkipHistory",
      "type": "string"
    },
    "SqliteDatabaseConfig": {
      "type": "object",
      "description": "SQLite connection config",
      "properties": {
        "immune_tables": {
          "description": "List of tables to preserve during reindexing",
          "items": {
            "type": "string"
          },
          "title": "immune_tables",
          "type": "array",
          "uniqueItems": true
        },
        "kind": {
          "const": "sqlite",
          "default": "sqlite",
          "description": "always 'sqlite'",
          "title": "kind",
          "type": "string"
        },
        "path": {
          "default": ":memory:",
          "description": "Path to .sqlite file, leave default for in-memory database (`:memory:`)",
          "title": "path",
          "type": "string"
        }
      },
      "title": "SqliteDatabaseConfig",
      "additionalProperties": false
    },
    "StarknetAddress": {
      "$ref": "#/$defs/Hex"
    },
    "StarknetContractConfig": {
      "type": "object",
      "description": "Starknet contract config",
      "properties": {
        "abi": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Contract ABI",
          "title": "abi"
        },
        "address": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Contract address",
          "title": "address"
        },
        "kind": {
          "const": "starknet",
          "default": "starknet",
          "description": "Always `starknet`",
          "title": "kind",
          "type": "string"
        },
        "typename": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Alias for the contract script",
          "title": "typename"
        }
      },
      "title": "StarknetContractConfig",
      "additionalProperties": false
    },
    "StarknetDatasourceConfigU": {
      "anyOf": [
        {
          "$ref": "#/$defs/StarknetSubsquidDatasourceConfig"
        },
        {
          "$ref": "#/$defs/StarknetNodeDatasourceConfig"
        }
      ]
    },
    "StarknetEventsHandlerConfig": {
      "type": "object",
      "description": "Subsquid event handler",
      "properties": {
        "callback": {
          "description": "Callback name",
          "title": "callback",
          "type": "string"
        },
        "contract": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/$defs/StarknetContractConfig"
            }
          ],
          "description": "Starknet contract",
          "title": "contract"
        },
        "name": {
          "description": "Event name",
          "title": "name",
          "type": "string"
        }
      },
      "required": [
        "callback",
        "contract",
        "name"
      ],
      "title": "StarknetEventsHandlerConfig",
      "additionalProperties": false
    },
    "StarknetEventsIndexConfig": {
      "type": "object",
      "description": "Starknet events index config",
      "properties": {
        "datasources": {
          "description": "Aliases of index datasources in `datasources` section",
          "items": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "$ref": "#/$defs/StarknetDatasourceConfigU"
              }
            ]
          },
          "title": "datasources",
          "type": "array"
        },
        "first_level": {
          "default": 0,
          "description": "Level to start indexing from",
          "title": "first_level",
          "type": "integer"
        },
        "handlers": {
          "description": "Event handlers",
          "items": {
            "$ref": "#/$defs/StarknetEventsHandlerConfig"
          },
          "title": "handlers",
          "type": "array"
        },
        "kind": {
          "const": "starknet.events",
          "default": "starknet.events",
          "description": "Always 'starknet.events'",
          "title": "kind",
          "type": "string"
        },
        "last_level": {
          "default": 0,
          "description": "Level to stop indexing at",
          "title": "last_level",
          "type": "integer"
        }
      },
      "required": [
        "datasources",
        "handlers"
      ],
      "title": "StarknetEventsIndexConfig",
      "additionalProperties": false
    },
    "StarknetNodeDatasourceConfig": {
      "type": "object",
      "description": "Starknet node datasource config",
      "properties": {
        "fetch_block_headers": {
          "default": false,
          "description": "Flag signalling that this datasource can be used for block headers fetching",
          "title": "fetch_block_headers",
          "type": "boolean"
        },
        "http": {
          "anyOf": [
            {
              "$ref": "#/$defs/HttpConfig"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "HTTP client configuration",
          "title": "http"
        },
        "kind": {
          "const": "starknet.node",
          "default": "starknet.node",
          "description": "Always 'starknet.node'",
          "title": "kind",
          "type": "string"
        },
        "rollback_depth": {
          "default": 32,
          "description": "A number of blocks to store in database for rollback",
          "title": "rollback_depth",
          "type": "integer"
        },
        "url": {
          "$ref": "#/$defs/Url",
          "description": "Starknet node URL",
          "title": "url"
        },
        "ws_url": {
          "anyOf": [
            {
              "$ref": "#/$defs/WsUrl"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Starknet node WebSocket URL",
          "title": "ws_url"
        }
      },
      "required": [
        "url"
      ],
      "title": "StarknetNodeDatasourceConfig",
      "additionalProperties": false
    },
    "StarknetSubsquidDatasourceConfig": {
      "type": "object",
      "description": "Subsquid datasource config",
      "properties": {
        "http": {
          "anyOf": [
            {
              "$ref": "#/$defs/HttpConfig"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "HTTP client configuration",
          "title": "http"
        },
        "kind": {
          "const": "starknet.subsquid",
          "default": "starknet.subsquid",
          "description": "always 'starknet.subsquid'",
          "title": "kind",
          "type": "string"
        },
        "url": {
          "$ref": "#/$defs/Url",
          "description": "URL of Subsquid Network API",
          "title": "url"
        }
      },
      "required": [
        "url"
      ],
      "title": "StarknetSubsquidDatasourceConfig",
      "additionalProperties": false
    },
    "SubstrateDatasourceConfigU": {
      "anyOf": [
        {
          "$ref": "#/$defs/SubstrateSubsquidDatasourceConfig"
        },
        {
          "$ref": "#/$defs/SubstrateSubscanDatasourceConfig"
        },
        {
          "$ref": "#/$defs/SubstrateNodeDatasourceConfig"
        }
      ]
    },
    "SubstrateEventsHandlerConfig": {
      "type": "object",
      "description": "Subsquid event handler",
      "properties": {
        "callback": {
          "description": "Callback name",
          "title": "callback",
          "type": "string"
        },
        "name": {
          "description": "Event name (pallet.event)",
          "title": "name",
          "type": "string"
        }
      },
      "required": [
        "callback",
        "name"
      ],
      "title": "SubstrateEventsHandlerConfig",
      "additionalProperties": false
    },
    "SubstrateEventsIndexConfig": {
      "type": "object",
      "description": "Subsquid datasource config",
      "properties": {
        "datasources": {
          "description": "`substrate` datasources to use",
          "items": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "$ref": "#/$defs/SubstrateDatasourceConfigU"
              }
            ]
          },
          "title": "datasources",
          "type": "array"
        },
        "first_level": {
          "default": 0,
          "description": "Level to start indexing from",
          "title": "first_level",
          "type": "integer"
        },
        "handlers": {
          "description": "Event handlers",
          "items": {
            "$ref": "#/$defs/SubstrateEventsHandlerConfig"
          },
          "title": "handlers",
          "type": "array"
        },
        "kind": {
          "const": "substrate.events",
          "default": "substrate.events",
          "description": "Always 'substrate.events'",
          "title": "kind",
          "type": "string"
        },
        "last_level": {
          "default": 0,
          "description": "Level to stop indexing and disable this index",
          "title": "last_level",
          "type": "integer"
        },
        "runtime": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/$defs/SubstrateRuntimeConfig"
            }
          ],
          "description": "Substrate runtime",
          "title": "runtime"
        }
      },
      "required": [
        "datasources",
        "runtime",
        "handlers"
      ],
      "title": "SubstrateEventsIndexConfig",
      "additionalProperties": false
    },
    "SubstrateNodeDatasourceConfig": {
      "type": "object",
      "description": "Substrate node datasource config",
      "properties": {
        "http": {
          "anyOf": [
            {
              "$ref": "#/$defs/HttpConfig"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "HTTP client configuration",
          "title": "http"
        },
        "kind": {
          "const": "substrate.node",
          "default": "substrate.node",
          "description": "Always 'substrate.node'",
          "title": "kind",
          "type": "string"
        },
        "url": {
          "$ref": "#/$defs/Url",
          "description": "Substrate node URL",
          "title": "url"
        },
        "ws_url": {
          "anyOf": [
            {
              "$ref": "#/$defs/WsUrl"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Substrate node WebSocket URL",
          "title": "ws_url"
        }
      },
      "required": [
        "url"
      ],
      "title": "SubstrateNodeDatasourceConfig",
      "additionalProperties": false
    },
    "SubstrateRuntimeConfig": {
      "type": "object",
      "description": "Substrate runtime config",
      "properties": {
        "kind": {
          "const": "substrate",
          "default": "substrate",
          "description": "Always 'substrate'",
          "title": "kind",
          "type": "string"
        },
        "type_registry": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Path to type registry or its alias",
          "title": "type_registry"
        }
      },
      "title": "SubstrateRuntimeConfig",
      "additionalProperties": false
    },
    "SubstrateSubscanDatasourceConfig": {
      "type": "object",
      "description": "Subscan datasource config",
      "properties": {
        "api_key": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "API key",
          "title": "api_key"
        },
        "http": {
          "anyOf": [
            {
              "$ref": "#/$defs/HttpConfig"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "HTTP client configuration",
          "title": "http"
        },
        "kind": {
          "const": "substrate.subscan",
          "default": "substrate.subscan",
          "description": "always 'substrate.subscan'",
          "title": "kind",
          "type": "string"
        },
        "url": {
          "$ref": "#/$defs/Url",
          "description": "API URL",
          "title": "url"
        }
      },
      "required": [
        "url"
      ],
      "title": "SubstrateSubscanDatasourceConfig",
      "additionalProperties": false
    },
    "SubstrateSubsquidDatasourceConfig": {
      "type": "object",
      "description": "Subsquid datasource config",
      "properties": {
        "http": {
          "anyOf": [
            {
              "$ref": "#/$defs/HttpConfig"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "HTTP client configuration",
          "title": "http"
        },
        "kind": {
          "const": "substrate.subsquid",
          "default": "substrate.subsquid",
          "description": "always 'substrate.subsquid'",
          "title": "kind",
          "type": "string"
        },
        "url": {
          "$ref": "#/$defs/Url",
          "description": "URL of Subsquid Network API",
          "title": "url"
        }
      },
      "required": [
        "url"
      ],
      "title": "SubstrateSubsquidDatasourceConfig",
      "additionalProperties": false
    },
    "TezosAddress": {
      "type": "string"
    },
    "TezosBigMapsHandlerConfig": {
      "type": "object",
      "description": "Big map handler config",
      "properties": {
        "callback": {
          "description": "Callback name",
          "title": "callback",
          "type": "string"
        },
        "contract": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/$defs/TezosContractConfig"
            }
          ],
          "description": "Contract to fetch big map from",
          "title": "contract"
        },
        "path": {
          "description": "Path to big map (alphanumeric string with dots)",
          "title": "path",
          "type": "string"
        }
      },
      "required": [
        "callback",
        "contract",
        "path"
      ],
      "title": "TezosBigMapsHandlerConfig",
      "additionalProperties": false
    },
    "TezosBigMapsIndexConfig": {
      "type": "object",
      "description": "Big map index config",
      "properties": {
        "datasources": {
          "description": "Tezos datasources to use",
          "items": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "$ref": "#/$defs/TezosTzktDatasourceConfig"
              }
            ]
          },
          "title": "datasources",
          "type": "array"
        },
        "first_level": {
          "default": 0,
          "description": "Level to start indexing from",
          "title": "first_level",
          "type": "integer"
        },
        "handlers": {
          "description": "Mapping of big map diff handlers",
          "items": {
            "$ref": "#/$defs/TezosBigMapsHandlerConfig"
          },
          "title": "handlers",
          "type": "array"
        },
        "kind": {
          "const": "tezos.big_maps",
          "default": "tezos.big_maps",
          "description": "always 'tezos.big_maps'",
          "title": "kind",
          "type": "string"
        },
        "last_level": {
          "default": 0,
          "description": "Level to stop indexing at",
          "title": "last_level",
          "type": "integer"
        },
        "skip_history": {
          "$ref": "#/$defs/SkipHistory",
          "default": "never",
          "description": "Fetch only current big map keys ignoring historical changes",
          "title": "skip_history"
        }
      },
      "required": [
        "datasources",
        "handlers"
      ],
      "title": "TezosBigMapsIndexConfig",
      "additionalProperties": false
    },
    "TezosContractConfig": {
      "type": "object",
      "description": "Tezos contract config.",
      "properties": {
        "address": {
          "anyOf": [
            {
              "$ref": "#/$defs/TezosAddress"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Contract address",
          "title": "address"
        },
        "code_hash": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "$ref": "#/$defs/TezosAddress"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Contract code hash or address to fetch it from",
          "title": "code_hash"
        },
        "kind": {
          "const": "tezos",
          "default": "tezos",
          "description": "Always `tezos`",
          "title": "kind",
          "type": "string"
        },
        "typename": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Alias for the contract script",
          "title": "typename"
        }
      },
      "title": "TezosContractConfig",
      "additionalProperties": false
    },
    "TezosEventsHandlerConfig": {
      "type": "object",
      "description": "Event handler config",
      "properties": {
        "callback": {
          "description": "Callback name",
          "title": "callback",
          "type": "string"
        },
        "contract": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/$defs/TezosContractConfig"
            }
          ],
          "description": "Contract which emits event",
          "title": "contract"
        },
        "tag": {
          "description": "Event tag",
          "title": "tag",
          "type": "string"
        }
      },
      "required": [
        "callback",
        "contract",
        "tag"
      ],
      "title": "TezosEventsHandlerConfig",
      "additionalProperties": false
    },
    "TezosEventsIndexConfig": {
      "type": "object",
      "description": "Event index config",
      "properties": {
        "datasources": {
          "description": "`evm` datasources to use",
          "items": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "$ref": "#/$defs/TezosTzktDatasourceConfig"
              }
            ]
          },
          "title": "datasources",
          "type": "array"
        },
        "first_level": {
          "default": 0,
          "description": "First block level to index",
          "title": "first_level",
          "type": "integer"
        },
        "handlers": {
          "description": "Event handlers",
          "items": {
            "anyOf": [
              {
                "$ref": "#/$defs/TezosEventsHandlerConfig"
              },
              {
                "$ref": "#/$defs/TezosEventsUnknownEventHandlerConfig"
              }
            ]
          },
          "title": "handlers",
          "type": "array"
        },
        "kind": {
          "const": "tezos.events",
          "default": "tezos.events",
          "description": "always 'tezos.events'",
          "title": "kind",
          "type": "string"
        },
        "last_level": {
          "default": 0,
          "description": "Last block level to index",
          "title": "last_level",
          "type": "integer"
        }
      },
      "required": [
        "datasources",
        "handlers"
      ],
      "title": "TezosEventsIndexConfig",
      "additionalProperties": false
    },
    "TezosEventsUnknownEventHandlerConfig": {
      "type": "object",
      "description": "Unknown event handler config",
      "properties": {
        "callback": {
          "description": "Callback name",
          "title": "callback",
          "type": "string"
        },
        "contract": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/$defs/TezosContractConfig"
            }
          ],
          "description": "Contract which emits event",
          "title": "contract"
        }
      },
      "required": [
        "callback",
        "contract"
      ],
      "title": "TezosEventsUnknownEventHandlerConfig",
      "additionalProperties": false
    },
    "TezosHeadIndexConfig": {
      "type": "object",
      "description": "Head block index config",
      "properties": {
        "callback": {
          "description": "Callback name",
          "title": "callback",
          "type": "string"
        },
        "datasources": {
          "description": "`tezos` datasources to use",
          "items": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "$ref": "#/$defs/TezosTzktDatasourceConfig"
              }
            ]
          },
          "title": "datasources",
          "type": "array"
        },
        "kind": {
          "const": "tezos.head",
          "default": "tezos.head",
          "description": "always 'tezos.head'",
          "title": "kind",
          "type": "string"
        }
      },
      "required": [
        "datasources",
        "callback"
      ],
      "title": "TezosHeadIndexConfig",
      "additionalProperties": false
    },
    "TezosOperationType": {
      "description": "Type of blockchain operation\n\n:param transaction: transaction\n:param origination: origination\n:param migration: migration\n:param sr_execute: sr_execute\n:param sr_cement: sr_cement",
      "enum": [
        "transaction",
        "origination",
        "migration",
        "sr_execute",
        "sr_cement"
      ],
      "title": "TezosOperationType",
      "type": "string"
    },
    "TezosOperationsHandlerConfig": {
      "type": "object",
      "description": "Operation handler config",
      "properties": {
        "callback": {
          "description": "Callback name",
          "title": "callback",
          "type": "string"
        },
        "pattern": {
          "description": "Filters to match operation groups",
          "items": {
            "anyOf": [
              {
                "$ref": "#/$defs/TezosOperationsHandlerTransactionPatternConfig"
              },
              {
                "$ref": "#/$defs/TezosOperationsHandlerOriginationPatternConfig"
              },
              {
                "$ref": "#/$defs/TezosOperationsHandlerSmartRollupCementPatternConfig"
              },
              {
                "$ref": "#/$defs/TezosOperationsHandlerSmartRollupExecutePatternConfig"
              }
            ]
          },
          "title": "pattern",
          "type": "array"
        }
      },
      "required": [
        "callback",
        "pattern"
      ],
      "title": "TezosOperationsHandlerConfig",
      "additionalProperties": false
    },
    "TezosOperationsHandlerOriginationPatternConfig": {
      "type": "object",
      "description": "Origination handler pattern config",
      "properties": {
        "alias": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Alias for operation (helps to avoid duplicates)",
          "title": "alias"
        },
        "optional": {
          "default": false,
          "description": "Whether can operation be missing in operation group",
          "title": "optional",
          "type": "boolean"
        },
        "originated_contract": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/$defs/TezosContractConfig"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Match origination of exact contract",
          "title": "originated_contract"
        },
        "source": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/$defs/TezosContractConfig"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Match operations by source contract alias",
          "title": "source"
        },
        "strict": {
          "default": false,
          "description": "Match operations by storage only or by the whole code",
          "title": "strict",
          "type": "boolean"
        },
        "type": {
          "const": "origination",
          "default": "origination",
          "description": "always 'origination'",
          "title": "type",
          "type": "string"
        }
      },
      "title": "TezosOperationsHandlerOriginationPatternConfig",
      "additionalProperties": false
    },
    "TezosOperationsHandlerSmartRollupCementPatternConfig": {
      "type": "object",
      "description": "Operation handler pattern config",
      "properties": {
        "alias": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Alias for operation (helps to avoid duplicates)",
          "title": "alias"
        },
        "destination": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/$defs/TezosContractConfig"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Match operations by destination contract alias",
          "title": "destination"
        },
        "optional": {
          "default": false,
          "description": "Whether can operation be missing in operation group",
          "title": "optional",
          "type": "boolean"
        },
        "source": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/$defs/TezosContractConfig"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Match operations by source contract alias",
          "title": "source"
        },
        "type": {
          "const": "sr_cement",
          "default": "sr_cement",
          "description": "always 'sr_cement'",
          "title": "type",
          "type": "string"
        }
      },
      "title": "TezosOperationsHandlerSmartRollupCementPatternConfig",
      "additionalProperties": false
    },
    "TezosOperationsHandlerSmartRollupExecutePatternConfig": {
      "type": "object",
      "description": "Operation handler pattern config",
      "properties": {
        "alias": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Alias for operation (helps to avoid duplicates)",
          "title": "alias"
        },
        "destination": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/$defs/TezosContractConfig"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Match operations by destination contract alias",
          "title": "destination"
        },
        "optional": {
          "default": false,
          "description": "Whether can operation be missing in operation group",
          "title": "optional",
          "type": "boolean"
        },
        "source": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/$defs/TezosContractConfig"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Match operations by source contract alias",
          "title": "source"
        },
        "type": {
          "const": "sr_execute",
          "default": "sr_execute",
          "description": "always 'sr_execute'",
          "title": "type",
          "type": "string"
        }
      },
      "title": "TezosOperationsHandlerSmartRollupExecutePatternConfig",
      "additionalProperties": false
    },
    "TezosOperationsHandlerTransactionPatternConfig": {
      "type": "object",
      "description": "Transaction handler pattern config",
      "properties": {
        "alias": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Alias for operation (helps to avoid duplicates)",
          "title": "alias"
        },
        "destination": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/$defs/TezosContractConfig"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Match operations by destination contract alias",
          "title": "destination"
        },
        "entrypoint": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Match operations by contract entrypoint",
          "title": "entrypoint"
        },
        "optional": {
          "default": false,
          "description": "Whether can operation be missing in operation group",
          "title": "optional",
          "type": "boolean"
        },
        "source": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/$defs/TezosContractConfig"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Match operations by source contract alias",
          "title": "source"
        },
        "type": {
          "const": "transaction",
          "default": "transaction",
          "description": "always 'transaction'",
          "title": "type",
          "type": "string"
        }
      },
      "title": "TezosOperationsHandlerTransactionPatternConfig",
      "additionalProperties": false
    },
    "TezosOperationsIndexConfig": {
      "type": "object",
      "description": "Operation index config",
      "properties": {
        "contracts": {
          "description": "Aliases of contracts being indexed in `contracts` section",
          "items": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "$ref": "#/$defs/TezosContractConfig"
              }
            ]
          },
          "title": "contracts",
          "type": "array"
        },
        "datasources": {
          "description": "`tezos` datasources to use",
          "items": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "$ref": "#/$defs/TezosTzktDatasourceConfig"
              }
            ]
          },
          "title": "datasources",
          "type": "array"
        },
        "first_level": {
          "default": 0,
          "description": "Level to start indexing from",
          "title": "first_level",
          "type": "integer"
        },
        "handlers": {
          "description": "List of indexer handlers",
          "items": {
            "$ref": "#/$defs/TezosOperationsHandlerConfig"
          },
          "title": "handlers",
          "type": "array"
        },
        "kind": {
          "const": "tezos.operations",
          "default": "tezos.operations",
          "description": "always 'tezos.operations'",
          "title": "kind",
          "type": "string"
        },
        "last_level": {
          "default": 0,
          "description": "Level to stop indexing at",
          "title": "last_level",
          "type": "integer"
        },
        "types": {
          "default": [
            "transaction"
          ],
          "description": "Types of transaction to fetch",
          "items": {
            "$ref": "#/$defs/TezosOperationType"
          },
          "title": "types",
          "type": "array"
        }
      },
      "required": [
        "datasources",
        "handlers"
      ],
      "title": "TezosOperationsIndexConfig",
      "additionalProperties": false
    },
    "TezosOperationsUnfilteredIndexConfig": {
      "type": "object",
      "description": "Operation index config",
      "properties": {
        "callback": {
          "description": "Callback name",
          "title": "callback",
          "type": "string"
        },
        "datasources": {
          "description": "`tezos` datasources to use",
          "items": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "$ref": "#/$defs/TezosTzktDatasourceConfig"
              }
            ]
          },
          "title": "datasources",
          "type": "array"
        },
        "first_level": {
          "default": 0,
          "description": "Level to start indexing from",
          "title": "first_level",
          "type": "integer"
        },
        "kind": {
          "const": "tezos.operations_unfiltered",
          "default": "tezos.operations_unfiltered",
          "description": "always 'tezos.operations_unfiltered'",
          "title": "kind",
          "type": "string"
        },
        "last_level": {
          "default": 0,
          "description": "Level to stop indexing at",
          "title": "last_level",
          "type": "integer"
        },
        "types": {
          "default": [
            "transaction"
          ],
          "description": "Types of transaction to fetch",
          "items": {
            "$ref": "#/$defs/TezosOperationType"
          },
          "title": "types",
          "type": "array"
        }
      },
      "required": [
        "datasources",
        "callback"
      ],
      "title": "TezosOperationsUnfilteredIndexConfig",
      "additionalProperties": false
    },
    "TezosTokenBalancesHandlerConfig": {
      "type": "object",
      "description": "Token balance handler config",
      "properties": {
        "callback": {
          "description": "Callback name",
          "title": "callback",
          "type": "string"
        },
        "contract": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/$defs/TezosContractConfig"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Filter by contract",
          "title": "contract"
        },
        "token_id": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Filter by token ID",
          "title": "token_id"
        }
      },
      "required": [
        "callback"
      ],
      "title": "TezosTokenBalancesHandlerConfig",
      "additionalProperties": false
    },
    "TezosTokenBalancesIndexConfig": {
      "type": "object",
      "description": "Token balance index config",
      "properties": {
        "datasources": {
          "description": "`tezos` datasources to use",
          "items": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "$ref": "#/$defs/TezosTzktDatasourceConfig"
              }
            ]
          },
          "title": "datasources",
          "type": "array"
        },
        "first_level": {
          "default": 0,
          "description": "Level to start indexing from",
          "title": "first_level",
          "type": "integer"
        },
        "handlers": {
          "description": "Mapping of token transfer handlers",
          "items": {
            "$ref": "#/$defs/TezosTokenBalancesHandlerConfig"
          },
          "title": "handlers",
          "type": "array"
        },
        "kind": {
          "const": "tezos.token_balances",
          "default": "tezos.token_balances",
          "description": "always 'tezos.token_balances'",
          "title": "kind",
          "type": "string"
        },
        "last_level": {
          "default": 0,
          "description": "Level to stop indexing at",
          "title": "last_level",
          "type": "integer"
        }
      },
      "required": [
        "datasources",
        "handlers"
      ],
      "title": "TezosTokenBalancesIndexConfig",
      "additionalProperties": false
    },
    "TezosTokenTransfersHandlerConfig": {
      "type": "object",
      "description": "Token transfer handler config",
      "properties": {
        "callback": {
          "description": "Callback name",
          "title": "callback",
          "type": "string"
        },
        "contract": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/$defs/TezosContractConfig"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Filter by contract",
          "title": "contract"
        },
        "from": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/$defs/TezosContractConfig"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Filter by sender",
          "title": "from"
        },
        "to": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/$defs/TezosContractConfig"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Filter by recipient",
          "title": "to"
        },
        "token_id": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Filter by token ID",
          "title": "token_id"
        }
      },
      "required": [
        "callback"
      ],
      "title": "TezosTokenTransfersHandlerConfig",
      "additionalProperties": false
    },
    "TezosTokenTransfersIndexConfig": {
      "type": "object",
      "description": "Token transfer index config",
      "properties": {
        "datasources": {
          "description": "`tezos` datasources to use",
          "items": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "$ref": "#/$defs/TezosTzktDatasourceConfig"
              }
            ]
          },
          "title": "datasources",
          "type": "array"
        },
        "first_level": {
          "default": 0,
          "description": "Level to start indexing from",
          "title": "first_level",
          "type": "integer"
        },
        "handlers": {
          "description": "Mapping of token transfer handlers",
          "items": {
            "$ref": "#/$defs/TezosTokenTransfersHandlerConfig"
          },
          "title": "handlers",
          "type": "array"
        },
        "kind": {
          "const": "tezos.token_transfers",
          "default": "tezos.token_transfers",
          "description": "always 'tezos.token_transfers'",
          "title": "kind",
          "type": "string"
        },
        "last_level": {
          "default": 0,
          "description": "Level to stop indexing at",
          "title": "last_level",
          "type": "integer"
        }
      },
      "required": [
        "datasources",
        "handlers"
      ],
      "title": "TezosTokenTransfersIndexConfig",
      "additionalProperties": false
    },
    "TezosTzktDatasourceConfig": {
      "type": "object",
      "description": "TzKT datasource config",
      "properties": {
        "buffer_size": {
          "default": 0,
          "description": "Number of levels to keep in FIFO buffer before processing",
          "title": "buffer_size",
          "type": "integer"
        },
        "http": {
          "anyOf": [
            {
              "$ref": "#/$defs/HttpConfig"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "HTTP client configuration",
          "title": "http"
        },
        "kind": {
          "const": "tezos.tzkt",
          "default": "tezos.tzkt",
          "description": "always 'tezos.tzkt'",
          "title": "kind",
          "type": "string"
        },
        "merge_subscriptions": {
          "default": false,
          "description": "Whether to merge realtime subscriptions",
          "title": "merge_subscriptions",
          "type": "boolean"
        },
        "rollback_depth": {
          "default": 2,
          "description": "Number of blocks to keep in the database to handle reorgs",
          "title": "rollback_depth",
          "type": "integer"
        },
        "url": {
          "$ref": "#/$defs/Url",
          "default": "https://api.tzkt.io",
          "description": "Base API URL, e.g. <https://api.tzkt.io/>",
          "title": "url"
        }
      },
      "title": "TezosTzktDatasourceConfig",
      "additionalProperties": false
    },
    "ToStr": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "number"
        }
      ]
    },
    "TzipMetadataDatasourceConfig": {
      "type": "object",
      "description": "DipDup Metadata datasource config",
      "properties": {
        "http": {
          "anyOf": [
            {
              "$ref": "#/$defs/HttpConfig"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "HTTP client configuration",
          "title": "http"
        },
        "kind": {
          "const": "tzip_metadata",
          "default": "tzip_metadata",
          "description": "always 'tzip_metadata'",
          "title": "kind",
          "type": "string"
        },
        "network": {
          "description": "Network name, e.g. mainnet, ghostnet, etc.",
          "title": "network",
          "type": "string"
        },
        "url": {
          "$ref": "#/$defs/Url",
          "default": "https://metadata.dipdup.net",
          "description": "GraphQL API URL, e.g. <https://metadata.dipdup.net>",
          "title": "url"
        }
      },
      "required": [
        "network"
      ],
      "title": "TzipMetadataDatasourceConfig",
      "additionalProperties": false
    },
    "Url": {
      "type": "string"
    },
    "WatchdogAction": {
      "enum": [
        "exception",
        "warning",
        "ignore"
      ],
      "title": "WatchdogAction",
      "type": "string"
    },
    "WatchdogConfig": {
      "type": "object",
      "description": "Config for the watchdog",
      "properties": {
        "action": {
          "anyOf": [
            {
              "$ref": "#/$defs/WatchdogAction"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Action to perform when watchdog timeout is reached",
          "title": "action"
        },
        "timeout": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Watchdog timeout in seconds",
          "title": "timeout"
        }
      },
      "title": "WatchdogConfig",
      "additionalProperties": false
    },
    "WatchdogTrigger": {
      "enum": [
        "callback",
        "transaction",
        "websocket"
      ],
      "title": "WatchdogTrigger",
      "type": "string"
    },
    "WsUrl": {
      "type": "string"
    }
  },
  "required": [],
  "additionalProperties": false
}
