UNPKG

@openzeppelin/defender-as-code

Version:
2 lines (1 loc) 19 kB
{ "$id": "definitions.schema.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "Definitions", "definitions": { "defender-id": { "title": "DefenderID", "type": "string", "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-(8|9|a|b)[0-9a-fA-F]{3}-[0-9a-fA-F]{12}$" }, "address": { "title": "Address", "type": "string", "pattern": "^0x[a-fA-F0-9]{40}$" }, "risk-category": { "title": "RiskCategory", "type": "string", "enum": ["NONE", "GOVERNANCE", "ACCESS-CONTROL", "SUSPICIOUS", "FINANCIAL", "TECHNICAL"] }, "public-network": { "title": "PublicNetwork", "type": "string", "enum": ["alfajores", "amoy", "arbitrum", "arbitrum-nova", "arbitrum-sepolia", "aurora", "auroratest", "avalanche", "base", "base-sepolia", "bsc", "bsctest", "celo", "fantom", "fantomtest", "fuji", "fuse", "hedera", "hederatest", "holesky", "linea", "linea-sepolia", "mainnet", "mantle", "mantle-sepolia", "matic", "matic-zkevm", "matic-zkevm-testnet", "meld", "meld-kanazawa", "moonbase", "moonbeam", "moonriver", "mumbai", "optimism", "optimism-sepolia", "scroll", "scroll-sepolia", "sepolia", "xdai", "zksync", "zksync-sepolia", "japan", "japan-testnet", "unichain", "unichain-sepolia", "geist-polter", "geist-mainnet", "peaq-mainnet", "peaq-agung"] }, "custom-network": { "title": "CustomNetwork", "type": "string", "enum": ["x-dfk-avax-chain", "x-dfk-avax-chain-test", "x-security-alliance"] }, "tenant-network": { "title": "TenantNetwork", "type": "string" }, "network": { "title": "Network", "anyOf": [{ "$ref": "#/definitions/supported-network" }, { "$ref": "#/definitions/tenant-network" }] }, "supported-network": { "title": "SupportedNetwork", "oneOf": [{ "$ref": "#/definitions/public-network" }, { "$ref": "#/definitions/custom-network" }] }, "flashbotTransactionMode": { "title": "FlashbotTransactionMode", "type": "string", "description": "Fast mode has 2 key differences from the default Protect experience: \n1. Shared with all builders: By default, Protect transactions are only shared with the Flashbots Builder, which builds only a subset of all Ethereum blocks. In fast mode, transactions are shared with all registered builders to increase the number of blocks the user's transaction can be included in.\n2. Larger refund paid to validator: By default, only 10% of MEV-Share refunds are paid to validators. In fast mode, validators receive 50% of refunds which makes it more likely that the user’s transactions will be chosen in a given block.", "enum": ["flashbots-normal", "flashbots-fast"] }, "privateTransactionMode": { "title": "PrivateTransactionMode", "oneOf": [{ "$ref": "#/definitions/flashbotTransactionMode" }] }, "policy": { "title": "Policy", "type": "object", "properties": { "gas-price-cap": { "type": "integer" }, "whitelist-receivers": { "title": "WhitelistReceivers", "type": "array", "items": { "type": "string" } }, "eip1559-pricing": { "type": "boolean" }, "private-transactions": { "oneOf": [{ "description": "Backwards compatibility with the old private transaction mode", "type": "boolean" }, { "$ref": "#/definitions/privateTransactionMode" }] } } }, "relayer": { "title": "Relayer", "type": "object", "properties": { "name": { "type": "string" }, "network": { "$ref": "#/definitions/network", "format": "uri-reference" }, "min-balance": { "type": "integer" }, "address-from-relayer": { "title": "AddressFromRelayer", "anyOf": [{ "type": "object" }, { "type": "string" }] }, "policy": { "$ref": "#/definitions/policy", "format": "uri-reference" }, "api-keys": { "title": "RelayerAPIKeys", "type": "array", "items": { "type": "string" } }, "relayer-group-id": { "$ref": "#/definitions/defender-id", "format": "uri-reference" }, "notification-channels": { "$ref": "#/definitions/notification-channels", "format": "uri-reference" } }, "required": ["name", "network", "min-balance"] }, "notification-channels": { "title": "NotificationChannels", "type": "object", "properties": { "events": { "title": "Events", "type": "array", "items": { "type": "string", "enum": ["pending", "sent", "submitted", "inmempool", "mined", "confirmed", "failed", "expired"] } }, "notification-ids": { "title": "NotificationIds", "type": "array", "items": { "$ref": "#/definitions/notification-or-defender-id", "format": "uri-reference" } } }, "required": ["events", "notification-ids"] }, "relayer-group-relayer": { "title": "RelayerGroupRelayer", "type": "object", "properties": { "relayer-id": { "$ref": "#/definitions/defender-id", "format": "uri-reference" }, "address": { "$ref": "#/definitions/address", "format": "uri-reference" }, "key-id": { "type": "string" }, "balance": { "type": "string" } }, "required": ["relayerId", "address"] }, "relayer-group": { "title": "RelayerGroup", "type": "object", "properties": { "name": { "type": "string" }, "network": { "$ref": "#/definitions/network", "format": "uri-reference" }, "min-balance": { "type": "integer" }, "relayers": { "type": "integer" }, "policy": { "$ref": "#/definitions/policy", "format": "uri-reference" }, "user-weight-caps": { "title": "UserWeightCaps", "type": "object", "additionalProperties": { "type": "integer" } }, "notification-channels": { "$ref": "#/definitions/notification-channels", "format": "uri-reference" }, "api-keys": { "title": "RelayerGroupAPIKeys", "type": "array", "items": { "type": "string" } } }, "required": ["name", "network", "min-balance"] }, "contract": { "title": "Contract", "type": "object", "properties": { "name": { "type": "string" }, "address": { "$ref": "#/definitions/address", "format": "uri-reference" }, "network": { "$ref": "#/definitions/network", "format": "uri-reference" }, "abi": { "$ref": "#/definitions/abi" }, "nat-spec": { "type": "string" } }, "required": ["name", "address", "network"] }, "notificationType": { "title": "NotificationType", "type": "string", "enum": ["slack", "email", "discord", "telegram", "datadog", "webhook", "opsgenie", "pager-duty"] }, "datadogConfig": { "title": "DatadogConfig", "type": "object", "properties": { "api-key": { "type": "string" }, "metric-prefix": { "type": "string", "maxLength": 100, "pattern": "^[A-Za-z]+[A-Za-z0-9_\\.]*\\.$" } }, "required": ["api-key", "metric-prefix"] }, "urlConfig": { "title": "UrlConfig", "type": "object", "properties": { "url": { "type": "string", "format": "uri" } }, "required": ["url"] }, "telegramBotConfig": { "title": "TelegramConfig", "type": "object", "properties": { "bot-token": { "type": "string" }, "chat-id": { "type": "string" } }, "required": ["bot-token", "chat-id"] }, "emailConfig": { "title": "EmailConfig", "type": "object", "properties": { "emails": { "title": "Emails", "type": "array", "items": { "type": "string", "format": "email" }, "default": [] } }, "required": ["emails"] }, "opsgenieUserType": { "title": "OpsgenieUserType", "type": "string", "enum": ["team", "user", "escalation", "schedule"] }, "opsgeniePriorityLevel": { "title": "OpsgeniePriorityLevel", "type": "string", "enum": ["P1", "P2", "P3", "P4", "P5"] }, "opsgenieInstanceLocation": { "title": "OpsgenieInstanceLocation", "type": "string", "enum": ["US", "EU"] }, "opsgenieUser": { "title": "OpsgenieUser", "type": "object", "properties": { "username": { "type": "string" }, "fullName": { "type": "string" }, "id": { "type": "string" }, "type": { "$ref": "#/definitions/opsgenieUserType" } }, "required": ["type", "username"], "additionalProperties": false }, "opsgenieConfig": { "title": "OpsgenieConfig", "properties": { "apiKey": { "type": "string" }, "instanceLocation": { "$ref": "#/definitions/opsgenieInstanceLocation" }, "alias": { "type": "string", "maxLength": 512 }, "responders": { "title": "OpsgenieConfigResponders", "type": "array", "items": { "$ref": "#/definitions/opsgenieUser" } }, "visibleTo": { "title": "OpsgenieConfigVisibleTo", "type": "array", "items": { "$ref": "#/definitions/opsgenieUser" } }, "actions": { "title": "OpsgenieConfigActions", "type": "array", "maxItems": 10, "items": { "type": "string", "maxLength": 50 } }, "tags": { "title": "OpsgenieConfigTags", "type": "array", "maxItems": 10, "items": { "type": "string", "maxLength": 50 } }, "details": { "title": "OpsgenieConfigDetails", "type": "object", "additionalProperties": { "type": "string" } }, "entity": { "type": "string", "maxLength": 512 }, "priority": { "$ref": "#/definitions/opsgeniePriorityLevel" }, "note": { "type": "string", "maxLength": 25000 } }, "required": ["apiKey", "instanceLocation"], "additionalProperties": false }, "pagerDutyEventType": { "title": "PagerDutyEventType", "type": "string", "enum": ["change", "alert"] }, "pagerDutyEventAction": { "title": "PagerDutyEventAction", "type": "string", "enum": ["trigger", "acknowledge", "resolve"] }, "pagerDutySeverity": { "title": "PagerDutySeverity", "type": "string", "enum": ["critical", "error", "warning", "info"] }, "pagerDutyConfig": { "title": "PagerDutyConfig", "properties": { "token": { "type": "string" }, "eventType": { "$ref": "#/definitions/pagerDutyEventType" }, "routingKey": { "type": "string", "maxLength": 32, "minLength": 32 }, "eventAction": { "$ref": "#/definitions/pagerDutyEventAction" }, "dedupKey": { "type": "string", "maxLength": 255 }, "severity": { "$ref": "#/definitions/pagerDutySeverity" }, "component": { "type": "string" }, "group": { "type": "string" }, "class": { "type": "string" }, "customDetails": { "title": "PagerDutyConfigCustomDetails", "type": "object", "additionalProperties": { "type": "string" } } }, "if": { "properties": { "eventType": { "const": "alert" } } }, "then": { "required": ["eventAction", "severity"] }, "required": ["token", "eventType", "routingKey"], "additionalProperties": false }, "notification": { "title": "Notification", "type": "object", "properties": { "type": { "$ref": "#/definitions/notificationType", "format": "uri-reference" }, "name": { "type": "string" }, "paused": { "type": "boolean" }, "config": { "title": "Config", "type": "object", "oneOf": [{ "$ref": "#/definitions/emailConfig", "format": "uri-reference" }, { "$ref": "#/definitions/telegramBotConfig", "format": "uri-reference" }, { "$ref": "#/definitions/datadogConfig", "format": "uri-reference" }, { "$ref": "#/definitions/urlConfig", "format": "uri-reference" }, { "$ref": "#/definitions/opsgenieConfig", "format": "uri-reference" }, { "$ref": "#/definitions/pagerDutyConfig", "format": "uri-reference" }] } }, "required": ["type", "name", "paused", "config"] }, "block-monitor": { "title": "BlockMonitor", "type": "object", "properties": { "name": { "type": "string" }, "type": { "type": "string", "enum": ["BLOCK"] }, "network": { "$ref": "#/definitions/network", "format": "uri-reference" }, "contracts": { "title": "Contracts", "type": "array", "items": { "$ref": "#/definitions/contract-or-defender-id", "format": "uri-reference" } }, "addresses": { "title": "Addresses", "type": "array", "items": { "$ref": "#/definitions/address", "format": "uri-reference" } }, "abi": { "$ref": "#/definitions/abi" }, "alert-threshold": { "title": "AlertThreshold", "type": "object", "properties": { "amount": { "type": "integer" }, "window-seconds": { "type": "integer" } }, "required": ["amount", "window-seconds"] }, "paused": { "type": "boolean" }, "skip-abi-validation": { "type": "boolean", "description": "A boolean value that indicates whether the UI should skip ABI validation checks. Enable this if you wish to use custom or partial ABIs for your monitors." }, "action-condition": { "$ref": "#/definitions/action-or-defender-id", "format": "uri-reference" }, "action-trigger": { "$ref": "#/definitions/action-or-defender-id", "format": "uri-reference" }, "confirm-level": { "oneOf": [{ "type": "string", "enum": ["safe", "finalized"] }, { "type": "integer" }] }, "notify-config": { "title": "NotifyConfig", "type": "object", "properties": { "timeout": { "type": "integer" }, "message": { "type": "string" }, "message-subject": { "type": "string" }, "severity-level": { "type": "string", "enum": ["LOW", "MEDIUM", "HIGH"] }, "channels": { "title": "Channels", "type": "array", "items": { "$ref": "#/definitions/notification-or-defender-id", "format": "uri-reference" } } }, "required": ["channels"] }, "conditions": { "title": "Conditions", "type": "object", "properties": { "event": { "title": "Event", "type": "array", "items": { "title": "EventItems", "type": "object", "properties": { "signature": { "type": "string" }, "expression": { "type": "string" } }, "required": ["signature"] } }, "function": { "title": "Function", "type": "array", "items": { "title": "FunctionItems", "type": "object", "properties": { "signature": { "type": "string" }, "expression": { "type": "string" } }, "required": ["signature"] } }, "transaction": { "type": "string" } } }, "risk-category": { "$ref": "#/definitions/risk-category" } }, "required": ["name", "type", "network", "notify-config"] }, "monitor": { "title": "Monitor", "type": "object", "oneOf": [{ "$ref": "#/definitions/block-monitor", "format": "uri-reference" }] }, "relayer-or-defender-id": { "title": "RelayerOrDefenderID", "anyOf": [{ "type": "object", "$ref": "#/definitions/relayer", "format": "uri-reference" }, { "type": "string", "$ref": "#/definitions/defender-id", "format": "uri-reference" }] }, "relayer-group-or-defender-id": { "title": "RelayerGroupOrDefenderID", "anyOf": [{ "type": "object", "$ref": "#/definitions/relayer-group", "format": "uri-reference" }, { "type": "string", "$ref": "#/definitions/defender-id", "format": "uri-reference" }] }, "action-or-defender-id": { "title": "ActionOrDefenderID", "anyOf": [{ "type": "object", "$ref": "#/definitions/action", "format": "uri-reference" }, { "type": "string", "$ref": "#/definitions/defender-id", "format": "uri-reference" }] }, "monitor-or-defender-id": { "title": "MonitorOrDefenderID", "anyOf": [{ "type": "object", "$ref": "#/definitions/monitor", "format": "uri-reference" }, { "type": "string", "$ref": "#/definitions/defender-id", "format": "uri-reference" }] }, "forked-network-or-defender-id": { "title": "ForkedNetworkOrDefenderID", "anyOf": [{ "type": "object", "$ref": "#/definitions/forked-network-request", "format": "uri-reference" }, { "type": "string", "$ref": "#/definitions/defender-id", "format": "uri-reference" }] }, "private-network-or-defender-id": { "title": "PrivateNetworkOrDefenderID", "anyOf": [{ "type": "object", "$ref": "#/definitions/private-network-request", "format": "uri-reference" }, { "type": "string", "$ref": "#/definitions/defender-id", "format": "uri-reference" }] }, "block-explorer-api-key-or-defender-id": { "title": "BlockExplorerApiKeyOrDefenderID", "anyOf": [{ "type": "object", "$ref": "#/definitions/block-explorer-api-key", "format": "uri-reference" }, { "type": "string", "$ref": "#/definitions/defender-id", "format": "uri-reference" }] }, "notification-or-defender-id": { "title": "NotificationOrDefenderID", "anyOf": [{ "type": "object", "$ref": "#/definitions/notification", "format": "uri-reference" }, { "type": "string", "$ref": "#/definitions/defender-id", "format": "uri-reference" }] }, "contract-or-defender-id": { "title": "ContractOrDefenderID", "anyOf": [{ "type": "object", "$ref": "#/definitions/contract", "format": "uri-reference" }, { "title": "DefenderID", "type": "string", "pattern": "^[a-zA-Z0-9]+[-]{1}0x[a-fA-F0-9]{40}$" }] }, "policy-or-defender-id": { "title": "PolicyOrDefenderID", "anyOf": [{ "type": "object", "$ref": "#/definitions/policy", "format": "uri-reference" }, { "type": "string", "$ref": "#/definitions/defender-id", "format": "uri-reference" }] }, "action": { "title": "Action", "type": "object", "properties": { "name": { "type": "string" }, "path": { "type": "string" }, "relayer": { "$ref": "#/definitions/relayer-or-defender-id", "format": "uri-reference" }, "trigger": { "title": "Trigger", "type": "object", "properties": { "type": { "title": "TriggerType", "type": "string", "enum": ["schedule", "webhook", "sentinel", "monitor-filter"] }, "cron": { "title": "TriggerCron", "type": "string" }, "frequency": { "title": "TriggerFrequency", "type": "integer" } }, "if": { "properties": { "type": { "const": "schedule" } } }, "then": { "oneOf": [{ "required": ["cron"] }, { "required": ["frequency"] }] }, "else": {}, "required": ["type"] }, "paused": { "type": "boolean" }, "environment-variables": { "type": "object", "additionalProperties": { "type": "string" } } }, "required": ["name", "path", "trigger", "paused"] }, "block-explorer-api-key": { "title": "BlockExplorerApiKey", "type": "object", "properties": { "key": { "type": "string" }, "network": { "$ref": "#/definitions/network", "format": "uri-reference" } }, "required": ["key", "network"] }, "abi": { "title": "AbiType", "anyOf": [{ "title": "StringABI", "type": "string" }, { "title": "ArrayABI", "type": "array" }] }, "safe-contracts": { "title": "SafeContracts", "type": "object", "additionalProperties": false, "required": ["master", "proxy-factory", "multi-send-call-only"], "properties": { "master": { "$ref": "#/definitions/address", "format": "uri-reference" }, "proxy-factory": { "$ref": "#/definitions/address", "format": "uri-reference" }, "multi-send-call-only": { "$ref": "#/definitions/address", "format": "uri-reference" }, "create-call": { "$ref": "#/definitions/address", "format": "uri-reference" } } }, "tenant-network-eip-configuration": { "title": "TenantNetworkEIPConfiguration", "type": "object", "additionalProperties": false, "properties": { "isEIP1559": { "type": "boolean" } } }, "tenant-network-configuration": { "title": "TenantNetworkConfiguration", "type": "object", "additionalProperties": false, "required": ["symbol"], "properties": { "symbol": { "type": "string", "minLength": 3, "maxLength": 6 }, "eips": { "$ref": "#/definitions/tenant-network-eip-configuration" }, "safe-contracts": { "$ref": "#/definitions/safe-contracts" }, "subgraph-url": { "type": "string", "pattern": "^(http(s)?://)[\\w.-]+(?:\\.[\\w\\.-]+)+[\\w\\-\\._~:/?#[\\]@!\\$&'\\(\\)\\*\\+,;=.]+$" } } }, "forked-network-request": { "title": "ForkedNetworkRequest", "type": "object", "additionalProperties": false, "required": ["name", "supported-network", "rpc-url"], "properties": { "name": { "$ref": "#/definitions/tenant-network" }, "supported-network": { "$ref": "#/definitions/supported-network" }, "rpc-url": { "type": "string", "pattern": "^(http|https)://" }, "api-key": { "type": "string" }, "block-explorer-url": { "type": "string", "pattern": "^(http(s)?://)[\\w.-]+(?:\\.[\\w\\.-]+)+[\\w\\-\\._~:/?#[\\]@!\\$&'\\(\\)\\*\\+,;=.]+$" } } }, "private-network-request": { "title": "PrivateNetworkRequest", "type": "object", "additionalProperties": false, "required": ["name", "configuration", "rpc-url"], "properties": { "name": { "$ref": "#/definitions/tenant-network" }, "configuration": { "$ref": "#/definitions/tenant-network-configuration" }, "rpc-url": { "type": "string", "pattern": "^(http|https)://" }, "api-key": { "type": "string" }, "block-explorer-url": { "type": "string", "pattern": "^(http(s)?://)[\\w.-]+(?:\\.[\\w\\.-]+)+[\\w\\-\\._~:/?#[\\]@!\\$&'\\(\\)\\*\\+,;=.]+$" } } } } }